2017-06-18 47 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