私はCプログラミングの経験が比較的豊富です。それは私のお気に入りの言語の 1 つです。今日、シェル プログラミングについて勉強しているときに、Linux システム (Backtrack 5 r2) で実行した ac プログラムに出くわしました。そして、プログラムは私が本当に理解できなかった奇妙な出力をしました。
これがコードです...
#include <stdio.h>
int main(int argc, char *argv[])
{
char array[] = { 0x25, 115, 0 };
char array2[] = { 68, 0x61, 118, 0x69, 0144, 040,
0107, 97, 0x74, 119, 0157, 0x6f,
100, 0x20, 0x72, 117, 'l', 0x65,
115, 041, 012, 0 };
printf(array, array2);
}
gcc を使用してこのコードをコンパイルし、実行時に次のような出力を得ました。
デビッド・ガットウッドが支配!
この出力を取得した方法と理由を本当に理解できませんでした。私の知る限り、配列の名前を「printf」に渡すと、配列のベースアドレス、つまり配列の0番目の要素のアドレスが出力されます。これも、「printf」ステートメントで適切な書式指定子が使用されている場合にのみ、適切に表示されます。
では、どこが間違っているのか、重要なことを見落としているのか、それとも gcc が原因なのか?