トップページ⇒tech
1001コメント370KB

C/C++の宿題を片づけます 49代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/10(水) 17:10:47

あなたが解けないC/C++の宿題を片づけます
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows/Linux/等々
 [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
 [3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【前スレ】
48代目: http://pc8.2ch.net/test/read.cgi/tech/1121471445/

【歴代スレは>>2-13】
0331デフォルトの名無しさん2005/08/28(日) 06:40:23
オマエら朝から暇だな。

>>329
TAが配布したデータをupせよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0332デフォルトの名無しさん2005/08/28(日) 06:50:18
>>330
データ圧縮は上でも推測されてたようにあるかもしれませんが、
ヒストグラムをつくってから考えたいと思います。
ためしにZIPで圧縮したら1.2Mが60kになったので関係ありそうな気がしますね・・・
>>331
TAから公開してはいけないとは言われいないデータなのですが、あまりにちゃんに慣れてない
ので怖いのでアップするのは勘弁してもらえないでしょうか?
0333デフォルトの名無しさん2005/08/28(日) 06:52:16
あと気づいたことが会って
TAからはRGBαという構成といわれたんですが
どうも調べるうちにαBGRになっているような気がします。
一般論として環境によってはデータが逆さまになることがあるとか
きいたことがあるようなないような・・・
0334デフォルトの名無しさん2005/08/28(日) 06:55:50
>>333
x86系はリトルエンディアン
0335デフォルトの名無しさん2005/08/28(日) 06:58:20
>>334
ありがとうございます
確かそのような名前でなにかあったことを記憶しております
0336デフォルトの名無しさん2005/08/28(日) 06:59:27
・・・人の話を聴かんやつだな。
そういうチェックもしたいからupしろというてる。
・・・てか、人を信用しようよ・・・。
0337デフォルトの名無しさん2005/08/28(日) 07:02:35
不満に思うなら答えないでいいじゃないか
0338デフォルトの名無しさん2005/08/28(日) 07:06:21
うむ。そのとおりだ。
0339デフォルトの名無しさん2005/08/28(日) 07:13:15
>>336
すいません。TAが所属している研究室は画像研究をしてる研究室で
受講しているだけの一学生に大切なデータを渡すとは思えないのですが、
なにか問題になるといやですのでアップは勘弁してください。
いろいろしていただいているのに沢山しつれないことをして申し訳ありません・・・。
0340デフォルトの名無しさん2005/08/28(日) 07:15:36
>>332
ハッシュはよくわからないけど、データが少ないんなら2分木とかで存在する値だけ読んでいくとか。
デフォルメしてかまわないんなら・・・普通に配列でいいか。

テキストファイルなら圧縮率高いですよ。
特に0が多い場合。
0341デフォルトの名無しさん2005/08/28(日) 07:22:54
うん。気張らなくていいと思う。
だらだら配列を線形探索。
0342デフォルトの名無しさん2005/08/28(日) 08:02:51
リトルエディアンの場合 RGBαでなくってあるαBGRになっていると思うのですが、
したの308さんのプログラムですとαBGをワンセットと考えて出現頻度がでるようになっていると
思います。BGRをワンセットと考えて出現頻度を出すにはどうしたらいいのでしょうか?
何度もすみません。

#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) r << 16 | (long) g << 8 | b;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}
0343デフォルトの名無しさん2005/08/28(日) 08:05:22
342を少し訂正いたします
>BGRをワンセットと考えて出現頻度を出すにはどうしたらいいのでしょうか?
をBGRαをワンセットとして出現頻度を出すにはどうしたらいのでしょううか?
に訂正させてください。BGRでも出現頻度がでるのならお願いします
0344デフォルトの名無しさん2005/08/28(日) 08:08:13
方法:そんなプログラムは捨てる
0345デフォルトの名無しさん2005/08/28(日) 08:35:00
針の先ほども自分で考える気は無いんだとさ。
0346デフォルトの名無しさん2005/08/28(日) 08:40:52
#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) r << 24 | (long) g << 16 | (long) g << 8 | b;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}

ほらよ
0347デフォルトの名無しさん2005/08/28(日) 08:45:30
スマソ 346だけど普通に違ってるわこれ
0348デフォルトの名無しさん2005/08/28(日) 08:58:59
俺もよくなるが、なぜ書いた後になってすぐ気づくんだろう。
03493152005/08/28(日) 09:00:45
ども、起きぬけの>>315です。なんだか壮絶なことになっているようですね。
0350デフォルトの名無しさん2005/08/28(日) 09:03:49
return (long) r << 16 | (long) g << 8 | b;
これをいじればαBGからRGBになりそうなのですが、バスエラーが出たりと
よくわからなかったです。どうか教えていただけないでしょうか?
リトルエディアンのことを言い忘れていてすみません
03513152005/08/28(日) 09:05:58
リトルエンディアンでもそれぞれ1バイト長で確保しているならRGBalphaの並びではないんですか?
とにかくデータがalpha,R,G,Bの並びなのかどっちなのかはっきりさせる必要がありそうです。
0352デフォルトの名無しさん2005/08/28(日) 09:08:33
>>351
逆になってるっぽいって言ってるからRGBAlphaの1B*4で1セットじゃねーの
肝心のデータうpしてくれりゃそれで解決するんだがな
0353デフォルトの名無しさん2005/08/28(日) 09:18:13
私なりに調べてみたのですが、リトルエディアンだとバイナリダンプすると順序が逆になってでてくるそうです
データ自身はRGBαなのですがαBGRというふうに出て来るそうです
0354デフォルトの名無しさん2005/08/28(日) 09:28:27
352さんのいってらっしゃるので正しいかと思います
03553152005/08/28(日) 09:32:41
普通にメモリとって記録していったら....
17179869184Byte つまり、16777216MB、16384GBもメモリをとられることになるんですけど.....。
頻度はそれぞれunsigned char型に収まりきらないものでしょうか。
0356デフォルトの名無しさん2005/08/28(日) 09:33:11
(意訳)データをupするのが正しいかと思います
0357デフォルトの名無しさん2005/08/28(日) 09:35:32
そもそも要素数が半端じゃないな。
0358デフォルトの名無しさん2005/08/28(日) 09:36:28
まあ、今日は暇だから付き合いますけど。
0359デフォルトの名無しさん2005/08/28(日) 09:39:16
#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) dummy = 0 | (long) b << 16 | (long) g << 8 | r;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}

これでおk?
0360デフォルトの名無しさん2005/08/28(日) 09:44:43
>>355
とりあえず値の範囲でも調べたら?
何通りあるかとか。
0361デフォルトの名無しさん2005/08/28(日) 09:46:08
みなさんありがとうございます

>頻度はそれぞれunsigned char型に収まりきらないものでしょうか。
データのサイズによるのですが 2の24乗必要と考えもらえると助かります
0362デフォルトの名無しさん2005/08/28(日) 09:52:35
私の勝手な考えなのですが308さんのプログラムでほとんど問題なく、ただ、308さんのだと
αBGのワンセットでの出現頻度になっているので
BGR(RGB)のワンセットでの出現頻度が出るようになればなと考えております
0363デフォルトの名無しさん2005/08/28(日) 09:55:01
バイナリデータのファイルサイズは?なんかとんでもないでかさに思えてきたんだが。それをテキストデータに変換してエクセルで開くなんて逝ったら。。。
0364デフォルトの名無しさん2005/08/28(日) 09:57:55
ファイルサイズは96*96*96*4で3538944バイトです。
三次元画像らしいので
0365デフォルトの名無しさん2005/08/28(日) 10:05:18
362に追加で、データがαBGRというふうになっているので先頭のαを無視してBGRワンセットの
出現頻度をということです。
最初はRGBαというふうに説明していたために混乱させて申し訳ありません。
308さんのプログラムだとαBGとなってしまうのは私が最初にRGBαとなっているといったためです。
実際はαBGRです。リトルエディアンだからだそうです
0366デフォルトの名無しさん2005/08/28(日) 10:05:49
LinuxだっけWindowsだっけ?
0367デフォルトの名無しさん2005/08/28(日) 10:08:23
一度情報を整理してみよう。
・入力データのフォーマット
・出力データのフォーマット
を書いてね。
0368デフォルトの名無しさん2005/08/28(日) 10:19:18
>>366
リナックスです

>>367
入力データのフォーマットはバイナリでRGBαそれぞれ1バイトで計4バイトが何度も記述されている
構成になっています。ただ、私の環境だとこのRGBαバイナリでーたを見てみると
αBGRという風に見えます。(ターミナルでコマンドで中身を見た場合)

出力データのフォーマットは下のような感じにしていただきたいです、
タブでもいいですし、、であけてもいいです。
ただし、出現回数が0の場合は記述しなくてもいいです。できればソースのある箇所をいじれば出現回数
が0でも記述するようにしてもらえると助かります。

RGB値   出現回数
  1        4
  2        5
   ・        ・
   ・        ・
0369デフォルトの名無しさん2005/08/28(日) 10:25:51
出力書式の質問。
αをあとから付け足すとかしない?
0370デフォルトの名無しさん2005/08/28(日) 10:37:09
>>369
arufaの値は調べていくとわかったのですが0か255でした。
本来ならばαを含めてRGBαをワンセットとした出現頻度をもとめたいのですが 
0か255なら別にいらないのではと思い、RGBと書きました。
αをいれることでプログラムが動かなくなるようでしたらαなんていらないですが
もしもRGBαでワンセットの出現頻度がわかるのでしたらそうしていただきたいです。
αが0のときはRGBもそれぞれ0でした。なのであるRGB値が出現していたらアルファは255っとなります
少しわかりづらいかもしれません。すいません
0371デフォルトの名無しさん2005/08/28(日) 10:54:22
ポイントだけ。

1)
>>308
getval()のなかのif (..) return EOF;が4つあるけれど、それの順番を変更すればよろしい。
2)
αがRGBの値から求められるのなら、αは無視してよろしい。

