【ANSI-C】 C言語なら俺に聞け! Part 129
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/08/27(日) 15:43:44まず問題を冷静に吟味して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/
0449デフォルトの名無しさん
2006/09/14(木) 23:30:05まず、やりたいことを日本語で詳しく書いてみたらどうだろう?
読みたいファイルのサイズも含めて。
0450429
2006/09/14(木) 23:40:10はい。すみません。
ファイル名 file.name
作者:ねずみ講
猫がねこんだアナコンダ
あめんぼあかいなあいうえお
空と君との間には
紫の薔薇の人
・・・
とまぁ、こんな感じのファイルを
最初の先頭行(作者)の行以外を別の配列にセットして
出力したいのです。
0451デフォルトの名無しさん
2006/09/15(金) 02:23:01#include <stdio.h>
int main(){
int i=-1;
int *ip = &i;
unsigned int *ip2 = (unsigned int *)ip;
printf("i = %d\n",i);
printf("*ip = %d\n",*ip);
printf("*ip2 = %d\n",*ip2);
if (*ip2 > 0) printf("*ip2 は正です");
return 0;
}
と書いて実行してみたら
i = -1
*ip = -1
*ip2 = -1
*ip2 は正です
となってしまったのですが、*ip2 は正と負、どちらなんでしょうか?
0452デフォルトの名無しさん
2006/09/15(金) 02:43:42printfの書式指定の中で %d とやっているが、これは int用の指定。
unsigned用にするには %uとしなければならない。
そしてunsignedなんだから、0でなければ必ず正。
0453451
2006/09/15(金) 02:59:38%uというのがあったんですね、ありがとうございます
*ip2は正で、iは負のままだから、*で参照される度にiがunsigned intにキャストされてるってことなんですね
0454デフォルトの名無しさん
2006/09/15(金) 03:10:09正確には解釈が微妙に間違っているのだが・・・・まあそれでいいだろ。
勉強を進めていくうちに別な見方にも気づく事だろう。
0455デフォルトの名無しさん
2006/09/15(金) 03:26:54ありゃ微妙に違うんですか…精進します
0456デフォルトの名無しさん
2006/09/15(金) 03:38:000457デフォルトの名無しさん
2006/09/15(金) 04:25:55> 今回のテーマであるNULLですが、このマクロで表される空ポインタ定数というのは、実は関数へのポインタには代入することができません。
これマジ?
0458デフォルトの名無しさん
2006/09/15(金) 16:32:58errno=29(ESPIPE)が設定されてしまいます。気にしなくていいのでしょうか。
open()&lseek()使った方がいいですか?
その後ファイルへの書き込みはできます。
errno=0;
printf("%s:%d:errno[%d]\n", __FILE__, __LINE__, errno);
fp = fopen(filename, "ab");
printf("%s:%d:errno[%d]\n", __FILE__, __LINE__, errno);
0459458
2006/09/15(金) 16:52:27>プログラムがerrnoの中身を調べることは、エラーが報告されたときだけ意味があることに注意
0460デフォルトの名無しさん
2006/09/15(金) 22:07:02プログラムを実行し、ファイルを読みとるため、
データファイル名を入力するとき、入力補完機能をつけるにはどうすればよいのでようか?
長いファイル名をイチイチうつのが面倒なのですが
UNIX環境みたいにscanfで文字を入力する際に補完とかできないかと思いまして
0461デフォルトの名無しさん
2006/09/15(金) 22:17:36まあ補完機能の部分だけなら別に読む必要も無いだろうが。
0462デフォルトの名無しさん
2006/09/16(土) 00:59:370463デフォルトの名無しさん
2006/09/16(土) 02:30:08つうか厳密には比較もダメみたいに書いてあるね
今まで
if(f!=NULL){
f();
}
とかさんざんやってきたんだけど・・・
0464デフォルトの名無しさん
2006/09/16(土) 03:55:35いや、比較は大丈夫らしいぞ。
それで代入がダメってのは、なんかおかしい気がするが。
0465デフォルトの名無しさん
2006/09/16(土) 16:13:090とNULLポインタを比較すると真になる。
http://www.kouno.jp/home/c_faq/c5.html#2
0466デフォルトの名無しさん
2006/09/16(土) 21:16:00条件
AさんとBさんがいます。AさんとBさんは通信ができます。
AさんとBさんが通信を開始し、終了すると、その間の記録がログファイルとして
記録されます。
通信の開始は、キーボードからスタートと入力することにより開始されます。
終了は、キーボードからエンドと入力することにより、開始されます。
言語はC++。コンパイラはVisual C++
要求
通信を自動的に1時間ごと切り、1時間ごとのログファイルを作成したい。
よろしくお願いいたします。
0467デフォルトの名無しさん
2006/09/16(土) 21:16:140468デフォルトの名無しさん
2006/09/16(土) 21:20:06ミ ∠_)
/
/ \\
ウイーン Γ/了 | |
ウイーン |.@| | | ガッガッガッ
| / | . 人
|/ | < >_Λ∩
_/ | //. V`Д´)/←>>467
(_フ彡 /
0469デフォルトの名無しさん
2006/09/16(土) 21:21:09宿題は宿題スレへ行け。
C++のことはC++スレへ行け。
0470デフォルトの名無しさん
2006/09/16(土) 21:21:250471デフォルトの名無しさん
2006/09/16(土) 22:13:51難しいな、いつになったら終わるんだ?
0472デフォルトの名無しさん
2006/09/17(日) 19:11:10unsigned char型で11111011みたいな一つだけ0で残り1にしたいのですがどうすればいいのでしょうか?
上の場合だと255を入れてやれば全部1になりますが、その状態でシフトさせると0が入ってしまうと思います。
アルゴリズムだけでもいいので御願いします。
0473デフォルトの名無しさん
2006/09/17(日) 19:12:260474デフォルトの名無しさん
2006/09/17(日) 19:26:16~(1 << n)
0476デフォルトの名無しさん
2006/09/17(日) 19:58:220477デフォルトの名無しさん
2006/09/17(日) 19:59:450478デフォルトの名無しさん
2006/09/17(日) 20:14:36nビット目を0その他を1にする方法を教えてくれということなのか>>472の質問は?
>>474の回答で納得したからそうなんだろうな。
0479デフォルトの名無しさん
2006/09/17(日) 20:51:130480デフォルトの名無しさん
2006/09/18(月) 02:25:43先日無償公開された某TurboC++でコンソールアプリを入門しています。
読み込んだバイナリを1バイトずつ頭に0xを付けて16進数で書き出す・・・と言うのを作ろうとしているのですが、ヘルプで見付かりません。
atol()やstrtol()みたいに文字列からの数値変換は見付かったのですが。
ltoa()やltostr()みたいな、変数を指定基数で文字列化する関数は無いのでしょうか。
無ければ自作するし、見落としていたら関数名を御教授下さい。
0481デフォルトの名無しさん
2006/09/18(月) 02:30:370483デフォルトの名無しさん
2006/09/18(月) 07:45:50ANSI Cの原典に当たろうかとansi.orgを調べてみたけど、
どうも見つからない。
調べ方が悪いのか、そもそもWebからは閲覧できないのか教えてください。
0484デフォルトの名無しさん
2006/09/18(月) 12:56:280485デフォルトの名無しさん
2006/09/18(月) 13:29:28ANSIやJISは規格書で利益(財源)を確保しているので無理だったようなきがする。
0486デフォルトの名無しさん
2006/09/18(月) 14:04:24ISO のドラフトがダウンロードできるぜ。
http://www.open-std.org/jtc1/sc22/wg14/
0487デフォルトの名無しさん
2006/09/18(月) 16:30:35サンクス!
「ANSI C」っていうのは近年では「国際規格に則ったC」くらいの意味になってるのかな。
提示してもらった先にあるC99RationaleV5.10 あたり(C99の方針まとめ?)、
俺の求めてたものに雰囲気が近くて良い感じです。
0488デフォルトの名無しさん
2006/09/18(月) 17:01:270489デフォルトの名無しさん
2006/09/18(月) 17:02:25なんで却下され続けてるんだろうな?
単に忘れられてるだけなのか?
0490デフォルトの名無しさん
2006/09/18(月) 17:12:12いや、入れたら、C99についてのFAQスレになっちまうからだろ。
C99を完全サポートした処理系がもっと一般化するまでは非現実的だ。
0491デフォルトの名無しさん
2006/09/18(月) 17:18:32なんでそうなるの?関連がわからん。
0492デフォルトの名無しさん
2006/09/18(月) 17:19:59「ANSI C」である限りC99は含まないから?
0493デフォルトの名無しさん
2006/09/18(月) 17:25:320494デフォルトの名無しさん
2006/09/18(月) 17:26:370495デフォルトの名無しさん
2006/09/18(月) 17:27:33文句はC99に言ってやれ。
0496デフォルトの名無しさん
2006/09/18(月) 17:28:24安く手に入る完全準拠の処理系はどっかにないの?
0497デフォルトの名無しさん
2006/09/18(月) 17:29:52つーか学生の私怨なのかよorz
0498デフォルトの名無しさん
2006/09/18(月) 17:31:36C99のFAQスレになる事にどんな意義があるのだろう。ただのオナニースレに
なるのでは。
0499デフォルトの名無しさん
2006/09/18(月) 17:42:39VCみたいなメジャーどころも
C++完全互換じゃなくてもC++として扱ってたんだし
0500デフォルトの名無しさん
2006/09/18(月) 18:02:00C99部分準拠でメジャーというとgcc位か?今の所。
0501デフォルトの名無しさん
2006/09/18(月) 18:41:300502デフォルトの名無しさん
2006/09/18(月) 21:27:570503デフォルトの名無しさん
2006/09/18(月) 21:29:250504デフォルトの名無しさん
2006/09/18(月) 21:36:16というか意識していないと気が付くと入ってるw
0505デフォルトの名無しさん
2006/09/18(月) 21:48:07c99ってgoto でローカル変数宣言を飛び越えられるの?(C++だとエラー)
0506デフォルトの名無しさん
2006/09/19(火) 01:06:21vsnprintfも使ってる俺の勝ち。
0507デフォルトの名無しさん
2006/09/19(火) 01:08:15仕様に取り込まれた様なもんだったりするし、各処理系の対応も需要の割には早めだよな。
つーことで次スレからはISOとJISもスレタイに入れるってことで。
0508デフォルトの名無しさん
2006/09/19(火) 01:47:48【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 【C89/C90/C99】
0509デフォルトの名無しさん
2006/09/19(火) 01:50:03BBS_SUBJECT_COUNT=48
0510デフォルトの名無しさん
2006/09/19(火) 01:55:14【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
0511デフォルトの名無しさん
2006/09/19(火) 10:23:13スレ進行は亀かも知れんけど。
0512デフォルトの名無しさん
2006/09/19(火) 10:24:58C99のたいていの機能が使えるコンパイラは、dmc, gccぐらいしか知らない。
ほかに、無料なのあるの?
0513デフォルトの名無しさん
2006/09/19(火) 10:50:16あと、整数演算でキャリーとかボローが発生したときの
振る舞いについて、言語としての既定がないのが痛い。
結局はキャリーフラグとか調べなきゃならんじゃないか。
0514デフォルトの名無しさん
2006/09/19(火) 10:55:11多分機械固有に依存する面が多いからだろう。極端な場合、キャリーフラグが
存在しない機械も考えられる。それに、いざとなったらインラインアセンブラなど
を利用すればいいし。
0515デフォルトの名無しさん
2006/09/19(火) 11:00:13しかし言語としての既定がないとポータブルに書けないのがつらいな。
C++ でも整数演算クラスがあって例外を投げてくれるとかもないしな。
0516デフォルトの名無しさん
2006/09/19(火) 12:08:38fp = fopen( "i.txt", "w" );
}
上のようなニュアンスで、
0.txt, 1.txt, 2.txt, ・・・
ファイルを書き出したいのですが、どうすれば良いでしょうか?
よろしくお願いいたします。
0517デフォルトの名無しさん
2006/09/19(火) 12:20:10...............
for (i=......... {
sprintf(buf, "%d.txt", i);
fp = fopen(buf, "w");
}
0518デフォルトの名無しさん
2006/09/19(火) 12:25:35究極のコンパイラか。
0519デフォルトの名無しさん
2006/09/19(火) 16:12:19foo[]={a,b,c};
のように初期化されてる配列を別のファイルBでextern参照し
sizeof(foo);
のようにするとincomplete type と言われていまいます。
同一ファイルだと上手くいくのですが、どうしても分割したいです。
どのようにすれば良いのでしょうか
0520デフォルトの名無しさん
2006/09/19(火) 16:20:440521デフォルトの名無しさん
2006/09/19(火) 16:21:120522デフォルトの名無しさん
2006/09/20(水) 00:27:21それは思った事がある。
もしかして、PDP-11にはローテート命令とかCフラグがなかったのか?
あと、010進/0x10進表現があって0b10進数表現がないのも腑に落ちないなあ。
0523デフォルトの名無しさん
2006/09/20(水) 02:22:13昔ッから言われてるけど、こりゃ一生放置プレイだろうな。
遅きに失したというか、入れるタイミングを見失ってる感じだ。
0524522
2006/09/20(水) 05:05:38そうなのですか。
コミュニティなどとは疎遠なので知りませんでした。
C99の次に更新があるとも思いにくいし、一生放置かぁ。
自分で代替関数書いていて空しくなる(^^;
0525デフォルトの名無しさん
2006/09/20(水) 08:34:590526デフォルトの名無しさん
2006/09/20(水) 08:54:320527デフォルトの名無しさん
2006/09/20(水) 09:29:40RISC型プロセッサだとローテート命令がなかったりするし。
0528デフォルトの名無しさん
2006/09/20(水) 09:57:31まあ、困らないんだけどさ。
0529デフォルトの名無しさん
2006/09/20(水) 10:58:360530デフォルトの名無しさん
2006/09/20(水) 11:09:12動かすことが出来ず、変数でシフト数を指定したら何行かの
命令コードで対応するようなコンパイラもあるから、ローテート
だって、C言語で演算子と動作を決めてやればコンパイラが
がんばったと思う。
<> でローテートとかあっても良かったなあ。
0531デフォルトの名無しさん
2006/09/20(水) 11:30:09ローテート・シフト・ビット演算なんてどうせカリカリにチューンしたい
時だけだろ。
0532デフォルトの名無しさん
2006/09/20(水) 12:06:37使う側からすれば反対する理由はないでしょ。
まあ搭載されることは無いとは思うが。
0533デフォルトの名無しさん
2006/09/20(水) 16:25:380534デフォルトの名無しさん
2006/09/20(水) 16:36:17スレ違い。環境を明記してこっちで。
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
0535デフォルトの名無しさん
2006/09/20(水) 18:48:07構造体
typedef struct {
int x;
} TEST;
void set( TEST **test )
{
*test = ( TEST * )malloc( sizeof( TEST ) * 2 );
// ここは代入できる
test[0]->x = 1;
// ここが出来ない
test[1]->x = 2;
}
int main()
{
TEST *test = NULL;
set( &test );
return 0;
}
// ここが出来ない
で書き込み違反エラーが出てしまいます
これはやはり領域の確保が出来ていないという事でしょうか?
どうすればいいのか、よろしく御願いします。
0536デフォルトの名無しさん
2006/09/20(水) 20:09:18よく見直せ。
set関数ではtest[0]に確保したポインタを入れてるが
test[1]には何も入れてないじゃないか。アクセス違反が
出て当たり前。
test = ( TEST ** )malloc( sizeof( TEST ) * 2 );
0538デフォルトの名無しさん
2006/09/20(水) 20:53:140539デフォルトの名無しさん
2006/09/20(水) 22:10:01void set( TEST *test )
{
test = ( TEST )malloc( sizeof( TEST ) * 2 );
test[0]->x = 1;
test[1]->x = 2;
}
int main()
{
TEST *test = NULL;
set( test );
}
これじゃ駄目なの?
0540デフォルトの名無しさん
2006/09/20(水) 23:23:53(*test)[0].x = 1;
(*test)[1].x = 2;
0541デフォルトの名無しさん
2006/09/20(水) 23:27:33>>539
せめてポインタくらい理解して書けや
それならローカル変数でいいだろボケが
0542デフォルトの名無しさん
2006/09/20(水) 23:30:57図を描いて箱の中にアドレスが入っている場合と
実体が入っている場合を明確に区別して、今回の
ケースに割り当てれば何が悪いのかすぐに分る。
0543デフォルトの名無しさん
2006/09/20(水) 23:54:300544デフォルトの名無しさん
2006/09/21(木) 00:41:58図を描かないと理解できないのは違うわけだが
0545デフォルトの名無しさん
2006/09/21(木) 00:52:450546デフォルトの名無しさん
2006/09/21(木) 01:06:490547デフォルトの名無しさん
2006/09/21(木) 01:23:030548デフォルトの名無しさん
2006/09/21(木) 01:38:44■ このスレッドは過去ログ倉庫に格納されています