'strcpy'错误和警告

时间:2010-04-22 17:20:06

标签: c++ visual-c++

我收到了'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 个答案:

答案 0 :(得分:1)

LPCTSTR表示const TCHAR指针。 _tcscpy的第一个参数需要一个非常量TCHAR指针,即LPTSTR

尝试这样的事情:

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

PS:即使这很可能是不正确的。给我们更多背景信息(更多周边代码),我们将能够更好地帮助您。

答案 1 :(得分:1)

LPCTSTR是指向常量字符串的指针的typedef名称。您不能将任何内容复制到常量字符串。

至于警告,这是Microsoft编译器自行提出的。如果要使用strcpy,请禁用警告。消息本身告诉您如何操作。

答案 2 :(得分:0)

strcpy复制字符,直到它到达\0 null终止符。这可能导致缓冲区溢出和其他不良。 strcpy_s仅复制指定数量的字符,因此您可以告诉它在超出缓冲区之前停止复制。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/td1esda9(VS.80).aspx

答案 3 :(得分:0)

警告告诉您strcpy已被弃用(显然_tcscpy次调用strcpy)。

_tcscpy的第一个参数是目标字符串,因此它不能是常量。 LPCTSTR中的“C”表示const