从“ wcslen”替换为“ strnlen_s”时,用 <Switch location={location}>
{renderRoutes(routes, { ...someParams })}
</Switch>
进行排版的正确方法是吗?
在下面的功能中,我要替换
const char*
使用
if (szPath[wcslen(szPath) - 1] != L'\\')
下面是代码段:
if (szPath[strnlen_s((const char*)szPath, sizeof(szPath)) - 1] != L'\\')
答案 0 :(得分:2)
简短的回答:不,这绝对是 不是 的正确方法!
原因:简单地将wchar_t
字符串指针转换为char
指针不会改变字符串的内容。因为宽字符串的16位成分可能包含其“高字节”恰好为零的元素,所以这将表示该字符串过早终止。另外,即使不是这种情况,返回的值strnlen_s
也会是您想要的值的两倍,因为它将把每个16位wchar_t
视为两个8位char
值。
解决方案:正如 Mathieu 所说,请改用wcsnlen_s
!始终对wchar_t
字符串使用wcs ...函数,对char
字符串始终使用str ...函数。
编辑:另外,我在您的代码中注意到您使用了_tcscat_s
。在未定义为_tcs…
的字符串上使用TCHAR
函数时要小心-因为TCHAR
的计算结果为char
或wchar_t
,具体取决于您的编译/构建设置。因此,添加:…对于TCHAR
字符串始终使用_tcs…函数!