2013-03-13 102 views
1

我有这个函数,bits_show,打印到标准输出一个2-3位长的代码。使用for循环将字符存储到字符串中?

void bits_show(bits *a) 
{ 
    int i; 
    for (i = 0; i < a->next; i++) 
    putchar(a->bits[i]); 
} 

其中位:

struct bits { 
    int capacity; 
    int next; 
    char *bits; 
}; 

我试图写一个函数,字符* bits_char(位一)捕获这些字符,并将其收集到一个单一的字符文件。

这是我迄今为止,但它一直吐痰错误:

char* bits_char(bits *a) 
{ 
    char* str = (char*) malloc(sizeof(a->next * char)); 
    int i; 
    for (i=0; i<a->next; i++){ 
    str[i] = (a->bits[i]); 
    } 
    return str; 
} 

“bits.c:在函数 'bits_char':

bits.c:33:错误:可变大小的对象可能不被初始化

bits.c:37:警告:函数返回本地变量”

+0

我添加了一个malloc,但我仍然收到一个错误,指出malloc行上的“char'之前的期望表达式”。 – 2013-03-13 22:02:49

+0

更新代码并显示malloc – 2013-03-13 22:11:22

+0

我刚更新问题 – 2013-03-13 22:13:14

回答

2

的地址这是错误的:

sizeof(a->next * char) 

我想你的意思是写:

a->next * sizeof(char) 

但由于sizeof(char)定义等于1则只需省略。

但即使这是错误的,因为您需要为您的代码当前没有写入的空终止符空间。分配必须是:

malloc(a->next+1) 

并添加空终止这样的:

str[a->next] = 0; 

总而言之,成品是这样:

char* bits_char(bits *a) 
{ 
    char* str = malloc(a->next+1); 
    int i; 
    for (i=0; i<a->next; i++){ 
    str[i] = (a->bits[i]); 
    } 
    str[a->next] = 0; 
    return str; 
} 

我删除了在C中不需要返回值malloc的投。

而且你也应该确保你检查分配失败的返回值malloc。如果失败,它将返回空指针。我没有展示如何做,因为我不知道你的错误处理策略。

+0

malloc丢失后进行空值检查。 +1 – 2013-03-13 22:21:39

+0

@BillyONeal谢谢,我有一种唠叨的感觉,我忘记了一些东西! – 2013-03-13 22:25:03