在C中连接两个char数组

时间:2016-03-11 23:03:55

标签: c arrays string

我有两个char数组(char string1 [7]和char string2 [256]),我需要以特定格式打印。两个字符串都有一个随机数的条目,以'\ 0'空字节结尾。

  • 我需要打印string1
  • 后跟第9个字符的空格
  • 后跟string2 - 必须从第10个字符开始打印。

我尝试通过将字符串复制到一个我可以直接打印的新数组来实现这一点,但它无法正常工作。

 while(string2[i]!='\0')
        {   


                if(i<9 && string1[i]!='\0')
                {
                    Printline[i]=string1[i];
                }
                else if (i>9)
                {
                    Printline[i]=string2[i];
                }
                i++;

        }

        printf("%s\n",Printline);

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:3)

int main(void) {
    char string1[7];
    char string2[256];

    strncpy(string1, "str1", 6);
    strcpy(string2, "This is string 2.");

    printf("%-8s %s", string1, string2);

    return 0;
}

编译并运行时,上面的代码将打印出来:

str1     This is string 2.

%-8s格式规范说,如果给定的字符串长度少于8个字符(不包括'\0'),则字符串后面会跟着空格(空格)占用8个字符。客房。
此外,第9个字符将成为一个空格,其余部分将由string2填充。

编辑:strncpy函数用于string1,以确保从 src 复制到 dest 不超过6个字符。请记住,第7个字符将是空终止符('\0')。

答案 1 :(得分:0)

我认为以下内容需要更正/澄清,而不是发布代码,以便您有机会学习并尝试修复它。

while(string2[i]!='\0')  /* and further checks in the code, it appears that
                            the string2 has larger set of characters and
                            exceeds a count of 9 */
        {   
                if (i<9 && string1[i]!='\0') /* What happens when (i < 9)
                                                but string1[i] has already
                                                reached the '\0'? */
                {
                    Printline[i]=string1[i];
                }
                else if (i>9)
                {
                    Printline[i]=string2[i];
                }
                /* What about (i == 9)? */
                i++;
        }
        /* Not including '\0' from string2 before printing Printline
           would eventually crash the program */
        printf("%s\n",Printline);