предупреждение о strlen () для типа BYTE - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь вычислить значение хеш-функции некоторых слов, используя sha256, но когда я использую функцию sha256_update (),

typedef unsigned char BYTE;
BYTE text1[] = {"abcd"};
sha256_update(&ctx, text1, strlen(text1));

использование strlen () для типа BYTE выдаст мне несколько предупреждений, поэтому я хочу знать, как правильно получить длину текста1?

In file included from /usr/include/memory.h:29:0,
             from sha256-test.c:16:
/usr/include/string.h:384:15: note: expected ‘const char *’ but argument is of type ‘BYTE {aka unsigned char}’
 extern size_t strlen (const char *__s)
           ^~~~~~
sha256-test.c:54:36: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness [-Wpointer-sign]
  sha256_update(&ctx, text1, strlen(text1));

1 Ответ

2 голосов
/ 07 мая 2019

Похоже, имя typedef BYTE определяется следующим образом

typedef unsigned char BYTE;

В этом случае приведите тип unsigned char * к типу char * (или const char *), поскольку существуетнет неявного преобразования между типами.Например,

BYTE text1[] = {"abcd"};
sha256_update(&ctx, text1, strlen( ( char * )text1 ) );

Примите во внимание, что для такой инициализации массива

BYTE text1[] = {"abcd"};

(когда размер массива определяется его инициализацией со строкой), вы можете получитьдлина строки также следующим образом

sizeof( text1 ) - 1

Вот демонстрационная программа

#include <string.h>
#include <stdio.h>

typedef unsigned char BYTE;

int main( void )
{
    BYTE text1[] = {"abcd"};
    size_t n = strlen( ( char * )text1 );

    printf( "n = %zu\n", n );
    printf( "sizeof( text1 ) - 1 = %zu\n", sizeof( text1 ) - 1 );
}

Ее вывод

n = 4
sizeof( text1 ) - 1 = 4
...