Errores al compilar código C

Errores al compilar código C

Encontré un fragmento de código C que sería muy útil para lo que quiero hacer en este enlace:Todas las combinaciones posibles de caracteres y números.

#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;
}

Sin embargo, cuando intento compilarlo como se sugiere, obtengo los siguientes errores. ¿Alguien puede ayudarme a corregirlo?

$ 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) {'

Además, cuando intento usar gcc, aparece un error de falla de segmentación:

$ mv permute permute.c
$ gcc permute.c -o permute.bin
$ chmod 755 permute.bin 
$ ./permute.bin 
Segmentation fault (core dumped)

Respuesta1

Parece que inicialmente nombró el archivo C permute; cuando makefalló, intentó ejecutarlo con su shell, lo que resultó en todos esos errores de sintaxis (ya que el shell no sabe cómo ejecutar código C).

En el segundo caso, le das al comentario:

//Debe proporcionar longitud (entero < sizeof(buffer)==50) como primer argumento;

//De lo contrario, se bloqueará y arderá

porque no proporcionó un primer (o ningún) argumento al programa. Intentar ./permute.bin 10.

Respuesta2

En el primer caso, parece que guardó el código C permutey luego intentó ejecutar

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

Como no hay Makefileun objetivo para make, salió sin error al imprimir el mensaje informativo.

No hay nada que hacer para 'permutar'.

Como makeno devolvió un código de error, time ./permute 5 >/dev/nullse ejecutó la segunda parte de ese comando (). Dado que permutees código fuente y no un binario ejecutable, se interpretó como un script de shell, lo que generó el siguiente resultado:

./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) {'

Mejores instrucciones serían guardar el código fuente C permute.cy luego ejecutar el siguiente comando para compilarlo (y vincularlo a los archivos de biblioteca requeridos):

gcc -O3 -o permute permute.c

Esto crea permuteun binario ejecutable que se puede ejecutar, por ejemplo:

./permute 2

información relacionada