Проблема со сравнением 2 CStrings, которые кажутся идентичными

#c #c-strings

#c #c-строки

Вопрос:

2 строки, которые кажутся равными, не проверяются как равные. Я использую Microsoft Visual Studio 2008. Я добавил наблюдение для каждой CString, и в окне просмотра они кажутся идентичными. Но когда я пытаюсь сравнить их, используя: a = b; или a.compare(b);

они не сравниваются.

 bool CDictionaryClass::CheckWord(CString word)
{
    // get starting position for search
    LPTSTR buff = word.GetBuffer(10);

    wchar_t testChar = tolower(buff[0]);
    int loc = int(testChar) - 97;
    int end,testLength,test;
    CString testWord = word.MakeLower(),dictWord;

    testLength = word.GetLength();
    word.ReleaseBuffer();

    if(loc == 25)
        end = GetNumberOfWords();
    else
        end = ABCPositions[loc 1];

    for(int i=ABCPositions[loc]; i<end; i  )
        if(dictionaryWords[i].length == testLength)
            {
            dictWord = dictionaryWords[i].word.MakeLower();
            if(testWord == dictWord)
                return true;
            }

    return false;
}
  

Я ожидаю, что testWord будет равен dictWord

Комментарии:

1. Если у вас есть настоящая c-строка, вам следует сравнивать содержимое, а не адрес. Но я понятия не имею, является ли CString c-строкой с оператором сравнения или нет.

2. и в окне просмотра они кажутся идентичными. — Это потому, что «окно просмотра» не показывает (или его нелегко отобразить) управляющие символы, невидимые символы и т.д. Либо используйте «Окно памяти», где вы видите фактические байтовые / шестнадцатеричные значения символов, либо просто напишите цикл для отображения символов, составляющих каждую строку, чтобы показать, какие фактические символы составляют строку. Но если серьезно, это то, что вам следовало изучить перед публикацией — программа не говорит неправду — строки не совпадают.