LPTSTR в int (C++)

Я передаю некоторые числовые аргументы при создании процесса (в VC++)

Я застрял в преобразовании LPTSTR в Int.

Заранее спасибо.

5 ответов

Решение

LPTSTR - это просто длинный указатель на строку типа char или wide-char.

использование _ttoi или же _tstoi для не зависящего от ширины символа способа сделать преобразование.

Также см

Gack! Что именно ты пытаешься сделать? Ваша проблема на стороне родительского процесса (который вызывает CreateProcess()) или на стороне дочернего процесса?

Существует несколько способов передачи параметров из родительского процесса в дочерний процесс, созданный CreateProcess() функция. Если вы можете закодировать эти параметры как строку разумного размера, то передавая их через параметры командной строки (lpCommandLine Параметр CreateProcess), вероятно, самый простой и переносимый, с переменными среды 2-й.

Если у вас есть структура данных, которую вы не можете закодировать в строку разумного размера (либо потому, что она имеет большой объем памяти, либо ее сложно сериализовать), то вам необходимо прибегнуть к какому-либо методу межпроцессного взаимодействия. Файл или блок разделяемой памяти - два способа сделать это. В любом случае вам нужно придумать согласованное местоположение для ребенка, чтобы найти его (путь к файлу в случае файла или имя блока совместно используемой памяти), а затем передать эту строку в виде командной строки. параметр или переменная окружения.

Если вы пытаетесь разобрать lpCommandLine параметр в рамках дочернего процесса, то это то, что предложили другие люди.

Попробуйте atoi() функция (или соответствующая версия, если вы используете широкие символы) для преобразования строк в целые числа.

Мой совет - использовать что-то вроде _tcstol, а не _ttoi, чтобы вы могли обрабатывать такие ошибки, как нецифровые символы в строке. Например:

int result = atoi("0");
result = atoi("foo");

В обоих случаях результат будет равен 0, но только во втором случае возникает ошибка при преобразовании.

LPTSTR - это указатель на строку, поэтому вы не должны приводить его к int, если вы хотите получить int, представляющий значение строки.

Если вы знаете, что строка содержит цифры, например, "1234", вы можете использовать функцию _wtoi для преобразования ее в int.

например

int num = _wtoi(foo);

где foo является LPTSTR.

редактирование: вышеописанное работает правильно, только если LPTSTR является строкой UNICODE. т.е. _UNICODE определен. Если это не так, вы должны использовать Atoi.

См. http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

Другие вопросы по тегам