Olá tenho tido problemas com a compilação no programa abaixo em C, ele é um programa que faz o cadastro de produtos de uma loja, quando recebe uma proposta, faz a busca do produto no estoque, verificando se o pedido pode ser atendido e caso haja produtos suficientes ele desconta do estoque a quantidade comprada pelo cliente, além de atualizar o estoque(colocar mais produtos no estoque). Programo em linux pelo gcc e tem dado o seguinte problema: ex23-lista2.c: Na função ‘le_pedido’: ex23-lista2.c:80:3: aviso: formato ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[51]’ [-Wformat] O erro está na função le_pedido após a main.   #include <stdio.h>
#define TAM 1000
#define NOME 51
typedef struct {
  int codigo_produto;
  int quantidade_disponivel;
  float preco_unitario;
  char nome[NOME];
  char marca[NOME];
} produto;
typedef struct {
  int codigo;
  int quantidade;
  char cliente[NOME];
} pedido;
  
void cadastrar_produto(produto v[TAM], int *n);
void executa_venda(pedido p, produto v[TAM], int n);
int verifica_estoque(pedido p, produto v[TAM], int n);
void atualizar_estoque(produto vet[TAM], int n);
void le_pedido(pedido *proposta);
int main ()
{
  int n=0, opcao, resp;
  produto v[TAM];
  pedido proposta;
do {
  printf("1 - Cadastrar produto\n");
  printf("2 - Solicitar produtos\n");
  printf("3 - Atualizar Estoque\n");
  printf("4 - Sair\n");
  scanf("%d\n", &opcao);
  if(opcao == 1)
    cadastrar_produto(v, &n);
  else if(opcao == 2){
    le_pedido(&proposta);
    resp=verifica_estoque(proposta, v, n);
    if(resp == -1)
      printf("Produto não existe\n");
    else if(resp == -2)
      printf("Quantidade insuficiente\n");
    else
      executa_venda(proposta, v, resp);
  }
  else if(opcao == 3){
    atualizar_estoque(v, n);
  }
 }while(opcao != 4);
 return 0;
}
void cadastrar_produto(produto v[TAM], int *n)
{
  v[*n].codigo_produto=*n;
  scanf("%[^\n]", v[*n].nome);
  scanf("%[^\n]", v[*n].marca);
  scanf("%f", &v[*n].preco_unitario);
  scanf("%d", &v[*n].quantidade_disponivel);
  (*n)++;
}
int verifica_estoque(pedido proposta, produto v[TAM], int n)
{
  int i;
  for(i=0; i<n; i++){
    if(proposta.codigo==v[i].codigo_produto){
      if(proposta.quantidade<=v[i].quantidade_disponivel)
    return i;
      else
    return -2;
    }
  }
  return -1;
}
void le_pedido(pedido *proposta)
{
  scanf("%d", &(*proposta).codigo);
  scanf("%d", &(*proposta).quantidade);
  scanf(" %s", &(*proposta).cliente);
}
void executa_venda(pedido p, produto v[TAM], int i)
{
  if(v[i].codigo_produto==p.codigo){
    printf("%s\n", p.cliente);
    printf("%d\n", p.codigo);
    printf("%s\n", v[i].nome);
    printf("%.2f\n", v[i].preco_unitario);
    printf("%.2f\n", (v[i].preco_unitario*p.quantidade));
    v[i].quantidade_disponivel-=p.quantidade;
  }
}
void atualizar_estoque (produto v[TAM], int n)
{
  int cod, qtde, i;
  scanf("%d", &cod);
  scanf("%d", &qtde);
  for(i=0; i<n; i++){
    if(cod==v[i].codigo_produto)
      v[i].quantidade_disponivel+=qtde;
  }
}