所以我有以下代码:
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)
。
答案 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()
函数创建字符数组。
应该使用动态内存分配或如上所述进行初始化