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; } |
取消引用
将函数定义从
首先,您的infile函数返回一个char,而strncpy需要一个constchar*,这基本上意味着它需要一个c字符串(或char数组)。
天哪,修正代码(让代码看起来更干净,比如缩进),你可能会得到更多的响应。我看到两件事:while循环的方括号和现在的函数返回类型是一个char,您要返回char*。