c - 这是声明并从输入中获取 char 变量的最佳方式


  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

最新更新