gpt4 book ai didi

c - 免费使用问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:16 25 4
gpt4 key购买 nike

这段代码有问题:

int main(int argc, **argv)
{
...
char *dirlog
...
dirlog = malloc(sizeof(getenv("LOG")+strlen("/logfile.log")));
dirlog = strcat(getenv("LOG"),"/logfile.log");
o = strlen(dirlog);
...
free(dirlog);
}

代码编译但运行时,程序返回段错误。我尝试使用 coredump 文件进行调试,但回溯仅显示:

#0  0x00007fb7f7e7e3ac in free () from /lib64/libc.so.6
#1 0x0000000000507739 in main (argc=<optimized out>, argv=<optimized out>) at testprogram.c:460

有什么线索吗?

最佳答案

你必须使用 strlen 来计算两个字符串的长度,而不是 sizeof(它只适用于文字,但无论如何都要避免),但要注意:LOG环境。变量可能丢失,因此在执行此操作之前针对 NULL 进行测试。

我的提议使用sprintf,它避免了对strcatstrcpy 的大量调用,并允许插入固定大小的文字,例如/

所以一个相当安全的方法是:

const char *logroot = getenv("LOG");
if (logroot!=NULL)
{
const char *logfile = "logfile.log";
int len = strlen(logroot)+strlen(logfile)+2; // predict the size of the resulting string
char *dirlog = malloc(len);
sprintf(dirlog,"%s/%s",logroot,logfile);
...
free(dirlog);
}

(我为 null 终止符添加了 1 个,为斜线添加了 1 个,只有在执行 sprintf 时我才会包含)

关于c - 免费使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136390/

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