Исключение: «Место чтения нарушения доступа» - PullRequest
0 голосов
/ 26 октября 2019

Попытка прочитать все слова из строки с помощью strtok (), но она возвращает исключение, когда достигает конца, и я просто не могу понять, почему. Извините, если дубликат.

strcpy(now, strtok(text, del));
do {
    if (palindrome(now))
        add_list(now);
    p = strtok(NULL, del);
    strcpy(now,p);
} while (p);

Я получаю это:

Exception thrown at 0x7C07EE43 (ucrtbased.dll) in strings.exe: 0xC0000005: Access violation reading location 0x00000000.

1 Ответ

2 голосов
/ 26 октября 2019

Я вижу 2 проблемы с кодом:

  1. Первый вызов strtok может вернуть NULL. Если это произойдет, вам не следует снова звонить strtok.

  2. Второй вызов strtok может вернуть NULL. В этом случае strcpy(now,p); завершится сбоем, поскольку его аргументы не могут быть NULL.

Измените код на что-то вроде этого (не проверено):

p = strtok(text, del);
while (p) {
    strcpy(now, p);
    if (palindrome(now))
        add_list(now);
    p = strtok(NULL, del);
}
...