[英]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) + 1
的char
数组。 您还需要在将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.