我想编写一个验证CLI命令的程序。当有两个参数时,我的程序有效,但当我添加第三个参数时,它会崩溃。我已经被困了几个小时。非常感谢你的帮助! :d
这就是我应该做的。 讲师建议我将我的解决方案分解为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;
}