0

我想知道为什么当我调用 readF() 并让它返回缓冲区指针并在 main() 中打印缓冲区时,它会打印实际数据而不是内存地址?我返回的地址而不是实际数据是否正确?在我的 main 中,我有一个指向返回内容的指针,这正是 readF() 中的缓冲区指针所指向的内容。

char *readF(){

char *buffer=NULL;

//allocate memory to contain the string plus null terminator
buffer=malloc((sizeof(char)*4)+1);
//fill memory with string Hello plus terminator

return buffer;
}

int main(int argc, char **argv){
char *buffer;
buffer=readF();
printf("%s", buffer);

return 0;
}
4

2 回答 2

2

您在缓冲区中打印实际数据,因为您使用语句中%s指定的格式。printf这告诉printf假设它接收到的指针(buffer在这种情况下对于第一个说明符)是指向以 NULL 结尾的字符串的指针,因此它会打印该字符串。

如果要打印地址,请使用%p格式说明符

当您说该readF函数正在返回内存地址时,您是正确的。它返回缓冲区第一个字节的内存地址,即指向您分配的缓冲区的指针。

注意:在您的功能结束时,您也应该这样做free(buffer):)

于 2013-11-06T17:56:39.037 回答
1

要打印您需要%p说明符的地址。
改变

printf("%s", buffer);  

printf("%p", (void *)buffer);
于 2013-11-06T17:57:32.217 回答