2014-09-16 3 views
-2

아래와 같이 호출 할 dll 파일이 있습니다. 내 문자열을 전달하여 호출하고 싶습니다. MinGW는 경고없이 컴파일하지만 실행시 "잘못된 사용자 버퍼"메시지가 표시됩니다. 그것은 잘못 무엇(void * buf)에 대한 적절한 호출은 무엇입니까

int i = wrb(void *buf, int len) 
char subtext[] = "red"; 
void *buf; 
buf = subtext; 
i = wrb(buf, 3); 

: 내 문자열이 길을 통과하려고?

+1

왜 문서 또는 man/help를 보지 않으십니까? – kAmol

+0

문서화되지 않았기 때문에. – Steve

답변

1

아마도 너무 작습니까? 아마도 호출 된 함수는 버퍼가 작아서 얻지 못하는 제로 터미네이션을 필요로 할 것입니다.

호출 된 함수가 주소를 확인할 수있는 방법이 다른지는 명확하지 않습니다. 일반적으로 불가능합니다.

, 배열 이름 subtext가 자동으로 정확하게 void *로 변환됩니다 당신은 그래서 그냥 호출합니다 buf 후프를 통해 이동할 필요가 없습니다

char subtext[4] = "red"; 
int i = wrb(subtext, sizeof subtext); 

는 또한 마법 상수 (같은 4)이 안주의 가능한 경우 sizeof을 사용하십시오.

+0

당신은 sizeof 매개 변수에 대해 옳았습니다. 그러나 위의 코드는 문제에 초점을 맞춘 실제 매개 변수의 지나친 버전입니다. asciiz 형식은 필요하지 않으며 길이 변수는 모든 2 진 버퍼 내용을 보낼 수 있도록합니다. 문제는 오류보고 상태로 버퍼 주소 지정입니다. – Steve

관련 문제