Ошибки при компиляции кода 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 я получаю ошибку Segmentation fault:

$ 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).

Во втором случае вы нажимаете на комментарий:

//Необходимо указать длину (integer < sizeof(buffer)==50) в качестве первого аргумента;

//В противном случае он рухнет и сгорит

потому что вы не предоставили первый (или какой-либо) аргумент программе. Попробуйте ./permute.bin 10.

решение2

В первом случае, похоже, вы сохранили код C как, permuteа затем попытались запустить

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

Поскольку нет Makefileцели для make, он завершился без ошибок, печатая информационное сообщение,

Ничего не поделаешь для «перестановки».

Поскольку не вернул код ошибки, была запущена makeвторая часть этой команды ( ). Поскольку это исходный код, а не исполняемый двоичный файл, он был интерпретирован как скрипт оболочки, что привело к следующему выводу:time ./permute 5 >/dev/nullpermute

./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

Связанный контент