es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo almacenar dinámicamente un char* en un bucle de C++?

Me encuentro con un escenario en el que necesito registrar direcciones arbitrarias como char* en un programa. Para simplificar el problema, supongamos que después de separar las palabras de una oración, debo pasar cada palabra como char* a la biblioteca DLL para acciones posteriores.

Una forma estática de analizar “Hello World” sería así:

...</p>

<h1>incluye librería de terceros;</h1>

<p>char* w1 = "Hello".c<em>str();
char* w2 = "World".c</em>str();</p>

<p>función_de_terceros(w1);
función_de_terceros(w2);

Obviamente, el nombre de w1 y w2 es estático, lo que significa que tengo que escribir sus nombres manualmente. No es adecuado para pasar un número arbitrario de variables char* a la función de terceros.

Escuché que no es posible nombrar variables con comodines, como w_n, una forma alternativa de hacerlo sería usar un vector o una matriz de char*.

Se me ocurrió esto:
“`

<h1>incluye<iostream></h1>

<h1>incluye<vector></h1>

<h1>incluye<cstring></h1>

using namespace std;

int main()
{
char* w[100];
string a = "Hello";

a.copy(w[0], a.size(), 0);
cout << "w[0]: " << w[0] << endl;
//función_de_terceros(w[0]);

a = "World";
cout << "a después: " << a << endl;

a.copy(w<a href="https://stackoverflow.com/questions/70541155/how-to-assign-char-variables-dynamicly-in-c">1</a>, a.size(), 0);
cout << "w<a href="https://stackoverflow.com/questions/70541155/how-to-assign-char-variables-dynamicly-in-c">1</a>: " << w<a href="https://stackoverflow.com/questions/70541155/how-to-assign-char-variables-dynamicly-in-c">1</a> << endl;
//función_de_terceros(w<a href="https://stackoverflow.com/questions/70541155/how-to-assign-char-variables-dynamicly-in-c">1</a>);
}
“““““
Nótese que reutilicé la variable a ya que así sería en un bucle.
Sin embargo, la tercera salida no es lo que se supone que debe ser, y la salida impresa tiene solo dos líneas:

w[0]: Hello
a después: World

Por supuesto, estos son dos intentos fallidos. Pero ¿cómo pasar un número arbitrario de variables char* a una función de una biblioteca de terceros, de alguna manera?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Generando variables char* dinámicas en C++

    Para pasar un número arbitrario de variables char* a una función de terceros de manera dinámica, se puede utilizar un vector para almacenar las variables char*. Aquí hay un ejemplo:

    “`c++
    #include
    #include

    void third_party_function(char* s)
    {
    std::cout << s << ‘\n’;
    }

    int main()
    {
    std::vector<char*> words;
    words.push_back(“Hola”);
    words.push_back(“Mundo”);

    for (auto &w : words) {
        third_party_function(w);
    }
    

    }


    En este ejemplo, creamos un vector `char* words` para almacenar las variables `char*`. Luego, podemos agregar las variables `char*` según sea necesario en el vector. En el bucle, podemos llamar a la función `third_party_function` y pasar cada variable `char*` desde el vector. Ten en cuenta que las variables `char*` en este ejemplo son cadenas literales, las cuales tienen una duración de almacenamiento estática. Si necesitas generar variables `char*` de manera dinámica (es decir, asignar memoria para ellas), puedes utilizar el operador `new` para asignar memoria e inicializar la variable `char*`. Por ejemplo: ```c++ char* w = new char[6]; // asignar memoria para 6 caracteres std::strcpy(w, "Hola"); // copiar la cadena "Hola" en la memoria

    Asegúrate de liberar la memoria con delete[] cuando hayas terminado de usar la variable char*.</char*>

Comments are closed.