###前提・実現したいこと
入力した文字列をbase64で変換するプログラムを改良したものが完成したと思ったのですが、、、
###発生している問題・エラーメッセージ
以前https://teratail.com/questions/53500にて質問させて頂いた際にご教授頂いたecho文を使い正しい出力かみるという方法を試してみると以下のような現象が起こりました。
$ echo -n 'Hello World' | base64 SGVsbG8gV29ybGQ= /*正しい*/ $ echo -n 'Hello World' | ./base64 SGVsbG8gV29ybA== /*正しくない*/ $ ./base64 Hello World SGVsbG8gV29ybGQ= /*正しい*/
ご指摘があったので追記させていただきます。
./base64は自分の作った実行ファイルを起動シています。
echoとパイプラインをつかった出力では誤った値が出てくるのです。通常どおりに起動すると正しい値が表示されるのですが、、、
どうすれば改善するかを教えていただきたいです。
また良ければこのソースコードにダメ出しや改善点を教えてほしいです。
###該当のソースコード
base64.c
c
1#include <stdio.h> 2#include "base64.h" 3 4int main(void){ 5 6 char pre_encode[MAX_INPUT]; //入力値 7 fgets(pre_encode, sizeof(pre_encode), stdin); 8 9 int length = len(pre_encode); 10 11 //decへエンコード 12 int dec_encoded[MAX_INPUT]; //エンコード先 13 ToDec(pre_encode, dec_encoded, length); 14 15 //binへエンコード 16 int bin_encoded[MAX_INPUT][bitNum]; //エンコード先 17 allDecToBin(dec_encoded, bin_encoded, length); 18 19 //一列にsort 20 int sorted[MAX_INPUT*length]; 21 sort(bin_encoded, sorted, length); 22 23 //6つに分割 24 int column_6 = (length*bitNum-1)/6+1; //商+1 = 行数 25 int divided_6[column_6][6]; 26 divide_6(sorted, divided_6, length*bitNum); 27 28 //文字列に変換 29 char post_lib[column_6]; 30 enLibrary(divided_6, post_lib, column_6); 31 32 //最終整形 33 int resultLen = column_6+4-(column_6%4); 34 char post_output[resultLen]; 35 last_encode(post_lib, post_output, column_6); 36 37 for(int i=0; i<=resultLen-1; i++){ 38 printf("%c", post_output[i]); 39 }printf("\n"); 40 41 return 0; 42}
その他のファイルはhttps://github.com/szbhdulla/base64にあります。
###補足情報(言語/FW/ツール等のバージョンなど)
シェル bash
OS archlinux
コンパイラ gcc
回答3件
あなたの回答
tips
プレビュー