使用scanf存储字符串的问题

时间:2016-10-03 14:32:06

标签: c gcc scanf cc

我在使用scanf时遇到问题。在阅读了有关如何解决scanf问题的其他Stackoverflow帖子后,我现在知道不建议使用scanf,但是我必须用它做家庭作业。我试图根据缓冲区大小存储3个具有最大大小的字符串值。当我编译并运行这个程序时,我输入值255 255 255,这就是打印的内容。

1:
2:
3: 255

以下是节目来源:

#include <stdio.h>
int main(){
     char first[8] = "", second[3] = "", third[3] = "";
     scanf("%8s %3s %3s", first, second, third);
     printf("1: %s\n2: %s\n3: %s", first, second, third);
}

1 个答案:

答案 0 :(得分:1)

按照目前的定义,数组只能存储非常短的字符串:

  • char first[8]只能存储7个字节和一个空终结符,
  • char second[3]只能存储2个字节和一个空终结符,
  • char third[3]只能存储2个字节和一个空终止符。

scanf格式字符串应为:

scanf("%7s %2s %2s", first, second, third);

当您存储的字符串长于secondthird的数组大小时,当前代码会调用未定义的行为。

要解析更长的字符串,您应该将数组定义为

char first[9] = "", second[4] = "", third[4] = "";

您应该检查scanf()的返回值。