繁体   English   中英

在sprintf中的字符串内的C宏

[英]C macro inside string in sprintf

我使用宏格式化字符串副本。 实例如下。 下面给出的代码尝试在字符串的剩余部分填充空字符。

#include <stdio.h>

#define LEN     10
#define str(x)  #x

void main() {
    char a[LEN];
    int b = 3445;

    sprintf(a, "%-"str(LEN)"d", b);     // I want "%-10d" here
    printf("|%s|", a);
}

当我用gcc -Wall prog.c编译它时,它会发出以下警告。

warning: format ‘%LE’ expects argument of type ‘long double’, but argument 3 has type ‘int’ [-Wformat]

这意味着宏未被正确替换。 任何人都可以在这里帮助我这里有什么问题。

你必须再次评估str的参数才能看到字符串中的10

#define LEN     10
#define str_(x)  #x
#define str(x)  str_(x)

你这样做的方式, str的参数直接是stringyfied,因此LEN以格式到达。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM