这是一个包含变量
的结构 struct theFile{
FILE *fPointer;
char *fileItems[];
int count;
}myFile;
我想知道为什么当我有这样的代码时,我从“char”到“const char *”的错误无效转换
void saveFile(){
myFile.fPointer = fopen("mileage.txt", "r");
char item;
int i = 0;
while (!feof(myFile.fPointer)){
item = fgetc(myFile.fPointer);
while (item != ',' || item != ' '){
myFile.fileItems[i] = (char*)malloc(sizeof(char));
strcpy(myFile.fileItems[i], item);
i++;
item = fgetc(myFile.fPointer);
}
myFile.count++;
}
}
但是当我将项目作为指针
时,我没有错误 void saveFile(){
myFile.fPointer = fopen("mileage.txt", "r");
char *item;
int i = 0;
while (!feof(myFile.fPointer)){
*item = fgetc(myFile.fPointer);
while (*item != ',' || *item != ' '){
myFile.fileItems[i] = (char*)malloc(sizeof(char));
strcpy(myFile.fileItems[i], item);
i++;
*item = fgetc(myFile.fPointer);
}
myFile.count++;
}
}
答案 0 :(得分:1)
我看到的问题:
问题1:
struct theFile{
FILE *fPointer;
char *fileItems[];
int count;
}myFile;
无效。灵活的数组成员必须是struct
的最后一个成员。使用
struct theFile{
FILE *fPointer;
int count;
char fileItems[]; // This is an array of char not an array of char*.
}myFile;
代替。
问题2:
strcpy(myFile.fileItems[i], item);
无效,因为第二个参数的类型为char
而不是char*
。这就是编译器告诉你的内容。
问题3:
您需要更新代码,以便灵活地将输入数据添加到myFile
。
void saveFile()
{
int item;
int i = 0;
myFile.fPointer = fopen("mileage.txt", "r");
// Deal with error condition.
if ( myFile.fPointer == NULL )
{
// Add an appropriate error message.
printf("Unable to open '%s' for reading.\n", "mileage.txt");
return;
}
myFile.fileItems = malloc(i+1);
while ((item = fgetc(myFile.fPointer)) != EOF )
{
if (item != ',' || item != ' ')
{
myFile.fileItems = realloc(myFile.fileItems, i+1);
myFile.fileItems[i] = item;
i++;
}
}
myFile.count = i;
// You need to call fclose(myFile.fPointer) somewhere.
// I am not sure what's the best place in your program to do that.
// This function might as well be that place.
fclose(myFile.fPointer);
myFile.fPointer = NULL;
}
问题4:
名称saveFile
似乎有点误导,因为您没有将任何内容保存到文件中。 readFile
听起来对我来说是一个更好的名字。
答案 1 :(得分:0)
strcpy是一个char *参数。在第一种情况下,您传递的是字符变量。所以它不接受并抛出错误。
char *strcpy(char *dest, const char *src);
因此,当您使用指针时,它会接受它。
答案 2 :(得分:0)
您将单个字符与字符串混淆。此外,两个版本的代码都在写入未分配的内存。
我没有尝试详细解释这一点,而是建议你回到你从中学习C的书,因为你已经误解了一些非常基本的东西。这里。