hilfe bei Strings

Winner

Erfahrenes Mitglied
Hallo zusammen

Habe folgendes Prblem. Und zwar will ich aus einer Datei die Zeilen in einen String Array schreiben! Aber irgendwo ist ein fehler er macht es einfach nicht! Ständig geht der Debugger auf wenn man es ausführen willl!!
Es ist ein einfaches Konsoelnprogramm in visual c++:

Code:
Code:
...
char* string[100]; //erzeugt meinen lang ersehnten String Array :-)
...
	FILE *rtcm;
	rtcm= fopen(file_path_read,"r");

	if(rtcm!=0){
		printf("\nDatei lesbar");
		printf("\n%s gelesen",file_path_xml);

		int i=0;
		while(fscanf(rtcm, "%s", &string[i])!=EOF);{

			printf("\n%s", string[i]);
			i++;

		}

ich finde da denn Fehler nicht wo dran es liegt, dass der Inahlt der Datei nicht auf dem Bildschrim dargestellt wird!!

Bitte um hilfe und vorher schon mal besten dank
 
Hi,

mach aus dem string mal ein char array und versuchs nochmal!
Falls es immernoch nicht funktionieren sollte würde die fscanf Funktion gegen eine getc() Funktion tauschen. So funktioniert es zumindest bei mir immer! :)

Gruß
Dorschty
 
Vielen dank schon mal, aber ich bin mit deinen Tipps immer noch niucht weiter gekommen!

Ich verzweifel hier noch, das ich die Daten nicht gelesen bekomme!

Gruß und betteln um HILFE!

Und ich kann nicht aus meinen String ein char machen da es so sein soll

String[0]=bbbabbaba
String[1]=nnnnnnnn

verstehst du
 
Hallo,

da sind mehrere Fehler in deinen Code:
- das String-Array muss als zweidimensionales Array vollständig deklariert werden, d.h. der Speicherplatz für die einzelnen Zeilen muss auch festgelegt werden.
- Nach der while-Schleife hattest du ein Semikolon; der nachfolgende Code (printf...) wird daher erst nach Durchlauf der Schleife einmal ausgeführt.
- Wenn du ein zweidimensionales Array einfach indizierst, ist das schon ein Zeiger. Das "&" entfällt daher.

Der folgende (fehlerbereinigte) Code müsste laufen:
C++:
char string[100][120]; //erzeugt meinen lang ersehnten String Array 

FILE *rtcm;
rtcm= fopen(file_path_read,"r");

if( rtcm != 0 )
{
    int i=0;
    
    while( fscanf(rtcm, "%s", string[i]) != EOF )
    {
        printf("\n%s", string[i]);
        i++;
    }
}
Gruß
MCoder
 
Vielen dank für dei Hilfe!

Habe den fehler zwischen durch herausbekommen!

Aber wie schaffe ich es, das das einlesen nicht nach einem "LEERZEICHEN" in der Datei abgebrochen wird besser gesagt die komplette Zeile in ein Array feld geschrieben wird ich hoffe ihr wisst was ich meine!

Vielen dank für eure Bemühungen
 
Hallo, nimm "fgets" statt "fscanf":
C++:
while( fgets(string[i], sizeof(string[i]), rtcm) )
{
    // ...
}
Gruß
MCoder
 
Noch eine frage dazu!

Wie bekomme ich aus meinem String

<X>3985232.388</X>

nur die Ziffern (3985232.388) heraus!

Kann mir das einer sagen Wäre echt hilfreich, denn dann habe ich fast alles gelöst was ich machen muss!

Ich habe dazwar eine sehr dumme Lösung parat aber ich denke das kann man auch mit irgendwelchen andern Methoder oder funktionen machen oder

Also mein Ansatz ist,

ich lese einfach die einzelen Zeichen aus über diesen Ansatz:

String[3]
String[4]

und bastel mir so einen neuen String! Denke das es da eleganterer Lösungen gibt


Also schon mal besten dank
 
Zuletzt bearbeitet:
Dein Ansatz ist schon ganz ok. Du musst den String zeichenweise durchgehen und testen, ob das Zeichen eine Ziffer bzw. ein Dezimaltrenner ist. Das Ganze kann man z.B. mit Zeigern auf den Quell- und Zielstring recht effizient lösen:
C++:
char string[] = "<X>3985232.388</X>";
char number[100];

char *ptr1 = string;
char *ptr2 = number;

while( *ptr1 )
{
    if( isdigit(*ptr1) || *ptr1 == '.' ) { *ptr2++ = *ptr1; }
    ptr1++;
}

*ptr2 = '\0';
Gruß
MCoder
 
Zurück