J'ai la fonction suivante qui effectue initialement une validation sur les paramètres de la fonction.C++ const char * à char *
char *doSomething(const char* first, const char* second) {
if((first == nullptr || *first == '\0') && (second == nullptr || *second == '\0')) {
return nullptr;
} else if (first == nullptr || *first == '\0') {
return (char *) second;
} else if (second == nullptr || *second == '\0') {
return (char *) first;
}
//doSomething
}
Est-ce que la coulée du paramètre de fonction retourne une nouvelle char*
qui pointe vers une autre zone en mémoire? Je ne veux pas permettre à quelqu'un utilisant cette fonction de manipuler la valeur que les paramètres constants pointent vers. Je voudrais qu'un nouveau char*
soit retourné avec la même valeur que l'un des paramètres si l'un est nullptr
ou vide.
Suivi: Une variable booléenne serait-elle meilleure ici? Je réalise que j'effectue la même vérification pour chaque variable deux fois, mais je n'utiliserais pas ce booléen ailleurs dans le code de cette fonction.
Et puis, j'appelle 'doSomething (" bonjour "," monde! ") [0] = 'X';' et boom! SIGSEGV. (la réponse est non, vous devrez 'strncpy()' ces chaînes – YSC
Si vous ne voulez pas permettre à quelqu'un utilisant cette fonction de manipuler la valeur que les paramètres constants pointent retourner par 'const char *' ou return _by value_.La fonction effectue une conversion implicite 'const_cast' – Ziezi
Voulez-vous dire que vous voulez retourner une copie mutable de la chaîne? Sinon, pourquoi ne pas simplement retourner un' const char * '? – rici