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 *
Répondre
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);
Ceci est correct. Essayez d'utiliser ce code pour l'appeler: char swapStr [3] = "ABC"; swap (swapStr, 0,1) – TerrorAustralis
+1: Battez-moi à la réponse de quelques secondes. –
Merci les gars! Ça marche! – Martin
"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"
"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
Votre compilateur devrait vous donner un avertissement à propos d'une distribution obsolète de 'const char *' à 'char *' ici. Écoutez votre compilateur! –
En outre, vous devez utiliser le type 'size_t' pour stocker les index et les offsets de tableau plutôt qu'un' int'. –