gpt4 book ai didi

C - strtok(...) 上的意外段错误

转载 作者:行者123 更新时间:2023-12-01 13:57:59 27 4
gpt4 key购买 nike

我正在使用库的 strtok(...) 并且它似乎工作正常,直到结束条件,导致段错误和程序崩溃。 API 声称 strtok(...) 将在找不到更多标记时输出 NULL,这意味着,我认为,您必须捕获此 NULL 才能终止使用 strtok() 运行的任何循环……)。我需要做什么来捕获这个 NULL 以防止我的程序崩溃?我想象 NULL 被允许用作终止条件。

我准备了一个 SSCCE 供您观察这种行为。我需要 strtok(...) 才能为我正在编写的更大的软件工作,并且我得到了完全相同的分段行为。命令行的输出显示在此代码小插图下方(是的,我知道您使用 <...> 来封装库,但我很难让这篇文章显示代码库)。我在 Windows 8 操作系统上使用 gcc 版本 4.5.3,下面显示了我想象的两种不同风格的人如何尝试在循环中捕获 NULL。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

main(){
char* from = "12.34.56.78";
char * ch = ".";
char * token = strtok(from, ch);
printf("%s\n",token);
while(token != NULL){
token = strtok(NULL, ch);
printf("%s\n", token);
}
printf("Broke out of loop!");
while(strcmp(token, 0) != 0){
printf("%s\n",token);
token = strtok(NULL, ch);
}
}

############ 输出: ############

$ ./测试
12
34
56
78
段错误(核心转储)

最佳答案

strtok修改它的第一个参数。您从只读内存中传递一个字符串,当 strtok 时会发生段错误。试图改变它。尝试从:

char* from = "12.34.56.78";


char from[] = "12.34.56.78";

关于C - strtok(...) 上的意外段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com