gpt4 book ai didi

C 有人能告诉我这是怎么回事吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:48 25 4
gpt4 key购买 nike

我不知道这里到底发生了什么。我期望的是输出应该说键中只有 1 个元素,它说当我只分配 0 位置 120 字节时有 7 个。

void add2(char **b, char *i) {
if (!i) {
b[0] = (char*) malloc(120);
sprintf(b[0], "%s", "hithere");
} else {
strcat(b[0], "\\\\");
strcat(b[0], i);
}
}

void add1(char **b) {
add2(b, NULL);
add2(b, "one");
add2(b, "two");
add2(b, "three");
}

void add() {
char *keys[2];
int i;
add1(keys);
fprintf(stderr, "%s\n", keys[0]);
for (i = 0; keys[i]; i++)
fprintf(stderr, "%d\n", i);
free(keys[0]);
}

int main (int argc, char** argv)
{
add();
add();
return 255;
}

输出:这里\一\二\三01个2个3个4个5个6个7这里\一\二\三01个2个3个4个5个6个7

字符串如我所料,但我认为之后只应打印 0,因为 0 是我添加的唯一元素。我需要能够释放每个点,而不仅仅是 free[0],但是当我将 free[i] 放在打印出 i 的 for 循环中时,它会堆栈转储。

关于下面响应的初始化,如果我需要一个类似于 1000 而不是 2 的数组,那么我如何在不输入 1,000 个 0 的情况下将它们全部初始化为 0

最佳答案

/* ... */
void add() {
char *keys[2];
/* ... */

keys 是一个包含 2 个指向 char 的指针的数组,但是它没有被初始化
试试这个

/* ... */
void add() {
char *keys[2] = {0, 0}; /* explicit initialization of the two elements */
/* ... */

在没有针对所有成员的显式初始化器的情况下,未初始化 的成员被初始化为零(适合其类型的零)。

/* ... */
void add() {
char *keys[1000] = {42}; /* explicit initialize the first element to 42 */
/* and implicitly initialize all other elements to 0 */
/* **ATTENTION** */
/* initializing a pointer to 42 is wrong */
/* I only wrote that as an example */
/* ... */

编辑,引用自标准

6.7.8 Initialization
Syntax
1

initializer:

assignment-expression
{ initializer-list }
{ initializer-list , }

初始化列表:

designationopt initializer
initializer-list , designationopt initializer

空的初始化列表没有语法。

关于C 有人能告诉我这是怎么回事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526078/

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