C++字符指针作为形参传递内容出错求助

2025-05-13 10:52:01
推荐回答(3个)
回答1:

你想改变一个指针,你必须使用它的地址作形参(指针的指针,二级指针)。
就相当于你要改变一个内存,你就使用指针就行。
你的这个cvCanny是要改变tmpNewname这个指针的指,那么必须是二级指针的形参才行!

你把cvCanny(char *s);改成cvCanny(char **s);当然调用代码相应也改,就OK了。

或者你不用二级指针,仅仅在cvCanny(char *s);内部改,不用imgName = tmpNewname;,而是strcpy(imgName , tmpNewname);也能达到同样的效果。但是char *tmpNewname实参的大小必须改大比如char str[100] = "OpenCVimage.png";

回答2:

这是因为你没有理解指针的用法。
在子函数中,你把字符串拷贝到了新的地址,返回的也是新地址,所以std::cout << cvCanny(str) << std::endl;这句显示的是返回的结果。然后后面那句还是按照原来地址,输出原来的字符串。

回答3:

#include 
#include 
#include 

const char* cvCanny(char **s);

int main()

{

char *str = "OpenCVimage.png";

std::cout << str << std::endl;         //OpenCVimage.png

std::cout << cvCanny(&str) << std::endl;//0719_OpenCVimage.png

std::cout << str << std::endl;         //OpenCVimage.png

system("Pause");

return 0;

}

const char* cvCanny(char **imgName)

{

char *tmpNewname = (char*)malloc(50 * sizeof(char));

strcpy(tmpNewname, "0719_");

  *imgName = tmpNewname;

  return tmpNewname;
}