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 코드 실행 방법을 모르기 때문입니다).

두 번째 경우에는 댓글을 클릭했습니다.

//첫 번째 매개변수로 길이(정수 < sizeof(buffer)==50)를 제공해야 합니다.

//그렇지 않으면 충돌이 발생하고 타버릴 것입니다.

프로그램에 첫 번째(또는 임의) 인수를 제공하지 않기 때문입니다. 노력하다 ./permute.bin 10.

답변2

permute첫 번째 경우에는 C 코드를 로 저장 한 후 실행을 시도한 것으로 보입니다.

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

Makefiletarget이 없기 때문에 make정보 메시지를 출력하는 동안 오류 없이 종료되며,

준비에는 조치가 필요하지 않습니다.

make오류 코드가 반환되지 않았 으므로 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) {'

더 나은 지침은 C 소스 코드를 저장한 permute.c후 다음 명령을 실행하여 이를 컴파일하고 필요한 라이브러리 파일에 연결하는 것입니다.

gcc -O3 -o permute permute.c

permute그러면 실행할 수 있는 실행 가능한 바이너리가 생성됩니다 . 예를 들면 다음과 같습니다.

./permute 2

관련 정보