2016-08-13 10 views
-1

指定された文字列をフォーマットして印刷しようとしています。それは仕事をしません。それはエラーを与える任意のアイデア?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を試してみてください。私はこれらの2つをすることの間に何が違うのか理解できませんでした。

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;は、charへのポインタを宣言しますが、それが宣言されない可能性がありますを指すメモリ。したがって、メモリにアクセスするためにsprintfに電話すると、セグメンテーション違反が発生する可能性があります。 char *query_buffer = (char*)malloc(256);のようにquery_bufferと宣言してみてください。ポインタは、それが指すところで256バイトを宣言します。

+0

'char query_buffer [256]'は配列宣言であり、ポインタではありません。 –