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

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

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

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

Q&A

4回答

1251閲覧

独自で追加した文字列を書き込む自作動作ががうまく動かない

Cobalt

総合スコア10

C

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

0グッド

0クリップ

投稿2015/12/26 09:53

編集2015/12/26 10:32

Cげんごで、文字列をテキストデータいう「1行分」控えておいた文字列を下に移した自作のソースでまとめて書こうとしたのですが、文字化けが発生し、うまくいかず困っています。どこがうまくいってないのかもうまくわかりません。助言をお願いします。

#define LF_EXTRA 0
unsigned long fpos = 0;

void writestr2(char str[]) {
int a=0;//配列内の文字の順番を確認

fpos += strlen(str); while (str[a] != '\0') { //文字コードが0になるNULL,終端文字で終了 if (str[a] == '\n') fpos += LF_EXTRA; putchar(str[a]); a=a+1;

}

ちなみに、文字列には「ch = getc(infile),str[x]=ch; x=x+1;」といった形で控えています。
(必要な情報があれば随時対応しようと思います。)

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

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

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

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

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

Chironian

2015/12/26 10:06

どのようにうまくいかないのでしょうか? コンパイルできない? 意図しない出力になる? それと、Cobaltさんは「控える」という言葉の意味を取り違えているように思います。http://dictionary.goo.ne.jp/jn/183264/meaning/m0u/ 文脈的には「記録する」、「保存する」が近そうな気がします。
Cobalt

2015/12/26 10:35

質問の具体性を更新しました。「文字化け」がはっせいし、意図していない出力になってしまいます。
guest

回答4

0

こんにちは。

C

1writestr2("12345\n");

と呼び出したら、ちゃんと12345と表示されました。
呼び出し側の不具合ではないでしょうか?

fposについてはyoshi777さんに同意です。

投稿2015/12/26 10:45

Chironian

総合スコア23272

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

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

Cobalt

2015/12/29 00:46

回答だけでなく、検証もしてくださり、ありがとうございます。 なるほど、「呼び出し側の不具合」ですか、確認してみます。
guest

0

UTF-8などで書かれたテキストのデータをそのまま流し込んだ場合ですと正しく読み取れない可能性があります。
ソースコード上でサンプルの関数にそのまま文字列を渡しても異常は見られませんでしたが、上記のようにファイルから読み込ませていた文字列の場合、UTF-8で書かれた『日本語』は『譌・譛ャ隱』というように表示されます。

また、サンプルの関数を調整して『時間を置いて一文字ずつ表示させる』ようにした場合、どれが一バイトかそうでないかを判別できないと、半端な文字コードを一つの文字として読むことになりえます。この場合も文字化けします。

投稿2015/12/26 11:26

kobaya_c

総合スコア30

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

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

0

~~がうまく動かない

的な方で、環境記述が無いので
1.OSは何ですか?
2.開発環境は何ですか?
3.コンパイラに対応するデバッガを使って、デバッグしてみましたか?
コンピュータ言語系を学ぶ場合は、
エディタ、コンパイラ、だけでなく、デバッガについても学習しましょう。
統合開発環境であれば、通常は、左程面倒でなく使える様になっているはずです。

エディット、コンパイル、実行⇒想像通りに動かないでは、雲を掴む話になってしまいます。
エディット、コンパイル、デバッグ(不具合があれば、エディットへ)、、、、
が、リリース前に行う最低限のルーチンワークです。
デバッグの段階でのツールが、デバッガです。
デバッグツールの使い方が、上手に出来るかどうかで、
効率が大幅に変わりますので、勉強してみてください。

投稿2015/12/26 10:48

daive

総合スコア2028

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

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

0

fpos はどのような目的の変数なのでしょうか。
fpos の参照箇所がないのが気になります。
また、LF_EXTRA は 0 なので、 fpos += LF_EXTRA では fpos は変化しません。

投稿2015/12/26 10:03

yoshi777

総合スコア674

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問