这是我的代码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
如果我的文本文件包含
1 123 karan
2 1234哈哈
当我编译代码时,它说
可能在定义之前使用.
并且在运行代码时它说
不能创建进程!
我究竟做错了什么?
您需要使用&运算符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. */
^
Run Code Online (Sandbox Code Playgroud)
否则你将把垃圾first视为地址,并会产生未定义的行为.另外,请注意格式first.string.
有一个C FAQ
为什么调用scanf("%d",i)不起作用?
传递给scanf的参数必须始终是指针:对于每个转换的值,scanf通过填充您传递指针的位置之一来"返回"它.