Comment modifier les options de commande pour avoir "adresse" comme variable ?

la programmation


J’ai besoin d’avoir l’option “addr” comme variable.
Tel qu’il est utilisé maintenant, c’est un symbole… n’est-ce pas ?

Quelle est la syntaxe appropriée ?

..tel que défini / utilisé ici

char addr[19] = { 0 };

ba2str(&(ii+i)->bdaddr, addr);
<pre lang="text">
<pre>QP->start("/bin/sh", { "-c", "echo q  | sudo -S hcitool info addr" });

Ce que j’ai essayé :

>QP->start("/bin/sh", { "-c", "echo q  | sudo -S hcitool info " + _ " addr" })

Solution 1

QP->start("/bin/sh", { "-c", "echo q  | sudo -S hcitool info " + _ " addr" })

Je ne suis pas sûr de ce que fait le trait de soulignement là-dedans. Peut-être une faute de frappe ?

Pourquoi diable penserais-tu que addr à l’intérieur d’une chaîne entre guillemets ferait référence à une variable de programme ? Si tu avais une variable info ou echo dans votre programme, vous attendriez-vous à ce que les valeurs de ceux-ci soient également remplacées dans la chaîne ????

En supposant que la sémantique std::string pour les arguments est pour QP->start, alors vous devriez pouvoir utiliser

C++
QP->start("/bin/sh", { "-c", "echo q  | sudo -S hcitool info " + addr });

Si vos arguments sont des chaînes terminées par NUL de style C, vous disposez d’options :

C++
// using std::string
std::string cmdstr{"echo q  | sudo -S hcitool info ");
cmdstr.append(addr);
QP->start("/bin/sh", { "-c", cmdstr.c_str() };

//using sprintf
#include <cstdio>
char cmdstr[256]; // something big enough to not overflow
sprintf(cmdstr, "echo q  | sudo -S hcitool info %s", addr);
QP->start("/bin/sh", { "-c", cmdstr};

//using strcat
#include <cstring>
char cmdstr[256]{"echo q  | sudo -S hcitool info "};
strcat(cmdstr, addr);
QP->start("/bin/sh", { "-c", cmdstr};

//using a string-stream
#include <sstream>
std::stringstream command{"echo q  | sudo -S hcitool info "};
comand << addr;
QP->start("/bin/sh", { "-c", command.str().c_str() };

Il y en a probablement d’autres aussi. Je suis sûr que QString et ses amis proposent des fonctionnalités similaires.

コメント

タイトルとURLをコピーしました