2017-06-18 13 views
0

我是C程序新手,我正在編寫一組將結構寫入.txt文件的程序。寫入文件時轉儲​​C程序內核

這是我的嘗試:

#include <stdio.h> 

struct FileSig { 
    char name[256]; 
    char mode; 
    char user_id; 
    char group_id; 
    char size; 
    char time_last_mod[50]; 
}; 


int main(int argc, char **argv) 
{ 
    struct FileSig FileSig1; 
    FILE *fp_Out; 
    fp_Out = fopen("out.txt" , "w"); 

    printf("Enter name: "); 
    scanf("%s", FileSig1.name); 
    fprintf(fp_Out, "Name: %s\n", FileSig1.name); 

    printf("Enter mode: "); 
    scanf("%s", FileSig1.mode); 
    fprintf(fp_Out, "Mode: %s\n", FileSig1.mode); 

    printf("Enter user id: "); 
    scanf("%s", FileSig1.user_id); 
    fprintf(fp_Out, "userID: %s\n", FileSig1.user_id); 

    printf("Enter group id: "); 
    scanf("%s", FileSig1.group_id); 
    fprintf(fp_Out, "groupID: %s\n", FileSig1.group_id); 

    printf("Enter size: "); 
    scanf("%s", FileSig1.size); 
    fprintf(fp_Out, "size: %s\n", FileSig1.size); 

    printf("Enter time last modifly: "); 
    scanf("%s", FileSig1.time_last_mod); 
    fprintf(fp_Out, "time_last_mod: %s\n", FileSig1.time_last_mod); 

// fp_Out = fopen("out.txt" , "w"); 
// fprintf(fp_Out, "Name: %s\nMode: %d\nUserID:%d\nGroupID: %d\nSize:%d\nTime last modifly:%s", FileSig1.name, FileSig1.mode, FileSig1.user_id, FileSig1.group_id, FileSig1.size, FileSig1.time_last_mod); 

    fclose(fp_Out); 

    return 0; 
} 

當我第二次輸入後運行它,它說分割故障(核心轉儲)。

更多的人請幫助我嗎? 我是新來的,我很想學習。

+0

'struct FileSig'的單個字符成員將單個字符裝入char數組。 – BLUEPIXY

回答

2

「%s」格式說明符適用於字符串。但mode是一個字符。使用「%c」作爲字符。此外,通過地址你想要存儲的字符scanf,而不是一個未初始化的值。

1

「%s」 爲字符串,但modechar型的,因此,你應該使用 「%C」,像這樣:

scanf("%c", &FileSig1.mode); 
fprintf(fp_Out, "Mode: %c\n", FileSig1.mode); 

注意我是如何花的mode的地址,因爲scanf()需要一個指針作爲參數。 PS:你需要改變你所有的scanf和printf來讀取一個字符,而不是字符串來遵循這個建議。

+0

現在明白了,現在就工作,非常感謝你 –

+0

@AlanCheung歡迎您好消息!在這種情況下,*接受*答案。 =) – gsamaras