このリンクで私がしたいことに非常によく合うCコードを見つけました。文字と数字のすべての可能な組み合わせ
#include <stdio.h>
//global variables and magic numbers are the basis of good programming
const char* charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
char buffer[50];
void permute(int level) {
const char* charset_ptr = charset;
if(level == -1){
puts(buffer);
}else {
while(buffer[level]=*charset_ptr++) {
permute(level - 1);
}
}
}
int main(int argc, char **argv)
{
int length;
sscanf(argv[1], "%d", &length);
//Must provide length (integer < sizeof(buffer)==50) as first arg;
//It will crash and burn otherwise
buffer[length]='\0';
permute(length - 1);
return 0;
}
しかし、提案したようにコンパイルしようとすると、次のエラーが発生します。誰かがこの問題を解決するのに役立ちますか?
$ make CFLAGS=-O3 permute && time ./permute 5 >/dev/null
make: Nothing to be done for 'permute'.
./permute: line 3: //global: No such file or directory
./permute: line 4: const: command not found
./permute: line 5: char: command not found
./permute: line 7: syntax error near unexpected token `('
./permute: line 7: `void permute(int level) {'
また、gccを使用しようとすると、分割エラーエラーが発生します。
$ mv permute permute.c
$ gcc permute.c -o permute.bin
$ chmod 755 permute.bin
$ ./permute.bin
Segmentation fault (core dumped)
答え1
元のCファイル名をとして指定したようですpermute
。失敗したときにmake
シェルを使用してファイルを実行しようとしましたが、これはすべての構文エラーが発生しました(シェルはCコードの実行方法がわからないため)。
2番目のケースでは、コメントをクリックしました。
//最初のパラメータとして長さ(整数< sizeof(buffer)= = 50)を指定する必要があります。
//そうでなければ、衝突が発生し、燃焼します。
プログラムに最初の(またはランダムな)引数を提供しないからです。努力する./permute.bin 10
。
答え2
permute
最初のケースでは、Cコードをとして保存して実行しようとしたようです。
make CFLAGS=-O3 permute && time ./permute 5 >/dev/null
Makefile
targetがないため、make
情報メッセージの出力中にエラーなしで終了します。
準備には処置は必要ありません。
make
エラーコードが返されなかったため、time ./permute 5 >/dev/null
コマンドの2番目の部分()が実行されます。これは実行可能なバイナリではなくソースコードなので、permute
シェルスクリプトとして解釈され、次のような出力を生成します。
./permute: line 3: //global: No such file or directory
./permute: line 4: const: command not found
./permute: line 5: char: command not found
./permute: line 7: syntax error near unexpected token `('
./permute: line 7: `void permute(int level) {'
より良い手順は、Cソースコードを保存してpermute.c
から次のコマンドを実行してそれをコンパイルし、必要なライブラリファイルにリンクすることです。
gcc -O3 -o permute permute.c
permute
これにより、実行可能な実行可能なバイナリが作成されます。たとえば、次のようになります。
./permute 2