我正在尝试在 linux 机器上测试绝对路径以查找程序所在的位置,以便我可以使用我的特定参数运行它。问题是,当我找到它时,我会通过释放动态分配的内存来不断地将更多字符串添加到正确的路径以及内存泄漏。对堆栈转储的唯一修复是不释放(ret)。我相信基于 gdb,当我使用“ls”运行示例时,它会找到程序并运行它,但会给出奇怪的结果。
for(j = 0; j < i; j++, path = NULL)
{
token = strtok_r(path, delim, &saver);
if(token == NULL)
break;
else
{
strncat(ret, token, 80);
strncat(ret, "/", 1);
strncat(ret, command, 80);
args[0] = ret;
printf("%s\n", ret);
m = execv(ret, args);
printf("%d\n", m);
if(m < 0)
{
free(ret);
ret = malloc(120*sizeof(char));
}
else
break;
}
}
分隔符是冒号 (:) 的地方,我相信 strncat 是正确完成的。我不确定,但感谢您的帮助。