gpt4 book ai didi

c++ - 在成员函数中指向字符数组会不会有问题?

转载 作者:行者123 更新时间:2023-12-02 10:27:12 25 4
gpt4 key购买 nike

int setString(char *pcString)
{
if( NULL == pcString )
{
pcString = "";
}

if( NULL == m_pcData )
{
m_pcData = new char[m_nBufferLength];
memset(m_pcData, '\0', m_nBufferLength);
}


int nCurrentBuffer = 0;
int nLength = 0;
int nInputStringLength = 0;

nLength = strlen(m_pcData) + knNULL_CHARACTER_SPACE;
nCurrentBuffer = (m_nBufferLength > nLength) ? m_nBufferLength : nLength ;
nInputStringLength = strlen(pcString) + knNULL_CHARACTER_SPACE;

if( nCurrentBuffer < nInputStringLength )
{
delete[] m_pcData;
m_pcData = new char[nInputStringLength];
}

strcpy(m_pcData, pcString);

return nInputStringLength;
}
line5 pcString = ""->可能会出现问题,具体取决于以后的代码编写方式?
有人指出,这可能是演讲中的一个问题。
他说
pcString = new char;
pcString[0] = '\0';
是更好的代码。
但是我不明白为什么?
有人可以给我一些解释吗?
pcString = "";
strcpy(pcString, "C++ Problem");
这是其中一种吗?

最佳答案

pcString被声明为指向字符的指针,因此隐式假定可以更改这些字符。文字“”是一串常量字符,因此无法更改。出于向后兼容的原因,C++允许您进行分配:

pcString = "";
但以下代码将无法编译:
const char* str0 = "";
pcString = str0;
因此,您可以在 const之前添加 char* pcString,此功能就可以了:
int setString(const char *pcString)
{
//....
}
如果pcString字符串应保持可更改,则分配:
pcString = "";
以下代码可能是一个问题:
*pcString = '\0'; // undefined behavior (1)
要么
delete[] pcString; // undefined behavior (2)
(1)-尝试修改常量字符串
(2)-尝试释放未分配的内存
注意。如果您进行更正:
pcString = new char;
pcString[0] = '\0';
那么您需要提供释放的已分配内存。

关于c++ - 在成员函数中指向字符数组会不会有问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63877879/

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