繁体   English   中英

使用strcpy时出现分段错误?

[英]Segmentation fault when using strcpy?

我正在尝试通过传递定义路径:

-DDCROOTDEF='"/path/to/stuff"'

在编译行上。 然后,我尝试在代码中使用此代码,例如:

char * ptr_path;  
strcpy(ptr_path, DCROOTDEF);
strcat(ptr_path,"/MainCommons/CommonLib/fonts/Arial.ttf");
char *pftf=ptr_path;
gdImageStringFT(pimg,brect,iclr,pftf,pts,ang,ixp,iyp, (char *)cbuf);

这给了我一个分割错误。 但是,如果我尝试先打印字符串:

char * ptr_path;
strcpy(ptr_path, DCROOTDEF);
strcat(ptr_path,"/MainCommons/CommonLib/fonts/Arial.ttf");
char *pftf=ptr_path;
printf("%s\n",pftf);
gdImageStringFT(pimg,brect,iclr,pftf,pts,ang,ixp,iyp, (char *)cbuf);

它工作正常。 我在这里缺少char指针的什么复杂性?

谢谢

char * ptr_path;
strcpy(ptr_path, DCROOTDEF);

您永远不会初始化ptr_path

它在第二个代码段中不起作用,只是不幸,它似乎可以工作。 您仍在使用未初始化的指针,并尝试写入谁知道内存中的位置。

您需要初始化ptr_path指向长度至少为strlen(DCROOTDEF) + 1char数组。 您还需要在将DCROOTDEF的内容复制到数组中之前检查其长度,以确保其长度不太长。 您可以使用strlen手动进行操作,也可以使用长度检查的复制功能(如strlcpy

指针ptr_path未初始化为指向可写内存,这就是为什么使用strcpy()取消引用指针时会崩溃的原因。

您需要先调用例如malloc()来获取空间:

char * ptr_path = malloc(PATH_MAX);

或类似的东西。

char * ptr_path;
strcpy(ptr_path, DCROOTDEF);
strcat(ptr_path,"/MainCommons/CommonLib/fonts/Arial.ttf");

指针未绑定到合法分配的内存块,因此您的程序会遇到未定义的行为。 您需要首先分配一个缓冲区-例如通过使用malloc() 确保缓冲区足够大,可以将结果字符串和终止的空字符保存在一起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM