Impresión presente directorio de trabajo en C usando punteros
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
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
.