C 中允许使用数组大小的变量吗?

问题描述 投票:0回答:1
  • 我在 Linux 上使用 GCC 编译器。我不明白变量在数组大小中如何工作。

当我跑步时:

char string[6];
string[0] = 'h';
printf("%s", string);

正如预期的那样,它输出:h

如果我跑步:

int x = 1;
char string[5 + x];
string[0] = 'h';
printf("%s", string);

它输出 h 后跟 � 和其他随机字符。我猜它正在访问内存地址,这是不应该的。每次运行的角色都不一样。

当我执行相同操作但将第二行替换为“char string[5 + x] = {}”时 它错误:可变大小的对象可能未初始化。

如果我对整数数组做同样的事情,如果我输入“int array[5 + x] = {};”,它就可以完美工作。但不是“int array[5 + x]”

int 数组的大小声明中允许使用变量,但 char 数组/字符串中不允许使用变量吗?

arrays c string size curly-braces
1个回答
0
投票

如评论中所述,您的问题是以下内容调用未定义的行为。

int x = 1;
char string[5 + x];
string[0] = 'h';
printf("%s", string);

未定义的行为源于使用

string
作为字符串。 C 中的字符串需要一个空终止字符来表示字符串的结束。您的可变长度数组尚未初始化(除了第一个字符),因此内容不确定。

在第一种情况下,

string[1]
显然是
0
,因此以空值终止字符串。这是不能保证的,正如您从第二个示例中看到的那样,其中
printf
打印出乱码,因为它在
'h'
作为空终止符之后没有看到下一个字符。

© www.soinside.com 2019 - 2024. All rights reserved.