2012-02-23 2 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

Не знаю. Какую часть вы не понимаете? –

+0

@OliCharlesworth: Он не понимает, почему печатается не то, что он «ожидает»: «Указатель ответа: (nil), ожидается: 0x7fffde9aec80 Ответ сам по себе: (null), ожидается: Yadda' – ArjunShankar

ответ

2

в функции get_response вы храните адрес request во временной переменной response. Вы хотите сохранить его там, где responseбаллов to.

*response = request; 
+0

+1 для объяснения того, что ОП является «недоразумением». т. е. изменение значения аргумента вместо изменения местоположения, на которое указывает аргумент. – ArjunShankar

0

Попробуйте *response = request: вы хотите установить содержимое указателя ответа на содержание запроса.

0

Вы хотите *response = request; вместо response = &request; в get_response(...)

0

Во-первых, с currect декларации и вашего использования get_response параметр response объявлен char**, что указатель на char*, например, указатель на указатель. Это было бы полезно, если вам как-то понадобилось изменить указатель, фактически указывающий на память, содержащую ваш response, но в этом случае это не нужно.

Смежные вопросы