Следующий код из книги «Head First C», по-видимому, должен работать, но (в Windows 10) я просто распечатываю содержимое comment с `предшествующим ему, и файл не редактируется.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char* now()
{
time_t t;
time (&t);
return asctime(localtime (&t));
}
int main()
{
char comment[80];
char cmd[120];
fgets(comment, 80, stdin);
sprintf(cmd, "echo '%s %s' >> reports.log", comment, now());
system(cmd);
return 0;
}
1-й шаг - проверить возвращаемые функцией значения localtime(), time(), asctime(), fgets(). Были ли они такими, как ожидалось?
2-й: cmd[120] определенно недостаточно велик. Попробуйте snprintf(cmd, sizeof cmd, "echo '%s %s' >> reports.log", comment, now());, чтобы избежать неопределенного поведения.
Это, конечно, глупый и потенциально непереносимый способ записи в файл.





Похоже, что книга написана с учетом Unix-подобных систем. Windows cmd не использует одинарные кавычки, поэтому следующий код:
sprintf(cmd, "echo '%s %s' >> reports.log", comment, now());
следует изменить на использование двойных кавычек, например:
sprintf(cmd, "echo \"%s %s\" >> reports.log", comment, now());
Возвращаемое значение system может указывать на ошибку.
пожалуйста, покажите содержимое
cmdперед вызовомsystem, например пользователяfputs(cmd, stdout).