我想用C++來做我的第一個嬰兒步驟。請解釋:在for循環之後跳過了一行?
有人可以解釋爲什麼這不工作,我期望的方式嗎?
#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;
}
現在測試:
[email protected]:~/sandbox/tuts$ g++ string02-d.cpp
[email protected]:~/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
[email protected]:~/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!
[email protected]:~/sandbox/tuts$ echo $?
0
[email protected]:~/sandbox/tuts$
爲什麼當只有一個argv中的項目(的argv [0],是 「./a.out」),在 「世界,你好」 被跳過?不管argc還是argv,我都找不到任何理由,爲什麼會跳過這個選項!
的OS是在64位(這樣sizeof(int) == 4
)的Debian擠壓。
更新:刪除#包括噪音,增加了一些調試。
更新2:增加了一些基於user315052的答案的調試。 (現在表明他是對的。)
它應該是'for(i = 0; i
Griwes
順便說一下,這不是** C++ **,甚至不是** C++ **中的有效函數聲明!它應該是'int main ...' –
您不使用''或''。在C++程序中,當您需要C''頭部的服務時,您應該使用''。 –