我在我的C程序中使用sprintf,我正在尝试格式化字符串。
这是我的代码:
sprintf(string, "| %-5%lu | %-9%s | %-9%s | %c | %-4%f |", currentPtr->s.SID, currentPtr->s.lname, currentPtr->s.fname, currentPtr->s.initial, currentPtr->s.GPA);
我一直在收到警告:
warning: conversion lacks type at end of format [-Wformat]
为什么我会收到此警告?
编辑:对不起,我应该添加我的结构,以便你们知道我的变量是什么类型。
结构:
typedef struct student {
char lname[ 10 ], initial, fname[ 10 ];
unsigned long SID;
float GPA;
} SREC;
typedef struct node {
SREC s;
struct node *nextPtr;
} Node;
typedef Node *NodePtr;
currentPtr是NodePtr
Edit2:已经解答了感谢! :)
答案 0 :(得分:6)
"| %-5%lu | %-9%s | %-9%s | %c | %-4%f |"
^ ^ ^ ^
字段宽度和类型说明符之间有额外的%
。例如,%-9%s
不是有效的格式说明符。它应该是%-9s
(即中间没有额外%
。
printf
格式的语法是这样的(来自Wikipedia):
%[parameter][flags][width][.precision][length]type
所以除了%
和type
之外的所有内容都是可选的,中间没有%
。
P.S:请注意parameter
是POSIX扩展名,而不是C标准。