Visual Studio 2013 strcpy_s和单词的大小

时间:2015-07-21 13:51:38

标签: c++ visual-studio-2013 strcpy size-t

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

Error Link

代码:

size_t()

1 个答案:

答案 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;
}