나는 문자열을 인자로 받아야하는 많은 함수를 가지고 있는데, 이것들은 char*
을 사용하지만, 바이트 배열을 기대하는 모든 함수는 또한 char*
을 사용한다.문자열과 바이트 배열을 구분합니까?
문제는 null-terminator를 찾을 수 없기 때문에 모든 종류의 오버플로를 일으키는 문자열 배열 함수에 바이트 배열을 전달하는 실수를 쉽게 할 수 있다는 것입니다.
대개 어떻게 이런 경향이 있습니까? 모든 바이트 배열 함수를 uint8_t
으로 바꾸면 상상할 수 있습니다. 그런 다음 문자열을 전달할 때 컴파일러가 서명 된 값에 대해 경고합니다. 또는 여기에 올바른 접근 방식은 무엇입니까?
바이트 배열에 대한 래퍼 만들기 ?? –
@VaughanHilts 어떻게 저의 문제가 해결되는지 모르겠습니다. – Muis
문자열 *은 바이트 배열입니다. C에서 배열을 전달할 수는 없지만 첫 번째 요소에 대한 포인터 만 전달할 수 있으므로 일반적으로 크기를 전달해야합니다. 배열에 0 값이 들어 있는지 확인하기 만하면됩니다. 그럴 경우 "문자열"입니다. 그렇지 않으면 그렇지 않습니다. –