【问题标题】:sscanf reads string in ( )sscanf 读取 ( ) 中的字符串
【发布时间】:2011-04-07 03:19:06
【问题描述】:

这几天这个问题困扰着我。 例如,我想读取一个字符串,input = (-0.001999,-0.919191,-0.777777,999999.999999) 使用 sscanf。我的代码是

char x[10], y[10], z[10], angle[10];
sscanf( input+1, "%[^,],%[^,],%[^,],%[^)]", &x, %y, &z, &angle);
printf("%s %s %s %s\n", x, y, z, angle);

预期结果是 x=-0.001999 y=-0.919191 z=-0.777777 a=999999.999999

但我的 printf 显示:x=-0.001999 y=-0.919191 z=999 a=999999.999999

谁能帮我找出问题出在哪里??

谢谢!

【问题讨论】:

    标签: c string scanf


    【解决方案1】:

    角度不足以容纳输入数据,因此 z 被覆盖。试试这个:

    char x[80], y[80], z[80], angle[80];
    

    【讨论】:

      【解决方案2】:

      修复奇数缓冲区溢出等问题后,我得到:

      char input[] = "(-0.001999,-0.919191,-0.777777,999999.999999)";
      char x[10], y[10], z[10], angle[14];
      sscanf( input+1, "%9[^,],%9[^,],%9[^,],%13[^)]", x, y, z, angle);
      printf("%s %s %s %s\n", x, y, z, angle);
      

      我从中得到的输出是:

      -0.001999 -0.919191 -0.777777 999999.999999
      

      【讨论】:

        【解决方案3】:

        您的 sscanf 应该是 sscanf( input+1, "%[^,],%[^,],%[^,],%[^)]", x, y, z, angle); 因为您的数组已经是指针(并且 y 在您的示例中具有 % )。另一个响应者已经解决了根本问题。

        【讨论】:

          最近更新 更多