void privet(char* name ...) {
char** ptr = &name;
va_list ap;
va_start(ap,name);
int i = 0;
for (;;) {
char* p = va_arg(ap,char*);
if (p == 0) break;
cout << ptr[i] << " " << i << endl;
i++;
}
va_end(ap);
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
if(argc > 0)
{
vector<string> args(&argv[1], &argv[argc]);
for(const auto& n : args)
{
cout << "Hello " << n << "\n";
}
}
}
//...
for(int i = 1; i < argc; ++i)
{
cout << "Hello " << argv[i] << "\n";
}
//...
Она получает имя (name) как параметр командной строки и выдает "Hello, name". Измените программу так, чтобы она получала произвольное число имен и всем им выдавала свое приветствие: "Hello, ...".
hello.exe name1 name2 name3
Hello name1
Hello name2
Hello name3
13. (*3) Напишите функцию обработки ошибок, первый параметр который подобен форматирующей
строке-параметру printf() и содержит форматы %s, %c и %d. За ним может следовать произвольное
количество числовых параметров. Функцию printf() не используйте. Если смысл формата %s и
других форматов вам неизвестен, обратитесь к $$10.6. Используйте stdarg.h.
#include <iostream>
template<typename... Arg>
auto say_hello(std::ostream& os, Arg... args)
{
((os << args << "\n") , ...);
}
int main(int argc, char* argv[])
{
say_hello(std::cout, "Name", "Name1", "Name2");
std::cin.get();
}
Написал такую функцию:void privet(char* name ...) { char** ptr = &name; va_list ap; va_start(ap,name); int i = 0; for (;;) { char* p = va_arg(ap,char*); if (p == 0) break; cout << ptr[i] << " " << i << endl; i++; } va_end(ap); }
p = va_arg(ap,char*)
, то и используй p
, который получил, а не ptr
.При ее вызове с тремя аргументами privet("Nagib", "Habib", "Gena")