【问题标题】:C program core dumped when writing to a file写入文件时转储​​ C 程序核心
【发布时间】:2023-03-14 23:13:01
【问题描述】:

我是 C 程序的新手,我正在开发一个将一组结构写入 .txt 文件的程序。

这是我的尝试:

#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;
}

当我在第二次输入后运行它时,它说分段错误(核心转储)。

更多人请帮我解决这个问题? 我是新手,我很想学习。

【问题讨论】:

  • struct FileSig 的单个字符成员将单个字符转换为字符数组。

标签: c pointers struct io coredump


【解决方案1】:

“%s”格式说明符用于字符串。但是mode 是一个字符。对字符使用“%c”。另外,将您想要存储字符的地址传递给scanf,而不是未初始化的值。

【讨论】:

    【解决方案2】:

    "%s" 用于字符串,但modechar 类型,因此您应该使用"%c",如下所示:

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

    注意我是如何获取mode 的地址的,因为scanf() 将指针作为参数。

    PS:您需要更改所有读取字符而不是字符串的 scanf 和 printf 以遵循此建议。

    【讨论】:

    • @AlanCheung 欢迎您的好消息!在这种情况下,接受答案。 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多