关于 BYTE 类型的 strlen() 警告
warning about strlen() on BYTE type
我正在尝试使用 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));
看起来 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
我正在尝试使用 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));
看起来 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