sprintf在哪里存储其输出?

时间:2014-08-17 11:10:51

标签: c printf

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

在C中,函数的参数按值传递。也就是说,函数不能改变其参数的值。这段代码

sprintf(store, /* whatever */);

无法更改指针store的值,因此无法指向其他位置。

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

int asprintf(char **strp, const char *fmt, ...);

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

供参考,以下是sprintf的声明:

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

答案 2 :(得分:1)

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