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