gpt4 book ai didi

c++ - 是返回一个缓冲区更好,还是返回一个适当大小的字符串更好?

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:22 25 4
gpt4 key购买 nike

作为练习的一部分,我写了一个小的字符串压缩算法(基本上采用字符串“aaaabbbccc”并返回“a4b3c3”)。代码如下:

char *compress(char string[])
{
char buffer[256];
char *pBuffer = buffer;

char* pStr = (string - 1);
char currentCharacter = 0;
int length = 0;

while (*++pStr != 0)
{
currentCharacter = *pStr;
int currentCharacterLength = 1;

while ((*(pStr + 1) == currentCharacter) && (*pStr != 0))
{
currentCharacterLength++;
++pStr;
}

*pBuffer++ = currentCharacter;
*pBuffer++ = (char)currentCharacterLength;
}

(*pBuffer) = 0;
return buffer;
}

但是看着它,我想知道我是否应该创建另一个实际适合返回字符串的正确大小的缓冲区。显然,这样做需要更多的处理时间,但会导致更紧凑的解决方案。所以我想知道,像这样的事情的一般做法是什么。是更好(通常)为内存牺牲速度,还是让它保持原样更好?

或者更好的是,有没有更好的方法来编写这个我什至不知道的解决方案?

最佳答案

如果是c++,更好的做法其实是使用std::string类型。

当然,如果您试图了解指针/数组/字符串的行为方式或正在处理 C 库,则有时您需要使用字符。

从函数返回 (char *) 和任何其他类型的指针时,最大的问题是如何处理该指针的所有权。什么时候把这个指针指向的内容去掉?它可以在代码的多个范围内使用,它可以为您提供各种内存泄漏和未处理的异常。

如果您正在使用 C++,从函数返回指针的最佳方法是使用 std::shared_ptr,因为您不需要直接处理该指针的内存释放。

哦,当然,返回一个指向在堆栈上分配的内存的指针:

char buffer[256];
char *pBuffer = buffer;

是你代码最大的错误。

正确的方法是在堆上分配:

char *pBuffer = new char[256]; 

关于c++ - 是返回一个缓冲区更好,还是返回一个适当大小的字符串更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595204/

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