我刚刚学习C,并开始了解指针。我编写了一个应该连接两个字符指针的方法,我得到了一个奇怪的行为,我无法向自己解释,也没有找到答案,所以也许你可以提供帮助!
所以我不明白为什么stringcat
和stringptr
指向不同的地址,即8字节的地址。其次,我不明白为什么我不能在底部的两个 while 循环中使用 stringcat
。我只是没有得到任何输出。另外,如果我在最后一个 printf
中使用 stringptr[0]
,则不会有任何输出。
提前感谢您的帮助!
编辑:这段代码有效,我只是不明白为什么我不能在底部使用stringcat
。
编辑2:注意到复制粘贴时丢失了一些*,所以我添加了它们!
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;
}
关于连接两个字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45255675/