1

我有一个这样的输入文件:

1 2 2 Medium 
1 2 0 Medium
2 1 0 Medium
2 0 2 Medium

我正在使用 fscanf() 读取整数值,并且工作正常。有谁知道如何读取字符串并将其放入字符串变量中???

int x,y,z; 
char* cs; 
fscanf(fp3,"%d",&x); 
fscanf(fp3,"%d",&y); 
fscanf(fp3,"%d",&z); 
fscanf(fp3,"%s",&cs);
4

3 回答 3

2

您需要已经分配的空间来存储字符串。尝试这样的事情:

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);

注意:始终%<length>s在 scanf 模式中使用以防止缓冲区溢出。

于 2013-03-02T08:21:23.617 回答
1

2话想说:

  1. 使用一种格式字符串时看起来更好
  2. 你应该使用循环

这是一些代码:

int a,b,c;
char str[256];
while(fscanf(fd, "%d %d %d %s ", &a, &b, &c, str) == 4){
    //get some coffee
}

这是标准而不是文件结束循环。此外,str不需要,&因为它已经是一个指针,不需要像a,bc. 格式字符串末尾的空格,之后%s,意味着一旦读取一个空格,它将停止。这样它就不会包含在字符串中str

于 2013-03-02T08:27:22.770 回答
1

注意两点:

  • 您需要保留一个缓冲区来将字符串复制到其中。
  • 也永远不要使用普通的“%s”scanf 模式。应该禁止。而是插入缓冲区的长度,在%和之间减去 1 s。例如,“%7s”表示 8 字节缓冲区。
于 2013-03-02T09:53:38.017 回答