strlen()
- для определения длины строки .В C A string имеет нулевой символ в конце, иначе это не строка.Если считываемые данные не содержат нулевой символ, это не строка.
Вместо этого используйте возвращаемое значение из read()
, чтобы определить длину считывания.Чтобы напечатать ssize_t
, приведенный к широкому типу, например long long
или intmax_t
(лучше), так как ssize_t
не имеет указанного спецификатора печати. 1 2
Примечание: удалите &
из буфера, так как он не нужен.
char buffer[BUF_SIZE]; // BUF_SIZE = 100
// ssize_t readIn = read(STDIN_FILENO, &buffer, BUF_SIZE);
ssize_t readIn = read(STDIN_FILENO, buffer, BUF_SIZE);
// printf("strlen=%lu\n", strlen(buffer));
printf("length = %lld\n", (long long) readIn);
// or
printf("length = %jd\n", (intmax_t) readIn);
1 Руководство программиста Linux делаетимеют «z: следующее целочисленное преобразование соответствует аргументу size_t
или ssize_t
», поэтому в коде можно использовать printf("length = %zd\n", readIn);
2 POSIX допускает либо более широкий тип, либо аналог со знаком size_t
.