首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c中声明空字符串变量

在c中声明空字符串变量
EN

Stack Overflow用户
提问于 2016-03-13 19:56:54
回答 2查看 2.4K关注 0票数 1
代码语言:javascript
复制
#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数组大小的情况下声明字符串变量?当提到数组的大小时,相同的代码可以正常工作。

错误截图

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-13 20:32:27

在创建数组时,C中的数组必须具有已知的大小,并且在此之后不能更改大小。

因此,必须为所有数组指定一个大小。

只有在提供初始化程序时,才能省略大小编号,因为编译器可以从初始化程序中计算大小。

在您的代码中,您应该选择一个足够大的大小来存储所期望的内容。此外,您在scanf中使用了错误的参数。守则可以是:

代码语言:javascript
复制
char first[100] = { 0 };    // avoid garbage in case input fails
scanf("%99s", first);

如果要允许任意大小的输入,则必须使用空间的动态分配。

票数 1
EN

Stack Overflow用户

发布于 2016-03-13 20:07:43

当您创建这样的数组时,它被分配给堆栈,因此您需要在声明中指定它的大小。另一方面,您可以在以后使用指针并分配数组的大小:

C中的数组基本上是指向数组的第一个元素的指针。

您可以创建空数组声明

代码语言:javascript
复制
char *first;

之后,您可以使用

代码语言:javascript
复制
first = malloc(sizeof(char)*(SIZE_OF_ARRAY+1));

+1,因为您需要将结束\0字符放在字符串的末尾。

然后,您可以使用它,就像处理数组本身一样。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35975062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档