2014-01-12 4 views
0
char *string = "a"; 
string = "abc"; 

위 코드는 유효합니다.C에서 다른 문자열을 사용합니까?

char string2 [2] = "a"; 
string2 = "abc"; 

두 번째 코드는 유효하지 않습니다. 왜? string2char*이고 string과 같지 않습니까? 같은 유형의 속성은 어떻게 다른가요?

+0

배열은 * 포인터와 같지 않습니다 *. 절대로 없었습니다. 스택 오버플로에서 셀 수있는 것보다 더 많은 시간이 걸렸습니다 (정수 오버플로). – dmckee

+0

[C FAQ는 답변에 대한 좋은 페이지가 있습니다.] (http://c-faq.com/aryptr/) – nes1983

답변

2

char에 대한 포인터입니다. string2char 요소의 배열입니다. 그 둘은 다른 유형입니다.

두 번째 예제에서는 배열에 포인터를 할당하려고합니다 (문자열 리터럴이 포인터로 평가 됨). 이는 의미가 없으므로 불가능합니다. 당신이 포인터에 인덱스 연산자 []를 사용할 수 있기 때문에

int numbers[2]; 
int num; 
numbers = # // How's that supposed to work? 

사람들이 혼란을 조금 얻고, 배열의 이름은 첫 번째 요소에 대한 포인터로 평가 그것은에서 정말 다를 바 없다. 그렇다고 포인터가 배열임을 의미하지 않습니다. 이것은 지적 또는 포함 된 데이터에 쉽게 액세스 할 수 있도록하는 구문 론적 설탕 일뿐입니다.

0

두 번째 코드가 잘못되었습니다. 왜?

배열 이름은 수정할 수없는 l 값이기 때문에.

string2 a char*string과 같지 않습니까? charstring는 포인터가있을

string22char의 배열이다.

같은 유형의 속성은 어떻게 다른가요?

포인터가 배열 수없는 기억하십니까. stringstring2은 다른 유형입니다.

+0

'= '연산자는 한 문자열에서 다른 문자열로 데이터를 복사하지 않습니다. 여기에 관련된 문제는 관련된 문자의 수와 아무런 관련이 없습니다. 'char string2 [2] = "abc"를 읽는다면 여전히 에러가 될 것이다; string2 = "a";'. – dmckee

+0

@dmckee; 예. 당신 말이 맞아요. 지금 편집되었습니다. – haccks

0

두 번째 코드에서 배열에 새 문자열을 할당하려고합니다.

C 배열은 직접 할당 할 수 없습니다. 사용할 수 있습니다 strcpy

char string2 [2] = "a"; 
strcpy(string2, "ab"); 
관련 문제