C Avertissement: la Fonction renvoie l'adresse d'une variable locale

La fonction suivante prend la argv[0] argument qui contient l'appel de chemin d'accès de l'application et remplace le dernier bit jusqu'à ce qu'il rencontre un "/" avec le nom de la nouvelle application que je veux spawn qui se trouve dans le même dossier.

BTW: je suis déclarant mondiale argv variable de sorte que la fonction peut y avoir accès parce que je n'ai pas envie de passer l'info à chaque appel de fonction.

Quand je compile mon code, tout semble fonctionner, mais j'ai l'avertissement ci-dessus.

Je sais que je suis en déclarant la variable et que dès que la fonction retourne il sera détruit.

D'être un débutant programmeur en C, je voulais savoir quel est le plus élégant/façon la plus simple de résoudre ce problème serait?

Devrais-je passer un pointeur à la fonction ou à la fonction malloc de la mémoire?

char *returnFullPath()
{
    char pathToApp[strlen(argv[0])+1];
    strcpy(pathToApp, argv[0]);
    int path_length = strlen(argv[0]);

    while (pathToApp[path_length] != '/')
    {
        path_length--;
    }

    if (path_length > 2)
        pathToApp[path_length+1] = '
char *returnFullPath()
{
char pathToApp[strlen(argv[0])+1];
strcpy(pathToApp, argv[0]);
int path_length = strlen(argv[0]);
while (pathToApp[path_length] != '/')
{
path_length--;
}
if (path_length > 2)
pathToApp[path_length+1] = '\0';
else
pathToApp[0] = '\0';
//length of getcwd + length of pathtoapp + 1 for zero plus 6 for "bidbot"
char bidbotPath[strlen(getcwd(NULL,0)) + strlen(pathToApp) + 1 + 6];
sprintf(bidbotPath, "%s/%sbidbot", getcwd(NULL,0), pathToApp);
return bidbotPath;
}
'
; else pathToApp[0] = '
char *returnFullPath()
{
char pathToApp[strlen(argv[0])+1];
strcpy(pathToApp, argv[0]);
int path_length = strlen(argv[0]);
while (pathToApp[path_length] != '/')
{
path_length--;
}
if (path_length > 2)
pathToApp[path_length+1] = '\0';
else
pathToApp[0] = '\0';
//length of getcwd + length of pathtoapp + 1 for zero plus 6 for "bidbot"
char bidbotPath[strlen(getcwd(NULL,0)) + strlen(pathToApp) + 1 + 6];
sprintf(bidbotPath, "%s/%sbidbot", getcwd(NULL,0), pathToApp);
return bidbotPath;
}
'
; //length of getcwd + length of pathtoapp + 1 for zero plus 6 for "bidbot" char bidbotPath[strlen(getcwd(NULL,0)) + strlen(pathToApp) + 1 + 6]; sprintf(bidbotPath, "%s/%sbidbot", getcwd(NULL,0), pathToApp); return bidbotPath; }

OriginalL'auteur Frank Vilea | 2011-08-01