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

时间:2013-03-13 21:56:11

标签: 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:warning:函数返回局部变量“

的地址

1 个答案:

答案 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的返回值是否失败。如果失败,它将返回空指针。我没有说明如何做到这一点,因为我不知道你的错误处理政策。