관리 메뉴

History

[C언어][질문] strcat함수를 만들었는데 이상합니다. 본문

C,C++/개념 실습 프로그래밍

[C언어][질문] strcat함수를 만들었는데 이상합니다.

luckybee 2022. 10. 29. 14:43
728x90
반응형

질문

 

strcat함수 그냥 쓰는 거보다 한번 만들어 보는 게 좋다고 해서  함수 안에서 출력하는 부분 for문안으로 출력하면 abcdefgh가 나오는데  그냥 printf로 바로 출력하면 abcd만 나옵니다. 이유가 뭘까요?? 어디가잘못된건지.. 잘 모르겠습니다.

void GetString(char data[],int size,char data2[],int size2)
{
	char data3[10]{ 0 };
	for (int i = 0; i < size; i++)
	{
		data3[i] = data[i];
	}
	for (int i = size, j = 0; i <10; i++, j++)
	{
		data3[i] = data2[j];
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%c", data3[i]);
	}
	printf("%s", data3);
}


int main()
{
	char data[5] ="abcd";
	char data2[5]="efgh";
	GetString(data,5,data,5)
}

답변

for (int i = 0; i < size; i++)  //size ==5
{
   data3[i] = data[i];
}

 

이 부분에서 a b c d-> 0, 1, 2, 3 여기까진 잘 들어가는데  i가 4일 때는 0이 들어갑니다. 이 부분에서 a b c d-> 0, 1, 2, 3 여기까진 잘 들어가는데  i가 4일 때는 0이 들어갑니다. 그래서 단순히 printf("\n%s", data3);이렇게 하면 중간에 널값이 들어있기 때문에 abcd만 출력되는 겁니다.

 

더보기

GetString함수 안에서 data3의 배열 상태->(abcd\0 efgh\0)

 

반복문으로 해서 잘 출력되는 이유는 printf("\n%c", '\0'); 널값은 표시가 안되기 때문에 잘 되는 것처럼 보이는 겁니다.

 

함수로 구성해서 제대로 출력하고 싶으면 아래와 같이 출력하면 됩니다.

void GetString(char data[], char data2[])
{
   char data3[10]={ 0 };
    int i;
   for (i = 0; data[i]; i++){
      data3[i] = data[i];
   }
   for (int j = 0; data2[j]; i++,j++){
      data3[i] = data2[j];
   }
    data3[i] = '\0';  //마지막에 널값을 대입
   for (int i = 0; i < 10; i++){
      printf("%c", data3[i]);
   }
   printf("\n%s", data3);
}

int main()
{
   char data[5] = "abcd";
   char data2[5] = "efgh";
    GetString(data, data2);
}

위와 같이 구성하면 반복문에서의 출력과 단순 printf에서의 출력 값이 같습니다. 

 

 

728x90
반응형
Comments