gpt4 book ai didi

在 C 中传递和修改 char 指针之间的混淆(引用与值)

转载 作者:行者123 更新时间:2023-12-04 11:00:26 25 4
gpt4 key购买 nike

我想知道你能否帮我解决一个我不太明白的 C 字符串问题。我有一个函数,我向其发送 3 个字符指针。在此函数中,char 指针被正确移动和修改。但是,当我返回调用它们的主函数时,上述函数并没有改变。我传递的值(value)是错误的吗?这是我的代码示例:

int main(void) 
{
LPSTR path = (char*)malloc(strlen(START_PATH));

strcpy( path, START_PATH );

char* newstr = (char*)malloc(PATH_SIZE);

TrimVal(path, "*.*", newstr);

//Do Stuff

return 0;
}

void TrimVal(char* modify, char* string, char* newstr)
{
newstr[0] = '\0';

modify = strncat(newstr, modify, (strlen(modify) - strlen(string)));

return;
}

注意:假设PATH_SIZE是一个大小值,START_PATH是一个字符数组

最佳答案

这样做

 modify = strncat(newstr, modify, (strlen(modify) - strlen(string)));

您修改的是指针,而不是指针指向的内容。

当您将 path 传递给 TrimVal 时。它将传入 path 的内存位置,例如0x12345

当你执行你所说的 modify = 时,将局部变量 modify 更改为新的内存位置,例如0x54321

当你返回 main 时,它只有一个指向 0x12345 的指针,当它看那里时,什么都没有改变。

你可以很容易地解决你的问题

{ 
...
TrimVal(&path, "*.*", newstr);
...
}

void TrimVal(char** modify, char* string, char* newstr)
{

newstr[0] = '\0';

*modify = strncat(newstr, *modify, (strlen(*modify) - strlen(string)));

return;

}

关于在 C 中传递和修改 char 指针之间的混淆(引用与值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573050/

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