加入8个字符串,在C中形成1个字符串

时间:2013-12-26 20:50:30

标签: c string strcpy strcat

我正在进行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]不等于必须的。我该如何解决?

3 个答案:

答案 0 :(得分:4)

使用%s到printf某些内容通常最后需要一个\0个字符,这样你就不会在字符串中留出空间 - 如果你想要32英寸字符,它需要保留33个字符“字符和空终止符。

答案 1 :(得分:1)

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

当然,它可以按照自己的方式工作,但你也不会考虑\0

答案 2 :(得分:0)

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

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