0

编写以下代码以从一个文件中选择一些数据并复制到另一个文件中,但我在通知位置收到错误“分配中的类型不兼容”。我无法弄清楚导致此错误的原因。我很高兴得到您的帮助。

#include <stdio.h>
#include <stdlib.h>

int main()
{
     FILE *myfile;
     myfile=fopen("write.txt","a");

char *name;
int id,i=0,check,*w,n=0;
if(myfile)
{
  do
  {
    printf("Enter ID and Name of the student\n");
    scanf("%d%s",&id, name);
    fprintf(myfile,"%d$ %s@", id, name);
    printf("Are there any more students [y/n]");
  }while(getch()=='y');
  fclose(myfile);
}
printf("Do you want to shortlist the students [y/n]?");
if(getch()=='y')
{
    myfile=fopen("write.txt","r");
    while(check!=EOF)
    {
        check=getc(myfile);
        i++;
        if(check=='%')
            n++;
    }
    fclose(myfile);

    myfile=fopen("write.txt","r");

    int x[i-1];
    char car[n][20];

    int yolo,y=0,q=0,j,h,temp;

    for(j=0;j<i;j++)
    {
        x[j]=getc(myfile);
        if(x[j]=='$')
        {
            w[q]=x[j-1];
            yolo=temp=j;
            q++;
        }
        else
        if(x[j]=='@')
        {
            yolo++;
            for(h=0;h<j-temp;h++)
                car[y]=(char)x[yolo]; // ERROR
            y++;
        }
    }
    fclose(myfile);
    //char data= new char[i++];
    //fscanf();
    myfile=fopen("shortlisted.txt","a");

    if(myfile)
    {
        printf("Type the ID of the student you want to shortlist:\n");
        scanf("%d",id);
    }
}
else
    printf("The file you specified doesn't exists");
printf("Hello world!\n");
return 0;

}

这段代码目前需要做一些工作,但我想在完成代码之前删除所有可能的错误

问候

4

2 回答 2

2

car[y] 是一个字符数组,而 (char)x[yolo] 只是一个字符。您正在尝试将一个 char 分配给一个字符数组。

如果要将 car[y] 中的第一个字符设置为 x[yolo] 的值,只需使用 car[y][0] = (char)x[yolo]。请注意,这不会将 x[yolo] 转换为 int 的 char 表示形式。要获得整数的 char * 表示,您需要使用itoa。但即便如此,直接分配也行不通:您必须使用strcpy

编辑:我注意到使用sprintf比使用 itoa 更好。

于 2012-09-09T06:31:00.467 回答
0

的类型car[y]char[20](即 20 个字符的数组),你尝试在里面写一个char。这是不正确的。

您可能想要使用字符串函数,如snprintfor strncpy(可能使用一些指针算法)

您应该在编译器上启用所有警告和调试信息(即用于gcc -Wall -Wextra -g在 Linux 上编译),并学习使用调试器(即gdb在 Linux 上)

于 2012-09-09T06:31:36.093 回答