Erros ao compilar o código C [fechado]

1

Encontrei uma parte do código C que seria muito útil para o que eu quero fazer sob este link: Todas as combinações possíveis de caracteres e 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]='
$ 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) {'
'; permute(length - 1); return 0; }

No entanto, quando tento compilá-lo como é sugerido, recebo erros de acompanhamento. Alguém por favor pode me ajudar a corrigi-lo?

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

Além disso, quando tento usar o gcc, recebo um erro de falha de segmentação:

#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]='
$ 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) {'
'; permute(length - 1); return 0; }
    
por user205591 15.12.2016 / 11:27

2 respostas

1

Parece que você nomeou inicialmente o arquivo C permute ; quando o make falhou, você tentou executá-lo com o shell, o que resultou em todos esses erros de sintaxe (pois o shell não sabe como executar o código C).

No segundo caso, você clicou no comentário:

//Must provide length (integer < sizeof(buffer)==50) as first arg;

//It will crash and burn otherwise

porque você não forneceu um primeiro (ou nenhum) argumento para o programa. Experimente ./permute.bin 10 .

    
por 15.12.2016 / 13:04
0

No primeiro caso, parece que você salvou o código C como permute e, em seguida, tentou executar

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

Como não há Makefile com um destino para make , ele saiu sem erro ao imprimir a mensagem informativa,

Nothing to be done for 'permute'.

Como make não retornou um código de erro, a segunda parte desse comando ( time ./permute 5 >/dev/null ) foi executada. Como permute é o código-fonte e não um binário executável, ele foi interpretado como sendo um script de shell, resultando na seguinte saída:

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

Melhores instruções seriam salvar o código-fonte C em permute.c e, em seguida, executar o seguinte comando para compilá-lo (e vincular aos arquivos de biblioteca necessários):

gcc -O3 -o permute permute.c

Isso cria permute como um binário executável que pode ser executado, por exemplo:

./permute 2
    
por 15.12.2016 / 13:54

Tags