2016-10-30 97 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()函数创建一个字符数组。 应该使用动态内存分配或初始化如上

相关问题