对C来说很新,我有一个对象
struct Object {
char *request;
};
我在函数中有指针
char *req = NULL;
char *request = NULL;
我最终需要将req复制到请求中,以便请求具有数据,但不会受到以后对req的更改的影响。
我相信我需要按照
的顺序if(!request){
request = malloc(sizeof(req));
memcpy(request, req, sizeof(*req));
}
稍后在函数中我将请求分配给对象的请求
Object->request = request;
目前,当我尝试打印对象的请求时,我得到了
THE REQUESTED FILE IS CALLED f▒F▒
对C来说很新,我不确定我哪里出错了,任何帮助都会非常感激。
答案 0 :(得分:3)
您没有分配足够的空间。假设req指向C字符串,您需要调用strlen来查看您需要多少空间:
if(!request){
request = malloc(strlen(req)+1);
strcpy(request, req);
}
注意添加一个长度,它可以容纳空终止符。
答案 1 :(得分:2)
你没有为整个字符串分配足够的空间。
在指针上使用sizeof
时,只能获得指针的大小,而不是指向它的数组的大小。
所以这个:
request = malloc(sizeof(req));
根据您的系统,仅为8或4个字节分配足够的空间。你需要在其他地方跟踪数组的大小,或者使用strlen()
,它遍历字符串直到找到NUL
字符(\0
),其中所有字符串都在C结尾用。
同样,sizeof(*req)
返回char
的大小,始终为1个字节。同样,你不能说明整个字符串的长度。
最好的解决方法是做这样的事情:
size_t len = strlen(req) + 1; /* leave space for '\0' character */
request = malloc(len); /* allocate memory */
memcpy(request, req, len); /* copy the string */
或者,如果你不介意两次获得字符串的长度:
request = malloc(strlen(req) + 1); /* leave space for '\0' character */
strcpy(request, req); /* use strcpy() instead of memcpy(), which gets the length itself */