【发布时间】:2015-02-14 05:23:08
【问题描述】:
我正在尝试使用命令行参数并在 C 中解析文本文件。基本上我希望能够输入两个数字,例如 1 和 4,并让它读取文本文件的一列然后打印它到标准输出。我希望能够这样做:
PID TTY TIME CMD
449 ttys000 0:00.35 -bash
1129 ttys001 0:00.35 -bash
25605 ttys001 0:00.15 vi prog.c
6132 ttys002 0:00.11 -bash
6208 ttys002 0:00.03 vi test
然后做:
./your_prog 1 4 < data.txt
PID CMD
449 bash
1129 -bash
25605 vi
6132 -bash
6208 vi
所以我需要输入我要打印的列,在“data.txt”中重定向文件并让它处理文件并像这样打印。
到目前为止,我的代码有这个:
#include <stdio.h>
int main(int argc, char **argv){
//int row = argc[0];
//int col = argc[1];
//if number entered is less than one, re-enter
int i;
for (i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
if(argc < 1){
fprintf(stderr, "Enter a valid input");
//quit
return 1;
}
else{
char ch[256];
//ch[255] = '\0';
while(fgets(ch, 256, stdin) != NULL){
printf("%s", ch);
}
}
return 1;
}
但不确定我是否走在正确的轨道上,并且对下一步该做什么感到困惑。我是 C 的新手,所以如果这是一个简单的问题,我深表歉意。
【问题讨论】:
-
你似乎有一个好的开始,尤其是对于一个 C 新手来说。请注意,
argv[0]将是程序的名称。它的参数(如果有的话)将在argv[1]...argv[argc - 1]中呈现。 -
虽然您正确使用了
fgets(),但它确实将您限制在一个固定的最大行长度,并且它会在没有太多警告的情况下截断长行。如果您使用的是 GCC 和 GNU C 库,那么您可以考虑使用getline()函数。 -
除非您打算假设固定的列宽,否则您必须以某种方式拆分行。如果您愿意假设列之间存在某种分隔符,例如空格,那么您可以通过标准
strtok()函数将输入行分成列。但是请注意,示例输入的第 4 列中的某些值包含内部空格。
标签: c process command-line-arguments