Sprintf错误通过centos 6.2上的c发送电子邮件

时间:2012-12-17 17:15:52

标签: c email centos

我们正尝试在centos 6.2平台上通过C语言发送多封电子邮件。以下是代码。错误是警告:内置函数sprintf的不兼容的隐式声明。

如何解决这个问题?

#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);                                         
        }                                                               
    }                                                                   
}

2 个答案:

答案 0 :(得分:4)

您缺少以下内容:

#include <stdio.h>

答案 1 :(得分:0)

正如所指出的,你缺乏原型。还有一些我觉得值得一提的问题:

此:

*email_list[i]>0x0

假设char是无符号的,或者至少所有有效字符都大于0.这对于可移植代码不是一个有效的假设,因此最好将其写为:

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

我还会将sentinel(email_list的初始值设定项中的结束值)写为普通"",当空字符串为什么时,为什么用(hex!)数值常量更详细?你的意思是?

我要提到的最后一件事是建议使用snprintf(),但由于这有自身的可移植性问题,因此在上述之后可能不是一个非常合理的建议。 :)