아래와 같이 vsnprintf를 호출합니다. Vargs가 NULL이면 strlen 함수에서 vsnprintf coredump가 실행되지만 Linux, AIX 등과 같은 다른 OS에서는 괜찮습니다.solaris vsnprintf에서 strlen 함수의 코어 덤프는 이것을 해결할 수있는 방법일까요?
이 문제가 해결 되었습니까? 나는
코드 ... 내가 vsnprintf가 코어 덤프하지 않아야합니다, varags에 NULL을 전달 피할 수
int example(char * buff,size_t count,const char format[],...)
{
va_list vargs = NULL;
va_start(vargs,format);
ret = vsnprintf(buff,count,format,vargs);
va_end(vargs);
return ret;
}
main()
{
char buff[100] = {0};
char *FileName = NULL;
ret = example(buff,100,"File Name is %s",FileName);
}
'% s'에 해당하는 인자는 널 포인터가 아니어야합니다. 함수의 전제 조건을 위반하고 있습니다. – Angew
안녕하세요,이 코드는 리눅스에서 아무런 문제가 없다고 생각합니다. 솔라리스에서 thr은 strlen 함수를 호출하기 전에 NULL에 대한 검사가 없습니다. 나는 이것이 solaris vsnprintf의 버그라고 생각합니다. 어떤 해결책입니까? – user1340512
솔라리스가 올바른 일을합니다. Linux 및 다른 사람들이 제공하는 안전망은 안전하지 못하고 안전하지 않은 행동을 조장하기 때문에 올바르지 않습니다. – Art