关于c ++:我很难将我的一些代码从main转移到函数

I am having difficulty moving some of my code from main to a function

当我按原样运行程序时,它工作正常。但是,当我在while循环之后移动该部分直到cout<"pp1>"时,我会得到两个错误。从"char"到"const char*"的转换无效,并且正在初始化"char*strncpy(char*,const char*,size_t)"的参数2。我需要改变的任何想法,这样我就可以把代码转移到一个函数中。我找不到一个很好的解释在线或我的C++书籍,解释了这一点。我知道这个错误是说它需要一个文本而不是指针,但无法找到解决方法(有吗?).

这是我的主菜。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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;
}
  }

}

这是我试过的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}

取消引用returnArray并尝试返回char将不起作用,因为:

  • 您将只返回字符串的第一个字符。
  • strncpy函数将不接受它(这就是您得到这些错误的原因)。
  • 您需要一种方法来释放char*占用的堆分配内存。
  • 将函数定义从char infile()更改为const char* infile(),只返回指针。理想情况下,这会将填充的数组作为一个const char*字符串返回,您可以成功地将它传递给strncpy。此外,当您完成它时,您需要在它上调用delete [],以防止内存泄漏。


    首先,您的infile函数返回一个char,而strncpy需要一个constchar*,这基本上意味着它需要一个c字符串(或char数组)。


    天哪,修正代码(让代码看起来更干净,比如缩进),你可能会得到更多的响应。我看到两件事:while循环的方括号和现在的函数返回类型是一个char,您要返回char*。