상세 컨텐츠

본문 제목

2차원 배열로 문자열 받기(동적할당x)

c언어

by 빙하둘리 2022. 7. 1. 15:39

본문

728x90

char orig[20][50];

다음과 같이 선언된 2차원 배열을 이용해서

//한 행에 하나의 문자열을 저장
orig[0]="문자열 첫번째";
orig[1]="문자열 두번째 적는 중";
orig[2]="추가로 더 쓰기";

이런식으로 문자열을 받고 싶다면 다음과 같이 하면 된다.

몇 줄 받을 것인지 지정해주고 싶다면 아래와 같이 scanf로 숫자를 받는다.

int main(void)
{
	char orig[20][50];

	int num;
	scanf("%d", &num); //몇 번 받을 것인지
	getchar();
	//문자열 받기// 한 행에 문자열 하나씩 받기
	for (int i = 0; i < num; i++)
	{
		printf("문자열 입력 타임\n");
		scanf("%[^\n]s", orig[i]);
		getchar();
	}
    
    return 0;
   }

scanf로 숫자를 받으면 버퍼가 차기 때문에 getchar();으로 버퍼를 지워준다.

scanf("%[^\n]s", orig[i]);로 이차원 배열에 문자열을 받을 때도 버퍼가 차기 때문에 scanf를 한 뒤에 getchar();으로 버퍼를 비워준다.

 

만약 버퍼를 안 비워주면 다음과 같이 쓰레기값이 차게 된다.

 

문자열 요소 하나하나에 접근하고 싶다면 다음과 같은 방법을 쓸 수 있다.

int change(char*str);
int main(void)
{
	char orig[20][50];

	int num;
	scanf("%d", &num); //몇 번 받을 것인지
	getchar();
	//문자열 받기// 한 행에 문자열 하나씩 받기
	for (int i = 0; i < num; i++)
	{
		printf("문자열 입력 타임\n");
		scanf("%[^\n]s", orig[i]);
		getchar();
	}
   	for (int i = 0; i < num; i++)
	{
    	printf("거꾸로 출력이 되면 %s", change(orig[i]));
    }
    return 0;
  }
   
int change(char*str)
{
	while(*str!='\0')
	{
		printf("한 글자씩 %c\n", *str);
		str++;
	}
    return 0;
}

char*str에 orig[i]를 전달해줌으로써 str은 문자열 하나인 orig[i]를 가리키게 된다.

*str을 하면 문자열 요소 하나하나를 가리키게 된다. 또한 str++을 함으로써 주소값이 늘어나는데 문자열에서 다음 인덱스의 문자를 가리키게 한다.

728x90

관련글 더보기

댓글 영역