[C] return - zeiger - Seite 2

Seite 2 von 4 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_return_zeiger_204643/page_2 - zur Vollversion wechseln!


semteX schrieb am 09.02.2009 um 19:46

ich würd das buch nehmen und verbrennen...

das mit MAX-1 war mein fehler, die fputs funktion macht das eh für dich..

das ganze konstrukt kann doch nur funktioniern, wenn zwischendurch am stack ned herumgeschrieben wird... und das ist, gelinde gesagt, einfach wahnsinn.

entweder bin ich komplett daneben oder das buch ist mist..


DirtyHarry schrieb am 09.02.2009 um 20:06

Wenn das Beispiel so 1 : 1 aus dem Buch ist, schmeiss das Buch weg - bin da mit semteX einer Meinung


Timmää schrieb am 09.02.2009 um 20:13

@lama: bist sicher dass das nicht ein negativbeispiel ist?


lama007 schrieb am 09.02.2009 um 20:28

guter Rat - das Buch werde ich wegschmeißen und es mit der 2. Auflage versuchen; dort sieht das Kapitel anders aus.


that schrieb am 09.02.2009 um 21:24

Zitat von semteX
return( 0 );

Dein Code ist zwar prinzipiell korrekt, aber return ist keine Funktion, deshalb kannst du dir die Klammern sparen und einfach return 0; schreiben.


DirtyHarry schrieb am 09.02.2009 um 22:16

So kriegst das Beispiel aus dem komischen Buch ohne Warnings gecodet:

Code:
#include <stdio.h>
#include <string.h>
#define MAX 255

int eingabe(char* output, char* input) {
	printf("Bitte \"%s\" eingeben: ", output);
	if (fgets(input, MAX, stdin) == NULL) return -1;  // FEHLER
	return 0; // KEIN FEHLER		
}

int main() {
	char text[MAX];
	int result = 0;
	result = eingabe("Vorname", text);
	printf("Hallo %s\n", text);
	result = eingabe("Nachnamename", text);
	printf("%s, interessanter Nachname\n", text);	
	return 0;
}


lama007 schrieb am 09.02.2009 um 22:22

Zitat von Timmää
@lama: bist sicher dass das nicht ein negativbeispiel ist?

Zitat
Oder sind Sie gar nicht daran interessiert, das Newline-Zeichen zu entfernen? Dann könnte die Funktion auch so aussehen:

char *eingabe(char *str)
{
char input[MAX];
char *ptr=input;
printf("Bitte \"%s\" eingeben: ",str);
fgets(input, MAX, stdin);

return ptr;
}

"C von A bis Z", Kapitel 15.6.1 "Zeiger als Rückgabewert" - erste Ausgabe


lama007 schrieb am 09.02.2009 um 22:34

Code:
char *string = "Hallo Welt";
printf("Anfangsadresse auf die *string zeigt = %p\n",*string);

Wenn das so nicht stimmt, dann ist auch die zweite Auflage nicht ohne Fehler.

Kann mir jemand bestätigen, dass es nicht
Zitat
...%p\n", *string);
sondern
Zitat
...%p\n", string);
heißen sollte?


prayerslayer schrieb am 09.02.2009 um 22:45

müssts nicht &string sein, wenn du die adresse ausgeben willst?


Bowser schrieb am 09.02.2009 um 22:52

Ja, es sollte nur string heißen. Ein C String ist ja ein einfacher Array aus chars und wenn man einen Arraynamen angibt bekommt man den Pointer auf das erste Element zurück. Also gibt *string den ersten Buchstaben aus der bei deiner Ausgabe irgendwie in eine Adresse umgewandelt wird...


that schrieb am 09.02.2009 um 23:32

Zitat von lama007
Code:
char *string = "Hallo Welt";
printf("Anfangsadresse auf die *string zeigt = %p\n",*string);

Wenn das so nicht stimmt, dann ist auch die zweite Auflage nicht ohne Fehler.

"My hovercraft is full of eels" fällt mir dazu ein. :p

*string zeigt gar nirgends hin, weil das ist ein char:

char x; // x ist ein char
char *y; // *y ist ein char, auf welches y zeigt

Also sollte klar sein, dass "string" die Adresse des Zeichens 'H' ist (was hier gleichbedeutend ist mit dem Anfang des Strings "Hallo Welt"), "*string" das erste Zeichen selbst (und daher vom Typ char), und "&string" ist die Adresse des Zeigers, also vom Typ char**.


semteX schrieb am 09.02.2009 um 23:53

Zitat von that
Dein Code ist zwar prinzipiell korrekt, aber return ist keine Funktion, deshalb kannst du dir die Klammern sparen und einfach return 0; schreiben.
ich wusste ja, dass da noch was schief aussieht ;)

wie gesagt, ich würd eher das buch wechseln. es gibt zum thema c / c++ echt ein paar ausgezeichnete bücher...


DirtyHarry schrieb am 10.02.2009 um 08:21

ist es das buch?

http://www.amazon.de/von-bis-umfass...0360&sr=8-1

Dann hat die Rezessionen wohl der Autor selbst geschrieben :D


Neo-=IuE=- schrieb am 10.02.2009 um 08:54

Zitat von lama007
"gcc --version" gibt bei mir das aus:
"gcc (SUSE Linux) 4.3.2 [gcc-4_3-branch revision 141291]"
...

mit welchen optionen kompilierst du? also wie rufst du es auf?

weil vielleicht bekommst du deshalb nicht die warnings die du kriegen solltest ;)


DirtyHarry schrieb am 10.02.2009 um 10:02

am besten mit den optionen

-Wall -pedantic -ansi

:)

[edit] Aber im Prinzip tuts -Wall auch :)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026