초보자들이 하는 실수:

char str1[]="123";

char str2[]="123";

if(str1==str2)

  printf("equal");

else

  printf("not equal");


이런 식의 문자열 비교는 배열 str1과 str2의 주소 값을 비교하는 것이다. 배열의 이름은 배열의 주소 값을 의미한다!


1
2
3
4
#include <string.h>
 
int strcmp(const char * s1, const char * s2);
int strncmp(const char * s1, const char * s2, size_t n);
cs

Tip~! 문자열 비교를 해보면 ABC와 ABD를 비교하고, printf를 찍어보면 C와 D의 아스키코드 차이값인 양수 1반환

ABC와 ABE를 비교해보면, 양수 2반환


strcmp("ABCD", "ABCDE"); 를 하면 널 문자도 비교 대상에 속하므로, E의 아스키코드 값이 널의 아스키 코드 0보다 크므로 음수가 반환된다.


Posted by 知彼知己百戰不殆
,
1
2
3
4
#include <string.h>
 
char * strcat(char * dest, const char * src);
char * strncat(char * dest, const char * src, size_t n);
cs

문자열을 뒤에 이어 붙일 때는 널문자가 입력된 그 부분부터 바로 문자열을 덧붙임

널 문자가 저장된 위치에서부터 복사가 진행되어야 덧붙임 이후에도 문자열의 끝에 하나의 널 문자만 존재하는 정상적인 문자열이 된다.

Posted by 知彼知己百戰不殆
,
1
2
3
4
#include <string.h>
 
char * strcpy(char * dest, const char * src);
char * strncpy(char * dest, const char * src, size_t n);
cs

strcpy는 널 값은 복사를 안하니까 sizeof같은 거로 최소값 잡아주고 마지막 값에는 0을 따로 넣어주어야 printf나 puts시 오류 안 생김

Posted by 知彼知己百戰不殆
,