以上。
0372デフォルトの名無しさん2005/08/28(日) 10:59:10
>>371
ありがとうございます
やってみます
0373デフォルトの名無しさん2005/08/28(日) 12:28:23
>>371
#include <stdio.h>
long getval(FILE *fp)
{
  int r, g, b, dummy;
  if ((dummy = fgetc(fp)) == EOF)
    return EOF;
  if ((b = fgetc(fp)) == EOF)
    return EOF;
  if ((g = fgetc(fp)) == EOF)
    return EOF;
  if ((a = fgetc(fp)) == EOF)
    return EOF;
  return (long) r << 16 | (long) g << 8 | b;
}

このようにr、g、b、dummyを単純に逆転させるだけでいのでしょうか?
0374デフォルトの名無しさん2005/08/28(日) 12:52:24
いまさらなんですが入力ファイルを十進法で表現したファイルをアップしたほうがいいでしょうか?
0375デフォルトの名無しさん2005/08/28(日) 12:56:21
>>374
出力だけ有っても無意味
入力とそれに対応する出力のセットか、片方だけなら入力
0376デフォルトの名無しさん2005/08/28(日) 13:02:46
>>375
入力ファイルをテキストに十進法で出力しました。
そして RGBαそれぞれが0の場合がほとんどでしたのでプログラムを組んでこれを消しました。
その結果を出力したテキストが下のようなものになります

