2010-08-22 3 views
0

나는 텍스트 입력을 받아 개별 문자를 수정해야하는 프로그램을 작성 중이다.C++에서 변수를 사용하여 배열 선언

char s[] = "test"; 
s[0] = '1'; 
cout << s; 

(Returns: "1est") 

을하지만 시도과 같이, 변수를 사용하는 경우 : 그래서 같은 문자의 배열을 사용하여이 일을하고 error: initializer fails to determine size of 's2'

:

string msg1 = "test"; 
char s2[] = msg1; 
s2[0] = '1'; 
cout << s1[0] 

를 오류가 발생합니다 왜 이런 일이 생길까요?

답변

4

C 스타일 배열 초기화에 대한 리터럴 값이 필요합니다

그것을 할 수있는 방법은 숯불에 대한 포인터를 선언하고 동적으로 할당하는 것이다. C 스타일 배열을 사용하는 이유는 무엇입니까? 왜 그냥 std :: string을 사용하지 않는 것이 좋을까요?

string msg1 = "test"; 
string s2 = msg1; 
s2[0] = '1'; 
cout << s2[0]; 
0

char a []를 문자열로 초기화 할 수 없다고 생각합니다. 편집 : "문자열"은 실제로는 C 유형 문자열 (끝에 '\ 0'이있는 문자 배열)입니다.

+0

문자열로 초기화 할 수없는 경우 대신 사용해야하는 것은 무엇입니까? – Strigoides

+0

std :: string char * 배열을 반환하는 c_str() 메서드가 있습니까? (나는 문서를보고 있지 않다. 단지 여기의 메모리이다.) –

+1

C 존슨이 의미하는 것은 char a [] = msg1.c_str()를 사용하는 것이 트릭을 할 수 있다는 것이다. – LLS

2

모든 변수의 공간은 컴파일 할 때 할당됩니다. s2이라는 문자 배열을위한 공간을 할당하도록 컴파일러에 요청했지만, 얼마나 오랫동안 만들지는 알려주지 않습니다.

char *s2; 

s2 = malloc(1+msg1.length()); // don't forget to free!!!! 
s2 = msg1; // I forget if the string class can implicitly be converted to char* 

s2[0] = '1' 

... 
free(s2); 
-1

$ 8.5.1 및 $ 8.5.2는 집계의 초기화와 관련된 규칙에 대해 이야기합니다.