目前正在学习c++,也许是因为我现在真的很沮丧,但是我似乎无法将我的小脑袋缠起来:

有一个类构造函数:

Class (const char* file);

我在主类(class)中这样使用它:
char* chararr = new char[2048];
//stuff with charrarr
// std::cout << chararr would be: "C:\stuff\paths\etc\"
Class c( strcat(chararr , "filename.file"));
//I want it to be: "C:\stuff\paths\etc\filename.file
Class c2( strcat(chararr , "filename2.file2"));
////I want this to be: "C:\stuff\paths\etc\filename2.file2" but it is instead
// "C:\stuff\paths\etc\filename.filefilename2.file"

问题是strcat修改了chararr,所以我第二次对c2类执行此操作时,一切都搞砸了……我猜这是一件非常基本的事情,让我更加沮丧。我错过了一些非常明显的东西...

最佳答案

第一次编写代码时出错,应该调用strcpy(),而您则与垃圾串联。

Class c( strcpy(chararr , "filename.file"));

否则,它与垃圾,未定义的行为串联在一起。

编辑:
// std::cout << chararr would be: "C:\stuff\paths\etc\"
size_t len = strlen(chararr);  // <--- notice
Class c( strcat(chararr , "filename.file"));
// path\path2\filename.file
//            ^ replace `f` with '\0'
chararr[len] = '\0'; // <--- notice
Class c2( strcat(chararr , "filename2.file2"));

09-08 10:24