Fehler beim Kompilieren von C-Code

Fehler beim Kompilieren von C-Code

Ich habe unter diesem Link einen C-Code gefunden, der für das, was ich tun möchte, sehr nützlich wäre:Alle möglichen Kombinationen aus Buchstaben und Zahlen

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

Wenn ich jedoch versuche, es wie vorgeschlagen zu kompilieren, erhalte ich folgende Fehler. Kann mir bitte jemand helfen, das Problem zu beheben?

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

Auch wenn ich versuche, gcc zu verwenden, erhalte ich einen Segmentierungsfehler:

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

Antwort1

Anscheinend hatten Sie die C-Datei zunächst mit „“ benannt permute. Als dies makefehlschlug, versuchten Sie, sie mit Ihrer Shell auszuführen, was zu all diesen Syntaxfehlern führte (da die Shell nicht weiß, wie C-Code ausgeführt wird).

Im zweiten Fall treffen Sie auf den Kommentar:

//Muss als erstes Argument die Länge (Integer < sizeof(buffer)==50) angeben;

//Sonst wird es abstürzen und verbrennen

weil Sie dem Programm kein erstes (oder überhaupt kein) Argument übergeben haben. Versuchen Sie es ./permute.bin 10.

Antwort2

Im ersten Fall sieht es so aus, als ob Sie den C-Code gespeichert haben permuteund dann versucht haben, ihn auszuführen

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

Da es kein MakefileZiel für gibt make, wurde es ohne Fehler beendet und die informative Meldung ausgegeben.

Für „Permute“ kann nichts getan werden.

Da makekein Fehlercode zurückgegeben wurde, time ./permute 5 >/dev/nullwurde der zweite Teil des Befehls () ausgeführt. Da permutees sich um Quellcode und nicht um eine ausführbare Binärdatei handelt, wurde es als Shell-Skript interpretiert, was zu folgender Ausgabe führte:

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

Bessere Anweisungen wären, den C-Quellcode zu speichern permute.cund dann den folgenden Befehl auszuführen, um ihn zu kompilieren (und eine Verknüpfung mit den erforderlichen Bibliotheksdateien herzustellen):

gcc -O3 -o permute permute.c

Dadurch wird permuteeine ausführbare Binärdatei erstellt, die beispielsweise ausgeführt werden kann:

./permute 2

verwandte Informationen