URL: https://www.overclockers.at/coding-stuff/c_return_zeiger_204643/page_3 - zur Vollversion wechseln!
@DirtyHarry: Ja, das ist es.
gcc rufe ich so auf: gcc file.c -o file.o
http://openbook.galileocomputing.de...40028C21F04A198
um Abbildung 14.19: Wenn ich mir dies anschaue und nichts übersehen habe, dann war das kein einmaliger Ausrutscher des Autors (*string).
Diese Buch zu kübeln würde mir weh tun - erstens gibt es es als Openbook, und zweitens gefällt es mir von der Aufmachung her.
Zitat von lama007http://openbook.galileocomputing.de...40028C21F04A198
um Abbildung 14.19: Wenn ich mir dies anschaue und nichts übersehen habe, dann war das kein einmaliger Ausrutscher des Autors (*string).
ZitatZeiger auf Zeiger ist ein recht schwieriges Thema, aber es zu verstehen, lohnt sich.
ZitatBei den ersten drei Ausgaben
printf("%p = %c\n", **sort, **sort);
printf("%p = %c\n", *sort[0], *sort[0]);
printf("%p = %c\n", *(sort[0]+0), *(sort[0]+0));
wurden immer die (Anfangs-)Adressen und Inhalte verwendet, auf die der zweite Zeiger zeigt. Was die Ausgabe auch bestätigt.
Auf einer Plattform, wo auf dem Stack nicht zufällig ein char gleich groß ist wie ein Zeiger, hätte das Programm besonders interessante Effekte.Code:warning: format '%p' expects type 'void *', but argument 2 has type 'int'
Bei einem Roman oder einem Bilderbuch würde ich dir vielleicht zustimmen, bei einem Sachbuch... nicht.Zitat von lama007Diese Buch zu kübeln würde mir weh tun - erstens gibt es es als Openbook, und zweitens gefällt es mir von der Aufmachung her.
aufzurufen. Das -ansi kann zwar manchmal etwas nervig sein, aber hilft trotzdem schon alleine dadurch dass man lernt was eigentlich im Standard steht und was nicht.Code:gcc -ansi -pedantic -Wall ...
Ok, mal schauen, ob ich mir das alles merken kann.
man gcc 
Ich hab mir gerade das Kapitel "14.6.1 Zeiger als Rückgabewert" (http://openbook.galileocomputing.de...40028BF1F0331A3) in dem Buch in der überarbeiteten Version nochmal angeschaut und bin etwas irritiert über den Text, der ist meiner Meinung nach Falsch, und das Beispiel auch wieder. Da wird das alte Beispiel als Negativbeispiel angeführt (Haha sehr witzig), das Neue unterscheidet sich aber nur in der Zeile der Rückgabe und warum das so gemacht wird im "Positivbeispiel" wird nirgendwo erwähnt.
Also da mal das "Positivbeispiel":
Also strtok legt scheinbar zwar eigene Strings an, aber doch sicher auch wieder nur am Stack und nicht am Heap oder? Warum sollte das dann so funktionieren? Klar der Compiler meckert nicht, denn er kann nicht erkennen ob strtok eine Adresse vom Stack oder vom Heap zurückgeben wird, aber mehr kann ich mir auch nicht vorstellen.Code:char *eingabe(char *str) { char input[MAX]; printf("Bitte \"%s\" eingeben: ",str); fgets(input, MAX, stdin); return strtok(input, "\n"); }
nein, ist der selbe mist, again. Funktioniert auch nicht.Zitat von watchoutSo viel text...
bei dem codeschnippsel da kommt einem sowieso das speibn :P
der ptr als parameter muß eh ned schlecht sein - wenn er richtig verwendet werden tät 
void blablubb( char* ptr )
{
char buf[10];
//buf irgendwie anschreiben von stdin zb
strcpy(ptr, buf);
}
da brauchst dann garkeinen returnvalue mehr ansich, der steht dann an der adresse vom parameter drin, mit ginge das natürlich auch, weil ja einfach nur die adresse vom parameter zurückgegeben werden würde.
mal jetzt so ohne bufferüberlaufkontrolle und sonstigem zeug. das funktioniert sehrwohl.
der übergebene parameter kann da sowohl am stack, als auch am heap sein.
wundert mich nicht wenn soviel buggy software im umlauf is, wenn die alle das openbook von denen gelesen haben 
gott (und das /GS flag) schütze dich, wenn für ptr weniger als 9 (+1 Terminierung) Zeichen reserviert wurdenZitat von Blairbei dem codeschnippsel da kommt einem sowieso das speibn :P
der ptr als parameter muß eh ned schlecht sein - wenn er richtig verwendet werden tät
void blablubb( char* ptr )
{
char buf[10];
//buf irgendwie anschreiben von stdin zb
strcpy(ptr, buf);
}
da brauchst dann garkeinen returnvalue mehr ansich, der steht dann an der adresse vom parameter drin, mit ginge das natürlich auch, weil ja einfach nur die adresse vom parameter zurückgegeben werden würde.
mal jetzt so ohne bufferüberlaufkontrolle und sonstigem zeug. das funktioniert sehrwohl.
der übergebene parameter kann da sowohl am stack, als auch am heap sein.
wundert mich nicht wenn soviel buggy software im umlauf is, wenn die alle das openbook von denen gelesen haben
aber das nur am rande (ja ich weiß, dass ma bei so nem schnipsel sicher ned drauf gschaut hat, ich möchts dennoch erwähnen
)
hehe, das wär ein gag 
strtok verwendet einen statischen Puffer. Das würde also sogar funktionieren, außer in Multi-Thread-Situationen. Aber dafür gibt's ja strtok_r.
ganz sicher? Mein VS2008 is nämlich ziemlich unglücklich damit (im sinne von: Es liest nur mist ausm speicher)Zitat von Ringdingstrtok verwendet einen statischen Puffer. Das würde also sogar funktionieren, außer in Multi-Thread-Situationen. Aber dafür gibt's ja strtok_r.
Diese zwei sind nach meinem Verständnis auch nicht korrekt:
Code:/* union2.c */ #include <stdio.h> #include <stdlib.h> union number { float x; int y; }; int main(void) { union number mixed[2]; mixed[0].x = 1.123; mixed[1].y = 123; mixed[2].x = 2.345; printf("%.2f\t%d\t%.2f\n", mixed[0].x, mixed[1].y, mixed[2].x); return EXIT_SUCCESS; }
Code:/* count_char.c */ #include <stdio.h> #include <stdlib.h> int main (void) { int c,counter=0; printf("Bitte Eingabe machen:"); /* Eingabe machen bis mit Return beendet wird */ while((c=getchar()) != '\n') { /* Leerzeichen und Tabulatorzeichen nicht mitzählen */ if( (c != ' ') && (c != '\t') ) counter++; /* counter erhöhen */ } /* Gibt die Anzahl eingegeb. Zeichen von 0 bis counter-1 aus * mit counter-1 wird das Zeichen '\0' nicht mitgezählt */ printf("Anzahl der Zeichen beträgt %d Zeichen\n", counter-1); return EXIT_SUCCESS; }

Zitat von semteXganz sicher? Mein VS2008 is nämlich ziemlich unglücklich damit (im sinne von: Es liest nur mist ausm speicher)
edit: ich seh da nix von wegen statischem puffer. bin ich blind? http://www.koders.com/c/fid9E7961E1...82726B3FCD.aspx
beides richtig (du) bzw falsch(das buch), zum ersten: ein float ist nix für fließkommazahlenZitat von lama007Diese zwei sind nach meinem Verständnis auch nicht korrekt:
Aber das Buch passt mir recht gut; vielleicht gehören die Fehler zum pädagogischen Konzept des Buches .
Zitat von semteXein float ist nix für fließkommazahlen
Zitatc ist zwar in dem beispiel ein integer, macht aber eigentlich auch nix, jedes character zeichn wird ja sowieso als zahl repräsentiert. is halt der falsche datentyp, aber solang der gewählte zu groß und ned zu klein ist, ned viel passiert
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025