[英]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.