[英]Having trouble with array pointer in C
嗨,大家好,我是C語言的初學者,在測試數組指針和分配動態內存時遇到了麻煩。
int x,i=0;
char *myChar;
printf("Please enter the length: ");
scanf("%d",&x);
myChar = (char*)malloc(x*sizeof(char));
printf("Please enter %d characters:",x);
for(i=0;i<x;i++){
scanf("%c ",&myChar[i]);
}
for(i=0;i<x;i++){
printf("%c",myChar[i]);
}
free(myChar);
如果我輸入5作為長度,並輸入“ hello”作為字符數組,那么我得到的是“ hell”而不是“ hello”,這不好玩。 有人可以幫助我嗎? 謝謝
問題是您的scanf()
將其更改為
scanf(" %c",&myChar[i]);
%c
之前的空格將占用緩沖區中的換行符,這是因為在x
的值之后使用enter鍵,否則循環中的%c
將按此方式獲取換行符。 因此, %c
前面不能有空格。
最可能的罪魁禍首是以下scanf
調用:
scanf("%c ",&myChar[i]);
將其更改為以下內容:
scanf(" %c", &myChar[i]);
請注意,我將空格切換到%c
轉換說明符之前。
這就是發生的情況:輸入數組大小時,輸入流將包含以下字符: '5' '\\n'
。 第一個scanf
調用使用'5'
並將'\\n'
留在輸入流中。
當您輸入hello
,輸入流將包含'\\n' 'h' 'e' 'l' 'l' 'o' '\\n'
。 下一個scanf
調用從輸入流中讀取'\\n'
並將其分配給myChar[0]
因為%c
不會跳過前導空格。 因此,您最終從輸入流中讀取了'\\n' 'h' 'e' 'l' 'l'
myChar
'\\n' 'h' 'e' 'l' 'l'
並將它們分配給myChar
數組。
通過在%c
轉換說明符之前放置空格,可以告訴scanf
跳過所有前導空格並使用下一個非空格字符。
第一個scanf
不會吃掉用於完成長度輸入的返回鍵,因此它將成為您讀取的x
字符中的第一個,因此不會讀取最后一個字符。 @Gopi的修復程序將解決此問題。
你也可以打電話
fflush (stdin);
第五行之后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.