这段程序不能起到真正的作用吗?
void
GetVersion(char* pStr)
{
pStr = malloc(10);
strcpy ( pStr, "2.0 " );
}
main()
{
char* ver = NULL;
GetVersion ( ver );
...
...
free ( ver );
}
就是通过传递指针的形式,想修改指针的指向的内容!好象实现不了,不知道是不是真是这样,请教了!
[解决办法]
不行。只能改别的方式,比如:
void
GetVersion(char** pStr)
{
*pStr = malloc(10);
strcpy ( *pStr, "2.0 " );
}
main()
{
char* ver = NULL;
GetVersion ( &ver );
...
...
free ( ver );
}
[解决办法]
或者:
char*
GetVersion()
{
char* pStr = malloc(10);
strcpy ( pStr, "2.0 " );
return pStr;
}
main()
{
char* ver = NULL;
ver = GetVersion();
...
...
free ( ver );
}
[解决办法]
改成下面的代码,
void
GetVersion(char** pStr) // 01
{
*pStr = malloc(10); // 02
strcpy ( *pStr, "2.0 " ); // 03
}
main()
{
char* ver = NULL;
GetVersion ( &ver ); // 04
...
}
[解决办法]
把实参传给形参 相当于pstr=ver;即pstr=NULL
在getversion函数中,给pstr分配了一块存储单元(一个新的地址),并执行strcpy操作
pstr在函数结束后被释放,而它所指向的内容仍然还在,只不过无法用指针来操作了
函数结束后
ver还是NULL 它所存储的值是NULL而不是指向在getversion中分配的内存单元的地址
下面的是我改的 可以完成你的要求吧!
#include <stdio.h>
#include <string.h>
#include <alloc.h>
char *getversion(void)
{
char *pstr;
pstr=malloc(10);
strcpy(pstr, "2.0 ");
return(pstr);
}
main()
{
char *ver=NULL;
ver=getversion();
puts(ver);
getch();
free(ver);
}