c ++中的空字符常量

时间:2015-07-02 19:50:35

标签: c++

我从一个教程中复制了这个代码来玩,但是我继续得到一个错误,声明我不能有任何空字符常量。该教程是在VS 2008中,我正在使用VS 2013,所以也许这不再有效,但我找不到任何修复。 这是代码:

#include "stdafx.h"
#include <iostream>

class MyString
{
private:
    char *m_pchString;
    int m_nLength;

public:
MyString(const char *pchString="")
{
    // Find the length of the string
    // Plus one character for a terminator
    m_nLength = strlen(pchString) + 1;

    // Allocate a buffer equal to this length
    m_pchString = new char[m_nLength];

    // Copy the parameter into our internal buffer
    strncpy(m_pchString, pchString, m_nLength);

    // Make sure the string is terminated
    //this is where the error occurs
    m_pchString[m_nLength-1] = '';
}

~MyString() // destructor
{
    // We need to deallocate our buffer
    delete[] m_pchString;

    // Set m_pchString to null just in case
    m_pchString = 0;
}

    char* GetString() { return m_pchString; }
    int GetLength() { return m_nLength; }
};

int main()
{
    MyString cMyName("Alex");
    std::cout << "My name is: " << cMyName.GetString() << std::endl;
    return 0;
} 

我得到的错误如下:

Error   1   error C2137: empty character constant       

非常感谢任何帮助

再次感谢。

3 个答案:

答案 0 :(得分:10)

这一行:

m_pchString[m_nLength-1] = '';

你的意思是:

m_pchString[m_nLength-1] = '\0';

甚至:

m_pchString[m_nLength-1] = 0;

字符串以零结尾,写为普通0或空字符'\0'。对于双引号字符串"",零终止字符隐式添加到结尾,但由于您明确设置了单个字符,因此必须指定哪个。

答案 1 :(得分:1)

您如何看待以null结尾的字符串?是的,你是对的,这样的字符串必须以null结尾:

m_pchString [m_nLength-1] = 0;

答案 2 :(得分:1)

你已经说过你“得到一个错误,指出如果我使用null终止符,strncpy是不安全的”,但你使用strlen,只需如果字符串未终止,则无法正常工作。来自cplusplus

  

C字符串的长度由终止空字符

决定

我建议您使用null或0,就像其他人建议的那样,然后只需使用strcpy代替strncpy,因为每次都会复制整个字符串。