【问题标题】:convert char* to char &将 char* 转换为 char &
【发布时间】:2013-10-18 02:25:35
【问题描述】:

我有以下代码可以正常工作:

//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);

【问题讨论】:

  • 在第二种情况下,您对tmpbuf.?的期望是什么?你想在函数unbase64 中做什么? unbase 是由unbase64 的返回分配的,那么您在下一行再次分配什么?
  • 我想你想反过来做:tmpbuf->.. = unbase;。在第一个示例中,您可能不应该将tmpbuf 转换为char *,而是使用struct 的成员,它的定义是什么?

标签: c char base64 constants


【解决方案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.

【讨论】:

  • 我用修改后的代码编辑了我的帖子,但仍然无法正常工作。我猜是因为行之间有'\n',但我不确定
  • 在这种情况下,base64_decodeunbase64 的工作方式不同,但我相信你能弄清楚。
  • 感谢您的时间和回答。我想我会保留这两个功能。
猜你喜欢
  • 2010-10-12
  • 2021-04-29
  • 2012-01-15
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2012-07-01
  • 2011-10-19
相关资源
最近更新 更多