【问题标题】:Joining 8 strings to form 1 string in C在C中加入8个字符串以形成1个字符串
【发布时间】:2013-12-26 20:50:30
【问题描述】:

我正在做一个C 编程学校项目。在项目的一部分中,我需要加入每 8 个字符串(每个 4 个字符的长度)以形成 1 个字符串(每个 32 个字符的长度)。

例如,char *holdBinary[16] 包含 16 个字符串,例如:

holdBinary[0] = "0000";
holdBinary[1] = "0000";
holdBinary[2] = "0000";
holdBinary[3] = "0000";
holdBinary[4] = "0000";
holdBinary[5] = "0000";
holdBinary[6] = "0000";
holdBinary[7] = "0000";
holdBinary[8] = "0000";
holdBinary[9] = "0000";
holdBinary[10] = "0010";
holdBinary[11] = "1010";
holdBinary[12] = "0000";
holdBinary[13] = "0000";
holdBinary[14] = "0000";
holdBinary[15] = "0000";

我需要加入 holdBinary 中的每 8 个字符串以形成 1 个字符串,该字符串保存在 holdRange 字符数组中。因此,结果为:holdeRange[0] = "00000000000000000000000000000000",由holdBinary[0]holdBinary[1] ....holdBinary[7]holdeRange[1] = "00000000001010100000000000000000" 组成。

代码如下:

char holdRange[2][33];  // I changed here and it works correct now


int hold = 0;
int z = 0;
int index2 = -1;

while(z<16)
{
    if(z%8 == 0)
    {

        index2++;
        strcpy(holdRange[index2] , holdBinary[z]);
    }
    else
    {

        strcat(holdRange[index2] , holdBinary[z]);
    }
    z++;

}
printf("%s" , holdRange[0]); --> prints 0000000000000000000000000000000000000000001010100000000000000000
printf("\n");
printf("%s" , holdRange[1]); --> prints 00000000001010100000000000000000

因此,holdRange[0] 不等于必须的。我该如何解决?

【问题讨论】:

  • char holdRange[32]; 还是我错过了什么?
  • holdRange 应该包含 6 个长度为 32 的字符串。numberOfChar/8 说明了这一点。
  • @ElliottFrisch:缺少尾随 NULL? char holdRange[33];
  • “请帮帮我,时间有限” - 哦不!世界会终结吗?
  • 我不明白你想说什么。正如我所提到的,holdRange 数组应该被定义为容纳 6 个字符串,每个字符串的长度为 32。

标签: c string strcpy strcat


【解决方案1】:

使用 %s 到 printf 某些东西通常需要最后一个 \0 字符,你没有在你的字符串中留出空间——如果你想要 32 个“真实”字符和一个空终止符。

【讨论】:

  • 好吧,我已经修好了,但仍然出现同样的问题:/
  • 您是否尝试同时进行两个修复(即这个和@Karolis)?那可能行不通。你能告诉我们现在的代码是什么样子的吗?
  • 我只更改了 char (*holdRange)[33] ,代码没有更改,仍然不起作用。
  • 我已经复制了上面的代码,将 32 更改为 33 并删除了你不应该拥有的 malloc 演员,并得到了想要的结果——两行十六行(——编辑三十-两个我在说什么--)每个字符。如果这不是您所得到的,请重新检查您发布的内容。
【解决方案2】:

你为两个字符串分配一块内存。我认为那是因为您将自己与您使用的奇怪类型混淆了。您只需要char* holdRange[2] 和每个字符串的内存。

当然,它可以按照你的方式工作,但你也不会想到\0

【讨论】:

  • 但是这个char *holdRange[2] 不会是一个字符串数组;这将是一个指针数组,指向不连续的内存块,这可能是也可能不是 OP 想要的。
  • 没有解决问题。现在它显示holdRange [0] = 0000000000001010100000000000000000和holdRange [1] = 00000000001010100000000000000000。请帮助pp!!
【解决方案3】:

如果您只想打印出 32 个字符并希望将字符存储在连续的内存中,请给 printf() 一个格式说明符:

printf("%.32s" , holdRange[0]);
printf("\n");
printf("%.32s" , holdRange[1]);

【讨论】:

  • 但它并没有改变任何东西,holdRange[0] 和 holdRange[1] 没有保持正确的值。
  • 您是否更改了初始实现?
  • 好吧,我已经解决了我发布答案的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2011-04-22
  • 2020-04-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多