我无法让这个简短的程序工作。它还不完整,但我想解决我在编译时遇到的错误。几乎有什么的要点:
要在命令行上读取(子)字符串,并在每个单词中搜索该(子)字符串'在stdin。打印包含此(子)字符串的每个单词。如果找不到匹配项,则输出相应的消息。此外,如果少于或多个命令行参数,则输出用法消息。
我理解seg错误可能来自尝试访问不存在的索引或无限循环。一些bug测试表明问题确实存在于while循环中,但我无法弄清楚原因。
结果是当我在命令行输入:./match ant < match.data
时,match.data
持有
fantastic
dog
x
gooblygooblygoo
antx
xant
ant
anananananananananananan
当fgets到达match.data的末尾时,它是否返回NULL并且循环终止?
谢谢!
答案 0 :(得分:4)
您的代码存在两个问题:
您在fgets
调用中使用未初始化的指针(数组中的指针都未初始化)
你在指针中执行sizeof
,它返回指针的大小,而不是它指向的位置。
解决第一个问题是为数组内的指针分配内存。这可以通过动态分配(使用例如malloc
)或使其成为数组数组来完成。
当第一个点被解决时,很容易解决第二个点,因为你有了字符串的大小。
更接近地读取代码,实际初始化数组中的第一个指针,当它指向一个包含五个字符的常量(只读)数组时,字符文字"NOPE"
。除了在使用未初始化数据时使用undefined behavior,当你尝试写入只读内存时,还有另一种情况(如果第一个输入超过4个字符,可能会超出边界)。