我正在尝试将a simple bruteforcer从C#转换为C,以便进行一些基准测试。我假设主题的逻辑是合理的,所以我决定翻译这个,但我在C中不太好。这是原始代码:
private static char[] characters =
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
// length: The length of the string created by bruteforce
public static void PerformBruteForce(int length) {
int charactersLength = characters.Length;
int[] odometer = new int[length];
long size = (long)Math.Pow(charactersLength, length);
for (int i = 0; i < size; i++) {
WriteBruteForce(odometer, characters);
int position = 0;
do {
odometer[position] += 1;
odometer[position] %= charactersLength;
} while (odometer[position++] == 0 && position < length);
}
}
private static void WriteBruteForce(int[] odometer, char[] characters) {
// Print backwards
for (int i = odometer.Length - 1; i >= 0; i--) {
Console.Write(characters[odometer[i]]);
}
Console.WriteLine();
}
这是将被翻译的代码:
void WriteBruteForce(int *odometer, char *characters) {
for (int i = len(*odometer) - 1; i >= 0; i--) {
puts(characters[odometer[i]]);
}
}
void PerformBruteForce(char *characters, int maxLength) { // max = maximum length
int characters_length = len(characters);
int odometer[maxLength];
long size = (long)pow(characters_length, maxLength);
for (int i = 0; i < size; i++) {
WriteBruteForce(odometer, characters);
int position = 0;
do {
odometer[position]++;
odometer[position] %= characters_length;
} while (odometer[position++] == 0 && position < maxLength);
}
}
但是我遇到了很多错误(实际上是4个,但是它们非常恶化),也许某些代码行甚至都没有翻译过。字符集将传递给PerformBruteForce
的第一个参数。
C中技术熟练的人能帮助我解决C代码中的错误并修复它们吗?
错误:
code.c:在函数'WriteBruteForce'中:
code.c:21:15:警告:隐式声明函数'len'[-Wimplicit-function-declaration]
for(int i = len(* odometer) - 1; i&gt; = 0; i--){
code.c:21:2:错误:在'for'循环初始化声明中声明非变量'len'
for(int i = len(* odometer) - 1; i&gt; = 0; i--){
^ ~~
code.c:22:8:警告:传递'puts'的参数1使整数指针不带强制转换&gt; [ - Wint-conversion]
放(字符[里程表[I]]);
在code.c中包含的文件中:1:0: /usr/include/stdio.h:697:12:注意:预期'const char *'但参数类型为'char'
extern int puts(const char * __ s);