다음 코드를 고려하십시오 :printf 문자 (% c, % d)를 함수 인수로 전달하는 방법이 있습니까?
#include <stdio.h>
void printStrGeneric(void *, int, int);
void printNumGeneric(void *, int, int);
int main()
{
int intArray[] = { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85 };
printNumGeneric(intArray, sizeof(intArray), sizeof(int));
printStrGeneric(intArray, sizeof(intArray), sizeof(int));
puts("");
short shortArray[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
printNumGeneric(shortArray, sizeof(shortArray), sizeof(short));
printStrGeneric(shortArray, sizeof(shortArray), sizeof(short));
puts("");
return 0;
}
void printStrGeneric(void *object, int size, int elem_size)
{
char *p = (char *) object;
while (p < (char *) object + size) {
printf("%c\t", *p);
p += elem_size;
}
puts("");
}
void printNumGeneric(void *object, int size, int elem_size)
{
char *p = (char *) object;
while (p < (char *) object + size) {
printf("%d\t", *p);
p += elem_size;
}
puts("");
}
- 기능 printStrGeneric
및 printNumGeneric
합니다 (printf
편지를 제외하고) 거의 동일 주어진을, 나는 그것을 대신 한 기능을 가지고 어떤 방식으로 수 있는지 궁금해 함수에 인수로 printf
문자 (%c
또는 %d
)를 전달합니까?
예. 형식 지정자는 문자열입니다. 함수에 매개 변수로 전달하십시오. – OldProgrammer
형식 문자열에 문자열 리터럴을 사용하면 [보안 취약성] (https://en.wikipedia.org/wiki/Uncontrolled_format_string)이 열릴 수 있기 때문에 가능하지만 권장하지는 않습니다.). – 0x5453
인자가 프로그래머로부터 나오는 한, 나는 printf보다 보안상의 구멍이 더 이상 없다는 것을 알지 못한다. printf의 실제 보안 문제는 사용자가 획득 한 문자열을 형식 문자열로 전달한 경우입니다. – SoronelHaetir