2017-05-16 3 views
1

Ich habe einen Zeichenkettentyp und ich versuche, dies in einen anderen Zeichenkettentyp char by Char zu kopieren, aber wenn ich versuche, die Ausgabe von neuen zu zeigen, wird es leer angezeigt. Wobei, wenn ich versuche, Char durch Char für diese kopierte Stringlänge auszugeben, ist es in Ordnung. Bitte sehen Sie diesen kleinen Code und Ausgabe zum besseren Verständnis.Kopieren einer Zeichenkette durch Zeichen in einer anderen Zeichenkette

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

Ausgang:

Tom 

Tom 

Ich weiß, es gibt auch andere Möglichkeiten, zu erreichen, was ich versuche gerade aus Gedanken zu tun, sondern versuchte dies und es hat nicht funktioniert. Also auf der Suche nach einer Erklärung.

+1

'temp' hat keine Länge, daher können Sie die Indizierung nicht verwenden, um eines seiner Zeichen zu adressieren. Verwenden Sie 'temp.push_back (name [i]);', um 'temp' zu vergrößern. –

+0

[Using at() zeigt, dass Ihr Code nicht funktioniert, weil Sie außerhalb der Grenzen des Strings sind] (http://rextester.com/HER88905) – PaulMcKenzie

Antwort

2

Beachten Sie, dass temp leer ist, ist seine Länge 0. Dann führt temp[i] = name[i]; zu undifined behavior; Alles ist möglich, aber nichts ist garantiert.

können Sie geben eine anfängliche Länge wie:

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

Ich bekomme das noch immer nicht klar, warum in for loop es gab richtige Antwort. –

+0

@rakeshsinha [Undefiniertes Verhalten] (https://en.wikipedia.org/wiki/Undefined_behavior) bedeutet, dass alles möglich ist; aber nichts ist garantiert. – songyuanyao

0

Sie müssen Daten für die temporäre Zeichenfolge zuweisen, um darin enthaltene Daten zu ändern.

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

nicht belegen.

Verwandte Themen