C - 打印动态阵列

时间:2015-11-13 04:32:20

标签: c struct printf allocation dynamic-arrays

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

一段相关代码:

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;
}

编辑:我只需要知道如何打印数组以查看我是否正确执行,上面的代码会出错,因为我一直在努力解决这个问题。

2 个答案:

答案 0 :(得分:1)

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);
}

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

条件 -

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

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

答案 1 :(得分:0)

在您的代码中,结构name的成员定义为char。但是您正在尝试将字符串复制到其中。可能这是一个错字。如果不是,则应将它们定义为字符数组或字符指针。同样在print语句中,您尝试将结构data打印为字符串。它应该像 -

printf("%s %s\n", list1.name.first, list1.name.second);

您还为list.number指定了值1234。你的意思可能是list1.numberinsert函数调用中的参数也是错误的。最后,您已将l->data放入函数initinsert,这些函数应为l->info