gpt4 book ai didi

c - 使用 for 循环将字符存储到字符串中?

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:49 25 4
gpt4 key购买 nike

我有这个函数,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/

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