C memset - 优雅地添加一个空终止符
C memset - elegantly add a null terminator
我按照 How to memset char array with null terminating character? 在使用 C memset
api.
时添加了一个空终止符
代码有效;由于空终止符,我不再将奇怪的内存中字符添加到我的 malloc 字符数组的末尾。
/* 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);
}
是否有更优雅的方法来实现相同的目标?
您可以简单地这样做:
memset(chars_to_pad, '*', *number_of_chars);
chars_to_pad[*number_of_chars] = '[=10=]';
另外,为什么number_of_chars
是一个指针?
问题表明 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;
}
程序输出:
**********
我按照 How to memset char array with null terminating character? 在使用 C memset
api.
代码有效;由于空终止符,我不再将奇怪的内存中字符添加到我的 malloc 字符数组的末尾。
/* 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);
}
是否有更优雅的方法来实现相同的目标?
您可以简单地这样做:
memset(chars_to_pad, '*', *number_of_chars);
chars_to_pad[*number_of_chars] = '[=10=]';
另外,为什么number_of_chars
是一个指针?
问题表明 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;
}
程序输出:
**********