Cコードのコンパイル中にエラーが発生しました。

Cコードのコンパイル中にエラーが発生しました。

このリンクで私がしたいことに非常によく合う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

Makefiletargetがないため、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

関連情報