gpt4 book ai didi

c - 将结构传递给函数的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:02 26 4
gpt4 key购买 nike

我有一个结构,我想将它传递给一个函数。显然我做错了什么,因为输出总是一样的:(null)

有人可以帮助我吗?谢谢!

typedef struct
{
char * Value1;
char * Value2;
} TESTSTRUCT, *PTESTSTRUCT;

BOOL MyFunction(PTESTSTRUCT TestStruct);
BOOL QueryData(char * String, char * Name);

int main ()
{
TESTSTRUCT myStruct;
ZeroMemory( &myStruct, sizeof( myStruct) );

MyFunction( &myStruct );

printf( "\nmyStruct.Value1 = %s", myStruct.Value1);
printf( "\nmyStruct.Value2 = %s", myStruct.Value2 );
if ( myStruct.Value1 != NULL ) LocalFree( myStruct.Value1);
if ( myStruct.Value2 != NULL ) LocalFree( myStruct.Value2 );
}
BOOL MyFunction(PTESTSTRUCT TestStruct)
{
//.....
QueryData(TestStruct->Value1, TestStruct->Value2);
//.....
}
QueryData(char * String, char * Name)
{
// do some stuff
LPTSTR szName = NULL;
szName = ( LPTSTR )LocalAlloc( LPTR, dwData * sizeof( TCHAR ) );
String = AllocateMemory(szName);
LocalFree( szName );
szName = NULL;
// do some more work
szName = ( LPTSTR )LocalAlloc( LPTR, dwData * sizeof( TCHAR ) );
Name = AllocateMemory(szName);
LocalFree( szName );
}
LPSTR AllocateMemory( LPSTR inputString )
{
LPSTR outputString = NULL;

outputString = ( LPSTR )LocalAlloc( LPTR, ( strlen( inputString ) + 1 ) * sizeof( CHAR ) );

if (outputString != NULL)
{
lstrcpyA( outputString, inputString );
}

return outputString;
}

最佳答案

问题是您分配给 QueryData 中的指针。由于 C 按值传递所有参数,指针被复制,您只需在 QueryData 函数内修改本地副本。

您需要通过传递指针来模拟按引用传递(我说“模拟”是因为 C 没有按引用传递),在您的情况下传递指向指针的指针。

类似于:

BOOL QueryData(char ** String, char ** Name)
{
...
*String = AllocateMemory(...);
...
*Name = AllocateMemory(...)
...
}

这样称呼

QueryData(&TestStruct->Value1, &TestStruct->Value2);

关于c - 将结构传递给函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com