在C语言中将字符串文件转换为数组
我有一个用空格分隔的字符串文件,我想把这些字符串放到一个定义类型的数组中,但是我得到一个错误,说fscanf不接受char**,有人知道怎么做吗在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.");
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我相信。它将返回一个已分配的字符串指针。但不建议用于可移植代码。