strlen에서char*의 크기 문제를 가져옵니다
코드는 다음과 같습니다.
HANDLE hfile = CreateFile(str1, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL);
if(hfile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(" !");
return ;
}
DWORD dwsize = GetFileSize(hfile, NULL);
char *pDataBuf = new char[dwsize];
DWORD dwread = 0;
ReadFile(hfile, pDataBuf, dwsize, &dwread, NULL);
char da = pDataBuf[dwsize];
int i = strlen(pDataBuf);
//base64
char *pOutBuf;
pOutBuf = base64_encode(pDataBuf,dwsize);
delete []pDataBuf;
CloseHandle(hfile);
strlen에서 가져온 pDataBuf의 크기는dwsize보다 4가 큽니다.
strlen 사용법:
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '/0')
len++;
return len;
}
strlen이 검색 문자열의 "\0", 즉 끝자임을 알 수 있습니다.원본 코드에서 pDataBuf의 모든 바이트가 데이터에 기록되어 있으며,strlen은 찾을 때 '\0' 을 찾을 수 없기 때문에 정확한 문자열 길이를 얻을 수 없습니다.pDataBuf의 크기를 신청할 때 한 바이트를 더 신청한 다음 마지막 바이트의 값을 "\0"으로 설정할 수 있습니다.수정된 코드는 다음과 같다
HANDLE hfile = CreateFile(str1, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL);
if(hfile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(" !");
return ;
}
DWORD dwsize = GetFileSize(hfile, NULL);
char *pDataBuf = new char[dwsize+1];
memset(pDataBuf, '\0', dwsize+1);
DWORD dwread = 0;
ReadFile(hfile, pDataBuf, dwsize, &dwread, NULL);
char da = pDataBuf[dwsize];
int i = strlen(pDataBuf);
//base64
char *pOutBuf;
pOutBuf = base64_encode(pDataBuf,dwsize);
delete []pDataBuf;
CloseHandle(hfile);
이때 가져온 pDataBuf의 크기는dwsize와 같습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.