Stampa Directory di lavoro presente in c usando i puntatori
Domanda
Accordo: Stampa presente directory di lavoro in c su macchina Linux.
Senza usare puntatori, sta dando output corretto.
#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;
}
.
Ma con puntatore mostra il seguente errore
getcwd() error : : Numerical result out of range
. Soluzione
Questo perché quando buf
è un puntatore, sizeof(buf)
è il numero di byte necessari per memorizzare un puntatore , non la dimensione dell'array, come nel codice che hai commentato. È necessario passare la dimensione assegnata (cioè 1024), come questa:
size_t allocSize = sizeof(char) * 1024;
buf = (char *)malloc(allocSize);
if((cwd = getcwd(buf, allocSize)) != NULL) ...
. Altri suggerimenti
sizeof(buf)
restituirà la dimensione del char*
che sarà tuttavia molti bit larghi il tuo processore è (32 bit o 64 bit).
Quello che desideri è usare il numero magico con cui sei in malloct, in questo caso 1024.
Prova questo:
#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);
Qui stai dando le dimensioni come sizeof(buf)
che restituiranno le dimensioni del puntatore buf
che sarà dipendente dalla macchina.
È necessario specificare 1024 nell'argomento a getcwd
.