#include <stdio.h>
int main() {
char prompt1[] = "Enter your first name:", prompt2[] = "Enter your last name:";
char gratis[] = "Thanks!", first[], last[]; //empty declaration of string varible
printf(prompt1);
scanf("%s", &first);
printf(prompt2);
scanf("%s", &last);
printf("%s\n", gratis);
printf("Your name is %s %s\n", first, last);
return (0);
}为什么不能在不指定char数组大小的情况下声明字符串变量?当提到数组的大小时,相同的代码可以正常工作。
错误截图
发布于 2016-03-13 20:32:27
在创建数组时,C中的数组必须具有已知的大小,并且在此之后不能更改大小。
因此,必须为所有数组指定一个大小。
只有在提供初始化程序时,才能省略大小编号,因为编译器可以从初始化程序中计算大小。
在您的代码中,您应该选择一个足够大的大小来存储所期望的内容。此外,您在scanf中使用了错误的参数。守则可以是:
char first[100] = { 0 }; // avoid garbage in case input fails
scanf("%99s", first);如果要允许任意大小的输入,则必须使用空间的动态分配。
发布于 2016-03-13 20:07:43
当您创建这样的数组时,它被分配给堆栈,因此您需要在声明中指定它的大小。另一方面,您可以在以后使用指针并分配数组的大小:
C中的数组基本上是指向数组的第一个元素的指针。
您可以创建空数组声明
char *first;之后,您可以使用
first = malloc(sizeof(char)*(SIZE_OF_ARRAY+1));+1,因为您需要将结束\0字符放在字符串的末尾。
然后,您可以使用它,就像处理数组本身一样。
https://stackoverflow.com/questions/35975062
复制相似问题