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.

Definir cadenas utilizando punteros versus arreglos de caracteres en C

Estoy confundido acerca de cómo funcionan los punteros a caracteres. ¿Qué sucede cuando ejecuto el siguiente código?

int main()
{
    char* word;
    scanf("%s",word);
    printf("%s",word);
}

La primera línea de la función main define un puntero a char sin inicialización. ¿No es así que scanf debe almacenar la palabra en algún lugar y dar la dirección al puntero? ¿Y si ingreso una cadena grande, sobrescribirá algo en la memoria?

Además, ¿qué sucede en la primera línea del siguiente código además de definir un puntero a char? ¿El compilador establece algunos límites? ¿O no puedo exceder el tamaño especificado, verdad? Si lo hago, ¿tendré un error en tiempo de ejecución? ¿Cuál es la diferencia entre los dos casos?

int main()
{
    char word[100];
    scanf("%s",word);
    printf("%s",word);
}

¿Y qué pasa con los punteros a otros tipos? ¿Puedo seguir escribiendo en los siguientes lugares utilizando desplazamientos?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En el primer fragmento de código, el puntero word se define sin inicialización. Cuando se llama a scanf, almacenará la palabra ingresada por el usuario en la memoria y asignará la dirección de la palabra al puntero word. Si la cadena de entrada es más grande que la memoria asignada al puntero, causará un desbordamiento de búfer y sobrescribirá otros datos en la memoria.

    En el segundo fragmento de código, el arreglo word se define con un tamaño de 100. Cuando se llama a scanf, almacenará la palabra ingresada por el usuario en el arreglo word y no excederá el tamaño especificado. Si la cadena de entrada es más grande que el tamaño del arreglo, causará un error en tiempo de ejecución.

    Se pueden utilizar punteros a otros tipos para acceder a ubicaciones de memoria. Sin embargo, es importante asegurarse de que las ubicaciones de memoria sean válidas y que no se sobrescriba los datos.

Comments are closed.