gpt4 book ai didi

C++ strcpy_s 在复制到新的 char 数组时抛出错误

转载 作者:行者123 更新时间:2023-11-27 23:40:24 26 4
gpt4 key购买 nike

我的目标是生成一个具有正确数量点的新数组,并将一个旧字符数组复制到其中。

使用strcpy_s时,抛出异常。我不明白为什么会抛出异常,指出缓冲区太小。我不能使用 vector 或字符串。如何使用 strcpy_s 和 char 数组解决此问题?

    char str[4] = { 't', 'e', 's', 't' };
int allocated = 4;
char * reservedString = new char[allocated]();
strcpy_s(reservedString, allocated, str);

编辑:更改我的代码以将 1 添加到数组中会出现相同的“缓冲区太小”异常。

char str[4] = { 't', 'e', 's', 't' };
int allocated = 4;
char * reservedString = new char[allocated+1]();
strcpy_s(reservedString, allocated, str);

编辑 2:正如有人评论的那样,str 的大小需要设置为 5 并包含一个空终止符。谢谢,这解决了我的问题。

更新代码:

    char str[5] = { 't', 'e', 's', 't', '\0'};
int allocated = 5;
char * reservedString = new char[allocated]();
strcpy_s(reservedString, allocated, str);

最佳答案

您需要五个字符来存储以零结尾的字符串"test"。您的 str 数组只有四个字符,没有零终止符。如果你想要一个零终止符,像这样声明它:

char str[] = "test";

那你当然需要

int allocated = 5;

然后:

char * reservedString = new char[allocated];
strcpy_s(reservedString, allocated, str);

关于C++ strcpy_s 在复制到新的 char 数组时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553412/

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