2011-01-19 8 views
0

: 어떻게 읽기에 충돌 그리고 두 번째 질문은이 전 정수처럼 계속 어디 구조를 가지고 있다고 가정하자에 fwrite, FREAD - FREAD 문제 내가 코드를 다음 한

int main() 
{ 
    char* pedal[20]; 
    char* pedal2[20]; 
    for (int i = 0; i < 20; i++) 
    { 
     pedal[i] = "Pedal"; 
    } 
    FILE* plik; 
    plik = fopen("teraz.txt","wb"); 
    for (int i = 0; i < 20; i++) 
    { 
     fwrite(pedal[i],strlen(pedal[i]),1,plik); 
    } 
    system("pause"); 
    fclose(plik); 
    plik = fopen("teraz.txt","rb"); 
    for (int i = 0; i < 20; i++) 
    { 
     fread(pedal2[i],5,1,plik); //I know for now that every element has 5 bytes 
    } 
    for (int i = 0; i < 20; i++) 
    { 
     std::cout << pedal2[i] << std::endl; 
    } 
    fclose(plik); 
    system("pause"); 
    return 0; 
} 

, 수레도 문자 * 배열 할 수 있습니다 나는 easly 전체 구조체를 파일에 쓴다. sizeof 구조의 일반 fwrite가 작동하지 않습니다.

답변

0

pedal2은 처음으로 공간을 할당하지 않아도 읽을 수 없습니다. 당신이 읽기 위해 버퍼를 할당하지 않았다

for (int i = 0; i < 20; ++i) { 
    pedal[i] = malloc(100); //allocate some space 
} 
+0

미리 20으로 설정 했더라도? 글쎄, 나는 malloc hre이 올 것 같아. 그 구조는 어떨까요? – ThanksInAdvance

+0

아니, 당신은 스택에 20 포인터의 배열을 할당하지만, 당신은 매우 동일한 포인터의 값을 할당하지 않습니다. – Simone

+0

AAAA 알 겠어, 바보. – ThanksInAdvance

1

귀하의 문제 :

당신이 뭔가를해야합니다. 사실 라인

fread(pedal2[i],5,1,plik) 

읽지 않은 곳으로 읽습니다. 메모리를 할당해야합니다 (이 경우 종료 문자열이 0 인 경우 5 + 1 바이트입니다).

pedal2[i] = malloc(5+1); 
fread(pedal2[i],5,1,plik) 

사용 후에는 반드시 해제해야합니다.

0

첫 번째 질문은 Simone이 이미 대답 한 것 같습니다. & Dewfy.

구조 값을 파일에 쓰는 방법에 대한 두 번째 질문은 회원별로 작성해야합니다.

fprintf을 확인하십시오. 당신은 아마 다른 데이터 유형을 쓰는 데 사용할 수 있습니다.

+0

음, 고마워. – ThanksInAdvance

관련 문제