Modification simple des chaînes de caractères C à l’aide de pointeurs

J’ai deux pointeurs sur la même chaîne de caractères. Si j’incrémente le second pointeur de un point et assigne la valeur du second pointeur à celle du premier, le premier caractère de la première chaîne doit être modifié. Par exemple:

#include "stdio.h" int main() { char* original_str = "ABC"; // Get pointer to "ABC" char* off_by_one = original_str; // Duplicate pointer to "ABC" off_by_one++; // Increment duplicate by one: now "BC" *original_str = *off_by_one; // Set 1st char of one to 1st char of other printf("%s\n", original_str); // Prints "ABC" (why not "BBC"?) *original_str = *(off_by_one + 1); // Set 1st char of one to 2nd char of other printf("%s\n", original_str); // Prints "ABC" (why not "CBC"?) return 0; } 

Ça ne marche pas. Je suis sûr qu’il me manque quelque chose d’évident – j’ai très très peu d’expérience avec C.

Merci de votre aide!

Vous essayez de modifier un littéral de chaîne. Les littéraux de chaîne ne sont pas modifiables (c’est-à-dire qu’ils sont en lecture seule).

Un programme qui tente de modifier un littéral de chaîne présente un comportement indéfini: le programme peut modifier “avec succès” le littéral de chaîne, le programme peut se bloquer (immédiatement ou ultérieurement), un programme peut afficher un comportement inhabituel ou inattendu, ou quelque chose d’autre pourrait arriver. Tous les paris sont désactivés lorsque le comportement n’est pas défini.

Votre code déclare original_ssortingng tant que pointeur sur le littéral de chaîne "ABC" :

 char* original_ssortingng = "ABC"; 

Si vous changez ceci en:

 char original_ssortingng[] = "ABC"; 

vous devriez être bon pour aller. Cela déclare un tableau de caractères initialisé avec le contenu du littéral de chaîne "ABC" . Le tableau reçoit automatiquement une taille de quatre éléments (au moment de la compilation), car il s’agit de la taille requirejse pour contenir le littéral de chaîne (y compris le terminateur null).

Le problème est que vous ne pouvez pas modifier le littéral “ABC”, qui est en lecture seule.

Essayez char[] original_ssortingng = "ABC" , qui utilise un tableau pour contenir la chaîne que vous pouvez modifier.