例外:'Access violation reading location'

Exception: 'Access violation reading location'

尝试使用 strtok() 从字符串中读取所有单词,但是 returns 当它到达末尾时出现异常,我就是不明白为什么。对不起,如果重复。

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.

我发现代码有 2 个问题:

  1. 第一次调用strtok可以returnNULL。如果发生这种情况,您不应该再次调用 strtok

  2. 第二次调用strtok可以returnNULL。在那种情况下 strcpy(now,p); 会崩溃,因为它的参数可能不是 NULL.

将代码更改为如下内容(未经测试):

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