下面的函数采用argv [0]参数,该参数包含应用程序的调用路径,并替换最后一位,直到它使用我想要生成的新应用程序的名称命名为"/",该应用程序位于同一文件夹中.
BTW:我正在声明一个全局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;
}
Run Code Online (Sandbox Code Playgroud)
Moo*_*ice 47
其他一些答案表明你可以使用malloc并返回它.这与C++中的错误做法一样,当你在函数中新建一个东西并且调用者应该删除它(谁拥有所有权?)时
有许多C API的格式为:
function(buf, length);
Run Code Online (Sandbox Code Playgroud)
这意味着CALLER提供缓冲区以及它的持续时间.调用者负责分配和取消分配此缓冲区,并且您的函数应该使用它,并检查您是否不会超出该长度.
不要malloc并返回.这只是在寻找麻烦.