我有一个由空格分隔的字符串文件,我希望将这些字符串放入已定义类型的数组中,但是我得到一个错误,说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++;
}
}
答案 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 **