KUDO_WYF 2023-05-17 17:11 采纳率: 83.3%
浏览 25
已结题

C语言关于fgets()函数和指针数组的问题

我在使用指针数组的时候碰到了问题,用fgets()函数无法往相应地址指向的内存放字符串。
首先我定义了一个头文件和一个源文件来写函数,如下面两张图所示:

img

img

函数的前两个参数分别为路径名和文件名,在函数里组合成为绝对路径供函数fopen()使用,第三个参数为指针数组。
按我的想法,fgets(inhalte[zaehler],Line_Max,fp) 应该将读取到的字符串储存在inhalte[zaehler]所指向的内存,但是我发现main函数里的while循环并没有执行,不知道是什么原因。main函数和运行结果如下:

img

img

  • 写回答

2条回答 默认 最新

  • 技术宅program 2023-05-17 17:15
    关注

    以下答案由GPT-4.0Plus大模型与博主A努力中.......共同编写:
    fgets()函数读取字符串后,并没有真正将字符串存储在inhalte[zaehler]指向的内存中。
    fgets()函数的原型是:
    char *fgets(char *str, int n, FILE *stream);
    它的作用是:从stream中读取n-1个字符,并将其存储在str指向的内存中。
    但在您的代码中,str参数传入的是inhalte[zaehler],这是一个指针,并不是真正的内存块。
    fgets()无法将读取的字符串存储在一个指针本身,它需要一个真实的、可写的内存块。
    所以,正确的用法应该是:

    1. 首先为指针数组的每个元素分配内存:
    c
    char *inhalte[100];
    for (int i=0; i<100; i++) {
        inhalte[i] = (char *) malloc(Line_Max*sizeof(char)); 
    }
    
    
    1. 然后将这些内存块的地址存入指针数组:
    c
    inhalte[0] = 第一块内存的地址;
    inhalte[1] = 第二块内存的地址;
    
    

    ...

    1. 当调用fgets()时,传入这些内存块的地址,fgets()就可以将读取的字符串存储在相应的内存中:
    c 
    fgets(inhalte[0], Line_Max, fp);  // 存储在第一块内存中
    fgets(inhalte[1], Line_Max, fp);  // 存储在第二块内存中
    
    

    ...
    4. 通过指针数组的元素 access 这些内存块。
    所以,总结下您的代码应该修改为:

    1. 为指针数组的每个元素分配内存
    2. 将内存块地址存入指针数组
    3. 将内存块地址作为fgets()的参数,读取字符串
    4. 访问指针数组的元素,得到内存块中的字符串
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月17日
  • 已采纳回答 5月17日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 canal读取mysql时报错
  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据