2015-07-03 85 views
-3

我很不熟悉指針的工作方式。我正在使用一個以void *上下文作爲參數回調函數的函數。將一個字符串數組賦給一個空指針

我將如何去分配一個字符串數組到void *,然後檢索它們?

char callback_value[2][16]; 
snprintf(callback_value[0], sizeof(callback_value[0]), "string1"); 
snprintf(callback_value[1], sizeof(callback_value[1]), "string2"); 

// pass an array of strings into the void * callback context 
void *callback_context = callback_value; 


// Illustration only, doesn't work 

// retrieve it here 
char **retrieved_strings = (char **)callback_context; 


printf("%s", retrieved_strings[0]); // Want "string1" 
printf("%s", retrieved_strings[1]); // Want "string2" 

回答

1
#include <stdio.h> 
void func(void* arg) 
{ 
    char (*tmp)[16] = arg; 
    printf("%s\n%s\n", tmp[0], tmp[1]); 
} 
int main(void) 
{ 
    char callback_value[2][16] = {"string1", "string2"}; 
    void *callback_context = callback_value; 
    func(callback_context); 
    return 0; 
} 

char**是不兼容char[2][16],你必須使用字符指針char (*)[16]的數組。

https://ideone.com/BqgeN6

+0

所以,你真正想說的是無效的'的RHS * callback_context'不是'字符**'但'字符(*)[16]',這就是爲什麼轉換'char **'的'void *'不起作用 - 因爲'char **'與'char(*)[16]'不是同一類型? –

+0

謝謝!如果最初的'callback_value'被初始化爲'char * callback_value [2]',我希望在函數中傳遞並訪問這個指針,那麼怎麼辦? – gauge

+0

@gauge你可以在這種情況下使用'char **':https://ideone.com/FmRRf9 – mch

相關問題