2010-11-18 23 views
0

Pourquoi ce code imprime-t-il le caractère sans le premier caractère ?? Il dit ocalhost au lieu de localhost. Reconnaissant de l'aide.Premier caractère qui disparaît dans ifstream

#include <winsock2.h> 
#include <mysql/mysql.h> 
#include <iostream> 
#include <windows.h> 
#include <fstream> 
using namespace std; 

int main() {  
int b = 0; 
char * pch; 
int stringLength = 0; 
char textRead[50]; 
ifstream infile("config.ini", ios::in | ios::binary);    
if(!infile) { 
      cout << "ERROR: config.ini not found!\n"; 
      system("pause"); 
      exit(0); 
} 

infile >> textRead; 
stringLength = strlen(textRead); 
pch=strchr(textRead,'"'); 
while(pch != NULL) { 
      infile.seekg(pch-textRead-1); 
      infile >> textRead; 
      pch = strchr(pch+1,'"'); 
} 
cout << textRead; 
infile.close(); 
+0

Impossible de dire sans le contenu de 'config.ini'. –

+2

Pourquoi écrivez-vous du code pour analyser les fichiers INI? Vous utilisez clairement Windows, alors appelez ['GetPrivateProfileString'] (http://msdn.microsoft.com/en-us/library/ms724353.aspx) pour obtenir les valeurs INI dont vous avez besoin. –

Répondre

0

l'intérieur de votre boucle pendant que vous appelez:

infile >> textRead; 
    pch = strchr(pch+1,'"'); 

Lorsque vous essayez d'exécuter strchr dans la deuxième ligne, il fait référence encore revenir à la chaîne précédente que vous aviez en textRead pas le mot le plus récemment extrait .

Malheureusement, je ne peux pas déduire ce que vous essayez réellement de faire, donc je ne peux pas offrir de suggestions sur la façon de le réparer.

0

Je devine au contenu de config.ini, puisque vous ne l'avez pas fourni, mais il semble que le ifstream lit juste bien. mettez un cout << textRead << endl; après votre infile >> textRead; pour vérifier. C'est ce que j'utilise pour config.ini:

localhost = "foo" 

Votre logique avec seekg et amis semble cassé, cependant. seekg n'est pas destiné à être utilisé pour prendre en charge l'analyse (dans votre cas, sauter des citations); Honnêtement, je ne suis pas sûr de savoir ce que vous faites puisque pch-textRead-1 pourrait être -1 si le premier caractère est un guillemet.

Autre chose est que infile >> textRead; ne lit pas une ligne, il lit un mot et supprime les espaces de début.

Pour mémoire, j'omis

#include <winsock2.h> 
#include <mysql/mysql.h> 
#include <windows.h> 

car il est pas nécessaire.