我的功能如下:
void myFunc(char* myString, char* const buf, int startPos){
myString = &buf[startPos];
std::cout << myString << std::endl; //This outputs fine
}
。 。 。
char* myString = 0;
.
.
myFunc(myString, buf, startPos);
std::cout << myString << std::endl; //This doesnt output anything
为什么在进行函数调用后不打印字符串?
答案 0 :(得分:3)
致电时
myFunc(myString, buf, startPos);
myString
被复制到函数参数。指针myString
的任何更改都不会更改myString
中的指针main
。
在函数参数中使用char **mystring
或通过引用传递myString
。
void myFunc(char&* myString, char* const buf, int startPos){...}
答案 1 :(得分:0)
为什么不让函数返回mystring的值?
char* myFunc(char* myString, char* const buf, int startPos){
myString = &buf[startPos];
std::cout << myString << std::endl; //This outputs fine
return myString;
}
然后打印值:
std::cout << myFunc(myString, buf, startPos) << std::endl;
或者,你可以这样做:
myString = myFunc(myString, buf, startPos);
std::cout << myString << std::endl;
答案 2 :(得分:-1)
如果你想修改一个函数中的某些东西,你必须传递一个指向那个“东西”的指针...在这种情况下,你的“东西”是一个“指向字符的指针”所以你需要传入一个“指向'指向'char'的指针'”,所以:
void myFunc(char** myString, char* const buf, int startPos){
*myString = &buf[startPos];
std::cout << *myString << std::endl; //This outputs fine
}
并将其命名为:
myFunc(&myString, buf, startPos);
&myString
获取“指向字符的指针”的地址,这将允许函数修改它;在函数内部,您需要额外的*
来取消引用此地址并获取您想要更改的值。