해결된 질문
작성
·
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
네, 맞습니다. strcat_s() 함수의 두 번째 인자는 첫 번째 인자로 전달된 메모리에서 쓰기 가능한 최대 크기(바이트 단위)입니다. 그리고 강의에서는 szPath + 17 + 4가 아니라 szPath + 17 + 8로 되어 있습니다. (34:40)
네, 전체 쓰기 가능영역을 넘어가서 null이 등장하는 것이 문제가 되겠습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
blood731님의 질문에 대한 답변입니다.
strcat_s 함수는 첫 번째 인자로 주어진 위치에서 시작하여 두 번째 인자로 주어진 문자열을 이어 붙입니다. 여기서 중요한 것은 szPath
배열에 대한 범위를 벗어나지 않도록 sizeof(szPath) - 원하는 시작 인덱스
로 남은 배열의 크기를 지정해야 합니다. 따라서 szPath + 17 + 4
, 즉 21번째 인덱스부터 시작한다면, sizeof(szPath) - 21
로 총 배열 크기에서 사용할 시작 위치를 뺀 나머지 길이를 지정해야 맞습니다. 다만 실제 코드에서는 시작 인덱스를 잘 고려하여 오버플로우가 발생하지 않도록 주의해야 합니다.
두 번째 질문에서 strcat_s(szPath + 17 + 8, sizeof(szPath) - 25, "C programming");
구문에서 발생하는 오류는 지정된 시작 위치가 szPath
배열의 크기를 벗어났기 때문입니다. strcat_s
함수는 지정된 배열의 유효한 범위 내에서 문자열을 복사하려고 합니다. 배열을 벗어난 위치를 시작점으로 지정하면 유효한 메모리 영역을 찾을 수 없으므로 오류가 발생합니다. 특히, 문자열을 복사하기 위해서는 충분한 공간과 함께 종결 문자인 null을 포함할 수 있는 공간이 확보되어야 합니다.
질문에 대한 답변이 도움이 되었기를 바랍니다. 프로그래밍 학습에 있어 궁금하신 점이 더 있으시면 언제든 질문해 주세요.
감사합니다.