(αBGRの順)
255 212 71 102 255 212 81 121 255 191 82 115 255 198 106 132 ・・・・・・・・

自分なりにずっといろいろやったり考えたりしてたのですが、
このテキストで、(α)BGRをワンセットと考えたR出現頻度を求めることもできるかなとおもって
アップしたほうがいいかをお聞きしました。
0377デフォルトの名無しさん2005/08/28(日) 13:09:52
バイナリをそのままあげなさい。
データを処理した後のものを出されても仕方ない。
0378デフォルトの名無しさん2005/08/28(日) 13:21:42
言葉で伝えられないなら全部丸投げしろ。

それぞれ0ってなんだ? 全部0じゃないのか?
へんてこな日本語を文脈で判断して、わけの分からない
加工データでよく分からない出力を出せといわれても無理だ。
0379デフォルトの名無しさん2005/08/28(日) 13:24:49
お。>>271からだから。100レス超えた。単一の話題だけ・・・だよな?
0380デフォルトの名無しさん2005/08/28(日) 13:26:59
>>377
>>378
すみません・・・。できるところは自分でやろうと思って変な方向になりました・・・。
877にアップしました。TAの方のメールを待っていましてが配布してもかまわんよとのことだったので
アップしました。

どうかお願いいたします。
0381デフォルトの名無しさん2005/08/28(日) 13:28:03
>>378
全部0ですといいたかったです
0382デフォルトの名無しさん2005/08/28(日) 13:29:10
>380 出力形式の確認もしたか?
0383デフォルトの名無しさん2005/08/28(日) 13:32:12
>>382
出力形式というのは?
0384デフォルトの名無しさん2005/08/28(日) 13:34:15
話にならん。
0385デフォルトの名無しさん2005/08/28(日) 13:37:22
>>384
無知ですみません

