Initialisation qui fait une segmentation fault
Bonsoir à tous,
je suis étonné de voir de ce code me fait une segmentation fault !!!
Code:
1 2 3 4 5 6 7 8 9 10 11
|
#include <stdio.h>
#include <string.h>
int main (int argc,char* argv[])
{
char* res ="";
res=strcat(res,"coucou");
printf(res);
return 0;
} |
Aprés debuggage je me suis rendu compte que c'est le char* res="" qui marche pas!
Pourquoi?
Comment résoudre mon problème?
Bye
Rod
Re: Initialisation qui fait une segmentation fault
Citation:
Envoyé par rod59
Code:
1 2 3 4 5 6 7 8 9 10 11
|
#include <stdio.h>
#include <string.h>
int main (int argc,char* argv[])
{
char* res ="";
res=strcat(res,"coucou");
printf(res);
return 0;
} |
Aprés debuggage je me suis rendu compte que c'est le char* res="" qui marche pas!
Pourquoi?
Comment résoudre mon problème?
Bye
Rod
Comme ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void)
{
char *res=NULL;
res=malloc(sizeof(char)*100);
if(res != NULL) {
sprintf(res,"coucou");
printf("%s\n", res);
free(res);
res=NULL;
}
return 0;
} |
char* res ="";
ca c'est juste mais res n'est plus modifiable du coup.
Re: Initialisation qui fait une segmentation fault
Citation:
Envoyé par rod59
je suis étonné de voir de ce code me fait une segmentation fault !!!
Rien d'étonnant, le comportement est indéfini.
Citation:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
#include <stdio.h>
#include <string.h>
int main (int argc,char* argv[])
{
char* res ="";
res=strcat(res,"coucou");
printf(res);
return 0;
} |
Aprés debuggage je me suis rendu compte que c'est le char* res="" qui marche pas!
Pourquoi?
1 - 'res' est un pointeur vers une chaine littérale, qui est donc non modifiable.
2 - cette chaine à une taille définie qui ne peut pas être augmentée.
Code:
1 2
|
Comment résoudre mon problème? |
On peut faire ceci :
Code:
1 2 3 4
|
char res[BIG_ENOUGH] = "";
strcat (res, "coucou"); |
on peut aussi travailler complètement en dynamique à coup de malloc() / realloc()...