2016-10-03 85 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()返回值。