关于BYTE类型的strlen()警告

时间:2019-05-07 14:54:08

标签: c string char strlen unsigned-char

我正在尝试使用sha256计算某些单词的哈希值,但是当我使用sha256_update()函数时,

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

在BYTE类型上使用strlen()会给我一些警告,所以我想知道获取text1长度的正确方法是什么?

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 个答案:

答案 0 :(得分:2)

看起来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