Bonjour
Si j'alloue dynamiquement une chaîne de caractère, après si je veux supprimer les derniers caractères, je peux utiliser realloc pour supprimer ces caractères.
Maintenant si je veux plutôt supprimer les premiers caractères est-ce qu'il existe une fonction un peu comme realloc qui pourrait le faire, plutôt qu'utiliser une boucle for ?
J'avais aussi utiliser memcpy et realloc comme indiqué dans le code suivant :
J'avais fait à peu près la même chose dans mon programme et je l'ai compilé avec gcc et ça fonctionnait avec les optimisations -O0 et -O1, mais avec les autres optimisations, le programme se bloquait dans une boucle infinie. Par contre j'ai pas eu de problème avec l'exemple simple que j'ai montré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { #define ANCIENNE_TAILLE 16 #define NOUVELLE_TAILLE ANCIENNE_TAILLE - 0xA + 1 char * str_valeur = malloc(ANCIENNE_TAILLE * sizeof(char)); strcpy(str_valeur, "0123456789ABCDEF"); // Copie ABCDEF\0 dans le début de la chaîne et réalloue la chaîne memcpy(str_valeur, str_valeur + 0xA, NOUVELLE_TAILLE); str_valeur = realloc(str_valeur, NOUVELLE_TAILLE); // Affiche ABCDEF printf("%s\n", str_valeur); }
Je ne suis pas sûr si j'ai le droit d'appeler memcpy comme j'ai fait, parce que dans mon cas le 2e pointeur passé à memcpy pointe sur une partie du contenu du premier pointeur et apparemment ça fonctionne pas avec trop d'optimisation.
Merci pour votre aide
Jonas
Partager