2016-10-30 141 views
4

所以我有以下代碼:SCANF不很好地工作,而環

void main(int argc, char **argv) 
{ 
    int loggedIn=0; 
    char *currentCommand; 

    while (!loggedIn) 
    { 
    printf("Enter your command:"); 
    scanf("%s",currentCommand); 
    printf("\n%s\n",currentCommand); 
    } 
} 

問題是scanf()作品以及在第一時間,然後開始讀(null)和輸出將是一個無限Enter your command: (null)循環。

我想輸入更多的命令並停止當我更改loggedIn的值,但一旦我輸入一個命令,它開始打印Enter your command: (null) endlesly。

+1

您還沒有爲'currentCommand'分配任何空間 –

+0

是的,它現在可以工作。謝謝! –

回答

3

您需要分配內存的currentCommand終場前的malloc(和自由之末),或給一個尺寸它在開始的時候,像

char currentCommand[256]; 
+0

現在工作。謝謝! –

0

currentCommand是指針變量誰將保存char類型變量的地址(它是整數)並且具有4字節(32位機器)的大小。

現在,當您在scanf中編寫℅s時,您應該傳遞char數組的地址(您尚未聲明),因此scanf將獲取地址(保存在currentCommand中的值爲垃圾)。

0

,而使用字符指針是可以在聲明即時創建的字符陣列的最重要的事,

char *p="Hello World"; 

這在數據/代碼存儲器部分被只讀部分。

而且你不能用scanf()函數創建一個字符數組。 應該使用動態內存分配或初始化如上

相關問題