我在使用指针数组的时候碰到了问题,用fgets()函数无法往相应地址指向的内存放字符串。
首先我定义了一个头文件和一个源文件来写函数,如下面两张图所示:
函数的前两个参数分别为路径名和文件名,在函数里组合成为绝对路径供函数fopen()使用,第三个参数为指针数组。
按我的想法,fgets(inhalte[zaehler],Line_Max,fp) 应该将读取到的字符串储存在inhalte[zaehler]所指向的内存,但是我发现main函数里的while循环并没有执行,不知道是什么原因。main函数和运行结果如下:
以下答案由GPT-4.0Plus大模型与博主A努力中.......共同编写:
fgets()函数读取字符串后,并没有真正将字符串存储在inhalte[zaehler]指向的内存中。
fgets()函数的原型是:
char *fgets(char *str, int n, FILE *stream);
它的作用是:从stream中读取n-1个字符,并将其存储在str指向的内存中。
但在您的代码中,str参数传入的是inhalte[zaehler],这是一个指针,并不是真正的内存块。
fgets()无法将读取的字符串存储在一个指针本身,它需要一个真实的、可写的内存块。
所以,正确的用法应该是:
c
char *inhalte[100];
for (int i=0; i<100; i++) {
inhalte[i] = (char *) malloc(Line_Max*sizeof(char));
}
c
inhalte[0] = 第一块内存的地址;
inhalte[1] = 第二块内存的地址;
...
c
fgets(inhalte[0], Line_Max, fp); // 存储在第一块内存中
fgets(inhalte[1], Line_Max, fp); // 存储在第二块内存中
...
4. 通过指针数组的元素 access 这些内存块。
所以,总结下您的代码应该修改为:
你都没给p分配内存呀
实参没分配内存,那么形参得到的也是个野指针
你往野指针里写字符串,肯定写不进去呀