2016-10-03 86 views
1

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

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

你知道字符串是如何用C表示的吗? –

+5

'char first [9] =“”,second [4] =“”,third [4] =“”;' – BLUEPIXY

+0

@EugeneSh。是的,作为一组字符。 – T94j0

回答

1

如目前所定义的,阵列可以仅存储非常短字符串:

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

scanf格式字符串应该是:当你存储字符串比数组的大小为secondthird不再

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

当前的代码调用未定义的行为。

为了解析长字符串,你应该定义数组作为

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

你应该检查scanf()返回值。