C语言 分段故障和地址清理器



我的代码中发生了一些奇怪的事情。 我使用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>);

这种方法应该可以解决您的问题

相关内容

  • 没有找到相关文章

最新更新