2012-02-23 150 views
4

我對傳遞指向char數組的指針有什麼誤解?將指向C數組的指針傳遞給函數

 
Request pointer in fun: 0x7fffde9aec80 
Response pointer in fun: 0x7fffde9aec80 
Response pointer: (nil), expected: 0x7fffde9aec80 
Response itself: (null), expected: Yadda 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int get_response(char *request, char **response) { 
    response = &request; 
    printf("Request pointer in fun: %p\n", request); 
    printf("Response pointer in fun: %p\n", *response); 
    return 0; 
} 

int main() { 
    char *response = NULL, request[] = "Yadda"; 

    get_response(request, &response); 

    printf("Response pointer: %p, expected: %p\n", response, request); 
    printf("Response itself: %s, expected: %s\n", response, request); 

    return 0; 
} 
+3

我不知道。你不明白哪一部分? – 2012-02-23 14:12:38

+0

@OliCharlesworth:他不明白爲什麼打印的內容與他期望的內容不匹配: '響應指針:(無),預期:0x7fffde9aec80 響應本身:(null),預計:Yadda' – ArjunShankar 2012-02-23 14:18:51

回答

2

在功能get_response你的request地址存儲在臨時變量response。你想把它存在哪裏response到。

*response = request; 
+0

+1用於解釋OP是什麼「誤解」。即改變參數的值而不是改變參數指向的位置。 – ArjunShankar 2012-02-23 14:16:58

0

嘗試*response = request:要響應指針的內容設置爲請求的內容。

0

你想*response = request;而不是response = &request;get_response(...)

0

首先,與當期的聲明和您的get_response用法,參數response被聲明爲char**,這是一個指向char*,例如一個指向指針的指針。如果您不知何故需要修改實際指向包含您的response的內存的指針,這將非常有用,但在這種情況下,這不是必需的。