J'ai un problème étrange avec la fonction realpath
. La fonction fonctionne quand on lui donne une chaîne reçue comme argument pour le programme, mais échoue quand on lui donne une chaîne que je définis dans le code source. Voici un programme simple:La fonction C realpath ne fonctionne pas pour les chaînes définies dans le fichier source
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
int main(int argc, const char* argv[])
{
char* fullpath = (char*)malloc(PATH_MAX);
if(realpath(argv[1], fullpath) == NULL)
{
printf("Failed\n");
}
else
{
printf("%s\n", fullpath);
}
}
Quand je lance cela avec un argument (file
existe et est un fichier normal) je reçois le résultat attendu
/home/<username>/Desktop/file
Voici une autre version du programme:
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
int main(int argc, const char* argv[])
{
const char* path = "~/Desktop/file";
char* fullpath = (char*)malloc(PATH_MAX);
if(realpath(path, fullpath) == NULL)
{
printf("Failed\n");
}
else
{
printf("%s\n", fullpath);
}
}
Quand je lance ce programme je reçois la sortie
Failed
Pourquoi le second échoue-t-il?
Sans rapport avec votre question, mais pourquoi allouez-vous 'fullpath' dynamiquement? Pourquoi pas un tableau? –
En ce qui concerne votre problème, avez-vous essayé d'imprimer 'argv [1]' pour voir ce que c'est? Et vérifier 'errno' quand l'appel échoue? Je vous suggère également de lire [la page de manuel 'realpath'] (http://man7.org/linux/man-pages/man3/realpath.3.html). –