如果我有以下代码,那么sprintf
中的句子会被存储在哪里?
它是存储在malloc
提供的100个字节中还是存储在其他地方,而store
指针现在指向新位置?
char *store = malloc(100);
int num = 77;
sprintf(store, "the number was: %d", num);
答案 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个字节中。