" async="async"> ', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 책 알려주는 남자 :: 쉽게 풀어쓴 C언어 Express 12장 Exercise

12장 Exercise


1. 

(a) strcat() 함수는 하나의 문자열의 끝에 다른 문자열을 연결한다. 
(b) strcpy() 함수는 문자열을 복사한다.
(c) strtok() 함수는 문자열에서 토큰을 찾는다.
(d) gets() 함수는 표준입력에서 하나의 문자열을 읽는다.
(e) strlen() 함수는 문자열을 이루는 문자의 개수를 반환한다.


2. 오류있을 시 정정하라

(a) strcat(s, '?');

 (a) strcats(s, "?");

 (b) if( s!="value")

 (b) if(strcmp(s1, "value") !=0

 (c) char a[20];
     a="Hello World!";

 (c) char a[20];
     strcpy(a, "Hello World!");

     또는

     char *a;
     a="Hello World!";



3. 다음 문장이 제대로 동작하지 않은 이유 및 수정방안

  char *s1 = "Hi ";
  char *s2 = "Programmers!";
  char *s3 = strcat(s2, s2); 

 *s1의 공간은 NULL을 포함해 3byte뿐이다. 이어 붙일 공간이 부족하기 때문에 동작하지 않는다.

 char s1[100] = "Hi ";


4. 다음 두 문장의 차이점을 설명하라

  char a[] = "Hello World!";
  strcpy(a, "Goodbye"); 

  char *p = "Hello World!";
  p = "Goodbye";

비고) 문자열 변경에 있어서 방법이 다르다.


5. 두개의 문자열이 일치하는지를 검사하는 문장을 올바르게 작성한 것은?

④if( strcmp(s1, "Hello") == 0)


6. 오류있을 시 정정하라

 int main(){

     char *p;

     scanf("%s", p);

  } 

 int main(){

    char *p=malloc(sizeof(char)*10);

    scanf("%s", p);

  } 

비교 ) 문자열 포인터에 입력값을 받을 때, 문자열을 받을 수 있을 만큼 메모리를 할당해 주어야 한다. 


7. 다음의 변수들에게 몇 바이트의 메모리가 할당되는가?

 (a) char str[] = "abc"; 

  4 bytes

 (b) char *pc = "abc";

  4 bytes

 (c) char str[10] = "abc";

  10 bytes

 (d) char str[2][10] = {"abc", "def"};

  20 bytes


8. 다음의 수식값을 말하여라

char s[][10] = {"HIGH", "MIDDLE", "LOW"};

(a) s[0] = HIGH

(b) s[1][3] =D

(c) *S = HIGH


9. 다음 코드의 실행결과를 써라

void main()

{

char *p;

char s[]="Hello";

p=s+strlen(s) -1;

while(p>=s){

printf("%s \n", p);

p--;

}

}


실행결과) 

o
lo
llo
ello
Hello

비고) 처음 p=s+4이고 반복될 때마다 1씩 줄어든다. 

처음엔 s+4인 지점부터의 문자열을 프린트해서 o가 나오고

그 다음엔 s+3인 지점부터 문자열을 프린트해서  lo가 나온다.

이런식으로 반복하여 마지막엔 s의 문자열 전체가 나온다.



10. 다음의 함수가 하는 작업은 무엇인가? 구체적으로 mystery("abc", "abd")와 같이 호출하면 어떤 값이 반환되는가?

#include <stdio.h>


int mystery(const char *s1, const char *s2){

while(*s1==*s2){

if(*s1==0)

return (0);

s1++; 

s2++;

}

return (1);

}


void main(){

int result;

result = mystery("abc", "abd");

printf("%d", result);

}


실행결과) 1

비고) 두 개의 문자열 상수가 일치하는지를 검사하는 함수이다. 일치한다면 0으로 반환될 것이고 한 문자라도 틀리면 1로 반환될 것이다.

블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,