将char指针传递给另一个函数

时间:2018-04-06 17:52:46

标签: c++

我研究了半天,无法弄清楚如何传递一个简单的char指针,并修改函数中的值。大多数解决方案都说要修改函数以接受 etljob: Type: "AWS::Glue::Job" DependsOn: copyGlueJob Properties: Role: !Ref gluejobrole AllocatedCapacity: 2 DefaultArguments: "--TempDir": !Join [ "/", [ "s3:/",!Ref glueScriptsBucket , tmp/ ] ] "--sourcedatabase": !Join [ "_", [ "raw" , !Ref "AWS::StackName" ] ] "--destinationpath": !Join [ "/", [ "s3:/",!Ref dataLakeBucketName , '' ] ] "--job-bookmark-option": job-bookmark-enable "--encryption-type": "sse-s3" Command: Name: glueetl ScriptLocation: !Join [ "/", [ "s3:/",!Ref glueScriptsBucket , scripts/parquetconversion.py ] ] 参数。

我有一个我无法修改的功能。我需要传递一个char指针,因为这个函数会给我一个新的计算char值。我被告知我可以传递一个指向char数组的指针,它会起作用,但我不确定该怎么做。

Passing char pointer as argument to function

我按照上面的帖子提出了以下代码,但它仍然无效。当我将指针传递给char arr []时,它不会更改其值。我的目标是传递一个char指针,并通过传递它的引用能够在另一个函数中写入它。任何帮助表示赞赏。

char **

3 个答案:

答案 0 :(得分:1)

  

我有一个我无法修改的功能。我需要传递一个char指针,因为这个函数会给我一个新的计算char值。我被告知我可以传递一个指向char数组的指针,它会起作用,但我不确定该怎么做。

事实并非如此。无论谁说这是骗你的,或者他们对这个主题一无所知。

使用时

pData = "Hello World";

您要修改pData指向的位置。但是,该更改是函数的本地更改。它不会更改调用函数中的数据。您可以使用std::strcpy进行更改以影响调用功能。

std::strcpy(pData, "Hello World");

您可以通过引用传递指针并更改指针的值。这将使调用对调用函数可见。

STATUS func1(char*& pData)
{
    pData = "Hello World";

    cout << pData << endl;

    return OK;
}

但是,当您这样做时,arr中的pArraymain会有所不同。 arr将继续具有相同的值,而pArray将指向完全不同的值。

答案 1 :(得分:1)

 STATUS func1(char *pData)
 {
     pData = "Hello World";
     cout << pData << endl;
     return OK;
 }

该函数正在执行浅拷贝(即改变指针pData的值而不是它指向的值)。您需要将新字符串的深层复制写入pData指针指向的内存中。

执行字符串深层复制的传统方法是使用strcpy()库调用。你也可以使用一个循环。

答案 2 :(得分:1)

STATUS func1(char *pData)
{
  *(pData) = "H";
  *(pData+1) = "e";
  *(pData+2) = "l";
  *(pData+3) = "l";
  //... etc ...

  cout << pData << endl;

  return OK;
}

这是改变指针指向的内存,而不是指针本身。可以使用其他答案中的函数更好地完成它,但这更明确。如果您正在使用允许单步调试和内存查看的IDE,则可以观察内存中的各个字节是否发生变化。

如果初始内存缓冲区不够大,这可能会导致指针超过运行。

另外值得一提的是,你的记忆力是否足以让你无法改变的功能?你应该像这样分配内存:

char *ptr = new char[1000];
//etc....
if(ptr) delete ptr;

创建(并删除)更大的未初始化的内存缓冲区?