0

我在尝试创建一个数组然后打印数组中的前 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]'”

4

4 回答 4

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]);
}
于 2013-10-05T22:39:43.717 回答
0
char term[200][40];

是一个包含 200 个字符串缓冲区的数组,可以容纳 40 个字符。

fgets(term, 40, ifp);

尝试从文件中读取字符串并将其存储到第一个参数指向的缓冲区(期望char*)。

尝试通过以下方式阅读:

int i = 0;
while (fgets(&term[i++][0], 40, ifp);

fgets将返回NULL失败使其停止。

于 2013-10-05T22:40:00.963 回答
0

这是因为term任何数组在传递给函数时都被视为指向其第一个元素的指针。
而术语的第一个元素是...... 40个字符的数组,所以你通过

char (*)[40]

to fgets,它期望

char *

.
顺便说一句,你的编译器比我早告诉你同样的事情。

于 2013-10-05T22:44:18.957 回答
0
 fgets(term, 40, ifp);

        for(i = 1; i < 11; i++) {
        printf("%s", term[i-1]);
        }

在上面的代码中,您从中读取一个字符串ifp并将其存储,term但随后您尝试读取 10 个字符串,并且由于未初始化术语,您不知道将打印什么

于 2013-10-05T22:45:09.433 回答