警告:格式为[-Wformat]的未知转换类型字符'T'

时间:2014-08-31 22:21:22

标签: c gcc types format c-preprocessor

这就是代码:

#define TAM_NOME_PRODUTO 50
[...]
struct produto
{
char nome_produto[50+1];
[...]
};
typedef struct produto Produto;
[...]
Produto *novo;
novo=malloc(sizeof(Produto));
[...]
scanf("%TAM_NOME_PRODUTO[^\n]", novo->nome_produto);
[...]

gcc指责scanf:

  

produto.c:61:3:警告:未知转换类型字符'T'格式为[-Wformat]   produto.c:61:3:警告:格式参数太多[-Wformat-extra-args]

我认为定义不能正常工作。如何修复代码使其工作?

1 个答案:

答案 0 :(得分:0)

scanf中,百分比(%)符号具有特殊含义,并且后跟一个与相应类型匹配的格式字符。虽然您尝试使用"%50",但这是一个字符串文字,因此宏名称只是此上下文中的普通字符串。为了扩展它,您需要使用相邻字符串文字的隐式连接,并使用字符串标记符号#