J'essaie de faire une fonction qui inverse l'ordre d'une partie d'une chaîne. Je suis nouveau à l'utilisation de pointeurs et pour une raison quelconque, je peux accéder à l'emplacement des caractères de ma chaîne à copier un sous-chaîne, mais je ne peux pas les remettre dans le même endroit ...erreur de segmentation pendant memcpy
Lorsque je tente pour copier la sous-chaîne retournée dans son emplacement d'origine, je reçois
Signal de réception de programme SIGSEGV, Défaut de segmentation. 0x00007ffff7b5dc66 dans ??() from /lib/x86_64-linux-gnu/libc.so.6
Toute aide serait géniale!
Voici ce que j'ai jusqu'à présent:
void reverse(char* line, int start, int end){
char str[end-start];
memcpy (str , line + start , end-start);
reverseSubString (str);
memcpy (line + start, str , end-start);
}
void reverseSubString(char* str){
int i, j, len;
char temp;
i=j=len=temp=0;
len=strlen(str);
for (i=0, j=len-1; i<=j; i++, j--)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
Pourquoi ne pas simplement inverser votre sous-chaîne en place, au lieu de le copier, le renverser et le copier? Passez un argument de longueur à reverseSubString, au lieu d'utiliser strlen (qui est la source de votre bug de toute façon, comme mentionné dans les réponses ci-dessous). –
reverseSubString s'exécute sans problème, mais je vois d'où vous venez. J'ai fait les changements pour incorporer une longueur plus "solide" mais le second memcpy provoque toujours un défaut de segmentation. Je ai d'abord essayé de l'inverser en place était frapper le même problème. – ThomDall
"reverseSubString s'exécute sans problème" - Non, certainement pas ... pas sur une séquence arbitraire de caractères qui ne sont pas terminés par NUL. "Au départ, j'ai essayé de l'inverser en posant le même problème" - alors vous auriez dû essayer de comprendre et de résoudre ce problème, plutôt que d'ajouter des copies inutiles. –