C:字符串连接:空终止字符串(C: String Concatentation: Null Term

2019-10-17 00:10发布

下面的代码只串接的第一个字符串,而忽略第二..从我收集,它是与空结束的字符串。 由于我是新来C,这是一个新的概念给我。 可能有人帮助下面工作的代码? 这将真正帮助我很多理解这一点。

void concatTest();

int main()
{
    concatTest();

    system("PAUSE");
    return 0;
}

void concatTest()
{
    char string1[20], string2[20], string3[40];
    char *ptr1, *ptr2, *ptr3;
    ptr1 = &string1[0];
    ptr2 = &string2[0];
    ptr3 = &string3[0];
    int i;

    printf("You need to enter 2 strings.. each of which is no more than 20 chars in length: \n");

    printf("Enter string #1: \n");
    scanf("%s", string1);

    printf("Enter string #2: \n");
    scanf("%s", string2);

    int len1 = strlen(string1);
    int len2 = strlen(string2);

    for (i = 0; i < len1; i++)
    {
        ptr3[i] = ptr1[i];
    }
    for (i = len1; i < len1 + len2; i++)
    {
        ptr3[i] = ptr2[i];
    }

    printf("%s\n", string3);
}

Answer 1:

要索引ptr2[i]使用i取值范围为len1len1 + len2 。 这个值可能会出的界string2阵列(除非你输入的第一个字符串正好是空的)。

如下我可以写你的第二个循环:

for (i = 0; i < len2; i++) {
    ptr3[len1 + i] = ptr2[i];
}


Answer 2:

我的回答不会有任何代码,但希望有用的解释。

在C中的每个串被终止与\0

如果你想连接两个字符串,你需要确保你覆盖第一个字符串( 的最后一个字符 \0 )与第二个字符串的第一个字符。 否则,无论是“串联”的字符串有多长,只要一个\0是一个字符串函数遇到,它将承担字符串的结尾已经达到。

当然,你需要确保你有一个共同的字符串足够的分配空间。



Answer 3:

你必须在PTR2的第一个字符开始。

ptr3[i] = ptr2[i-len1];

从我收集,它是与空结束的字符串。

是的,它确实。 字符串开始偏移量为0。你是在一些随机点基础上,拳头字符串的长度开始。



文章来源: C: String Concatentation: Null Terminated Strings