Forum Clubic

Strcat provoque une erreur de segmentation

Bonjour,

J’ai le programme ci dessous et j’ai apperement une erreur d’execution. Le debug me retourne “Une violation d’accès (erreur de segmentation) est apparue dans votre programme”. D’evidence le problème vient de strcat (ça marche quand j’enlève la ligne) mais je ne sais pas pourquoi. J’utilise dev c++ sous windows. Merci d’avance pour votre aide

#include <string.h>

int main(int argc, char *argv[])
{
char *name,*title;

printf( "Enter your name: " );
scanf( "%s", name );
title = strcat( name, " the Great" );
printf( "Hello, %s\n", title );


    system("PAUSE");   
    return 0;
}

Et tu t’en étonnes?

char *name, *title;

Quand tu fais ça, tu initialises les pointeurs name & title vers des zones mémoire indéfinies. name & title peuvent valoir 0 (= NULL) comme elles peuvent valoir 475454546.

Essaye ça par exemple :

char name[4096], title[4096];

Sinon documentes toi sur l’allocation en C (malloc, calloc, free, realloc, Xalloc, totoalloc)
Edité le 09/11/2007 à 22:19

pas besoin d’allouer une taille à title, mais comme l’a dit Sans-Nom, il faut allouer une taille à name (et j’ai mis 15minutes à le trouver :paf: )

merci à : homepage.mac.com…

Ok j’ai compris ma bourde mais maintenant il me retourne carrément une erreur :
54 C:\Dev-Cpp\main.c incompatible types in assignment

Pourtant ces bien des char correctement definis

Ne cherche pas plus loin :

title = strcat( name, " the Great" );

titre = char[4096] != char* (en essence, ensuite les deux sont la même chose, juste que c’est pas stocké au même endroit ni alloué de la même façon).

Tu es sûr que strcat renvoie quelque chose? (m’en souviens plus, et j’utilisais strncat moi).

en effet, ça ne retourne rien, c’est pour ça
Tout marche maintenant.
Merci pour ton aide mysterieux sans Nom

bonjour,
j’ai moi aussi un problème avec strncat.
dans le code suivant, jstring est une structure contenant un char* et un entier (la taille de la chaine).
le but est de faire une fonction qui prends comme paramètres 2 jstrings et qui ajoute la chaine du deuxième jstring à la chaine du premier jstring.
voici mon code:


	string1->length=string1->length+string2->length
	strncat ( string1->characters, string2->characters, string2->length);

ce que je me suis dit, c’est que peut-être il faudrait réallouer de la place à la fin de la première chaine pour pouvoir ajouter la 2ème? mais je vois pas comment faire. si j’écris

string1->characters=(char*)malloc(jstring2->length*sizeof(char))

, est-ce que ça va ajouter des cases à la fin ou réinitialiser ??

je vous remercie de votre aide

Bonjour,

Crée plutôt un nouveau topic, s’il te plaît. :slight_smile:

Pour faire simple, tu es concrètement en train de “polluer” le topic d’un autre - qui plus est, datant de 2007.