Verständnisfrage zu fgets



  • Hallo Forum,

    Ich bastle gerase an einem Programm, das mir ein "Linux ls" in eine Datei schreibt, anschliessen wird diese Datei gelesen und aus diesen Dateinamen werden dann URLs generiert. Hier mal der Code, der lesen soll:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    int main (void)
    {
    	FILE *datei;
    	char text[300], *ptr, delimiter[]= "\x0A";
    //	
    	system("ls > test1.txt");
    //
    	datei = fopen ("test1.txt", "r");
    	if (datei != NULL)
    	{
    		while (fgets (text,sizeof(text),datei) != 0)
    		{
    			printf ("Record: %sLaenge: %li\n", text,sizeof(text));
    			ptr = strtok(text, delimiter);
    //
    			while(ptr != NULL) 
    			{
    				printf("Delimiter gefunden: %s\n", ptr);
    //
    				ptr = strtok(NULL, delimiter);
    			}
    		}
    		fclose (datei);
    	}
    	return 0;
    }
    

    Der Output entspricht auch genau, was das Programm eigentlich machen soll:

    Record: g_playlist
    Laenge: 300
    Delimiter gefunden: g_playlist
    Record: g_playlist.c
    Laenge: 300
    Delimiter gefunden: g_playlist.c
    Record: strtok.c
    Laenge: 300
    Delimiter gefunden: strtok.c
    Record: test1.txt
    Laenge: 300
    Delimiter gefunden: test1.txt
    Record: testfile.txt
    Laenge: 300
    Delimiter gefunden: testfile.txt
    Record: test.txt
    Laenge: 300
    Delimiter gefunden: test.txt
    

    Meine Frage nun:

    Warum liest der fgets nicht 300 Bytes ein? Ich habe niergens einen Hinweis gefunden, dass 0x0A den fgets beeinflusst. Wo ist mein Denkfehler 😕

    Besten Dank



  • s. fgets:

    ... until (num-1) characters have been read or either a newline or the end-of-file is reached, whichever happens first.

    newline entspricht 0x0A.



  • user fgets schrieb:

    Warum liest der fgets nicht 300 Bytes ein? Ich habe niergens einen Hinweis gefunden, dass 0x0A den fgets beeinflusst. Wo ist mein Denkfehler 😕

    man fgets schrieb:

    Reads characters from stream and stores them as a C string into str until (num-1) characters have been read or either a newline or the end-of-file is reached, whichever happens first.

    0x0A ist der Wert (bei ASCII) von Newline

    Nachzulesen u.A.: http://www.cplusplus.com/reference/cstdio/fgets/ oder jeder anderen (vernünftigen) Referenz zu fgets



  • Th69 schrieb:

    s. fgets:

    ... until (num-1) characters have been read or either a newline or the end-of-file is reached, whichever happens first.

    newline entspricht 0x0A.

    Herzlichen Dank 👍 - ich habs vermutet - aber diesen Link beim Suchen im Netz wohl überlesen, da er www.cplusplus.com heisst und ich ja C progammiere....



  • Das ist nicht nur dieser eine Link.

    DirkB schrieb:

    ... oder jeder anderen (vernünftigen) Referenz zu fgets

    Z.B.:
    http://linux.die.net/man/3/fgets
    http://en.wikibooks.org/wiki/C_Programming/C_Reference/stdio.h/fgets
    ....

    überall steht etwas von newline


Anmelden zum Antworten