getline in char

Ähm ja, also ich richte mich ein wenig nach dem Buch. C von A bis Z, ist nicht das beste, aber es hilft doch irgendwie.
Ja, das sieht man wie es "hilft" ;-]
Kann also nicht ganz erklären warum der Autor das ganze auf malloc(0) setzt :-/ Aber malloc(0) ist ja eigentlich das gleiche wie NULL, oder?
Genau. Aber warum sollte man eine Funktion aufrufen um eine Variable auf NULL zu setzen?
Der Pointer auf char* ( so hab ich es verstanden ) erweitert sich selbst. Das bedeutet das es sich den Speicher nimmt was es braucht. Und char* ist ja 16 lang ... und durch den Pointer wird es immer wieder um 16 größer ... hmm, oder denk ich nun falsch?
Ein C Zeiger ist in der Regel auf einer 32bit Maschine 32bit, also 4 Byte groß, auf 64bit dann 8 Byte.

Von vornherein einen char** zu verwenden ist eigentlich nur unnütz kompiliziert. Aus der Manpage von getline:
C:
char *line = NULL;
size_t len = 0;
getline(&line, &len, ...);
Ein char** erweitert sich nicht von selbst. Die getline Funktion tut dies - so wie es in der Manpage beschrieben ist.

Du hast außerdem nirgendwo *line_ptr und *t initialisiert - was zu undefiniertem Verhalten führen kann.

Außerdem passen die Typen von t und dem Rückgabewert von malloc nicht zusammen.
Das ist ganz einfach ... damit eclipse aufhört zu meckern! Ohne Return, gibt der mir meistens Warnings aus. Daher hau ich einfach nen return 0; unten dran. Stören tuts eigentlich nicht, weil nen rückgabe wert gibts ja auch eigentlich nicht, schlicht nur speicher verschwendung.
In C99 ist "return 0;" in dem Fall äquivalent zu "return NULL;". Das ist also schon OK.

Gruß

PS: Übrigens hatte ich schon mal einen Fehler in dem Buch "C von A bis Z" gemeldet, vom Verlag lediglich die Antwort
bekommen: "Ja, wir sagen dem Autor Bescheid". Geändert hat sich (soweit ich weiß) aber nichts. Besorg dir lieber ein vernünftiges Buch.
 
Besorg dir lieber ein vernünftiges Buch.

Was kann man den als Nachschlagewerk nutzen?


So sieht mein Code momentan aus, dank eurer hilfe hab ich ihn entsprechend angepasst.
Nun stellt sich mir die frage, wie kann ich die Zeile die in line_ptr liegt in seine einzelteile zerlegen. Ich denke mit strcat ist schon sehr nachteilhaft, den das Programm würde dann sehr langsam laufen. Das würde ja jedes Zeichen an einen String anhängen, bis ein Abbruch Kriterium gefunden wäre, z.B. ein Sonderzeichen.

Code:
/********************* function definitions *******************************/
/***************************************************************************
* @NAME: t_read
* @FUNC: read all lines in open file*
*
***************************************************************************/

void *t_read (void){

	size_t len = 0;

	c_value(pthread_mutex_lock(&dataMutex));

	while((line_val=getline(&line_ptr, &len, datei)) != EOF){
		broadcast();
		pthread_cond_wait(&dataPresentCondition, &dataMutex);
	}
	pthread_mutex_unlock(&dataMutex);

	return 0;
}
 
Was kann man den als Nachschlagewerk nutzen?
Also als Nachschlagewerk eignet sich eigentlich am besten das Internet.

Z.B. http://www.cplusplus.com/reference/ oder http://home.htw-berlin.de/~junghans/cref/index.html oder die Manpages z.B. hier http://linux.die.net/man/3/

Oder einfach suchen. => Google, ixquick, usw.
So sieht mein Code momentan aus, dank eurer hilfe hab ich ihn entsprechend angepasst.
getline gibt laut Manpage -1 bei einem Fehler zurück, EOF ist ein Integer Wert der nicht unbedingt -1 sein muss.
Nun stellt sich mir die frage, wie kann ich die Zeile die in line_ptr liegt in seine einzelteile zerlegen. Ich denke mit strcat ist schon sehr nachteilhaft, den das Programm würde dann sehr langsam laufen. Das würde ja jedes Zeichen an einen String anhängen, bis ein Abbruch Kriterium gefunden wäre, z.B. ein Sonderzeichen.
Wie kommst du auf strcat wenn du etwas zerlegen möchtest?

Siehe strpbrk bzw. strtok.

Gruß
 
Zurück