C Sprintf格式错误

时间:2016-08-13 09:01:45

标签: c string pointers printf

我正在尝试格式化给定的字符串并打印它。不行不通。它给出了错误任何想法?

  char* query_buffer;

  sprintf(query_buffer,"%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x;%u.%u.%u.%u;%d\n",
      node_config->mac_address.addr[0], node_config->mac_address.addr[1], node_config->mac_address.addr[2], node_config->mac_address.addr[3],
      node_config->mac_address.addr[4], node_config->mac_address.addr[5], node_config->mac_address.addr[6], node_config->mac_address.addr[7],
      ip64_addr->u8[0], ip64_addr->u8[1], ip64_addr->u8[2], ip64_addr->u8[3],
      node_config->coap_port);

  printf("%s\n",query_buffer);

如果我尝试下面的printf它可以工作。我无法理解这两者之间有什么不同。

  printf("%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x;%u.%u.%u.%u;%d\n",
  node_config->mac_address.addr[0], node_config->mac_address.addr[1], node_config->mac_address.addr[2], node_config->mac_address.addr[3],
  node_config->mac_address.addr[4], node_config->mac_address.addr[5], node_config->mac_address.addr[6], node_config->mac_address.addr[7],
  ip64_addr->u8[0], ip64_addr->u8[1], ip64_addr->u8[2], ip64_addr->u8[3],
  node_config->coap_port);

1 个答案:

答案 0 :(得分:0)

char* query_buffer;声明了一个指向char的指针,但它指向的内存可能没有被声明。因此,当您调用sprintf来访问该内存时,您可能会遇到分段错误。尝试声明像query_buffer这样的char *query_buffer = (char*)malloc(256);。这将创建一个指针在它指向的地方声明256个字节。