繁体   English   中英

C语言命令行参数+在文件中读取

[英]C Language Command Line Arguments + Reading in File

我正在尝试制作一个从ubuntu终端接收命令并同时读取文件的程序。 如果用户键入“ -c”,它将读取文件并打印字符数;如果用户键入“ -w”,则将打印读取文件中的字数;如果键入“ -l”,则显示换行的数量。字符。 无论如何,我都尝试使用fscanf进行字符计数,但是由于某种原因,它似乎不起作用。 谁能解释我在做什么错,或者是否有更好的方法来做到这一点?

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


int main(int argc, char *argv[]){

int i;
char words[1000];
int counter = 0;
for(i = 0; i < argc; i++){
  if(strncmp(argv[i], "-c", 2) == 0){
     if(argv[i + 1] != NULL){
        while((fscanf(argv[i + 1], "[^\n]%s", words[i])) != EOF){
           counter++;
        }
     printf("%d characters\n", counter); 
     }
     printf("print character count\n");
  }
  else if(strncmp(argv[i], "-w", 2) == 0){
     printf("print word counts\n");
  }
  else if(strncmp(argv[i], "-l", 2) == 0){
     printf("print newline counts\n");
  }
  else if(strncmp(argv[i], "-h", 2) == 0){
     printf("prints help\n");
  }
}

}
  • fscanf的第一个参数是一个开放流,而不是文件名。 您需要将文件名传递给fopen以获得流。

  • 尝试使用fscanf方法非常不安全,就像gets一样糟糕,因为它很容易溢出固定大小的缓冲区。 将缓冲区大小作为参数的fgets会更好。

  • 您的fscanf格式字符串错误。 当传递字符集时,括号中的值位于%之后,而不是之前,并且您无需另外使用s 但是当您切换到fgets时,这个问题可以免费解决。

  • 接收值的fscanf参数必须是指针,但是您要传递单个数组元素。 由于fscanf是varargs,因此这只是未定义的行为。 (某些编译器对scanf格式代码有特殊处理,并且会警告您类型不匹配,但是没有检测varargs类型不匹配的一般方法)。

  • 阅读直到换行是您计算行而不是字符的方式。 要读取单个字符,请使用fgetc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM