strlen zählt '\0' nicht mit? Etwas Unsicher
-
Ich fand diesen Code hier im Netz:
#include <stdio.h> #include <stdlib.h> #define BUF 255 int main(void) { int counter = 0; FILE *fp; char file[BUF],temp[BUF]; char line[BUF]; printf("Input full Path: "); fgets(file, BUF, stdin); file[strlen(file) - 1] = '\0'; fp = fopen(file, "r"); if(fp == NULL) return EXIT_FAILURE; for(;;) { if (fgets(temp,BUF,fp) != NULL) counter++; else { printf("Lines counted: %d", counter); break; } } getchar(); return EXIT_SUCCESS; }
Ich bin noch Anfänger und las grade letztens noch in meinem Buch das strlen das '\0' nicht mit zählt.
Kurzes Beispiel:t e s t . t x t \n \0 0 1 2 3 4 5 6 7 8 9
Und zwar diese Zeile macht mich stutzig:
file[strlen(file) - 1] = '\0';
Somit müsste doch das 't' mit '\0' überschrieben werden.
Da ja 8 - 1 logischerweise 7 ist.
Habe ich irgendetwas verkehrt verstanden?
-
strlen zählt aber folgendermaßen
t e s t . t x t \n \0 1 2 3 4 5 6 7 8 9
-
NDEBUG schrieb:
strlen zählt aber folgendermaßen
t e s t . t x t \n \0 1 2 3 4 5 6 7 8 9
Ah danke.
Dann ist dann auch bei file[8] das Newline Zeichen.
-
Ist ja auch die Länge in Bytes, die da raus kommt, und kein Index.
-
7.21.6.3 The strlen function
Synopsis
1 #include <string.h>
size_t strlen(const char *s);
Description
2 The strlen function computes the length of the string pointed to by s.
Returns
3 The strlen function returns the number of characters that precede the terminating null
character
-
Geschickter wäre ohnehin sowas:
char *tmp = strchr (file, '\n'); if (tmp) { *tmp = '\0'; }
da fgets nicht garantiert ein '\n' anhängt.
-
ich dachte das geht nicht weil strlen s_time oder so zurückgibt
-
Stringanfang schrieb:
ich dachte das geht nicht weil strlen s_time oder so zurückgibt
strlen liefert ein size_t.