我们正尝试在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);
}
}
}
答案 0 :(得分:4)
您缺少以下内容:
#include <stdio.h>
答案 1 :(得分:0)
正如所指出的,你缺乏原型。还有一些我觉得值得一提的问题:
此:
*email_list[i]>0x0
假设char
是无符号的,或者至少所有有效字符都大于0.这对于可移植代码不是一个有效的假设,因此最好将其写为:
email_list[i][0] != '\0'
我还会将sentinel(email_list
的初始值设定项中的结束值)写为普通""
,当空字符串为什么时,为什么用(hex!)数值常量更详细?你的意思是?
我要提到的最后一件事是建议使用snprintf()
,但由于这有自身的可移植性问题,因此在上述之后可能不是一个非常合理的建议。 :)