0
votes

Emplacement d'écriture de violation d'accès 0x0133585b Erreur

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 commentaires

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) , vous écrasez le terminateur NULL Terminator et STR n'est plus une chaîne valide. Comportement non défini à partir du suivant Impression 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.


3 Réponses :


1
votes

"Emplacement d'écriture de violation d'accès 0x0133585B."

vous faites xxx

dans str [pos] = ch; POS Valoring 3 est un index valide mais str est la chaîne littéral "Bonjour", un littéral à chaîne ne peut pas être modifié


0 commentaires

2
votes

"bonjour" est constant (non modifiable) et pourrait être (et peut-être probablement) stocké dans une mémoire en lecture seule.

La bonne façon de pointer sur elle est d'utiliser le pointeur de type const char * . Ce que vous devez faire dans votre cas consiste à définir une matrice de char et à l'initialiser à "Hello": xxx

Notez également que dans kstrup si POS est égal à strallen (str) alors il remplacera le '\ 0' qui indique la fin de chaîne de caractères. Meilleure utilisation: xxx


0 commentaires

0
votes

Cette ligne en fonction de la fonction vide kRutput (char * str >


0 commentaires