프로그래밍언어/C언어[Error]
[C언어][Error] 015. subscripted value is neither array nor pointer – 인덱스를 사용할 수 없는 값에 배열 연산 시도
about_IT
2025. 4. 24. 19:21
이 오류는 배열 인덱스 연산자([])를 사용할 때, 해당 대상이 배열이나 포인터가 아닌 경우에 발생합니다. C언어에서는 배열 또는 포인터 타입에만 인덱스를 적용할 수 있으며, 정수, 구조체, 연산 결과 등의 값에는 사용할 수 없습니다.
실수로 배열처럼 보이지만 실제로는 일반 변수나 상수에 인덱싱을 시도하는 경우 자주 발생합니다. 특히 포인터가 아닌 일반 정수형 변수에 [0], [1] 등을 붙이는 실수를 주의해야 합니다.
● 오류 예제
#include <stdio.h>
int main() {
int num = 5;
printf("%d\n", num[0]); // 오류: num은 배열이 아님
return 0;
}
위 코드에서 num은 정수형 변수이므로 배열이 아니며, [0]을 사용할 수 없습니다. 컴파일러는 다음과 같은 오류를 출력합니다.
error: subscripted value is neither array nor pointer
● 해결 방법
배열이나 포인터를 사용하여 인덱스를 적용해야 하며, 일반 변수에는 해당 연산을 사용할 수 없습니다.
#include <stdio.h>
int main() {
int arr[3] = {10, 20, 30};
printf("%d\n", arr[0]); // 올바른 인덱싱
return 0;
}
출력 결과:
10
● 실전 팁
- [] 연산자는 배열 또는 포인터 변수에만 사용할 수 있습니다.
- 일반 변수나 상수, 구조체에는 인덱스 접근을 시도하지 않도록 변수 타입을 정확히 파악하세요.
- 컴파일 오류가 발생하면 인덱스를 적용하려는 대상의 선언을 먼저 확인하는 습관을 들이세요.
인덱싱 오류는 변수의 타입을 혼동했을 때 흔히 발생하므로, 코드 작성 전에 자료형의 정확한 용도를 숙지하는 것이 중요합니다. 특히 포인터와 배열은 인덱싱이 가능하지만, 일반 변수는 그렇지 않다는 점을 기억하세요.