【问题标题】:copy two arrays of int to one char* in C将两个 int 数组复制到 C 中的一个 char*
【发布时间】:2019-12-25 08:34:09
【问题描述】:

我必须返回 int 数组,例如 arr1={0,1,1,0,0}arr2={1,0,1,1,1},并且我需要返回由 malloc 创建的 1 个字符*,将显示如下:"01100,10111"。 当我做for循环时它不起作用,我该怎么做?

char* ans = (char*)malloc((size * 2+1) * sizeof(int));
for (int i = 0; i < size; i++)
    ans[i] = first[i];
ans[size] = ",";
for (int i = size+1; i < 2*size+1; i++)
    ans[i] = second[i];

【问题讨论】:

  • 第二个循环应该从0 转到size,就像第一个正确索引到second 一样。使用ans[size + 1 + i] = second[i]; 调整索引ans。此外,如果您要将ans 视为字符串,则需要添加一个零终止符。
  • 火上浇油,ans[size] = "," 最好至少发出编译器警告(分配指向char 的指针),否则您需要调高编译器警告级别。假设您确实修复了索引问题,那么这些分配的值应该偏移'0'
  • ans[i] = "," 是错误的。您可以将整数 0 存储在一个字符中,但当您尝试使用 printf 打印它时,它不会显示为 0。向我们展示您打印ans 的代码。这就是(可能)问题所在。如果你在做printf("%s\n", ans),那是行不通的。
  • 正如其他人也指出的那样,提供的代码太少了,无法完全解决您的问题。 size,firstsecond 的声明和定义到底是什么?

标签: c arrays pointers char copy


【解决方案1】:

在众多问题中:

  • 您的分配大小错误。它应该包括用于分隔逗号 终止 nullchar 的空格。 sizeof(int) 无论如何都是错误的,它应该是 sizeof(char) 并且可以省略(sizeof(char) 始终是 1)。
  • 您的存储错误。您要存储字符,并且您的值应相对于'0' 进行调整。
  • 您对第二个循环的索引错误。

实际上,您一开始就不需要第二个循环:

char* ans = malloc(size * 2 + 2);
for (int i = 0; i < size; i++)
{
    ans[i] = '0' + first[i];
    ans[size+1+i] = '0' + second[i];
}
ans[size] = ',';
ans[2*size+1] = 0;

就是这样。

【讨论】:

    【解决方案2】:

    1.

     char* ans = (char*)malloc((size * 2+1) * sizeof(int));
    
    • 这里的size 是什么?它没有在提供的代码中定义和声明。
    • 您不需要将 malloc() 的返回值强制转换为 char。事实上,您不再需要强制转换 malloc() 的返回值。这是早期 C 时代的习惯。
    • 为什么你需要一个char指针呢?如果要打印01100,10111,则无需使用字符指针来输出整数值。

    2.

    for (int i = 0; i < size; i++)
        ans[i] = first[i];
    
    • 这里又是什么size
    • 这里的first 是什么?如果它不是指针,则此语句无效。

    3.

        ans[size] = ",";
    
    • 此操作无效。您正在尝试将字符串分配给指针。
    • 顺便说一句,我不知道你想用这个语句做什么。您可以将逗号单独合并到 01100,10111 的输出中,而不是将其包含在 int 数组本身的内存中。

    4.

    for (int i = size+1; i < 2*size+1; i++)
        ans[i] = second[i];
    
    • 同上:size的值和类型是什么?
    • 什么是second?如果不是指针,则此语句无效。

    5.

    回答问题标题:

    (如何)在 C 中将两个 int 数组复制到一个 char* 中

    这是不可能的。您不能将两个数组及其数据复制到指向 char 的指针。

    【讨论】:

      【解决方案3】:

      您的代码至少存在四个问题。

      1. malloc的尺寸不对,你想用sizeof(char)
      2. 您需要将其归零,因此您需要为归零添加额外的空间
      char* ans = (char*)malloc((size * 2+2) * sizeof(char));
      second[size * 2+1] = 0;
      
      1. 第二个循环的索引也是错误的。您正在越界访问第二个数组。使循环更像第一个。
      2. 我们还需要在循环中将integer 值转换为char
      for (int i = 0; i < size; i++)
          ans[size+i+1] = second[i] + '0';
      

      【讨论】:

      • 也是第二个循环中的索引。 malloc 也不需要 sizeof int 。还需要正确的整数到字符数字
      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 2012-01-23
      相关资源
      最近更新 更多