2013-10-10 169 views
0

我有工作了下面的代碼罰款:轉換的char *爲char&

//function1 for decoding base64 
int base64_decode (const char *base64, char *to) { /*function*/ } 

//code which is working 
buf_struct tmpbuf;//structure 
base64_decode(buffer, (char *)&tmpbuf); 

,我想將其轉換爲避免額外的功能,做同樣的事情,到:

//function2 for decoding base64 
char *unbase64(unsigned char *input, int length) { /*function*/ } 

//code needs to be modified 
buf_struct tmpbuf;//structure 
char *unbase = unbase64(buffer, strlen(buffer)); 
unbase = (char *)&tmpbuf; 

但第二個不起作用。

* 如何將「char *」轉換爲「(char )&」?

編輯:

char *unbase; 
unbase = malloc(strlen(buffer) + 1); 
memset(unbase, 0, strlen(buffer) + 1); 
//unbase = unbase64(buffer, strlen(buffer)); 
base64_decode(buffer, unbase); 
fprintf(stderr,"unbase: %s\n",unbase); 
strcpy((char *)&tmpbuf, unbase); 
+0

在你這是從'tmpbuf'期待第二種情況?你在函數'unbase64'中做什麼? 'unbase'是通過返回'unbase64'來分配的,那麼你在下一行再次分配什麼? –

+0

我認爲你想這樣做:'tmpbuf-> .. = unbase;'。在第一個例子中,你可能不應該把'tmpbuf'強制轉換爲'char *',而是使用'struct'的成員,它的定義是什麼? – Kninnug

回答

1

您需要將數據複製到緩衝區。

//code needs to be modified 
buf_struct tmpbuf;//structure 
char *unbase = unbase64(buffer, strlen(buffer)); 
strcpy((char *)&tmpbuf, unbase); 

// Depending on the contract for unbase64 you may need to free() unbase here. 
+0

我編輯我的帖子與修改後的代碼,但仍然無法正常工作。我想這是'\ n'在行之間,但我不確定 –

+0

在這種情況下'base64_decode'和'unbase64'的工作方式不同,但我相信你可以弄明白。 –

+0

感謝您的時間和答覆。畢竟,我想我會保持這兩個功能。 –