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)を指定する必要があります。

//そうしないとクラッシュしてしまいます

プログラムに最初の引数 (または引数を 1 つも) を指定していないためです。 を試してください./permute.bin 10

答え2

最初のケースでは、Cコードを次のように保存してpermute実行しようとしたようです。

make CFLAGS=-O3 permute && time ./permute 5 >/dev/null

Makefileのターゲットを持つがないためmake、情報メッセージを出力しながらエラーなしで終了しました。

「permute」については何も行う必要はありません。

makeはエラー コードを返さなかったため、そのコマンドの 2 番目の部分 ( time ./permute 5 >/dev/null) が実行されました。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) {'

permute.cより良い手順としては、C ソース コードを に保存し、次のコマンドを実行してコンパイル (および必要なライブラリ ファイルにリンク) することです。

gcc -O3 -o permute permute.c

これpermuteにより、実行可能な実行可能バイナリが作成されます。例:

./permute 2

関連情報