首先,我不是要求任何人为我编写程序或为我做作业......我有一个错误,我无法弄清楚是什么导致它,以及在哪里寻找修复它
所以我正在尝试创建一个程序,它将从命令行获取命令和输入文件,并根据命令选择执行以下几个函数之一:输入文件的行,计数输入文件的单词,或检查输入文件的回文,然后将回文(如果有的话)与字典文件进行比较。
以下是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
void usage(char *prog_name) //usage file if input format is wrong
{
printf("Usage: %s, <-h>|<-l>|<-w>|<-p>, <filename>\n", prog_name);
exit(0);
}
void help(char *prog_name, char *filename) //help file for -h option
{
printf("Welcome to the help file\n");
printf("For number of lines, enter: <%s>, <-l>, <%s>.\n", prog_name, filename);
printf("For number of words, enter: <%s>, <-w>, <%s>.\n", prog_name, filename);
printf("To list the palindromes in alphabetical order, print the number of
palindromes, and to check them against the dictionary, enter: <%s>, <-p>, <%s>\n",
prog_name, filename);
exit(0);
}
void fatal(char *); //function for fatal errors
void *ec_malloc(unsigned int); //error-checked malloc wrapper
void linecount(char *filename) // counts the number of lines of input file
{
char *infile;
infile = (char *) ec_malloc(strlen(filename));
strcpy(infile, filename);
FILE *fp = fopen(infile, "r");
if (fp == NULL)
fatal("input file does not exist");
int ch;
int count = 0;
do {
ch = fgetc(fp);
if( ch== '\n')
count++;
}
while( ch != EOF );
printf("Total number of lines %d\n",count);
exit(0);
}
int main(int argc, char *argv[])
{
if (argc < 3) //if there aren't enough arguments, display the usage file
{
usage(argv[0]);
}
else if (argv[1] == "-h") //this is the help option
{
help(argv[0], argv[2]);
}
else if (argv[1] == "-l") //this is the line count option
{
linecount(argv[2]);
}
else
{
fatal("skipped if functions");
}
return 0;
}
void fatal(char *message) //this function displays an error message and then exits
{
char error_message[100];
strcpy(error_message, "[!!] Fatal Error ");
strncat(error_message, message, 83);
perror(error_message);
exit(-1);
}
void *ec_malloc(unsigned int size) //wrapper function for an error checked malloc
{
void *ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}
所以,当我跑:
gcc -o fr filereader.c
./fr -h fevbwervrwe.txt
我收到错误消息,指出已跳过if语句。
如果我尝试运行
,则相同./fr -l vrweqvervvq.txt
似乎编译器正在跳过我的if语句,老实说我无法弄明白为什么。任何帮助都将非常感激。
答案 0 :(得分:10)
尝试使用strcmp()
代替==
。
答案 1 :(得分:6)
if (argv[1] == "-h")
此语句比较两个指针,而不是两个字符串。尝试:
if (strcmp(argv[1], "-h") == 0)
答案 2 :(得分:5)
在C中,您需要使用
等函数比较字符串值strcmp(str1, str2);
不要使用==
运算符比较字符串值;检查完全不同的东西。
答案 3 :(得分:3)
使用“gcc -g -o fr filereader.c”编译,并在调试器(例如gdb)下单步执行。
我向你保证编译器不会“忽略”你的“if”语句。
请勿使用“argv [1] ==” - h“。使用”if(strcmp(argv [1],“ - h”)== 0“而不是......
答案 4 :(得分:2)
在C中,您不能将字符串与==
运算符进行比较。相反,你使用以下习语:
if (strcmp(s1, s2) == 0) { ... }
答案 5 :(得分:1)
正如已经提到的,只要了解&#34; argv [1]&#34; ==&#34; -h&#34;意味着你要比较指针。记住这一点。
我给你的另一个建议是看getopt()
。这用于解析unix中的命令行参数,这将使您的生活更轻松,并帮助您编写健壮的代码。
答案 6 :(得分:1)
尝试strcmp()而不是== as ==比较存储字符串值的地址 但strcmp会比较我认为需要的内容(字符串值)
e.g。 int main(){char * a =“anshul”; char * b =“anshul”; if(a == b){printf(“ok”);} / comapres地址存储anshul / if(strcmp(a,b)){printf(“ok”); / *这将比较值,即字符串anshul因此总是相等,但在以前的情况下,它取决于anshul是否存储在同一个内存中 所以不是一件明智的事情