fgets,seg fault和字符串数组

时间:2014-08-22 17:14:30

标签: c fgets

我无法让这个简短的程序工作。它还不完整,但我想解决我在编译时遇到的错误。几乎有什么的要点:

要在命令行上读取(子)字符串,并在每个单词中搜索该(子)字符串'在stdin。打印包含此(子)字符串的每个单词。如果找不到匹配项,则输出相应的消息。此外,如果少于或多个命令行参数,则输出用法消息。

我理解seg错误可能来自尝试访问不存在的索引或无限循环。一些bug测试表明问题确实存在于while循环中,但我无法弄清楚原因。

结果是当我在命令行输入:./match ant < match.data时,match.data持有

fantastic dog x gooblygooblygoo antx xant ant anananananananananananan

当fgets到达match.data的末尾时,它是否返回NULL并且循环终止?

谢谢!

enter image description here

1 个答案:

答案 0 :(得分:4)

您的代码存在两个问题:

  1. 您在fgets调用中使用未初始化的指针(数组中的指针都未初始化)

  2. 你在指针中执行sizeof,它返回指针的大小,而不是它指向的位置。

  3. 解决第一个问题是为数组内的指针分配内存。这可以通过动态分配(使用例如malloc)或使其成为数组数组来完成。

    当第一个点被解决时,很容易解决第二个点,因为你有了字符串的大小。


    更接近地读取代码,实际初始化数组中的第一个指针,当它指向一个包含五个字符的常量(只读)数组时,字符文字"NOPE"。除了在使用未初始化数据时使用undefined behavior,当你尝试写入只读内存时,还有另一种情况(如果第一个输入超过4个字符,可能会超出边界)。