如何修复与Yacc中使用的strlen()相关的警告消息?

时间:2010-12-25 22:44:23

标签: yacc bison lex

我需要你的帮助。基本上,我在使用gcc编译时遇到此警告消息,并且无法推断出错误: 以下是详细信息:

我收到的警告信息按字面意思如下:

y.tab.c:在函数'yyparse'中:y.tab.c:1317
警告:内置函数'strlen'的不兼容隐式声明

我的Lex档案如下:

    %{
        #include <stdio.h>
        #include <stdlib.h>
        #include <ctype.h>
        #include "y.tab.h"

        void yyerror(const char*); 

        char *ptrStr;

   %}

        %START nameState

        %%

        "Name:"                      {       BEGIN nameState;          }

        <nameState>.+   {
                               ptrStr = (char *)calloc(strlen(yytext)+1, sizeof(char));
                               strcpy(ptrStr, yytext);
                               yylval.sValue = ptrStr;

                                return sText;
                        }
        %%

        int main(int argc, char *argv[]) 
        {
            if ( argc < 3 )
            {
                printf("Two args are needed: input and output");
            }

            else 
            {
                yyin = fopen(argv[1], "r");
                yyout = fopen(argv[2], "w");
                yyparse();
                fclose(yyin);
                fclose(yyout);
            }
            return 0;
        }

我的Yacc文件如下:

 %{
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include "y.tab.h"

    void yyerror(const char*); 
    int yywrap(); 

    extern FILE *yyout;

    %}

    %union 
    { 
        int iValue;     
        char* sValue;       
    }; 

    %token <sValue> sText
    %token nameToken 

    %%

    StartName: /* for empty */
              | sName
          ;

    sName:
         sText  
         { 
                fprintf(yyout, "The Name is: %s", $1);
                fprintf(yyout, "The Length of the Name is: %d", strlen($1)); 
         }
         ;    
    %%

    void yyerror(const char *str) 
    {
        fprintf(stderr,"error: %s\n",str);
    }

    int yywrap()
    {
        return 1;
    } 

*我想知道如何删除此警告消息。请高度赞赏任何建议!

提前致谢。

1 个答案:

答案 0 :(得分:5)

包括 string.h 那是strlen&amp;朋友们被宣布。