打印出一串字符串

时间:2013-10-05 22:34:41

标签: c arrays string

我在尝试创建数组然后从数组中打印前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 个答案:

答案 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个字符串,因为术语未初始化您不知道会是什么打印