이 오류는 문자열(또는 char 포인터)과 정수형 값을 + 연산자로 함께 사용하려고 할 때 발생합니다. C언어에서 포인터와 정수 간 연산은 특정 규칙이 있을 경우 가능하지만, 문자열 상수나 포인터 연산에서 잘못된 방식으로 사용하면 컴파일러가 허용하지 않습니다.
특히 문자열 리터럴을 직접 더하려 하거나, 포인터 연산을 명확히 하지 않은 경우 이 오류가 자주 발생합니다.
아래 예제를 통해 확인해 보겠습니다.
#include <stdio.h>
int main() {
char *str = "hello";
printf("%s\n", str + 1); // 올바른 사용 (포인터 연산)
printf("%s\n", str + "world"); // 오류 발생
return 0;
}
위 코드에서 str은 char 포인터이고, "world"는 문자열 상수이므로 두 값을 + 연산자로 결합하는 것은 허용되지 않습니다.
error: invalid operands to binary + (have ‘char *’ and ‘char *’)
문자열 연결을 원할 경우에는 strcat, sprintf, 또는 문자열 복사 방식 등을 사용해야 합니다.
#include <stdio.h>
#include <string.h>
int main() {
char result[100] = "hello";
strcat(result, " world");
printf("%s\n", result);
return 0;
}
출력 결과:
hello world
● 실전 팁
- 포인터 연산은 정수와만 수행할 수 있으며, 두 개의 포인터끼리 직접 덧셈 연산을 하는 것은 허용되지 않습니다.
- 문자열을 연결하려면 strcat, strncat, snprintf 등의 함수를 사용하세요.
- 문자열 포인터와 관련된 연산을 수행할 때는 타입을 명확히 이해하고 코딩하는 습관이 필요합니다.
포인터 연산과 문자열 연결을 구분해서 사용해야 하며, 단순한 + 연산자로 문자열을 합치려는 시도는 C언어에서는 허용되지 않음을 기억해야 합니다.