我正在尝试编写程序将打开常规类型文件(二进制或文本/ 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
答案 0 :(得分:3)
主要问题是你在C ++程序中编写C语言。 C和C ++是相似的,因为C ++继承自C,但它们最终是不同的语言。例如,C ++有一个更难和更强硬的类型系统,所以你不能例如从void *
隐式转换为其他指针类型,就像在C中一样。在C ++中,你必须将void *
转换为正确的指针,例如。
char *buffer = reinterpret_cast<char*>(malloc(200));
更好的做法是不用C ++编写C代码,并使用C ++功能,如new
/ delete
,C++ input/output library和类std::string
等字符串作为字符串等等。
然后当然还有你在程序结束时没有足够的结束括号}
的问题。你没有复制粘贴所有程序吗?