A voir également:
- [programmer en C] - erreur de segmentation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Programmer sms - Guide
- Programmer mail gmail - Guide
- Erreur 1001 outlook - Accueil - Bureautique
6 réponses
*q++ = c; // erreur car q n'a pas été alloué (par new en C++ ou malloc en C)
si tu veux lire des lignes completes du fichier utilise la fonction C
sscanf
elle lit une ligne d'un fichier dans une chaine de caractere C (qui doit avoir ete allouée (parfois plus grnde que prévue))
si tu veux lire des lignes completes du fichier utilise la fonction C
sscanf
elle lit une ligne d'un fichier dans une chaine de caractere C (qui doit avoir ete allouée (parfois plus grnde que prévue))
merci de ta réponse !!
mais q est un pointeur, que j'ai défini par q=seq.
il a besoin d'etre alloué ?
mais q est un pointeur, que j'ai défini par q=seq.
il a besoin d'etre alloué ?
ok, c bon ca marche !!
en fait j'ai alloué seq :
seq = malloc(10 000 000 );
j'ai mis un chiffre volontairement énorme, car la chaine que je veux lire peut contenir jusqu'a 10 000 000 caracteres.
serait-ce judicieux de réallouer la variable une fois que sa longueur est connue ?
du genre :
len = lenstr(seq);
new_seq = malloc(len);
free(seq);
en fait j'ai alloué seq :
seq = malloc(10 000 000 );
j'ai mis un chiffre volontairement énorme, car la chaine que je veux lire peut contenir jusqu'a 10 000 000 caracteres.
serait-ce judicieux de réallouer la variable une fois que sa longueur est connue ?
du genre :
len = lenstr(seq);
new_seq = malloc(len);
free(seq);
Bizarre quand je compile ton code je n'ai aucun blème. Pour le coup du pointeur je pense pas que y a une erreur ptr=ptr ça parait logique mais j'ai pas pigé tu pointe sur quoi.
Cours (rapide je suis au boulot ...) sur les pointeurs
char* str1 = NULL; // déclaration mais pas ALLOCATION
char* str2 = (char*) malloc(strlen("bonjour") + 1); // alloue la taille de bonjour + 1 caractère spécial '\0' qui est OBLIGATOIRE et qui indique la fin de la chaine
puis on fait (par exemple)
sprintf(str2, "%s\0", "bonjour");
c'est à dire recopie "bonjour" et '\0' sur str2
en fin de programme les chaines allouées par 'malloc' doivent zetre desallouées
if (str2!=NULL)
{
free(str2); // OBLIGATOIRE sinon l
str2 = NULL; // = NULL
}
char* str1 = NULL; // déclaration mais pas ALLOCATION
char* str2 = (char*) malloc(strlen("bonjour") + 1); // alloue la taille de bonjour + 1 caractère spécial '\0' qui est OBLIGATOIRE et qui indique la fin de la chaine
puis on fait (par exemple)
sprintf(str2, "%s\0", "bonjour");
c'est à dire recopie "bonjour" et '\0' sur str2
en fin de programme les chaines allouées par 'malloc' doivent zetre desallouées
if (str2!=NULL)
{
free(str2); // OBLIGATOIRE sinon l
str2 = NULL; // = NULL
}
le cast c'est pas sécurité car malloc rend du void* et pas du char*
concerant le = NULL
c'est pour t'assurer de ne pas "par oubli" plus tard dans le code utiliser ta chaine SANS l'avoir allouer et initialiser
du stykle
char* str;
printf("%s", str); // car ici TOUT peut arriver (plantage ou pas, affichage correct (par miracle) ou pas ...
concerant le = NULL
c'est pour t'assurer de ne pas "par oubli" plus tard dans le code utiliser ta chaine SANS l'avoir allouer et initialiser
du stykle
char* str;
printf("%s", str); // car ici TOUT peut arriver (plantage ou pas, affichage correct (par miracle) ou pas ...
Cours (rapide je suis au boulot ...) sur les pointeurs
char* str1 = NULL; // déclaration mais pas ALLOCATION
char* str2 = (char*) malloc(strlen("bonjour") + 1); // alloue la taille de bonjour + 1 caractère spécial '\0' qui est OBLIGATOIRE et qui indique la fin de la chaine
puis on fait (par exemple)
sprintf(str2, "%s\0", "bonjour");
c'est à dire recopie "bonjour" et '\0' sur str2
en fin de programme les chaines allouées par 'malloc' doivent zetre desallouées
if (str2!=NULL)
{
free(str2); // OBLIGATOIRE sinon la mémoire devient toute pourrie (comme du gruyère avec des blocs non libérés)
str2 = NULL; // = NULL
}
char* str1 = NULL; // déclaration mais pas ALLOCATION
char* str2 = (char*) malloc(strlen("bonjour") + 1); // alloue la taille de bonjour + 1 caractère spécial '\0' qui est OBLIGATOIRE et qui indique la fin de la chaine
puis on fait (par exemple)
sprintf(str2, "%s\0", "bonjour");
c'est à dire recopie "bonjour" et '\0' sur str2
en fin de programme les chaines allouées par 'malloc' doivent zetre desallouées
if (str2!=NULL)
{
free(str2); // OBLIGATOIRE sinon la mémoire devient toute pourrie (comme du gruyère avec des blocs non libérés)
str2 = NULL; // = NULL
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
c bon, tout le prgrme fait ce j'attend de lui.
merci pour le coup de pouce.
merci pour le coup de pouce.