将char指针传递给另一个函数:空白值.c++

Passing char pointer to another function: blank value. c++

本文关键字:函数 空白 c++ 另一个 char 指针      更新时间:2023-10-16

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

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"。我应该如何正确地传递指针?

您必须记住,在C++中,参数默认由值传递,这意味着在函数中您有副本。,并且修改副本不会改变原始副本。

如果您想将指针更改为指向其他对象,则需要通过引用传递。然而,在这种情况下,它将导致其他问题,因为您随后会丢失原始指针。

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

在修改strcpy(v, "123") 中尝试此操作

您的代码有几个问题。

你的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*