2016-04-28 1 views
0

J'essaye d'écrire une fonction d'échange, qui permutera des données de 2 pointeurs. Je reçois une erreur de segmentation. Quelqu'un peut-il aider, s'il vous plaît?Échange de données de pointeurs en C++

P.S. Je sais que la classe de corde a construit dans la fonction d'échange mais j'essaye d'apprendre comment des pointeurs fonctionnent.

#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;' n'écrit qu'un caractère et change le littéral de chaîne. 3) Vous avez besoin de 'supprimer []' – BLUEPIXY

+0

Connexe: [Modifier la chaîne littérale] (http://stackoverflow.com/q/5464183/514235). – iammilind

+0

i <= strlen (s1) devrait être i Striker

Répondre

4

Vous pouvez utiliser la fonction swap comme

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

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

Et appeler cette fonction

swap(&s1, &s2); 

Si vous utilisez c++ vous pouvez utiliser la version de référence proposée par BLUEPIXY

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

version de référence: 'void swap (const char * & s1, const caractère * & s2) { \t const char * temp = s1; \t s1 = s2; \t s2 = temp; } '// appel' swap (s1, s2); ' – BLUEPIXY

+1

Si vous utilisez C++, vous pouvez toujours utiliser' std :: swap' – Sean

+0

std :: swap ou rentrez chez vous! OP est C++, c'est le moyen d'échanger des choses. – Robinson