(C++) 6.5 배열 문자열(C)

이준우·2021년 10월 19일
0

C언어에서 문자열 배열을 사용할 때, char자료형을 사용하여 문자열을 사용했다. 실제로도 많이 사용하는 방법이기도 하다. 오늘은 다시 한번 C스타일의 문자열을 공부해보려고 한다. 코드로 한번 보도록 하자.

#include <iostream>

using namespace std;

int main()
{
	char myString[] = "string";

	cout << sizeof(myString) << endl;

	for (int i = 0; i < 7; ++i)
	{
		cout << myString[i] << endl;
	
	}


	return 0;
}

output : 7
	 s
     	 t
         r
         i
         n
         g
         
         디렉토리 출력

위의 코드를 입력해보면 알다시피, myStringstring이라는 문자열을 갖고 있다. string는 총 6글자인데, sizeof()를 이용해 찍어보면 그렇지 않다는 것을 알 수 있다. 뭐가 문제인 걸까? 반복문을 이용해 무엇이 들어있는지 찍어보도록 했다. 그랬더니 '\0'값이 들어있는 것을 알 수 있었다. ""문자열의 끝에는 항상 `\0'가 들어있으니 유의하도록 하자. 체감이 안되면 이를 int형으로 출력해보면 바로 안다.

#include <iostream>

using namespace std;

코드를 입력하세요

int main()
{
	char myString[] = "string";

	cout << sizeof(myString) << endl;

	for (int i = 0; i < 7; ++i)
	{
		cout << (int)myString[i] << endl;
	
	}


	return 0;
}

output : 7
	 115
	 116
	 114
	 105
	 110
	 103
	 0
         

이처럼 null값이 들어있는 것을 알 수 있다. 또 하나 알아두어야 할 것이 있다. "문자열을 출력할때 과연 어디까지 출력할까?" 에 대한 의문이다.

#include <iostream>

using namespace std;

int main()
{
	char myString[255];

	cin >> myString;

	myString[4] = '\0';

	cout << myString << endl;


	return 0;
}

이 예로 모든 것을 설명할 수 있다. 위 코드를 실행해 보면 아무리 긴 문자열을 입력해도 4개의 문자열만 출력하는 것을 알 수 있다. 즉, 문자열을 출력할 때 null값이 들어오기 전까지 출력한다는 의미이다. 또, 중요한 점은 '\0'과 빈칸과는 다르다는 것이다. 위의 코드에 빈칸을 두고 출력하면 빈칸 전까지만 출력하는 문제가 발생하지만, 이는 null로 인한 문제가 아니다.

#include <iostream>

using namespace std;

int main()
{
	char myString[255];

	/*cin >> myString;

	myString[4] = '\0';*/

	cin.getline(myString, 255);

	cout << myString << endl;


	return 0;
}

위 코드를 사용하면 빈칸이 들어와도 제대로 출력되는 것을 볼 수 있으나, null값이 들어가면 그전 까지만 출력되는 것을 알 수 있다.

#include <iostream>

using namespace std;

int main()
{
	char myString[255];

	/*cin >> myString;

	myString[4] = '\0';*/

	cin.getline(myString, 255);

	int ix = 0;
	while (true)
	{
		if (myString[ix] == '\0') break;

		cout << myString[ix] << " " << (int)myString[ix] << endl;
		++ix;
	
	}
	return 0;
}

문자와 ASCII코드의 몇번째 인지도 알 수 있다. 한번 해보면서 ASCII와 비교해보면 바로 이해할 수 있다.

profile
꿈꾸는 CV

0개의 댓글