哪个是声明并从输入中获取char变量的最佳方法?

时间:2018-04-11 18:03:28

标签: c parameters

  char *variable;
  printf("write variable");
  scanf("%s",&variable);

我尝试使用这部分代码从输入中获取char变量,但它不起作用。我不知道如何获得它,我可以提供一些建议吗?

Ps:感谢您的帮助,对不起基本问题

2 个答案:

答案 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