【问题标题】:Exception: 'Access violation reading location'例外:“访问冲突读取位置”
【发布时间】:2019-10-26 19:56:56
【问题描述】:

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

【问题讨论】:

  • 当到达最后一次迭代时, strtok(NULL, del) ;返回 NULL 并且您的代码执行 strcpy(now, NULL)

标签: c++ exception char strtok


【解决方案1】:

我发现代码有 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2016-05-28
    • 2017-01-09
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多