2010-04-22 11 views
3

J'ai la fonction simple ci-dessous qui permet d'échanger deux caractères d'un tableau de caractères. Cependant, je reçois une "exception non gérée à 0x01151cd7 dans Bla.exe: 0xC0000005: violation d'accès emplacement d'écriture 0x011557a4." Erreur. Les deux index (gauche et droite) sont dans la limite du tableau. Qu'est-ce que je fais mal? J'utilise VS2010 avec C/C++ non administré. Merci!Fonction d'échange pour un caractère *

+0

"ABC" a le type 'const char [4 ] ', qui peut être converti sans risque en un' const char * '. La conversion en simplement 'char *' est obsolète, mais implicite. – GManNickG

+0

Votre compilateur devrait vous donner un avertissement à propos d'une distribution obsolète de 'const char *' à 'char *' ici. Écoutez votre compilateur! –

+0

En outre, vous devez utiliser le type 'size_t' pour stocker les index et les offsets de tableau plutôt qu'un' int'. –

Répondre

8

Vous ne pouvez pas modifier un littéral de chaîne. essayez plutôt ceci:

char s[] = "ABC" 
swap(s, 0, 1); 
printf("%s\n", s); 
+0

Ceci est correct. Essayez d'utiliser ce code pour l'appeler: char swapStr [3] = "ABC"; swap (swapStr, 0,1) – TerrorAustralis

+0

+1: Battez-moi à la réponse de quelques secondes. –

+0

Merci les gars! Ça marche! – Martin

1

"ABC" est dans la section Rodata, de sorte que vous ne pouvez pas le changer, s'il vous plaît voir l'assemblée:

 .section  .rodata 
.LC0: 
     .string "ABC"