以下代码仅连接第一个字符串并忽略第二个字符串..我收集的内容与Null终止字符串有关。因为我是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);
}
答案 0 :(得分:2)
我的回答没有代码,但希望是一个有用的解释。
C中的每个字符串都以\0
终止。
如果要连接两个字符串,则需要确保使用第一个字符覆盖第一个字符串(\0
)的最后一个字符第二个字符串。否则,无论多长时间连接&#34; string是,一旦字符串函数遇到\0
,它就会假定字符串的结尾已经到达。
当然,您需要确保为关节字符串分配足够的空间。
答案 1 :(得分:2)
您使用ptr2[i]
为i
建立索引,范围从len1
到len1 + len2
。该值可能超出string2
数组的范围(除非您键入的第一个字符串恰好为空)。
我可能会按如下方式编写第二个循环:
for (i = 0; i < len2; i++) {
ptr3[len1 + i] = ptr2[i];
}
答案 2 :(得分:1)
你必须从ptr2的第一个角色开始。
ptr3[i] = ptr2[i-len1];
从我收集到的内容,它与Null终止有关 字符串。
是的。字符串从偏移量0开始。您是根据第一个字符串的长度在某个随机点开始的。