sscanf löscht string
-
Hallo,
beim Einlesen einer Datei möchte ich eine Zeile zweimal auswerten. Die Online Hilfe verweisst auf sscanf, welches als Rückgabewert lediglich einen Integer Wert hat. Sobald ich aber sscanf auf die Zeile anwende, wird der Inhalt des char-Arrays gelöscht, sowie sämtliche - und das ist mein Problem - Kopien dieses Arrays. Hat jemand eine Idee, wie man so etwas besser machen könnte?Gruß
TAlexp.s. Mist - falsches Forum. Sorry Admin...
//--------------------------------------------------------------------------- void __fastcall TMain::LoadModel(AnsiString filename){ //--------------------------------------------------------------------------- FILE *fid; char *string,element[4],*name; AnsiString copy; int id,coord_id; float x, y, z; int x_dof,y_dof,z_dof,px_dof,py_dof,pz_dof; fid = fopen(filename.c_str(),"rt"); while(1){ string = ReadLine(fid); copy = string; sscanf(string,"%s",&element); if (strncmp(element,"NODE",4) == 0){ string = copy.c_str(); sscanf(string,"%4s,%d,%s,%d,%6.3f,%6.3f,%6.3f,%1d,%1d,%1d,%1d,%1d,%1d", &element, &id,&name,&coord_id, &x,&y,&z, &x_dof,&y_dof,&z_dof, &px_dof,&py_dof,&pz_dof); copy = name; SetNode(id,copy,coord_id, x,y,z, x_dof,y_dof,z_dof, px_dof,py_dof,pz_dof); } if (!string) break; } fclose(fid); }
-
ich weiss zwar nich was ein AnsiString is aber wahrscheinlich hast du einfach zwei zeiger auf den gleichen string
für ne echte kopie musst du strcpy oder memcpy nehmen
-
Ich hatte das mit memcpy schon versucht. Ebenfalls ein Löschen des Inhalts. Aber ich glaube ich habe die Lösung gefunden. Manchmal hilft eben der Gang zum Kühlschrank...
sscanf(string,"%s",&element);
muss ersetzt werden durch
sscanf(string,"%c",&element);
dann funktionierts.
Trotzdem danke,
TAlex.
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum Borland C++ Builder (VCL/CLX) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wo bitte reservierst du Speicher für "string"?
Ausserdem solltest du dich mal in unserer FAQ über die Risiken von c_str() informieren...
-junix