2012-03-30 3 views
1

문자열 입력이 1000자를 넘으면 코드가 중지됩니다.
Q & Q의 모든 문자는 소문자 영문 문자입니다.문자열 입력이 1000자를 넘는 경우 실행이 중단됩니다.

#include<iostream> 
    #include<vector> 
    using namespace std; 

    int main(){ 

    // 1st example 
    string p,q; 
    cin >> p >> q; 

    // 2nd example 
    char p[1500],q[1500]; 
    scanf("%s",p); 
    cin >> q ; 

    return 0; 
    } 

둘 다 1000 자 미만의 문자열에 대해서는 정상적으로 실행됩니다.
두 가지 다른 예제는 1000자를 초과하는 문자열에 대해 손상됩니다.
난 그냥 최대 1500 chracters

편집의 입력 문자열에 대한 방법이 필요합니다 : 엑스 코드가 잘못이었다 밝혀졌습니다. 서버에서 정상적으로 작동합니다.

+2

프로그램 조각에 혼란스러워합니다. 두 가지 예가 대안입니까? 어느 것이 효과가 있고 어느 것은 깨지나요? 아니면 시리즈로 처형 될 것인가? 그런 다음 첫 번째 또는 두 번째 예에서 중단됩니까? ** 오류 ** ** ** ** 프로그램을 게시하십시오. 이유를 찾으려면 http://sscce.org를 읽으십시오. –

+0

어떻게 입력을 제공합니까? 아마도 터미널이 멈추고 프로그램이 아닌 것입니까? – hillel

+0

어떤 컴파일러 및 운영 체제입니까? – egrunin

답변

-2

유니 코드 입력을 전달하면 버퍼가 오버플로되어 &이 충돌합니다.

편집은 추가 :

당신이 운이 좋다면. 소문자 영문 유니 코드 문자는 각각 이고 두 바이트는 각각입니다. 파일에서 입력 한 것이면 유니 코드인지 여부로 알 수 없으므로 16 진수 편집기에서 열어야합니다.

테스트하려면 버퍼를 입력 (p[2001], q[2001])의 두 배로 만드십시오.

정적 버퍼를 사용하면 이 잘못된 방법입니다., string이 올바른 방법입니다. 상한선은 2^32 자 정도입니다.

+0

글쎄, 적어도, 잘하면 충돌합니다. –

+0

어떻게 OP 문제를 해결할 수 있습니까? – jwodder

+0

P & Q의 모든 문자는 소문자 영문 문자입니다. – user1301541

관련 문제