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