|
아래는 vprintf와 vstrcpy 매크로를 정의하는 것입니다.
vprintf(a,b,c);로 코딩을 하면
해당 위치에 a.len = sprintf((char *)a.arr, b, c);로 코드가 대체됩니다.
vstrcpy(a,c);로 코딩을 하면
해당 위치에 strcpy((char *)a.arr, c); a.len = strlen((char *)a.arr);로 코드가 대체됩니다.
위에서 a,b,c는 함수에서 매개변수와 같습니다.
그리고,
sprintf((char *)a.arr, b, c);를 설명하자면,
sprintf()는 형식화된 문자열 복사함수로서 원형은 아래와 같습니다.
int sprintf(char *buffer, const char *format[, argument, ...]);
첫번째 매개변수는 결과문자열을 복사할 메모리의 번지(포인터)이고 두번째는 형식지정문자열이며 세번째부터는 형식지정문자열에서 지정한 경우 필요한 각종 변수들입니다.
반환값은 복사한 문자의 갯수입니다.
형식지정문자열은 "Length:%d %s"와 같은 것을 말합니다.
이경우 두개의 변수가 필요하고 세번째 매개변수에서부터 정수형,문자형의 변수들을 지정해야 합니다.
이것으로 유추해보면,
a.arr는 char형의 배열이거나 동적으로 할당한 메모리를 가리키는 포인터입니다.
a.len은 int형 이상의 크기를 갖는 정수형 변수입니다.
물론, a는 struct 또는 union 또는 class의 인스턴스입니다.
이렇게 되어야 위의 매크로 정의의 의미가 있을 것입니다.
궁금이가 님이 쓰신 글 :
: 궁금한게 있는데요..
: 어디 소스를 보니까....
: #define vprintf(a,b,c) a.len = sprintf((char *)a.arr, b, c)
: #define vstrcpy(a,c) strcpy((char *)a.arr, c); a.len = strlen((char *)a.arr)
:
:
: vprintf와 vstrcpy간 뭔지 궁금하구요(자세히)
: 그리고 a.arr와 a.len라는 부분이 있는데,, 이거 c에서 지원이 되는건지,또한 이게 무슨 기능을 하는지 궁금합니다. 배열을 하는것 같은데,, 예제가 그렀지만 자세한 설명 부탁드립니다.
:
|