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

【ANSI-C】 C言語なら俺に聞け!  Part 129

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/08/27(日) 15:43:44
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け!  Part 128
http://pc8.2ch.net/test/read.cgi/tech/1151282084/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
C/C++の宿題を片付けます 73代目
http://pc8.2ch.net/test/read.cgi/tech/1155355501/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0348デフォルトの名無しさん2006/09/12(火) 01:50:48
>>345
確かに気になるな;
0349デフォルトの名無しさん2006/09/12(火) 02:03:50
複文以外の文の最後には必ず ; がいるから、あるのは当たり前。
0350デフォルトの名無しさん2006/09/12(火) 12:55:02
関数atoiを使用するとどうしても警告が出るので、試しに下記のような
最小限のプログラムを書いたのですが、やはり警告が出ます。

---ソース---
#include <stdio.h>
#include <stdlib.h>

int main(void){
int c_int = 0;
char c_char[] = "1234";

c_int = atoi(c_char);
printf("%d\n",c_int);

return 0;
}

---警告の内容---
警告 W8004 atoitest.c 5: 'c_int' に代入した値は使われていない(関数 main )

この警告はどうやったら無くなるのでしょうか?
変数c_intがprintfにしか使用されない場合、この警告を気にしなくとも良いのでしょうか?
よろしくお願いします。
0351デフォルトの名無しさんNGNG?2BP(200)
>>350
せっかく行番号出てるのにどうしてそこを見ないのか…
ゼロで初期化しているがその値が使われる前にc_intに上書きされているっつー警告。
0352デフォルトの名無しさん2006/09/13(水) 01:48:29
char aa[5];
sprintf(aa, "abcdefghijklmn");
なんて書いた場合aaの中身はabcdefghijklmnになるんですけど、これってsprintfが適切にメモリ確保してるって事ですか?
0353デフォルトの名無しさん2006/09/13(水) 01:51:35
>>352
いいえ。未定義動作です。
そしてバッファオーバーフローと呼ばれるバグです。
0354デフォルトの名無しさん2006/09/13(水) 01:52:23
>>352
「偶然」そうなっただけ
03553522006/09/13(水) 01:56:29
>>353-354
そうなのですか。わかりました、ありがとうございます。
気をつけます。
0356デフォルトの名無しさん2006/09/13(水) 02:51:48
今更Cで仕事する羽目になったのですが、OOの癖が抜けなくてつらいです。
Cで使うOO風のライブラリってありませんか?
String *str = new_String("abc");
str->add("def");
みたいに書きたいんです。文字列の処理はString.hを見ればわかるっていう感じで
楽がしたいんです。Cではグローバルな関数群から目的のモノを探すだけで時間がかかります。

客(Solaris8)にコンパイルしてもらわなきゃいけないので、
大きくてトラブル対応できないライブラリは不可です。
見あたらなかったんでlinkMapとかloggerとか自分で作ってみたのですが、めんどくさく
なってきました。存在しないなら自作の奴をさらすので意見して欲しいなあと
思ってるんですがいかがでしょうか
0357デフォルトの名無しさん2006/09/13(水) 04:34:11
VB6→C#を経由して、教養の為にCをはじめました。
で、>>356さんと似たようなことを感じてます。

若輩者ゆえ役立つコメントなどできませぬが、「自作のやつ」をさらして欲しいです。
0358デフォルトの名無しさん2006/09/13(水) 04:36:03
Cで自作・・・聞いただけでゾッとした。C++(OOP)に一度慣れてしまうと
Cのあのベニヤ板に貼り付けたような平面的なプログラムが見にくくて
たまらない。
0359デフォルトの名無しさん2006/09/13(水) 05:28:19
>>356
郷に入れば郷に従え。
strcatでいいじゃん。
0360デフォルトの名無しさん2006/09/13(水) 05:36:38
OO風っても、例に出した部分にOOっぽさなんか全然無いように見える。
単にJavaから入って、それ以外への適応能力が不足しているだけじゃん。
0361デフォルトの名無しさん2006/09/13(水) 06:14:22
>>356
よくわかんないけど、コンテナが欲しいの?
ググれば腐るほどあるでしょ。
0362デフォルトの名無しさん2006/09/13(水) 06:57:19
>>356
今自作しちゃえば、次の仕事の時に多少汎用なコードが残ることになるぞ


