Напечатать файл построчно
Операция с файловым дескриптором обязательна.
Можно конечно самому искать конец строки, но меня интересует почему приведенный ниже код не работает?
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdio.h>
#define MAXLINE 4096
int main(int argc, char * argv[])
{
int fd = open ("temp_file.txt", O_CREAT | O_RDWR | O_TRUNC);
int k;
for (k = 0 ; k < 100; ++k)
write(fd,"Hello world!!!\n" , sizeof("Hello world!!!\n"));
FILE * std_file = fdopen(fd, "r");
std_file == NULL ? exit(0): 0;
fseek ( std_file , 0 , SEEK_SET );
char buf[MAXLINE];
while( fgets(buf, MAXLINE, std_file)!=NULL)
fputs(buf, stdout);
return 0;
}
Поэтому он(нуль-символ) так же записывается в файл. Это легко проверить в любом hex-редакторе.
Исправить положение можно либо
write(fd,"Hello world!!!\n" , sizeof("Hello world!!!\n")-1);
write(fd,"Hello world!!!\n" , strlen("Hello world!!!\n"));
Спасибо
А потому-что если у тебя будет обьявлена строка в виде char *, то sizeof вернет размер указателя, а не строки.
А потому-что если у тебя будет обьявлена строка в виде char *, то sizeof вернет размер указателя, а не строки.
Да, однажды наткнулся на пример построения TreeView как в проводнике, от программистки (имя не вспомню, но пример есть в MSDN) Microsoft. Пример от 98х виндов, но учитывал поведение 2000-х. Так вот в ветке для 2000-х она вычисляла длину строки (tchar *, вроде бы) с помощью sizeof(). Надо ли говорить что оно не работало как требуется, а я пребывал в замешательстве - в микрософт такие программисты :eek:
Так что, и правда, никогда не используй!
Так что, и правда, никогда не используй!
А может, просто, разобраться, что такое strlen и что такое sizeof ?
Что это совершенно разные вещи и используются для совершенно разных целей.
Что одно является функцией, а другое - унарным оператором, превращающимся в константу ещё на этапе компиляции.
Вот-вот! Ну будем надеяться что автор подтянет матчасть
Про то как работает sizeof и strlen я знаю, а вот внимательности не хватает.