我的函数收到2个变量:
char* str
和int cap
。
str
变量是一个空数组的字符,我正在尝试初始化一种名为NEW的新字符串,s.t NEW:
- 与常规字符串一样,字符数组的前缀在第一个' \ 0'之前。 character定义字符串。
- 该字符串后跟一个非空的序列' \ 0'字符,后跟字符' \ 1',表示NEW的结束。
我是否需要为NEW的初始化动态分配内存? 如果没有,使用这个指针的正确语法是什么?
答案 0 :(得分:1)
如果你没有分配内存,那么是的,你必须自己动态分配它。
基本上,如果你的函数收到一个char *我会假设已经分配的内存并将它传递给你进行初始化,在这种情况下,我会这样做:
initialize_NEW(char *str, int cap)
{
memset(str, 0, cap);
str[cap-1] = '\1';
...
}
假设cap是传递的char数组的长度。
如果您应该初始化内存,我会认为该函数应该类似于:
initialize_NEW(char **str, int cap)
{
*str = malloc(cap);
if (!(*str)) { /* Malloc error handling here */
memset(str, 0, cap);
(*str)[cap-1] = '\1';
...
}
理想情况下,你想从你调用它的同一个函数释放内存 - 但是在你给你一个内存来初始化的情况下,我就是这样做的。
答案 1 :(得分:0)
我是否需要为NEW的初始化动态分配内存?
由于您收到指向char
s数组的指针作为参数,因此您无需进行任何分配。
由于结果必须在"有效载荷"之后用零填充。字符串的一部分,我建议使用strncpy
填充"尾部"零的字符串。在此之后您需要做的就是将'\1'
设置为最后一个字节。