意味不明な挙動(雑談スレ)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
管理人

意味不明な挙動(雑談スレ)

#1

投稿記事 by 管理人 » 18年前

学部生に「突然プログラムが変な動きをするから見て欲しい」と言われたので見てみました。

すると、シェル画面がプログラムを実行すると突然意味不明な中国語の羅列のような画面にかわったり、
特定のprintf文の最初の文字が表示されなくなったり意味不明な挙動をしていました。

print文の最初の文字が表示されないと言うのは

printf("Count\n");
printf("Count\n");

↓

Count
 ount

こんな感じになるんです。しかし2番目を改行すると

printf("Count\n");

printf("Count\n");

↓

Count
Count

正常に表示されたり、意味がわかりませんでした・・。
何が原因でなっているのか、一つ一つ見ていったところ、
文字コードに-50が入ったものを使用している部分がありました。
以下のような感じです。

char b[4]="abc";
b[2]=-50;
printf("%s",b);

これを実行すると何故か次からprintf文の最初の文字が表示されなくなったり、
シェル画面が中国語になったりしていました。
原因はよくわからないのですが、ウィンドウズではなりません・・。
linuxはよくわからない挙動をするので、質問に答えるのが結構大変です^^;

Justy

Re:意味不明な挙動(雑談スレ)

#2

投稿記事 by Justy » 18年前

>原因はよくわからないのですが
 うーん、実際やってみないとわかんないですけど、何となく端末が受け取った後の処理で
何かがずれてしまって以後間違ったまま解釈していったのではないでしょうか。
 例えば EUC-JPだったとして、0xCE(-50)が第一バイトに 次の 0x00が第二バイトであると
(そんな文字コードはないのに)解釈されてしまったとか。


 そういうあからさまにおかしい文字列を突っ込んだ場合はともかくとして、
Windows/Linux問わず、文字コードを決めつけて作られているプログラムを
実行したりすると普通に化けますよね。


 ちなみに
[color=#d0d0ff" face="monospace]    char b[/url]="テスト";
    printf("%s",b);[/color]
 なシンプルなものでも Widows+MSVC7.1で、UTF-8/UTF-16(bom付き)で保存したソースをビルドして
実行すると見事に化けます(w

管理人

Re:意味不明な挙動(雑談スレ)

#3

投稿記事 by 管理人 » 18年前

なるほど。
しかし突然中国語?のような漢字だらけのシェル画面に豹変したときはびっくりしました^^;
resetとコマンドすると直ることが判明したんですが、入力中もresetに相当する意味不明な漢字が表示されるので怖いですw

学生がコードのprintfの書いている行を1段ずらすとコンパイルがうまくいくと言っているのを聞いて、
いや~それは関係ないだろうと思ってしまいましたが、
色々な可能性を考えるべきですね^^;

大工

Re:意味不明な挙動(雑談スレ)

#4

投稿記事 by 大工 » 18年前

お久しぶりです。

unix やら linuxの話っぽいのでちょっと質問・・・・

-lmってどういう意味のオプションでしたっけ?

最近Javaばっかりなので忘れてしましました><。

管理人

Re:意味不明な挙動(雑談スレ)

#5

投稿記事 by 管理人 » 18年前

私はlinuxをほとんど使わないのですが、それは数学のmath.hをインクルードする時に使うオプションではなかったでしょうか?

Justy

Re:意味不明な挙動(雑談スレ)

#6

投稿記事 by Justy » 18年前

printfの書いている行を1段ずらすとコンパイルがうまくいくと言っているのを
 不思議ですねぇ。

 たしかに実際問題 C/C++で書いたコードが正しくコンパイルされないことも多々はあります。
 そういうときは、コンパイラにアセンブリコードを出力させて調べると・・・
今回の場合ですとprintfの行を変えて、吐き出されたコードを比較すると
どうなっているのかわかると思います。

 gccなら -Sオプションだったかと思います。


-lmってどういう意味のオプションでしたっけ?
 -lはライブラリのリンクの指定で、-lmなら libm.aをリンクします。

大工

Re:意味不明な挙動(雑談スレ)

#7

投稿記事 by 大工 » 18年前

管理人さま・Justyさま>

返信ありがとうございます

libm.aが分からなくてググッてみたらなんとコマンド一覧(?)のページにたどり着けました!!

ここで修行してきます!

閉鎖

“C言語何でも質問掲示板” へ戻る