2011-10-20 4 views
0

이것은 내가 디코딩 서명 코드는 다음과 같습니다이 코드를 역순으로 처리 하시겠습니까?

#include<stdio.h> 
int i; 
double q[]={6627601.1454013166}; 
int main() 
{ 
    if(1000.0-i++) 
    { 
     main(); 
    } 
    else 
    { 
     puts(q); 
    } 
} 

난 당신이 바로 [재귀 외에] 코드에서 무슨 일이 일어나고 있는지 설명해주십시오 수 C에서 초보자입니다 때문에?

내 이름을 인쇄 할 비슷한 프로그램을 만들고 싶다면 번호를 생성하는 절차는 무엇입니까?

#include<stdio.h> 
int i; 
double q[]={31711421078673377979858439824814601270188287470225555299667257024608266243979287542515985597401536215834733576192.000000}; 

int main() 
{ 
    if(1000.0-i++) 
    { 
     main(); 
    } 
    else 
    { 
     puts(q); 
    } 
} 
  1. 왜 두 번째 코드는 8 개 문자의 출력을 제공 하는가 : 코드 1 :

    #include<stdio.h> 
    int main() 
    { 
        double a; 
        scanf("%s",&a); 
        printf("%lf\n",a); 
    } 
    

    CODE2 나는 다음과 같은 시도? [입력을 7 자까지 입력하면 0.000000으로 출력되고 8보다 많은 경우 8과 동일한 출력이됩니다.]

  2. 일부 입력의 경우 13 자릿수를 생성하고 일부는 생성합니다 119 자릿수! # @ # @ ???

  3. 어떻게이 이름을 15-20 자리로 줄일 수 있습니까?

  4. 특수 번호의 마지막 4 자리는 어떻게 얻을 수 있습니까? [이미 처음 13 자리 숫자를 가지고 있기 때문에] 어떻게해야합니까?

+0

코드는 부동 소수점 유형을 문자열 인 것처럼 사용합니다. 나쁜 일이 발생할 것입니다. '3.14'를 문자열로 부르고 "3.14"를 얻을 수는 없습니다. 문자열을 이중으로 스캔하는 경우 코어 덤프를 요청할 것입니다. – mah

+3

당신은 거기에 가고 싶지 않습니다 .... 아직. 진지하게, 변수 저장, 메모리 레이아웃 및 부동 소수점 표현에 대한 많은 세부 정보를 얻습니다. 초보자로서 언어를 남용하는 방법을 찾는 것보다 좋은 코딩 방법을 배우는 것이 좋습니다. – AShelly

+0

마술 번호의 IEEE 표현을 16 진수로 보면 0x41594844494E4153이됩니다. LSB로 시작하여 각 바이트를 ascii로 가져 가면 SANIDHYA가됩니다. 8 자 한계는 double이 8 바이트라는 사실에 기인합니다. 나는 main에서 재귀가 잘못된 것이라고 생각한다. 재귀가 스택 오버플로 전에 끝나고 이름 뒤에 추가 문자가 없다는 사실은 컴파일러의 특정 구현 세부 사항이며 임의의 시스템에서 실패 할 가능성이 있습니다. – AShelly

답변

1

확인. 그는 글자 float을 받아 들여서 unintialized 인 int을 추가 한 다음 결과를 정수 0과 비교합니다. 거기에 적어도 세 가지 문제가 있습니다. 그런 다음 그는 puts()에게 double에 대한 포인터가 실제로 원하는 문자열이라고 알려줍니다. 오, 그리고 그는 frigging에 재연하고있다 main()!?

이 끔찍한 혼란은 그가 원하는 것을 끝내기 위해 일어날 수 있지만, 아무도 쉽게 이해할 수없는 방식으로 유지됩니다. 이것은 International Obfuscated C Coding Contest에 제출하는 것의 바깥 쪽에서 완전히 부도덕 한 기술입니다.

여기 무슨 일이 일어나고 있는지 알고 싶습니까? 무슨 일이 벌어 지는지는 마을의 어딘가에 바보가 없다는 것입니다. 만약 당신이 이것을 쓴 사람을 찾으면, 그의 컴파일러를 빼앗아 가려고합니다.

로데오 광대처럼 그에게 경력을 제안합니다. 그는 그 일에 유능하지 않을 수도 있지만, 적어도 그 황소는 문제를 해결할 것입니다.

+0

그것은 약간 의미가 있었다. 나는이 코드가 나쁘다는 것을 알고 있지만 그 사람을 모욕 할 필요는 없다. 그는 그가 이것을 처음 접했을뿐 아니라 프로그래밍 전체에 대해 매우 분명하다고 말합니다. 더 시민이 될 수 있습니다. – LamdaComplex

+0

@LamdaComplex - Q를 다시 읽습니다. ** 이것은 그가 해독하려고하는 다른 사람의 코드입니다 **. 그리고 솔직히 말해서, "의미"는 원래 코드가 느슨한 메인 트넌 스 소프트웨어 사람들에게 더 많은 것을 퍼트 리도록 쓴 것을 누구든지 허용 할 것입니다. 아이들과 가족들도 집에 돌아갈 수 있고, 이런 일은 절실한 시간에 결코 깨지지 않습니다. –

+0

@ T.E.D. - 생산 코드에 대해 완전히 동의하십시오. 원래 작성자가 [난독 화 서명 생성기] (http://www.iwriteiam.nl/SigProgC.html)를 작성하려는 의도적 인 노력일지도 모르겠다. 나는 그것이 효과가있는 이유를 정확히 이해하는 사람을 고용하게되어 기쁠 것입니다. – AShelly

관련 문제