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

标签 c string char

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

相关文章:

c# - SQL Server 在尝试设置 null 时向值 (char) 添加空格

c - 是否可以可移植地定义一个接受任意数量参数的函数?

c++ - fwrite.cpp 中的调试断言失败

c - C 中的 SegFault 错误

r - 使用 grepl 创建基于另一列的列

python - 在格式字符串中使用参数

Java - 如何使非字符串对象的 JComboBox 显示字符串名称?

c++ - boost::lexical_cast<signed char> 无法处理负数?

python - 从 Python 和 C 中的列表中找到一个转置排列

java - Java 中 charAt() 方法的问题