有关函数“strcpy”规范的详细信息和可能的解决方案
Details about the specification of the function "strcpy'' and possible solution
我想将 行 中的字符串复制到 strs
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
#define N 100
void readAndWrite();
int main() {
readAndWrite();
return 0;
}
void readAndWrite() {
fstream in;
char* strs[100];
for (int i = 0; i < N; i++) {
strs[i] = (char*)calloc(128,sizeof(char));
}
in.open("A.in");
if (!in) {
cout << "fail" << endl;
exit(-1);
}
char line[128];
in.getline(line, 128);
**strcpy(strs[0], line);**
cout << "line:" << strs[0] << endl;
int count = 1;
while (!in.eof()) {
in.getline(line, 128);
**strcpy(strs[count++], line);**
cout << "line:" << strs[count - 1] << endl;
}
}
我收到一份报告说 strcpy 不安全,这表明
"strs [0]" may be "0": This does not conform to the specification of
the function "strcpy".
我怎样才能使我的代码工作
您忘记检查 calloc
的 return 值,这就是编译器告诉您它可能为零(空)的原因,以防没有足够的内存可供分配。
我想将 行 中的字符串复制到 strs
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
#define N 100
void readAndWrite();
int main() {
readAndWrite();
return 0;
}
void readAndWrite() {
fstream in;
char* strs[100];
for (int i = 0; i < N; i++) {
strs[i] = (char*)calloc(128,sizeof(char));
}
in.open("A.in");
if (!in) {
cout << "fail" << endl;
exit(-1);
}
char line[128];
in.getline(line, 128);
**strcpy(strs[0], line);**
cout << "line:" << strs[0] << endl;
int count = 1;
while (!in.eof()) {
in.getline(line, 128);
**strcpy(strs[count++], line);**
cout << "line:" << strs[count - 1] << endl;
}
}
我收到一份报告说 strcpy 不安全,这表明
"strs [0]" may be "0": This does not conform to the specification of the function "strcpy".
我怎样才能使我的代码工作
您忘记检查 calloc
的 return 值,这就是编译器告诉您它可能为零(空)的原因,以防没有足够的内存可供分配。