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
.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top