gpt4 book ai didi

C++:将 std::string 传递给要更改字符串的 C 函数的正确实现?

转载 作者:可可西里 更新时间:2023-11-01 18:28:45 26 4
gpt4 key购买 nike

我在用 C 编写的第三方库中有一个函数:char* fix_filename_slashes(char* path)。此函数需要传递给它的可变 C 字符串,以便它可以根据操作系统将路径中的所有斜杠更改为正确使用。我在 Facade 中使用的所有字符串都声明为 std::string。我试图简单地使用 foo.c_str(),因为所有其他需要 C 字符串的函数都不会更改它并需要 const char *,但是这个函数会导致错误:错误:“const char *”类型的参数与“char *”类型的参数不兼容

我得出的结果是:

char* tempf = const_cast<char*>(filename.c_str());
filename = std::string(fix_filename_slashes(tempf));
tempf = NULL;

被认为是“正确的”还是有其他(更正确的?)方法来完成任务?

编辑

哎呀。显然该函数返回字符串的拷贝。仍然有一些不错的答案已经给出。

最佳答案

如果字符串长度不变,可以使用指向字符串第一个字符的指针。这是 C++03 标准中未定义的行为,但所有已知的实现都可以正常工作,并且在 C++11 标准下明确允许。

fix_filename_slashes(&filename[0]);

如果字符串的大小可能会改变,您将需要做更多的工作。

filename.resize(max_size, 0);
append_filename_suffix(&filename[0]);
filename.resize(strlen(filename.c_str()));

关于C++:将 std::string 传递给要更改字符串的 C 函数的正确实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919204/

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