• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

1분 34초 함수 구현 질문있습니다.

21.01.21 10:48 작성 조회수 122

0

교수님께서는 93번째 줄에 함수 구현하실때 

void fit_str(char* str, unsigned int size)

{

if (strlen(str) > size)

str[size] = '\0';

}

위와 같이 구현 하셨는데요 이러면 사실상 배열에 5번째 글자만 널캐릭터로 바뀌고 "do it!"은 그대로 메모리에 남아있을것 같아서 완전히 문자열을 잘라냈다고 보기는 어렵지 않나요?

궁금해서 msg 배열의 모든 원소를 일일히 출력할수 있게 이하와 같이 함수를 실행해봤는데 실제로 5번째 원소인 , (쉼표) 만 널캐릭터로 바껴서 출력 안되고 나머지 부분은 그대로 배열에 남아있는것을 볼수 있습니다. 

답변 1

답변을 작성해보세요.

1

안소님의 프로필

안소

2021.01.21

안녕하세요. 

맞습니다. 디버깅 해보시면 do it 은 그대로 남아있습니다!

어차피 puts나 printf 의 출력은 문자열의 '\0'까지만 출력이 되니까 원하는 부분까지만 출력되도록 교수님께서는 그냥 이런 정도로만 구현해주신 것 같아요.  위 예제처럼 이 문자열을 출력하는데만 쓸거라면 잘라냈다고 표현할 수 있겠습니다.

 완전히 기존 뒤에 글자들까지 다 지워버리는 것을 '잘라내다'라고 표현하고 싶으시다면 str[size] 만  '\0' 로 바꾸는 것이 아닌 그 뒤의 문자들도 전부  '\0'으로 덮어버리면 되겠습니다.

아무튼 그냥 교수님께서 그 정도로만 구현해주신 것 같다고 생각해주시면 될 것 같아요!