gpt4 book ai didi

将 char** 转换为 char* 或 char

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:47 31 4
gpt4 key购买 nike

我有一个旧程序,其中使用了一些库函数,但我没有那个库。

所以我正在使用 C++ 库编写该程序。在那个旧代码中有一些函数是这样调用的

*string = newstrdup("这里有一些字符串");

字符串变量声明为char **string;

他可能在名为“newstrdup”的函数中做什么?我尝试了很多东西,但我不知道他在做什么......任何人都可以帮忙

最佳答案

该函数用于制作 C 字符串的副本。这通常需要获得字符串文字的可写版本。它们(字符串文字)本身是不可写的,因此这样的函数将它们复制到分配的可写缓冲区中。然后,您可以将它们传递给修改给定参数的函数,例如 strtok 写入它必须标记化的字符串。

我想你可以想出这样的东西,因为它叫做newstrdup:

char * newstrdup(char const* str) {
char *c = new char[std::strlen(str) + 1];
std::strcpy(c, str);
return c;
}

你应该在使用字符串完成后释放它

delete[] *string;

另一种编写方法是使用 malloc。如果库是旧的,它可能使用了 C++ 从 C 继承的那个:

char * newstrdup(char const* str) {
char *c = (char*) malloc(std::strlen(str) + 1);
if(c != NULL) {
std::strcpy(c, str);
}
return c;
}

现在,您应该在完成后使用 free 释放字符串:

free(*string);

如果您使用 C++ 编写代码,请首选第一个版本。但是,如果现有代码使用 free 再次释放内存,请使用第二个版本。请注意,如果没有内存可用于复制字符串,第二个版本将返回 NULL,而第一个版本会在这种情况下抛出异常。当您将一个 NULL 参数传递给您的 newstrdup 时,应该注意另一个关于行为的注意事项。取决于您的图书馆,可能允许也可能不允许。因此,如有必要,请在上述功能中插入适当的检查。在 POSIX 系统中有一个名为 strdup 的函数,但该函数既不允许 NULL 参数,也不使用 C++ operator new 来分配内存.

无论如何,我已经通过 google codesearch 查找了 newstrdup 函数并找到了很多。也许您的图书馆是结果之一:

Google CodeSearch, newstrdup

关于将 char** 转换为 char* 或 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/625010/

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