'strcpy' ошибка и предупреждение - PullRequest
0 голосов
/ 22 апреля 2010

Я получаю ошибку 'strcpy' и предупреждение для следующих строк:

_tcscpy(strCommandLine,_T("MyProgram.exe /param1"));

_tcscpy(strApplicationName,_T("MyProgram.exe"));

Не знаю, почему я получаю ошибку или предупреждение «strcpy», поскольку я не использую «strcpy» Единственные строки, связанные с этим:

LPCTSTR strApplicationName;
LPTSTR strCommandLine;
_tcscpy(strCommandLine,_T("MyProgram.exe /param1"));   //warning is on this line     
_tcscpy(strApplicationName,_T("MyProgram.exe"));       //error is on this line

Вывод:

1>c:\documents and settings\X.X\my documents\sandbox\sample.cpp(52) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>        c:\program files\microsoft visual studio 8\vc\include\string.h(74) : see declaration of 'strcpy'

1>c:\documents and settings\X.X\my documents\sandbox\sample.cpp(53) : error C2664: 'strcpy' : cannot convert parameter 1 from 'LPCTSTR' to 'char *'

1>        Conversion loses qualifiers

Есть идеи, что это может значить?

Это мои заголовки:

iostream
windows.h
stdio.h
tchar.h
winnt.h

Ответы [ 4 ]

1 голос
/ 22 апреля 2010

LPCTSTR означает указатель const TCHAR. Первый аргумент _tcscpy ожидает неконстантный указатель TCHAR, т.е.

Попробуйте что-то вроде этого:

TCHAR strApplicationName[2000];
TCHAR strCommandLine[2000[;
_tcscpy(strCommandLine,_T("MyProgram.exe /param1"));   //warning is on this line     
_tcscpy(strApplicationName,_T("MyProgram.exe")); 

PS: Даже это, скорее всего, неправильно. Дайте нам больше контекста (больше окружающего кода), и мы сможем помочь вам лучше.

1 голос
/ 22 апреля 2010

LPCTSTR - это имя определения типа для указателя на константу строку. Вы не можете скопировать что-либо в постоянную строку.

Что касается предупреждений, это то, что компилятор Microsoft выпускает сам по себе. Если вы хотите использовать strcpy, отключите предупреждение. Само сообщение говорит вам, как это сделать.

0 голосов
/ 22 апреля 2010

Предупреждение говорит вам, что strcpy устарело (очевидно, _tcscpy вызывает strcpy).

Первый параметр _tcscpy - строка назначения, поэтому она не может быть постоянной. 'C' в LPCTSTR означает const.

0 голосов
/ 22 апреля 2010

strcpy копирует символы, пока не достигнет нулевого терминатора \0. Это может вызвать переполнение буфера и другие проблемы. strcpy_s копирует только указанное количество символов, поэтому вы можете сказать ему прекратить копирование до того, как он переполнит буфер. Подробнее см. http://msdn.microsoft.com/en-us/library/td1esda9(VS.80).aspx.

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