Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/02/2019, à 18:53

twist35

[Résolu] Core Dumped avec un tableau de caractères

Bonjour,
je suis sous Ubutu depuis peu et j'ai remarqué une erreur lorsque je compile ce programme qui doit inverser un tableau de caractère:

#include <stdio.h>
#include <stdlib.h>

char revstr(char* str)
{
  int i = 0;
  int fin = 0;
  char temp;

  while(str[i] != '\0')
    {
      fin++;
	    printf("%d\n", fin);
		i++;
    }
	i = 0;
	fin--; // car \0
	
    for( i = 0; i <= fin/2; i++) // changer lettres
    {
      temp = str[i];

      str[i] = str[fin-i];
	
      str[fin-i] = temp;
		printf("%s\n\n", str);
    }
	printf("aa");

	return *str;
}

int main()
{
   	char stri[]  = "abcd";
	char* tab = NULL;
	
	*tab = revstr(stri);
	printf("%s\n", tab);	
	return 0;
}

J'ai réussis à isoler le "core dumped" : le programme s'arrête avant mon "printf("aa") ; juste avant la fin de ma première fonction.
Je pense avoir fais une erreur bête vis à vis des des tableaux de caractères.

Merci de votre aide,
Bonne journée,

Dernière modification par twist35 (Le 16/02/2019, à 19:53)

Hors ligne

#2 Le 16/02/2019, à 19:40

pingouinux

Re : [Résolu] Core Dumped avec un tableau de caractères

Bonsoir,
Il te suffit de changer quelques lignes.
Ligne 4

char *revstr(char* str)

Ligne 30

        return str;

Ligne 38

        tab = revstr(stri);

Hors ligne

#3 Le 16/02/2019, à 19:53

twist35

Re : [Résolu] Core Dumped avec un tableau de caractères

Bonsoir,
Merci beaucoup pour cette aide,
je dois m'embrouiller avec les pointeurs je pense.

Hors ligne

#4 Le 16/02/2019, à 20:33

pingouinux

Re : [Résolu] Core Dumped avec un tableau de caractères

Tu peux éventuellement simplifier la fonction revstr :

char *revstr(char* str)
{
  int i = 0;
  int fin = 0;
  char temp;
  
  while(str[fin] != '\0') fin++; fin--;

  while(i<fin)
  { 
    temp = str[i];
    str[i++] = str[fin];
    str[fin--] = temp;
  }
  
  return str;
}

Hors ligne