写入文件时转储​​ C 程序核心

标签 c pointers struct io coredump

我是 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;
}

当我在第二个输入后运行它时,它显示段错误(核心已转储)。

更多人请帮助我吗? 我是这方面的新手,我想学习。

最佳答案

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

关于写入文件时转储​​ C 程序核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620275/

相关文章:

c - 内循环的终止条件与外循环相同

C const 指向 const struct 数组的指针作为函数参数

c++ - 显示指针结构中的元素

c - read函数的返回值和buffer的长度不一样,C语言,ubuntu 12.04

c++ - 宏的重写以遵循 C++ 约定

c - 需要用 "*"做一半圣诞树

c - C中用指针替换下标

arrays - 如何将结构加载到数组中?

c - shm_内存 + mmap + 表 + 结构

Golang 动态访问结构属性