我有这个函数bits_show,它打印到stdout一个2-3位长的代码。
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;
};
我正在尝试编写一个函数char * bits_char(bits a)来捕获这些字符并将它们收集到一个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:warning:函数返回局部变量“
的地址答案 0 :(得分:2)
这是错误的:
sizeof(a->next * char)
我认为你打算写:
a->next * sizeof(char)
但是,根据定义,sizeof(char)
等于1,你只需省略它。
但即使这样也是错误的,因为你需要为你的代码当前没有写的空终结符留出空间。分配必须是:
malloc(a->next+1)
并添加如下的null-terminator:
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. {/ p>中不需要的malloc
返回值的强制转换
您还应该确保检查malloc
的返回值是否失败。如果失败,它将返回空指针。我没有说明如何做到这一点,因为我不知道你的错误处理政策。