以下答案由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] = 第二块内存的地址;
...
- 当调用fgets()时,传入这些内存块的地址,fgets()就可以将读取的字符串存储在相应的内存中:
c
fgets(inhalte[0], Line_Max, fp); // 存储在第一块内存中
fgets(inhalte[1], Line_Max, fp); // 存储在第二块内存中
...
4. 通过指针数组的元素 access 这些内存块。
所以,总结下您的代码应该修改为:
- 为指针数组的每个元素分配内存
- 将内存块地址存入指针数组
- 将内存块地址作为fgets()的参数,读取字符串
- 访问指针数组的元素,得到内存块中的字符串