没有从C程序获得预期的输出

时间:2018-08-26 15:25:08

标签: c

我有一个写入文件的程序。它具有一个预先制作的格式字符串,然后使用该格式字符串写入文件。

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

#define LEN_REC_TYPE    5
#define LEN_REC_NO  2
#define LEN_EDI_FILE_ID 5
#define LEN_DATE    8
#define LEN_ST_ARRAY 20



int main()
{
    char  ps_FHEADstring[LEN_ST_ARRAY];
    FILE *pf_edidlord;
    pf_edidlord=fopen("TEST.txt","w");
    char* ps_vdate = "20120101";

    *ps_FHEADstring='\0';
    strcat(ps_FHEADstring,"%-*s");  /* record descriptor */
    strcat(ps_FHEADstring,"%.*ld"); /* line number */
    strcat(ps_FHEADstring,"%-*s");  /* transaction type ind */
    strcat(ps_FHEADstring,"%-*s");  /* file create date */
    strcat(ps_FHEADstring,"\n");

    fprintf(pf_edidlord, ps_FHEADstring,
                         LEN_REC_TYPE,      "FHEAD",
                         LEN_REC_NO,        1,
                         LEN_EDI_FILE_ID,   "DLORD",
                         LEN_DATE,          ps_vdate);



    return 0;
}

在文件中,输出看起来像

FHEAD01DLORD20120101

注意:两者之间没有“-”,为什么它在字符串的开头而不是结尾处添加了字符串终止符?有人可以解释一下它是如何工作的吗?

编辑:我打印了ps_FHEADstring,输出格式为%-*s%.*ld%-*s%-*s。它基本上是一个格式化字符串。所以我期望介于两者之间的输出为“-”。

1 个答案:

答案 0 :(得分:1)

我认为您误解了格式字符串规则。

%-*s写入一个最大长度的字符串,该字符串由参数定义。 -是maxlength格式的一部分,没有说要写-。如果要写入一个特定字符,则该字符必须位于格式部分之外,例如"-%-*s",如果您不希望使用最大长度功能,则该字符必须为"-%*s"