Scanf函数在while循环中使用效果不佳

4

我有如下代码:

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)

1
你还没有为 currentCommand 分配任何空间。 - 001
是的,现在可以了。谢谢! - Alexandru Antochi
3个回答

3

你需要使用malloccurrentCommand指针分配内存(并在最后释放它),或者在开始时给它一个大小,例如:

char currentCommand[256];

现在可以工作了。谢谢! - Alexandru Antochi

0

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

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


0
在使用字符指针时最重要的一点是你可以在声明时创建一个字符数组,即:
char *p="Hello World";

这将在数据/代码部分创建只读内存。

您不能使用scanf()函数创建字符数组。应该使用动态内存分配或像上面那样初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接