C 언어에서 작은따옴표 ' ' 와 큰따옴표 " " 의 차이점, 큰따옴표가 있는 매크로를 문자 매개변수로 사용할 때 주의해야 할 문제

C 언어에서는 문자열을 정의할 때 흔히 다음과 같이 사용합니다.

char *str = "test";

여기서  "test"는  상수 문자열 배열입니다. 이를 str에 할당하면 실제로  문자열 배열 "test"  의 첫 번째 주소가 str 에 할당됩니다 . 따라서 큰따옴표로 묶인 문자열을 보면 이를 주소로 직접 처리할 수 있습니다.

그리고 우리가 문자를 정의할 때 사용하는 것은

char c = 't'

이것이 하는 일은 't' 값을 c 에 할당하는 것입니다 . c 에 저장된 값은 주소가 아닌 't' 의 특정 값입니다.

이는 C 언어를 배울 때 상식이겠지만, 매크로 정의에 따옴표를 적용하다 보면 몇 가지 문제가 발생할 수 있습니다.

#include <stdio.h>
#include <string.h>

#define MAX_PATH 260
#define TEST "\\"

int main(int argc, char *argv[]) {

	char filename[MAX_PATH]="C:\\etc\\mte";
	char *start = strrchr(filename, *"\\");
	char *start = strrchr(filename, *TEST);
	printf("start:%s \n", start);

	system("pause");
	return 0;
}

매크로 정의를 사용할 때 작은 따옴표와 큰 따옴표의 차이를 무시할 수 있습니다. 예를 들어 위 코드에서는 TEST를 \ 로 정의한 다음 strrchr 함수의 매개 변수로 여기에서 많은 사람들이 char *start = strrchr( filename, TEST) ; TEST 앞에 *를 추가하는 것을 잊어버려서 오류가 발생했습니다. strrstr 함수 의 두 번째 매개변수 char 이지만 TEST 는 실제로 주소이므로 오류가 보고됩니다. * 여기서 TEST는 *"\\" 와 동일합니다 . 이는 "\\" \ , *"\\"='\\' 주소 아래의 콘텐츠를 가져오는 것을 의미합니다 .

추천

출처blog.csdn.net/Learner027/article/details/90294206