C 警告 : Function returns address of local variable

标签 c pointers malloc

下面的函数采用包含应用程序调用路径的 argv[0] 参数,并替换最后一位,直到它遇到一个“/”,其中包含我要生成的位于同一文件夹中的新应用程序的名称.

顺便说一句:我正在声明一个全局 argv 变量,这样函数就可以访问它,因为我不想在每个函数调用中传递信息。

当我编译我的代码时,似乎一切正常,但我收到上述警告。

我知道我正在声明变量,一旦函数返回,它就会被销毁。

作为一名初学者 C 程序员,我想知道解决这个问题的最优雅/最简单的方法是什么?

我应该传递一个指向函数的指针还是 malloc 一些内存?

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

最佳答案

其他一些答案建议您 malloc 一些东西并返回它。这与在 C++ 中的意义相同,这是一种不好的做法,当您在函数中新建某些内容并且调用者应该将其删除(谁拥有所有权?)

许多 C API 具有以下格式是有原因的:

function(buf, length);

这意味着 CALLER 提供缓冲区及其长度。分配和取消分配此缓冲区是调用者的责任,您的函数应该使用它,并检查您是否不会溢出长度。

不要 malloc 和 return。这只是自找麻烦。

关于C 警告 : Function returns address of local variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897914/

相关文章:

在 C 中使用索引大于 50 的数组时进行核心转储

c - 如果数组的名称是指向其第一个元素的指针,为什么这段代码不起作用? (打印出二维数组元素)

C - realloc 不反射(reflect)回 main

c - 如何不断检查计算出的数字是否为整数?

c - 如何在 C 语言中使用 SSE 内在函数计算单 vector 点积

c++ - 是否有用于通过 pop 阅读电子邮件的 C 或 C++ 可嵌入库?

c++ - 是否可以引用随机类?

指向对象的 C++ 指针

c - 高效内存重新分配问题

c - 了解 malloc 和 calloc 的用途