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

时间:2017-04-29 05:53:03

标签: 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);

我一直在收到警告:

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:已经解答了感谢! :)

1 个答案:

答案 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标准。