char *variable;
printf("write variable");
scanf("%s",&variable);
我尝试了这部分代码从输入中获取 char 变量,但它不起作用。我不知道如何获得它,我可以有一些提示吗?
Ps:感谢您的帮助,对不起基本问题
这里有两个问题。
首先,scanf
的%s
格式说明符需要一个指向char
数组(动态或静态分配(的char *
参数。 你给它传递了一个char **
,这是一个不兼容的类型。 删除地址运算符&
以传递正确的类型:
scanf("%s",variable);
其次,即使使用此修复程序,variable
也是未初始化的。 这意味着scanf
将尝试写入无效的内存地址。 您需要将variable
声明为数组:
char variable[50];
或者为其动态分配内存:
char *variable = malloc(50);
您还需要在scanf
说明符中指定字段宽度,以便它知道它可以读取的最大字符数:
scanf("%49s",variable);
请注意,字段宽度比数组的大小小 1,以便为终止空字节留出空间。
你在scanf中使用了&运算符(它主要使用(,但对于字符串或数组,这不起作用。实际上,数组名称是指向字符数组的第一个字符的指针,这意味着它是字符数组中第一个字符的地址。现在,当您使用&运算符时,这会将地址地址传递给数组的第一个字符,而必需的参数是char*类型,并且您正在传递char**。只需按如下方式使用:
scanf("%s", mystring); // Good and works good
scanf("%s", &mystring); //bad and does not works