我是C ++的新手,我最近开始使用字符串,但我遇到strcpy_s()
的问题。在Visual Studio中,如果我使用旧的strcpy()
,它说它不安全,在网上阅读了更多内容后我发现了原因,所以我开始不再使用strcpy()
。
在strcpy()
中,我必须告诉它缓冲区的大小,但是我有问题,因为如果我使用strlen()
它说缓冲区太小了,即使我放{{1}所以我发现了另一个名为a=strlen(string)+1
的问题,现在我对缓冲区相关的错误没有更多问题,但是我又遇到了另一个错误。
代码:
size_t()
答案 0 :(得分:2)
如评论所述,首选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;
}