我的代码中发生了一些奇怪的事情。 我使用fgets
来获取文件的每一行,然后使用strtok
来解析它。使用 Ubuntu,如果我使用gcc -o name name.c
编译,它会给我segmentation fault
。如果我使用-fsanitize=address
进行编译,则代码在没有任何 segv 的情况下完美运行。可能是什么问题?
代码为:
char* input;
fgets(input, 1000, stdin);
tok=strtok(input, pars);
但看起来它止步于fgets
.
可能有什么问题?
您的生产线
char* input;
只是声明指向char
的指针,而不为其分配地址。你认为它会指向哪里?
然后你想
fgets(input, 1000, stdin);
最多 999 个字符,但您从不为它们提供空间。
如果将第一行更改为
char input[1000];
它将在没有分割错误的情况下工作。
在你的代码中,很明显你想使用 fgets 获取一个字符串,编译器认为指针将用于指向一个地址,但你用它来指向一个字符串,导致 segv
正确的方法是这样的
char *input = malloc(<any size you want>);
fgets(input, <the size you want>, <the stream you want to get from>);
这种方法应该可以解决您的问题