私はプロキシサーバーを書いていますが、誰かが説明してくれることを望んでいた奇妙なバグに遭遇しました。
クライアントからGETリクエストの最初の行を受信しています。たとえば、クライアントはリクエストを送信します。
GET http://en.wikipedia.org/wiki/Special:Random HTTP/1.0
Host: en.wikipedia.org
...
そして、このリクエストをサーバーに転送します。
ただし、特定のWebアドレスでは、次の問題が発生します。
GET http://map.media6degrees.com/orbserv/curl=http%3A%2F%2Fwww.masteringemacs.org%2Farticles[trunc] HTTP/1.0
char buffer[MAXLINE_LENGTH]
この行を、文字列を保持するのに十分な長さのに読み込みます。
受信したgetリクエストを印刷すると
printf(buffer);
印刷される文字列は次のとおりです。
GET http://map.media6degrees.com/orbserv/hbpix?pixId=2869&curl=http0X0.0000000000015P-10220.0000000.000000www.masteringemacs.org0.000000articles0.00000020100.000000110.000000010.000000running-shells-in-emacs-overview204741995430849962482228271154502456423284733956118041206315879167624419264810411254941012469231829496710329852458403099883653794777355548418601638730167027236864.000000 HTTP/1.0
%3A、%2Fなどは文字列形式になっているようです。
実行するprintf("%s", buffer);
と、正しい期待される出力が得られます
編集:私はこれが起こっている理由を理解しています。なぜこれがこのように起こっているのか興味があります。printfが「文字列フォーマット」であるという値は、スタック上の任意の領域からのものですか?%3A et alは有効なフォーマット文字列ですか?