C语言 使用scanf存储字符串的问题



我在c中遇到了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: %sn2: %sn3: %s", first, second, third);
}

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

  • 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()的返回值

相关内容

  • 没有找到相关文章

最新更新