我对下面的代码有同样的问题。我尝试从文件中读取目的地。
void airplane::readFlight(void)
{
char temp[100];
ifstream f("date.txt");
if(!f)
{
cerr<<"Err";
//exit(EXIT_FAILUARE);
}
f>>nrFlight;
for (int i=0;i<nrFlight;i++)
{
f.getline(temp,99);
destination[i]=new char(strlen(temp)+1);
strcpy(destination[i],temp);
}
f.close();
}
我得到了这个错误:
invalid conversion from ‘char’ to ‘char*’
initializing argument 1 of ‘char* strcpy(char*, const char*)’
Invalid arguments 'Candidates are:char * strcpy(char *, const char *)
当我分配内存并尝试复制信息时,会出现此错误。 THX。
答案 0 :(得分:1)
如果你想拥有一个包含n个字符串元素的动态数组目的地(而不是未格式化的char数组),你应该首先声明它:
string* destination = new string [n];
然后你可以使用它:
char temp[100];
[...]
f.getline(temp,99);
destination[i] = temp;
不要忘记释放记忆:
delete[] destination;
destination = NULL;
如果要使用char数组,则destination必须是char数组的数组( - &gt; 2-dimensional)。声明:
char** destination = new char* [n];
用法:
char temp[100];
[...]
f.getline(temp,99);
destination[i] = new char [strlen(temp)+1];
strcpy(destination[i],temp);
释放记忆:
for(i=0 ; i<n ; i++)
{
delete[] destination[i];
destination[i] = NULL;
}
delete[] destination;
destination = NULL;
答案 1 :(得分:0)
应该是:
destination[i] = new char[strlen(temp)+1];
请参阅What's the difference between new char[10] and new char(10)
我怀疑你对destination
的声明也有问题。如果您将其添加到问题中,我将在此处添加更正。