首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这段程序不能起到真正的作用吗?该怎么处理

2012-03-16 
这段程序不能起到真正的作用吗?voidGetVersion(char*pStr){  pStrmalloc(10)  strcpy(pStr,2.0 )}mai

这段程序不能起到真正的作用吗?
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);

}

热点排行