我在尝试创建数组然后从数组中打印前10个元素时遇到了麻烦...这是我到目前为止所做的:
#include <stdio.h>
int main()
{
char term[200][40];
FILE *ifp;
int i;
ifp = fopen("terms.txt", "r");
if (ifp == NULL){
fprintf(stderr, "Could not open file...\n");
}
fgets(term, 40, ifp);
for(i = 1; i < 11; i++) {
printf("%s", term[i-1]);
}
}
此外,编译器给我一个错误:“注意:预期'char * 限制'但参数类型为'char(*)[40]'”
答案 0 :(得分:1)
fgets(term, 40, ifp); //THIS IS WRONG
修改for循环并删除上述语句
for(i = 1; i < 11 && fgets(term[i-1], 40, ifp)!=NULL ;i++) {
printf("%s", term[i-1]);
}
答案 1 :(得分:0)
char term[200][40];
是一个包含200个字符串缓冲区的数组,可以容纳40个字符。
fgets(term, 40, ifp);
尝试从文件中读取字符串并将其存储到第一个参数指向的缓冲区(期望char*
)。
尝试按以下方式阅读:
int i = 0;
while (fgets(&term[i++][0], 40, ifp);
fgets
会因失败而返回NULL
。
答案 2 :(得分:0)
那是因为term
作为任何数组,当传递给函数时,被视为指向其第一个元素的指针。
而且术语的第一个元素是...... 40个字符的数组,所以你传递
char (*)[40]
到fgets
,它需要
char *
。
顺便说一句,你的编译器早于我告诉你完全相同的东西。
答案 3 :(得分:0)
fgets(term, 40, ifp);
for(i = 1; i < 11; i++) {
printf("%s", term[i-1]);
}
在上面的代码段中,您从ifp
读取一个字符串并将其存储在term
中但是您尝试读取10个字符串,因为术语未初始化您不知道会是什么打印