とか唆してみるテストw
03633562006/09/13(水) 08:29:31
10年以上前はCプログラマだった。 郷に入れば郷に従えだとは思うので、
c++で無理矢理Java風に書くのとかは嫌い。でも非OOで書くのはもうキツイ。
複数のインスタンスが生成できるコンテナあるのなら教えて。正直ググったけど
Hashtableのサンプルくらいしか見つからなかった。

Cで仕事することはもうほとんどないし、自作ライブラリよりもちゃんとメンテナの
いるライブラリを利用する方が効率いいからなあと思ったんだけど、
ちょっと別スレ建ててみますわ。まあスレが伸びなきゃ伸びないで終了ということで
0364デフォルトの名無しさん2006/09/13(水) 08:35:42
>>363
>複数のインスタンスが生成できるコンテナあるのなら教えて。正直ググったけど
>Hashtableのサンプルくらいしか見つからなかった。

プログラミング能力(基礎力)が決定的に不足してるな。

>ちょっと別スレ建ててみますわ。まあスレが伸びなきゃ伸びないで終了ということで

糞スレ立てんな。
0365デフォルトの名無しさん2006/09/13(水) 08:54:40
356は今、世界中で誰も思いつかなかったライブラリに着手しようとしてるのだ。
0366デフォルトの名無しさん2006/09/13(水) 09:01:58
ライブラリで問題が解決できるんなら C++ なんか作られなかっただろうにな。
0367デフォルトの名無しさん2006/09/13(水) 09:45:51
10年以上前でなくて、10か月前の間違えだろ
お前、嘘ついてまで甘えるなよ
03683502006/09/13(水) 10:05:29
>>351
ありがとうございます。初期化が無駄だって事ですね。

ちなみに最小限のプログラムを書く前の、元のプログラムでは
"}"の消し忘れという更にorzな理由でエラーが出てました。
0369デフォルトの名無しさん2006/09/13(水) 10:09:23
プリプロセッサの展開が起こるタイミングが分かりません。

#define A #include "aiueo.h"

そもそもこんなことっておk?
0370デフォルトの名無しさん2006/09/13(水) 10:10:28
インスタンスとかHashtableとか言って、バリバリのJava使いだろ。
ちょっとだけCが必要になったからといって、そういうつまんねーウソついてばかりで
お前は相当嫌われてるんだろうな。
それもこのスレで聞いているし、お前相当バカだ。

そしてお前らもこういうウソぐらい見抜けよな。
ネタ以下なのにいつまでも気がつかないから、お前らカモられてるんじゃねーのか?
ケケケ
0371デフォルトの名無しさん2006/09/13(水) 10:10:54
>>368
それは本当に初心の頃なら誰でも辿る道だ。
キニスンナ

プログラマはバグを出して大きくなるのさ。w
0372デフォルトの名無しさん2006/09/13(水) 10:18:52
C++ならともかく、今時Cのライブラリなんて見つからない。
たとえば「c コンテナ ライブラリ」でググるとC++のライブラリばかり。

もし有用なサイトを知っているならURLだけでも教えてください。
このスレに聞いたのはCのライブラリ知ってる人がいると思ったから。
俺最初は「Cのライブラリありませんか?」って質問しにきたんだけど、
元発言読んでる?

今Java使いなのはその通りだけど、10年以上前はHP-UX上で
Motif使ったCプログラム書いてたよ。1年くらいでC++に行ったし、
当時はぺーぺーだったからC使いとは言えない感じだけど。
C++ではStringとかコンテナの汎用ライブラリを使ってた。
0373デフォルトの名無しさん2006/09/13(水) 10:21:40
>>370
オレには、文系で口が上手い奴に見える。
Javaしか使えなくて、Cは教養程度しか知らないんだろうよ。
setjmp.hとか知らなそうだ。
0374デフォルトの名無しさん2006/09/13(水) 10:57:42
作るのはめんどくさいので何か無いか
と
自分で作った奴が既にある

という矛盾。
自分で作ったならそれ使えばいいじゃん。
0375デフォルトの名無しさん2006/09/13(水) 11:48:01
>>373
お前もかなりのステレオタイプである事が推察されるw
0376デフォルトの名無しさん2006/09/13(水) 11:53:16
続きはこちらでお楽しみください。

[今さら]C言語でクラスライブラリを作る[Cかよ]
http://pc8.2ch.net/test/read.cgi/tech/1158108311/
0377デフォルトの名無しさん2006/09/13(水) 13:19:36
ポインタで悩んでいます。

