程序具有不確定的行爲,因爲你沒有初始化指針ss
和分配內存你要去哪裏複製通過argv的元素指向
char **ss; // What value does it have?
for(int i=0;i<argc;i++){
ss[i] = argv[i];
你可以做下面的方式
char **ss = new char *[argc];
for(int i=0;i<argc;i++){
ss[i] = argv[i];
更好的方法是使用std::vector<std::string>
。在這種情況下,您不僅可以複製指向參數的指針,還可以複製參數。例如
#include<iostream>
#include <vector>
#include <string>
int main(int argc , char **argv)
{
std::vector<std::string> v(argv, argv + argc);
for (const std::string &s : v) std::cout << s << std::endl;
return 0;
}
如果你的編譯器不支持基於for語句的範圍內,那麼你可以用它替換
for (std::vector<std::string>::size_type i = 0; i < v.size(); i++)
{
std::cout << v[i] << std::endl;
}
請大家習慣用的所有警告和調試信息(即'G ++ -Wall編譯-g')並學習如何使用'gdb'調試器。 –