2017-06-20 74 views
-1

我堅持指針的基礎知識的malloc這裏是我的代碼關於C指針

char *orderUp; 

orderdup = malloc(10 * sizeof(char)); 

printf("enter string"); 
scanf("\n%s",orderdup); 
printf("\n%s",orderdup);// gives scanned strings 
printf("\n%s",*orderdup);// gives empty string 

下面這個程序運行良好。我想知道爲什麼在printf語句中給出掃描的字符串。我的意思是它應該打印地址,但它爲什麼打印字符串,最後一個printf語句給出空字符串。

+1

因爲'%s'正在使'printf'指望一個指針。 「Empty」字符串是您通過傳遞'char'來調用的未定義行爲的結果之一。 –

+0

'* orderup'是一個單獨的'char',並且是您用malloc分配的內存的第一個位置。你應該得到'printf(「\ n%s」,* orderdup)這一行的編譯器警告;'因爲'%s'格式說明符需要一個char指針(即字符串),並且你提供了一個char。 – bruceg

+1

「printf」的手冊頁不清楚嗎?你甚至讀過它嗎?你的C書說什麼?如果您從YouTube視頻或在線教程學習C:請問作者!他們顯然教了垃圾。 – Olaf

回答

1

*orderdupchar類型。您正在使用%s說明符打印char數據類型,而%s需要char *數據類型。它會調用未定義的行爲。要使用打印地址%p

printf("%p", (void*)orderdup); 
+2

要打印第一個字符(如果這是預期的),使用'%c'。 – ShadowRanger