如何使用char指针作为C函数的out参数

如何使用char指针作为C函数的out参数,第1张

概述我是C的新手.我试图使一个char指针作为函数的out参数.但功能的变化并没有体现在主要功能中.我究竟做错了什么? void SetName( char *pszStr ){ char* pTemp = new char[10]; strcpy(pTemp,"Mark"); pszStr = pTemp;}int _tmain(int argc, _TCHAR* a 我是C的新手.我试图使一个char指针作为函数的out参数.但功能的变化并没有体现在主要功能中.我究竟做错了什么?
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参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存