Je travaille sur un programme en C et la fonction suivante prend en trois paramètres et remplacera un caractère dans une chaîne avec un autre caractère. Eh bien, la majeure partie de cela fonctionne bien, mais je reçois une erreur en essayant d'exécuter cette partie du code: STR [POS] = CH;. Erreur dit "Emplacement d'écriture de violation d'accès 0x0133585b."
char *kstr = "hello"; int pos = 3; char s = '\0'; printf("\n Enter a character "); scanf("%c", &s); kstrput(kstr,pos,s); // calling the kstrput function printf("\n After kstrput: %s",kstr); //printing the struct to check value of the string
3 Réponses :
"Emplacement d'écriture de violation d'accès 0x0133585B." P>
vous faites p>
xxx pré> dans
str [pos] = ch; code> POS em> Valoring 3 est un index valide mais str em> est la chaîne littéral "Bonjour", un littéral à chaîne ne peut pas être modifié p> blockquote>
La bonne façon de pointer sur elle est d'utiliser le pointeur de type Notez également que dans "bonjour" code> est constant (non modifiable) et pourrait être (et peut-être probablement) stocké dans une mémoire en lecture seule.
const char * code>.
Ce que vous devez faire dans votre cas consiste à définir une matrice de
char code> et à l'initialiser à "Hello": p>
kstrup code> si
POS code> est égal à
strallen (str) code> alors il remplacera le
'\ 0' code> qui indique la fin de chaîne de caractères.
Meilleure utilisation: p>
Cette ligne en fonction de la fonction vide kRutput (char * str >
Affiche le code qui appelle la fonction. Vous passez probablement un littéral à chaîne, ce qui n'est pas écritable.
Si
POS == SHLEN (STR) CODE>, vous écrasez le terminateur code> NULL code> Terminator et
STR code> n'est plus une chaîne valide. Comportement non défini à partir du suivant
Impression code> suit.
L'utilisation de SHLEN de cette façon est presque toujours fausse: l'appelant de votre fonction doit donner la longueur de la chaîne comme «deviner» à l'intérieur de la fonction est très risquée.