C语言 fopen文件名以奇怪的点开始

gfttwv5a  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(76)

你好。
正如你可能看到的,我试图将最近的数据从一个C项目保存在一个日志文件中,文件名对应于实际的时间/日期。
当路径在控制台内正确组合和显示时,文件本身以一个奇怪的点开始,更准确地说,是一个空白,后面跟着那个点和另一个空白,显示在图片中。
我使用的是Windows 7 64 bit和cygwin 64。
相关的代码位是:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void save_to_file(char* timestamp, char* homepath, int generation)
char* create_timestamp(char* timestamp)
int main(){
    char homepath[28] = "D:\\cygwin64\\home\\ignite\\log\\";
    int generation = 0;

    char* timestamp = malloc (30 * sizeof(char));
    create_timestamp(timestamp);
    save_to_file(timestamp, homepath, generation);
}

void save_to_file(char* timestamp, char* homepath, int generation){
    char string[4];
    char logchar[4] = "log";
    char dot[] = {"."};
    char fileend[5] = {".txt"};
    char* path = malloc(60*sizeof(char));
    strcpy(path, homepath);
    strcat(path, logchar);
    snprintf(string, 4, "%d", generation);
    strcat(path, string);
    strcat(path, dot);
    strcat(path, timestamp);
    strcat(path, fileend);
    FILE* f = fopen(path, "ab+");
    if(f == NULL){
        printf("Error opening file!\n");
        exit(1);
    }
    else{
        //write to file
    }
}
char* create_timestamp(char* timestamp){
    time_t rawtime;
    struct tm *info;
    char buffer[30], *string, *work;
    string = malloc (5* sizeof(char));
    work = malloc (30* sizeof(char));
    char point[] = {"."};
    time( &rawtime );

    info = localtime( &rawtime );
    strcpy(buffer, asctime(info));

    int n = info->tm_mday;
    snprintf(string, 4, "%d", n);
    strcpy(work, string);

    n = (int) info->tm_mon + 1;
    snprintf(string, 3, "%d", n);
    strcat(work, point);
    strcat(work, string);
    ///*
    n = info->tm_year + 1900;
    snprintf(string, 5, "%d", n);
    strcat(work, point);
    strcat(work, string);

    n = info->tm_hour;
    snprintf(string, 3, "%d", n);
    strcat(work, point);
    strcat(work, string);

    n = info->tm_min;
    snprintf(string, 3, "%d", n);
    strcat(work, point);
    strcat(work, string);

    n = info->tm_sec;
    snprintf(string, 3, "%d", n);
    strcat(work, point);
    strcat(work, string);
    strcpy(timestamp, work);
    free(string);
    return timestamp;
}
wn9m85ua

wn9m85ua1#

您的数组太短。“D:\cygwin64\home\ignite\log\”是29字节。- 美泊烯

相关问题