C memset - 优雅地添加一个null终止符

时间:2018-02-10 14:26:12

标签: c malloc memset

在使用C memset api时,我跟着How to memset char array with null terminating character?添加了一个空终结符。

代码有效;由于null终止符,我不再在malloc&#39d char数组的末尾添加奇怪的内存中的字符。

/* memset does not add a null terminator */
static void yd_vanilla_stars(size_t *number_of_chars, char *chars_to_pad)
{
    memset(chars_to_pad, 0, *number_of_chars+1);
    memset(chars_to_pad,'*',*number_of_chars);
}

是否有一种更优雅的方法来实现同样的目标?

2 个答案:

答案 0 :(得分:7)

你可以这样做:

memset(chars_to_pad, '*', *number_of_chars);
chars_to_pad[*number_of_chars] = '\0';

另外,为什么number_of_chars是指针?

答案 1 :(得分:2)

问题表明chars_to_pad指向使用malloc()分配的内存。另一种方法是使用calloc()代替。此函数自动对已分配的内存进行零初始化,因此无需在单独的步骤中将分配归零。

示例可能如下所示:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    size_t arr_sz = 11;
    char *arr = calloc(arr_sz, sizeof *arr);
    memset(arr, '*', arr_sz - 1);

    puts(arr);

    return 0;
}

节目输出:

**********