私は C++ で最初の赤ちゃんのステップを実行しようとしています。
なぜこれが期待どおりに機能しないのか、誰か説明できますか?
#include <iostream>
#include <stdio.h>
using namespace std;
int main (int argc, char *argv[]) {
int i;
printf("[D] sizeof argv is: %d\n", sizeof(argv) );
printf("[D] sizeof int is: %d\n", sizeof(int) );
printf(
"[D] sizeof argv / sizeof int is: %d\n",
sizeof(argv) / sizeof(int)
);
for (i = 0; i < (sizeof(argv) / sizeof(int)); i++ ) {
printf("[D] i is: %d\n", i );
cout << argv[i] << endl;
}
if (cout.fail()) {
printf("cout failed!\n");
}
cout << "Hello world" << endl;
}
今テスト:
aloism@azzgoat:~/sandbox/tuts$ g++ string02-d.cpp
aloism@azzgoat:~/sandbox/tuts$ ./a.out hello world
[D] sizeof argv is: 8
[D] sizeof int is: 4
[D] sizeof argv / sizeof int is: 2
[D] i is: 0
./a.out
[D] i is: 1
hello
Hello world
aloism@azzgoat:~/sandbox/tuts$ ./a.out
[D] sizeof argv is: 8
[D] sizeof int is: 4
[D] sizeof argv / sizeof int is: 2
[D] i is: 0
./a.out
[D] i is: 1
cout failed!
aloism@azzgoat:~/sandbox/tuts$ echo $?
0
aloism@azzgoat:~/sandbox/tuts$
argv に項目が 1 つしかない場合 (argv[0]、"./a.out")、"Hello world" がスキップされるのはなぜですか? argc または argv に関係なく、これがスキップされる理由がまったく見つかりません!
OSは64ビットのDebian Squeezeです(そうsizeof(int) == 4
です)。
更新: #include ノイズを削除し、デバッグを追加しました。
更新 2: user315052 の回答に基づいてデバッグを追加しました。(今では、彼が正しいことを示しています。)