gpt4 book ai didi

memcpy() 上的 c 段错误

转载 作者:行者123 更新时间:2023-11-30 20:10:15 24 4
gpt4 key购买 nike

我有一个包含两个字符数组的结构。数组之一 output_filename[]使用文件名初始化,例如 testdata.dat 。另一个数组未初始化。

typedef struct _prv_instance_
{
char output_filename[256];
char output_filename_serial_log[256];

} prv_instance_t;

在一个函数中,我创建了一个指向该结构的指针。然后我想初始化output_filename_serial_log[]使用output_filename[] 。所以它的值将是 testdata_serial_log.txt即删除 .dat并附加_serial_log.txt

但是,我在 memcpy 上遇到了段错误?有人知道为什么吗?

prv_instance_t * targetP; /*create pointer*/
targetP = (prv_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); /*assign struct to pointer*/

/*Create a filename to store the serial output*/
char filename_ending[] = "_serial_log.txt";
printf("output_filename is %s\n", targetP->output_filename);
printf("The length of output_filename is %d\n",strlen(targetP->output_filename));
printf("Number of bytes to be copied is %d\n",strlen(targetP->output_filename));


memcpy(targetP->output_filename_serial_log, targetP->output_filename, (strlen(targetP->output_filename)-4)); /*copy in string minus .dat*/
strcat(targetP->output_filename_serial_log, filename_ending); /*add on the ending*/
printf("The serial filename is %s\n",targetP->output_filename_serial_log);

最佳答案

memcpy(dest, src, strlen(src) - 4);

不会给你一个C风格的字符串,因为你没有以空值终止它。例如,如果内存中的字符串为 xyzzy.txt\0,则 dest 最终将仅是 xyzzy 后跟任意数据。

如果您随后尝试strcatdest,那么所有的赌注都会被取消,因为您正在调用未定义的行为。

如果你这样做会更好:

strcpy(dest, src);
dest[strlen(dest) - 4] = '\0';
stcat(dest, "something");

(假设您可以保证您的字符串至少有四个字符长)。

关于memcpy() 上的 c 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850979/

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