添加了一段第三方代码,结果总是提示下面错误:
这种问题最容易想到vs安装不正确,丢失了这个DLL。尝试google下载了一个,丢到System32下,结果无济于事。错误更离谱:
于是决定差个究竟,步骤,逐段注释代码然后运行试错,最终问题定位在strdup函数的调用上。右键调至它定义的地方:
#if !__STDC__
#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__ */注意 __STDC__宏,说明这个函数不是标准C函数。
这里列出了C标准库string.h中定义的内容:
<cstring> (string.h) C Strings This header file defines several functions to manipulate C strings and arrays. Functions Copying: memcpy Copy block of memory (function ) memmove Move block of memory (function ) strcpy Copy string (function ) strncpy Copy characters from string (function ) Concatenation: strcat Concatenate strings (function ) strncat Append characters from string (function ) Comparison: memcmp Compare 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: memchr Locate 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 )ref:http://www.cplusplus.com/reference/cstring/
解决方法:自己实现这个函数!
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;
}
计算机丢失MSVCR90.dll问题,布布扣,bubuko.com
原文地址:http://blog.csdn.net/ryfdizuo/article/details/30229325