void test(char *data2){

 *data2++;
 printf("addres_2:%d\n", data2);

};

int main(){

 char data[10] = "zxcvbnm";
 printf("addres_1:%d\n", data);
 test(data);
 printf("addres_3:%d\n", data);

 return 0;
};

実行した後、addres_2とaddres_3の値が一緒になると思っていたらaddres_1とaddres_3の値が同じになってしまいました。関数内のポインタ加算は初期化されるのでしょうか?それとも関数のdata2はdataと別物?なのでしょうか?
0378デフォルトの名無しさん2006/09/13(水) 13:39:53
'を文字にしたいのですが
char c = ''';
とするとエラーが出るのですが、他に方法があるのでしょうか?

0379デフォルトの名無しさん2006/09/13(水) 13:41:34
\でエスケ-プするよろし
char c = '\'';
0380デフォルトの名無しさん2006/09/13(水) 14:11:09
>>377
ポインタ表示したいなら、%p指定すべき

引数に渡した時点で、指している場所は同じだが別物
関数内でどうしてもポインタを加算したいなら、
戻り値で加算後のポインタを返せばよい
0381デフォルトの名無しさん2006/09/13(水) 14:29:35
そもそも
>*data2++;
がおかしい。
0382デフォルトの名無しさんNGNG?2BP(200)
>>377
ツッコミどころ多すぎ。

>void test(char *data2){

ここで渡される引数data2をいくらいじろうとも、呼び出し元のdataには何の影響もない。

>*data2++;

しかも、これはdata2に対する操作ではない。
mainの最後に printf("%s\n",data);を入れてみると何が悪いのか分かるはず。

>char data[10] = "zxcvbnm";

呼び出し先でポインタをいじるのに配列渡しちゃダメ。
03833772006/09/13(水) 16:18:32
今さっきわかりました。あはは、馬鹿だ俺。
ポインタに限らず引数は「初期値がセットしてあるかもしれないローカル変数」なんですよね。
addres_2を変更してもaddres_3が変わらないのは当たり前でした。
別のソースではtest関数でdataの内容をポインタでアクセスして変更してた(できてた)のが混乱の元でした…。

>>380-382
ご指摘ありがとうございました。
0384デフォルトの名無しさん2006/09/13(水) 16:39:53
Z を 32 ビット整数型と仮定して Z を二の補数表現で解釈したとするなら
(0xFFFFFFFF ^ Z) + 1 (この演算に限っては 1 + ~Z でもかまわない)
の演算を実行すれば -Z と解釈されますか?
プログラムを実行した結果 -32768 を除き正しい事は確かめられたのですが、考え方は間違ってませんよね?
どこかの教科書に ^Z + 1 のことについて書かれていたので初めは混乱したのですが。
0385デフォルトの名無しさん2006/09/13(水) 17:06:22
unsigned char*の文字列をsigned char*に間接的に移す方法はないでしょうか?
何故わざわざunsignedを取り扱うのかというのは
自分が使っているツールの処理系に依存しているからです。
unsigned charだと、Cの関数であるstrcmpやstrcpyが使用できません。
やり方が全く思い浮かばず困っています。どうかご教授お願いしますm(_ _)m。
0386デフォルトの名無しさん2006/09/13(水) 17:07:04
よくわからんがキャストすればいいんじゃね
0387デフォルトの名無しさん2006/09/13(水) 18:25:53
「間接的」ってどんなだろう?
0388デフォルトの名無しさん2006/09/13(水) 18:26:43
#Error: lvalue expected
#Warning 6: value of expression is not used

試しに(includeとかmainは表記省略)
unsigned char a[] = "てすと";
a = (char)a;
とやってみたらエラーが出ました・・・
charのキャストは出来ないっぽいです。
0389デフォルトの名無しさん2006/09/13(水) 18:28:14
直接でも間接でも出来たら構いません。
特に条件はなく、どんな方法でもいいのでやり方教えて下さいm(_ _)m
0390デフォルトの名無しさん2006/09/13(水) 18:29:45
それ以前に a は定数ポインタだから変更できませんよ。
0391デフォルトの名無しさん2006/09/13(水) 18:32:02
↑のミスりました。
char a[];
unsigned char b[] = "てすと";

a = (char)b;
と書くつもりでした。(できないのは同じ事です)
0392デフォルトの名無しさん2006/09/13(水) 18:32:38
>>388
unsigned char a[] = "てすと";
char *b;
b = (char *)a;
0393デフォルトの名無しさん2006/09/13(水) 18:34:06
char *a;
unsigned char b[] = "てすと";
a = (char*)b;
0394デフォルトの名無しさん2006/09/13(水) 18:34:30
言っている意味が良く把握できませんが
unsigned char *str = "hello" ;
signed char *pstr ;
pstr = (signed char *) str ;
それと使えないのではなくて警告が出るだけではないのですか?
0395デフォルトの名無しさん2006/09/13(水) 18:34:41
>>391
その場合もaは変数じゃなくて定数だってば。
Javaじゃないんだから。
0396デフォルトの名無しさん2006/09/13(水) 18:34:47
リロードしてなかった。
ゴミレスすまそ。
0397デフォルトの名無しさん2006/09/13(水) 18:39:44
とりあえずポインタをもう一回勉強した方が
0398デフォルトの名無しさん2006/09/13(水) 18:41:53
そもそも char a[]; なんてコンパイル通らない気が。
0399デフォルトの名無しさん2006/09/13(水) 18:44:16
できました!!!!!!!!!!!
ずっとこの事が分からなくてスランプに陥ってましたが
皆さんのおかげでやっと解決しました!(^_^)/
キャストの際ポインターをつけたらちゃんと出来ました!
このやり方だとエラーも警告も出ませんでした。
本当に有り難うございましたm(_ _)m!
0400デフォルトの名無しさん2006/09/13(水) 18:49:43
>>398
実際には char a[] = "てす";
と書いていたのですが、テンパって省略してしまったのでw
*と[]は違うのはある程度知っていましたが、ポインターを勉強し直した方がいいというのは事実です・・・
なんにせよ、本当になんとお礼を言っていいのかm(_ _)m!
0401デフォルトの名無しさん2006/09/13(水) 19:23:10
例えば、下のような文字をファイルから読み込みます。
(実際は、何十万文字あるとして)
改行をなくして、1行にして、
X文字目からY文字目までの文字列を、そのつどXとYを入力して文字列を取り出すには、
どの関数を使えばよいのでしょうか?


TIAUAOTUAOITUAOITAOTUAOTUATUAO
TOAUTOAITUAOTUAOSITUAOTUAOITUA
AOTUAOTUAOTUAOTUAOTUAOTUAOTUAO
TYOAUTOATUAOTUAOTUAOTUAOTUAOTA
0402デフォルトの名無しさん2006/09/13(水) 19:26:22
>>401
fopen()
fgets()
strlen()
printf() or putc()
0403デフォルトの名無しさん2006/09/13(水) 19:57:38
>>382
お前もツッコミどころ多すぎ。
0404デフォルトの名無しさん2006/09/13(水) 20:00:40
>>402
まじでそれでいけますか?
for文使うやつって、凄いなんか処理重くなりそうと思ったんす
つまり、XとYの長さをstlenで測って それを
substrなりするのかな

改行はfgetsできえましたか?
0405デフォルトの名無しさん2006/09/13(水) 20:07:33
>>404
行の長さが固定長なら、fseekでいける。

> 改行はfgetsできえましたか?
試すかマニュアル読めよ。
0406デフォルトの名無しさん2006/09/13(水) 20:07:52
>>404
1行ずつ読み込んでから、1つに連結していけばよい。
あと、重いかどうかは、創造する前にまず試してみろ。
案外率直な方法でも気にするほど遅くなかったりその逆だったりすることは良くあることだ。
04074042006/09/13(水) 20:19:19
ありがとうございます。
しかし、何十万、何百万文字を1行にして
charで保存できましたっけ

とりあえず、strcatで連結して
1行で出力してそこを、x〜yまで抽出して
charに格納かな。
0408デフォルトの名無しさん2006/09/13(水) 20:22:58
>>407
いやいや、Xを超えるまでは読み捨て。
Xを超えたら、そこから連結しながらX+Yを超えるまで読み込む。
0409デフォルトの名無しさん2006/09/13(水) 22:03:57
何百万文字でもメモリ確保が失敗しない限りいけるんじゃない?
まぁ読んでは捨ててを繰り返したほうが効率いいだろうけどさ。
0410デフォルトの名無しさん2006/09/13(水) 22:14:29
百万文字なんてたったの1MBですよ(シングルバイトで)
0411デフォルトの名無しさん2006/09/14(木) 00:33:41
#define PRINTF(MOJI) printf("->MOJI<-\n");

#include <stdio.h>
main()
{
  PRINTF(文字);
}

として、

->文字<-

と表示されることを期待したのですが、だめでした。
#defineの部分を直せば、こういうことできますか?
0412デフォルトの名無しさん2006/09/14(木) 00:46:41
#define PRINTF(MOJI) printf("->" #MOJI "<-\n")
0413デフォルトの名無しさん2006/09/14(木) 01:06:58
>412
ありがとうございました。できました!
0414デフォルトの名無しさん2006/09/14(木) 07:35:02
>>411-413
「文字」に \ や不正な文字が混ざるとまずい事になるから、普通にダブルクォート使え。

#define PRINTF(MOJI) printf("->" MOJI "<-\n")
PRINTF("文字")
0415デフォルトの名無しさん2006/09/14(木) 09:14:17
カーソルキーの入力って標準Cでできますか?
scanf()系の関数やgetche()ではうまくいきませんでした。
これは環境依存になってしまうのでしょうか?
0416デフォルトの名無しさん2006/09/14(木) 09:18:47
>>415
コンソールの中でカーソル位置を任意に動かすのは多分環境依存
行頭に復帰させるだけなら \r で出来るかどうか忘れた
0417デフォルトの名無しさん2006/09/14(木) 10:40:08
>>415
標準 C ではコンソールの概念が無いのでカーソルキーを監視することは出来ない。
あと getche() は非標準。
>>416
「カーソル位置を任意に動かす」とはどこにも書いてない。
0418デフォルトの名無しさん2006/09/14(木) 10:41:50
ncurses つかえ。
とほざいてみる。
0419デフォルトの名無しさん2006/09/14(木) 17:22:02
>>415
http://msdn2.microsoft.com/ja-JP/library/kswce429.aspx
http://msdn2.microsoft.com/ja-JP/library/078sfkak.aspx
こんなの書いてあった。やったことは無いけど二回呼ぶらしい。

ところでカーソルキーを読んでそのあと何しようとしてたの?
読んで終わりってことは無いと思うけど、カーソルの点滅位置
を動かしたかったの?
0420デフォルトの名無しさん2006/09/14(木) 19:21:46
ファイルの中に100億文字あるファイルがあるとします

そこから、100〜200、10万〜1億とか 70億から70億1000文字
取り出すにはどうすればよいのでしょうか?

char array[10000000000]
なんてできませんよね

それに、100〜200とかしか取り出さないのなら、10000000000も領域確保する
必要がない気もするのですが
どうすれば効率的になるのでしょうか?

1000000000領域確保したとして、すぐに消さばいいのかな
0421デフォルトの名無しさん2006/09/14(木) 19:28:00
ファイルの中にファイルがある、という構造はあまり一般的ではありませんね。
でもたぶん、中にあるほうのファイルは通常のファイルとして扱っていいでしょう。
04224202006/09/14(木) 19:29:15
すみません。ファイルの中に100億文字があるの間違いでした・・・
0423デフォルトの名無しさん2006/09/14(木) 19:32:51
で、とても大きなファイルでも、必要になるのはそのうち一部な事が多いです。
そういうときは必要な一部を読み込んで処理すればいいです。

最初から順番に処理するような場合も、最初からちょっとづつメモリに読んで
処理するのがいいでしょう。

メモリマップド+仮想記憶のような仕組みを使うときはメモリを確保したかのよな
処理の仕方も可能です。
0424デフォルトの名無しさん2006/09/14(木) 19:37:56
簡単にいうと

fseekでぐぐって末吉
0425デフォルトの名無しさん2006/09/14(木) 19:40:55
>>420
単なるテキストファイルと見ても、
最低10GBのサイズになるわけだが。

チェックしなきゃいかんなら、
先頭から順番に一定範囲だけ読んで、
そこに開始条件を満たすものがなければ読み捨てて次、と
繰り返せば良し。
単に位置しかみないなら、開いてからそこまでseekして、
目的の位置から終了位置まで別ファイルに切り出すとか。

コード自体はごく単純に済ませることが可能。
04264202006/09/14(木) 20:25:29
でもやっぱり、
必要な範囲だけのこすにしても

とりあえず100億文字なら100億文字の配列を最初に確保しなきゃいけないのですよね
20億〜30億文字や10億〜15億文字 70億〜80億文字と任意の間を読むにしろ

この最初に確保する配列を任意の文字にできないのでしょうか?
開始条件が位置なので、fseekでも最初に膨大な配列のメモリ領域を確保しないといけませんよね
0427デフォルトの名無しさん2006/09/14(木) 20:38:18
おまえの使っているPCが、100億バイトを記憶できるアドレス空間を持っているか
まずそれから考えてみろ
0428_2006/09/14(木) 20:44:45
>427
ページング
0429デフォルトの名無しさん2006/09/14(木) 20:55:51
fgetsでファイルの中身を1行ずつ読み込んでいくとき

最初の1行はスルーする もしくは、 ? など特定の文字が先頭にある行を
スルーするときは、
どうすればよいのでしょうか?
if文でしょうか?
0430デフォルトの名無しさん2006/09/14(木) 20:55:58
↑
知ったかぶりしたいだけのバカ
0431デフォルトの名無しさん2006/09/14(木) 20:58:28
あーん、>>429ごめん。
俺は>>428向けに書いたんだ。
ページングで物理メモリの不足は補えるけど
アドレス空間の不足はどうしようもないんだよ。
だから、64bitという話が出てくる。

>>429
読んでから確かめるしかないでしょ。
最初の一文字なりで簡単に判定出来るじゃん。
0432デフォルトの名無しさん2006/09/14(木) 21:05:21
>>426
>fseekでも最初に膨大な配列のメモリ領域を確保しないといけませんよね
 ・そのファイルがテキストファイルかどうか
 ・文字コードは何か
 ・改行コードは何か
 ・「何文字目」は文字単位なのかバイト単位なのか
によって変わるが、それにしたって
読み飛ばした分全部覚えておく必要なんかないだろうに。
0433デフォルトの名無しさん2006/09/14(木) 21:07:56
32bit環境だと物理的に2^32以上のアドレス空間は認識できないからな。
メモリだけがアドレス空間を使用してるわけでもないし
04344292006/09/14(木) 21:20:20
while(fgets(string 50 fp))
{
if( string[0] != ?){
sscanf(string,%c,mojikakunou)
}
}

こんな感じで判定でしょうか?
0435デフォルトの名無しさん2006/09/14(木) 21:24:58
文法的には滅茶苦茶だが
考え方としてはそんな感じでいいんじゃないか。
04364292006/09/14(木) 21:29:33
最初の1行だけ飛ばすってのは・・・
1行目だけ違うとこに格納みたいなことかな
しかし1行目の判定はどこですれば
0437デフォルトの名無しさん2006/09/14(木) 21:38:41
「一行を読み飛ばす」ってのは「読むだけで何もしない」ってことでしょ。
違うの?
04384292006/09/14(木) 21:39:48
>>437
ファイルの中を出力しようとしたら
fgets、while文で全行読んでいくから、1行読み飛ばすってのは・・・
0439デフォルトの名無しさん2006/09/14(木) 21:43:18
何を悩んでるのかが全然わからん。
本当に「最初の一行」で良いなら
ループに入る前に空読みすりゃ良いし。

まあファイル中で特定の行が現れた次の行ってなら
フラグ使うか、ifの内部でもう一度読むとかで
多少面倒にはなるが。
04404292006/09/14(木) 21:54:25
むむ

fegets( string 20 fp)
while(fgets(string 20 fp)
{
}

こんな感じかな・・・
0441デフォルトの名無しさん2006/09/14(木) 22:00:10
>fegets
釣りですか
0442デフォルトの名無しさん2006/09/14(木) 22:02:48
ファイルパスの \ 区切りの位置を取得するのに
下のようなソースコードがあったんですけど、
少しだけいじって、SJISに対応させることはできませんか。

#define DIRSEP '\\'
...
filepart=strrchr(realfilename, DIRSEP);
0443デフォルトの名無しさん2006/09/14(木) 22:04:59
mixiでKusakabe暴走ワロス
0444デフォルトの名無しさん2006/09/14(木) 22:10:08
誰だよw たっきーことXCODE?
0445デフォルトの名無しさん2006/09/14(木) 22:14:53
>>442
環境依存で、SJISの2byte目かを判定する関数が用意されているはず。
0446デフォルトの名無しさん2006/09/14(木) 22:17:10
たとえばVC++なら_mbsrchrとかね。
0447デフォルトの名無しさん2006/09/14(木) 22:26:31
>>445-446
ありがとうございます。
_mbsrchrでばっちり動作しました。
04484292006/09/14(木) 23:09:26
>>440
fgetsです。
こんな感じで1行とばしは合ってますでしょうか?
■ このスレッドは過去ログ倉庫に格納されています