[英]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.