计算机丢失MSVCR90.dll问题

添加了一段第三方代码,结果总是提示下面错误:


这种问题最容易想到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;
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值