2012-11-23 5 views
2

내가 선언에 * 숯불과 * 문자의 문자열을 초기화하기 위해 다음과 같은 : 그것은 ++를 내가 거기에 입력 한 내용을 줘하지만, 비주얼 C++에서 DevC를 사용이상한 출력은 다른 컴파일러

int length; 
cout<<"Enter string length: "; 
cin>>length; 
char* str = new char[length]; 
cout<<"Enter your string here:"; 
for(int i = 0;i < length;i++) 
cin>>str[i]; 
cout<<str<<endl; 

컴파일 끝 부분에 임의의 문자가있는 문자열을 출력하십시오. 예를 들면 다음과 같습니다. 나는 비주얼 C가 내게 줄 ++ "안녕하세요"를 입력 :?. 이런 일이 않는 이유를 "안녕하세요 ^^ & * (Y &".Can 누군가가 나에게 설명

+0

* 누군가가 내게 설명 할 수 있습니까? 왜 이런 일이 발생하지 않습니까? * 아무도 무슨 일이 일어나야하는지 정의하지 않았기 때문에? –

+0

'cout << str'문은 'str'을 널로 끝나는 C 문자열로 처리합니다. str의 끝에서 '\ 0'을 추가하거나, str의 모든 단일 char을 할당하는 대신 'cin >> str'을 사용하십시오. – Yuan

+0

@ ta.speot.is - 제 답변에서 설명했습니다. – user93353

답변

2

당신은 문자열을 종료 null이 아니에요 당신은 지정해야 length + 1의 char 배열은 문자열 끝에 null 문자를위한 공간을 허용합니다.

+0

+1 : 당신이 나를 때려 : – paulsm4

+0

고맙습니다. 난 그냥 VC를 사용하기 시작, 그것은 문자열, 배열 포인터 DevC에서 훨씬 다른 것 같다. – Husky

+2

@Husky 여러분의 코드가 도청 당했기 때문입니다. DevC++에서 올바르게 실행되었지만 잘못되었습니다. C++을 더 배울수록 올바른 프로그램은 모든 컴파일러에서 동일하게 실행되지만 버그가있는 프로그램은 다른 컴파일러에서 다르게 실행된다는 것을 알 수 있습니다. 때로는 도청 프로그램이 제대로 작동하는 것처럼 보일지라도 도청되지 않았 음을 의미하지는 않습니다. – john

0

을 당신은 결코 당신의 문자열을 종료하지 있습니다. str[length-1] = '\0';를 넣습니다.

또는 더 나은, 당신은 new char[length+1];를 할당해야합니다.

IMH 어떤 for 루프가 필요하지 않습니다이

for(int i = 0;i < length;i++) 
    cin>>str[i]; 

cin>>str; 

에 O ...

0

변경합니다. char 대신 char을 사용하여 문자열 전체를 읽을 수 있습니다. 당신이 문자로 숯불 읽으려면

다른 방법으로는, 당신은 cout이 문자열이 \0 종료되는 것을 가정하기 때문에 문자열의 끝을 표시하는 \0이 필요합니다.

그래서 본질적으로, 당신은 당신이 length -1 문자를 읽고는 \0으로 종료

for(int i = 0;i < (length - 1);i++) 
    cin>>str[i]; 

str[i] = '\0'. 

이 필요합니다.

+0

'cin >> str'은 공백이있는 문자열을 올바르게 처리하지 않습니다. – SigTerm

+0

공백이있는 문자열을 사용하려면'cin.getline (str, length);을 사용하십시오. – user93353

+0

str [256] getline()과 같은 문자열은 올바르게 작동하지만 문자열 char * 및 위의 VC++와 같은 길이는 작동하지 않습니다. 길이를 입력 한 직후 입력을 건너 뛰고 빈 문자열을 출력합니다. – Husky

2

문자열 끝에 Null 종결자가 없습니다. 비 VC++ 컴파일러는 어떻게 든 처리하지만 VC++에서는 길이 + 1 문자를 할당 한 다음 마지막 하나를 '\ 0'으로 설정해야합니다. 예 :

char* str = new char[length + 1]; 

cout << "Enter your string here:"; 
for (int i = 0; i < length; i++) 
    cin >> str[i]; 

str[length] = '\0'; 
+0

답변 해 주셔서 감사합니다. 전 충분히 upvote 할 담당자가 없지만 할 수있을 때하겠습니다. – Husky