인프런 커뮤니티 질문&답변

blood731님의 프로필 이미지
blood731

작성한 질문수

독하게 시작하는 C 프로그래밍

문자열 처리 - 주요 함수 소개 및 strcat() 함수 성능 개선

문자열처리 함수소개강의에서 질문 있습니다.

해결된 질문

작성

·

194

·

수정됨

0

강의 감사히 듣고 있습니다.
질문 두 가지 있습니다.

1.
strcat_s 함수를 설명하실 때

strcat_s(szPath + 17 + 4, sizeof(szPath) - 25, "C programming");

이라고 해주셨는데 22번째 인덱스부터 시작하여 널문자를 찾고 이어붙이는 구문이라면 전체 배열의 크기도 sizeof(szPath)-21로 조정을 해야 하는 것 아닌가요?

2.

strcat_s(szPath + 17 + 8, sizeof(szPath) - 25, "C programming");
에서 오류가 나는 것은 문자열 배열 넘어의 메모리를 시작값으로 설정했다는 것인데 확인할 수 있는 null 이 없기 때문인 건가요?

감사합니다.

 

답변 2

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. 네, 맞습니다. strcat_s() 함수의 두 번째 인자는 첫 번째 인자로 전달된 메모리에서 쓰기 가능한 최대 크기(바이트 단위)입니다. 그리고 강의에서는 szPath + 17 + 4가 아니라 szPath + 17 + 8로 되어 있습니다. (34:40)

  2. 네, 전체 쓰기 가능영역을 넘어가서 null이 등장하는 것이 문제가 되겠습니다. 참고하시기 바랍니다. 😄

blood731님의 프로필 이미지
blood731
질문자

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

blood731님의 질문에 대한 답변입니다.

  1. strcat_s 함수는 첫 번째 인자로 주어진 위치에서 시작하여 두 번째 인자로 주어진 문자열을 이어 붙입니다. 여기서 중요한 것은 szPath 배열에 대한 범위를 벗어나지 않도록 sizeof(szPath) - 원하는 시작 인덱스로 남은 배열의 크기를 지정해야 합니다. 따라서 szPath + 17 + 4, 즉 21번째 인덱스부터 시작한다면, sizeof(szPath) - 21로 총 배열 크기에서 사용할 시작 위치를 뺀 나머지 길이를 지정해야 맞습니다. 다만 실제 코드에서는 시작 인덱스를 잘 고려하여 오버플로우가 발생하지 않도록 주의해야 합니다.

  2. 두 번째 질문에서 strcat_s(szPath + 17 + 8, sizeof(szPath) - 25, "C programming"); 구문에서 발생하는 오류는 지정된 시작 위치가 szPath 배열의 크기를 벗어났기 때문입니다. strcat_s 함수는 지정된 배열의 유효한 범위 내에서 문자열을 복사하려고 합니다. 배열을 벗어난 위치를 시작점으로 지정하면 유효한 메모리 영역을 찾을 수 없으므로 오류가 발생합니다. 특히, 문자열을 복사하기 위해서는 충분한 공간과 함께 종결 문자인 null을 포함할 수 있는 공간이 확보되어야 합니다.

질문에 대한 답변이 도움이 되었기를 바랍니다. 프로그래밍 학습에 있어 궁금하신 점이 더 있으시면 언제든 질문해 주세요.

blood731님의 프로필 이미지
blood731

작성한 질문수

질문하기