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