sprintf转换在格式结束时缺少类型

Mic*_*off 1 c printf

我在我的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:解答了感谢!:)

tas*_*oor 6

"| %-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标准.