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