程序不断崩溃,要求参数计数至少为3

时间:2018-02-14 03:34:21

标签: c

我想编写一个验证CLI命令的程序。当有两个参数时,我的程序有效,但当我添加第三个参数时,它会崩溃。我已经被困了几个小时。非常感谢你的帮助! :d

Commands

这就是我应该做的。 讲师建议我将我的解决方案分解为3个功能:

  • validate命令:此函数接受命令行参数和 验证它们代表系统的有效命令。返回一个布尔值 指示命令是否有效。

  • 打印帮助:此功能为用户打印完整的使用(帮助)消息

  • main:主函数使用上面的命令来验证命令,然后 执行n路分支或切换以选择正确的选项并打印a 合适的信息。

我在validArgue函数中放置了一个注释块,试图隔离并调试它

继承我的代码

/*
 * Assignment 2 Encryption part 1
 * Author : Brian HO
 * Date: 12/02/2018
 *
 */

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

 bool validArgue(char* input, int length,char* string);
 bool helpManual(char* input);

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

    char* input = argv[1];
    int length = atoi(argv[2]);
    char* string = argv[2];

    if(helpManual(input)) {
        printf("\nUsage:   encrypt -k 123\n   or:   encrypt -f textfile.txt\n   or:   enctypt -e/d textfile.txt keyfile.txt\n\n\tOptions:\n\t\t-h\t\t\tPrint this help manual.\n\t\t-k <length>\t\tGenerate encryption key for given length (length > 0).\n\t\t-f <filename>\t\tGenerate frequency histogram for filename.\n\t\t-e <filename> <keyfile> Encrypt cleartxt in filename with given keyfile.\n\t\t-d <filename> <keyfile> Decipher ciphertext filename with given keyfile.\n\n");
    }
    if(validArgue(input,length,string)){
        printf("Command is valid!");
    }
    else {
        printf("Invalid arguments...\n\nUsage:   encrypt -k 123\n   or:   e 
    ncrypt -f textfile.txt\n   or:   enctypt -e/d textfile.txt 
    keyfile.txt\n\n\tOptions:\n\t\t-h\t\t\tPrint this help manual.\n\t\t-k 
    <length>\t\tGenerate encryption key for given length (length > 0).\n\t\t-f 
    <filename>\t\tGenerate frequency histogram for filename.\n\t\t-e <filename> 
    <keyfile> Encrypt cleartxt in filename with given keyfile.\n\t\t-d 
    <filename> <keyfile> Decipher ciphertext filename with given keyfile.");
    }
    return 0;
}


bool helpManual(char* input) {
    char ch1 = input[0];


    char ch2 = input[1];
    if(ch1 == '-' && ch2 == 'h'){
        return true;
    }
    else {
        return false;
     }
 }

bool validArgue(char* input, int length, char* string){
    char ch = string[1];
    if (strcmp(input, "-h")==0){
        return true;
    }
    else if (strcmp(input, "-k")==0) {
        if (length >0) {
            return true;
        }
        else 
            return false;
    }
    else if (strcmp(input, "-f")==0) {
        if (ch>0) {
            return true;
        }
        else
            return false;
    }
      else 
        return false;
}

0 个答案:

没有答案