char" string"没有更新功能

时间:2014-07-11 09:13:16

标签: c++ string pointers

我的功能如下:

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

为什么在进行函数调用后不打印字符串?

3 个答案:

答案 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获取“指向字符的指针”的地址,这将允许函数修改它;在函数内部,您需要额外的*来取消引用此地址并获取您想要更改的值。