psApdu->prgbCData = (byte_t*)malloc(APDU_BUFFER_LENGTH);
memset((void*)psApdu->prgbCData, 0, APDU_BUFFER_LENGTH);
byte_t prgData[] = { 0x01, 0x38, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02 };
memcpy((byte*)psApdu->prgbCData, prgData, sizeof(prgData));
free(psApdu->prgbCData);
Run Code Online (Sandbox Code Playgroud)
“免费”声明在这里失败了。是什么原因?
首先,您不应该在 和 之间进行投射void *。也是sizeof一名运营商。
你需要检查一下sizeof prgData <= APDU_BUFFER_LENGTH。您可以尝试使用静态断言:
psApdu->prgbCData = malloc(APDU_BUFFER_LENGTH);
memset(psApdu->prgbCData, 0, APDU_BUFFER_LENGTH);
byte_t prgData[] = { 0x01, 0x38, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02 };
_Static_assert(sizeof prgData <= APDU_BUFFER_LENGTH, "too big");
memcpy(psApdu->prgbCData, prgData, sizeof prgData);
free(psApdu->prgbCData);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8463 次 |
| 最近记录: |