我想知道为什么当我调用readF()并让它返回缓冲区指针并在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;
}
答案 0 :(得分:2)
您在缓冲区内打印实际数据,因为您使用%s
语句中指定的printf
格式。这告诉printf
假定它接收的指针,在这种情况下,buffer
是第一个说明符,是一个指向以NULL结尾的字符串的指针,因此它打印字符串。
如果要打印地址,请使用%p
格式说明符
当你说readF
函数返回内存地址时,你是对的。它返回缓冲区第一个字节的内存地址,即指向您分配的缓冲区的指针。
注意:在你的功能结束时你真的应该free(buffer)
:)
答案 1 :(得分:1)
要打印您需要%p
说明符的地址
改变
printf("%s", buffer);
到
printf("%p", (void *)buffer);