gpt4 book ai didi

c - 将字符串设置为一个值并稍后使用它

转载 作者:行者123 更新时间:2023-11-30 20:55:06 27 4
gpt4 key购买 nike

char * programName = tokens_get_token(tokens, 0);

if (access(programName, F_OK) != 0){
/*name not okay, set programName to correct path-name*/
char * fullpath = getenv("PATH");
/*/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:*/
for (char * p = strtok(fullpath, ":"); p!= NULL; p = strtok(NULL, ":")){
char * concatPath = malloc(strlen(programName) +strlen(p) + 2);
strcpy(concatPath, p);
strcat(concatPath, "/");
strcat(concatPath, programName);
printf("%s\n", concatPath);
bool toBreak = false;
if (access(concatPath, F_OK) == 0){
/*can a string be reset like this? */
programName = concatPath;


HERE



toBreak = true;
}
free(concatPath);
if (toBreak){
break;
}
}
}
printf("%s%s\n", programName, "is programName");
execv(programName, listOfArgs);

当我在这里打印programName时,它确实是concatPath。但是,当我实际上想在所附代码的最后一行使用它时,programName 变为空。请注意,ProgramName 是在第一行中定义的,位于 if 循环之外。

为什么会出现这种情况以及如何修复它

(我认为问题是我无法像那样重置字符串programName,但是当我在那里打印时,为什么programName成功设置为新值concatPath?此外,为什么programName忘记了它的值当我想在最后一行使用它时?)

最佳答案

原因:

在这里您将其指定为您刚刚分配的值:

 programName = concatPath; 

在这里您可以释放分配的值

 free(concatPath);

显然,从此时起programName将指向一 block 已释放的内存。

如何解决:

  1. 使用单独的变量
  2. 分配它以保持正确的长度
  3. strcpy 进入其中,因为指针赋值不会复制字符串。
  4. 使用它
  5. 免费。

关于c - 将字符串设置为一个值并稍后使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com