C sprintf在哪里存储其输出?

C sprintf在哪里存储其输出?,c,printf,C,Printf,如果我有以下代码,那么sprintf中的句子存储在哪里 它是存储在malloc提供的100字节中还是存储在其他地方,并且存储指针现在指向新位置 char *store = malloc(100); int num = 77; sprintf(store, "the number was: %d", num); sprintf不单独分配内存-它只将输入存储在先前分配的缓冲区中。在您的情况下,这确实是您为malloc调用分配的缓冲区。它存储在malloc提供的100字节中。我同意这里的其他答案;

如果我有以下代码,那么
sprintf
中的句子存储在哪里

它是存储在malloc提供的100字节中还是存储在其他地方,并且
存储
指针现在指向新位置

char *store = malloc(100); 
int num = 77;
sprintf(store, "the number was: %d", num);

sprintf
不单独分配内存-它只将输入存储在先前分配的缓冲区中。在您的情况下,这确实是您为
malloc
调用分配的缓冲区。

它存储在
malloc
提供的100字节中。

我同意这里的其他答案;让我来介绍一下你如何自己发现类似问题的答案

在C语言中,函数的参数是按值传递的。也就是说,函数不能更改其参数的值。此代码

sprintf(store, /* whatever */);
无法更改指针
存储的值,因此它无法指向其他位置

如果函数必须更改指针的值,则必须接收指向指针的指针。恰好
sprintf
有这样一个变量,叫做(因为它确实分配+sprintf):

如您所见,它的第一个参数是指向指针的指针,因此它有能力将指针指向另一个位置

以下是sprintf的声明供参考:

int sprintf ( char * str, const char * format, ... );

“句子”是指sprintf的输出,它存储在malloc拥有的100字节中provided@EdwardClements是的,我指的是sprintf将写入存储的字符串。谢谢。请小心缓冲区溢出,或者使用
snprintf
而不是
sprintf
。它存储在您提供的存储上(如果合适的话)。c中的参数是按值传递的,因此它们不能被调用的函数更改。值得注意的是,
asprintf
是GNU扩展,而不是标准的c或POSIX函数。
int sprintf ( char * str, const char * format, ... );