2013-04-17 2 views
1

C++에서 두 개의 디렉토리를 동기화하는 프로그램을 작성하고 그 중 일부는 char 배열의 크기를 가져와야합니다. 내가 사용하는 코드는 아래 코드입니다sizeof()의 결과로 int를 출력 할 수 없습니다.

#include <iostream> 
#include <Windows.h> 
using namespace std; 

int main() { 
    char binaryPath[MAX_PATH]; 
    GetModuleFileName(NULL, binaryPath, MAX_PATH); 
    int r = sizeof(binaryPath); 

    return 0; 
} 

어쨌든, 그 코드는 제대로 컴파일되어 실행됩니다. 문제는 binaryPath 변수를 사용하려고 시도 할 때 발생합니다. 메인 블록에서 r을 할당/선언 한 후 화면에 r을 출력하려고하면

이진이 실행을 멈 춥니 다. Windows에서는 "Cpp.exe"가 작동을 멈췄으며 프로그램을 강제 종료해야합니다. 나는 절대적으로 이유를 모른다.

나는

#include <iostream> 
using namespace std; 
int main() { 
    int r = 7; 
cout << sizeof(r); 
return 0; 
} 

결과는 동일합니다 아래의 프로그램처럼, 훨씬 더 간단 버전을 시도 할 경우에도 마찬가지입니다. sizeof()를 사용하여 내가 원하는 것을 꽤 많이 할 수는 있지만, 시도하고 출력하자마자 멈추게된다.

Windows 8을 실행하는 Mac에서 MinGW를 사용하고 있습니다. (b/c win8은 과거 C++을 깨뜨린 것이 확실하지 않은 과거의 문제를 일으켰습니다).

도움이 절실히 필요합니다.

감사합니다.

+1

알려줄 내용이 확실하지 않습니다. 이것은 g ++로 컴파일 할 때 잘 동작하며 Mac OS X 및 [ideone의 g ++] (http://ideone.com/tr8m5j)에서 실행됩니다. 문제는 실행 파일이 어떻게 만들어 졌는지, 컴파일러/링커에 대한 설정 또는 사용중인 iostream 라이브러리에있을 수 있습니다. –

+2

충돌은 잘못된 라이브러리에 대한 링크로 인해 발생할 수 있습니다. 내 생각 엔 스트림 클래스가 서로 다른 크기의 컴파일 플래그를 사용하여 빌드 된 것입니다. –

+5

"Windows 8을 실행하는 Mac에서 MinGW를 사용하고 있습니다."- 귀하의 문제를보기 시작합니다 :-) – paxdiablo

답변

0

MinGW를 다시 설치하십시오. 그것은 나를 위해 일했다. 설정을 관리자로 실행하십시오.

1

sizeof()은 개체의 크기를 알려줍니다. 그 안에있는 문자열의 길이가 아니라 MAX_PATH입니다. 이를 위해서는 strlen을 사용하십시오.

+0

세이지 (Sage)의 조언은 있지만 당면한 문제와는 전혀 관련이 없습니다. 'sizeof'의 결과를 출력하는 것은'strlen'의 결과를 출력하는 것과는 조금 달라야합니다. – paxdiablo

+0

이것은 사실이지만, 그가 충돌하거나 매달려있는 이유는 아니지만 알기에 좋다. 그래서 그는 첫 번째 문제를 발견하고 고친 후에 그것에 대해 묻지 않는다. :) –

+0

네, 저도 그걸 깨달았어요.그게 뭐가 잘못 됐는지 확신 할 수는 없어요. - 필자는 시스템에서 링크/컴파일/호환성과 관련이 있다고 추정 할 수 있습니다 ... 제 생각에는이 질문의 제목을 읽고, 코드를보고, 내가 무엇을 알았습니까? OP가 묻고 있었다. –