Scanf与while循环不兼容

时间:2016-10-30 11:19:21

标签: c console 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)

3 个答案:

答案 0 :(得分:3)

您需要使用 malloc (并在结尾处释放它)为 currentCommand 指针分配内存,或者在开头给它一个大小,比如

char currentCommand[256];

答案 1 :(得分:0)

currentCommand是指针变量,它将保存char类型变量的地址(整数),大小为4字节(32位机器)。

现在当你在scanf中写℅s时,你应该传递char数组的地址。(你还没有声明),所以scanf将获取地址(保存在currentCommand中的值是垃圾)。

答案 2 :(得分:0)

使用字符指针时最重要的是你可以在声明时创建一个字符数组,即

char *p="Hello World";

这会在数据/代码部分创建内存,这是一个只读部分。

并且您无法使用scanf()函数创建字符数组。 应该使用动态内存分配或如上所述进行初始化