添付可能ファイル : TEXT, LHA, ZIP
なのにlzhであげるなということでしょうか?
0386デフォルトの名無しさん2005/08/28(日) 13:39:41
>>384
やっとわかりました

出力形式というよりも最終的な目的がヒストグラムを作ることですので
エクセルに簡単にこぴぺできる形がいいかと思います
他にいい方法があったら教えてくださると助かります
0387デフォルトの名無しさん2005/08/28(日) 13:42:44
確認していないのだな?
0388デフォルトの名無しさん2005/08/28(日) 13:45:01
>>387
はい、というのもヒスグラムをつくってこいとのことでどういう風に作るかも課題の一つだと
私は考えておりました。
エクセルでは65k程度しか軸がないのでそれ以上のヒストグラムはつくれません
ですが出現しないRGBαを除けば10k程度に収まります
こういうのを試してるのではないかと思っております
0389デフォルトの名無しさん2005/08/28(日) 13:54:17
ヒストグラムのつくりかたもTAに確認すべし。
0390デフォルトの名無しさん2005/08/28(日) 13:54:58
>>388
普通に考えてバイナリモードでの読み込み処理ができるかどうかをみる課題だろ
それに出現しないのを除外してもいいのなら、そんなヒストグラムに何の意味があるよ?

PhotoshopとかにあるRGBそれぞれを別々にグラフ化して重ね合わせるんじゃないのか?
0391デフォルトの名無しさん2005/08/28(日) 13:55:49
最近のターミナルアダプターは高機能なんだな。
0392デフォルトの名無しさん2005/08/28(日) 14:01:27
清涼剤をありがとう>391
0393デフォルトの名無しさん2005/08/28(日) 14:03:46
>>389
返事がすぐには来ないと思いますが聞いてみます。

