voID Setname( char *pszStr ){ char* pTemp = new char[10]; strcpy(pTemp,"Mark"); pszStr = pTemp;}int _tmain(int argc,_TCHAR* argv[]){ char* pszname = NulL; Setname( pszname ); cout<<"name - "<<*pszname<<endl; delete pszname; return 0;}解决方法 你的指针被复制到堆栈上,你正在分配堆栈指针.如果要更改指针,则需要传递指针到指针:
voID Setname( char **pszStr ){ char* pTemp = new char[10]; strcpy(pTemp,"Mark"); *pszStr = pTemp; // assign the address of the pointer to this char pointer}int _tmain(int argc,_TCHAR* argv[]){ char* pszname = NulL; Setname( &pszname ); // pass the address of this pointer so it can change cout<<"name - "<<*pszname<<endl; delete pszname; return 0;}
这将解决你的问题.
但是,这里还有其他问题.首先,在打印之前,您将取消引用指针.这是不正确的,你的指针是一个指向字符数组的指针,所以你想打印整个数组:
cout<<"name - "<<pszname<<endl;
你现在只打印第一个字符. Also,你需要使用delete []删除一个数组:
delete [] pszname;
更大的问题在于您的设计.
那个代码是C,而不是C,即使这样也不是标准的.首先,您要查找的功能主要是:
int main( int argc,char * argv[] )
其次,您应该使用references而不是指针:
voID Setname(char *& pszStr ){ char* pTemp = new char[10]; strcpy(pTemp,"Mark"); pszStr = pTemp; // this works because pxzStr *is* the pointer in main}int main( int argc,char * argv[] ){ char* pszname = NulL; Setname( pszname ); // pass the pointer into the function,using a reference cout<<"name - "<<pszname<<endl; delete pszname; return 0;}
除此之外,如果可以的话,通常情况下只需要返回:
char *Setname(voID){ char* pTemp = new char[10]; strcpy(pTemp,"Mark"); return pTemp;}int main( int argc,char * argv[] ){ char* pszname = NulL; pszname = Setname(); // assign the pointer cout<<"name - "<<pszname<<endl; delete pszname; return 0;}
有一些东西使这更好. C有一个string class:
std::string Setname(voID){ return "Mark";}int main( int argc,char * argv[] ){ std::string name; name = Setname(); // assign the pointer cout<<"name - "<< name<<endl; // no need to manually delete return 0;}
如果这样做可以简化,如果你愿意的话:
#include <iostream>#include <string>std::string get_name(voID){ return "Mark";}int main(voID){ std::cout << "name - " << get_name() << std::endl; }
您应该处理格式化,使事情变得更加可读. *** 作符之间的空间有助于:
cout<<"name - "<<pszname<<endl;cout << "name - " << pszname << endl;
就像英文单词之间的空格有所帮助,在你的间隙之间. 总结
以上是内存溢出为你收集整理的如何使用char指针作为C函数的out参数全部内容,希望文章能够帮你解决如何使用char指针作为C函数的out参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)