2013-03-26 39 views
2

我有C++这是工作的罚款用gcc 4.1.2版20071124但gcc版本给予警告4.4.6 20120305.请建议的一段代码:警告:从字符串常量弃用转换为ACHAR * A

代码:

WriteLog(sgca_log_file,"Exception occured in load_sgsn_cdr_arch \n",true); 

警告:deprecated conversion from string constant to 'char*'

其中WRITELOG是打印在指定的日志文件的日志功能:

void WriteLog(const char* fileName, const char* pLogMsg, bool pTimeRequired) 
{ 
    FILE *lFileDesc = NULL; 
    char lMessage[1000]; 
    char lBuffer[1000]; 
    char lDate[1000]; 
    time_t lRawtime; 
    struct tm * lTimeinfo; 
    char LoaderLogFile[80]; 
    char loaderHome[30]; 
    char * pch; 
    char szdir[30]; 

    try 
    { 
     memset(LoaderLogFile, '\0',80); 
     memset(lMessage, '\0', 1000); 
     memset(lBuffer, '\0', 1000); 
     memset(lDate, '\0', 1000); 

     time(&lRawtime); 
     lTimeinfo = localtime(&lRawtime); 
     strftime(lBuffer, 1000, "| %x - %X | ", lTimeinfo); 
     strftime(lDate, 1000, "%Y_%m_%d", lTimeinfo); 

     if (!strcmp(fileName,"default")) 
     { 
      strcpy(loaderHome, getenv("LOADER_HOME")); 
      sprintf(LoaderLogFile,"%s/log/Loader_%s.log",loaderHome,lDate); 
     } 

     else 
      sprintf(LoaderLogFile,"%s_%s.log",fileName,lDate); 

     if (!file_exists(LoaderLogFile)) 
     { 
      if((pch=strrchr(LoaderLogFile,'/')) != '\0') 
      { 
       strncpy(szdir,LoaderLogFile,pch-LoaderLogFile+1); 
       if(file_exists(szdir)) 
       { 
        lFileDesc = fopen(LoaderLogFile, "a"); 
        fflush(lFileDesc); 
        fclose(lFileDesc); 
       } 
       else 
       { 
        sprintf (lBuffer,"Directory %s doesnot exist. Please check the configurations. Stopping the System. \n",szdir); 
        WriteLog("default",lBuffer,true); 
        StopSystem("default",lBuffer); 
       } 
      } 
      else 
      { 
       sprintf (lBuffer,"Invalid log file name %s \n",LoaderLogFile); 
       WriteLog("default",lBuffer,true); 
       StopSystem("default",lBuffer); 
      } 

     } 

     //! Check whether the timestamp also has to be written in the log file 
     if(pTimeRequired) 
     { 
      sprintf(lMessage, "%s%s\n", lBuffer, pLogMsg); 
     } 
     else 
     { 
      sprintf(lMessage, "%s\n", pLogMsg); 
     } 

     //! Open the log file in append mode 
     lFileDesc = fopen(LoaderLogFile, "a"); 
     if(lFileDesc != NULL) 
     { 
      fprintf(lFileDesc, lMessage); 
      fflush(lFileDesc); 
      fclose(lFileDesc); 
     } 
     else 
     { 
      printf("Unable to open the file \n"); 
     } 



    } 
    catch(...) 
    { 
     printf("Exception occured in WriteLog \n"); 
    } 
} 
+1

是'WriteLog'你的函数:

通过改变你的函数摆脱警告?听起来像前两个参数应该比'char *'更多的是'const char *'。 – chris 2013-03-26 06:29:30

+0

请显示更多的代码。顺便说一下,GCC的最新版本是4.8,比以前的版本更符合标准。 – 2013-03-26 06:46:14

+0

'WriteLog'不应该导致该错误。你确定没有使用另一个'WriteLog'声明而不是这个声明吗?例如,一个头中没有'const',而你的定义有'const'? – molbdnilo 2013-03-26 08:36:15

回答

3

我将宣布

void WriteLog(const char* fileName, const char* pLogMsg, 
       bool pTimeRequired); 

,因为很可能是你不改变fileName

+0

尝试与建议相同。但又得到了同样的警告。而且pLogMsg会根据条件不断变化。 – sajal 2013-03-26 06:37:19

1

这是因为字符串文字是不可修改的。但为了向后兼容,它们被允许被视为char*而不是const char*

void WriteLog(char* fileName, const char* pLogMsg, bool pTimeRequired); 
相关问题