我有一个任务自己实现一个字符串对象,并且在尝试连接两个这样的字符串时当前卡住了。我想我会走这条路:


分配足够的空间来容纳
使用strncpy将保持字符串的开头插入新空间直至索引(此部分有效)
我要插入的字符串上的猫
持有弦的其余部分上的猫


实现方式:

#include <iostream>
#include <cstring>

using namespace std;

int main(){
   int index = 6;//insertion position

   char * temp = new char[21];
   char * mystr = new char[21 + 7 +1];
   char * insert = new char[7];

   temp = "Hello this is a test";
   insert = " world ";

   strncpy(mystr, temp, index);
   strcat(mystr + 7, insert);
   strcat(mystr, temp + index);
   mystr[21 + 6] = '\0';

   cout << "mystr: " << mystr << endl;

   return 0;
}


在使用Visual Studio时,该代码在Hello之后打印出乱码,但是在使用g ++(带有警告)时有效,为什么会有差异?

最佳答案

您正在将本机c概念与c ++混合在一起。这不是一个好主意。

这个更好:

#include <iostream>
#include <string>  // not cstring

using namespace std;

int main(){
   int index = 6;//insertion position

   string temp = "Hello this is a test";
   string insert = "world ";
   string mystr = temp.substr(0, index) + insert + temp.substr(index);

   cout << "mystr: " << mystr << endl;

   return 0;
}

关于c++ - strncpy和strcat无法按照我认为的方式工作c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29283567/

10-13 09:31