2010-08-11 11 views
10

Was ist der Unterschied zwischen C-Strings und C++ - Strings. Speziell während dynamische Speicherzuweisung tunWas ist der Unterschied zwischen C-Strings und C++ - Strings?

+0

Meinst du den Unterschied zwischen der Verwendung von 'char *' und 'char []' Zeichenketten in den zwei Sprachen, oder der Unterschied zwischen 'char' basierten Strings und' std :: string'? – dmckee

+1

Bitte definieren Sie, was Sie mit "C-String" und "C++ String" meinen. Beide (besonders die letzteren) sind mehrdeutig. – strager

+0

Lesen Sie http://www.cplusplus.com/reference/string/string/ und http://www.macdonald.egate.net/CompSci/hstrings.html –

Antwort

22

kaum, wo ich weiß :-)

In C beginnen, sind Strings nur char Arrays, die per Konvention Ende mit einem NUL-Byte. In Bezug auf die dynamische Speicherverwaltung können Sie einfach den Platz für sie (einschließlich des zusätzlichen Bytes) malloc. Speicherverwaltung beim Ändern Strings ist Ihre Verantwortung:

char *s = strdup ("Hello"); 
char *s2 = malloc (strlen (s) + 6); 
strcpy (s2, s); 
strcat (s2, ", Pax"); 
free (s); 
s = s2; 

In C++, Streicher (std::string) sind Objekte mit allen dazugehörigen automatischen Speicherverwaltung und Steuerung, die sie sicherer viel macht und einfacher zu bedienen, vor allem für die Anfänger. Für die dynamische Zuordnung verwenden so etwas wie:

std::string s = "Hello"; 
s += ", Pax"; 

Ich weiß, welche Ich würde verwenden möchten, letztere. Sie können (wenn Sie eine benötigen) immer eine C-Zeichenfolge aus einem std::string mit der Methode c_str() konstruieren.

+2

'std :: string' sind Objekte mit ... – dmckee

+0

Verdammt Sie c_str()! –

6

C++ Strings sind viel sicherer, einfacher und sie verschiedene String-Manipulation Funktionen wie append unterstützen, findet, kopieren, Verkettung usw.

ein interessanter Unterschied zwischen c-Schnur und C++ String wird durch folgendes Beispiel illustriert

#include <iostream>        
using namespace std; 

int main() { 
    char a[6]; //c string 
    a[5]='y'; 
    a[3]='o'; 
    a[2]='b'; 
    cout<<a; 
    return 0; 
} 

Ausgang »¿boRy¤ £ f · Pi» ¿

#include <iostream> 
using namespace std; 
int main() 
{ 
    string a; //c++ string 
    a.resize(6); 
    a[5]='y'; 
    a[3]='o'; 
    a[2]='b'; 
    cout<<a; 
    return 0; 
} 

Ausgabe Junge

Ich hoffe, du hast den Punkt !!

+0

Diese Art von Verhalten von C verursacht Fehler wie Heartbleed. – saolof

Verwandte Themen