我只是在学习C并达到了指针的目的。我写了一个方法,该方法应该连接两个char指针,但出现了一个奇怪的行为,我无法向自己解释,也没有找到答案,所以也许您可以帮忙!
所以我不明白为什么stringcat
和stringptr
指向不同的地址,即8字节appart。其次,我不明白为什么我不能在底部的两个while循环中使用stringcat
。我只是没有得到任何输出。另外,如果我在最后一个stringptr[0]
中使用printf
,则不会有任何输出。
提前谢谢你的帮助!
编辑:此代码有效,我只是不明白为什么我不能在底部使用stringcat
。
Edit2:注意到某些*在复制粘贴时丢失了,所以我添加了它们!
char stringcat(const char str1, const char* str2){
char *ptr1 = str1;
char *ptr2 = str2;
int count = 0;
while(*ptr1 != '\0'){
count++;
ptr1++;
}
while(*ptr2 != '\0'){
count++;
ptr2++;
}
char *stringcat = malloc((count+1)*sizeof(char));
char *stringptr = stringcat;
printf("%d %d", &stringcat, &stringptr);
ptr1 = str1;
ptr2 = str2;
while(*ptr1 != '\0' && (stringptr++ = ptr1++));
printf("%c", stringcat[0]);
while(*stringptr++ = *ptr2++);
return stringcat;
}
最佳答案
1)
printf("%d %d", &stringcat, &stringptr);
打印不同的变量stringcat和stringptr的地址,它们分配到堆栈中,因此,大概是在编译x64位程序,因此它们相距8个字节。
这个
printf("%d %d", stringcat, stringptr);
是你想要的。
我只是对您的代码进行了最少的更改以使其起作用:
char* stringcat(const char* str1, const char* str2) {
const char *ptr1 = str1;
const char *ptr2 = str2;
int count = 0;
while (*ptr1 != '\0') {
count++;
ptr1++;
}
while (*ptr2 != '\0') {
count++;
ptr2++;
}
char *stringcat = (char *)malloc((count + 1) * sizeof(char));
char *stringptr = stringcat;
printf("%d %d", stringcat, stringptr);
ptr1 = str1;
ptr2 = str2;
while (*ptr1 != '\0' && (*stringptr++ = *ptr1++));
printf("%c", stringcat[0]);
while (*ptr2 != '\0' && (*stringptr++ = *ptr2++));
*stringptr++ = '\0';
return stringcat;
}