gpt4 book ai didi

C char 数组(C 字符串)动态?

转载 作者:行者123 更新时间:2023-11-30 16:55:02 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>
void main(){
char sss[0]; //array with 0 elements
sss[0]= 'h'; sss[1]= 'o'; sss[2]= 'w'; //how does this line compile wihtout error?
printf("sss after 3 chars added: %s\n", sss);
strcpy(sss, "n");
printf("sss after strcpy: %s\n", sss);
strcat(sss, " stuff");
printf("sss after strcat: %s\n", sss);
}

在这里,我声明了一个大小为 0 的字符数组“sss”。因此,它无法将任何字符分配给任何元素。然而,该数组的行为类似于动态分配的数组,允许分配任意数量的字符。上面的代码产生以下输出。

sss after 3 chars added: how
sss after strcpy: n
sss after strcat: n stuff

我认为 C 对数组分配很严格,并期望它抛出“数组大小超出范围”错误。为什么/如何发生这种情况?

最佳答案

该行为未定义,因为您尚未为数组项分配内存。尝试这个:char sss[3];现在您可以分配给各个数组索引,而不会出现未定义的行为。

关于C char 数组(C 字符串)动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com