strncpy和strcat没有按照我认为他们会用c ++的方式工作

时间:2015-03-26 16:14:42

标签: c++ visual-studio-2012 g++ c-strings

我有一个自己实现一个字符串对象的赋值,当我试图连接两个这样的字符串时,我目前卡住了。我想我会走这条路:

  • 分配足够大的空间来容纳
  • 使用strncpy(此部分可用)将字符串的开头插入新空间直至索引
  • 我正在插入的字符串上的猫
  • cat on the holding of the holding string

实施:

#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;
}

该代码在使用可视工作室时打印出Hello后的乱码,但在使用g ++(带警告)时有效,为什么会出现差异?

1 个答案:

答案 0 :(得分:1)

您将原生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;
}