当我按原样运行程序时,它运行正常。然而,当我在while循环之后移动该部分直到cout<<“pp1>”我收到两个错误。从'char'到'const char *'的无效转换以及初始化'char * strncpy(char *,const char *,size_t)'的参数2。我需要改变的任何想法,以便我可以将该代码移动到一个函数。我无法在网上找到一个很好的解释,或者在我的c ++书中找到解释方法。我知道错误是说它需要一个文字而不是一个指针,但是无法找出解决方法(有一个吗?)。
这是我的主要内容。
int main(){
char cmd_str[500];
int length=0;
bool cont=true;
while(cont){
// strncpy(cmd_str, infile(), 500 - 1); this line causes the two errors
// cmd_str[500 - 1] = '\0';
mode_t perms=S_IRUSR;
int i=0;
int fd = open("text.txt",O_RDONLY , perms);
char *returnArray;
cout<<fd<<endl;
if(fd<0){
perror( strerror(errno));
} else{
ifstream readFile;
readFile.open("text.txt");
readFile.seekg (0, ios::end);
int length = readFile.tellg();
readFile.seekg (0, ios::beg);
returnArray=new char[i];//memory leak need to solve later
readFile.getline(returnArray,length);
cout<<returnArray<<endl;
strncpy(cmd_str, returnArray, length - 1);
cmd_str[length - 1] = '\0';
}
cout<<"pp1>";
cout<< "test1"<<endl;
// cin.getline(cmd_str,500);
cout<<cmd_str<<endl;
cout<<"test2"<<endl;
length=0;
length= shell(returnArray);
cout<<length<<endl;
if(length>=1)
{
cout<<"2"<<endl;
}
else{
cont=false;
}
}
}
这是我尝试过的功能
char infile()
{
mode_t perms=S_IRUSR;
int i=0;
int fd = open("text.txt",O_RDONLY , perms);
char *returnArray;
cout<<fd<<endl;
if(fd<0){
perror( strerror(errno));
}else{
ifstream readFile;
readFile.open("text.txt");
//int length = readFile.tellg();
readFile.seekg (0, ios::end);
int length = readFile.tellg();
readFile.seekg (0, ios::beg);
returnArray=new char[i];//memory leak need to solve later
readFile.read(returnArray,length);
readFile.getline(returnArray,length);
}
return *returnArray;
}
答案 0 :(得分:2)
取消引用returnArray
并尝试返回char
无法正常工作,因为:
strncpy
函数不接受它(这就是您收到这些错误的原因)。char*
占用的堆分配内存。将您的函数定义从char infile()
更改为const char* infile()
并仅返回指针。理想情况下,这将填充数组作为const char*
(C样式字符串)返回,您可以成功传递给strncpy
。此外,当您完成它时,您需要在其上调用delete []
(以防止内存泄漏)。
答案 1 :(得分:0)
神圣的废话,修复代码(让它看起来更干净,即缩进),你可能会得到更多的回应。我看到的两件事:while循环的括号,现在函数return-type是一个char,你想要返回一个char *。
答案 2 :(得分:0)
首先,你的infile函数返回一个char,而strncpy需要一个const char *,这基本上意味着它需要一个c字符串(或char数组)。