보안프로그래밍 몇가지 문제풀이 관련2
보안프로그래밍을 공부하고 있는데요.
다른분들이 생각하는 문제의 답변을 듣고
공부하는데 도움을 받고 싶어서 올리게 되었습니다.
1. 다음 프로그램은 어떤 값을 출력하겠는가? 먼저 생각해 보고 실행해 보아라.
그리고, 왜 이런 결과가 출력되는지 설명하여라.
#include <stdio.h>
void f(int a[3]);
int main(void)
{
char s[]="I like C.";
char *p="I like C.";
int a[3];
double d[5];
printf("%s%d\n%s%d\n%s%d\n%s%d\n",
"sizeof(s)=", sizeof(s),
"sizeof(p)=", sizeof(p),
"sizeof(a)=", sizeof(a),
"sizeof(d)=", sizeof(d),
f(a);
return 0;
}2. 다음과 같은 배열 멤버를 갖는 구조체 형이 있다고 하자.
struct subject {
int num;
int grade[];
};이때 다음과 같은 코드를 실행하면 올바르게 출력되는지 프로그램을 작성하여 실행하여 확인해 보아라.
struct subject s;
s.grad[0]=10;
printf("%d\n", s.grade[0]);그리고, 프로그램의 실행 결과가 10으로 올바르게 출력된다고 하더라도 잘못된 코드이기 때문에 잘못된 부분을 찾아 수정하라.
(hint: 구조체 배열 멤버의 크기에 주의)
3. 다음 프로그램은 어떤 값을 출력하겠는가? 출력 결과에 대해 설명하여라.
#include <stdio.h>
enum day {SUN, MON, TUE, WED, THU, FRI, SAT};
enum name {kim, lee, park, jung, hong=266};
int main(void)
{
printf("sizeof(enum day)=%d\n", sizeof(enum day));
printf("sizeof(enum name)=%d\n", sizeof(enum name));
return 0;
}4. 시스템에 따라 여러 바이트로 이루어진 객체를 메모리에 저장하는 방법이 다를 수 있다.
다중 바이트 객체를 저장하는 방법에 대해 조사하여 작성하시오.
(a) 리틀 엔디언(little endian)과 빅 엔디언(big endian)에 대해 조사하여 설명하여라.
(b) 사용하는 시스템이 어떤 엔디언을 사용하는지 알아낼 수 있는 endian공용체를 정의하고 설명하여라.
(c) endian 공용체를 사용하여 사용하는 시스템이 어떤 엔디언인지 알아내는 프로그램을 작성하여라.
(d) 리틀 엔디언을 빅 엔디언으로 또는 그 반대로 저장하는 함수를 정의하고 해당 프로그램을 예를 들어 작성하여라.
5. 다음 프로그램을 실행하여 보고 왜 가장 큰 정수 값을 출력하는지 설명하여라.
#include <stdio.h>
int main(void)
{
unsigned long long val=-1;
printf("가장 큰 정수: %llu\n", val);
return 0;
}6. char 형 변수는 작은 정수를 다룰 때 사용될 수 있다. 만일 char형이 다룰 수 있는 값보다 큰 값이 char 형 변수에 배정되면 어떻게 되겠는가?
다음 프로그램은 컴파일할 때 경고 메시지가 출력되겠지만 실행될 것이다. 그 결과를 보고 설명해 보아라.
#include <stdio.h>
int main(void)
{
char c1=256, c2=257;
printf("c1=%d\n c2=%d\n", c1, c2);
return 0;
}7. 다음 프로그램을 실행하고 출력 결과에 대해 설명하여라.
#include <limits.h>
#include <stdio.h>
int main(void)
{
int i;
unsigned u=UINT_MAX;
for(i=0; i<10; ++i)
printf("%u+%d=%u\n", u, i, u+i);
for(i=0; i<10; ++i)
printf("%u+%d=%u\n", u, i, u*i);
return 0;
}8. 다음 프로그램을 실행해 보고 출력 결과에 대해 설명하여라.
#include <stdio.h>
int main(void)
{
unsigned char a=200, b=100, d;
signed char c=-50;
d=a+b+c;
printf("%d\n", d);
return 0;
}

댓글 달기