2016-09-28 1 views
0

죄송합니다.이 기본 문제는 녀석들에게는 미안하지만, 문제가 생겨서 fwrite()이 제대로 작동합니까?기존 파일에 아무 것도 쓰지 않고 fwrite()가 실패합니다.

#include <iostream> 
#include <fstream> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
using namespace std; 

int main() { 

    FILE* fd = NULL; 
    fd = fopen("out","rw"); 

    if (fd == NULL) { 
     printf("Open failed\n"); 
     return -1; 
    } 

    int error = 0; 

    printf("Attempting write ... \n"); 
    char buff[] = {"hello?\n"}; 

    if((error = fwrite(buff, 1, 7, fd)) != 7) { 
     printf("fwrite() failed with code %d \n", error); 
     return -1; 
    } 

    fclose(fd); 

    return 0; 
} 

이 코드는 실패 -이 파일에 기록 칠 개 1B 문자 대신 7을 반환해야 할 때 fwrite() 그냥 0 반환합니다. 파일이 같은 디렉토리에 존재합니다. 나는 이것을 전체 파일 경로로 시도했다. 나는 chmod'd 출력 파일 out to 777 (문제가 아니었다)에 대비해; fread()fseek() 모두 예상대로 작동하지만 간략하게 사용했습니다.

내가 뭘 잘못하고 있니? 어떤 도움을 주셔서 감사합니다.

+0

이것은'C++ '대신에'c' 질문처럼 보입니다. 여러분이 맞다면 –

+0

@appleapple 태그를 수정해야합니다. 코드의 특정 부분에 C 라이브러리를 사용해야하지만 전체 프로젝트는 제가합니다. 작동을 위해 기술적으로 C++을 사용하고 있습니다. – APaul

답변

0

fopen"rw" 모드가 아니므로 fwrite부터 이진 모드로 파일을 열어야합니다. 당신이 원하는 무엇

"wb", "w+b" 또는

+0

예, 어떤 이유로 저는 모드가 함께 움직일 것이라고 생각했습니다 ("r"과 "w"는 함께 "rw"이어야 함). 내 오류는 문자 그대로 "rw"를 "r +"로 변경하는 것처럼 간단합니다. / – APaul

0
fd = fopen("out","rw"); 

"r+b"는 "RW"유효한 개방 모드 중 하나가 없습니다.

자세한 내용은 fopen(3) manual page을 참조하십시오.

플랫폼 또는 C 라이브러리를 지정하지 않았습니다. Linux에서는이 fopen() 호출이 실패합니다.

관련 문제