我需要关于sprintf的建议并转义null

时间:2018-02-11 15:13:55

标签: c printf malloc free

我正在学习使用malloc()sprintf()printf()操纵字符串。

但我不知道在%s格式说明符之后添加null是否正确......

sprintf(handling, "%s\0", source);

因为我不确定sprintf()是否已在sprintf()功能代码中包含了escape null,还是我必须自己添加?

char * source = "Hello\n";
char * handling = (char *) malloc(sizeof(source)+1);

sprintf(handling, "%s\0", source);
printf("%s", handling);

free(handling);

我已经使用GCC编译了这段代码,没有错误。

代码已更新。

char source[] = "Hello\n";
char * handling = (char *) malloc(strlen(source)+1);

if(handling == NULL)
{
 printf("Malloc Failed");
}

sprintf(handling, "%s", source);    
printf("%s\n", handling);

free(handling);

更好?或者请给我一些例子。

1 个答案:

答案 0 :(得分:2)

  

因为我不确定sprintf是否已经在sprintf函数代码中包含了escape null,或者我必须自己添加它?

您不必自己添加abc[\\w\\W][@][\\w]\\.com[^.]。这已由\0

处理

您的第一个代码示例有一个错误:

sprintf

指针的大小可以是8(64位机器)或4(32位机器)。在第一种情况下,您的程序将工作,但在第二种情况下,您没有保留足够的内存。在任何情况下 - 获取指针的大小不是你想要的,所以你的第一个代码示例是错误的。

你的第二个例子好多了。没有错误。

但请注意

char * source = "Hello\n";
char * handling = (char *) malloc(sizeof(source)+1);
                                         ^^^^^^
                                         This is a pointer so you'll get the
                                         size of the pointer instead of the
                                         length of the string

也可能是

char source[] = "Hello\n";
char * handling = (char *) malloc(strlen(source)+1);

因为char source[] = "Hello\n"; char * handling = (char *) malloc(sizeof(source)); 现在是一个数组,因此source将返回数组的大小(已包含sizeof终止)。