例外:“访问冲突读取位置”

chapphw

尝试使用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.

生锈的

我看到代码有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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章