Функция сна в C - PullRequest
       30

Функция сна в C

0 голосов
/ 21 января 2012

Я знаю, что это просто, но я все еще слишком сонный, чтобы понять это. Кто-нибудь может мне помочь?

char buf1[] = "one second program started\n";
char buf2[] = "one second program end\n";

int main(void)
{
 write(1,buf1,100);
 sleep(1);
 write(1,buf2,100);
}

Мне нужно напечатать первый оператор, затем, после единичного ожидания, напечатать второй оператор. Но когда я выполняю это, оба оператора печатаются, затем единичное ожидание и второй оператор печатаются дважды. Куда я иду не так?

Ответы [ 2 ]

5 голосов
/ 21 января 2012

write не заботится о строках C, он записывает ровно столько байтов, сколько вы указали (если это возможно). В вашем случае это чтение конца buf1, что является неопределенным поведением.

Используйте puts вместо того, чтобы печатать строки.

puts(buf1);

Если по какой-то причине у вас есть для использования write, укажите фактическую длину строки в качестве аргумента размера.

5 голосов
/ 21 января 2012

Измените 100 на strlen(buf1) или strlen(buf2).

...