argument de ligne de commande dans une erreur de segmentation c ++

J’essaie d’utiliser l’argument de ligne de commande sous Linux (Ubuntu) en c ++. mais il génère une erreur d’exécution: erreur de segmentation. Ce programme s’exécute sans erreur dans windows. Il y a mon code

#include 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; } 

ce qui ne va pas avec ce code. Aidez-moi, s’il vous plaît . Merci d’avance.

Votre programme a un comportement indéfini car vous n’avez pas initialisé le pointeur ss et alloué de la mémoire là où vous allez copier des éléments pointés par argv

 char **ss; // What value does it have? for(int i=0;i 

Vous pouvez faire comme suit

 char **ss = new char *[argc]; for(int i=0;i 

Le meilleur moyen est d'utiliser std::vector . Dans ce cas, vous pouvez également copier non seulement des pointeurs vers des arguments, mais aussi les arguments. Par exemple

 #include #include  #include  int main(int argc , char **argv) { std::vector v( argv, argv + argc ); for ( const std::ssortingng &s : v ) std::cout << s << std::endl; return 0; } 

Si votre compilateur ne prend pas en charge la plage basée sur une déclaration, vous pouvez la remplacer par

  for ( std::vector::size_type i = 0; i < v.size(); i++ ) { std::cout << v[i] << std::endl; } 

Comme déjà répondu, vous n’avez pas alloué de mémoire pour ss . Comme vous utilisez c ++ et non c, vous devriez avoir la bibliothèque standard c ++ à votre disposition:

 std::vector ss; ss.reserve(argc); // not necessary for(int i=0;i 

Utilisez la déclaration suivante pour ss

 #include using namespace std; int main(int argc , char **argv){ char *ss[argc]; // <--allocate argc count of pointers for(int i=0;i