不用malloc,换成其他的。unsigned int* strByte = (unsigned int*)malloc(len * 16 * sizeof(unsigned int));
时间: 2023-08-06 12:04:23 浏览: 124
unsigned char数组转成string 用16进制表示
4星 · 用户满意度95%
如果您不想使用 `malloc` 来动态分配内存,您可以尝试使用静态数组来替代。
以下是将 `unsigned int* strByte` 替换为静态数组的示例:
```c
unsigned int strByte[MAX_SIZE]; // MAX_SIZE 是您预先定义的数组大小
unsigned int* add(const char* str) {
unsigned int len = (strlen(str) + 8) / 64 + 1;
unsigned int strLength = len * 16;
for (unsigned int i = 0; i < len * 16; i++) {
strByte[i] = 0;
}
for (unsigned int i = 0; i < strlen(str); i++) {
strByte[i >> 2] |= (unsigned int)(str[i]) << ((i % 4) * 8);
}
strByte[strlen(str) >> 2] |= 0x80 << (((strlen(str)) % 4) * 8);
strByte[len * 16 - 2] = strlen(str) * 8;
return strByte;
}
```
在上述示例中,我假设您已经定义了一个足够大的静态数组 `strByte` 来存储数据。请根据您的需求调整 `MAX_SIZE` 的值。
请注意,使用静态数组可能会有一些限制,如固定的内存大小和可能导致栈溢出等问题。如果您的字符串长度超过预先定义的数组大小,可能会出现问题。因此,动态分配内存(如使用 `malloc`)可以更灵活地适应不同大小的输入。
希望这个示例对您有所帮助。如果您有其他问题,请随时提问。
阅读全文