2016-03-31 4 views
-1

Hier ist der Quellcode ist mit Funktion bekommt:Warum interpretiert die Funktion fgets im unten stehenden Programm (siehe Detail) die Länge der Zeichenfolge durch ein zusätzliches Zeichen?

//Finding length of a string// 
#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    //Finding length by user written code// 
    int i=0; 
    char ar[200]; 
    printf("So enter your string here: "); 
    gets(ar); 
    while(ar[i]!='\0') 
     i++; 
    printf("The length of your string is: %d",i); 
    getch(); 
    return 0; 
} 

Hier sind die Ein- und Ausgang:

So enter your string here: Hello World 
The length of your string is: 11 

Aber wenn die Funktion von fgets Funktion ersetzt wird, ist, dass, wenn der Code geschrieben wird als:

//Finding length of a string// 
#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    //Finding length by user written code// 
    int i=0; 
    char ar[200]; 
    printf("So enter your string here: "); 
    fgets(ar,200,stdin); 
    while(ar[i]!='\0') 
     i++; 
    printf("The length of your string is: %d",i); 
    getch(); 
    return 0; 
} 

Dann Eingang und Ausgang werden:

So enter your string here: Hello World 
The length of your string is: 12 

Also, warum funktioniert die fgets-Funktion die Länge mit einem zusätzlichen Zeichen?

+5

Sie haben über die ' '\ n'' vergessen könnte? – EOF

+0

Strings in C sind Null-terminiert, was bedeutet, dass "Hello World" tatsächlich "Hello World \ 0" ist. Verwenden Sie auch 'strlen', um Zeichen zu zählen;) – Shark

+4

Sie könnten versucht haben, den numerischen Wert jedes seiner Elemente zu drucken, um zu sehen, was es enthält ... und lesen Sie die [man page] (https://msdn.microsoft.com /en-us/library/c37dh6kf.aspx). –

Antwort

0

Dies liegt daran, dass fgets speichert ein \n Zeichen vor dem Hinzufügen der Null-Terminierung \0.

von cppreference fgets

... Parsing stops if end-of-file occurs or a newline character is found, in which case str will contain that newline character.

und von cppreference bekommt

The newline character, if found, is discarded and does not count toward the number of characters written to the buffer.

Verwandte Themen