我不知道';I don’我不明白为什么我遇到了一个糟糕的访问异常 我试图在C++中实现自己的STR COUNT函数,但是指针变量中的一个没有被分配给另一个指针值。当我在CLION中调试程序时,它将我带到行*p=*s2,并将*p变量指定给\0,而不是b。我不确定这个错误是从哪里来的,我还可以在如何在cLion中进一步调试这个问题上获得帮助吗

我不知道';I don’我不明白为什么我遇到了一个糟糕的访问异常 我试图在C++中实现自己的STR COUNT函数,但是指针变量中的一个没有被分配给另一个指针值。当我在CLION中调试程序时,它将我带到行*p=*s2,并将*p变量指定给\0,而不是b。我不确定这个错误是从哪里来的,我还可以在如何在cLion中进一步调试这个问题上获得帮助吗,c++,C++,我已尝试将参数中的第二个字符指针更改为const,并通过谷歌搜索EXC\u BAD\u访问(code=2,address=0x10c226edd) char*my_strcat(char*s1,char*s2) { 如果(s1==NULL | | s2==NULL){ 返回NULL; } char*p=s1; 而(*p!='\0') { p++; } 而(*s2!='\0') { *p=*s2; p++; s2++; } *p='\0'; 返回s1; } char*arr4=“塔科”; char

我已尝试将参数中的第二个字符指针更改为const,并通过谷歌搜索
EXC\u BAD\u访问(code=2,address=0x10c226edd)

char*my_strcat(char*s1,char*s2)
{
如果(s1==NULL | | s2==NULL){
返回NULL;
}
char*p=s1;
而(*p!='\0')
{
p++;
}
而(*s2!='\0')
{
*p=*s2;
p++;
s2++;
}
*p='\0';
返回s1;
}
char*arr4=“塔科”;
char*arr5=“bean”;

std::cout问题在于字符串文本不可修改。C字符串也不会自动增长以适应添加到其中的字符。试试这个

char arr4[100] = "Taco";
现在
arr4
实际上是一个数组,它有足够的空间为您的字符串添加95个字符

我认为你需要修正指针和数组之间的区别,这是新手们经常会困惑的话题。

忽略一个事实,那就是你还有另一个问题。即使
char*
部分按预期工作,您也在尝试写入未分配的数据

原因是
p
=
s1
。这意味着
p
在该地址分配的数据量与
s1
相同。为什么这很重要?那么,当您尝试这样做时:

while (*s2 != '\0')
{
   *p = *s2;
   p++;
   s2++;
}
您将进入一个未分配的空间,因为
p
现在指向
s1
已分配的位置,很可能会导致撞车

您确实需要修复这两个错误。使您的程序正常工作

我的建议是使用:

std::string s1=“Taco”;
std::string s2=“bean”;

std::cout
char*arr4=“Taco”在现代
c++
中应该是一个错误,这需要是
const char*arr4=“Taco”相关/重复:和
char*arr4=“Taco”;char*arr5=“bean”--不能连接到字符串文字。第二,即使这些不是字符串文字,将
“bean”
连接到
“Taco”
的空间在哪里?C++不会为你清除空间——你必须确保空间在那里。你需要一个<代码> ReLoC/ <代码> S1< /Cord>。@ OP——讽刺的是,如果你真的试图模仿什么代码< StCAT,那么你应该得到的错误会发生。<代码> STRCAT//COD>函数不检查是否有空间,如果你可以绕过C++的类型安全性,则<代码> STRCAT/CODE>将不关心传递的是字符串文字。您的代码所做的唯一额外的事情是检查
NULL
,而
strcat
不执行此操作。你的程序会像现在一样,用strcat在你身上爆炸。所以在现实中,您的实现(行为)比您想象的更接近标准版本的strcat。
while (*s2 != '\0')
{
   *p = *s2;
   p++;
   s2++;
}
std::string s1 = "Taco";
std::string s2 = "bean";

std::cout << s1+s2 << std::endl;