strcpy mit param char* dest und return char*
-
msdn
char *strcpy( char *strDestination, const char *strSource );
Return ValueEach of these functions returns the destination string. No return value is reserved to indicate an error.
Parameters
strDestination
Destination string
strSource
Null-terminated source string
hier wird call by reference verwendet, wieso return char*? return value ist doch genau der pointer zu strDestination.
-
netrobot schrieb:
msdn
char *strcpy( char *strDestination, const char *strSource );
Return ValueEach of these functions returns the destination string. No return value is reserved to indicate an error.
Parameters
strDestination
Destination string
strSource
Null-terminated source string
hier wird call by reference verwendet, wieso return char*? return value ist doch genau der pointer zu strDestination.
Was auch immer mit "No return value" gemeint ist. Sehr strange, deren Definition.
Zu deiner Frage, hier wird nicht call by reference gemacht. Zeiger werden by value
uebergeben. Der zurueckgegebene Zeiger sollte auf strDestination zeigen.gruss
v R
-
virtuell Realisticer schrieb:
Was auch immer mit "No return value" gemeint ist. Sehr strange, deren Definition.
"No return value is reserved to indicate an error."
-
Der zurueckgegebene Zeiger sollte auf strDestination zeigen.
ich habe schon den Zeiger auf strDest, wozu noch der zurückgeg. Zeiger?
"No return value is reserved to indicate an error."
es ist nicht so logisch, aber ein argument.
-
finix schrieb:
virtuell Realisticer schrieb:
Was auch immer mit "No return value" gemeint ist. Sehr strange, deren Definition.
"No return value is reserved to indicate an error."
Ja und? Ist das nun 0? Oder wird ein Zeiger auf eine Birne zurueckgegeben
oder wie schaut das aus?gruss
v R
-
netrobot schrieb:
Der zurueckgegebene Zeiger sollte auf strDestination zeigen.
ich habe schon den Zeiger auf strDest, wozu noch der zurückgeg. Zeiger?
weils schon immer so war?
"No return value is reserved to indicate an error."
wohl so gemeint: "There is no return value that would indicate an error."
-
netrobot schrieb:
Der zurueckgegebene Zeiger sollte auf strDestination zeigen.
ich habe schon den Zeiger auf strDest, wozu noch der zurückgeg. Zeiger?
Für dies und ähnliches:
strcat(strcpy(dest, "Hello, "), name);netrobot schrieb:
"No return value is reserved to indicate an error."
es ist nicht so logisch, aber ein argument.
Es sagt nichts weiter, als dass es keinen Fehler gibt, den strcpy zurückgeben könnte. Deshalb gibt es auch keinen Rückgabewert, der für Fehler reserviert sein müsste.
-
2 strcpy versionen
1 #include <stdlib.h> 2 3 char * 4 strcpy1 (char *d, char *s) 5 { 6 size_t i; 7 8 for (i = 0; s[i] != 0; ++i) 9 { 10 d[i] = s[i]; 11 } 12 d[i] = 0; 13 14 return d; 15 }1 #include <stdlib.h> 2 3 char * 4 strcpy2 (char *d, char *s) 5 { 6 char *d1 = d; 7 8 while ((*d1++ = *s++)); 9 10 return d; 11 }1. in version 1. d und return zeiger sind zwar selber, aber zurückgeg. char* ist 0 terminiert.
2. für 1 und 2 sind plätze jeweils ausserhalb reserviert.
wie kann man einen Fehler feststellen und abfangen, dann return 0?
-
virtuell Realisticer schrieb:
finix schrieb:
"No return value is reserved to indicate an error."
Ja und? Ist das nun 0? Oder wird ein Zeiger auf eine Birne zurueckgegeben
oder wie schaut das aus?Eben nicht. Genau das will dir die Dokumentation sagen.
-
netrobot schrieb:
Der zurueckgegebene Zeiger sollte auf strDestination zeigen.
ich habe schon den Zeiger auf strDest, wozu noch der zurückgeg. Zeiger?
Damit
strcpypraktisch gesehen ein Expression ist, kein Statement.
-
finix schrieb:
virtuell Realisticer schrieb:
finix schrieb:
"No return value is reserved to indicate an error."
Ja und? Ist das nun 0? Oder wird ein Zeiger auf eine Birne zurueckgegeben
oder wie schaut das aus?Eben nicht. Genau das will dir die Dokumentation sagen.
Ist ret != dst?
gruss
v R
-
virtuell Realisticer schrieb:
Ist ret != dst?
Was will uns diese Frage sagen? Nein, ret ist immer dst. Was genau verstehst Du denn nicht an der bereits mehrmals getroffenen Aussage: "Es gibt keine Fehler, die strcpy melden könnte, also gibt es auch keinen Rückgabewert, der einen Fehler anzeigen müsste."
-
No return value is reserved to indicate an error.
versteh ich eher so, dass die implementierung 0 zurück gibt, wenn nen fehler auftritt. entspricht allerdings nicht der standardimplementierung von strcpy, deren rückgabewert immer *dest ist.
sinn machen kann das allerdings schon. z.b. wenn aus irgendeinem grund kein zugriff auf *dest stattfinden kann.
-
"No return value" ist ja nicht möglich, wenn der Funktionstyp nicht void ist, selbst 0 wäre ja ein Rückgabewert...

