즉 -char 포인터 버퍼 오버플로를 방지하려면 어떻게합니까?
int function(char* txt)
{
sprintf(txt, "select * from %s;", table);
//How do I set last char in buffer to NULL here?
}
그렇다면 테이블의 텍스트 몇 가지 방법 500 개 문자 주요 길고 TXT은 .... 100로
감사를 정의 하였다.
즉 -char 포인터 버퍼 오버플로를 방지하려면 어떻게합니까?
int function(char* txt)
{
sprintf(txt, "select * from %s;", table);
//How do I set last char in buffer to NULL here?
}
그렇다면 테이블의 텍스트 몇 가지 방법 500 개 문자 주요 길고 TXT은 .... 100로
감사를 정의 하였다.
당신은 snprintf()
의 반환 값은 버퍼가 필요 얼마나 큰 볼 수 snprintf()
대신 체크
sprintf()
의 버퍼(당신의 함수는 반환 형식이 필요합니다 ...)
감사합니다. 다른 방법이 있는지 확실하지 않았습니다. –
에 당신은 사용되는 버퍼의 양을 제한하기 위해 현재 snprintf를 사용할 수 있어야합니다.
function(char* txt, size_t length)
{
int rv;
rv = snprintf(txt, length, "select * from %s;", table);
//How do I set last char in buffer to NULL here?
if (rv >= length) {
// error
}
}
당신이 할 수있는 일은 malloc만큼의 메모리뿐입니다. 메모리에 문자열을 포맷하고 포인터를 반환하십시오. 그런 다음 호출 함수는 메모리 사용을 끝내면 메모리를 해제해야합니다.
그 이상을 할 수 있습니다. – WhirlWind
테이블의 텍스트가 바둑판 형태가 아니길 바랍니다. –
NUL은 '\ 0'문자이고, NULL은 초기화되지 않은 포인터입니다. – detly