strcpy 在 Windows 上编译,但在 Linux 上不编译
strcpy compiles on Windows but it doesn't on Linux
我正在学习 C++ 并尝试编写通用代码(抱歉,我不知道您如何调用可以在 Windows、Linux、MacOS 等上编译的代码) .
我写了函数 trimLeft:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const string rows = "rows:";
const string columns = "cols:";
const string data = "data:";
struct dimensions {
int rows;
int columns;
};
inline bool exists (const string& name) {
ifstream f(name.c_str());
return f.good();
}
string trimLeft(const string& input) {
if ((input.empty()) ||
((input.at(0) != ' ') && (input.at(0) != '\t')))
return input;
else {
char * tab2 = new char[input.length() + 1];
char *trimmed = new char[input.length() + 1];
strcpy(tab2, input.c_str());
bool skip = true;
int pos = 0;
for (unsigned int i = 0; i < (input.length() + 1); i++) {
if (skip) {
if ((tab2[i] == ' ') || (tab2[i] == '\t'))
continue;
else {
skip = false;
trimmed[pos] = tab2[i];
pos++;
}
}
else {
trimmed[pos] = tab2[i];
if (tab2[i] == '[=12=]')
break;
else
pos++;
}
}
string stringTrimmed(trimmed);
return stringTrimmed;
}
}
它在 Windows 上 编译 显示此警告:
warning C4996: 'strcpy': This function or variable may be unsafe.
Consider using strcpy_s instead. To disable deprecation, use
_CRT_SECURE_NO_WARNINGS.
但在Linux中,使用以下命令:
g++ FormatMatrix.cpp -o format
我得到:
error: ‘strcpy’ was not declared in this scope
每个操作系统 headers 是否不同?
注意:
请停止投反对票:我收到消息了。
作为特定编译器的实现细节,包含 strcpy
声明的 <cstring>
完全有可能被另一个 strcpy
包含(可能在包含树的更上层)header 你包括了。
为确保您的代码真正可移植且符合标准,请为每个 class 和您调用的函数包含 header 文件;永远不要想当然地认为你可以通过包含不同的东西来获得另一个 header 的功能。
我正在学习 C++ 并尝试编写通用代码(抱歉,我不知道您如何调用可以在 Windows、Linux、MacOS 等上编译的代码) .
我写了函数 trimLeft:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const string rows = "rows:";
const string columns = "cols:";
const string data = "data:";
struct dimensions {
int rows;
int columns;
};
inline bool exists (const string& name) {
ifstream f(name.c_str());
return f.good();
}
string trimLeft(const string& input) {
if ((input.empty()) ||
((input.at(0) != ' ') && (input.at(0) != '\t')))
return input;
else {
char * tab2 = new char[input.length() + 1];
char *trimmed = new char[input.length() + 1];
strcpy(tab2, input.c_str());
bool skip = true;
int pos = 0;
for (unsigned int i = 0; i < (input.length() + 1); i++) {
if (skip) {
if ((tab2[i] == ' ') || (tab2[i] == '\t'))
continue;
else {
skip = false;
trimmed[pos] = tab2[i];
pos++;
}
}
else {
trimmed[pos] = tab2[i];
if (tab2[i] == '[=12=]')
break;
else
pos++;
}
}
string stringTrimmed(trimmed);
return stringTrimmed;
}
}
它在 Windows 上 编译 显示此警告:
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
但在Linux中,使用以下命令:
g++ FormatMatrix.cpp -o format
我得到:
error: ‘strcpy’ was not declared in this scope
每个操作系统 headers 是否不同?
注意:
请停止投反对票:我收到消息了。
作为特定编译器的实现细节,包含 strcpy
声明的 <cstring>
完全有可能被另一个 strcpy
包含(可能在包含树的更上层)header 你包括了。
为确保您的代码真正可移植且符合标准,请为每个 class 和您调用的函数包含 header 文件;永远不要想当然地认为你可以通过包含不同的东西来获得另一个 header 的功能。