Datei lesen und in Array speichern..



  • Hallo Forum,

    ich habe leider nach langem suchen keine Hilfe hier gefunden...

    Ich habe eine Datei (Datei.conf) die ich auslesen möchte:

    Datei.conf:
    127.0.0.1 80
    127.0.0.2 81

    Jetzt soll jede IP-Adresse und jeder Port in z.B. einem Array gespeichet werden..

    Hat schonmal jemand sowas gemacht und kann helfen?

    Danke schonmal...



  • so z.b:

    IP_PORT_ITEM ips[MAX_IPs]; // das array
    
    	FILE *file = fopen("D:\\oink.txt","r"); // öffne das file
    	if(file!=NULL)
    	{
    		int iItem = 0;	// zähler zum füllen des array
    		char line[128];	// buffer für die aktuelle zeile
    		while(fgets(line,128,file)!=NULL)	// lese eine zeile zeile ein
    		{
    			char *ip = strtok( line, " " );			// alles vor dem " " ist die ip
    			char *port = strtok( NULL, " \n\0" );	// nach der ip kommt der port
    			if(iItem < MAX_IPs)
    			{
    				ips[iItem].port = atoi(port);	// mach ein int draus
    				strncpy(ips[iItem].ip,ip,16);	// kopiere die ip ins array
    				++iItem;
    			}
    		}
    
    		fclose(file);
    	}
    


  • eventuell kann einem hier scanf bzw sscanf das leben vereinfachen... wenn man sich nicht mit strtok und einer anschliessenden typenumwanldung rumärgern will...



  • Habe genau dasselbe Problem wie Windalf.

    Nun hab ich mal versucht, CMatts Vorschlag zu implementieren. Habe folgende beiden Variablen dazu:

    char part4 [1024];
    char *tmp7;
    

    wobei tmp7 ein bereits bearbeiteter String ist.

    Wenn ich nun CMatts strncpy-Anweisung richtig verstanden habe, müsste das bei mir lauten (in einer while-Schleife und Laufvariable l):

    strncpy(part4[l-1],tmp7,sizeof(tmp7));
    

    Da gibts dann aber einen Compilierungsfehler den ich inzwischen häufiger gesehen habe:

    warning: passing arg 1 of `strncpy' makes pointer from integer without a cast
    

    Hat irgendjemand vielleicht ne gute Idee, an was das liegen könnte?



  • Du übergibst bei strncpy als ersten paramter ein char.

    strncpy(part4,tmp7,sizeof(tmp7));
    

    oder

    strncpy(&part4[0],tmp7,sizeof(tmp7));
    


  • strncpy ist nur ein strcpy das aufpasst das nicht das was passiert, was bei c und statischen arrays so häufig passiert -> über den buffer hinaus schreiben.
    Der letzte parameter gibts an, wie größ dein buffer ist (1. parameter). Ist der 2. string länger als der 1. schreibst du nicht über den speicherblock hinaus, sondern strncpy stop da wo fertig ist (strcpy sollte IMHO verboten werden).

    strncpy(part4,tmp7,sizeof(tmp7));
    

    das ist totaler schwachsinn..
    1. sizeof(char*) ==> schmarn
    2. wenn du statt sizeof strlen verwendest arbeitest du aber immer noch an strncpy vorbei, dann kannst gleich strcpy nehmen... der 2. string interssiert uns nicht, der hat kann ja nicht mehr wachsen.



  • pyrocommander schrieb:

    Hat irgendjemand vielleicht ne gute Idee, an was das liegen könnte?

    In der MSDN gibt es immer gute Ideen! 😃



  • Horst2 schrieb:

    pyrocommander schrieb:

    Hat irgendjemand vielleicht ne gute Idee, an was das liegen könnte?

    In der MSDN gibt es immer gute Ideen! 😃

    Oder in den man- Pages! 🙂 Oder bei google! :p Haben wir das Thema nicht schon mal gehabt? Wie wäre es mit der Suchfunktion? 😡



  • Hallo,

    evtl. hast du zusätzlich noch vergessen string.h einzubinden.


Anmelden zum Antworten