我有一个写入文件的程序。它具有一个预先制作的格式字符串,然后使用该格式字符串写入文件。
#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
。它基本上是一个格式化字符串。所以我期望介于两者之间的输出为“-”。
答案 0 :(得分:1)
我认为您误解了格式字符串规则。
%-*s
写入一个最大长度的字符串,该字符串由参数定义。 -
是maxlength格式的一部分,没有说要写-
。如果要写入一个特定字符,则该字符必须位于格式部分之外,例如"-%-*s"
,如果您不希望使用最大长度功能,则该字符必须为"-%*s"
。