L'impression de Présenter le répertoire de travail en c à l'aide de pointeurs

StackOverflow https://stackoverflow.com//questions/9697056

  •  13-12-2019
  •  | 
  •  

Question

Objectif :Imprimer présent répertoire de travail en c sur la machine Linux.

Sans l'aide de pointeurs, c'est de donner de bons résultats..

#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;
}

Mais avec le pointeur, il montre d'erreur suivantes

getcwd() error : : Numerical result out of range
Était-ce utile?

La solution

Ceci est dû au fait que lorsque buf est un pointeur, sizeof(buf) est le nombre d'octets requis pour stocker un le pointeur , pas la taille de la matrice, comme dans le code que vous avez commenté.

Vous devez passer la taille que vous avez allouée (c'est-à-dire 1024), comme ceci:

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

Autres conseils

sizeof(buf) sera de retour de la taille de char* qui sera cependant beaucoup de bits de votre processeur (32 ou 64 bits).

Ce que vous voulez est d'utiliser le nombre magique vous malloc ed avec, dans ce cas 1024.

Essayez ceci:

#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);
Ici, vous donnez à la taille sizeof(buf) qui sera de retour de la taille de la buf pointeur qui va être dépend de la machine.
Vous devez spécifier 1024 dans l'argument de getcwd.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top