こんにちは。
Cプロジェクトの最近のデータを、実際の時刻/日付に対応するログファイルに保存しようとしています。
パスがコンソール内で正しく結合されて表示されている間に、ファイル自体が奇妙なドットで始まります。正確には、そのドットと別の空白スペースが続き、画像に表示されます。
私はWindows 7 64bitとcygwin64を使用しています。
コードの関連ビットは、以下のとおりです。
#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;
}
私たちにどのように 'homepath'を得るのですか? –
WindowsまたはLinuxをお使いですか?そして、言及されているように、あなたが示しているものは関連するコードの_all_ではありません。提供されたものがコンパイルできるほど十分に含める。 – ryyker
[最小限の、完全で検証可能な例を作成する方法](http://stackoverflow.com/help/mcve)を参照してください。あなたのコードでは、定義されていないいくつかの変数( 'homepath'、' generation'、 'timestamp'など)が使用されています。コードには、必要に応じてコピー/貼り付けやコンパイルができる完全な例が含まれている必要があります。 –