2012-07-23 6 views
3

선언 후에 문자열을 초기화 할 수 있습니까? 대신선언 후에 문자열을 초기화 할 수 있습니까?

char *s = "test"; 
+0

첫 번째 경우에는 문자열에 필요한 메모리를 할당해야합니다. 두 번째로 자동 완성됩니다. – OmnipotentEntity

+0

@OmnipotentEntity : 아니요, 두 경우 모두's'는 정적으로 할당 된 읽기 전용 문자열을 가리 킵니다. –

+0

더 잘 시도해보십시오. –

답변

4

당신이 할 수의

char *s; 
s = "test"; 

하지만 명심 당신이 다른 곳에 할당 된 읽기 전용 문자열로 s 포인터에 저장되는 문으로. 변경하려고 시도하면 정의되지 않은 동작이 발생합니다 (일부 컴파일러에서는 작동하지만 자주 충돌하는 경우도 있음). 그렇기 때문에 일반적으로 const char *을 사용합니다.

+0

은 스택의 "test"문자열 리터럴입니까? –

+0

둘의 차이점은 무엇입니까? – user1301568

+0

@ Nandkumar : 아니오, 글로벌처럼 할당됩니다. –

1

예, 가능합니다.

#include <stdio.h> 

int 
main(void) 
{ 
    // `s' is a pointer to `const char' because `s' may point to a string which 
    // is in read-only memory. 
    char const *s; 
    s = "hello"; 
    puts(s); 
    return 0; 
} 

주의 : 배열에서는 작동하지 않습니다.

#include <stdio.h> 

int 
main(void) 
{ 
    char s[32]; 
    s = "hello"; // Syntax error. 
    puts(s); 
    return 0; 
} 
1

따옴표 안에있는 문자열이 컴파일시 컴파일러에서 할당되기 때문에 (위에서 언급 한 바와 같이) 그것은 포인터에 대한 올바른, 그래서 당신이 메모리 주소를 가리킬 수 있습니다. 내용을 변경하려고하거나 고정 크기의 배열을 가리키고 자 할 때 문제가 발생합니다.

관련 문제