2011-10-20 12 views
0

これは私がデコードされた署名コードです:このコードの逆のプロセスですか?

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

私はC言語で初心者ですので、あなたは[再帰ほか]正確にコード内で何が起こっているかを説明してくださいだろうか?

私の名前を印刷するのに似たプログラムを作成したいのであれば、数字を生成する手順は何ですか? は、私は次のことを試してみました: CODE1:

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

CODE2:

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

int main() 
{ 
    if(1000.0-i++) 
    { 
     main(); 
    } 
    else 
    { 
     puts(q); 
    } 
} 
  1. なぜ第二のコードのみ8つの文字のための出力を与えていますか? [7文字まで入力すれば0.000000、それ以上の場合は8と同じ結果が得られます]

  2. 入力によっては13桁しか生成されないものもあれば、生成するものもあります119桁! #@#@ ???

  3. この巨大な数字を私の名前の15-20桁に減らすにはどうすればよいですか?

  4. [私は既に最初の13桁を持っているので、あなたの特別な番号の最後の4桁を取得するにはどうすればよいですか?

+0

あなたのコードは浮動小数点型を文字列のように使用します。悪いことが起こるでしょう。文字列 '3.14'を呼び出して、その中から「3.14」を得ることはできません。文字列をダブルにスキャンする場合は、コアダンプを要求しています。 – mah

+3

あなたはそこに行きたくありません....しかし。真剣に、これは変数の記憶、メモリのレイアウトと浮動小数点の表現について毛深い詳細にたくさん入ります。初心者の方は、言語を悪用する方法を理解するよりも、良いコーディング方法を学ぶ方が良いです。 – AShelly

+0

魔法の数字のIEEE表現を16進数で見ると、0x41594844494E4153が得られます。 LSBから始めて各バイトをasciiとして取ると、SANIDHYAが得られます。 8文字の制限は、doubleが8バイトであるためです。私はメインでの再帰が間違っていると思う。スタックのオーバーフローの前に再帰が終了し、名前の後に余分な文字がないという事実は、コンパイラの特定の実装の詳細であり、任意のシステムで失敗する可能性があります。 – AShelly

答えて

1

OK。彼は文字通りfloatを取り込み、それにunintialized intを加えて、結果を整数0と照合しています。そこには少なくとも3つの問題があります。次に彼はputs()に、ダブルへのポインタが実際に印刷したい文字列であると伝えています。ああ、彼はフリージングで再帰していますメイン()!?

この恐ろしい混乱は、彼が望むことを終わらせるが、誰も容易に理解できない(そして維持する)方法で起こるかもしれない。これは、International Obfuscated C Coding Contestへの提出の外で、まったく間違いない職人技です。

ここで何が起こっているのか知りたいですか?起こっているのは、村のどこかに馬鹿がないことです。あなたがこれを書いた人を見つけた場合は、彼のコンパイラーを、もし必要ならば、力で取り除いてください。

ロデオ・クラウンとして彼のキャリアを提案します。彼はそれでも有能ではないかもしれませんが、少なくともその牛は問題を処理します。

+0

これは少し意味があった。私はこのコードが悪いことを知っていますが、あなたはその男を侮辱する必要はありません。彼は非常に明確に述べています。より多くの市民になることができます。 – LamdaComplex

+0

@LamdaComplex - Qをもう一度読みます。 **これは彼が解読しようとしている誰かのコードです**。そして、率直に言って、 "元気なソフトウェアの人々のために、オリジナルのコードをゆるやかなままにしておくと、それを誰にでも許してくれるだろう。彼らには子供と家族も家に帰ることができ、このようなものは華やかな時間に決して壊れません。 –

+0

@ T.E.D。 - プロダクションコードに完全に同意する。原作者が[難読化された署名ジェネレータ](http://www.iwriteiam.nl/SigProgC.html)を作成するための意図的な作業であった可能性があります。私は、なぜそれが働くのかを正確に理解している人を雇うことを喜んでします。 – AShelly

関連する問題