gpt4 book ai didi

C 中的连接 char* 无法解决段错误

转载 作者:行者123 更新时间:2023-11-30 19:44:47 27 4
gpt4 key购买 nike

我正在尝试创建两个路径,以便将文件从一个文件夹复制到另一个文件夹。我第二次尝试连接 args[1] 时遇到段错误。尝试使用 strcpy 将单元格复制到另一个字符,但没有帮助。还有很多我没有成功的事情。我猜这些字符串命令的某些内容弄乱了我的 char 数组,并且不允许我进行两次连接。路径应采用以下形式“服务器/文件#”或“客户端#/文件#”# 是来自 args 的参数。我环顾四周,看到了一些类似的东西,但又不完全是这样。请帮忙。

所有需要的“包含”都在那里。

void copy_file(char *args[]){
char dst_path[100],src_path[100];

memset(dst_path,0,100);
memset(src_path,0,100);

strcpy(dst_path,"Client");
strcat(dst_path,args[0]);
strcat(dst_path,"/File");
strcat(dst_path,args[1]);

strcpy(src_path,"Server/File");
strcat(src_path,args[1]);
}

最佳答案

此代码应该存在段错误,因为没有边界检查,并且您可以轻松溢出目标缓冲区。

此外,您不检查 args[] 中的元素数量大批。参数可能比您预期的要少,可能是 args[1]NULL .

<小时/>

修复:

  1. 检查 args[] 中的元素数量数组。

  2. 计算最终字符串所需的缓冲区大小,分配该大小的缓冲区,然后格式化字符串。或者,使用snprintf在一次调用中格式化字符串。 snprintf为您进行绑定(bind)检查,以便您不会溢出目标缓冲区,例如:

    char dst_path[16384];
    int n = snprintf(dst_path, sizeof dst_path, "Client %s /File %s", args[0], args[1]);
    if(n >= sizeof dst_path)
    // dst_path is not large enough

关于C 中的连接 char* 无法解决段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27358552/

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