gpt4 book ai didi

C - 打印动态数组

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

我正在创建一个修改动态数组的程序。它必须初始化数组并能够插入其中。为了测试它之后我无法打印数组,我该怎么办?

相关代码段:

typedef struct {
char first;
char second;
} name;

typedef struct {
int number;
name name;
} data;
/*points to array, number allocated, number used*/
typedef struct {
data *info;
size_t numof;
size_t numused;
} list;

void init(list *l) {
l->data = malloc(sizeof(l) * l->numof);
l->numused = 0;
l->numof = 2;
}

int insert(list *l, const data *dat) {
if (l->numused == l->numof) {
l->numof *= 2;
l->data = (int *)realloc(l->data, l->numof * sizeof(int));
}
l->data[l->numused++] = *dat;
return 0;
}

int main(void) {
int i;
list l;
data list1;
/*example info for testing*/
list.number = 1234;
strcpy(list1.name.first, "abc");
strcpy(list1.name.second, "xyz");
init(&l);
insert(&l, list1);
/*runs through array elements to print*/
for (i=0; i < ((int)sizeof(&l)) /(int)sizeof(&l); i++) {
printf("%s\n", list1);
}
return 0;
}

编辑:我只需要知道如何打印数组来看看我是否做得正确,上面的代码将会有错误,因为我一直在试图弄清楚它。

最佳答案

strcpy(list1.name.first, "abc");
strcpy(list1.name.second, "xyz");

这两者都会调用未定义的行为,因为 firstsecond 被声明为 char 变量,并且您将字符串文字复制到它们。

您需要将它们声明为字符数组。

还有这个 -

for (i=0; i < ((int)sizeof(&l)) /(int)sizeof(&l); i++) {
printf("%s\n", list1);
}

您尝试使用 %s 说明符打印结构变量 list1,也许您倾向于打印要复制的字符串。因此,直接在 printf 中使用 %s 说明符打印 list1.name.firstlist1.name.second

以及条件 -

i < ((int)sizeof(&l)) /(int)sizeof(&l)

强制转换不是必需的,它将产生 1 因此,循环将运行 1 时间。改变条件。

关于C - 打印动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33685981/

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