Hier haben Sie die Funktion fgets() verwendet, um Eingaben zu machen. Wenn Sie die Eingabe mit der Funktion fgets() durchführen, wird ein zusätzliches neues Zeilenzeichen ('\ n') hinzugefügt. Angenommen, Ihre Eingabe lautet: "Hallo". Nachdem Sie diesen Stich eingegeben haben, müssen Sie die EINGABETASTE drücken, für die ein neues Zeilenzeichen mit Ihrer Zeichenfolge hinzugefügt wird. Daher scheint es Ihnen, dass strlen() den Null-Terminator zählt. Wenn Sie jedoch die Eingabe mit der Funktion scanf() vornehmen, wird kein zusätzliches Zeilenzeichen ('\ n') hinzugefügt, wenn ENTER gedrückt wird. So sehen Sie die genaue Anzahl der Zeichen, die die Zeichenfolge enthält. Führen Sie den folgenden Code aus, um meine Erklärung zu sehen.
#include<stdio.h>
#include<string.h>
void main()
{
char str2[100];
printf("\nEnter a string: ");
scanf("%s",str2);
//fgets (str2, sizeof(str2), stdin);
printf("\n%d",strlen(str2));
}
Es zählt wohl das '\ n ', anstatt das' \ 0' –
Also, welche Zeichenfolge haben Sie eingeben, und was war das Ergebnis? –
mögliches Duplikat von [fgets() fügt am Ende Zeilenumbrüche hinzu] (http://stackoverflow.com/questions/13443793/fgets-adds-newline-at-the-end) –