例外:'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 个问题:
第一次调用strtok
可以returnNULL
。如果发生这种情况,您不应该再次调用 strtok
。
第二次调用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);
}
尝试使用 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 个问题:
第一次调用
strtok
可以returnNULL
。如果发生这种情况,您不应该再次调用strtok
。第二次调用
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);
}