在成员函数中指向字符数组会不会有问题?
Could it be problematic to point to a character array in a member function?
int setString(char *pcString)
{
if( NULL == pcString )
{
pcString = "";
}
if( NULL == m_pcData )
{
m_pcData = new char[m_nBufferLength];
memset(m_pcData, '[=10=]', 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] = '[=11=]';
是更好的代码。
但我不明白为什么?
有人可以给我一些解释吗?
pcString = "";
strcpy(pcString, "C++ Problem");
这是其中之一吗?
pcString 被声明为指向字符的指针,因此隐含地假设这些字符可以更改。文字“”是一串常量字符,所以不能改变。出于向后兼容的原因,C++ 允许您进行赋值:
pcString = "";
但是下面的代码不会编译:
const char* str0 = "";
pcString = str0;
所以,你可以在char* pcString
前加上const
就可以了:
int setString(const char *pcString)
{
//....
}
如果 pcString 字符串应保持可变,则赋值:
pcString = "";
可能是以下代码的问题:
*pcString = '[=14=]'; // undefined behavior (1)
或
delete[] pcString; // undefined behavior (2)
(1) - 尝试修饰常量字符串
(2) - 尝试释放未分配的内存
注意。如果您进行更正:
pcString = new char;
pcString[0] = '[=16=]';
那么你需要提供分配内存的释放。
int setString(char *pcString)
{
if( NULL == pcString )
{
pcString = "";
}
if( NULL == m_pcData )
{
m_pcData = new char[m_nBufferLength];
memset(m_pcData, '[=10=]', 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] = '[=11=]';
是更好的代码。
但我不明白为什么? 有人可以给我一些解释吗?
pcString = "";
strcpy(pcString, "C++ Problem");
这是其中之一吗?
pcString 被声明为指向字符的指针,因此隐含地假设这些字符可以更改。文字“”是一串常量字符,所以不能改变。出于向后兼容的原因,C++ 允许您进行赋值:
pcString = "";
但是下面的代码不会编译:
const char* str0 = "";
pcString = str0;
所以,你可以在char* pcString
前加上const
就可以了:
int setString(const char *pcString)
{
//....
}
如果 pcString 字符串应保持可变,则赋值:
pcString = "";
可能是以下代码的问题:
*pcString = '[=14=]'; // undefined behavior (1)
或
delete[] pcString; // undefined behavior (2)
(1) - 尝试修饰常量字符串 (2) - 尝试释放未分配的内存
注意。如果您进行更正:
pcString = new char;
pcString[0] = '[=16=]';
那么你需要提供分配内存的释放。