>>390
上のほうにでているようにRGBα別々のヒストグラムを作りましたが
確認したところ 別々ではなく RGBαをワンセットとしてヒストグラムを とのことでした
0394デフォルトの名無しさん2005/08/28(日) 14:28:25
なんかファイルの先頭にテキストがいくつか混ざってるのは俺だけ?
0395デフォルトの名無しさん2005/08/28(日) 14:33:28
>>394
> なんかファイルの先頭にテキストがいくつか混ざってるのは俺だけ?
すいません。消すのを忘れていました
消したものをあげたほうがいいでしょうか?
96*96*96*4バイトが正確なデータです
0396デフォルトの名無しさん2005/08/28(日) 14:45:49
ヘッダだろ
0397デフォルトの名無しさん2005/08/28(日) 14:47:06
>>395
消すのを忘れたってことは、喪前が勝手に入れたのか?
0398デフォルトの名無しさん2005/08/28(日) 14:52:54
AVSっていうデータの可視化ツール用のファイルみたいだな。
Cで組むんじゃなくて、このツールの使い方を学習させたいんじゃなかろーか。
0399デフォルトの名無しさん2005/08/28(日) 14:57:38
なんだか思い切りそんな感じがしてきた。
0400デフォルトの名無しさん2005/08/28(日) 14:58:32
>>397
いえ
ですがRGBαそれぞれのヒストグラムを作っていたとき
αの値がおかしかったのでヘッダを消したら0か255になったので消すのはむしろいいことのようです
(メールで確認済み)
0401デフォルトの名無しさん2005/08/28(日) 15:00:39
>>398
私のヘッダを見てツールがあるのを発見したのでメールでTAにたずねたところ
別にAVSじゃなくってもいいんだけどたまたまそのファイルで演習してるだけ
とのことでした
0402デフォルトの名無しさん2005/08/28(日) 15:02:06
> カラーマップを設定するデータのヒストグラムを表示することも可能です。
ttp://www.nagano.fujitsu.com/services/avs/Announce/express51.html
わらた。
0403デフォルトの名無しさん2005/08/28(日) 15:03:21
どうも課題自体が、適当に出された課題のような気がするな
BMPとかならまだしも、わざわざAVSとやらのデータをCで扱わせる意味が分からん
それに3バイトを1セットと見てのヒストグラムを作るなんて
必要となるメモリを考えても何させたいのか分からないし
0404デフォルトの名無しさん2005/08/28(日) 15:06:00
まあ、Cで書くにしろ、RGB値の出現数はもうクリアしてるから・・・終了だろ?
0405デフォルトの名無しさん2005/08/28(日) 15:06:23
特徴を踏まえて符号化するためじゃないかい?
4バイトを1セットとみてヒストグラムを作らせ、ベクトル量子化させるとかだめかな?
0406デフォルトの名無しさん2005/08/28(日) 15:07:03
そのまえに質問者さんは前提としてCは使えるんですよね?
また、バイナリエディタで開いたんだけど、ヘッダ部分は最後の 0C 0Cまで削除してしまっていいんですよね。
0407デフォルトの名無しさん2005/08/28(日) 15:08:18

あの上の方にも書きましたが308のどこを変えればαBGをワンセットとからBGRにできるのでしょうか?
0408デフォルトの名無しさん2005/08/28(日) 15:09:59
>>406
私はイーマックスで開いて96*96*96*4バイトになるまで削除しました

プログラムはほとんど使えません すいませn
0409デフォルトの名無しさん2005/08/28(日) 15:10:26
>>407
freadで4バイトまとめて読み込みゃ、RGBAlphaの並びになるから
0xFF辺りでマスクしろ
0410デフォルトの名無しさん2005/08/28(日) 15:10:44
>>308のgetval()のなかのif (..) return EOF;が4つある。その順番を変更すればよい。
0411デフォルトの名無しさん2005/08/28(日) 15:12:43
一つのネタで200スレ行くか楽しみだったりする。
0412デフォルトの名無しさん2005/08/28(日) 15:13:16
>>409
私の環境ですと、リトルエディアンが原因でαBGRとなっているので308さんのだとαBGになります
409さんのおっしゃることはボクでもできるかもしれませんが、
そのあとの出現頻度のカウントが全然わかりません。ごめんなさい
0413デフォルトの名無しさん2005/08/28(日) 15:13:30
まちがい、レスか。こんなん200スレも立ったら死ぬ。
0414デフォルトの名無しさん2005/08/28(日) 15:14:05
>>410
#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((a = fgetc(fp)) == EOF)
return EOF;
return (long) r << 16 | (long) g << 8 | b;
}

