2017-05-16 138 views
1

我有一个字符串类型,我试图将它复制到另一个字符串类型char char,但是当我尝试显示新复制的输出时,它会变成空白。当我试图通过字符输出char复制的字符串长度的时候就好了。请看这个小代码和输出以便更好地理解。在另一个字符串中复制char字符串

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string name = "Tom"; 
    string temp; 
    int i = 0; 
    for(; i < name.length(); ++i) 
    { 
     temp[i] = name[i]; 
    } 
    cout<<name<<endl;  //gives the output Tom 
    cout<<temp<<endl;  //gives blank 
    for(int i = 0; i < name.length(); ++i) 
    { 
     cout<<temp[i]; //gives output char by char 
    } 
} 

输出:

Tom 

Tom 

我知道还有其他可能的方式来实现什么,我试图做的,但刚走出思想的尝试这样做,也没有工作。所以寻找一些解释。

+1

'temp'具有零长度,因此您不能使用索引来解决任何字符。使用'temp.push_back(name [i]);'使'temp'增长。 –

+0

[Usiing在()显示你的代码不会工作,因为你超出了字符串的范围](http://rextester.com/HER88905) – PaulMcKenzie

回答

2

注意temp是空的,它的长度为0。然后temp[i] = name[i];导致undifined behavior;任何事情都是可能的,但没有保证。

你可以给它的初始长度,如:

string name = "Tom"; 
string temp(name.length(), '\0'); 
+0

我明白了,仍然不清楚为什么在for循环中它给正确答案。 –

+0

@rakeshsinha [未定义的行为](https://en.wikipedia.org/wiki/Undefined_behavior)意味着任何事情都是可能的;但没有保证。 – songyuanyao

0

您必须为临时字符串分配数据以更改其中的任何数据。

string temp(name.length(),'\0'); 
0
for(; i < name.length(); ++i) temp.push_back(name[i]); 

不分配。

相关问题