[英]How can I generate a list of all possible password combinations with argv?
我是初学者,所以如果我错过了对代码至关重要的东西,请原谅我哈哈。 我正在制作一个程序,它从控制台获取输入,说明将使用多少个字符、字符(单个字母),以及你希望密码的长度。 我觉得我已经很接近了,但是每次我运行程序时,它似乎都会生成一个随机的字母模式,我无法遵循它。
这是我的代码,包括主要的 function。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
int generatePassword(char* characters[], int i, char s[], int numCharacters, int passwordLength) {
if (i==0) {
printf("%s\n", s);
return 0;
}
for (int j = 0; j < passwordLength; j++) {
strcat(s, characters[j]);
generatePassword(characters, i-1, s, numCharacters, passwordLength);
}
return 0;
}
void homeFunction(char* characters[], int numCharacters, int passwordLength) {
for (int i = 1; i <= numCharacters; i++) {
char s[MAX] = "";
int c = generatePassword(characters, i, s, numCharacters, passwordLength);
}
}
int main (int argc, char *argv[]) {
if (argc < 2) {
printf("ERROR: Program did not execute due to lack of arguments.\n");
return -1;
}
int numCharacters;
numCharacters = atoi(argv[1]);
int passwordLength;
passwordLength = atoi(argv[numCharacters+2]);
for (int i = 0; i < numCharacters; i++) {
if (strlen(argv[i+1]) > 1) {
printf("ERROR: You can only input one character at a time.\n");
return -1;
}
}
if (argv != numCharacters + 3) {
printf("ERROR: Invalid number of arguments.\n");
return -1;
}
char *charArray[numCharacters];
charArray[numCharacters] = (char*)malloc(numCharacters * sizeof(char));
for (int i = 0; i < numCharacters; i++) {
charArray[i] = argv[i+2];
}
homeFunction(charArray, numCharacters, passwordLength);
return 0;
}
理论上,如果用户使用“./NAME 2 ab 2”运行程序,结果应该是
a
b
aa
ab
ba
bb
这是我目前的 output。 如何让它看起来像上面的 output?
a
ab
abaa
abaab
abaabba
abaabbab
您需要学习 arrays 和字符串的基础知识。
想象一下,如果我将您的代码作为app.exe 99
运行
这是未定义的行为:
numCharacters = atoi(argv[1]);
int passwordLength;
passwordLength = atoi(argv[numCharacters+2]);
如果argv[1]
是"99"
,那么numCharacters
将是99
。
然后passwordLength
将被分配argv[101]
的 atoi 转换。 但是 argv 中只有两个有效元素: argv
argv[0]
是可执行路径,而argv[1]
是"99"
。 argv[2]
及以上是随机的 memory 这不是你要看的。
这也是错误的:
char *charArray[numCharacters];
charArray[numCharacters] = (char*)malloc(MAX * sizeof(char));
您正在分配一个(字符串)指针数组,然后分配给一个超出数组有效范围的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.