我有这个函数,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: 警告:函数返回局部变量的地址"
最佳答案
这是错误的:
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
的返回值以了解分配失败。如果失败,它将返回空指针。我没有展示如何执行此操作,因为我不知道您的错误处理策略。
关于c - 使用 for 循环将字符存储到字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397269/