fwrite逐行?

时间:2012-04-30 20:41:29

标签: c fwrite

我有以下代码。我想逐行编写所有新数据,我该怎么办?我的代码工作正常,但它将数据写在彼此旁边。

////////////////////////////////////
char timedate[13];
char USERID[] ="100050"; 
char *p;
p=fetch_time(); //the function returns a string (char[13])
strcpy(timedate, p);

char log_sensor_event[20];
sprintf(log_sensor_event, "%s %s",timedate, USERID);

FILE *fp2;
fp2=fopen("/home/eagle/Desktop/log_file.txt", "ab");
if(fp2 == NULL){
    perror("log_file.txt open failed");
    exit(EXIT_FAILURE);
}
write(log_sensor_event, sizeof(log_sensor_event[0]), sizeof(log_sensor_event)/sizeof>(log_sensor_event[0]), fp2);
fputc('\n', fp2);
fclose(fp2);

3 个答案:

答案 0 :(得分:3)

您创建的字符串没有换行符:

sprintf(log_sensor_event, "%s %s",timedate, USERID);

试试这个:

sprintf(log_sensor_event, "%s\n %s",timedate, USERID);

答案 1 :(得分:2)

您需要在字符串之间插入换行符('\n'):

sprintf(log_sensor_event, "%s %s\n",timedate, USERID);

注意结尾'\ n'。

答案 2 :(得分:1)

为什么不替换

char log_sensor_event[20];
sprintf(log_sensor_event, "%s %s",timedate, USERID);

...
write(log_sensor_event, sizeof(log_sensor_event[0]), sizeof(log_sensor_event)/sizeof>(log_sensor_event[0]), fp2);
fputc('\n', fp2);

简单地通过

fprintf(fp2, "%s %s\n", timedate, USERID);

这可以避免大量调用和本地缓冲区。

可以使用setvbuf设置I / O的缓冲。