gpt4 book ai didi

c - 与 char *foo[] 的字符串连接

转载 作者:行者123 更新时间:2023-11-30 19:23:02 26 4
gpt4 key购买 nike

这是以下代码的输出,但我希望它是正确的路径。奇数索引(例如 pathsarray[1] = ls/ls )的输出有什么问题?

---/usr/lib/lightdm/lightdm/ls
---ls/ls
---/usr/local/bin/ls
---ls/ls
---/usr/bin/ls
---ls/ls
---/bin/ls
---ls/ls

char *pathsarray[MAXARGS];//path
char *path=getenv("PATH");
tokenizeEnvPaths(path);

int i;

for(i=0;i<MAXARGS;i++)
{
if(pathsarray[i] != NULL)
{
strcat(pathsarray[i],"/");
strcat(pathsarray[i],"ls");
fprintf(stderr,"---%s\n",pathsarray[i]);
}


}

最佳答案

看起来pathsarray中每个字符串的末尾都没有多余的空间,这意味着没有空间可用于将任何内容连接到它们的末尾。由于您不进行边界检查,您的 strcat 会占用超出字符串末尾的内存并损坏其他内存(包括同一数组中的其他字符串)。

pathsarray中的字符串是如何分配和赋值的?你不展示那部分。它们被malloced了吗?

如果您打算在创建字符串后追加 3 个字符,则需要确保为字符串分配的字节数至少比其初始内容需要的字节数多 3 个字节......否则您需要重新分配稍后当您想向字符串附加某些内容时,为字符串提供更大的缓冲区。

关于c - 与 char *foo[] 的字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780591/

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