Pregunta

AIM: Imprimir el directorio de trabajo actual en C en la máquina de Linux.

Sin usar los punteros, está dando salida correcta ..

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
int main()
{
    //char buf[1024];

    char * buf;
    char * cwd;
    buf = (char *)malloc(sizeof(char) * 1024);

    if((cwd = getcwd(buf, sizeof(buf))) != NULL)
            printf("pwd : %s\n", cwd);
    else
            perror("getcwd() error : ");
    return 0;
}

pero con puntero que muestra el siguiente error

getcwd() error : : Numerical result out of range

¿Fue útil?

Solución

Esto se debe a que cuando buf es un puntero, sizeof(buf) es el número de bytes requeridos para almacenar un puntero , no el tamaño de la matriz, como en el código que comentó.

Debe pasar el tamaño que asignó (es decir, "1024) en su lugar, así:

size_t allocSize = sizeof(char) * 1024;
buf = (char *)malloc(allocSize);
if((cwd = getcwd(buf, allocSize)) != NULL) ...

Otros consejos

sizeof(buf) devolverá el tamaño del char*, que será, sin embargo, muchos bits ancho de su procesador es (32 bits o 64 bits).

Lo que quiere es usar el número mágico con el que está mallocado, en este caso 1024.

Intenta esto:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

int main()
{
    //char buf[1024];

    char * buf;
    char * cwd;
    buf = (char *)malloc(sizeof(char) * 1024);

    if((cwd = getcwd(buf, 1024)) != NULL)
            printf("pwd : %s\n", cwd);
    else
            perror("getcwd() error : ");
    return 0;
}

char *getcwd(char *buf, size_t size);
Aquí le está dando el tamaño como sizeof(buf), que devolverá el tamaño del puntero buf que será dependiente de la máquina.
Tienes que especificar 1024 en el argumento a getcwd.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top