连接两个字符指针

标签 c pointers char-pointer

我刚刚学习C,并开始了解指针。我编写了一个应该连接两个字符指针的方法,我得到了一个奇怪的行为,我无法向自己解释,也没有找到答案,所以也许你可以提供帮助!

所以我不明白为什么stringcatstringptr指向不同的地址,即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/

相关文章:

Java:获取枚举的 ExceptionInInitializerError

c++ - 我可以在不使用 "new"(和隐式指针)的情况下创建在 C++ 堆上分配的对象吗?

C 指向固定大小数组的现有指针

c - 为什么当我输入指向字符串文字的指针时,程序会返回段错误,但当我输入指向数组的指针时,程序不会返回段错误?

函数内部的 C 问题,在另一个单词中搜索一个单词并返回位置

c - 服务器在处理完一个请求后立即终止

c++ - 开发环境沙盒

C - 允许函数显示遇到错误的正确格式是什么?

c++ - 为什么我会遇到这种访问冲突?

c++ - 空 char* 成功转换为有效的 unsigned int64 游戏 ID??如何?