- C/C++ code
#include <stdio.h> #include <string.h> static char TmpBuf[32] = "abcd1234"; void Mem_Get(char *Buf, int *pLen); void Mem_Get(char *Buf, int *pLen) { Buf = TmpBuf; *pLen = strlen(TmpBuf); } int main(void) { int Len; char *PrintBuf = NULL; Mem_Get(PrintBuf, &Len); printf("%s\t%d\n", PrintBuf, Len); return 0; }
输出:
(null) 8
为什么是空的呢?
------解决方案--------------------
这有什么奇怪的
PrintBuf是传值进去,PrintBuf本身的值并没有改变
------解决方案--------------------
基本数据类型都是按值传递的
------解决方案--------------------
指针传值是拷贝指针指向TmpBuf[32],你代码的拷贝指针和原来的指针没关系
------解决方案--------------------
假如你实参指向了TmpBuf[32];
你可以利用形参操作TmpBuf[32]这块空间 这样实参才会跟着变
------解决方案--------------------
#include <stdio.h>
#include <string.h>
static char TmpBuf[32] = "abcd1234";
/*void Mem_Get(char *Buf, int *pLen)*/
void Mem_Get(char *Buf[], int *pLen)/*传参为指针数字, 这样值的改变能返回到实参*/
{
Buf[0] = TmpBuf;
*pLen = strlen(Buf[0]);
}
int main(void)
{
int Len;
char *PrintBuf[1];
Mem_Get(PrintBuf, &Len);
printf("%s\t%d\n", PrintBuf[0], Len);
return 0;
}
这个应该可以!