C语言输入内容写入文本文件仅保留最后一个单词问题求解
问题修复方案
根因分析
- 写入文件时未遍历已经存储了所有输入内容的二维数组,仅执行了1次写入操作
fprintf参数使用错误:%s格式符要求传入单个C风格字符串的首地址,直接传入二维数组名list属于类型不匹配,会触发未定义行为- 附加优化点:原代码中
scanf("%s", &list[i]);的list[i]本身就是字符数组首地址,不需要额外加取地址符&
修复后代码
#include<stdio.h> #include<string.h> int main(){ int limit; int i; printf("请输入你要录入的条目数量:\n"); scanf("%d", &limit); // 限制最大录入数量避免数组越界 if(limit > 100) limit = 100; char list[100][100]; for(int i=0; i<limit; i++){ printf("输入第%d条任务:\n", i+1); scanf("%s", list[i]); } FILE *store; store = fopen("data.txt", "w"); // 遍历数组写入所有条目,每条单独占一行 for(int i=0; i<limit; i++){ fprintf(store, "%s\n",list[i]); } fclose(store); return 0; }
修复说明
- 新增数组越界校验,避免输入的
limit超过二维数组的第一维长度触发内存越界 - 新增写入循环遍历所有已录入的字符串,依次写入文件
- 修正
fprintf入参,每次传入单个字符串的首地址list[i],匹配%s格式符要求 - 写入时添加
\n换行符,保证文件中每条内容单独占一行,可读性更高
内容的提问来源于stack exchange,提问作者darshdas64
相关产品推荐
相关产品推荐

