내 C 프로그램에서 종종 ADT의 문자열 표현을 만드는 방법이 필요합니다. 어떤 식 으로든 문자열을 화면에 인쇄 할 필요가 없더라도 디버깅을위한 그러한 방법이 있어야합니다. 이런 종류의 기능이 종종 등장합니다.
char * mytype_to_string( const mytype_t *t );
실제로 문자열을 반환하기 위해 메모리를 처리하기위한 적어도 세 가지 옵션이 있음을 알고 있습니다.
대안 1 : 함수의 정적 문자 배열에 반환 문자열 저장 매번 호출 할 때마다 문자열을 덮어 쓰는 것을 제외하고는 많은 생각이 필요하지 않습니다. 어떤 경우에는 문제가 될 수 있습니다.
대안 2 : 함수 내부에 malloc을 사용하여 힙의 문자열을 할당하십시오. 버퍼 크기 또는 덮어 쓰기를 생각할 필요가 없으므로 정말 깔끔합니다. 그러나 완료되면 문자열을 free ()해야한다는 것을 기억해야하며 여유 변수가 될 수 있도록 임시 변수를 할당해야합니다. 힙 할당은 스택 할당보다 훨씬 느리므로 루프에서 반복되면 병목 현상이 발생합니다.
대안 3 : 버퍼에 대한 포인터를 전달하고 호출자가 해당 버퍼를 할당하도록합니다. 처럼:
char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen );
이것은 발신자에게 더 많은 노력을 기울입니다. 또한이 대안이 나에게 인수 순서에 대한 다른 옵션을 제공한다는 것을 알았습니다. 첫 번째와 마지막으로해야 할 주장은 무엇입니까? (실제로 6 가지 가능성)
그렇다면 어느 것을 선호해야합니까? 왜요? C 개발자들 사이에 어떤 종류의 기록되지 않은 표준이 있습니까?
sysctlbyname
OS X 및 iOS에서