This question already has answers here:
Closed 5 years ago.
scanf() variable length specifier
(4个答案)
这就是密码:
#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);
[...]

海合会在scanf一案中指控:
produto.c:61:3:警告:格式为[-Wformat]的未知转换类型字符“T”
produto.c:61:3:警告:format[-Wformat extra args]的参数太多
我认为这个定义没有起到应有的作用。如何修复代码使其工作?

最佳答案

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

08-16 00:14