0

当我按原样运行程序时,它工作正常。但是,当我在 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; 
}
4

3 回答 3

2

取消引用returnArray并尝试返回 achar行不通的,因为:

  1. 您将只返回字符串的第一个字符。
  2. strncpy函数将不接受它(这就是您收到这些错误的原因)。
  3. 您需要一种方法来释放char*占用的堆分配内存。

char infile()将您的函数定义从to更改为const char* infile()仅返回指针。理想情况下,这会将填充的数组作为const char*(C 样式的字符串)返回,您可以将其strncpy成功传递给该数组。此外,当你完成它时,你需要调用delete []它(以防止内存泄漏)。

于 2012-04-15T02:55:48.257 回答
0

废话,修复代码(让它看起来更干净,即缩进),你可能会得到更多的回应。我看到了两件事:while 循环的括号,现在函数返回类型是单个字符,而您正在寻找返回 char*。

于 2012-04-15T02:37:04.010 回答
0

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

于 2012-04-15T03:03:07.727 回答