C99에서 버퍼 오버런 방지에 도움이되는 sscanf
문자열 리터럴을 만들려고합니다. 내가 자동으로 (16)의 버퍼 크기 주어진 "% 15X"를 생성하는 것을 선호하는, 그러나C 전 처리기를 사용하여 scanf에 대한 문자열 리터럴을 구성 하시겠습니까?
#define MAX_ARG_LEN 16
#define MAX_ARG_CHARS "15"
char arg[MAX_ARG_LEN] = "";
if (sscanf(arg, "%"MAX_ARG_CHARS"X", &input) > 0)
:
#define MAX_ARG_LEN 16
char arg[MAX_ARG_LEN] = "";
if (sscanf(arg, "%"(MAX_ARG_LEN-1)"X", &input) > 0)
명백한 "수동"솔루션과 같이이다 : 목표는 같은입니다. 이 링크는 입니다.은 내 응용 프로그램에서 작동하지만 Convert a preprocessor token to a string은 -1을 처리하지 않습니다.
제안 사항?
누군가가 관심이있는 경우 조나단이 간접 접근법을 사용하여 수행 한 방식으로 왜 STRINGIFY()를 수행해야하는지에 대해 길게 설명합니다. http://stackoverflow.com/questions/798221/c- 매크로를 생성하는 문자열/798311 # 798311 –
[SO 1489932] (http://stackoverflow.com/questions/1489932/c-preprocessor-and-)에서 토큰 붙여 넣기 ('##')에 대한 병렬 토론이 있습니다. 연쇄/). –
위의 +1 구현은 완벽하게 좋은 해결책입니다 - 감사합니다! – Brett