snprintf
이 함수에는 지정된 길이가 필요하며 컴파일러는 범위를 벗어난 검사를 수행하므로 대상 길이가 모든 매개변수의 합보다 긴지 확인해야 합니다. 그러나 다음 절차를 고려하십시오.
이 프로그램을 열면-Wall
오류가 보고됩니다:
이러한 오류는 실제로 선을 넘을 가능성이 있기 때문에 예상되는 오류입니다. 문제는 오류를 보고하지 않고 어떻게 동일한 기능을 완료할 수 있느냐는 것입니다.
Mygcc
版本比较新,7.1.1
, 이전 버전의 컴파일러는 이 오류를 보고하지 않을 것으로 예상됩니다.
먼저
으아악snprintf()
的第二个参数代表的是缓冲区的大小,在这里应该是LENGTH
,sizeof(LENGTH)
的值是4(我猜你想写的应该是
sizeof(cache)
吧)。那么,改成snprintf(cache, LENGTH, "%s/ruaruarua", cache);
이 정도면 충분할까요? 다음 예를 살펴보겠습니다.이 예에서는
으아악buf
끝에 문자열을 추가하려고 시도합니다. 출력을 살펴보세요원하는 결과를 얻지 못했습니다. 왜 이런가요?
snprintf()
의 매뉴얼에는 다음 단락이 있습니다:snprintf()
그렇다면 "원본 콘텐츠와 일부 새 콘텐츠를 배열로 인쇄"하려면 어떻게 해야 할까요? 한 가지 방법은으아악
함수 계열의 반환 값은 인쇄된 문자 수(인쇄된 문자 수)이므로 다음과 같이 호출할 수 있습니다.printf()
그럼 버퍼 끝에 데이터를 연속적으로 추가하려면 어떻게 해야 할까요?으아악
결과는 🎜 으아악