我正在尝试在 C++ 的 Linux(Ubuntu) 中使用命令行参数。但它会生成运行时错误:段错误。此程序在 Windows 中运行时没有错误。这是我的代码
#include<iostream>
using namespace std;
int main(int argc , char **argv){
char **ss;
for(int i=0;i<argc;i++){
ss[i] = argv[i];
}
for(int i=0;i<argc ;i++)
cout<<ss[i];
return 0;
}
这段代码有什么问题。请帮我 。提前致谢。
最佳答案
你的程序有未定义的行为,因为你没有初始化指针 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;
}
关于c++ - C++段错误中的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932820/