c - 不通过命令行写入文本文件

标签 c command-line segmentation-fault

我正在尝试创建一个程序,它将用户输入的年龄、名字和姓氏保存在文本文件中,但它不会写入通过命令行输入的文本文件。文件名被视为命令行参数。当用户输入年龄 0 时,我的循环应该结束。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    char fname[30], lname[30];
    int age;

    FILE *fp;

    fp = fopen (argv[1], "r");

    if (fp == NULL) {
    printf("No file\n");
    return 0;
    }

    printf("This program reads and saves ages and names in a text file.\n");

    do {
    printf("Enter person (age, first last): ");
    scanf("%d, %s %s", &age, fname, lname);
    fprintf(fp, "%d, %s %s", age, fname, lname);
    } while  (age > 0);



    fclose (fp);

    return 0;
}

最佳答案

如果文件不存在,则当您以读取模式打开时,打开将失败。当发生这种情况时,它不会检查打开是否成功,因此您之后使用它(NULL)将导致段错误。

你也提到了循环,但是这里没有循环。您也不检查有效输入

关于c - 不通过命令行写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53711624/

相关文章:

C 如何将 exec 与 linux 命令和管道一起使用

linux - 从两个文本文件(平行语料库)中一致地随机采样 N 行

linux - 如何显示空磁盘空间

c - 段错误 - 自定义 Shell

c - 段错误存储输入并添加两个指针

c# - 使用 pinvoke 将结构数组中的嵌入式 C 结构数组传递给 C#

c - C : Continuous Prompt for Input简介

ubuntu - 如何为 tar 命令选择目标目录

c - 帮助解释 gdb : segfault in function

c - 在 C 中传递可变数量参数的更紧凑方法