添加了一段第三方代码,结果总是提示下面错误:
这种问题最容易想到vs安装不正确,丢失了这个DLL。尝试google下载了一个,丢到System32下,结果无济于事。错误更离谱:
于是决定差个究竟,步骤,逐段注释代码然后运行试错,最终问题定位在strdup函数的调用上。右键调至它定义的地方:
#if !__STDC__注意 __STDC__宏,说明这个函数不是标准C函数。
#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
#pragma push_macro("strdup")
#undef strdup
#endif
_Check_return_ _CRT_NONSTDC_DEPRECATE(_strdup) _CRTIMP char * __cdecl strdup(_In_opt_z_ const char * _Src);
#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
#pragma pop_macro("strdup")
#endif
#endif /* !__STDC__ */
这里列出了C标准库string.h中定义的内容:
<cstring> (string.h)ref: http://www.cplusplus.com/reference/cstring/
C Strings
This header file defines several functions to manipulate C strings and arrays.
Functions
Copying:
memcpyCopy block of memory (function )
memmoveMove block of memory (function )
strcpyCopy string (function )
strncpyCopy characters from string (function )
Concatenation:
strcatConcatenate strings (function )
strncatAppend characters from string (function )
Comparison:
memcmpCompare two blocks of memory (function )
strncmp Compare two strings (function )
strcoll Compare two strings using locale (function )
strncmp Compare characters of two strings (function )
strxfrm Transform string using locale (function )
Searching:
memchrLocate character in block of memory (function )
strchr Locate first occurrence of character in string (function )
strcspn Get span until character in string (function )
strpbrk Locate characters in string (function )
strrchr Locate last occurrence of character in string (function )
strspn Get span of character set in string (function )
strstr Locate substring (function )
strtok Split string into tokens (function )
Other:
memset Fill block of memory (function )
strerror Get pointer to error message string (function )
strlen Get string length (function )
Macros
NULL Null pointer (macro )
Types
size_t Unsigned integral type (type )
解决方法:自己实现这个函数!
char* x_strndup( const char *s1, size_t n)
{
char *copy= (char*)malloc( n+1 );
memcpy( copy, s1, n );
copy[n] = 0;
return copy;
};
char* x_strdup( const char* s1 )
{
char* copy = (char*)malloc(strlen(s1) + 1);
strcpy(copy, s1);
return copy;
}