プログラムをそのまま実行すると、正常に動作します。ただし、whileループの直後にcout << "pp1>"までセクションを移動すると、2つのエラーが発生します。'char'から'constchar *'への無効な変換、および'char * strncpy(char *、const char *、size_t)'の引数2の初期化。そのコードを関数に移動できるように、何を変更する必要があるかについてのアイデア。オンラインまたはc++の本で、これを回避する方法を説明する適切な説明を見つけることができません。エラーがポインタの代わりにリテラルが必要であると言っていることは知っていますが、回避策を理解できません(1つありますか?)。
これが私のメインです。
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;
}