【发布时间】:2022-10-19 05:07:37
【问题描述】:
我正在尝试以“lolcat”的名称在 C 中创建自己的 cat 命令。它将读取命令行参数,例如文件名,打开该文件并以相反的顺序打印其内容。当我运行以下命令时,程序运行良好:
./lolcat 文件1.txt 它以相反的顺序打印文件内容。
但是当我尝试实现 -n 功能来计算总行数时。 如 ./lolcat -n 文件1.txt 它显示分段错误(核心转储)。
我附上了以下代码:
#include <stdio.h>
int main(int argc , char *argv[])
{
printf("%s" , argv[1]);
int command = 0;
if(argv[1] == "-n")
{
command = 2;
}
else{
command = 1;
}
for(int i = command ; i < argc ; i++)
{
FILE *myFile = NULL;
myFile = fopen(argv[i] , "r");
char word[255];
char c;
int c_count = 0;
int w_count = 0;
int l_count = 0;
int prev_c_count = 0;
int x = 0;
int out = 0;
while((c = fgetc(myFile)) != EOF)
{
word[x] = c;
c_count++;
if(c == '\n' || c == '\0')
{
l_count++;
if(command == 1)
{
for(int j = c_count - 1 ; j>=prev_c_count ; j--)
{
printf("%c" , word[j]);
}
}
prev_c_count = c_count;
}
x++;
}
printf("\n");
l_count++;
if(command == 1)
{
for(int j = c_count - 1 ; j>=prev_c_count ; j--)
{
printf("%c" , word[j]);
}
}
prev_c_count = c_count;
printf("\n");
}
return 0;
}
【问题讨论】:
-
if(argv[1] == "-n")不是您比较 C 字符串的方式...尝试strcmp()...因此,程序尝试打开一个名为“-n”的文件,但失败了,并且代码继续吸在那个干燥的管道上...当您不检查 fopen() 等系统调用的返回码时,您希望系统做什么? -
argv[1] == "-n"不是在 c 中进行字符串比较的定义方法。你的编译器应该警告你。 -
@possum:语法上 argv[1] 和 "-n" 都是指向 char 的指针,所以我猜编译器对此很满意。 (当然它们总是指向不同的内存区域,所以它们总是不同的)