Segfault sur un for en C

Résolu/Fermé
Tisiph0n3 - 27 nov. 2007 à 17:10
 Tisiph0n3 - 27 nov. 2007 à 19:04
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
A voir également:

5 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
27 nov. 2007 à 17:37
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
0
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
0
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
0
for (i= 0; (buf[i] != '\n') || (buf[i] != '\0'); i++) 


boucle infinie ! buf[i] et TOUJOURS différent de \ ou de \n !!!!

il faudrait &&
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
en effet merci pour votre aide à ts le pb est reglé tout marche nickel ;)
0