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
디렉토리 출력
위의 코드를 입력해보면 알다시피, myString
은 string
이라는 문자열을 갖고 있다. 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와 비교해보면 바로 이해할 수 있다.