将char指针传递给另一个函数:空值。 C ++

时间:2014-04-21 14:32:00

标签: c++ pointers

我有以下非常简单的程序。

int modify(char * v){
  v = "123" ;

  return 0;
}

int main (int argc, char** argv){
char *test = new char[10];
  modify(test);
  std::cout << test;
  return 0;

}

我知道我可以打印出“123”,但我故意用这种方式来了解指针是如何工作的。但是,不打印“123”。我该如何正确传递指针?

3 个答案:

答案 0 :(得分:7)

你必须记住,在C ++中,默认情况下,参数按值传递,这意味着在函数中你有副本。并且修改副本不会改变原文。

如果您想将指针更改为指向其他内容,则需要通过引用传递。但是,在这种情况下,它会导致其他问题,因为然后松开原始指针。

因此,解决方案是使用std::string通过引用传递,或者使用strcpy顶部副本到目标内存区域(但如果使用strcpy,则必须注意不要写超出分配的内存。)

答案 1 :(得分:3)

在修改strcpy(v, "123")

中尝试此操作

答案 2 :(得分:1)

您的代码存在一些问题。

您的modify()函数实际上没有任何变化:

int modify(char * v) {
  v = "123"; // overwrites the parameter value copy on the stack
             // with a char[] literal pointer
  return 0;
}

您需要从文字复制到指针:

int modify(char* v) {
  strcpy(v,"123");
  return 0;
}

您没有释放分配的内存,这可能会导致其他情况下的内存泄漏

int main (int argc, char** argv){
char *test = new char[10];
  modify(test);
  std::cout << test;
  delete [] char; // <<< Note
  return 0;    
}

正如Joachim Pileborg已经提到的,对c ++最合适的解决方案是使用std::string代替char*