Segfault sur un for en C
Résolu
Tisiph0n3
-
Tisiph0n3 -
Tisiph0n3 -
Bonjour,
j'ai un programme qui retourne une ligne lue dans un file descriptor, sans le \n mais qui doit aussi fonctionner si par exemple on lit dans un fichier ne contenant pas de \n dans ce cas mon programme est censé retourner l'intégralité du fichier.
C'est là que ça coince pour savoir quoi retourner j'ai une boucle qui analyse le buffer initialisé par la fonction read,
et qui compte le nombre de carctères avant d'avoir un \n ou un \0 et qui a cette tronche:
for (i= 0; (buf[i] != '\n') || (buf[i] != '\0'); i++)
{
}
Et c'est ça qui fait segfaulter le prog, chose curieuse :
for (i= 0; (buf[i] != '\n'); i++)
{
}
là ça ne segfault pas a moins de lire dans un fichier ne contenant pas de \n d'où la necessité de chercher aussi un \0 indiquant la fin de la chaine du buffer afin d'éviter de depasser le buffer et par conséquent de segfaulter.
évidemment:
for (i= 0; (buf[i] != '\0'); i++)
{
}
fonctionne aussi trè bien mais là ça m'affihe le fichier dans son intégralité ce qui n'est pas le but recherché.
Donc pour resumer pourquoi
for (i= 0; (buf[i] != '\n') || (buf[i] != '\0'); i++)
{
}
segfault, alors que:
for (i= 0; (buf[i] != '\0'); i++)
{
}
ou:
for (i= 0; (buf[i] != '\n'); i++)
{
}
ne provoquent pas de segfault?
Pour finir donc comment je fais moi pour que mes deux conditions soient prises en compte?
Merci d'avance
j'ai un programme qui retourne une ligne lue dans un file descriptor, sans le \n mais qui doit aussi fonctionner si par exemple on lit dans un fichier ne contenant pas de \n dans ce cas mon programme est censé retourner l'intégralité du fichier.
C'est là que ça coince pour savoir quoi retourner j'ai une boucle qui analyse le buffer initialisé par la fonction read,
et qui compte le nombre de carctères avant d'avoir un \n ou un \0 et qui a cette tronche:
for (i= 0; (buf[i] != '\n') || (buf[i] != '\0'); i++)
{
}
Et c'est ça qui fait segfaulter le prog, chose curieuse :
for (i= 0; (buf[i] != '\n'); i++)
{
}
là ça ne segfault pas a moins de lire dans un fichier ne contenant pas de \n d'où la necessité de chercher aussi un \0 indiquant la fin de la chaine du buffer afin d'éviter de depasser le buffer et par conséquent de segfaulter.
évidemment:
for (i= 0; (buf[i] != '\0'); i++)
{
}
fonctionne aussi trè bien mais là ça m'affihe le fichier dans son intégralité ce qui n'est pas le but recherché.
Donc pour resumer pourquoi
for (i= 0; (buf[i] != '\n') || (buf[i] != '\0'); i++)
{
}
segfault, alors que:
for (i= 0; (buf[i] != '\0'); i++)
{
}
ou:
for (i= 0; (buf[i] != '\n'); i++)
{
}
ne provoquent pas de segfault?
Pour finir donc comment je fais moi pour que mes deux conditions soient prises en compte?
Merci d'avance
A voir également:
- Segfault sur un for en C
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
5 réponses
Tu peux utiliser la fonction getline.
http://man.developpez.com/man3/getline.3.php
Il suffit ensuite de créer une fonction qui prend en paramètre la chaîne lue et qui supprime le '\n' (s'il est présent), par exemple en le remplaçant par un '\0'.
Bonne chance
http://man.developpez.com/man3/getline.3.php
Il suffit ensuite de créer une fonction qui prend en paramètre la chaîne lue et qui supprime le '\n' (s'il est présent), par exemple en le remplaçant par un '\0'.
Bonne chance
Desolé je n'ai pas le droit a d'autres fonctions systeme que read pour ce prog enfin c'est plutot une fonction qu'un prog.
Merci
Merci
ok bon ben ce pb est résolu j'ai remplacé les || du for par && c'est bizarre bon maintenant le pb c'est qu'il m'affiche des carctères n'étant pas dans le fichier à la fin
for (i= 0; (buf[i] != '\n') || (buf[i] != '\0'); i++)
boucle infinie ! buf[i] et TOUJOURS différent de \ ou de \n !!!!
il faudrait &&
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question