0

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;
}
4

2 に答える 2

2

ステートメント%sで指定された形式を使用するため、バッファー内の実際のデータを出力します。printfこれは、受け取ったポインター(この場合は最初の指定子) が NULL で終わる文字列へprintfのポインターであると想定するように指示するため、文字列を出力します。buffer

アドレスを出力したい場合は、%pフォーマット指定子を使用します

readF関数がメモリアドレスを返していると言うのは正しいです。バッファの最初のバイトのメモリアドレス、つまり割り当てたバッファへのポインタを返します。

注:関数の最後に、あなたも本当にそうすべきですfree(buffer):)

于 2013-11-06T17:56:39.037 に答える