처음에이 uint8_t
배열을 char
배열로 변환하고 싶습니다. 나는이 문제를 해결하려고 조금 더 붙어 있었다. 나의 첫 번째 대안은 다른 유형의 값을 임시 값으로 복사하고 tmp 값을 쓰기 가능한 char으로 복사 한 다음 메모리에서 tmp 값을 제거하는 것입니다. 그런데 블레이크 해시 함수를 동반하는 데 사용됩니다. 여기 내 코드는 다음과 같습니다 uint8_t 배열을 C의 문자 배열로 변환
char * bl(char *input)
{
uint8_t output[64];
char msg[]= "";
char *tmp;
int dInt;
memset(output,0,64);
tmp = (char*) malloc(64);
if (!tmp){
exit(1);
}
dInt = strlen(input);
if (dInt > 0xffff){
exit(1);
}
uint8_t data[dInt];
memset(data,0, dInt);
strlcpy(data,input,dInt);
uint64_t dLen =dInt;
blake512_hash(output, data,dLen);
int k;
for (k=0;k<64;k++){
tmp[k] = output[k]; //does this "copy" is buggy code?
}
memcpy(msg, tmp,64);
//so here I can to delete tmp value
// I dont want there were left unused value in memory
// delete tmp;
free(tmp);
return msg;
}
나는 위의 코드는 여전히 효율적이지라고 생각합니다, 그래서 당신의 의견, 힌트 및 수정 프로그램은 무엇인가? 대단히 감사합니다!
나중에이 함수를 사용하여 파이썬에서 호출하고자합니다.이 함수가 나중에 문자열 값을 반환 할 것으로 기대하고 있습니다. – hafidh
@ user1309539 예.하지만 내 대답에서 언급 한 문제를 해결해야합니다. 포인터를 로컬 변수로 리턴 할 수 없습니다. – JosephH
이면 tmp 변수는 쓸모가 없습니다. tmp 변수는 출력 된 것이 아니라 char 만 할당 되었기 때문에 tmp 변수에서 복사 할 대상은 무엇입니까? – hafidh