c - 读取文件行,将每一行放入一个数组中,然后打印

标签 c string io

我刚刚想出如何用整数来做到这一点,所以决定试一试字符串,结果卡住了。

这是我的文件“kw”中的内容:

keyword0
keyword1
keyword2
keyword3

使用当前代码,我得到“错误:格式‘%s’需要‘char *’类型的参数,但参数 3 的类型为‘char **’

#include <stdio.h>

int main () {
    FILE *pFile;

    pFile = fopen("kw", "r");

    if (pFile != NULL) {

        char *a[3];
        int i;

        for(i = 0; i <= 3; i++) {
            fscanf(pFile, "%s", &a[i]);
            printf("%s\n", a[i]);
        }
    }
    return 0;
}

有人能给我指出正确的方向吗?谢谢。

最佳答案

这段代码有几个问题:

  • 您正在遍历数组 a 的四个元素,而数组只有三个元素。
  • 您没有为正在使用 scanf 读取的字符串分配空间.
  • 读取字符串时不传递地址的地址。

要解决第一个问题,请更改 <=对于 !=< ,像这样:

for(i = 0; i != 3; i++)

要解决第二个和第三个问题,请使用 malloc :

a[i] = malloc(21*sizeof(char));
fscanf(pFile, "%20s", a[i]);

完成分配的数据后,不要忘记释放字符串:

for(i = 0; i != 3; i++) {
    free(a[i]);
}

关于c - 读取文件行,将每一行放入一个数组中,然后打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683974/

相关文章:

C 和 Windows API : Changing Color Of Static Controls Which Are Child Of A Tab Control

objective-c - c中的非对称多维数组

java - 如何从 java 中的 json 字符串(带子项)中删除特定键名的所有键及其值

java - 可用并读取 : can we actually be nonblocking while using blocking Java I/O?

java - PrintWriter 自动刷新令人费解的逻辑

c - 如果我向一个条件变量发出 N 次信号,它会解锁 N 个线程吗?

c - 警告 : initialization from incompatible pointer type [-Wincompatible-pointer-types]

string - 如何快速从字符串中删除一些特定的 HTML 标签?

string - 验证 NSTextField 中的字符串是否为有效的 IP 地址或域名

java.lang.ArrayOutOfBounds 写入文件时出现异常