我在我的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);
Run Code Online (Sandbox Code Playgroud)
我一直收到警告:
warning: conversion lacks type at end of format [-Wformat]
Run Code Online (Sandbox Code Playgroud)
为什么我收到这个警告?
编辑:对不起,我应该添加我的结构,以便你们知道我的变量是什么类型.
结构:
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;
Run Code Online (Sandbox Code Playgroud)
currentPtr是一个NodePtr
编辑2:解答了感谢!:)
"| %-5%lu | %-9%s | %-9%s | %c | %-4%f |"
^ ^ ^ ^
Run Code Online (Sandbox Code Playgroud)
%字段宽度和类型说明符之间有额外的.例如,%-9%s格式说明符无效.它应该是%-9s(即没有额外%的中间).
printf格式化的语法是这样的(来自维基百科):
%[parameter][flags][width][.precision][length]type
所以除了%和之外的所有东西type都是可选的而不是%中间
PS:请注意,这parameter是POSIX扩展,而不是C标准.