C中的字符串文件到数组中

时间:2011-09-06 13:12:41

标签: c arrays string file-io

我有一个由空格分隔的字符串文件,我希望将这些字符串放入已定义类型的数组中,但是我得到一个错误,说fscanf不接受char **,有人知道怎么做这个吗?

typedef struct{
      char *string;
      int name;
      } DBZ;

DBZ Table[100];

fp = fopen("text.txt", "r");
if(fp == NULL)
{
    fprintf(stderr, "Error opening file.");
    exit(1);
}
else {
    int i=0;
    while(!feof(fp))
    {
        fscanf(fp,"%s", &Table[i].string);
        i++;
    }
}

3 个答案:

答案 0 :(得分:2)

  

&安培;表[I] .string

你正在获取一个指针的地址,这是一个指针指针,它是一个char **

另外,

fscanf不提供分配所需内存的功能。你必须malloc一个足够大的块来保存你的文件中的什么。然后你会想要使用比fscanf更安全的东西,更喜欢most secure thing available *,以确保你不会覆盖缓冲区。

else {
    int i=0;
    while(!feof(fp))
    {
        Table[i].string = malloc(100);
        fscanf_s(fp,"%s", Table[i].string, 100);
        i++;
    }
}

*这些是Microsoft扩展,您的平台可能有不同的东西。

答案 1 :(得分:0)

删除&,Table [i] .string已经是指针。

字符串也需要包含内存。您可以将结构的定义更改为:

typedef struct{
      char string[90];
      int name;
} DBZ;

假设您的数据适合90个字节。根据您的数据,它也可能是一种非常低效的存储方式。正如其他人所指出的那样,malloc()可以帮到你。

答案 2 :(得分:0)

您需要在结构中为char *string分配空间。你的%s需要 char * 而不是char **