这是我的代码:
#include<stdio.h>
void main()
{
FILE *fp;
fp=fopen("text.txt","r");
if(fp==NULL)
printf("ahaha");
struct karan{
int index;
int number;
char string[10];
};
struct karan first;
fscanf(fp,"%d %d %s",first.index,first.number,first.string);
printf("%d %d %s",first.index,first.number,first.string);
}
如果我的文字文件包含
1 123 karan
2 1234哈哈
当我编译代码时,它说 在定义之前可能先使用。
并运行代码说明了
无法创建流程!
我做错了什么?
答案 0 :(得分:5)
您需要将&
运算符与fscanf
一起使用。
fscanf(fp,"%d %d %s",first.index,first.number,first.string); /* Wrong. */
fscanf(fp,"%d %d %9s", &first.index, &first.number, first.string); /* Right. */
^
否则,您将first
中的垃圾视为地址,并将导致未定义的行为。另外,请注意first.string
的格式。
有一个C FAQ
为什么呼叫scanf(&#34;%d&#34;,i)不起作用?
传递给scanf 的参数必须始终是指针:对于每个参数 价值转换,scanf``返回&#39;&#39;通过填写其中一个 您已经通过指针的位置。