2012-12-17 63 views
0

我們正試圖在centos 6.2平臺上通過C語言發送幾封電子郵件。以下是代碼。錯誤是警告:內置函數sprintf的不兼容隱式聲明。Sprintf錯誤通過c on centos發送電子郵件6.2

如何解決這個問題?

#include <stdlib.h> 
#include <string.h> 

#define cknull(x) if((x)==NULL) {perror(""); exit(EXIT_FAILURE);} 
#define cknltz(x) if((x)<0) {perror(""); exit(EXIT_FAILURE);} 
#define LIST_LEN 4 


void main()           
{                  
    char tmp[256]={0x0};             
    char fpBuffer[512]={0x0};           
    char email_list[LIST_LEN][256]={ {"****@gmail.com"},    
           {"****@gmail.com"},    
           {"***@gmail.com"},   
           {0x0}};         
    int i=0;                
    char *filename = "";                  
    for(i=0;*email_list[i]>0x0;i++)         
    {                 
     cknull(strcpy(tmp, email_list[i]));        
     cknltz(sprintf (fpBuffer,          
      "/usr/bin/mailx -s '%s %s' %s < %s",       
      "Please Review:",           
      filename,             
      tmp,               
      filename));             
     if(system (fpBuffer)==(-1))          
     {                
      perror("email failure");          
      exit(EXIT_FAILURE);           
     }                
    }                 
} 
+0

它是'int main()'。 – alk

+0

'int main(void)'在C99中。 –

+0

@MikeKwan:更好,thx! – alk

回答

4

你缺少如下:

#include <stdio.h> 
+0

我加了並留下了char * filename =「」;我得到的錯誤爲 sh:TEST:沒有這樣的文件或目錄 sh:TEST:沒有這樣的文件或目錄 sh:TEST:沒有這樣的文件或目錄。如果我向它添加一條消息,給我另一個錯誤警告:內置函數的不兼容隱式聲明?printf? – user1909888

0

而是缺乏原型,如指出。有一對夫婦的更多的問題,我覺得值得一提:

此:

*email_list[i]>0x0 

假定char是無符號的,或者至少是所有有效字符都大於0這不是便攜式一個有效的假設代碼,因此它是更好地爲寫:(!十六進制)

email_list[i][0] != '\0' 

我也寫了定點(在初始化爲email_list最終值)只是普通的"",爲什麼會用一個更詳細的NUMERICA當一個空字符串是你的意思?

我最後要提到的是使用snprintf()的建議,但由於它有自己的可移植性問題,所以在上述之後可能不是一個非常合理的建議。 :)

+0

我完成了更改ready_mail_list [i] [0]!='\ 0'但我也更改了這個{0x0}} ;?我已經添加了stdio.h庫,但是我收到了上述回覆中所述的錯誤。 – user1909888

相關問題