0

我们正在尝试在 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);                                         
        }                                                               
    }                                                                   
}
4

2 回答 2

4

您缺少以下内容:

#include <stdio.h>
于 2012-12-17T17:19:16.870 回答
0

正如所指出的,您缺少原型。我觉得还有几个问题值得一提:

这个:

*email_list[i]>0x0

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

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

我还将哨兵(初始化程序中的最终值email_list)写成plain "",当你的意思是空字符串时,为什么要更详细地使用(十六进制!)数字常量?

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

于 2012-12-17T17:39:48.193 回答