0

CentOS6.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)を単純なものとして記述し""ます。空の文字列が意味するのに、なぜ(hex!)数値定数を使用してより冗長になるのでしょうか。

最後に言及しようとしていたのは、使用するための提案でしたがsnprintf()、それ自体に移植性の問題があるため、上記以降の提案はおそらくあまり合理的ではありません。:)

于 2012-12-17T17:39:48.193 に答える