«назначение делает целое число из указателя без приведения» предупреждение в c - PullRequest
0 голосов
/ 18 апреля 2010
#include<stdio.h>

/* this is a lexer which recognizes constants , variables ,symbols, identifiers , functions , comments and also header files . It stores the lexemes in 3 different files . One file contains all the headers and the comments . Another file will contain all the variables , another will contain all the symbols. */

int main()
{
    int i=0,j;
    char a,b[20],c[30];
    FILE *fp1,*fp2;
    c[0]='"if";
    c[1]="then";
    c[2]="else";
    c[3]="switch";
    c[4]="printf";
    c[5]="scanf";
    c[6]="NULL";
    c[7]="int";
    c[8]="char";
    c[9]="float";
    c[10]="long";
    c[11]="double";
    c[12]="char";
    c[13]="const";
    c[14]="continue";
    c[15]="break";
    c[16]="for";
    c[17]="size of";
    c[18]="register";
    c[19]="short";
    c[20]="auto";
    c[21]="while";
    c[22]="do";
    c[23]="case";
    fp1=fopen("source.txt","r"); //the source file is opened in read only mode which will passed through the lexer
    fp2=fopen("lext.txt","w");  
    //now lets remove all the white spaces and store the rest of the words in a file 


    if(fp1==NULL)
    {
        perror("failed to open source.txt");
        //return EXIT_FAILURE;
    }
    i=0;
    while(!feof(fp1))
    {


        a=fgetc(fp1);

        if(a!=' ')
        {
            b[i]=a;

        }
        else
        {
            for (j=0;j<23;j++)
        {
            if(c[j]==b)
            {
                fprintf(fp2, "%.20s\n", c[j]);
                continue ;
                        }
            b[i]='\0';
            fprintf(fp2, "%.20s\n", b);
            i=0;
            continue;
        }
    //else if 
    //{

        i=i+1;                  

        /*Switch(a)
        {
            case EOF :return eof;
            case '+':sym=sym+1;

            case '-':sym=sym+1;

            case '*':sym=sym+1;

            case '/':sym=sym+1;

            case '%':sym=sym+1;

            case '
        */
    }
fclose(fp1);
fclose(fp2);
return 0;
}

Это мой c-код для лексического анализа ... он дает предупреждения, а также ничего не записывает в файл lext ..

Ответы [ 4 ]

7 голосов
/ 18 апреля 2010

char c[30]; объявляет массив из 30 char, то есть 30-байтовый фрагмент памяти. Таким образом, присвоение, подобное c[0] = "if";, пытается поместить указатель в целое число char.

То, что вы, вероятно, хотите, есть char* c[30]; - массив из 30 указателей .

2 голосов
/ 18 апреля 2010

C не поддерживает присвоение массивов - вы не можете сказать что-то вроде:

c[0]='"if";

в C. И, кажется, в вашем коде есть посторонняя цитата.

Все ваши посты здесь сегодня были о самых простых вещах. Какой учебник по С вы используете, где такие вещи не рассматриваются?

0 голосов
/ 18 апреля 2010

Как я уже сказал здесь (еще один ваш вопрос),

c - это char*, а c[0], c[1], c[2], ... - char. То, что вы пытаетесь сделать, это присвоить char* (например, «если») для char (например, c [0]).

0 голосов
/ 18 апреля 2010

Также вы сравниваете строки как:

if(c[j]==b)

вы должны использовать strcmp для этого как:

if(! strcmp(c[j],b))

Печально, что вы не последовали ни одному из предложений по вашему предыдущему вопросу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...