문자열의 배열

realrise의 이미지

char *aStr[6];

aStr[0] = "str1";

String의 배열 6개를 선언하고
배열의 첫번째요소를 초기화하는데
에러가 나네요.
제가 뭘 착각한건지?
위에 코드가 뭐 틀렸나요?

doldori의 이미지

"str1"의 형은 const char[5]입니다. 따라서 그 내용은 변경할 수 없습니다.
엄밀히 따지면 aStr은 const char* aStr[6]로 선언이 되어야 맞는데
string literal을 char*로 변환하는 것만은 특별히 허용됩니다.
(그러나 이 변환도 deprecated임을 유념하시기 바랍니다.)
그러나 그 외의 경우 const를 non-const로 변환하는 것은 에러입니다.

const char array[5] = "str1";
char* aStr[6];
aStr[0] = array; // error

보여주신 코드는 컴파일은 되겠지만 aStr을 통해 문자열의 내용을
변경하려고 했다면 실행시에 에러가 날 것입니다. 즉

aStr[0][0] = 'S';

이런 식으로요.
결론적으로 const char* aStr[6]로 선언한 후에 컴파일 에러가 나는 부분을
살펴보시면 되겠습니다. 선지자 Scott Meyers는 "(에러가 날 거라면) 런타임
에러보다는 컴파일 에러가 나는 편이 낫다"고 말씀하셨습니다. :)

yangam의 이미지

질문하신 분께서 실행하신 코드는 아무런 문제가 없지 않나요?

6개의 첨자를 갖는 배열을 생성하셨고.... (char *aStr[6];)
첫번째 배열 요소에 "str1" 문자열의 시작 주소를 넣으셨으니까요.... (aStr[0] = "str";)

gcc 3.3.4 에서 해보니까 아무런 문제없이 실행되던데요?

#include <stdio.h>

int main()
{
	char *aStr[6];

	aStr[0] = "str1";
	
	puts(aStr[0]);

	return 0;
}

혹시 제가 틀린거라면 답변 꼭 달아주세요!!

작은 것들, 사소한 것들을 소중히 여기고,
항상 최선을 다하는 멋진 사람이 되고 싶다.
그들이 나에게 일깨워준 것처럼,
그들 자신이 얼마나 소중한 존재인지 알 수 있도록
도와주는 그런 좋은 사람이 되고 싶다