如何阅读常规文本文件?

时间:2014-09-12 22:55:45

标签: c++ text

我正在尝试编写程序将打开常规类型文件(二进制或文本/ 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 :(得分:3)

主要问题是你在C ++程序中编写C语言。 C和C ++是相似的,因为C ++继承自C,但它们最终是不同的语言。例如,C ++有一个更难和更强硬的类型系统,所以你不能例如从void *隐式转换为其他指针类型,就像在C中一样。在C ++中,你必须将void *转换为正确的指针,例如。

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

更好的做法是不用C ++编写C代码,并使用C ++功能,如new / deleteC++ input/output library和类std::string等字符串作为字符串等等。


然后当然还有你在程序结束时没有足够的结束括号}的问题。你没有复制粘贴所有程序吗?