7

私は変数を持っています

unsigned char* data = MyFunction();

データの長さを見つける方法は?

4

7 に答える 7

9

からデータの長さを返す必要がありますMyFunction。また、誰がメモリを割り当て、誰が割り当てを解除する必要があるかを確認してください。これには様々なパターンがあります。かなり頻繁に私は見ました:

int MyFunction(unsigned char* data, size_t* datalen)

次に、データを割り当てて datalen を渡します。結果 (int) は、バッファ (データ) が十分な長さかどうかを示す必要があります...

于 2008-11-04T10:28:44.323 に答える
6

それを仮定するとstring

length = strlen( char* );

しかし、そうではないようです...そのため、関数が長さを返さない方法はありません。

于 2008-11-04T10:24:00.340 に答える
3

unsigned char *)(が null で終了していない場合、( のサイズを見つける方法はありません。

于 2010-01-07T11:26:27.260 に答える
2

さて、これはそれほど難しいことではありません。文字列の最初の文字へのポインタを取得しました。null値の文字に到達するまで、このポインターをインクリメントする必要があります。次に、元のポインタから最後のポインタを差し引くと、文字列の長さがわかります。

int strlen(unsigned char *string_start)
{
   /* Initialize a unsigned char pointer here  */
   /* A loop that starts at string_start and
    * is increment by one until it's value is zero,
    *e.g. while(*s!=0) or just simply while(*s) */
   /* Return the difference of the incremented pointer and the original pointer */
}
于 2008-11-04T10:54:40.870 に答える
1

前に述べたように、strlenはNULLで終了する文字列でのみ機能するため、最初の0('\ 0'文字)は文字列の終わりを示します。あなたはこのような何かをする方が良いです:

unsigned int size;
unsigned char* data = MyFunction(&size);

また

unsigned char* data;
unsigned int size = MyFunction(data);
于 2008-11-04T10:50:41.597 に答える
1

元の質問では、返されたデータが null で終わる文字列であるとは言いませんでした。そうでない場合、データの大きさを知る方法はありません。文字列の場合は、strlen を使用するか、独自に記述します。strlen を使用しない唯一の理由は、これが宿題の問題である場合です。そのため、詳しく説明するつもりはありません。

于 2008-11-04T22:28:22.170 に答える
-5
#include <stdio.h>
#include <limits.h>  
int lengthOfU(unsigned char * str)
{
    int i = 0;

    while(*(str++)){
        i++;
        if(i == INT_MAX)
            return -1;
    }

    return i;
}

HTH

于 2008-11-04T13:23:07.590 に答える