我看到了一段时间前做过的旧的简单算法。我使用dev-c++进行了此操作,但是现在我在Visual Studio中对其进行了编译,因此无法正常工作。 Visual Studio编译器说:'strcpy':此函数或变量可能不安全。考虑改用strcpy_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。 (第17行)
在这个简单的项目中,您将输入一个短语,然后将其翻译成十六进制(每个字符)。
那么为什么dev-c++不会告诉我呢?我有没有犯错?还是不行。代码还可以吗?我想了解一下,因为这不是我第一次收到该错误。
代码执行示例:
请插入一个短语:世界您好!
字符串-hello world!-以十六进制转换为
68 65 6c 6c 6f
20 77 6f 72 6c
64 21
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string phrase;
char* chArray;
cout << "Pls insert a phrase:\t";
getline(cin, phrase);
chArray = new char[phrase.size() + 1];
strcpy(chArray, phrase.c_str()); //THE ERROR IS HERE!
cout << "The string -" << phrase << "- converted in hex is\n";
for (int i = 1; i < static_cast<int>(phrase.size() + 1); i++)
{
int ch = (int)chArray[i-1];
cout << setbase(16) << ch << " ";
if (i % 5 == 0)
cout << "\n";
}
return 0;
}
最佳答案
使用任何“不安全”字节复制功能时,都会收到此警告。它主要针对MSVC。
要解决此问题,请使用 strcpy_s
,它要求您还传递要复制的最大字节数(应为目标缓冲区的大小)。这样可以防止缓冲区溢出。
strcpy_s(chArray, phrase.size()+1, phrase.c_str());
就是说,在C++中使用
std::string
可以更轻松地完成所有这些工作