2016-08-13 71 views
-1

我想格式化給定的字符串和printf它。它不起作用。它給錯誤任何想法?C Sprintf格式錯誤

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); 
+0

最後一個'%u;%d'看起來很可疑。你是不是指'%u:%d'?你需要發佈你的*數據*和一個MCVE給任何人給出一個明確的答案。請參閱:[**如何創建一個最小,完整和可驗證的示例**](http://stackoverflow.com/help/mcve)。 –

回答

0

char* query_buffer;聲明指向一個字符,但它的內存它指向可能不會宣佈。因此,當您撥打sprintf訪問該內存時,您可能會遇到分段錯誤。嘗試聲明query_buffer,如char *query_buffer = (char*)malloc(256);。這將創建一個指針在它指向的位置聲明256個字節。

+0

'char query_buffer [256]'是一個數組聲明,而不是一個指針。 –