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