Я пытаюсь сделать свои первые шаги ребенка с 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;
}
Теперь тестирование:
[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!
Операционная система: Debian Squeeze on 64-bit (так sizeof(int) == 4
).
Обновление: Удалено #include шум, добавлена некоторая отладка.
Обновление 2: Добавлена некоторая отладка, основанная на ответе пользователя315052. (Теперь он показывает, что он прав.)
Это должно быть 'for (i = 0; i
Griwes
Кстати, это не ** C++ **, это даже не допустимое объявление функции в ** C++ **! Это должно быть 'int main ...' –
Вы не используете ни '', ни' '. В программе на C++ вы, вероятно, должны использовать '', когда вам нужны службы из заголовка C ''. –