2014-09-12 3 views
-2

Я пытаюсь написать программу, откроет обычный файл типа (двоичный или текстовый/ASCII, прочитает каждый байт в файле и напишет как шестнадцатеричное значение ASCII для этого байта, так и его печатный (удобочитаемый) символ (.. символы, цифры, символы) на стандартный вывод теперь я просто пытаюсь, чтобы позволить пользователю выбрать файлКак читать обычный текстовый файл?

#include <stdio.h> 
#include<stdlib.h> 

FILE *file; 
int main(int argc, char *argv[ ]){ 
    int a; 
    int modified = 1;//1 means unmodified, 0 means modified 
    if(argc > 2){//writes to std error output 
     return 25; 
    } 
    if(argc == 2){// if there is 1 argument open it and read it 
     file = fopen(argv[1], "rt"); 
     if(file == NULL){//cant open file. return error code 15 
      fprintf(stderr, "cant opent file %s \nerror code 15 \n", argv[1]); 
      return 15; 
     } 
     a = getc(file); 
    }else// get characters from stdin if no arguments 
     a = getchar(); 


    char *buffer = malloc(200); 
    int j = 0;// buffer index helper 

    while(a != EOF){//reads character by character until EOF 
       if(j > 200){ 
        j =0; 
       //  fprintf(stderr,"error error, buffer overflow. \n error code 35 \n"); // send error to stderrl 
       //  return 35; 
       } 

Я получаю ошибки, хотя:

error: invalid conversion from `void*' to `char*' xsd.cpp:30: error: expected `}' at end of input xsd.cpp:30: error: expected `}' at end of input

+1

Вы не нашли пару}} в конце кода или просто не вставляете все? –

+0

Я обычно предлагаю сначала установить первое сообщение об ошибке. Но в этом случае, оставляя закрывающие скобки, это ошибка, которая настолько проста, что она должна быть исправлена ​​даже до публикации кода. – DavidO

+0

Не достаточно ли этих ошибок? Просто прочитайте их и обрабатывайте их один за другим. – Deduplicator

ответ

3

основная проблема заключается в том, что вы пишете C в программе на C++. C и C++ похожи, из-за того, что C++ наследует C, но y - это в конечном счете разные языки. Например, C++ имеет более сложную и более жесткую систему типов, поэтому вы не можете, например. имеют неявный листинг от void * к другим типам указателей, как вы можете в C. В C++ вы должны отличать void * правильному указателю, например, например.

char *buffer = reinterpret_cast<char*>(malloc(200)); 

Еще лучше было бы не писать код C в C++ и использовать ++ функции C, как new/delete, в C++ input/output library и классы как std::string для струнных и т.д.


Тогда есть конечно, проблема в том, что у вас не хватает закрывающих брекетов } в конце программы. Вы не копировали все программы?

+0

Очевидно, что он C & P всю свою программу: его ошибки-компиляторы доказывают это. – Deduplicator

+0

Да, я должен забыть}. jesus .. последний раз Im размещение здесь. Также мне нужно было бросить на char .. thanx ни за что. –

Смежные вопросы