C++:每当我尝试运行这个char指针函数时,都会不断得到SIGSEV信号和分段错误

C++:每当我尝试运行这个char指针函数时,都会不断得到SIGSEV信号和分段错误,c++,pointers,char,C++,Pointers,Char,我刚刚开始学习指针,目前在使用这个我想分析的函数时遇到了问题,因为它似乎不是为我编译的 void mystery3(char *str1, char *str2) { while(*str1 != 0) { str1++; } while(*str2 != 0) { *str1 = *str2; str1++; str2++; } *str1 = *str2; } 我尝试了不同的方法来实现这个函数,但最终还是会出现错误或空指针。以下是

我刚刚开始学习指针,目前在使用这个我想分析的函数时遇到了问题,因为它似乎不是为我编译的

void mystery3(char *str1, char *str2)
{
  while(*str1 != 0)
  {
    str1++;
  }
  while(*str2 != 0)
  {
    *str1 = *str2;
    str1++;
    str2++;
  }
  *str1 = *str2;
}
我尝试了不同的方法来实现这个函数,但最终还是会出现错误或空指针。以下是我当前使用的驱动程序:

#include <iostream>
using namespace std;
int main()
{
  char str, str2;
  char *strPtr, *strPtr2;


  str = 'a';
  strPtr = &str;
  str2 = 'b';
  strPtr2 = &str2;

  cout << (int*)strPtr << " " << (int*)strPtr2 << endl;
  cout << strPtr << " " << strPtr2 << endl;
  cout << *strPtr << " " << *strPtr2 << endl;
  mystery3(strPtr, strPtr2);
  cout << (int*)strPtr << " " << (int*)strPtr2 << endl;
  cout << strPtr << " " << strPtr2 << endl;

  return 0;
}
任何帮助都将不胜感激!我已经在这上面呆了一段时间了

编辑:
谢谢大家的帮助!我现在已经解决了这个问题,并且理解了我做错了什么。

问题是您有一个指向单个字符的指针,而这个字符本身不是字符串。C中的字符串是由一个或多个字符组成的集合,以字符“\0”的零结尾。由于传递给函数的字符串没有终止,因此循环将超出指针指向的数据的末尾,可能会超出很多

然后写入指针,指针现在远远超出了为数据分配的内存,从而导致经常导致崩溃的指针


要解决这个问题,您应该传入适当长度的数组,这意味着第二个数组必须比第一个数组长。

问题在于mystery3函数的使用:它假设了一些不正确的情况:

str1指向以“\0”结尾的字符区域。这不是真的:str1指向单个非零字符,后面没有零结尾 str2指向以“\0”结尾的字符区域,如上所述 str1指向一个足以在str1和str2上存储字符串的内存区域,以及一个空终止符-这不是真的:str1指向一个字符。 要解决这个问题,您需要为连接的字符串分配足够的内存,例如,使用一个数组并使用以null结尾的字符串初始化两个数组。在主功能中进行此更改:

char strPtr[10] = "a";
char strPtr2[] = "b";
这将产生预期的结果


感谢您快速而详细的回复!这很有道理,谢谢你!我感谢你的帮助。