2013-06-18 2 views
0

빈 버퍼 (char *)를 채우는 함수가 있습니다. 다음과 같이 보입니다 :버퍼 및 버퍼 크기를 매개 변수로 전달

QtCreator에서 새 GUI와 함께 사용할 때까지 완벽하게 작동했습니다. 컴파일러에서 그는 이 상수 표현을 필요로하고 그는 이 정수 크기 0buf의 배열을 할당 할 수 없다고 알려줍니다. 알 수없는 크기.

내가 조금만 찾았고 은 동적으로 배열을 할당해야한다는 것을 알았습니다. 그것은 작동하지만, 지금은 왜 .. 스택에 그것을 할당 할 수 없는지 궁금합니다. 나쁜 코딩인가요? 또한 이전에 왜 작동 했습니까? 감사합니다

+1

코드를 표시 할 수 있습니까 ?? 왜 std :: string, QbyteArray 또는 QString이 아닌 char 배열을 사용하고 있습니까? – UmNyobe

+0

배열에 스택을 할당하려면 컴파일러에서 배열의 크기를 알아야하므로 런타임 전에 지정해야합니다. 이것이 수신 된 오류가 '알 수없는 크기'인 이유입니다. @UmNyobe가 말하듯이 QString이나 QByteArray를 char 배열보다 사용하는 편이 낫습니다. – TheDarkKnight

답변

1

질문에 대한 기본적인 대답은 C++ 표준이 가변 길이 배열을 허용하지 않는다는 것입니다. sizeBuffer의 값을 컴파일 할 때 알 수 없으므로 가변성을 알 수 있습니다. 이 결정의 정확한 이유는 잘 모르겠지만 컴파일러의 작업을 단순화하고 스택 오버플로를 방지하는 데 도움이됩니다.

사이드 노트로, 나는 처음부터 별도의 버퍼를 선언 할 필요가 없다고 생각합니다. 매트릭스의 데이터를 buffer 매개 변수로 바로 복사 할 수 없습니까? 그리고 대신 QString & 인수를 사용하지 않으시겠습니까? 아니면 QString을 돌려 주시겠습니까?

+0

답변 해 주셔서 감사합니다. QString을 사용하지 않은 이유는 간단합니다. 이러한 함수를 작성할 때 qt를 사용하게 될지 몰랐습니다. std :: string 대신 char *을 사용했습니다. 왜냐하면 다른 프로그래머의 작업을 계속하고 있기 때문에 char *를 사용하고 있었기 때문에 계속 그렇게했습니다. –

+0

그러나 나는 왜 그것이 전에 컴파일되고 있는지 궁금해하고있다. ..? –

+0

그렇지 않았습니다. 가변 길이 배열은 C++에서 허용되지 않습니다. 아마'sizeBuffer'는 이전 코드에서 상수였습니다. –