ポインタの文字を連結し、そのサイズを返す必要があるが、文字の合計を得ることができない関数がある:Cの符号なし文字のポインタの文字数
int function(unsigned char * dest)
{
*dest++ = 0x12;
*dest++ = 0x34;
*dest++ = 0x56;
*dest++ = 0x78;
*dest++ = 0x9A;
*dest++ = 0xBC;
*dest++ = 0xDE;
*dest++ = 0xFF;
*dest++ = '\0';
size_t len = strlen((char*) dest);
return len;
}
これは、私はそれを占有する方法:
unsigned char buffer[512];
int buffer_len = function(buffer);
問題はbuffer_len
は常にゼロであるということであると私はあなたがに着く16
'strlen()'は、 '\ 0'ターミネータを越えていない文字列の先頭へのポインタを期待しています... –
' function'が返った後に 'strlen(buffer)'を呼び出します。あなたは何から得ますか?次に 'dest 'をどのように使用しているかをもう一度見てください。特に' ++ 'が何をするのかを考えてください。 – zwol
'strlen((char *)dest)'を呼び出すと、 'dest'は追加されたすべての文字の直後を指します。それを変更する前に 'dest'をコピーし、その2番目のポインタのために' strlen() 'を呼び出します。 – Scheff