用c语言从文件中读取字符串
我有这样一个输入文件:用c语言从文件中读取字符串,c,string,file,C,String,File,我有这样一个输入文件: 1 2 2 Medium 1 2 0 Medium 2 1 0 Medium 2 0 2 Medium int x,y,z; char cs[20]; fscanf(fp3,"%d",&x); fscanf(fp3,"%d",&y); fscanf(fp3,"%d",&z); fscanf(fp3,"%19s",cs); 我正在使用fscanf()读取整数值,这很好。有人知道如何读入字符串并将其放入字符串变量吗 int x,y,z;
1 2 2 Medium
1 2 0 Medium
2 1 0 Medium
2 0 2 Medium
int x,y,z;
char cs[20];
fscanf(fp3,"%d",&x);
fscanf(fp3,"%d",&y);
fscanf(fp3,"%d",&z);
fscanf(fp3,"%19s",cs);
我正在使用fscanf()读取整数值,这很好。有人知道如何读入字符串并将其放入字符串变量吗
int x,y,z;
char* cs;
fscanf(fp3,"%d",&x);
fscanf(fp3,"%d",&y);
fscanf(fp3,"%d",&z);
fscanf(fp3,"%s",&cs);
您需要已分配的空间来存储字符串。试着这样做:
1 2 2 Medium
1 2 0 Medium
2 1 0 Medium
2 0 2 Medium
int x,y,z;
char cs[20];
fscanf(fp3,"%d",&x);
fscanf(fp3,"%d",&y);
fscanf(fp3,"%d",&z);
fscanf(fp3,"%19s",cs);
您还可以一次扫描所有值:
fscanf(fp3,"%d %d %d %19s", &x, &y, &z, cs);
注意:始终在scanf模式中使用
%s
,以防止缓冲区溢出。您需要已分配的空间来存储字符串。试着这样做:
1 2 2 Medium
1 2 0 Medium
2 1 0 Medium
2 0 2 Medium
int x,y,z;
char cs[20];
fscanf(fp3,"%d",&x);
fscanf(fp3,"%d",&y);
fscanf(fp3,"%d",&z);
fscanf(fp3,"%19s",cs);
您还可以一次扫描所有值:
fscanf(fp3,"%d %d %d %19s", &x, &y, &z, cs);
注意:始终在扫描模式中使用%s
,以防止缓冲区溢出。
int a,b,c;
char str[256];
while(fscanf(fd, "%d %d %d %s ", &a, &b, &c, str) == 4){
//get some coffee
}
这是一个标准的文件循环,而不是结束循环。另外,str
不需要&
,因为它已经是一个指针,不需要像a
、b
或c
那样被引用。格式字符串末尾的空格位于%s
之后,表示一旦读取了一个空格,它将停止。这样一来,它就不会包含在字符串str
中,可以说:
int a,b,c;
char str[256];
while(fscanf(fd, "%d %d %d %s ", &a, &b, &c, str) == 4){
//get some coffee
}
这是一个标准的文件循环,而不是结束循环。另外,
str
不需要&
,因为它已经是一个指针,不需要像a
、b
或c
那样被引用。格式字符串末尾的空格位于%s
之后,表示一旦读取了一个空格,它将停止。这样,它就不会包含在字符串str
中,请注意两件事:
- 您需要保留一个缓冲区以将字符串复制到其中李>
- 也永远不要使用普通的“%s”扫描模式。这应该被禁止。而是插入缓冲区的长度,在
和%
之间减去1。例如,8字节缓冲区的“%7s”s
- 您需要保留一个缓冲区以将字符串复制到其中李>
- 也永远不要使用普通的“%s”扫描模式。这应该被禁止。而是插入缓冲区的长度,在
和%
之间减去1。例如,8字节缓冲区的“%7s”s
- 注意两件事:
&cs[0]
而不是cs
。字符*的普通字符串可以。所以:strcmp(str1,&cs[0])代码>注意,您应该测试来自fscanf的返回值。如果不是4,则某些转换失败或到达文件结尾。您可以在一条指令中读取输入(我更喜欢它):if(fscanf(fp3,“%d%d%d%s”,&x,&y,&z,cs)!=4)/*错误*代码>我不认为“cs”应该与&,它是一个数组。正在使用。虽然你必须在字符数组上做一些指针巫术。例如,使用&cs[0]
而不是cs
。字符*的普通字符串可以。所以:strcmp(str1,&cs[0])代码>注意,您应该测试来自fscanf的返回值。如果不是4,则某些转换失败或到达文件结尾。您可以在一条指令中读取输入(我更喜欢它):if(fscanf(fp3,“%d%d%d%s”,&x,&y,&z,cs)!=4)/*错误*代码>这是未定义的行为<代码>str
未初始化且不指向任何地方。这就是OP获得未处理异常的原因。更好地测试转换次数,而不是EOF
修复了我的答案,也运行它。您可以用str
替换&str[0]
,是的,只需使用str
运行即可。我不确定C是否关心数组指针和普通指针<代码>str
未初始化且不指向任何地方。这就是OP获得未处理异常的原因。更好地测试转换次数,而不是EOF
修复了我的答案,也运行它。您可以用str
替换&str[0]
,是的,只需使用str
运行即可。我不确定C是否关心数组指针和普通指针。