我的程序将把数据从txt读入我的结构。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct competitor
{
int id;
char* name;
char* nationality;
char* sex;
double weight;
char* event;
}competitor;
int sportolok_beolvas(char* filename, competitor* array)
{
FILE* file = fopen(filename, "r");
int n = 0;
while(fscanf(file, "%d %s %s %s %lf %s", &array[n].id, array[n].name, array[n].nationality, array[n].sex, &array[n].weight, array[n].event) == 6)
{
++n;
}
fclose(file);
return n;
}
int main()
{
competitor* array;
int i = sportolok_beolvas("sportolok.txt", array);
printf("%d", i);
return 0;
}
这个函数是根据我以前的项目做的,这个项目使用的函数几乎是一样的。把文件读入到我的结构中。我不明白它有什么问题。
1条答案
按热度按时间roejwanj1#
一个字符串实际上是一个字符数组,结尾是一个空终止符。
可以使用普通数组创建字符串,如
或者,您可以使用指针并动态分配内存,例如
这两个例子几乎是等价的(数组和指针之间有一些重要的区别,但我们先把这些放在一边)。这两个例子都创建了一个有三个字符的字符串(加上空终止符)。
但是,如果您有
那么你就有了 * 未定义的行为 *,因为指针
str
没有指向任何地方。回到代码中,字符串最简单的解决方案是将它们从指针改为数组:
至于
competitor
结构的数组,我建议您在循环中根据需要动态创建它,并根据需要重新分配。读入单个已定义的
competitor
结构对象,并将其复制到当前数组元素中。完成后,返回指向数组第一个元素的指针。
也许是这样的: