1. ホーム
  2. c++

[解決済み] c++の空文字定数

2022-02-28 09:04:44

質問

チュートリアルからこのコードをコピーして遊んでいたのですが、「空の文字定数を持つことはできない」というエラーが出続けています。 以下はそのコードです。

#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       

ご協力をお願いします。

また、ありがとうございます。

解決方法は?

この行です。

m_pchString[m_nLength-1] = '';

おそらくあなたが言いたいのは

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

あるいは、さらに

m_pchString[m_nLength-1] = 0;

文字列はゼロ終端であり、これはプレーンな 0 またはヌル文字 '\0' . ダブルクォート文字列の場合 "" の場合、ゼロ終端文字は暗黙のうちに末尾に付加されますが、1文字を明示的に設定するため、どの文字かを指定する必要があります。