你想改变一个指针,你必须使用它的地址作形参(指针的指针,二级指针)。
就相当于你要改变一个内存,你就使用指针就行。
你的这个cvCanny是要改变tmpNewname这个指针的指,那么必须是二级指针的形参才行!
你把cvCanny(char *s);改成cvCanny(char **s);当然调用代码相应也改,就OK了。
或者你不用二级指针,仅仅在cvCanny(char *s);内部改,不用imgName = tmpNewname;,而是strcpy(imgName , tmpNewname);也能达到同样的效果。但是char *tmpNewname实参的大小必须改大比如char str[100] = "OpenCVimage.png";
这是因为你没有理解指针的用法。
在子函数中,你把字符串拷贝到了新的地址,返回的也是新地址,所以std::cout << cvCanny(str) << std::endl;这句显示的是返回的结果。然后后面那句还是按照原来地址,输出原来的字符串。
#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;
}