よくわからんで設計したら、フローとかあってもなくて同じでしょ。(ハマるだけ)
処理単位じゃなくてデータ単位で書くほうがよかろ
603 :
デフォルトの名無しさん:2010/06/06(日) 03:39:23
>>596 UnixとかのOSもいきなりコーディングから始めたの?だとしたらすごいよな。
「ポインタが理解できない理由」という本にUnixの疑似プログラムが記載されていたけど
みてて複雑に絡み合っててすぐには理解できなかった。
あれを設計なしにコーディングして途中で修正加えて完成させたってのか・・。
だれも設計しないなんて言ってないよ
完璧な設計をいつまで作ってなかなかコーディングし始めない人を批判してるんだよ
設計がおかしいとコードを書けなくなることがある
で?
最近「で?」とだけレスするの流行ってるの?
ここまで1セットです。
バランスですよ、バランス。
いきなりコードを書くのは良くないが、いつまでも設計図を書いているのもよくない。
バランス感覚を養うただ一つの方法は経験を積むことです。
テキストのデータを配列に格納するにはどのようにすればできますか?
file.txtのデータが
0.1
-0.5
0.32
0.65
0.76
-0.45
となっていて、それを配列w[100]に順番に格納していきたいです
よろしくお願いします
FILE* file = fopen( "data.txt", "r" );
char buf[ 256 ];
double w[ 100 ];
int i = 0;
while( fgets( buf, 256, file ) != NULL )
{
w[ i ] = atof( buf );
i ++;
}
fclose( file );
613 :
610:2010/06/06(日) 14:23:52
もうひとつお願いします
double w[ 100 ]={ 0.1 , 0.5 , 0.32 ,0.65 , 0.76 , -0.45 , ・・・};
の配列をtxtファイルに1行づつ書き込んでいくにはどうすればいいですか?
なんどもすみません
FILE* file = fopen( "data.txt", "w" );
char buf[ 256 ];
double w[ 100 ] = { 0.1 , 0.5 , 0.32 ,0.65 , 0.76 , -0.45 };
for( int i = 0; i < 10; i ++ )
{
sprintf( buf, "%f\n", w[ i ] );
fputs( buf, file );
}
fclose( file );
>>614 ありがとうございました
うまくいきました
616 :
デフォルトの名無しさん:2010/06/06(日) 20:49:09
staticのことで単刀直入に質問しますが
main関数内で変数を宣言するとき、頭にstaticつけようがつけまいが結果は変わりませんよね?
いいえ
思い切り変わります。
>>616 static だと
初期化される
ヒープに確保される
なので結果が変わる事もあります
621 :
616:2010/06/06(日) 21:04:07
ヒープ領域に確保されるんですか。勉強になりました。
変数の寿命という点では同じですよね?
んなわけねー
staticなローカル変数なんか使っちゃイカン
main後もプログラムは動くんだぜ
メイン関数内の変数をstaticにする利点がわからない
631 :
616:2010/06/06(日) 21:42:10
>>627 main関数内で、大きな配列を扱うときにstatic入れるのは
自動で0初期化するためですか?
>>627 ヒープ使え、ヒープ
staticだとメモリ足らなかったら起動できずに
OSがエラーメッセージ吐くぞ
ヒープ使ってたら自分でメッセージ出せる
>>630 レジスタ知ってて.dataとか知らないのか
静的領域って起動時に自動的に確保されるヒープ領域みたいなもんだと
思ってたけど違うのか
みたいなもんは等しいってわけじゃないから
ヒープと表現すると不具合あるってこと?
プログラムがメモリ上にロードされる時に
ヘッダ、命令、可変データ、不変データ、スタックを置くためのメモリが確保される
staticで確保されるメモリはこのうち可変データ(非const)と不変データ(const)だ
ヒープはそれとは別に確保される領域
データ領域が2つに別れてるのは
もちろんメモリ保護のある状況だけだかんな
プロテクトモードの由来だな。
>>446 大学でそれってクレバーじゃないよ。もっともひどいやり方だよ。
バークレーでいいよ。
そいつに何言っても無駄w
で?
printf("で?\n");
で?って流行ってるの云々
組み込みならstatic使えばいいし
メモリ確保を遅延する環境はどうしようもない
試した事ないから知らないんだけど
シグナルも飛ばずに即死するの? >遅延確保に失敗した場合
面白くないぞ。話題について行けない中学生
中学生がこんな幼稚なことするわけないだろw
linuxでヒープ使い切ったらどうなるか試したことないや
少なくともmallocは0を返さないはずだよね
FILE *f;
int c;
f = fopen("a.txt", "rb");
while ((c = fgetc(f)) != EOF) {
printf("%X\n", c);
}
UTF8で”あ”と1文字だけ書かれたa.txtをバイナリモードで開いて
バイトコードを出力するプログラムを書いたんですが
E3
81
82
A
という結果になります。”あ”はUTF8でE38182なんでOKですが最後のAは謎です。
これはどっから来てるんでしょうか???
>>656 ありがとうございます。改行でした。
実はa.txt内には直接改行は入ってないんですが、なんで改行出てきちゃうんでしょうか??
vi で編集した?
>>658 はいviです。
環境はMac snow leopardのMacVim7.2です。文字コードutf-8、改行コードはunix(LF)です。
>>659 最後の行に改行を追加する旨警告メッセージが出なかった?
vi系は原則最後に改行文字を出力するから。
vi は、わりと行指向のエディタです。
viで普通にファイルを作成すると、行の最後に改行文字がつきます。
ファイルが一行だけでも同じことで、改行文字が最後につきます。
ファイルの最後に改行文字がないようなファイルを編集すると、
保存時にファイルの最後に改行文字が付加されます。
>>660-661 viが自動的に追加していたんですね。
ありがとうございます。本当に助かりました。
>>650>>654 ディフォルトの設定のままだとNULLは返らない。
その場合、遅延確保に失敗したら即死する。
但し、確保しようとしたプロセスが死ぬとは限らない。
>
>>663 え、アドレス空間ぜんぶ空いてない場合でもNULLが返らないの?
あー、流石にその場合はNULLだね。
あ、そうなんだ。
じゃあ連続領域が確保できるかどうかについてはその時点で検証しないということ?
標準入力で
abc123 de-50fg
みたいに入力してatoiで123と-50をintの配列に格納するときはどうすればいいでしょうか
上の文字列(abc...)の要素を先頭から順に見て(文字列のポインタを増やして)
数字が来たら(細かい分岐はとりあえず無視)atoiの引数にポインタ入れて整数にして格納ってできますか?
ちなみにポインタよくわかってないです
668 :
デフォルトの名無しさん:2010/06/07(月) 20:03:38
すごい発見しました。staticをなんとポインタ変数の頭につけてみたんです。
static int *ip;→この時点でipはNULL初期化される。
これはひどい釣り
670 :
デフォルトの名無しさん:2010/06/07(月) 20:12:10
>>669 本当にNULL初期化されるから試してみなされ。
このスレレベル落ちすぎだろ
static付けるとbssに割り当てられるから、起動時に初期化されるだけ
>>670 質問者にとっては珍しい出来事かもしれないが、回答者にとってはそれ当たり前なので、勘弁してください。
674 :
デフォルトの名無しさん:2010/06/07(月) 20:18:41
676 :
デフォルトの名無しさん:2010/06/07(月) 20:42:53
>>675 調べてきた
メモリにロードされたプログラムの中で、初期値のない静的変数が割り当てられるセグメントのこと。
block started by symbol の略。
でも0初期化されるから「初期値のない」じゃ説明がつかないな
Cのスタートアップ処理がいい加減だと、bss領域とかが初期化されないこともある
bssの処理をランタイムがやってる時点で糞アホだな
どこの組み込み系OSだよ
昔、はまってた奴がいたんだよ
>>667 strtol()してポインタが進んでいたらそれを格納してポインタを更新、そうでなければポインタを一つ進める
パソコンアプリみたいにお膳立てしてくれる環境ばかりじゃないんだよ
なんで組み込み屋って偉そうなの?
ちゃちなプライドにしがみ付いていないと溺れっちまうからさ
規格違反の処理系を使わなければいけない可哀想な人なんだから優しくしてあげなよ
規格違反?
携帯開発で病んでしまったんだろう
>>685 どういう意図で疑問形にしたの?
なんか胡散臭いレスだな。
胡散臭くてごめんくさい
689 :
デフォルトの名無しさん:2010/06/07(月) 23:41:25
質問ですが、#include<stdio.h>の次のint main(void)ってありますよね?
このmainは何を表してるんですか?intは関数の型ですよね?voidは引数の
型は何でもいいってことですよね?mainとは何ですか?ここ適当にmanyとか
にしていいんですか?全く分からないのですが・・
入門書とか読まずにやっているのか?
>>689 voidは何も無しってこと。何でもいいんじゃなくて、何も無し。
mainとはエントリポイントに指定されている関数。そこからプログラムが始まる。
692 :
デフォルトの名無しさん:2010/06/08(火) 00:10:12
>>691 いろいろなソース見てみると
int XXXXX()のXXXXの部分はmainばかりじゃないんですが
この場所は勝手に自分で作ったらいけないんですか?
あとmainだとどういう特性があるんですか?
>>690 入門書は分かりにくい、挫折した。
関数は自分で作って良いけど…説明するのメンドイわ
じゃあ、#include<stdio.h>って言ってるけど、これが何か分かってるわけ?
分からなくて良いからとりあえずそんなもんだと思って進め。あとで分かる
なんの本も無しにどうやって勉強するんだよ。
つーか何を見てるんだろう
何も読んでないのにmain出てくる訳ないし
まずは、仕様を読めと
タダで読めるんだし一読しとけ?
入門サイトくらい見て全て理解して質問しろよ
スレのレベルが落ちすぎ
初心者にいきなり仕様書読めとかいう馬鹿がいるのかよ
700 :
デフォルトの名無しさん:2010/06/08(火) 00:25:10
>>692 > いろいろなソース見てみると
> int XXXXX()のXXXXの部分はmainばかりじゃないんですが
> この場所は勝手に自分で作ったらいけないんですか?
自分で勝手に作ってもいいよ。実際に「int XXXXX()」でもいい。
> あとmainだとどういう特性があるんですか?
>>691に書いてあるけど、そこからプログラムが始まる(プログラム開始時にmain()が呼び出される)という特性がある。