我研究了半天,无法弄清楚如何传递一个简单的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 **
答案 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
中的pArray
和main
会有所不同。 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;
创建(并删除)更大的未初始化的内存缓冲区?