gpt4 book ai didi

c++ - Visual Studio 2013 strcpy_s 和一个字的大小

转载 作者:行者123 更新时间:2023-11-30 03:50:59 26 4
gpt4 key购买 nike

我是 C++ 的新手,最近开始使用字符串,但我在使用 strcpy_s() 时遇到了问题。在 Visual Studio 中,如果我使用旧的 strcpy(),它会说它不安全,在网上阅读更多内容后,我发现了原因,所以我开始不再使用 strcpy() 。在 strcpy() 中,我必须告诉它缓冲区的大小,但是我遇到了问题,因为如果我使用 strlen() 它说缓冲区是太小了,即使我放了 a=strlen(string)+1,所以我发现了另一个叫做 size_t() 的,现在我没有更多的问题了与缓冲区相关的错误,但我遇到了另一个错误。

Error Link

代码:

#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;
int main()
{
int i, size_of_word;
char word[202];
cin.get(word, 201, '\n');
cin.get();
i = 0;
while (i < strlen(word) - 1)
{
if (word[i] == word[i + 1])
{
size_of_word = size_t(word + i ) + 1;
strcpy_s(word + i + 2, size_of_word, word + i);
}
else
{
i++;
}
}

cout << word;
}

最佳答案

如评论所述,更喜欢 std::string 而不是 char 数组,它们更易于使用。

如果您不能使用它们:

strcpy_s 第二个参数是目标缓冲区的大小,与字符串的大小不同。

word 缓冲区大小为 202,因此,word + i + 2 缓冲区大小为 202-i-2,而不是 size_of_word

size_of_word = size_t(word + i ) + 1;size_of_word 设置为 [address of word buffer] + i + 1没有任何意义...

这应该可行(我将缓冲区大小移动到一个变量以使其更易于更改):

#include <iostream>
#include <cstring>
#include<conio.h>
using namespace std;
int main()
{
int i;
static const size_t bufferSize = 202;
char word[bufferSize];
cin.get(word, bufferSize - 1, '\n');
cin.get();
i = 0;
while (i < strlen(word) - 1)
{
if (word[i] == word[i + 1])
{
strcpy_s(word + i + 2, bufferSize - i - 2, word + i);
}
else i++;
}

cout << word;
}

关于c++ - Visual Studio 2013 strcpy_s 和一个字的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541073/

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