Grüße,
Martin
-
es wird allerdings ein *char zurückgegeben. d.h. der value ist ein array von chars. ein leeres array wäre eine gültige adresse auf einen speicherbereich, in dem 0 steht. "kein wert" ist keine adresse, also 0

-
Sagt mal ist das hier eine sprachliche Diskussion oder eine fachliche? Der Satz sagt eindeutig, dass keinen Returnwert gibt, der einen Fehler anzeigt. Er sagt nicht, dass es keinen Return-Wert gibt, er sagt nicht, dass im Fehlerfall 0 zurückgegeben wird.
Wenn es einfach daran liegt, dass Euer Englisch nicht so gut ist, nachvollziehbar. Aber vertraut doch einfach mal den paar Leuten die diesen Satz hier mehrmals auseinandergebröselt und erklärt haben.
"Es gibt keinen Returnwert, der einen Fehler anzeigt."
-
Ich hab reserved ueberlesen
gruss
v R
-
LordJaxom schrieb:
Sagt mal ist das hier eine sprachliche Diskussion oder eine fachliche? Der Satz sagt eindeutig, dass keinen Returnwert gibt, der einen Fehler anzeigt. Er sagt nicht, dass es keinen Return-Wert gibt, er sagt nicht, dass im Fehlerfall 0 zurückgegeben wird.
Wenn es einfach daran liegt, dass Euer Englisch nicht so gut ist, nachvollziehbar. Aber vertraut doch einfach mal den paar Leuten die diesen Satz hier mehrmals auseinandergebröselt und erklärt haben.
"Es gibt keinen Returnwert, der einen Fehler anzeigt."
das sagt er nicht eindeutig.
No return value is reserved to indicate an error.
eine korrekte übersetzung lautet:
Kein Rückgabewert ist reserviert, um einen Fehler anzuzeigen.dass die von dir genannte übersetzung auch richtig sein kann stell ich gar nicht in abrede. aber in dem fall hier ist der satz allein nicht eindeutig.
-
thordk schrieb:
eine korrekte übersetzung lautet:
Kein Rückgabewert ist reserviert, um einen Fehler anzuzeigen.Irgendwie schaffe ich es dennoch nicht, diesen Satz (selbst auf Deutsch) anders zu interpretieren, als dass es keinen Rückgabewert gibt, der einen Fehler anzeigt

-
thordk schrieb:
No return value is reserved to indicate an error.
eine korrekte übersetzung lautet:
Kein Rückgabewert ist reserviert, um einen Fehler anzuzeigen.Und was schließt du daraus?
if (error) return (char*)rand();?