gpt4 book ai didi

c++ - 如何使用 visual c++ 中的 strncpy_s 函数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:02 25 4
gpt4 key购买 nike

我正在学习 C++ 的一些新知识,并且我试图从 Visual C++ 测试这个 strncpy_s 函数。但是,由于程序崩溃,我遇到了一些问题,我不知道发生了什么,但我确信这是一个非常愚蠢的问题。源代码是这样的:

#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <cstring>

int main()
{
char *p;
p=(char *)malloc(sizeof(char)*strlen("Hello!\n"));
strncpy_s(p,strlen("Hello!\n"),"Hello!\n",strlen("Hello!\n"));
std::cout << p;
std::cout << strlen("Hello!\n") << std::endl;
return 0;
}

正如我所说,我没有使用 std::string,因为我想尝试这个新功能并了解它是如何工作的。

最佳答案

我收回我的评论,我阅读了the documentation更仔细。您的代码正在传递无效参数,并正在调用无效参数处理程序。也许这就是正在发生的事情。即:

p=(char *)malloc(sizeof(char)*strlen("Hello!\n"));

这一行为 7 个字符分配了空间,这是字符串的长度,但是没有足够的空间容纳空终止符。 (这一般是错误的)

strncpy_s 的文档说:这些函数试图将 strSource 的前 D 个字符复制到 strDest,其中 D 是 count 和 strSource 的长度中的较小者。 如果这些 D 字符适合在 strDest(其大小以 numberOfElements 给出)并且仍然为空终止符留出空间,那么这些字符将被复制并附加一个终止空值; 否则,strDest[0] 设置为空字符并调用无效参数处理程序,如参数验证中所述。

您是否可能看到“无效参数处理程序”?

关于c++ - 如何使用 visual c++ 中的 strncpy_s 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com