當我按原樣運行程序時,它工作正常。但是,當我在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;
}
謝謝,我總是想知道什麼const *函數被用於,永遠無法找到一個好的解釋。 – Aaron 2012-04-15 03:05:09
我不是百分百肯定如何擺脫內存泄漏,因爲我從一個函數傳遞它。會寫delete [] infile();訣竅嗎?主要沒有returnArray – Aaron 2012-04-15 03:09:36
啊是的,首先創建一個'const char *'變量,它接收'infile()'的輸出。然後將這個變量作爲參數傳遞給'strncpy'。然後你可以調用'delete []'。 – 2012-04-15 03:15:03