繁体   English   中英

Scanf在while循环中效果不佳

[英]Scanf doesn't work well with while loop

所以我有以下代码:

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)

我想输入更多命令,并在更改loggingIn的值时停止,但是一旦输入一个命令,它就会开始打印Enter your command: (null)

您需要使用malloc将内存分配给currentCommand指针(并在末尾释放它)或在开始时为其分配大小,例如

char currentCommand[256];

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

现在,当您在scanf中写入℅s时,您应该传递char数组的地址(尚未声明),所以scanf将采用该地址(保存在currentCommand中的值是垃圾)。

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

char *p="Hello World";

这将在数​​据/代码段(只读段)中创建内存。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM