使用给定指针

时间:2015-12-18 12:46:31

标签: c pointers dynamic-memory-allocation

我的函数收到2个变量: char* strint cap

str变量是一个空数组的字符,我正在尝试初始化一种名为NEW的新字符串,s.t NEW:

  
      
  • 与常规字符串一样,字符数组的前缀在第一个' \ 0'之前。 character定义字符串。
  •   
  • 该字符串后跟一个非空的序列' \ 0'字符,后跟字符' \ 1',表示NEW的结束。
  •   

我是否需要为NEW的初始化动态分配内存? 如果没有,使用这个指针的正确语法是什么?

2 个答案:

答案 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'设置为最后一个字节。