_strset_s 崩溃

发布于 2024-11-08 16:09:38 字数 199 浏览 0 评论 0 原文

以下代码在执行 _strset_s 时崩溃,我在 _strset_s 中给出了 80 作为长度。可能是什么问题?我启用了运行时堆栈帧检查选项 /RTCs

char strToken[80];
_strset_s(strToken, 80, '\0' );

The following code crashes while executing _strset_s I have given 80 as length in _strset_s. What could be the problem?. I enabled run time stack frame checkb option /RTCs

char strToken[80];
_strset_s(strToken, 80, '\0' );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

肤浅与狂妄 2024-11-15 16:09:38

您可以让编译器使用以下命令进行填充

char strToken[80] = {0}; 

。这会将字符串的所有字节清零。

You can let the compiler do the filling by using

char strToken[80] = {0}; 

This will zero all the bytes of the string.

背叛残局 2024-11-15 16:09:38

根据 MSDN。由于您的字符串没有初始化为任何内容,因此它违反了这个不变量。

如果 str 是空指针,或者 size 参数小于或等于 0,或者传入的块不是以 null 终止,则调用无效参数处理程序

默认“无效参数”处理程序”将崩溃,再次来自 MSDN

默认的无效参数会调用 Watson 崩溃报告,这会导致应用程序崩溃并询问用户是否要将故障转储加载到 Microsoft 进行分析。

所以我会先尝试 Null 终止 strToken (或者更好地按照 Bo Persson 在他的回答中建议的那样)

char strToken[80];
strToken[79] = '\0';
_strset_s(strToken, 80, '\0' );

The input to _strset_s has to be null terminated according to MSDN. Since your string is not initialized to anything, it violates this invariant.

If str is a null pointer, or the size argument is less than or equal to 0, or the block passed in is not null-terminated, then the invalid parameter handler is invoked,

The default "invalid parameter handler" is to crash, again from MSDN:

The default invalid parameter invokes Watson crash reporting, which causes the application to crash and asks the user if they want to load the crash dump to Microsoft for analysis.

So I'd try Null terminating strToken first (or better yet do what Bo Persson suggests in his answer)

char strToken[80];
strToken[79] = '\0';
_strset_s(strToken, 80, '\0' );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文