c++ - C++段错误中的命令行参数

标签 c++ linux unix command-line command-line-arguments

我正在尝试在 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/

相关文章:

c++ - std::initializer_list 中的 std::shared_ptr 似乎被过早销毁

c++ - Makefile——高效编译

linux - bash 脚本中的 source/etc/profile

C 在多线程程序中在哪里定义互斥体?

c++ - 如何读取尚未刷新的进程输出?

c++ - 当您移动到非右值引用时会发生什么?

linux - Apache 服务器 2.4.7

linux - linux中ps和ps -e命令有​​什么区别

c - 信号处理函数前 3 次捕获 SIGKILL

c - 指定文件描述符编号?