gpt4 book ai didi

c - fgets、seg 错误和字符串数组

转载 作者:行者123 更新时间:2023-11-30 20:48:57 26 4
gpt4 key购买 nike

我无法让这个短程序运行。它并不完整,但我想解决编译时遇到的段错误。其要点如下:

在命令行上读取(子)字符串,并在标准输入上的每个“单词”中搜索该(子)字符串。包含此(子)字符串的每个单词都会被打印。如果找不到匹配项,则会输出相应的消息。另外,如果命令行参数少于或多于一个,则会输出一条用法消息。

我知道尝试访问不存在的索引或无限循环可能会导致段错误。一点点错误测试表明问题确实出在 while 循环中,但我不明白为什么。

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


fantastic
dog
x
gooblygooblygoo
antx
xant
ant
anananananananananananan

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

谢谢!

enter image description here

最佳答案

您的代码有两个问题:

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

  2. 您正在指针中执行 sizeof,它返回指针的大小,而不是它所指向的内容。

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

当第一点解决后,解决第二点就很容易了,因为你就知道了字符串的大小。

<小时/>

仔细阅读你的代码,你实际上初始化了数组中的第一个指针,当你让它指向一个由五个字符组成的常量(只读)数组时,字 rune 字“NOPE”。除了有undefined behavior当使用未初始化的数据时,当您尝试写入只读内存时,您会遇到另一种情况(如果第一个输入超过四个字符,则可能会超出范围)。

关于c - fgets、seg 错误和字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452333/

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