c++ - 尝试连接两个字符串时崩溃

标签 c++

<分区>

#include<iostream>

using namespace std;

char *concat(char *string1,char *string2)
{
          char *stringfinal=new char[strlen(string1)+strlen(string2)+2];
          stringfinal=string1;
          char *dest=new char[strlen(string1)+strlen(string2)+2];
          dest = stringfinal;
          while(*dest != '\0')
          {
                      dest++;
          }

          *dest=' ';  // Point 1


          while(*string2 != '\0')        
               *dest++=*string2++;  //Point2
          *dest='\0';
          return stringfinal; 

}

int main()
{

    char *str1="Anurag";
    char *str2="Jain";

    char *strfinal = new char[strlen(str1)+strlen(str2)+2];
    strfinal=concat(str1,str2);

    cout<<strfinal;
    cin.get();

}

最佳答案

你的问题是你似乎认为

stringfinal=string1

dest = stringfinal;

正在做字符串复制,而他们实际上只是重新分配 deststringfile 指针指向其他地方(并立即失去你刚刚新的内存' d).

您可能需要 strcpy(stringfile, string1)

即使修复了这个错误,这也不是当今人们编写 C++ 方式的一个非常光辉的例子。你几乎肯定会更好地使用 std::string,它会为你正确地完成所有这些字符串/指针/分配的事情,让你考虑更重要的事情。

但是,如果您只是想了解内置字符串类背后的内容,那么您将拥有更多的力量...

关于c++ - 尝试连接两个字符串时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766081/

相关文章:

c++ - 在多核机器上使用 boost asio 只有 1 个线程

c++ - 链表中的返回遍历问题

c++ - 使用静态转换,因为动态转换失败。不好的做法?

c++ - 如何将 Valgrind 与介子一起使用?

C++ 查找指针错误

c++ - QSqlTableModel::setData() 对于 Qt::EditMode 也返回 false

c++ - 如何在 C++ 中连接两个 LPCWSTR

android - 我在哪里可以下载 cocos2d-x 预构建二进制文件?

c++ - 将外部可访问方法添加到 activex dll (axvlc.dll)

c++ - 在单元测试时如何模拟基类的非重写、虚拟/非虚拟方法?