質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1174閲覧

base64変換プログラムについて

szbhdulla

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/12/11 15:51

###前提・実現したいこと
以前https://teratail.com/questions/58293にて質問して警告文は出なくなったのですが、思い通りの表示がでなくて困っています。文字列を10進数にしてそれぞれを8bitの2進数に変換している最中なのですが、

入力文字が1文字の場合は

文字列を入力してください:a bin_encoded[0][]=01100001

と正確に表示されるのですが、

入力文字が2文字以上の場合は、

文字列を入力してください:abc bin_encoded[0][]=01100000 bin_encoded[1][]=01100010 bin_encoded[2][]=01100011

と間違った表示がされます。

何度も見直したのですが間違いが全くわかりません。

###該当のソースコード
https://github.com/szbhdulla/base64
に記載があります。

  • base64.sh

実行するための命令です(あまり関係ないと思いますが)

  • base64.c

メインのソースです

  • base64.h

ヘッダファイルです

  • length.c

文字列の長さを求める

  • ToDec.c

文字列を10進数変換する

  • decToBin.c

10進数を2進数へ変換する

###補足情報(言語/FW/ツール等のバージョンなど)
コンパイラ gcc
OS archlinux

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

一ファイルしかソースをみてないですが少なくともlenに問題があります。

警告文は出なくなったのですが
何度も見直したのですが

机上で見直しを行ってもなかなかバグの原因をみつけられないとうことはよくあることです。それは知識の不足や勘違いに起因するので一通り見ても原因が見つからなければ他の方法でデバッグすべきです。よく行うのはプログラムの途中にデバッグ用のprintf文を入れて変数の中身や関数の戻り値が正しいかを確認するといった手法です。

例えばlen()関数のreturnの直前に引数や戻り値を表示してみてください。そうすればlen()が正しく実装されているのかそれとも期待外の値を返してしまっているのかといったことがわかります。そういうデバッグをある程度やれば全然やらないのに比べてバグが見つけられる可能性はぐんと上がります

バグの箇所を教わるのは必ずしも悪くはないのですが「警告がでなくなった後に机上で見直した段階で」助けを求めるのは少々早いです。できるだけ自分で前述のようなデバッグをしてみてください。初心者のうちはそういうデバッグ経験がより重要な意味を持つと思います。

投稿2016/12/11 17:55

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

szbhdulla

2016/12/12 04:35

ありがとうございます。 このデバッグは毎回していきます。
guest

0

ベストアンサー

c言語の配列定義の場合、定義数[8]としてのアドレスの0~7の処理とします。
int buf[8];とした場合
for (i=0; i<8; i++){
printf("%d\n",buf[i]);
}
ですのでbitNum-1は、7個の配列定義となり1つ足りなくなります。

1字のみであれば、うまくいくかもしれませんが、2文字めの[0]が前の[7]と重なると思います。

投稿2016/12/12 00:02

編集2016/12/12 00:37
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

szbhdulla

2016/12/12 04:34

ありがとうございます。 定義自体が間違っていたのですね。 2次元配列に慣れていないので混乱していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問