Пустая символьная константа в переполнении стека

Я скопировал этот код из учебника, чтобы поиграть с ним, однако продолжал получать сообщение об ошибке, в котором говорилось, что у меня не может быть пустых символьных констант. учебное пособие было в 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

Любая помощь будет оценена

Еще раз спасибо.

1

Решение

Эта строка:

m_pchString[m_nLength-1] = '';

Что вы, вероятно, имеете в виду:

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

Или даже:

m_pchString[m_nLength-1] = 0;

Строки заканчиваются нулем, что записывается как обычный 0 или нулевой символ '\0', Для двойных кавычек "" символ нулевого завершения неявно добавляется в конец, но поскольку вы явно устанавливаете один символ, вы должны указать, какой именно.

9

Другие решения

Что вы думаете о нулевой строке? Да, вы правы, такие строки должны заканчиваться нулем:

m_pchString [m_nLength-1] = 0;

1

Вы сказали, что вы msgstr «получаю ошибку, в которой говорится, что strncpy небезопасно использовать, если я использую нулевой терминатор» но вы используете strlen, который просто не работает если строка не пуста От cplusplus:

Длина строки C определяется завершающим нулевым символом

Я предлагаю вам использовать ноль или 0, как предлагают другие, а затем просто использовать strcpy вместо strncpy так как вы копируете всю строку каждый раз в любом случае.

1
По вопросам рекламы [email protected]