我正在学习使用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);
更好?或者请给我一些例子。
答案 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
终止)。