suniti dinesh Ответов: 2

Как обрезать пустые места в VC++


Всем Привет,

пожалуйста, помогите мне, как обрезать пробелы в VC++
В VC++ я получаю значение ImgFileName как null. но я получаю пустое пространство на выходе, поэтому я не могу попасть внутрь условия if и перейти к другой части.

поэтому я не недооцениваю, как написать trim, чтобы удалить пробелы


if( ImgFileName == NULL)
	
	*pbFileFound = FALSE;
else 
-----
----


Что я уже пробовал:

Я новичок в VC++. Я не могу понять, как выполнить обрезку в VC++

Jochen Arndt

Что такое ImgFileName?
Если это указатель на какую-то строку, вы не можете обрезать ее, пока она равна нулю.

suniti dinesh

Привет Джейсон

Тип ImgFileName-это

LPCTSTR ImgFileName

Jochen Arndt

LPCTSTR-это длинный указатель [на] строку Const T.
Ключевое слово здесь-const. Такие строки не могут быть изменены. Вы должны создать копию строки и удалить из нее пробелы.

Но окончательный ответ требует знания контекста вашего кода (как он называется / предшествует и где и как должна использоваться строка впоследствии).

Вы можете использовать зеленую ссылку "улучшить вопрос", чтобы отредактировать свой вопрос и добавить эту информацию.

suniti dinesh

Привет Джейсон
Большое вам спасибо за Ваш быстрый ответ.
да, это строка Const T.

если строка пуста(IMGFileName), мы должны сделать файл найденным в false, и мы закроем приложение. в текущем сценарии из-за пробела мы перемещаемся в другую часть и пытаемся открыть файл, но не закрываем приложение.

Jochen Arndt

Существует разница между пустой строкой (обычно обозначаемой как "") и нулевым указателем на строку, как объяснил Грифф.

Но опять же:
Не зная, откуда вы взяли эту строку и что вы хотите с ней сделать, невозможно ответить.

2 Ответов

Рейтинг:
2

OriginalGriff

Нуль и Пробел-Это совсем не одно и то же: нулевое значение означает "здесь ничего нет", даже пустую строку, представленную"", или строку, полную пробелов " \n\n\n "
Если ImgFileName имеет значение NULL, вы можете его обрезать - обрезать нечего!

Подумайте об этом как о машинах: у вас есть парковочное место за пределами вашего дома, где вы всегда паркуете свой автомобиль. Однажды вы решаете пойти в магазин, и обнаруживаете, что ваша жена переехала машину - пространство пусто. В результате вы не можете использовать содержимое парковочного места ни для чего - там нет машины, чтобы разблокировать, не говоря уже о том, чтобы ездить!
Пробел возвращает ноль - "здесь нет машины!" - поэтому вы должны выяснить, почему он равен нулю, поговорив с женой, прежде чем пытаться что-либо сделать с машиной.

Ваш код тот же: ImgFileName говорит вам: "здесь нет имени" - вам нужно посмотреть, почему это null, а не пытаться справиться с ним, как будто его нет.


suniti dinesh

Привет OriginalGriff,
Большое вам спасибо за ясное объяснение. здесь дело в том, что если у нас нет файла в определенном месте, ImgFileName будет равен нулю, и мы закроем приложение. я написал журналы и обнаружил, что в выводе ImgFileName есть пробел, из-за которого мы пытаемся открыть файл вместо закрытия приложения, поэтому мы получаем ошибку в моем приложении.

Рейтинг:
12

Jochen Arndt

Вы можете использовать CString класс:

// Added also a check for an empty string here
if (ImgFileName == NULL || *ImgFileName == _T('\x0'))
    *pbFileFound = FALSE;
else 
{
    // Create a CString copy from the string
    CString strFileName(ImgFileName);
    // Removes leading and trailing spaces from the string
    strFileName.Trim();
    // Optionally check again for empty string after trimming
    if (strFileName.IsEmpty())
        *pbFileFound = FALSE;
    else
    {
        // Can use strFileName to open the file
    }
}


suniti dinesh

Большое спасибо, Йохен. теперь я могу подстричься. это сработало как заклинание

Jochen Arndt

Добро пожаловать, и я благодарю вас за то, что вы приняли мой ответ.