2017-04-14 13 views
-1

https://i.stack.imgur.com/4TmGr.pngfopenファイル名は奇妙なドットで始まります

こんにちは。

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; 
} 
+1

私たちにどのように 'homepath'を得るのですか? –

+1

WindowsまたはLinuxをお使いですか?そして、言及されているように、あなたが示しているものは関連するコードの_all_ではありません。提供されたものがコンパイルできるほど十分に含める。 – ryyker

+2

[最小限の、完全で検証可能な例を作成する方法](http://stackoverflow.com/help/mcve)を参照してください。あなたのコードでは、定義されていないいくつかの変数( 'homepath'、' generation'、 'timestamp'など)が使用されています。コードには、必要に応じてコピー/貼り付けやコンパイルができる完全な例が含まれている必要があります。 –

答えて

-2

あなたの配列が短すぎます。 "D:\ cygwin64 \ home \ ignite \ log \"は29バイトです。 - メルポメネ

+1

私はダウン投票者ではありませんが、答えとして掲示することで、このコメントのポスターを信用することが目的です。その目的のために、(あなたの元の投稿の下で)コメントのアップクイックが受け入れられます。または、あなたはアップクイックまたは受け入れることができるように、回答として自分のコメントを投稿するようにコメント投稿者に依頼することができます。 – ryyker

+0

他人のコメントを返信しないでください。彼らが反応しない、または可能であることを伝えたら、あなた自身の答えを投稿しても、コメントの真っ直ぐな引用以上のものにする - それが重要な理由、効果の内容などを説明する。 –

+0

私は彼の答えを解決する方法を見つけられませんでしたので、私は彼に引用することに決めました。問題が修正されていることは明らかです。 @QPaysTaxesは、あなたのような初心者に便利な指示をライカーがした。 「再投稿しないでください」はまったく役に立たない。 Btw私はコメントをupvoteするオプションを見つけることができません、私はカウンターを見ることができます/またはOPと与えられた答えを投票できますか? – Tignite

関連する問題