Nur aus Neugier:Kann printf() zurück von strlen() abweichen?
#include <stdio.h>
#include <string.h>
enum { BIG_NUMBER = 1024 };
int main(void)
{
char mysterious_string[BIG_NUMBER];
if (scanf("%1023s", mysterious_string) == 1) {
if (printf("%s", mysterious_string) != strlen(mysterious_string)) {
// Can this state occur?
}
}
return 0;
}
Kann die innere 'wenn' true zurück? Kann ich diesen beiden Funktionen blind vertrauen (printf()
und strlen()
), um den richtigen Wert zurückzugeben?
Vermutlich kann man davon ausgehen, dass die Zeichenfolge gültig ist? (Nicht allgemein zutreffend für den obigen Code, FWIW) –
@OliverCharlesworth ja, mein Fehler, bearbeitet die Frage \ 0 –
Wenn die Zeichenfolge ein '\ n' Zeichen enthält, wird es auf einigen Plattformen geändert, um ein' \ r' einzuschließen in der Ausgabe und wenn ja, wird dieses zusätzliche Zeichen in der Rückkehr von 'printf()' berücksichtigt? Wenn ja, dann nein, sie können nicht garantiert werden, dass sie gleich sind. – mah