使用scanf存储字符串时出现问题

使用scanf存储字符串时出现问题,c,gcc,scanf,cc,C,Gcc,Scanf,Cc,我在C中遇到了scanf的问题。在阅读了其他有关如何解决scanf问题的Stackoverflow帖子后,我现在知道不推荐使用scanf,但我必须将其用于家庭作业。我试图存储3个字符串值,它们的最大大小取决于它们的缓冲区大小。当我编译并运行这个程序时,我输入值255,这就是打印的内容 1: 2: 3: 255 以下是节目来源: #include <stdio.h> int main(){ char first[8] = "", second[3] = "", third[

我在C中遇到了
scanf
的问题。在阅读了其他有关如何解决
scanf
问题的Stackoverflow帖子后,我现在知道不推荐使用
scanf
,但我必须将其用于家庭作业。我试图存储3个字符串值,它们的最大大小取决于它们的缓冲区大小。当我编译并运行这个程序时,我输入值
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);
}
#包括
int main(){
第一个字符[8]=”,第二个字符[3]=”,第三个字符[3]=”;
扫描频率(“%8s%3s%3s”,第一、第二、第三);
printf(“1:%s\n2:%s\n3:%s”,第一、第二、第三);
}

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

  • 字符优先[8]
    只能存储7个字节和一个空终止符
  • 字符秒[3]
    只能存储2个字节和一个空终止符
  • char third[3]
    只能存储2个字节和一个空终止符
scanf
格式字符串应为:

scanf("%7s %2s %2s", first, second, third);
当前代码调用未定义的行为,因为您存储的字符串长度大于
第二个
第三个
的数组大小

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

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

您应该检查
scanf()

的返回值,您知道字符串在C中是如何表示的吗?
char first[9]=“”,second[4]=“”,third[4]=“”以null结尾的数组chars@T94j0就那样?空终止呢?@LPs我知道了。我完全忘记了\0。谢谢你的帮助。