Bonjour,
Nous observons un comportement différent au niveau d'un programme écrit en C/C++ entre une compilation GCC sous windows (mingw / codeblock) et GCC linux (codeblock).
En fait, pour lire dans un fichier une ligne,
- nous ouvrons un flux sur le fichier à l'aide de :
- nous déclarons un buffer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
- Nous lisons chaque ligne du fichier à l'aide de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
- Pour pouvoir travailler avec les fonctions de la bibliothèque C++ <string>, nous convertissons ce buffer en std::string :
Code : Sélectionner tout - Visualiser dans une fenêtre à part fin.getline(buf,MAX_LINE_LENGTH); //lecture
- Ensuite, pour savoir si on est face à une ligne vide, nous utilisons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
C 'est ici que tout se gâte! D'une part, sous linux, la fonction strlen n'est pas incluse dans string. Il faut donc rajouter cstring.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
Une fois rajoutée, le résultat est complètement différent de sous windows. Il semble qu'il y ait deux solutions possibles :
- Soit "getline" supprime seule sous windows \r\n ou \n (std::endl d'un autre programme C++)
- Soit "strlen" ne prend pas en compte les \r\n ou \n
Quelle est selon vous la cause? Comment corriger ceci "proprement" ?

 

 
		
		 
         
 

 
			
			


 
   


 Comportement différent GCC windows/linux : strlen ou getline?
 Comportement différent GCC windows/linux : strlen ou getline?
				 Répondre avec citation
  Répondre avec citation 
  
 

 .
.  Envoyé par bretus
 Envoyé par bretus
					
				 
			 
 

 
			 
						
Partager