Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

8 студия или лажа со строками

370
23 июня 2007 года
koval
443 / / 29.08.2005
Товарищи програмисты!
Не могу понять что за приколы с 2005 студией. Библиотечные ф-ции для работы со строками которые без проблем работаю в 6 и 7 студиях в 2005 вызывают ошибку компиляции. К примеру
 
Код:
#include <stdio.h>
LPTSTR lpCmdLine;
.................
strstr(lpCmdLine,"/Embedding");

error C2665: 'strstr' : none of the 2 overloads could convert all the argument types
c:\program files\microsoft visual studio 8\vc\include\string.h(163): could be 'const char *strstr(const char *,const char *)'
c:\program files\microsoft visual studio 8\vc\include\string.h(187): or 'char *strstr(char *,const char *)'
while trying to match the argument list '(LPTSTR, const char [11])'
и это толбко один из множество примеров.
2.1K
23 июня 2007 года
vectoroc
234 / / 25.07.2006
возможно lpCmdLine - указатель на юникодовую строку, где на символ отводится больше чем один байт... лишь предположение
 
Код:
#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif

соответственно попробуй либо в свойствах проекта убрать использование юникода, либо вместо LPTSTR попробу писать LPSTR.
А вообще ещё лучше наверно использовать функцию _tcsstr.
За подробностями в MSDN
370
23 июня 2007 года
koval
443 / / 29.08.2005
Цитата: vectoroc
возможно lpCmdLine - указатель на юникодовую строку, где на символ отводится больше чем один байт... лишь предположение
 
Код:
#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif

соответственно попробуй либо в свойствах проекта убрать использование юникода, либо вместо LPTSTR попробу писать LPSTR.
А вообще ещё лучше наверно использовать функцию _tcsstr.
За подробностями в MSDN



Помогло поменять вместо LPTSTR написать LPSTR, но мне все-таки интересно что за прикол в других студиях проблем не возникает, может дело в настройках компилятора?

398
24 июня 2007 года
Alexandoros
630 / / 21.10.2005
Цитата: koval
может дело в настройках компилятора?



Может.

Напиши свою ф-цию так

strstr(lpCmdLine, _T("/Embedding"));

и все будет работать и при юникоде и при мукльтибайте.

Копать настройки проджекта - генерал - чарактер сет: юникод/мультибайт.

3
24 июня 2007 года
Green
4.8K / / 20.01.2000
Цитата: koval
Помогло поменять вместо LPTSTR написать LPSTR, но мне все-таки интересно что за прикол в других студиях проблем не возникает, может дело в настройках компилятора?


Потому, что в "других студиях" в ерстройках проекта поумолчанию стоит Multibyte, а в VS2005 - Unicode.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог