c - 如何在 C 中将文本文件作为命令行参数
问题描述
基本上,我试图接受一个命令行文本文件,这样当我将程序作为“程序指令.txt”运行时,它会存储指令中列出的值。但是我无法测试我目前拥有的东西,因为它给了我错误“分段错误核心转储”。
int main(int argc, char* argv[]) {
setup_screen();
setup();
// File input
char textExtracted[250];
FILE* file_handle;
file_handle = fopen(argv[1], "r");
while(!feof(file_handle)){
fgets(textExtracted, 150, file_handle);
}
fclose(file_handle);
printf("%s", textExtracted[0]);
return 0;
}
文本文件里面是
A 1 2 3 4 5
B 0 0
C 1 1
我只是想将每一行存储在一个数组中,然后打印它们。
解决方案
几点:
int main(int argc, char* argv[]) {
我建议您在继续之前检查这里的参数数量
setup_screen();
setup();
// File input
char textExtracted[250];
可以加入声明,但始终检查来自 I/O 的返回值
FILE* file_handle = = fopen(argv[1], "r");
if (NULL == file_handle)
{
perror(argv[1]);
return EXIT_FAILURE;
}
下面不是从文件中读取的正确方法,相反,您应该先尝试从文件中读取,然后检查读取的错误/eof/enuff 字节
// while(fgets(textExtracted,sizeof(textExtracted), 1, file_handle) > 0) {}
while(!feof(file_handle)){
fgets(textExtracted, 150, file_handle);
}
看起来您认为 fgets 在您多次调用它时会附加到 textExtracted ,但事实并非如此!文件中的每一行都将覆盖先前读取的行。另请注意,\n 字符包含在您的缓冲区中。
但是由于您的文件看起来很小,您可以将整个内容读入缓冲区并使用它。
// int size = fread(textExtracted, sizeof(textExtracted), 1, file_handle);
更好的是首先检查文件的大小,然后使用 malloc 分配一个缓冲区来保存整个文件或逐个字符地读取文件,并即时执行您需要执行的任何命令。例如,switch 语句非常适合作为状态机
switch( myreadchar )
{
case 'A':
break;
case 'B':
break;
...
}
textExtracted[0] 是一个字符, textExtracted 是整个数组,所以不是
printf("%s", textExtracted[0]);
写
printf("%s", textExtracted);
甚至更好
fputs(textExtracted, stdout);
return 0;
推荐阅读
- couchdb - writing a map function in couchdb db that inserts another doc into a doc
- r - 从R中的图像修改像素颜色
- ios - 有没有办法让 ios 的通知监听器在颤动
- python - 如何将python数组分配给gnuplot数组?
- javascript - material-ui table 多子行不能一起悬停
- css - ICSS :export 函数将所有键转换为 camelCase
- node.js - 在nodejs中处理非常大的文件
- sql - 我错过了什么sql公式?
- python - 如何使用python将列表中的项目写入csv上的一行
- google-cloud-platform - 找不到默认凭据谷歌云