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 :
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);
}
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é.
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