malloc을 사용할 때`void * '에서`char *'로의 잘못된 변환?
5 행에 오류가있는 아래 코드에 문제가 있습니다.
오류 :에서
void*
로의 잘못된 변환char*
코드 블록과 함께 g ++를 사용하고 있으며이 파일을 cpp 파일로 컴파일하려고했습니다. 그게 그렇게 중요한 건가?
#include <openssl/crypto.h>
int main()
{
char *foo = malloc(1);
if (!foo) {
printf("malloc()");
exit(1);
}
OPENSSL_cleanse(foo, 1);
printf("cleaned one byte\n");
OPENSSL_cleanse(foo, 0);
printf("cleaned zero bytes\n");
}
C ++에서는 다음을 반환해야합니다. malloc()
char *foo = (char*)malloc(1);
C ++은 C보다 더 많은 종류의 안전하도록 설계되어 있으므로 당신이하지 (자동)로 변환 할 수 있습니다 에서 void*
에 또 다른 포인터 타입. 파일이이므로 .cpp
컴파일러는 C ++ 코드를 예상하고 앞서 언급했듯이 malloc에 대한 호출 char*
은 void*
.
파일을 a .c
로 변경하면 C 코드가 필요합니다. C에서는와 void*
다른 포인터 유형 간에 캐스트를 지정할 필요가 없습니다 . 파일을로 변경하면 .c
성공적으로 컴파일됩니다.
나는 이것이 malloc과의 라인이라고 가정합니다. 그런 다음 결과를 캐스팅하십시오.char *foo = (char*)...
그래서, 당신의 의도는 무엇입니까? C 프로그램이나 C ++ 프로그램을 작성하려고합니까?
C 프로그램이 필요한 경우 C ++로 컴파일하지 마십시오. 즉, 파일 확장자를 ".cpp"로 지정하거나 컴파일러에게 파일을 C로 처리하도록 명시 적으로 요청하지 마십시오. C 언어에서는 결과를 캐스팅해서는 안됩니다. / malloc
. 질문에 [C] 태그를 지정했기 때문에 이것이 필요한 것이라고 가정합니다.
를 사용하는 C ++ 프로그램이 필요한 경우 malloc
의 반환 값을 malloc
적절한 유형 으로 명시 적으로 캐스팅 할 수밖에 없습니다 .
참조 URL : https://stackoverflow.com/questions/5099669/invalid-conversion-from-void-to-char-when-using-malloc
'program story' 카테고리의 다른 글
LINQ를 사용하여 C #의 정렬 목록 (0) | 2021.01.10 |
---|---|
OpenWrap 대 NuGet (0) | 2021.01.10 |
시간당 DateTime 수에 따른 SQL Server 그룹? (0) | 2021.01.10 |
IIS 관리자에서 SSL 인증서 적용 및 "다른 프로세스에서 사용 중이므로 프로세스에서 파일에 액세스 할 수 없습니다."오류 (0) | 2021.01.10 |
C에서 한 줄씩 텍스트 파일을 살펴보기 (0) | 2021.01.10 |