inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

해결된 질문

297

blood731

작성한 질문수 6

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 이 없기 때문인 건가요?

감사합니다.

 

c 컴퓨터-구조 assembly-language vc++

답변 2

1

널널한 개발자

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

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

1

blood731

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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을 포함할 수 있는 공간이 확보되어야 합니다.

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

scanf("%d\n") 의미

0

20

1

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

Virtual Memory, Memory, Memory mapping tables

0

51

1

샘플코드 출력 오류 발생 질문드립니다

0

63

2

값의 교환에 사용되는 변수의 위치.

0

88

2

메모리 비교에 관한 질문

0

81

2

문자열 Null

0

63

1

C, C++

0

88

2

문자열 입출력 코드 에러

0

60

2

선생님! 120화 2분 50초 질문입니다.

0

67

1

caller 가 메모리 할당 해제를 할 때의 문제점 질문

0

64

2

단축키 맞는지 여부 문의드립니다.

0

60

2

문자열을 사용하는 이중 포인터에 대하여 질문합니다

0

66

1

char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요

0

78

2

용어 설명 필요

0

57

2

stdin, stdout

0

71

2

필수 실습 (최댓값을 반환하는 함수)

0

93

2

아......ㅠㅠ

0

100

2

버퍼 내 엔터

0

72

1

2진수 뺄셈에서 carry-out

0

112

2

union 식별자는 실무에서 보통 어디에서 사용하나요?

0

80

2

필수실습문제 공부법 (진도 vs 복습)

0

104

2

예제파일 다운로드

0

79

2

Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?

0

120

3