You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言向CSV文件写入内容重复执行仅保留单条记录问题排查

问题背景

实现了支持用户输入、自定义加解密逻辑的C语言程序,核心加解密功能运行正常,但在写入CSV存储文件时出现异常:

  • 首次运行程序可正常写入内容,第二次运行结束后,本应存在两行记录的CSV文件仅保留1行最新内容
  • 两次运行的终端均提示写入成功,无运行时报错

核心问题代码片段:

main()
{
char pwd[100];
printf("Enter Password To Be Encrypted: ");
scanf("%[^\n]s", pwd);
printf("The encrypted password is: ");
encrypt(&pwd);
printf("\n The decrypted password is: ");
decrypt(&pwd);
FILE *fp;
fp = fopen("storeroom.csv", "w");
fprintf(fp, "placeholder , placeholder\n");
printf("\n Details successfully written to the file\n\n");
fclose(fp);
}
故障原因

异常由fopen文件打开模式使用错误直接导致:

  • 代码中使用"w"模式打开目标CSV文件,该模式为覆盖写入模式:若目标文件已存在,会直接清空文件内所有原有内容,再从文件起始位置写入新数据。因此每次程序运行执行写入操作时,上一次运行存入的内容都会被提前清空,最终文件只会保留最后一次运行写入的1行记录,和观察到的现象完全一致。
修复方案

将fopen的打开模式参数从"w"替换为"a"(追加写入模式)即可解决问题。
"a"模式的特性是:打开已存在的目标文件时,不会清空原有内容,文件指针默认定位到现有内容的最末尾,新写入的内容会直接追加在原有内容之后,可实现多次运行累积写入多行记录的需求。

修改后的核心文件操作代码如下:

FILE *fp;
// 替换为追加写入模式
fp = fopen("storeroom.csv", "a");
// 建议补充文件打开校验,避免空指针触发程序崩溃
if (fp == NULL) {
    perror("Open storeroom.csv failed");
    return 1;
}
fprintf(fp, "placeholder , placeholder\n");
printf("\n Details successfully written to the file\n\n");
fclose(fp);

实用提示:如果CSV需要固定表头,可以在打开文件时增加判断,仅当文件不存在(首次创建)时写入表头,后续追加内容时跳过表头写入,避免文件中出现重复表头行打乱格式。

内容的提问来源于stack exchange,提问作者user18025483

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:18:21