새로 배운 c언어 헤더파일들~ 정리해두면 좋을것같다.
string.h 헤더파일은 c언어의 문자열을 다룰 수 있는 헤더파일이다.
char fruits[10][20] = { "apple", "banana", "peach", "orange", "grape" };
printf("%d\n", strlen(fruits));
strlen은 문자열의 끝 널 문자('\0')를 만났을 때까지 문자의 갯수를 세다 멈춘다.
위 코드를 실행했을 때는 ['a', 'p', 'p', 'l', 'e', '\0'] 널 문자를 만나,
5를 출력한다.
char fruits[10][20] = { "apple", "banana", "peach", "orange", "grape" };
char fruits_copy[10][20];
strcpy(fruits_copy, fruits);
printf("%s", fruits_copy);
모두 복사되지 않고, 첫 번째 행에 있는 apple만 복사가 되었다.
마찬가지로 strcpy함수또한 널문자('\0')까지 복사를 한다.
따라서 apple까지만 복사가 된다.
모든 문자열을 복사하려면 다음과 같은 방법을 사용하면된다.
char fruits[10][20] = { "apple", "banana", "peach", "orange", "grape" };
char fruits_copy[10][20];
int fruits_len = sizeof(fruits) / sizeof(fruits[0]);
for (int i = 0; i < fruits_len; i++) {
strcpy(fruits_copy[i], fruits[i]);
printf("%s\n", fruits_copy[i]);
}
char fruits[10][20] = { "apple", "banana", "peach", "orange", "grape" };
char fruits2[10][20] = { "apple", "banano", "peaci", "so", "grape" };
printf("%d", strcmp(fruits2[0], fruits[0]));
fruits[0]에 "apple\0"과 fruits2[0]에 "apple\0"이 같기 때문에 0을 출력한다.
다음은 모든 문자열을 비교한 코드이다.
char fruits[10][20] = { "apple", "banana", "peach", "orange", "grape" };
char fruits2[10][20] = { "apple", "banano", "peaci", "so", "grape" };
int fruits_len = sizeof(fruits) / sizeof(fruits[0]);
for (int i = 0; i < fruits_len; i++) {
printf("%d\n", strcmp(fruits2[i], fruits[i]));
}
fruits[1]에 "banana"와 fruits2[1] "banano" 예시를 들어보겠다.
strcmp(fruits2[1], fruits[1])
("banano", "banana") 에 다른글자인 "o"와 "a"
"o"(111)가 "a"(97)의 아스키코드보다 크므로 1이 반환된다.
strcmp(앞 문자열, 뒤 문자열)
앞에 문자열과 뒤 문자열을 비교했을 때
서로 다른 문자가 나오면 아스키코드를 비교하여 리턴한다.
앞 문자열에 문자의 아스키코드가 더 크다면 1을,
앞 문자열에 문자의 아스키코드가 더 작다면 -1을 반환한다.
char fruit[20] = {"apple"};
char add_fruit[10] = {"banana"};
printf("%s", strcat(fruit, add_fruit));
s1 문자열에 s1과 s2의 결합된 문자열이 들어간다.
2차원배열도 결합하고 싶은데 너무 어렵다ㅠㅠ