在VS2010中,有众多的系统函数名都追加了_s,比如scanf_s(),strcmp_s()等等,但在VC6.0中使用的还是传统的函数名,如果你希望早期的编译程序能识别新的函数原型,就像要求清朝的科学家能够上网冲浪一样不和情理。
● Ansi:strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource); ● Unicode:wcscpy_s(wchar_t *strDestination, size_t numberOfElements, const wchar_t *strSource); ● 通用函数:_tcscpy_s(TCHAR *strDestination, size_t numberOfElements, const TCHAR *strSource); number...
wcscpy()即为strcpy()的宽字符版本(Unicode),与_T类似的,Visual C++提供了类似的同名函数:ifdef UNICODE define _tcscpy wcscpy else define _tcscpy strcpy endif wcscpy_s的作用和前面一样,不过是MS搞出来的带有安全机制的,更安全的版本。。。
这种简单的方法可以移植到Unicode编码下使用_getws_s的情况,这个函数也需要得知以字节为单位的缓冲区长度。 正如我所提到的,另外一个接受安全检查的常用函数strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为,正如我...
1. gets_s()代替gets() 2.strcpy_s()来代替strcpy() 3.strncpy_s()代替strncpy() 4.sprintf_s()代替sprintf() 5.CString::Format(_T("字符转"))代替CString::Format("字符转") 6.strcat_s()代替strcat() 7.fopen_s()代替fopen() 8._vsnprintf_s()代替_vsnprintf() ...
函数声明不匹配。在VS2010中,有众多的系统函数名都追加了_s,如果strcpy后面没有加上后缀是无法被识别的。
上面的strcpy会产生这个警告: 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. 这是因为VC从2005版本开始,微软引入了一系列的安全加强的函数来增强CRT(C运行时),这里...
VC 中类型转换(CString,TCHAR,string) CString->TCHAR*的转化可以用函数GetBuff() 函数原型为:LPTSTRGetBuffer(intnMinBufLength); CStringstr("CString"); TCHAR*szMsg=newTCHAR[100]; //其参数为CString字符串的长度 szMsg=str.GetBuffer(str.GetLength()); str.ReleaseBuffer(); delete[]szMsg; szMsg=...
strcpy_s( tmp, _countof (tmp), "equal to" );printf( " _stricmp: String 1 is %s string 2\n", tmp );} Compare strings:The quick brown dog jumps over the lazy fox The QUICK brown dog jumps over the lazy fox strcmp: String 1 is greater than string 2 _stricmp:...
大多数这些不建议使用的函数如果使用不当,将会导致缓冲区溢出或其他安全问题,这些函数如:strcpy、strcat等等。这些函数新的安全版本都在函数名后加了一个_s后缀,以方便识别,如strcpy_s、wcscpy_s、mbscpy_s、calloc_s和strcat_s这些函数。 如果想继续使用老版本、非安全的函数,可在源代码开始处加上#define value...