在C语言中将字符串文件转换为数组

在C语言中将字符串文件转换为数组,c,arrays,string,file-io,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.");

我有一个用空格分隔的字符串文件,我想把这些字符串放到一个定义类型的数组中,但是我得到一个错误,说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++;
    }
}

删除
&
,表[i]。字符串已经是指针

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

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

这假设您的数据可以容纳90个字节。根据您的数据是什么,它也可能是一种非常低效的存储方式
malloc()
,正如其他人所指出的,在这里可以帮助您。

您需要为结构中的
char*string
分配空间。您的%s使用的是字符*而不是字符**

&表[i].字符串

你需要一个指针的地址,这是一个指针的指针,这是一个字符**

而且

fscanf不提供分配所需内存的功能。你必须把一个大得足以容纳文件内容的块装入malloc。然后,您需要使用比fscanf更安全的方法,最好是*来确保不会覆盖缓冲区

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

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

但是,safer\u-than\fscanf链接可能不适用于他的平台。在第一行中,您的意思是
char**
。此外,为了确保您读取的字符数不超过一定数量,您可以将
“%100s”
作为格式字符串。不幸的是,与printf不同的是,您不能给出“%*s”并将该数字作为整数。如果您使用的是扩展,GNU C库有一个分配标志用于%s转换<代码>%as我相信。它将返回一个已分配的字符串指针。但不建议用于可移植代码。