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.

Cpp crear cadena sin inicialización.

Quiero leer el contenido de un archivo en una cadena.

string contents(size, '\0'); -> size fue determinado anteriormente usando file.seekg y file.tellg.
file.read((char*) contents.data(), size);

Ahora, sé que el contenido de la cadena será sobrescrito en file.read, por lo que no es necesario inicializar la cadena con caracteres nulos.

¿Hay alguna forma de hacerlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, existe una forma de hacerlo. En lugar de utilizar el constructor de la clase de cadenas para inicializar la cadena con caracteres nulos, puedes utilizar el algoritmo std::fill para llenar la cadena con caracteres nulos antes de leer el contenido del archivo en la cadena.

    Aquí tienes un ejemplo de cómo puedes usar std::fill:

    #include <algorithm>
    #include <fstream>
    #include <string>
    
    int main() {
    
        std::ifstream file("nombre_archivo.txt");
        if (!file.is_open()) {
            // manejar el error
        }
    
        file.seekg(0, std::ios::end);
        std::size_t size = file.tellg();
        file.seekg(0);
    
        std::string contents(size, '\0');
        std::fill(contents.begin(), contents.end(), '\0');
    
        file.read(contents.data(), size);
    
        // utilizar la cadena contents
    
        return 0;
    }
    

    En este ejemplo, std::fill se utiliza para llenar toda la cadena contents con caracteres nulos antes de leer el contenido del archivo en la cadena. Esto asegura que la cadena se inicialice correctamente con caracteres nulos y que no hayan caracteres residuales de operaciones anteriores.

Comments are closed.