2017-08-15 113 views
-1

當我用一個用戶輸入的時候,至少有一個空格時,字符指針只是剛到第一個空格,爲什麼? 請提供如果需要使用C中的字符指針的字符串

char *ptr; 
ptr=(char*)malloc(sizeof(char)); 
scanf("%Ns",ptr); 

*編輯

+4

首先,爲* one *字符分配內存。要讀取一個字符串,至少需要*兩個*(一個用於字符,一個用於所有字符串所需的* null終止符*)。 –

+0

你爲什麼在C中使用'malloc'?這是不好的 - 請谷歌它 –

+3

至於你的問題,這是什麼['scanf'](http://en.cppreference.com/w/c/io/fscanf)''%s「'格式*做*。它讀取*空格分隔的*「單詞」。如果你想閱讀整行文章,我推薦['fgets'](http://en.cppreference.com/w/c/io/fgets)。 –

回答

1

%s格式說明爲scanf讀取非空白字符序列的替代方法。這意味着它在閱讀空格,換行符,標籤等後停止。

此外,您只爲單個空間分配char。這僅僅足以存儲終止的空字節。您需要爲您希望讀取的字符數加上至少足夠的空間,併爲空終止符分配一個空格。

如果您想閱讀全文的文字,您應該使用fgets函數。

char line[100]; 
fgets(line, 100, stdin); 
// if a newline was stored, remove it 
if (strrchr(line, '\n') != NULL) { 
    *(strrchr(line, '\n')) = '\0'; 
}