2016-04-28 7 views
0

Ich versuche, eine Swap-Funktion zu schreiben, die Daten von 2 Zeigern tauschen wird. Ich erhalte Segmentierungsfehlerfehler. Kann mir bitte jemand helfen?Swap-Daten von Zeigern in C++

P.S. Ich weiß, dass die String-Klasse eine Swap-Funktion eingebaut hat, aber ich versuche zu lernen, wie Zeiger funktionieren.

#include<iostream> 
#include<cstring> 

using namespace std; 

void swap(char *, char *); 

int main(){ 
    char *s1="blah"; 
    char *s2="crap"; 
    swap(s1, s2); 
    cout<<s1<<endl<<s2<<endl; 
    return 0; 
} 

void swap(char *s1, char *s2){ 
    char *t1 = new char[strlen(s1)+1]; 
    char *t2 = new char[strlen(s2)+1]; 
    for(int i=0; i<=strlen(s1); i++){ 
     t1[i] = s1[i]; 
    } 
    for(int i=0; i<strlen(s2); i++){ 
     t2[i] = s2[i]; 
    } 
    cout<<*t1<<endl; 
    cout<<*t2<<endl; 
    *s1 = *t2; 
    *s2=*t1; 

} 
+0

1) 'i 'i <= strlen (s2)' 2) '* s1 = * t2;' schreibe nur ein Zeichen und ändere das Stringliteral. 3) Need 'delete []' – BLUEPIXY

+0

Verwandt: [Ändern String Writer] (http://stackoverflow.com/q/5464183/514235). – iammilind

+0

i <= strlen (s1) sollte i Striker

Antwort

4

Sie können swap Funktion als

void swap(char **s1, char **s2){ 

    char *temp = *s1; 
    *s1 = *s2; 
    *s2 = temp; 
} 

verwenden und rufen Sie diese Funktion als

swap(&s1, &s2); 

Wenn Sie c++ Sie Referenzversion von BLUEPIXY vorgeschlagen verwenden können

void swap(const char *&s1, const char *&s2) 
{ 
    const char *temp = s1; 
    s1 = s2; 
    s2 = temp; 
} 
+0

Referenzversion: 'void swap (const char * und s1, const char * und s2) { \t const char * temp = s1; \t s1 = s2; \t s2 = temp; } '// call' swap (s1, s2); ' – BLUEPIXY

+1

Wenn Sie C++ verwenden, können Sie einfach' std :: swap' verwenden – Sean

+0

std :: swap oder nach Hause gehen! OP ist C++, das ist der Weg, Dinge zu tauschen. – Robinson