从C程序生成命令行应用程序

从C程序生成命令行应用程序,c,C,如何将此程序(binary.c)转换为命令行应用程序,以便它可以读取任何二进制文本(例如,binary1.txt)文件,然后将其转换为ASCII?例如,我想做: ./binary < binary1.txt /binary

如何将此程序(binary.c)转换为命令行应用程序,以便它可以读取任何二进制文本(例如,
binary1.txt
)文件,然后将其转换为ASCII?例如,我想做:

./binary < binary1.txt 
/binary
它应该打印出来

你好,世界

在命令行

这是我的节目:

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

int main()
{
FILE *f_ptr;
f_ptr = fopen("binary1.txt", "r");
if (f_ptr == NULL){
printf("Error opening binary1.txt");
return 1;
}

while(1){
int ch = fgetc(f_ptr);
if(ch == EOF)
break;

printf("%c",ch);

}

fclose(f_ptr);
return 0;
}
#包括
#包括
int main()
{
文件*f_ptr;
f_ptr=fopen(“binary1.txt”,“r”);
如果(f_ptr==NULL){
printf(“打开binary1.txt时出错”);
返回1;
}
而(1){
int ch=fgetc(f_ptr);
如果(ch==EOF)
打破
printf(“%c”,ch);
}
fclose(f_ptr);
返回0;
}

我不知道你在问什么。我想您需要使用编译器编译源代码。如果您使用Linux,您可以执行以下操作:
gcc binary.c-o binary
获取可执行文件…

据我所知,您正在尝试将文件名传递给您的程序,但不确定如何执行该操作。在这种情况下,你可能想这样做

int main(int argc, char* argv[])
{
  if(argc>1)
  std::string filename = argv[1];
  //now you have the file in the filename

 // your code 
 return 0;
}
所以当你执行的时候就这么做

./binary binary1.txt
您不需要使用
\include
int main(int argc,char*argv[]){
文件*fp;
如果(argc<2)/./binaryout Show示例of
binary1.txt
。你是在问如何从源代码构建可执行文件吗?你知道
如果你想让程序从重定向文件而不是预先命名的文件获取输入,只需使用stdin/stdout,而不是按名称打开文件。10010001100101110110011011011110100001010111100110110011001000100001这是binary.txt文件问题是关于C的。这不是C。而且
if(argc)
应该是
if(argc>1)
…而
char argv[]
应该是
char*argv[]
。-叹气-为什么接受这个?
#include <stdio.h>

int main(int argc, char *argv[]){
    FILE *fp;
    if(argc < 2)//./binary < binary1.txt
        fp = stdin;
    else {//./binary  binary1.txt
        if((fp=fopen(argv[1], "r")) == NULL){
            perror("fopen");
            return 1;
        }
    }
    int ch, count = 0;
    unsigned char out = 0;
    while((ch = fgetc(fp))!=EOF){
        if(ch == '1' || ch == '0'){
            out <<= 1;
            out += ch - '0';
            if(++count == 7){//7bit code
                printf("%c", out);
                count = out = 0;
            }
        }
    }
    puts("");
    fclose(fp);
    return 0;
}