このようにr、g、b、dummyを単純に逆転させるだけでいのでしょうか?
>return (long) r << 16 | (long) g << 8 | b;
ここは変更させなくてもよろしいのでしょうか?
何度もすいません
0415デフォルトの名無しさん2005/08/28(日) 15:23:50
>>414
long getval(FILE *fp)
{
unsigned long temp;
if (fread(&temp, 4, 1, fp) != 1)
return EOF;
return (long)temp >> 8;
}
こうでいいんじゃねーのか?脳内コンパイラだからエラー出たら適当に修正してくれ
0416デフォルトの名無しさん2005/08/28(日) 15:30:56
unixなら sys/net.h をインクルードして
htonl つかったらいいんジャマイカ。
0417デフォルトの名無しさん2005/08/28(日) 15:34:26
>>415
ありがとうございます。これを308と合体させてみてコンパイルは通ったのですが
セグメンテーションエラーがでました。
414はどこが違うんでしょうか?読み込む順番をおっしゃられるようにかえて
r g b というならびになっていると素人目には見えるのですがだめなんでしょうか・・・
確認したいのですが出現頻度をどうやって確認したらいいのかもわかりません。
0の出現頻度はあからさまなのでわかるのですが。
0418デフォルトの名無しさん2005/08/28(日) 15:39:25
>>416
それについて調べてみます
ありがとうございます
0419デフォルトの名無しさん2005/08/28(日) 15:43:32
>>416
net/if.h な
0420デフォルトの名無しさん2005/08/28(日) 15:44:24
414のようにして バイナリファイルの中身を見て いくつか値を計算して確かめたのですが
同じ値があり、おそらく正しいと思われます

みなさんありがとうございます。
0421デフォルトの名無しさん2005/08/28(日) 15:46:47
>>416
すいません、わかりませんでした
0422デフォルトの名無しさん2005/08/28(日) 16:38:19
セパレータで区切られた文字列の中から
指定したカラム数の文字列を取り出す関数を作れ
ex) str[] = "abc,def,ghi"
   sep = ','           →    defがとれる
   column_num = 2

という問題があり
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/880.txt
のように作ってみたのですが、コンパイルの際に

cc -o token_cut token_cut.c
token_cut.c: In function `main':
token_cut.c:28: warning: passing arg 2 of `token_cut' makes pointer from integer without a cast

というエラーが出ます
解決方法をどうかご教授ください。。。
0423デフォルトの名無しさん2005/08/28(日) 16:42:20
>>422
char sep[] = ","
0424デフォルトの名無しさん2005/08/28(日) 16:44:04
>>422
main内でchar sepとして定義されてるが、肝心の関数の方は
char*を引数として取るから、呼び出しの時にsepじゃなくて
&sepにすりゃいいんじゃまいか?
0425デフォルトの名無しさん2005/08/28(日) 16:46:17
>if(strcmp(r_string,NULL) == 0)

こんなんいらん。

if(r_string == NULL)

でいい、ってか、意味わかってかいてるか?
0426デフォルトの名無しさん2005/08/28(日) 16:49:04
>>423
ありがとうございます。無事コンパイルできました。

が、セグメンーション違反になってしまいうまくいきません。
どこが悪いかご指摘いただけないでしょうか。
0427デフォルトの名無しさん2005/08/28(日) 16:49:13
まず、16行目の
strcmp(r_string,NULL)
が間違っています。str(cmp)に渡すのは有効なポインタでなければならず、
NULLを渡せばアドレスはゼロを指しているためコンパイルを通ったとしてもクラッシュします、ヌル文字列でなければなりません。
したがってstrcmp(r_string, "")としなければなりません。ただ、>>425さんの言うようにこの文は
if(!r_string)で片付けたほうがいいと思います。
0428デフォルトの名無しさん2005/08/28(日) 16:50:57
>>425
はい、意味は分かっています。
教授がこうしたほうがよいと言っていまして
このようにしたんです。
0429デフォルトの名無しさん2005/08/28(日) 16:53:50
>>427
>str(cmp)に渡すのは有効なポインタでなければならず、
>NULLを渡せばアドレスはゼロを指しているためコンパイルを通ったとしてもクラッシュします、ヌル文字列でなければなりません。

ありがとうございます、自分の勉強不足でした。
無事、プログラムを動かすことができました
答えてくださった皆様ありがとうございました。
0430デフォルトの名無しさん2005/08/28(日) 16:54:46
>>428
なんでこうした方がいいの?
■ このスレッドは過去ログ倉庫に格納されています