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

C言語なら私に聞け(33)

レス数が1000を超えています。これ以上書き込みはできません。
0001ジョブ子NGNG
姉です。30年プログラムを作りつづけて嫁に行きそびれてしまいました。
でもC言語の腕には自身があるので何でも聞いてね。

PS
関連擦れは面倒なのでほかの人に任せます。ウフッ
0002デフォルトの名無しさんNGNG
無責任一代女かYO!
0003せめて、前スレくらいNGNG
http://pc3.2ch.net/test/read.cgi/tech/1031905402/
0004前スレ950に代わってお詫びしますNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0005前スレ950に代わってお詫びしますNGNG
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
0006前スレ950に代わってお詫びしますNGNG
C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART 5
http://pc3.2ch.net/test/read.cgi/tech/1027593322/
0007デフォルトの名無しさんNGNG
【過去ログ】
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/
26 http://pc3.2ch.net/test/read.cgi/tech/1026048820/
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
0008前スレ950に代わってお詫びしますNGNG
【過去ログ】
32 http://pc3.2ch.net/test/read.cgi/tech/1031905402/
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/
26 http://pc3.2ch.net/test/read.cgi/tech/1026048820/
0009前スレ950に代わってお詫びしますNGNG
うお、カブッタ。。鬱
0010デフォルトの名無しさんNGNG
おっつっつ。>>1
0011デフォルトの名無しさんNGNG
>>10
世の中間違ってる。。。
0012デフォルトの名無しさんNGNG
>>11
気持ちはわかるが一応立てたことだし。
0013デフォルトの名無しさんNGNG
<33>
だと かちゅ〜しゃ で化けることがあるからなのか?
subject.txt取得後だと問題ないんだけど。
0014デフォルトの名無しさんNGNG
>>13
そう
0015デフォルトの名無しさんNGNG
だんだんこのスレの>>1は面白みに欠けてきてる・・・
0016  NGNG
質問です
配列を宣言と同時に初期化する際、
array[] = "ABCDEFG";
とするような感じで、文字列ではなく
数字を入れる方法がありましたら教えてください。

0017打・サイタマ@受信料未払いNGNG
>>16
array[] = {1,2,3,4,5,.......};
じゃダメなん?
0018デフォルトの名無しさんNGNG
>>16
int n[]={4,12,76,3,0,65};
0019デフォルトの名無しさんNGNG
>>16
型は一体何なんだ、ボケナス。
0020デフォルトの名無しさんNGNG
>>15
君のコメントほどじゃないかと
002116NGNG
大事なことを書き忘れました。
関数の引数として
func("ABCDEFG");
のように使える関数をつくりたいのです。
で、文字列だと上記のように渡せるのに、数字だと""で囲めない?ので
困っています。
型は、char型を考えています。
0022打・サイタマ@受信料未払いNGNG
>>21
もう一回文字列リテラルのこと調べなおすべし!
002316NGNG
>>22
あおりは勘弁してください。
0024デフォルトの名無しさんNGNG
>>21の言ってる意味がわからんのは俺だけか?
002516NGNG
>>24
難しい質問だから聞いているんです。
もう少し考えてください。お願いします。
0026デフォルトの名無しさんNGNG
違ってるかもしれんが、
func("\x01\x02\x03");
という意味なのか?

渡されるのがポインタだということは
わかってるんだよな?ボケナス。
0027デフォルトの名無しさんNGNG
>>25
質問の意味がわかりません。
002816NGNG
>>27
何がわからないのかがわかりません。
わからないことを書いていただかないと質問に答えられません。
0029デフォルトの名無しさんNGNG
配列に入れて渡すのはダメなの?
003016NGNG
脱いでもすごいです。
0031デフォルトの名無しさんNGNG
ネタかこいつ。面白くないから無視。
0032デフォルトの名無しさんNGNG
>>28
何がと言うか、ぜんぜんわかりません。
初歩的なことですみませんが、はじめから教えてもらえませんか?
0033デフォルトの名無しさんNGNG
いいかげんウザイ
003416NGNG
       ε=ε=ε=ε=ヾ(;@×@)ノ
003516 ◆Ms2nrv3c NGNG
あの、23、25、28、30は偽者です
面白ければ放置しようとおもっていたのですが。。。
いま、実験しています
003616NGNG
いつのまにか偽者がたくさん。だから2ちゃんは...
0037打・サイタマ@受信料未払いNGNG
>>23
すまん、煽りじゃないんだよ。
func()内で中身を入れ替えたりするなら気をつけよう。
....ところで、ポインタって知ってるかい?
0038デフォルトの名無しさんNGNG
関数に直接配列か、それは無理だった気が。
C99ではできるんだっけ?
003916 ◆a9RattCo NGNG
誰に口聞いてんだ貴様ら
0040デフォルトの名無しさんNGNG
>>39

( ´,_ゝ`) プッ

そこまでやるか普通?
004116NGNG
プログラムやるやつは糞だと聞いていましたが、
ホントだったようですね。
失望しました。
0042あNGNG
>41
あのさ、とりあえず俺は真面目にあんたの
質問聞いてやってるつもりだよ。
その言い方はないんじゃない?
はっきり言ってあんたの質問の意味がわからん。
関数作りたいなら
void Test(char* s);
じゃだめなのか?
なんでこれが駄目なのかよくわからん。
004316NGNG
全員16を名乗るスレはここですか?
0044打・サイタマ@受信料未払いNGNG
やれやれ、まだ夏厨の残党が
いたのか・・・。荒ちまったな。申し訳ない。
0045デフォルトの名無しさんNGNG
16ウイルス、自己増殖中・・・。
004616NGNG
最近涼しくなったよねー。
0047デフォルトの名無しさんNGNG
>>42
偽物だと気付けよ。
本物は mailto: が全角の空白1文字になってる。
これより上のカキコだけはな。
0048漢NGNG
そろそろオレも「C++なら全手俺に聞け」というスレでも立てるか・・・。
004916NGNG
♪人生1616〜
005016 ◆Ms2nrv3c NGNG
>>偽者
痛いところを疲れて完全にキレられたようですね
>>26
ポインタはわかっています
\xというのは使ったこと無いのでよくわかりませんでした。
>>37
もちろん、入れ替えたりしません。
>>22
文字列リテラルに数値をもぐりこませることは出来ないと言う意味でしょうか
0051デフォルトの名無しさんNGNG
本物は 16,21,35,50 だけ。
残りは2人の低能な偽物による荒らし。
005216 ◆Ms2nrv3c NGNG
それと、
>>29
配列に入れないといけないようでは使い勝手が落ちると思い、
このような質問をすることになりました。
0053デフォルトの名無しさんNGNG
相変わらず16のしたいことがわからないんだが

func( int[]{ 0, 10, 20 } ); 風にしたいってことですか?
0054デフォルトの名無しさんNGNG
使い勝手って何?
0055打・サイタマ@受信料未払いNGNG
>>50
文字列って言っても、要はキャラクターコードが入ってる配列のポインタを関数に渡しているってことだから、渡したいchar型数値に該当するキャラクターコードを突っ込んだ文字列リテラル作って渡すこと可能だよ。
array[] = "abc" なら array[]={ 0x41,0x42,0x43} と同じものが入っていると考えてもいける。

でも、素直に

char array[] = {1,2,3};
func(array,sizeof(array));

とかしたほうが良さそうだけど・・・。
005616 ◆Ms2nrv3c NGNG
>>53
文字列だと
char array[] = "ABCDEFG";
func(array);
を
func("ABCDEFG");
にできるのに、
数字だと
char array[] = {0, 10, 20};
func(array);
を
func({0, 10, 20});
みたいにできればメモリ領域の節約にもなるし
関数としては使い勝手がいいとおもうのです。
0057打・サイタマ@受信料未払いNGNG
あ、array[]={ 0x41,0x42,0x43}なら "ABC"だな・・・鬱だ。
0058デフォルトの名無しさんNGNG
>>57
それよりももっと重要な'\0'を付加することを忘れているぞ。
0059デフォルトの名無しさんNGNG
今日は電波強いね
0060デフォルトの名無しさんNGNG
ようやく16のやりたいことが見えてきた。
006158NGNG
>>59
俺のこと?
もしかして間違っている?(^_^;)
0062打・サイタマ@受信料未払いNGNG
>>57
ああ、やってしもうた・・・。出直してきます。
0063デフォルトの名無しさんNGNG
そんで、結局のところC99で型安全かつ可変の引数を受け取る関数は書けるようになったの?
0064デフォルトの名無しさんNGNG
>>61
間違ってないぞボケナス。
でもこれは揚げ足とも言う。
0065デフォルトの名無しさんNGNG
>>63
...の部分の引数の型がチェックされるということ?
006658NGNG
>>64
ごめん。
0067デフォルトの名無しさんNGNG
16にはC#をお勧めしたい
006859NGNG
>>61
いや16のことだよ
006916 ◆Ms2nrv3c NGNG
>>55
逆に、
{0x41,0x42,0x43}を渡したいのであれば、
"ABC"を渡すことで可能ですが、その方法だと
{0x01,0x02,0x03}を渡したいときに
対応するASCII文字が無く、不可能になってしまいます。

また、
char array[] = {0, 10, 20};
func(array);
な方法だと配列の宣言&初期化とfunc()が離れてしまって見づらく
なりますし、初期化をfunc()の直前でやるのもあほらしいなと。

0070デフォルトの名無しさんNGNG
#defineじゃ・・・
0071デフォルトの名無しさんNGNG
>>69
"\x01\x02\x03"

これってできなかったかな。
0072打・サイタマ@受信料未払いNGNG
あああ! >>58 と間違えたぁ!
あかん、残業しすぎや・・・。
0073デフォルトの名無しさんNGNG
>26
これは?
007471NGNG
>>26で既出やん。
0075デフォルトの名無しさんNGNG
よく見たら間違ってた
"\01\02\03"
0076デフォルトの名無しさんNGNG
>>69
エスケープシーケンス
0077sage NGNG
>>65
>>67 という意味です。
0078デフォルトの名無しさんNGNG
[\x1b2J]は(・O・)イイ!
0079デフォルトの名無しさんNGNG
>>1
今更だが乙。
0080デフォルトの名無しさんNGNG
>>56
> メモリ領域の節約にもなるし

リテラル文字列であっても静的なメモリ領域に
置かれることには違いない。
まあ、autoな記憶クラスの配列よりはスタックを
節約できると思うが。
0081デフォルトの名無しさんNGNG
#define するのが一番素直か
008216 ◆Ms2nrv3c NGNG
エスケープシーケンスでできました。みなさんありがとうございました。
勉強になりました
0083デフォルトの名無しさんNGNG
毎回エスケープシーケンス使うほうが直前に変数に入れるよりもさらに面倒だと思うが・・・
0084デフォルトの名無しさんNGNG
16がスタック消費をそんなに気にするなら
extern const int table[] = { ... };
function( table);
にしたらいいんでないの
まあどうでもいいことだけどね…。
0085デフォルトの名無しさんNGNG
ところでなんで16は「関数の直前で初期化できる配列>>69」を
関数に渡そうとするんだ?

そんなもん関数内でローカルに扱えと思うのは漏れだけか?
0086デフォルトの名無しさんNGNG
漏れもそうおもふ.
0087打・サイタマ@受信料未払いNGNG
中身を触らず、かつfunc()内でしか使わないなら、
func()内にstatic const で持つのもいいかなとか思いますです。
008816 ◆Ms2nrv3c NGNG
>>84
そんなことが出来るんですか。
配列の中身を静的領域に置くテクニックですか。
でも外部変数は使わない方針なんです。
>>85-87
関数としての汎用性がおちる気がして。。
0089デフォルトの名無しさんNGNG
メモリを気にしてるんだったらスコープつければ?
{
char bbb[]={1,2,3,4};
Saru(bbb);
}
0090デフォルトの名無しさんNGNG
>>89
?
0091デフォルトの名無しさんNGNG
>>89
スコープの意味わかってんのか?
0092デフォルトの名無しさんNGNG
スコープ抜けたときに変数のスタック領域って開放されるんじゃないの?
 {
 char A[]={1,2};
 Func(A);
 }
と
 Func("\x01\x02");
でメモリの使われ方に違いが有るの?
0093デフォルトの名無しさんNGNG
>>89
その場合メモリは関係ないですよ( ´,_ゝ`)
0094デフォルトの名無しさんNGNG
例えば関数printfの実物をみてみよう
ということで
stdio.hをみてみたのですが
プロトタイプの宣言はあるものの
それらしきものが見当たらない気がするのですが
気のせいですか?
0095デフォルトの名無しさんNGNG
>91
立派なブロックスコープでつがなにか?
0096デフォルトの名無しさんNGNG
>>95
>>91はそれがメモリの節約と何か関係あるのか?と言っているんだと思うぞ。
0097デフォルトの名無しさんNGNG
>>94
ライブラリのソースを見よう。
0098デフォルトの名無しさんNGNG
>>94
そりゃhファイルだからねぇ…
\Program Files\Microsoft Visual Studio\VC98\CRT\SRC
あたりにあるCファイルにないか?

# CRTって何? C Run timeってことかな?
0099デフォルトの名無しさんNGNG
実装レベルで即座に解放されるかは知らんが、
変数が有効でなくなる立派なスコープだわな。
0100デフォルトの名無しさんNGNG
>>98
C Run Timeか・・・俺もわからんかった。
コンパイル済みのライブラリなら、\Program Files\Microsoft Visual Studio\VC98\Bin\LIBC.LIBの中にあるね。
0101デフォルトの名無しさんNGNG
>>96
んで>>92のような問いかけに戻る、と。
0102デフォルトの名無しさんNGNG
実際のところ>>92のほうはどうなのよ?
最適化も何もしない素コンパイラだったら節約になりそうな気はする。
0103デフォルトの名無しさんNGNG
>>101
解放されてもメモリーを消費することにはかわらんだろ。
使っている時間の長さが違うだけで。

それとも、
void func()
{
int a,b;
}
と、
void func()
{
{int a;}
{int b;}
}
で違うと言いたいのか?
0104デフォルトの名無しさんNGNG
>>103
むしろスタック分だけ余計にメモリ使いそうな気がする
0105デフォルトの名無しさんNGNG
スタックは関数から返れば、解放されるから節約しても無駄。
ブロックスコープ変数は、ほとんどのコンパイラで関数突入時に確保される。
0106デフォルトの名無しさんNGNG
関数内のブロックスコープって人間様のためじゃなかったのか…
0107デフォルトの名無しさんNGNG
下記ならメモリの使用量としては変わらないね。

Func("\x01\x02");
 ->2Byte分の領域が確保され、関数を抜けたときに開放される。

{
 char A[]={1,2};
 Func(A);
}
 ->2Byte分の領域が確保され、スコープを抜けたときに開放される。
0108デフォルトの名無しさんNGNG
>>107
前者が解放されるのってプログラム終了時じゃないの?
0109108NGNG
"\x01\x02"へのポインタが解放されるのは関数を抜けたときだけど。
0110デフォルトの名無しさんNGNG
>108
それなら後者の方が得ということになるの?
0111デフォルトの名無しさんNGNG
コンパイラスレになってきました
0112デフォルトの名無しさんNGNG
>105
速度で見ればローカル変数使うだけ当然遅くなる。
あと、関数呼び出しも戻りのアドレスをスタックに待避する処理や引数を
渡す処理が入るので当然遅くなる。
0113デフォルトの名無しさんNGNG
後者だと、A[]={1,2};でメモリコピーが走らない?
前者の利点が見えないんだけど
0114空気を読めない奴NGNG
たかだか数バイトけちんなよ。
0115デフォルトの名無しさんNGNG
>>114
。・゚・(ノД`)・゚・。
0116デフォルトの名無しさんNGNG
要するに、↓のコードの前者と後者でメモリ使用量が違うか?
ということだな。

hoge()
{
 { char A1[]={1,2}; Func(A1); }

 { char A2[]={1,2}; Func(A2); }

 { char A3[]={1,2}; Func(A3); }
}

hoge()
{
 char A1[]={1,2};
 char A2[]={1,2};
 char A3[]={1,2};

 Func(A1);
 Func(A2);
 Func(A3);
}

ソースに記述したブロックの通りにスタックを確保すれば、
後者より前者の方がスタック使用量を節約できるわけで。

ただ、実際にはソースと同じような確保はしてくれない
と思った方がいいだろうな。
0117105NGNG
>>112
すみません言ってることの意味が分かりません。
>>103 は処理が違うということでしょうか?
0118デフォルトの名無しさんNGNG
>>116
しかも前者は読みづらいね。
あまり現実的じゃないよね。
0119デフォルトの名無しさんNGNG
>>116
スタック節約してどうすんの?
0120デフォルトの名無しさんNGNG
>>119
16君がメモリの消費に神経質だから。
0121120NGNG
あ、俺は>>116ではないです。
0122116NGNG
>>119
俺も知らんよ。(再帰関数でもない限り)
最初に書いた奴はこういうことが言いたかったんだろ?
と書いただけ。
0123105NGNG
>>116
仮にブロックスコープで確保解放が行われるとして、スタック操作に掛かる
コストのほうが、スタック消費量を抑えることより問題だと思われ
for(int i=0; i<10000; i++ )
{
int n;
...
}
とかやると、大変なことに。。。
0124デフォルトの名無しさんNGNG
>>1
スレタイトルの番号を囲んでいる括弧が、左は半角で右は全角なのが気になる。
0125105NGNG
ぐは、またやっちまった
技術板でこのスレだけ進行早すぎ
それと、10000くらいなら全然平気でした
0126デフォルトの名無しさんNGNG
>>123
16以外はみなそう思っていると思うぞ(笑)

でもC++だとfor(int i=0;i<100000;i++)とかやるんだよな・・・あれもスタックに取ると思うんだけど。
0127126NGNG
おっと、スタックに確保する操作はforにはいったときの一回か。
0128デフォルトの名無しさんNGNG
話を元に戻すと
まず16さんが下記の記述はいやだと、
char[] A = {1,2};
Func(A);
理由、メモリを無駄にしたくないから。

よって
Func("\x01\x02");
ではどうだと、、、

それよりも
{
char[] A = {1,2};
Func(A);
}
こうすれば、同じことだしFunc("\x01\x02")より分かりやすいんでは?
という流れ。
0129デフォルトの名無しさんNGNG
>>128
そんな感じだね。
0130116NGNG
>>123
俺もそう思うよ。
ただ、スタック操作だけならx86ではespを加算と減算だけだわな。
初期化が問題だな。
0131デフォルトの名無しさんNGNG
>112
スレを前から読んでないのでよく解らんが
要するにスピードを重視するのか容量を重視するのかというわけで
そのトレードオフによって決めるべきかと。
0132デフォルトの名無しさんNGNG
話かわるけど、VC++のqsortって関数の再帰呼び出しは使っていないみたいだね。
これはスタックオーバーフロウが起らないようにしているのかな?
それともやっぱりパフォーマンスを向上させるためかな。
0133デフォルトの名無しさんNGNG
パフォーマンスに一票
0134116NGNG
でもスタックオーバーフローの可能性があるqsortなんかいやだな。
最近のコンパイラでもあるのかな?
0135デフォルトの名無しさんNGNG
>>128
本題じゃないが、
数字をcharの配列で渡そうとしているあたりに16の徹底ぶりがうかがえる(w
0136デフォルトの名無しさんNGNG
>>135
なるほど。気づかなかった。
きっとそうなんだろうな。
0137デフォルトの名無しさんNGNG
intは(例えば)4バイトも消費するからもったいないです!!ってか?(w
0138デフォルトの名無しさんNGNG
じゃあfloatでいいところでもdouble使っている俺はやばいな(鬱
実際それはまずいんだろうけど。なんとなくfloatは嫌い。
0139デフォルトの名無しさんNGNG
>>137
それはそれですごいなw
0〜255(-128〜127)の値しかとらないことが分かっているのかな?
0140デフォルトの名無しさんNGNG
エスケープシーケンス使うってことは初期化に変数使えないんじゃ・・・
0141デフォルトの名無しさんNGNG
> intは(例えば)4バイト
> 0〜255(-128〜127)
この辺にもツッコミ禁止の徹底ぶりがうかがえる。

ネタですた。謝ります。スマソ。
0142137NGNG
>>141
だってここの人怖いもん(;_;)
おかげで注意深くなれたけど(w
0143デフォルトの名無しさんNGNG
MinGWで
--------------------------------
main () {
  void *pa, *pb;
  {
    int a;
    pa = &a;
  }
  {
    int b;
    pb = &b;
  }
  printf ("&a = %p\n", pa);
  printf ("&b = %p\n", pb);
}
--------------------------------
&a = 0073FDDC
&b = 0073FDD8
--------------------------------
0144デフォルトの名無しさんNGNG
>>143
それが何か?
0145デフォルトの名無しさんNGNG
・・・荒れてる(?)っぽいけど、質問して良いかな?

2次元配列へのポインタってどうやって記述すればいいんですか?
手元にある参考書には配列へのポインタは書いてあるんだけど
2次元配列へのポインタについては全く書いてないんで。
0146デフォルトの名無しさんNGNG
>>144
もしブロック終わったら解放するってんなら、a と b は同じ領域を
共有するかもしれないって思ったわけだが、違うらしいなって事
>>116の話題ね
0147デフォルトの名無しさんNGNG
>>145
ポインタと配列の関係については、ここをひととおり目を通すといい
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

「配列へのポインタ」というのはまー慣用的な表現で、
実際には配列の先頭へのポインタの意味する事が多い。
char a[3]; char *p = a;
で、この例の先頭がさらに配列(char[5])だった場合を考えてみればいい
char b[3][5]; char (*q)[5] = b;
これとは別に、(別途確保した)配列(の先頭)をさすポインタの配列、
というものを使うことも多い
0148デフォルトの名無しさんNGNG
>>146
そんなもんコンパイラはもとよりコンパイルオプションによって変わるぞ。
VC++6 なら、Debug なら共有しないが、Release なら共有する。

何で実装依存なのに、一つの結果見ただけで「違うらしいな」なんて結論付ける
かなぁ...。
0149デフォルトの名無しさんNGNG
>>148
馬鹿ですか?「MinGWで」って書いてるのに
0150デフォルトの名無しさんNGNG
>>149
アフォですか ? 「コンパイルオプションによって変わる」と書いてあるのに
0151デフォルトの名無しさんNGNG
> 「違うらしいな」なんて結論付ける

プ
0152デフォルトの名無しさんNGNG
逆コンパイルするツール何か教えれ。
0153デフォルトの名無しさんNGNG
忘れていたが、はるか昔、俺も16と同じこと考えたことあった。
いまとなってはなんでそんな事考えたのかも思い出せないけど。

メモリの節約しようって発想はなかったけど、使い勝手から結局va_list使った。パスカル文字列風に先頭はデータ数入れて。でも、va_listで自動キャストされる規則をわすれたりして型を間違えると誤動作する。
0154名無しさん@EmacsNGNG
3D ライブラリが無い環境 (Palm 等) で 3D グラフィックを表示する
アプリケーションを作りたいのですが、参考になりそうなソースコード
がありましたら教えて下さい。
今は cbzone のソースを読んでいます。
0155デフォルトの名無しさんNGNG
>>152
こっちで聞け。
http://pc3.2ch.net/test/read.cgi/tech/1014404990/l50

>>151
その程度の書き込みしかできないなら、止めとけ。ヴァカみたいだぞ。
(みたいじゃねーのかもな。ププ)
0156nobodyさんNGNG
もう156.早い.
0157デフォルトの名無しさんNGNG
聞け!
0158デフォルトの名無しさんNGNG
VC買うのと無料のBCCつかうのって、どっちがいい?
0159デフォルトの名無しさんNGNG
>>158
売ってるティッシュ買うのと街頭で配ってるティッシュ使うのって、どっちがいい?
0160デフォルトの名無しさんNGNG
>>159
どっちでも良いってことですか?
0161デフォルトの名無しさんNGNG
ケツの拭き心地が違うということ
0162デフォルトの名無しさんNGNG
>>161
ケツの拭きごこちってどう言う意味?
作業のしやすさ?
0163デフォルトの名無しさんNGNG
>>162
配ってるティッシュ使ってみて不満があるなら売ってるの買えや
0164デフォルトの名無しさんNGNG
>>163
わかりました。
ありがとうございました。
0165デフォルトの名無しさんNGNG
>>163
僕は意味を聞いているのですが!
ケツの拭きごこちとプログラムを作るのと何の関係があるの?
あおりはやめてください。
0166デフォルトの名無しさんNGNG
>>165
騙りやめれ
0167デフォルトの名無しさんNGNG
なんでこれぐらいの事で怒るのか。
0168デフォルトの名無しさんNGNG
BCCでCのソースをコンパイルするとき拡張子を必ず.cにしないと
いけないと聞きました。Cのソースを.cppでコンパイルしたらどんな
不都合があるのですか。「倉薫」の入門本にもそんなくだりがあったが
理由がわかりません。
0169デフォルトの名無しさんNGNG


 ケ ツ 拭 い て み り ゃ あ わ か る だ ろ う が !
0170デフォルトの名無しさんNGNG
うっ・・・
0171デフォルトの名無しさんNGNG
>>168
明らかだろ。オマエがそうやって人に聞いてるの見てると、
もう(。A。)(.Λ.)(:>)(゚∀゚)(<:)(.Λ.)(。A。)って感じだな。
0172デフォルトの名無しさんNGNG
http://www.bloodshed.net/index.html

ここのPascalとC++の統合開発環境はけっこうよかったです。報告まで
0173デフォルトの名無しさんNGNG
>>171

いっている意味がわかりません。Hello,World程度の簡単なソースを
拡張子.cにしようが.cppにしようがコンパイル結果に関係ないと思うのですが。
0174デフォルトの名無しさんNGNG
>>168
> BCCでCのソースをコンパイルするとき拡張子を必ず.cにしないと
> いけないと聞きました。Cのソースを.cppでコンパイルしたらどんな
> 不都合があるのですか。「倉薫」の入門本にもそんなくだりがあったが
> 理由がわかりません。

C と C++ で一部非互換のところがあるからだよ。BCC は、使ったこと無いからわからんけど、VC++ では xxx.c なら sizeof 'a' == 4 となるが、xxx.cpp なら sizeof 'a' == 1 となる。
0175デフォルトの名無しさんNGNG
>>173
全然違う・・・
0176デフォルトの名無しさんNGNG
CとC++ではNULLの意味が異なります。
0177168,172,173NGNG
C++ってCのスーパーセットだから、CのソースをC++コンパイラでコンパイルすると
エラーはでないけど、実行時エラーがでる場合があるということですか?
0178デフォルトの名無しさんNGNG
まぁまぁ。
>>173は未だにトランスレータ式のC++コンパイラ使ってるんだよ。
なのに次からBCC使わなきゃなんなくなって、不安でしょうがないんだよ。
0179裕美子 ◆lIp1b.Ek NGNG
会話についていけないからもう質問はやめにします。すみませんでした。

参考までに、使用コンパイラは 試食版とBCCです。
0180デフォルトの名無しさんNGNG
>>179
あんただれ
0181裕美子NGNG
>>180
痴漢が話しかけないで!
0182デフォルトの名無しさんNGNG
char *c = malloc(128);
C++ではエラー出ます。
0183デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1032421426/l50

ここの女の子だよ>>180
0184デフォルトの名無しさんNGNG
かといって
char* c = static_cast<char*>(malloc(128));
にするとCでコンパイルできなくなる罠
0185デフォルトの名無しさんNGNG
Cのソースを*.cppでコンパイル必要があるのかと問い詰(ry
0186デフォルトの名無しさんNGNG
まあ、まあ、これでも見て落ち着けよ

          /:::|:::::::|:::::::::::::/::::::/::::::::::::::/:::::::/`\_
       / ̄\::::::|:::::/:::......-―――--..........__/:::::::::::::::\
   ┌ー ̄::::::::::::ヽ::|:::..-^ ̄            ^ ヽ、:::::::::\
   ヽ::::::::::::::::::::::::::::/                  \::::::::ヽ
    ヽ:::::::::::::::::::::::/             ::::       \:::::ヽ
    ヽ::::::::::::::::::/              ::::::::        \::::|_
     ):::::::::::::::|              ::::*:::::        ヽ:|::::ヽ
     /::::::::::::::::|              ::;;;;:          l::::::::ヽ
    /::::::::::::::::::|             ノ::ii:ヽ::          l::::::::::|
    |::::::::::::::::::::|            /::::;リ:::l::::         |::::::::::::|
    |:::::::::::::::::::::l           ...l::::;リ:::/::         /:::::::::::::|
    .|::::::::::::::::::::::l          . /:ア/:::        /:::::::::::::::i
    l:::::::::::::::::::::::::l          ./::`^:::::        /:::::::::::::::::/
    ヽ::::::::::::::::::::::::l         /::::::::::        /:::::::::::::::::::/
     /:::::::::::::::::::::::l        /:::::::::::::      /::::::::::::::::::::::/
     /::::::::::::::::::::::::i __-ー--=;;;::::::::::::::  ....::::/:::::::::::::::::::::::/
0187デフォルトの名無しさんNGNG
裕美子脱ぐなよ汚ネェ
0188デフォルトの名無しさんNGNG
>>186
リリアたん・・・ハァハァ
0189デフォルトの名無しさんNGNG
charはなんと読むの?
0190デフォルトの名無しさんNGNG
sageちまった
0191デフォルトの名無しさんNGNG
>>189
> charはなんと読むの?
もうこの話題はいいよ、「キャー」でも「シャー」でも何でもいいよ。
0192デフォルトの名無しさんNGNG
茶
0193デフォルトの名無しさんNGNG
>>191
ぷっ、
シャーだって
ぷぷぷぷぷぷぷ
くっくっくっ
0194デフォルトの名無しさんNGNG
勝俣
0195デフォルトの名無しさんNGNG
>>189
友人の飼っていた犬が「ちゃる」だったので、
charも「ちゃる」になりますた。
0196nobodyさんNGNG
キャッだろ。
キャラクターの略だからな。
キャルかなぁ。
0197デフォルトの名無しさんNGNG
友人の飼っていた子が「ゆみ」だったので、
charも「ちゃー」になりますた。
019816 ◆Ms2nrv3c NGNG
ちょっと気になったのですが、
>>70と>>81で出てるdefineではどうやってやるのでしょうか
0199デフォルトの名無しさんNGNG
>>198
#define VAL_ 0
0200デフォルトの名無しさんNGNG
200get
020116NGNG
とっとと答えんかいっ!!!
糞どもがーーーーっ!!
0202デフォルトの名無しさんNGNG
#define UZEE 16
0203デフォルトの名無しさんNGNG
#define 16 メモリケチケチ厨
0204デフォルトの名無しさんNGNG
#define _16 -1
0205デフォルトの名無しさんNGNG
#define ANSWER "これ以上メモリ節約なんて考えるなタコ"
0206デフォルトの名無しさんNGNG
warning C4305: 'argument' : 'const int' から 'char' へ切り詰めます。

#define FLG_AGE 1

void a( char b );

a( FLG_aGE );

どうすればいいんでしょうか?
キャスト?
0207デフォルトの名無しさんNGNG
#define 206 16
0208デフォルトの名無しさんNGNG
#define FLG_AGE '\1'
0209デフォルトの名無しさんNGNG
>>208
間違い
#define FLG_aGE '\1'
0210206NGNG
放置?
0211デフォルトの名無しさんNGNG
>>210
> 放置 ?

はぁ ? >>208-209 を見てんのか ?
0212デフォルトの名無しさんNGNG
別にキャストでいいんじゃないの

a( (char)FLG_AGE );

0213デフォルトの名無しさんNGNG
FLG_AGEを常にcharにしたい(理由はあえて聞かない)なら、
#define FLG_AGE ((char)1)

あと、C FAQに
   文字リテラル('\1'とか)は実はint型な罠
ってのがあったような気がするのだが、どうか。(C++ではcharだという話も)
0214デフォルトの名無しさんNGNG
>>213
間違い
#define FLG_aGE ((char)1)
0215212NGNG
>>214
いや>>206の聞いてる人が既にミスしてるからw

>>#define FLG_AGE 1
>>void a( char b );
>>a( FLG_aGE );
↑ここねw
0216 NGNG
楽しそうですね
0217デフォルトの名無しさんNGNG
>>206
void a(char b);をvoid a(int b);にする。char型の引数ってあまりみないな。
0218デフォルトの名無しさんNGNG
>>217
charにしても別にメモリの節約にはならないし(w
0219デフォルトの名無しさんNGNG
>>218
プ
0220デフォルトの名無しさんNGNG
unsigned char 型の定数を32ビット右シフトすると、
元の値とまったく同じになるんだけど、何故?環境はVC++6.0SP5
0221220NGNG
ちなみに31ビット右シフトすると0になります。
もうわけ分かりません。
0222必要なくね?NGNG
っていうかなんで
8bitの unsigned char 型のデータを
32bit右シフトしてるの?
0223デフォルトの名無しさんNGNG
全然シフトについての構造とかは知らないけれど、
隣との、xorを取るようなことを繰り返して、
シフトをしているのであれば戻るのかもね。
0224223NGNG
全然的外れな事書いていたらご免ね。
0225デフォルトの名無しさんNGNG
数の決まっていない数値データの文字列からタブなどを判別してdouble型の配列に値を代入するにはどうしたらよいのですか?
0226デフォルトの名無しさんNGNG
ま た 未 定(略
0227デフォルトの名無しさんNGNG
数の決まっていない数値データの文字列からタブなどを判別してdouble型の配列に値を代入すればいいです。
0228デフォルトの名無しさんNGNG
ヒントだけでも教えていただけないでしょうか?
0229デフォルトの名無しさんNGNG
strtokですか?
0230デフォルトの名無しさんNGNG
分かるとこから書いていけばいいです。
それでも詰まったらコードを晒す。
0231220NGNG
>>222
こんな感じの文を書いてる。

unsigned char *p;
unsigned long a;
    :
a |= *p >> (32 - s); // 0 <= s <= 32

s=1〜32のときは期待通り動くのが、s=0のときだけ0にならず驚いた。

>>223
こんな夜中にレスつけてくれただけでも有難う。

いろいろ検索してるうちにこの症状について書いてあるページを見つけた。
どうやらこれは処理系依存らしいが、ANSI Cでもそう定められてるのだろうか。
ttp://www.biwa.ne.jp/~chu0296/laboratory/cpp.html
0232デフォルトの名無しさんNGNG
さて今日もいってみようか

>>231
それは処理系依存ではなく未定義です
0233デフォルトの名無しさんNGNG
>>231
これ試してみたら多分、まずunsigned charをシフトするときでも
32bitレジスタに値を入れてそれをシフトする命令を出してるらしい。
で、それをシフトするとき何ビットシフトするかを入れるレジスタ
の値が31以上だったとき下位5bitだけ使うっぽい。
だから33bitシフトとすると1bitシフトする。
0234デフォルトの名無しさんNGNG
ちょっと脱線。

x86形の話だけど、コンパイラはシフトをアセンブラレベルの
シフト命令(shr/sar)に展開するのね。
で、8086の頃は、シフト命令は1ビットだけシフトする命令か、
CLレジスタに数値を入れてシフトさせるしかなかったのね。
で、ハードウェア的には、本当に繰り返しで処理してたのね。
80186(かな?)以降は、直接nビットシフトする命令が出来たんだけど、
これもハードウェア的には(マイクロコードで)繰り返し処理してたのね。
で、386になってから、多ビットシフトのハードウェアが導入されて、
ようやくシフトが"軽い"命令になったわけ。

で、たしか、386からだと思うけど、clレジスタに32以上の数値を指定しても、
下位ビットだけがマスクされて、実際には31ビット以下のシフトしか
行われないようになったわけ。
だから、16bitコンパイラを使って、32bit以上のシフト命令を使ったプログラムを作ると、
むかーしのCPUと今のCPUで結果が異なるわけ。
この結果を、CPU種別の判別なんかに使ってたりしたんだな。

コンパイラは、CPUの判別なんかしない(実行環境は別だし、以降に生まれたCPUにも対応できない)から、
効率重視のC言語において結果が異なる(未定義になる)のは
ある意味仕方がないとも言えるんだろうね。
0235nobodyさんNGNG
>>234
私、初発言の初心者ですが、>>234さんの説明は目から鱗でした。
なるほど、機種依存ってのはここに根本原因があったのですね。
ありがとうございました。久しぶりに濃い文章だっだなぁ。
0236220NGNG
>>233-234
235氏と同じく目から鱗でした。
アセンブリ言語の知識はZ80〜8086時代で止まってるからなぁ。
まさに、内部でシフト演算をn回ループしてるものだと思ってたよ。
0237デフォルトの名無しさんNGNG
double i=0;

for(i=0;i<10;i+=0.1){
printf("%1.1f ",i);
}

表示するとなぜか最後に10.0が入るのはどうしてなんですか。
0238デフォルトの名無しさんNGNG
  ま た 浮 動 小 数 点 か ( 藁


って、昨日見たのはJavaスレだったか。
0239デフォルトの名無しさんNGNG
二進数の世界だから、0.1はあらわせなく、誤差が生じて
判定されてしまうって言うのが一般的な回答なのでは?
for(int i=0;i<100;i+=1){ //i++で充分
  printf("%1.1f ",i/10.0);
}
こういうふうにしなさいと言うのもあると思う。
違ってたらご免。
0240デフォルトの名無しさんNGNG
>>233
2^5(2進5bit)で割った余りか。なるほど。
0241デフォルトの名無しさんNGNG
>>237
10.0?なんかソースのコピペミスってないか?
最後だけじゃなく、途中経過も書いてみな。
0242デフォルトの名無しさんNGNG
>>241
ウチだと10.0も出た。たぶん
0.1が0.09999..とかで、
10.0も9.99999...なんだと思われ
0243デフォルトの名無しさんNGNG
9.99999999999998050000
0244デフォルトの名無しさんNGNG
>>241
> 10.0?なんかソースのコピペミスってないか?

既に、>>239 で答えでてるよ。初心者が良く陥りやすい罠のひとつ。

0.1 って言うのが本当の 0.1 じゃないから10回めのループの判定の時に i が 10.0... にならなくて、9.9... とかなっているため、もう一回余分に回るだけ。解決策は、>>239 のようにやるのが普通。

ちなみに、最後に i が 10.0... になって無いのに表示が 10.0 となるのは、出力時に四捨五入しているから。
0245デフォルトの名無しさんNGNG
(0.1)10 = (0.00011001100110011〜〜)2
2進表現内での循環小数になる。=>まぁこれが誤差などの原因かな
0246デフォルトの名無しさんNGNG
double i=0;

for(i=0;i<10;i+=0.1){
printf("%.20f ",i);
}

http://www.google.com/search?q=%95%82%93%AE%8F%AC%90%94+%8C%EB%8D%B7&ie=Shift_JIS&hl=ja&lr=lang_ja
0247デフォルトの名無しさんNGNG
#include <stdio.h>
void main()
{
printf( "%f\n", 1 );
}

表示するとなぜかアプリケーションがクラッシュするのですがどうしてなんですか。
0248デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c15.html#3
15.3:
解けなくてイライラしていた問題が実は、

        printf("%d", n);

で起きていることがわかった。ANSIの関数プロトタイプは上のような 引数の型
の不一致から守ってくれると思っていたのだが。

A:

関数が可変数個の引数を取るとき、プロトタイプは可変数個の引数の 数やその
データ型についての情報を与えない(そもそも出来ない)。よっ て通常の保護の
仕組みは、可変数個の引数リストの可変長の部分には あてはまらない。コンパ
イラは暗黙の変換も(通常の)データ型の不 一致も警告もできない。

質問5.2, 11.3, 12.9, 15.2も参照のこと。
0249デフォルトの名無しさんNGNG
>>247
main()の型がvoidだからです。
標準Cではmain()の型はintと決まっています。
0250デフォルトの名無しさんNGNG
>>249
ネタにマジレスするが
そんなOS依存環境依存なことをどうどうと正論ぶるのはやめにしませんか?
0251247NGNG
>>248
レスありがとうございます。
しかし、浮動少数点が正しく表示されないのならば
まだ分かるのですが、なぜクラッシュするのでしょうか?

>>249
int main() にしてもダメでした。
0252デフォルトの名無しさんNGNG
>>251
sizeof( double )!=sizeof( int )だからでないの?
0253デフォルトの名無しさんNGNG
>>247
環境も書いてないし、クラッシュしたとは具体的にどうなったのかも
提示されていない。
0254デフォルトの名無しさんNGNG
void なら return ;
int なら return 0;
を入れなさいという事では?(コンパイラの要求)
0255デフォルトの名無しさんNGNG
>>247
printf( "%f\n", 1.0 );
intとdoubleの大きさの違いを思い知れ スッタコ

あと頓珍漢な回答してた>>253も氏ね アホボケ
0256デフォルトの名無しさんNGNG
>>250
> ネタにマジレスするが

メールアドレス見た ?
0257デフォルトの名無しさんNGNG
>>251
呼び出し側がスタックに投げ入れるデータの量と、
呼び出された関数がスタックから取り出すデータの量が食い違えば、
スタックポインタがずれて、まともに動作できなくなる。

とゆーシナリオを想像するんだけど、事実は知らん
そして事実がどうであれ、保証を失う事をしておいて「なぜ?」と問う
自分のセンスを疑ったほうがいいのではないか。
「やっぱり」と思ってほしいぞ
0258デフォルトの名無しさんNGNG
>>255 にしても、クラッシュっていうのは?
0259258補足NGNG
だって引数いっこだし、sp弄らないはずだよねえ?
とおもったけど、リターンアドレスもスタックに積んでるか。
0260デフォルトの名無しさんNGNG
うーん、3時間半で11レスか
思ったより釣れたな

一応用意していた回答は
「printfは引数の型チェックを行えないので
浮動小数点を使う場合は、明示的に使ってやらないと
CPUが浮動小数点ユニットを切り離してしまうから
クラッシュする」でした。

ちなみに環境はVC6ですが、インテル系のCPU使っていれば大体どんな
コンパイラ使ってもクラッシュすると思う。

#include <stdio.h>
double d; // <-- 追加
void main()
{
printf( "%f\n", 1 );
}

コレなら表示はおかしいけど死にはしない。

0261デフォルトの名無しさんNGNG
>>257
もちろん実装によるけど...

> 呼び出し側がスタックに投げ入れるデータの量と、
> 呼び出された関数がスタックから取り出すデータの量が食い違えば、
> スタックポインタがずれて、まともに動作できなくなる。

なんてことは、普通起こらない。スタックポインタの操作は呼び出し側の仕事だから、呼び出され側がスタックから一つも読まなくても、ポインタがずれたりはしない。
つーか、printf() なんかだといくつ積まれて呼び出されるかわからないから、呼び出され側でスタックポインタの操作をしようが無い。

> とゆーシナリオを想像するんだけど、事実は知らん

今回の件は、多分 (int)1 の値とその後ろのスタックの内容を (double) として見た時に浮動小数点じゃねーぞって言って怒られたんだと思う。

> そして事実がどうであれ、保証を失う事をしておいて「なぜ?」と問う
> 自分のセンスを疑ったほうがいいのではないか。
> 「やっぱり」と思ってほしいぞ

ここは、同意。「何で、これぐらいうまくやってくんねーんだよ。」とか思う奴は、C なんか使っちゃいかん。
0262258NGNG
>260 あー俺FPU意識しなきゃいけない石使ったことなかったよ
0263デフォルトの名無しさんNGNG
ドキュソ質問で申し訳ないですが、、、

int buff;

(char)buff; と書いてあればbuffをchar型にキャストせよと言う事ですが
(char*)buff; ならばどーゆー意味でしょう?buffをchar型のポインタ型とせよ、ってことであってます?
0264デフォルトの名無しさんNGNG
bccだとクラッシュしなかった・・・(0.000000と表示された)
0265デフォルトの名無しさんNGNG
>>260
> 「printfは引数の型チェックを行えないので
> 浮動小数点を使う場合は、明示的に使ってやらないと
> CPUが浮動小数点ユニットを切り離してしまうから
> クラッシュする」でした。

やっぱりただのアフォだったか...。printf() 使ってる時点で、浮動小数点ルーチンは組込まれるよ。うそだと思うなら、printf() のソース見てみ。(VC++ なら、output.c だよ。)

> コレなら表示はおかしいけど死にはしない。

たまたまだ。最適化オプションちょっと変えるだけで、クラッシュしたりしなかったりするよ。
0266デフォルトの名無しさんNGNG
>>260
ちょっとまった。それでクラッシュしないのと
浮動小数点ユニットを切り離してしまうのとは
まったく別次元なんだけど、そこは認識してる?

つーか、>>260の回答は間違っている。
0267デフォルトの名無しさんNGNG
>>258
スタックオーバーフロー
0268デフォルトの名無しさんNGNG
>>263
> (char*)buff; ならばどーゆー意味でしょう?buffをchar型のポインタ型とせよ、ってことであってます?

まあ、あってる。多分 int のビット幅と char へのポインタのビット幅が同じ (か、int の方が広い) なんだろうな。

デバッガなんかを作っていて、アドレス値を整数 (多分 16進数から変換して) で入力させて、そのアドレスからデータを引き出すとかやる時に使ったりする。
0269263NGNG
>>268
でも

int a = 10;
char b = (char)a;
printf("%c\n" , b);

で10と表示されませんが。
0270デフォルトの名無しさんNGNG
>>260
それでしなないのは、それこそ「たまたま」じゃん。
スタックが増えたからでしょ。 dになんか入れれば表示も変化するよ。
FPU切り離しって何言ってんだかわかんない。
もし万が一そうだとしてもprintf使ってりゃありえんことを理解してよ。
0271デフォルトの名無しさんNGNG
>>269
a=65を突っ込んで、もう一度報告してみろ
0272デフォルトの名無しさんNGNG
俺は
int a = 'A';
をお薦めする
0273デフォルトの名無しさんNGNG
>269 ネタだよね?
0274デフォルトの名無しさんNGNG
>>269
%cなんだから10になるわけないのでは?
0275デフォルトの名無しさんNGNG
場が荒れてしまって、申し分け有りませんでした。

こちらで、起きているエラーはこれです。
http://msdn.microsoft.com/library/en-us/vccore98/html/r6002.asp

> たまたまだ。最適化オプションちょっと変えるだけで、クラッシュしたりしなかったりするよ。

確かにグローバル変数で取っても、最適化でクラッシュしますね。

#include <stdio.h>
void f(){ double d=0.0; } // 明示的にFPUを使う
main()
{
printf("%f\n", 1 );
}

これでもクラッシュするオプションあったら教えて欲しいです。
0276デフォルトの名無しさんNGNG
VC++で、各標準関数に対応するソースファイルはどうやったらわかりますか?
0277デフォルトの名無しさんNGNG
真実は知らんがどうせなら __int64 を使って欲しかった。
0278デフォルトの名無しさんNGNG
>>275
VC++だとFloating pointがロードされていないとでるかな。
ちょっとやってみよう。
0279278NGNG
やってみた
void f(){double d=0.0; }があると出ないのか・・・
0280デフォルトの名無しさんNGNG
>>257
なるほどな。可変個の引数ゆえにか。
double型の引数を取ると分かっていればintを渡してもdoubleに変換されるんだろうけどね。
0281280 NGNG
>>261
いや、違うのか(汗
0282デフォルトの名無しさんNGNG
printf側でスタックに積んだ量よりも多く読もうとしてアクセス違反が起きたということはないの?
数バイトで起るとは思えないけど。
0283デフォルトの名無しさんNGNG
>>275
> http://msdn.microsoft.com/library/en-us/vccore98/html/r6002.asp

ふむ、確かに "%f" の変換ルーチンがテーブルになっていて、浮動小数点関連の操作をしていない時は、エラールーチンを指すようにしている。
大昔に、8087 が必要だった頃の名残りか、ちょっとでも実行サイズを減らそうとする努力なのかも知れないな。
そこまで読めなかったよ、すまん。(ちょっと言い訳すると、IDE で実行すると R6002 の前に、アサーションエラーが先に出るので気付かなかったよ。)
0284デフォルトの名無しさんNGNG
>>282
printf( "%08x %08x\n", 1 );
をリリースモードで実行したところ
00000001 00401145
     ↑mainのアドレス
と表示されますので、アクセス違反は起きていないと思います。

>>283
5年くらい前に、学校の授業ではまったバグです。
ネタのつもりで書き込んだのですが、場が荒れてしまい
申し訳ありませんでした。
0285デフォルトの名無しさんNGNG
C言語での未定義の振る舞いの原因を
議論すること自体がナンセンス。

たとえ外科医を雇って鼻を解剖したとしても
原因の確証はつかめないだろう。
0286デフォルトの名無しさんNGNG
と、アメリカンを気取ってみた。
0287デフォルトの名無しさんNGNG
>>285
でもバグの原因追求するときには必要な知識なんだよ。
とくに、クライアントが「結果」しか教えてくれないときとか。
0288デフォルトの名無しさんNGNG
>>285
> C言語での未定義の振る舞いの原因を
> 議論すること自体がナンセンス。

まあ、たまには処理系べったりの議論も悪くないさ。ここだとちょっとスレ違いかもしれないけどね。久々に output.c のソースなんかも見たしね。
(でも、結局誰が 変換ルーチンのテーブルセットしてるか良くわかんなかったけと。)
0289デフォルトの名無しさんNGNG
C言語なら私に聞け
0290デフォルトの名無しさんNGNG
>>289
質問!

Cで、mallocされたあとに使われてなくなった(参照の無くなった)メモリを
ガーベッジコレクトしてくれるような仕掛けをどうにか作りたいと考えてるんだけど
どうしたらいいかな?

今考え中なのはmallocで返却されるポインタをすべてライブラリで一元管理して
ポインタへのポインタを持ち歩いてもらうことでリソースの利用状況を監視できる
ようなものを考えたんだけどスコープの外れたスタック変数なんかは
どうしても監視しようが無くて困ってまぅ
0291289NGNG
よし!次!
0292デフォルトの名無しさんNGNG
>>290
> Cで、mallocされたあとに使われてなくなった(参照の無くなった)メモリを
> ガーベッジコレクトしてくれるような仕掛けをどうにか作りたいと考えてるんだけど
> どうしたらいいかな?

基本的に C でやるのは難しいし、あまり益が無い。そう言うのを作るのが楽しいと言うのでなければ、Java とかにした方がいい。

> 今考え中なのはmallocで返却されるポインタをすべてライブラリで一元管理して
> ポインタへのポインタを持ち歩いてもらうことでリソースの利用状況を監視できる
> ようなものを考えたんだけどスコープの外れたスタック変数なんかは
> どうしても監視しようが無くて困ってまぅ

基本的に C にはその手の監視機能が無いから、プログラマーに関数から抜ける時は ○○の関数を呼んでね、としておいてその関数が頑張ってスコープの外れたポインタを知るようにするしかないと思う。
ソース自体に書くのはあまりにも面倒だから、プリプロセサに手を入れるとかする必要があると思う...、とか考えるとせめて C++ にした方がいい。
0293デフォルトの名無しさんNGNG
DLLをつかってプログラムを作りたいのですが
DLLに処理を渡すときはどういう風にするのですか?
0294デフォルトの名無しさんNGNG
>>290
http://homepage2.nifty.com/aito/gc/gc.html
0295デフォルトの名無しさんNGNG
さっき友達から電話かかってきて、質問受けたけど
コンパイル時に「Sample.obj(Sample):Undefined symbol:_power_」などと表示され、プログラムを実行したときに途中で止まってしまうらしい
なんか心当たりはある?
0296290NGNG
>>294
わーお!
これナイスだな。 GCのタイミングは良くわかんないけど。
そうか、スタックもヒープも全部検査するか、そうきたか。
遅いかなーと思って敬遠気味だったけどそれが楽だしな。
0297デフォルトの名無しさんNGNG
>>296
これナイスってアンタ、死ぬほど有名だぞ………
0298デフォルトの名無しさんNGNG
Boehm GCって速度的にはどうなんだろう。
0299デフォルトの名無しさんNGNG
>>295
*途中で*止まるのなら面白いね
0300デフォルトの名無しさんNGNG
>>298
w3mでも使ってみればええやんけ。
0301デフォルトの名無しさんNGNG
>>300
なんですかそれ?
0302デフォルトの名無しさんNGNG
調べろよ厨
0303デフォルトの名無しさんNGNG
>>297
> これナイスってアンタ、死ぬほど有名だぞ………

使ってんの見たことないけど...。
0304デフォルトの名無しさんNGNG
>>303
w3mでつかってるよ
0305デフォルトの名無しさんNGNG
今日大学の授業で課題がでました。
課題の内容がWindowsのコマンドプロンプトで動作するアドレス帖です。
そんなプロでも作れるかどうかわからないものを学生に作れという教授に問題がある、という皆さんの意見はわかりますが僕は何とか作って提出したいと思っています。
そこで皆さんにお願いがあります。

作って!!
0306デフォルトの名無しさんNGNG
>>305
そんなプロでも作れるかどうかわからないものを学生に作れという教授に問題がある。
0307デフォルトの名無しさんNGNG
>>305
そんなプロでも作れるかどうかわからないものを学生に作れという教授がいる大学に入る>>305に問題がある。
0308デフォルトの名無しさんNGNG
アドレス帖って、住所の一覧表示するだけ?
0309デフォルトの名無しさんNGNG
>>305
了解!
#include <stdio.h>
int main(void)
{
 printf("漏れのアドレスは%p\n", (void*)main);
 return 0;
}
0310デフォルトの名無しさんNGNG
>>305
何も制限無いんだったら、適当に作ってアドレス長帳だと言い張れば?
0311デフォルトの名無しさんNGNG
>>305
「アドレス帖」 というのが何かのソフトウェアだと仮定しよう。
それがどういう動作をするものなのか教えてくれないかな?

たとえば、実行したら Hello,wolrd! と出力する、という仕様なら
それはプロでなくてもできるレベルだよね。
0312305NGNG
>>311
すみません。アフォの相手をするつもりはありません。
あおりは別スレにいってください。つーか氏ね。
0313デフォルトの名無しさんNGNG
今度は305祭りか、、
0314デフォルトの名無しさんNGNG
このスレでの 305の将来が決定いたしました!!
0315デフォルトの名無しさんNGNG
>>312
てゆーか、仕様書けよ、と言ってるんだけど。
オフィスやアウトルックにあるような他アプリ連動型とかいきなり作るわけでもないっしょ
0316305NGNG
>>312は偽者ですので無視してください。ということで、

作って!!
0317デフォルトの名無しさんNGNG
つーか、宿題やってってとこだろ
0318デフォルトの名無しさんNGNG
C言語初心者で、問題を沢山こなしたいんですが
〜を作れ!という初級問題があるサイト無いでしょうか?
0319デフォルトの名無しさんNGNG
>>316
309が丁寧に作ってくれたじゃないか。
ということで君の問題は解決済みと判断する。
0320デフォルトの名無しさんNGNG
>>381
子を作れ!
0321デフォルトの名無しさんNGNG
>>318
305は?
0322先生NGNG
>>318
どこか寂れた誰も使ってないスレッドに誘導してくれれば
sage進行でオレがみっちり鍛えてやるよ。
0323デフォルトの名無しさんNGNG
[Q1]渡した文字列を反転して返す関数fugaを作れモルァ
{Q2]メモリを確保する関数hogeを作れ
- 内部でmallocを使ってよい
- そのmallocがNULLを返したらabortする
- hogeの戻りはvoid。引数は好きにしな

>>318
0324323NGNG
風呂に入ってくるのでその間に回答ヨロシク
0325とんでもなく超初心者318NGNG
…もっと勉強して出直してきます。ありがとうございました。(;´д⊂)
0326デフォルトの名無しさんNGNG
>>325
マ、マジでつか?
0327デフォルトの名無しさんNGNG
#include <string.h>
unsigned int hh(const char *s)
{
  const char *p;
  unsigned int n = 0;

  if(s) {
    p = s + strlen(s);
    while(--p >= s) n = (n<<1) + *p;
  }
  return n;
}

上の関数を作って実行したところ、愛しいあの子にコクられました。
何がよかったんでしょうか?
0328318NGNG
char *fuga(char *s) {
 int len;
 char *p;
 len = strlen(s);
 p = (char*)malloc(len);
 strcpy(p , len);
 for(i = 0;i < len ; i++)
  s[i] = p[len - i - 1];

 free(p);
 return s;
}
0329デフォルトの名無しさんNGNG
>>328
strcpyもついでにやっちゃえ
0330デフォルトの名無しさんNGNG
char *fuga(char *s) {
 for(i = 0;i < strlen(s) ; i++)
  s[i] = ~s[i];
 return s;
}
0331デフォルトの名無しさんNGNG
>>328
ネタ?だよね?
0332323NGNG
>>328
fugaではmalloc禁止で。
0333あNGNG
文字列AとBを比較して
Aの中にBの文字列が含まれているかどうかを
調べる標準関数ってありませんか?
一文字ずつ自分でif文で比較していくのがいいのでしょうか?
いい方法あれば教えてください。
0334デフォルトの名無しさんNGNG
>>330
エレガントに書け!

while(*s=~*s++);
0335デフォルトの名無しさんNGNG
>>330
正解!!
int i;
が無いけど。
0336デフォルトの名無しさんNGNG
strstrのこと?
0337デフォルトの名無しさんNGNG
>>333
index
0338323NGNG
>>333
strstr(3)
0339デフォルトの名無しさんNGNG
>331
あ、漏れもそういうコードよく見るよ。
0340デフォルトの名無しさんNGNG
>>334
ネタ?だよね?
0341デフォルトの名無しさんNGNG
>>334
物凄い勢いで2箇所ほど突っ込み鯛。
0342333NGNG
ありがとうございます。
やってみます。
0343334NGNG
>>341
おれも書いた瞬間に感じたよ。 やっちゃったって感じさ。
0344323NGNG
>>337
それなに?
0345327NGNG
漏れの質問は放置かゴルア!
0346デフォルトの名無しさんNGNG
>>345 放置です。
0347デフォルトの名無しさんNGNG
>>345
かっこつけずに手続きをきちんと書き直してみなよ
0348C初心者NGNG
>>225 面白そうなのでちょっとやってみたっす。それ以前に、まだ、このスレみてますか?
struct suji {
char tmpbox[512]; double suji[64];
} box={ {0x00}, {0} };
int dblsave( struct suji *TpData, const unsigned char *rec, const char *kugiri )
{
    int i, s, c;
    for( i=s=c=0; *(rec+i)!=0x00; ){
        if( 0x30<=(int)*(rec+i)&&(int)*(rec+i)<=0x39 )
            *(TpData->tmpbox+s++)=*(rec+i++);
        else if( memcmp("0", rec+i, 2)<=0 && memcmp(rec+i, "9", 2)<=0 ){
            *(TpData->tmpbox+s++)=*(rec+i+1)-0x1f; i+=2;
        }
        else if( !memcmp(rec+i, kugiri, strlen(kugiri))){
            TpData->suji[c]=atof(TpData->tmpbox); c++; s=0; i+=strlen(kugiri);
            memset(TpData->tmpbox, '\0', sizeof(TpData->tmpbox));
        }
        else return (-1);
    }
    if( !*(TpData->tmpbox) ) c--;
    else    TpData->suji[c]=atof(TpData->tmpbox);
    return (c);
}
void main( void )
{
    int i,c; char test[256]={"123|123|"}; /* 7c を tab に変換してテストしてチョ */
    if(-1==(i=dblsave( &box, test, "|" ))) exit(1); /* "|" を "\t" に変更 */
    for( c=0; c<=i; c++ )  printf( "%lf\n", box.suji[c] );
}
0349327NGNG
>>347
どういう意味でしょうか。
0350デフォルトの名無しさんNGNG
>>349
きちんと分解してロジックを見直せばわかるよ、ということ。
練習だと思ってやってごらん
0351デフォルトの名無しさんNGNG
C言語ってポインタが使えるからいいなあ。
0352デフォルトの名無しさんNGNG
printfで、 \ から始まる特殊文字の一覧ってどこにあるんすか?
0353327NGNG
>>350
うむむ。分解するとますます分からなくなりますた。
  if(s) {
    p = s + strlen(s);
    p--;
    while(p >= s) {
      n <<= 1;
      n += *p;
      p--;
    }
  }
0354デフォルトの名無しさんNGNG
>>352
> printfで、 \ から始まる特殊文字
??
0355352NGNG
>>354
\n とか \r とか、その辺の一覧
0356デフォルトの名無しさんNGNG
あまり詳しくなくてよくわからんのですが、
>>334は
int i = 0;
while(~(TempString[i] = ~TempString[i++]));
TempString[i] = '\0';
return TempString;

こんな感じならいいの?
0357デフォルトの名無しさんNGNG
>>356
n=n++; がおもっくそ未定義だったんだよウワァン
0358デフォルトの名無しさんNGNG
>>353
どこも間違ってないです
0359デフォルトの名無しさんNGNG
>>357
何か勘違いしてると思うよ。
0360359NGNG
あ、いや俺の勘違いか。スマソ。
0361356NGNG
334の俺の解釈は下記ですがOK?
・ポインタが進んでしまう
・'\0'が反転されてwhileの判定がおかしくなる
・最後の'\0'が0xFFになってしまう
0362デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c3.html#0
0363356NGNG
>>362
ということは359もダメということですね。
0364デフォルトの名無しさんNGNG
>>355
その辺の文字はprintfにおいて特別な意味はありません。
0365デフォルトの名無しさんNGNG
>>361
25点

・ポインタが進んでしまうのは間違いじゃない
・\0が反転されておかしくなる
・だから、上のと同じことだ

あとは後方演算子++の挙動がこの場合未定義だっつーことで
0366デフォルトの名無しさんNGNG
>>364
言い方が悪かった。

といってもなんと言えばいいかうまく言えないけど
\r とか
0367356NGNG
>>363 訂正
ということは356もダメということですね
0368デフォルトの名無しさんNGNG
> ということは356もダメということですね
だね。
0369356NGNG
一応、356を修正しておきます。
int i = 0;
while(~(TempString[i] = ~TempString[i])) i++;
TempString[i] = '\0';
return TempString;
0370デフォルトの名無しさんNGNG
渡した文字列を反転って、ビット反転じゃなくて順番を入れ替えろってことじゃなかろうか。
0xFF が 0 になっちまうし
0371デフォルトの名無しさんNGNG
>>370
漏れもそう思った。
0372デフォルトの名無しさんNGNG
そりゃそうだろ
0373デフォルトの名無しさんNGNG
>>370
ネタから派生した疑問ということで、、
0374デフォルトの名無しさんNGNG
>>369
fuge(char *s){
char *d=s;
while(*s){*s=~*s;s++;}
return d;
}
こうしなきゃならんかったわけだね
0375デフォルトの名無しさんNGNG
プログラム中でLinuxのコマンド(cpとかrouteとか)を呼び出したいのですが、
どうしたらいいのでしょうか?
0376デフォルトの名無しさんNGNG
>>374
たしか、参照型とポインタ型で、この char *d を省くことができたような。
よく覚えてないから誰かフォローして
0377デフォルトの名無しさんNGNG
>>375
system("ls");
0378デフォルトの名無しさんNGNG
000
001
 ・
 ・
100
という風にファイルに3桁の番号を順番に書き込みたいのですが
fprintf(fp,"%3d\n",i);
では上の桁の0が追加されません
どうすれば上のように3桁で書けますか?
0379デフォルトの名無しさんNGNG
>>375
呼ぶな || perl使え || system(3) || popen(3) || die
0380デフォルトの名無しさんNGNG
>>378
%03d
0381デフォルトの名無しさんNGNG
%03d
0382デフォルトの名無しさんNGNG
*s=~*s;
と
*s^=0xFF;
ってどっちが速そう?
0383378NGNG
できました。ありがとうございました。
ここのスレってsage推奨のようですね・・あげてしまってすみませんでした。
0384デフォルトの名無しさんNGNG
>>382
出来の悪いコンパイラでなければどっちも同じになる。
0385デフォルトの名無しさんNGNG
>>382
fuge(char *s){
char *d=s;
while(~(*s++^=~0));
return d;
}
って感じ? 動くんかな
0386デフォルトの名無しさんNGNG
>>376
そんなもの省いてもメリットなし。
値を返さない関数にしてもいいわけだし。
0387デフォルトの名無しさんNGNG
>>386
一応、お題的にポインタをそのまま返して欲しそうだったから。
0388デフォルトの名無しさんNGNG
>>383
質問はageてもらわないと困る
0389デフォルトの名無しさんNGNG
>>382
同じくなるのか・・・コンパイラの最適化ってすごいな。
0390デフォルトの名無しさんNGNG
なんで&&と||はあるのに^^はないの?
0391デフォルトの名無しさんNGNG
>>390
必要ないから
0392デフォルトの名無しさんNGNG
>>390
元に戻るからじゃん?
0393デフォルトの名無しさんNGNG
>>390
^ひとつで十分だからじゃない?
(a=b)^(c=d)
0394デフォルトの名無しさんNGNG
>>392
>>390の言う^^って、多分どちらかの式が真のときのみ真となる演算子という意味だと思うぞ。
0395デフォルトの名無しさんNGNG
^^ は !!(a) ^ !!(b) という意味だと思う
滅多に使わないが、有っても良かったかな

0396386NGNG
>>387
だったら少なくとも変数(仮引数含む)が2つは必要だね。
0397デフォルトの名無しさんNGNG
じゃあ>>385で完成だ
0398C初心者NGNG
>>323 [Q1]ならできそうなのでやってみたっす。
[Q2]はちょっと... 一応2byte文字対策も前提で作成してみました。
文字列の反転 EX)あいうえお -> おえういあ みたいな感じでいいのですか?
void *fuga( void *buf, const void *rec )
{
    int i;
    int c;
    int l=strlen((char *)rec);

    *((char *)buf+l)=0x00;
    for( i=c=0; *((char *)rec+i)!=0x00; i+=c,l-=c )
    {
        if((0x81<=(int)*((unsigned char *)rec+i)&&(int)*((unsigned char *)rec+i)<=0x9f)
        || (0xe0<=(int)*((unsigned char *)rec+i)&&(int)*((unsigned char *)rec+i)<=0xfc))
            c=2;
            else    c=1;
        memcpy( (char *)buf+l-c, (char *)rec+i, c );
    }
    return ((char *)buf);
}
0399デフォルトの名無しさんNGNG
void厨ウザイ
0400デフォルトの名無しさんNGNG
>>399
どんな厨房だよ(^_^;)
0401デフォルトの名無しさんNGNG
>>398
ナイスボケ!
あとはいいツッコミ役を探さなくては・・・
0402突っ込み厨NGNG
>>398
呼ばれたので
"あaいbうcえdおe"こんなのは?
もんだに前提が無いのでEUCとか全ての文字コードに対応しよう。
0403デフォルトの名無しさんNGNG
>>327 も未定義。
0404デフォルトの名無しさんNGNG
というネタだったんだろな。
0405出題者NGNG
もしマルチバイト文字に対応するなら、wchar_t型の文字列に変換できる
エンコーディングのみに対応でいいよ。>>398

#と、難しくしてみるテスト
0406デフォルトの名無しさんNGNG
Shift_JISなら
if ( ch^0x20-0xA1&0xFF<0x3C )
でマルチバイトらしい
0407名無し募集中。。。NGNG
>>323の問題ってどちらもK&Rに載ってる香具師だな
0408出題者NGNG
あ、そうなん?
即席なんだけど。
0409デフォルトの名無しさんNGNG
327のしたいことがよくわからないのです
0410デフォルトの名無しさんNGNG
被K&R洗脳厨ウザイ
0411406NGNG
演算子の優先順位考慮すんの忘れてた・・・まあいいか
0412デフォルトの名無しさんNGNG
>>409
いや、だから未定義の箇所を探せっていう
ネタじゃないの?
0413デフォルトの名無しさんNGNG
マルチするなよ〜〜(違っ)
0414デフォルトの名無しさんNGNG
>>413
意味わかんね
0415デフォルトの名無しさんNGNG
俺には未定義が見つけられない(´д`;)
0416出題者NGNG
>>415
俺漏れも
0417デフォルトの名無しさんNGNG
未定義箇所は未定義です
0418403NGNG
>>415,416

この部分 ↓
> while(--p >= s)
0419デフォルトの名無しさんNGNG
だめなん?なんでだめなん?
0420403NGNG
>>419
これでどう?
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa3.html#Q19
0421デフォルトの名無しさんNGNG
>>420
へえ
勉強になりますた。

それで暴走する処理系があったら紹介きぼん。遣って見たい

0422デフォルトの名無しさんNGNG
しまった、気づかなかった
p が s の前に行った瞬間に未定義か・・・
0423デフォルトの名無しさんNGNG
>>418
そこゼンゼン問題ないよ。
p >= s の評価前に p をデクリメントするから。
ちなみに、もし仮にここが
p-- >= s であったとしても未定義ではない。(ロジックはでたらめになるけど)
なぜなら、デクリメントはwhileの式評価のあとに直ちに行われるから
( {}のあととか、そういうことは決してない。 for文の挙動を思い出そう )
0424デフォルトの名無しさんNGNG
やっぱり駄目だな、C言語は。
という結論。
0425デフォルトの名無しさんNGNG
>>423
多分君はとても阿呆
0426デフォルトの名無しさんNGNG
>>422
問題ないよ
アドレスの比較であってアドレスの指し示す中身を取り出してるわけじゃないしね
0427デフォルトの名無しさんNGNG
アドレスの比較すら駄目な罠
0428デフォルトの名無しさんNGNG
フレームになる前にさっさと誰か規格の英文引用汁!

0429デフォルトの名無しさんNGNG
アドレスの比較=単なる数値比較 だけど
それでもダメな理由はなんだろう・・・
0430デフォルトの名無しさんNGNG
>429
駄目になっても文句が言えないだけで駄目な処理系なんてないだろ
0431デフォルトの名無しさんNGNG
アドレスが連続しているとは限らない
0432デフォルトの名無しさんNGNG
アドレスが単なる直列な数値とは限らないからでわ
0433デフォルトの名無しさんNGNG
>>430
>駄目になっても文句が言えない
ここがおかしいと思う。「文句が言えない」という理由がないよね。
0434デフォルトの名無しさんNGNG
C++だとどうなんだろう。ポインタ演算なんてまずしないけど
ちょっと気になるな。同じくIS引用希望。
0435403NGNG
>>423
> p >= s の評価前に p をデクリメントするから。

そうなの?
評価前にデクリメントするから問題なんじゃないの?

ループを終了するには p < s になる必要があるよね。
sより小さくなったpを比較に使った時点でアウトなんじゃない?
0436デフォルトの名無しさんNGNG
432が妥当 >>433
0437デフォルトの名無しさんNGNG
>>431
ああ、そういうこと言いたかったのね。
しかし、この場合はそれでも問題ないと思うよ。
0438403NGNG
>>432
俺もそう思う。
0439デフォルトの名無しさんNGNG
>>437
>しかし、この場合はそれでも問題ないと思うよ
何故?小一時間。
0440323NGNG
sのアドレスが0x0でかつNULLとは!=であったならどうだろうか?
と言ってみるテスト
0441デフォルトの名無しさんNGNG
アドレスが連続空間にないという前提だと、
char *t=hoge[256];
このtをインクリメントしていったときにもtは不連続に変化する、ということにならない?
配列でとった部分は連続なんだっけ?
--t は、やっぱり t-sizeof(char) にならない?
0442デフォルトの名無しさんNGNG
愛しいあの子にコクられる処理系なら漏れも使ってみたい
0443デフォルトの名無しさんNGNG
>>441
char (*t)[256]; のtなら256バイト毎に変化するかも。
0444デフォルトの名無しさんNGNG
>>440
あーそれかー。 それなら、えーと
(--p >= s) じゃあなくて (--p-s>=0) であれば問題ないね。
0445デフォルトの名無しさんNGNG
>>432 この理由なら
下記がいいという説明がつかない。
while (head + 1 < tail) { /* +1は、なくても動作する */
一応、ルーチンの先頭で型定義してるので、
連続して無くても問題ないのでは?

未定義なのは別の理由じゃないかな?
0446デフォルトの名無しさんNGNG
未定義厨ウザイ
0447デフォルトの名無しさんNGNG
別の理由は440じゃだめなん?>>445
0448デフォルトの名無しさんNGNG
>>446
C言語なんてもはや頭の体操にしか使えないんだから微笑ましいじゃねえか。
黙って見守れ。
0449デフォルトの名無しさんNGNG
わたくし、間違っておりました!

--p>=s はダメですね。
配列のアドレスで許容されているポインタ(アドレス)の可動範囲は
hoge[HOGE]なら hoge〜hoge+HOGEまででした! (hoge〜hoge+HOGE-1ではない)

どーもすみませんでした
0450デフォルトの名無しさんNGNG
>>447
sが0x7FFFFF(32Bitアドレスとして)の場合は?
0451440NGNG
駄目だね。ごめんよ。
0452デフォルトの名無しさんNGNG
いや、とにかくポインタってのは規格の上では
整数値と同等に考えちゃだめなのよ。
 char *p;
この pが有効なオブジェクトの範囲を指していない場合は
 p++;
を実行した後のpの値は予測できない ってことでどうよ?
0453デフォルトの名無しさんNGNG
>>444
同一の配列を指していないポインタ同士の減算は未定義なので、
結局同じこと。
0454デフォルトの名無しさんNGNG
>>452
それはOKだって。
なんでそういう規格にしたんだろう?ってのが話題。
0455デフォルトの名無しさんNGNG
たとえば処理系によってはポインタの上位16バイトでさしている配列のID
下位16バイトで配列内でのオフセット
とかなってるかもしれない

ptr<Tail
は仕様によって保障されているから、内部表現に関わらずOKだけど
ptr>=Head
はこういう処理系では誤作動するよね
0456デフォルトの名無しさんNGNG
>>452
規約では+1までは移動だけは許可されておりますです!
さらにそのポインタの指すものも取り出せるであります!
しかし、そのときの取り出したもの(*p)の中身はぐちゃぐちゃであります!
0457デフォルトの名無しさんNGNG
なぜ
> (hoge〜hoge+HOGE-1ではない)
なんだろう。
0458452NGNG
>>454
ごめんなさい。逝ってきます。
0459デフォルトの名無しさんNGNG
>>457
>>456であります!
0460デフォルトの名無しさんNGNG
>>458
うんうん。ガス管でな。

0461デフォルトの名無しさんNGNG
>>454
カニチャーハンにその辺ちょっぴり載ってた。
C-FAQにも出てたよ
0462452NGNG
>>456
ごめんなさい。逝きます。
0463デフォルトの名無しさんNGNG
>カニチャーハン
微藁
0464デフォルトの名無しさんNGNG
>>454
典型的な例がx86のfarポインタ。
規格を決めた当時、最も使われていたアーキテクチャを無視することは
できなかったのでは?
0465デフォルトの名無しさんNGNG
>>420
どうでもいいことなんだけど、そのint len;ってなんのために定義しているんだろう。
0466デフォルトの名無しさんNGNG
>>464
感動した!!
0467デフォルトの名無しさんNGNG
>>457
char s[100];
char *end = &s[100];
while ( p != end ) ++p ;
を動かすためだろ、C++やるとこんなのがそこら中で出てくる。
0468デフォルトの名無しさんNGNG
C++でも一緒ですか?
0469452NGNG
>>456
いや、ちょっと待った。
俺が
> 有効なオブジェクトの範囲
と書いたのはそのことだよ。
0470デフォルトの名無しさんNGNG
>>467
出てくるがそれはraw pointerではなくてiteratorなわけで、
同じ枠内で議論するには無理があるのでは..?
0471デフォルトの名無しさんNGNG
char *strrev(char *str)
{
char *head,*tail;
int c;

head=str;
tail=s+strlen(str)-1;

for(;head<tail;head++,tail--)
c=*head,*head=*tail,*tail=c;

return str;
}


これならOK?
俺ならこう書くけど。
0472467NGNG
すみません
p 宣言するの忘れました。

オマエラいい加減寝ろよ、明日から仕事あるんだろ。
漏れはもう寝る。
乙〜
0473デフォルトの名無しさんNGNG
>>470
禿同

実際には>>467みたいなのは出てこなくて
std::vector<char>::const_iterator p = v.begin();
while( p != v.end() ) { /* hoge */ p++; }
なわけだが。

0474467NGNG
>>470
一応、ポインタもお終いの一個先まで保証されている。
それと、vector のイテレータは殆どの実装で生ポインタの
typedef だからそんなに的外れという訳じゃないと思うが、
0475デフォルトの名無しさんNGNG
>>474
またMSだが、VS7のSTLはちゃうね。
0476デフォルトの名無しさんNGNG
任意の型のポインタはランダムアクセスイテレータに分類されまする

と手元の STL 本にはあります
だから桶でしょう
0477デフォルトの名無しさんNGNG
すれ違い
0478デフォルトの名無しさんNGNG
>>468
ISO/IEC 14882 によれば、
> If both the pointer operand and the result point to elements of the
> same array object, or one past the element of the array object, the
> evaluation shall not produce an overflow; otherwise, the behavior
> is undefined.
らしいので、一緒のようだ。
0479デフォルトの名無しさんNGNG
じゃぁやめとこう。そして寝よう。
0480デフォルトの名無しさんNGNG
>>471
だめっぽい。
sとはなんだ?
0481デフォルトの名無しさんNGNG
>>478
どうもありがとうございます。
0482デフォルトの名無しさんNGNG
>>480
あ、、、そこだけ修正し忘れました。sはstrです。
手元で書いた時はsにしたんで。
0483デフォルトの名無しさんNGNG
結論はネタがみんなの役に立ちましたと。
好きなあの娘にコクられまくってましたと。
アホかと。

0484デフォルトの名無しさんNGNG
>>482
ようは
char* str="";
のときに、str+1は比較に使ってもよいが、
str-1は比較に使ってはだめだということ。
だと思う、、、、
0485482NGNG
>>484
あーなるほど。
それでメモリーが連続しているとは限らないと誰かが言っていたのか。
ありがと
0486デフォルトの名無しさんNGNG
>>484
誰に解説しているの……?
0487デフォルトの名無しさんNGNG
>>486
>誰に解説しているの……?
>>471 = >>482
0488482NGNG
ん?まてよ・・・そうすると>>471でもまずいような気が・・・・
↓こうするか・・・

char *strrev(char *str)
{
char *head,*tail;
int c;
size_t len;

len=strlen(str);
if(len<=1)
return str;
head=str;
tail=str+len-1;

for(;head<tail;head++,tail--)
c=*head,*head=*tail,*tail=c;

return str;
}
0489デフォルトの名無しさんNGNG
>>488
よさげ。
0490デフォルトの名無しさんNGNG
printf等でよく使う、\r とか\nとかの
完全な一覧表ってどこかにあるんでしょうか?
0491デフォルトの名無しさんNGNG
エスケープ厨ウザイ
0492デフォルトの名無しさんNGNG
>>490
ま た お な じ し つ も ん か 。
0493デフォルトの名無しさんNGNG
ウザイ厨ウザイ
0494デフォルトの名無しさんNGNG
>>490
入門書とかじゃダメなの?
0495デフォルトの名無しさんNGNG
>>490
どこかにはあります。
以上。
0496490NGNG
>>494
不完全なのしか載ってないんだ
\0と\nくらいしかない

>>492
流されちゃったからね
0497デフォルトの名無しさんNGNG
>>490
abfnrtvだ。さっさと帰れ。
0498デフォルトの名無しさんNGNG
490=82=16
と推測しますた。
0499デフォルトの名無しさんNGNG
>>496
立ち読みしてから載ってるのを買ってくればいいじゃん。
0500デフォルトの名無しさんNGNG
>>490
> printf等でよく使う
とか言ってる段階では、完全なものは必要ないのでは?
0501デフォルトの名無しさんNGNG
>>497
よくわかんない
0502デフォルトの名無しさんNGNG
>>501
完全な一覧表だが、見て分からないのか?
0503デフォルトの名無しさんNGNG
>>502
うん
0504デフォルトの名無しさんNGNG
じゃあ何読んでも分からないな
0505デフォルトの名無しさんNGNG
>>490
「エスケープシーケンス」で検索した?
4,000件以上ヒットするよ。
0506デフォルトの名無しさんNGNG
>>490
ttp://crocro.com/pc/write/hide/chimarl09_01.html#06
こんなところはどうだ?
0507デフォルトの名無しさんNGNG
わかんなかった
0508デフォルトの名無しさんNGNG
こっちは?
ttp://www.uri.sakura.ne.jp/~cosmic/yuno/develop/notes/regex_3escape.html
0509デフォルトの名無しさんNGNG
二次元配列をポインタに代入したいのですが,うまくできません。

char L_box[20][30];
char *P_box[20][30];

P_box=L_box;

どのようにすればいいのでしょうか?
0510デフォルトの名無しさんNGNG
いったい何がやりたいんだ?
まずそれを明確にしろ。
0511デフォルトの名無しさんNGNG
L_Boxをポインタ変数に代入して使いたいんです
0512デフォルトの名無しさんNGNG
FAQですよ>2次元配列とポインタ
0513デフォルトの名無しさんNGNG
>>6のですか?
見てみます
0514デフォルトの名無しさんNGNG
わからなかったです

void func(char a[][30]);

のように関数に渡すのはわかるんですが,
同関数ないで,

2次元配列を宣言
�@ポインタ変数を宣言
�Aポインタ変数にアドレスを渡す

の�@の宣言の仕方がよくわかりません。
�Aの右辺と左辺,両方の形もよくわかりません
0515デフォルトの名無しさんNGNG
>もし2次元配列を以下の関数に渡すと
>int array[NROWS][NCOLUMNS]; f(array);
>関数の宣言は以下のどちらかでないといけない。
>f(int a[][NCOLUMNS]) { ... }
>あるいは
>f(int (*ap)[NCOLUMNS]) /* apは配列へのポインター */ { ... }
0516デフォルトの名無しさんNGNG
char L_box[68][51];
char *box[51];

box = &L_box[51];

error C2440: '=' : 'char (*)[51]' から 'char *[51]' に変換することはできません。

どうすれば・・・?
0517デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c6.html#13
0518デフォルトの名無しさんNGNG
char (*box)[51];


できました

>>515
まじでありがとう
お詫びに今日ごみ一個拾うことにするよ
0519デフォルトの名無しさんNGNG
>>505
正確には「エスケープシーケンス」という呼称はあてはまらないんですよね。
0520505NGNG
>>519
よく知らない。
0521デフォルトの名無しさんNGNG
一文字では「シーケンス」ではないからな
0522等幅フォントで見れNGNG
・エスケープシーケンス

\a     BEL: ベル                        \\      \: バックスラッシュ
\b      BS: バックスペース              \?      ?: 疑問符
\f      FF: 改頁                        \'      ': 単一引用符
\n      LF: 改行                        \"      ": 二重引用符
\r      CR: 復帰
\t      HT: 水平タブ                    \ooo     8 進数(o=[0-7])
\v      VT: 垂直タブ                    \xhh    16 進数(h=[0-9a-fA-F])

・演算子の優先順位と結合規則
本文長すぎの為省略
0523デフォルトの名無しさんNGNG
>>522
それで全部かい?
0524デフォルトの名無しさんNGNG
0.0fや0L(ゼロ、エル)はわかるんですが
0U(ゼロ、ユー)は何ですか?
あと、他にも直打ち数値のサフィックスってあるんでしょうか?
0525デフォルトの名無しさんNGNG
>523
\o=ママ バックドロップ
0526デフォルトの名無しさんNGNG
見える見える
0527デフォルトの名無しさんNGNG
>>519
エスケープシーケンスでいい。
コンソールを制御する記号列もまた、エスケープシーケンス。
区別したければ「Cの」とか「ANSI端末の」とかつけれ
0528デフォルトの名無しさんNGNG
>>527
> 区別したければ「Cの」とか「ANSI端末の」とかつけれ

「プリンタの」も忘れないでね。
0529デフォルトの名無しさんNGNG
char *a="こんにちわ",*b;
scanf("%s",&b);
if(a==b)
printf("正解です\n");
else
printf("違います\n");
}
エラーは出ないけどできません・・・
なぜですか?
0530デフォルトの名無しさんNGNG
>>529
入力された文字列が何処へ格納されるか考えてみたかい?
0531デフォルトの名無しさんNGNG
・bが未初期化でメモリが割り当てられてない。
・比較の方法
0532デフォルトの名無しさんNGNG
>>529
> エラーは出ないけどできません・・・
> なぜですか?

間違ってるからです。strcmp() あたりを調べるがよろし。
0533デフォルトの名無しさんNGNG
あと、scanfのパラメータが・・・
0534デフォルトの名無しさんNGNG
>>533
> あと、scanfのパラメータが・・・

それ以前に、b の初期値が...。
0535デフォルトの名無しさんNGNG
524 にでてるんだけど, 0.0f や 0L のようにサフィックスを
付けなければいけない状況ってどんなときですか ?
0536デフォルトの名無しさんNGNG
>>535
型あわせだろ。
0537デフォルトの名無しさんNGNG
直打ち小数演算はdoubleとして扱われるので
float a = 1.0f/0.3f;
とか
0538デフォルトの名無しさんNGNG
float a = (float)1.0/0.3;
0539デフォルトの名無しさんNGNG
>>538
> float a = (float)1.0/0.3;

>>537 でいいんだから、キャストはやめようよ。
0540デフォルトの名無しさんNGNG
あれ ?, 537 と 538 って同じなんだ.
勉強不足だ, 俺 ...
0541デフォルトの名無しさんNGNG
流れ読めてねーよ
0542デフォルトの名無しさんNGNG
float a = 1/0.3;
じゃダメなの?
0543デフォルトの名無しさんNGNG
で、>524がわかる方はいらっしゃいませんのでしょうか?
0544デフォルトの名無しさんNGNG
U:Unsignedでいかんか?
0545デフォルトの名無しさんNGNG
>>524
標準だと他にLLがある。VCの拡張ならi64というのも。
0546デフォルトの名無しさんNGNG
>>543
わからんのならキャストでもしとけ。
0547デフォルトの名無しさんNGNG
>546
すいません、おっしゃっている意味が全くわかりません
0U(ゼロ、ユー)がコンパイラ(あるいはプリプロセッサ)に
どう解釈されるのか知りたいだけなのですが?

そもそもキャストとかいうC言語の汚点を隠すために
サフィックスが使われているんじゃないんですか?
0548デフォルトの名無しさんNGNG
>>547 unsigned の Uっしょ。
0549デフォルトの名無しさんNGNG
>>547
> そもそもキャストとかいうC言語の汚点を隠すために
> サフィックスが使われているんじゃないんですか?

んじゃ、((void*)0) を数値定数で表現してみろ
0550デフォルトの名無しさんNGNG
先生!スレタイトルの(33)ってのは年齢のことですか?
0551デフォルトの名無しさんNGNG
>549
キャストを使うなって言ってるんじゃなくて
使わなくて良い所で不用意に使うなって意味なんですが・・・

これだから年寄りは・・・
0552デフォルトの名無しさんNGNG
−−−−−−−−−−−−−−−−−−−−−−−−−−
俺様用しおり
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< 読んだ読んだ読んだ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< 読んだ読んだ読んだ読んだ!
読んだ〜〜〜〜!   >( ゚∀゚ )/ |    / \____________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
                    ̄
−−−−−−−−−−−−−−−−−−−−−−−−−−
0553デフォルトの名無しさんNGNG
何だ、ただの釣り師かよ・・ツマラン
0554デフォルトの名無しさんNGNG
>>先生!スレタイトルの(33)ってのは年齢のことですか?
スレが33枚目(32000以上レスがついた)ってこと。
0555デフォルトの名無しさんNGNG
>>551
> キャストを使うなって言ってるんじゃなくて
勝手に勘違いすんな。

> キャストとかいうC言語の汚点を隠すために
> サフィックスが使われている
と言うのならなんでポインタ等のサフィックスが無いのか?
という意味なんだが。
検索エンジンで探すことすらしない厨房の頭じゃ理解不能か。
0556555NGNG
あ、555ごっと!
0557デフォルトの名無しさんNGNG
524=490=352  =スレ立てるまでもない質問スレの820
と断定しますた。
0558デフォルトの名無しさんNGNG
だいたい、ポインタに即値を代入するのは
ほとんどがヌルポインタだけだと思うが、、、
0559555NGNG
>>558
あ、確かにそうだわな。
0560デフォルトの名無しさんNGNG
検索しなかったのは悪いと思うし
後半のレスが無意味だった事も認めるけど
「0Uってどう解釈されるの?他にもサフィックスてあるの?」って問いに
いきなり「キャスト使え」って答えられても困ります

「普通に数値書いただけだと警告がでてしまうので云々」て質問に対してならわかるけど
0561デフォルトの名無しさんNGNG
>>554
ありがとうございます!!
漏れの脳内では33歳の女性教師が眼鏡とストッキングを着用の上教えてくれるスレ
だとばかり思い込んでしまっていたので真実が知れて胸をなでおろしています
これからはマジメにC言語にハァハァしますので今後ともお見捨てなきようおながいします
0562デフォルトの名無しさんNGNG
>557
ちがいます

てか、490=352=スレ立てるまでもない質問スレの820
まではあってると思うけど
0563555NGNG
>>560
それは俺に対して言ってんのか? >>546に言えよ。

答えは上で出てるけど、
数値の型を表すためにサフィックスで使われる文字は
L long (or long double)
U unsigned
F float
合わせ技もあり。
あとはそれぞれの処理系定義かな。あまり自信はないけど。
0564555NGNG
↑C99ではどうなのか知らんよ。
0565546NGNG
>>560
> いきなり「キャスト使え」って答えられても困ります

いきなり検索等もせずに質問して、しかも回答されてるのを
無視してたヤツに言う権利はない。キャストでも使っとけ。
0566デフォルトの名無しさんNGNG
たまに>>560みたいな勘違い坊やが出てくるけど
まあ生暖かく見守ってやろうぜ。
0567 NGNG
毎スレ 毎スレ スレ立て人の歳が違うじゃないか!
男か女か!

自分の歳も性別もわからんのか このぼけどもが!!!
0568デフォルトの名無しさんNGNG
ランダムな数値の入っている配列全てに、
1度に定数を加えるってことは可能?(int型です)
n[]={5,9,4,7,22,6,10};
*n+=20;  これで出来ないような気がするのです。
結果25,29,24,27,42,26,30になるような。
0569デフォルトの名無しさんNGNG
>>568
> ランダムな数値の入っている配列全てに、
> 1度に定数を加えるってことは可能?
無理です、そういう関数を作るかループを使ってください。

> *n += 20;
先頭の要素だけが加算され、残りはそのままです。
結果25,9,4,7,22,6,10};
0570デフォルトの名無しさんNGNG
16進数を10進数に変換するにはどうしたらいいでしょうか?
0571デフォルトの名無しさんNGNG
>>569
ありがとうございます
0572デフォルトの名無しさんNGNG
16進数の各桁に、16のn乗を掛け加えて行く。
0573デフォルトの名無しさんNGNG
>>568
char にして MMX で一気に処理しる
0574デフォルトの名無しさんNGNG
>>570
質問の意味がわからないが
16進数文字列を数値に変換する関数ならsscanfという関数がある。
0575570NGNG
>>572
16のE乗とかってあるのですか?
>>574
調べてみます。

あと逆の変換の仕方もわかるかたいますか?
0576デフォルトの名無しさんNGNG
手順としては、A〜Fを10進数に直してから。
0577デフォルトの名無しさんNGNG
>>575
> あと逆の変換の仕方もわかるかたいますか?
やっぱり質問の意味が良くわからないのだが、
数値を10進数文字列に変換する関数ならsprintfという関数がある。
0578デフォルトの名無しさんNGNG
「進数変換」で検索したら?
10進数を16で割っていき、余りを逆順にならべるで出来なかった?
0579570NGNG
えっと、printfやscanfを使わずに変換する方法を知りたいのですが、
質問の意味わかっていただけましたか?
0580デフォルトの名無しさんNGNG
わかるやつはサイコメトラー
0581570NGNG
>>578
15を16で割ったらあまり15ですけど・・・
0582うんっちっち君NGNG
プログラマ(SE?)で内定ということで
いままで独学で無茶苦茶やってきたプログラムを正しく勉強しなおしているのですが、
まあいままではVCでゲーム作ってばっかりだったので
じつは基本のCが理解できてなかったりします。とくに演算系。

で知らないものがいくつかでてきました。
printf("ああ\n")=puts("ああ")
scanfのかわりのgets、これはもう絶滅した使わないものととらえていいのでしょうか。
if文と同じ処理なんだけど a?b:c ってやつです。
これら3つって使うことあるのでしょうか?
ぜんぶprinf,scanf,ifで済ましたほうが文面的には長くなるけど
のちのち解読しやすいと思うのですが。
しかもコンパイルした時点でどうせおなじ処理なので重さとか処理速度には
関係しませんよね。?
0583デフォルトの名無しさんNGNG
>>579
> 質問の意味わかっていただけましたか?
わからない。
>16進数を10進数に変換するにはどうしたらいいでしょうか?
16進数とは「数値」なのか?「文字」なのか?
10進数とは「数値」なのか?「文字」なのか?
数値→数値は意味がないし、
文字→数値ならばsscanfがあるし、
数値→文字ならばsprintfがあるし、
文字→文字ならばCでは非常に面倒で私には答えかねる
0584 NGNG
>>582
仕事として やってくならば、リストの解読のしやすさに
重点を置いたほうがいいな。

自分が作ったソースを 他人が 見て修正するなんてことは しょっちゅうだからな。
0585デフォルトの名無しさんNGNG
0xFBA = 15 * 16^2 + 11 * 16^1 + 10 * 16^0
0586デフォルトの名無しさんNGNG
>>581
Cライブラリのソース嫁
0587デフォルトの名無しさんNGNG
>>582
> scanfのかわりのgets、これはもう絶滅した使わないものととらえていいのでしょうか。
使うならfgetsを使え

> if文と同じ処理なんだけど a?b:c ってやつです。
> これら3つって使うことあるのでしょうか?
プログラムを書くためには必要ないかもしれんが、
プログラムを読むためには必要なものだ。
他人のソースを読んでメンテするのもプログラマの仕事の1つだ。
0588デフォルトの名無しさんNGNG
>582
てか、三項演算は使うぞ
1ステートメントしか入れられない場所で
どうしても条件分岐が必要な事はある
0589デフォルトの名無しさんNGNG
>>583
文字→数値→文字とやるのが楽。
0590デフォルトの名無しさんNGNG
>>582
printf("ああ\n") と puts("ああ") とでは前者の方が遅いぞ。
といってもこの程度だと大した差ではないが。
0591デフォルトの名無しさんNGNG
「printf("ああ\n");」VS「printf("%s", "ああ\n");」だとどうなるのか?

と言ってみるテスト
0592デフォルトの名無しさんNGNG
後者が遅い













のか?
0593デフォルトの名無しさんNGNG
>>588
printf("iは%sの数です。\n",i<0?"負":"正");

こんなのとか?
0594デフォルトの名無しさんNGNG
printf("iは%sの数です。\n",&"負\0正"[(i<0)*3]);

トリッキースレ逝きだな、、、
0595デフォルトの名無しさんNGNG
>>594
printf("iは%sの数です。\n","負\0正"+((i<0)*3));
せめてこう書こうよ(笑)
0596595NGNG
printf("iは%sの数です。\n","正\0負"+((i<0)*3));

こうだな。間違った。
0597デフォルトの名無しさんNGNG
いや、こうしようよ。

printf("iは%sの数です。\n",&(sgn(i)*3["負\0正"]));

むかついて会社辞めるときはこんな感じのソース残して辞めると吉。
0598デフォルトの名無しさんNGNG
>>592
スタックの積み下ろしがあるからねぇ
0599デフォルトの名無しさんNGNG
速度なんか大して変わらないからいいんじゃないか?
printf(引数で受け取ったポインタ)とかにさえしてなきゃ。
0600デフォルトの名無しさんNGNG
>>599
理解を深める
これ大事
アスパラ アスパラ
不法滞在
これは禁止
0601デフォルトの名無しさんNGNG
柴田望洋の本は読みにくくて学習に時間がかかる。
0602デフォルトの名無しさんNGNG
ぼーよーの標準関数一覧は便利だったけど、今はlinux.or.jpのJM使っているからいらない。
0603デフォルトの名無しさんNGNG
>>597
sgn()って標準関数?
0604デフォルトの名無しさんNGNG
>>603
うえの方に
#define sgn(x) ((x)>=0)
と書かれています。
0605デフォルトの名無しさんNGNG
const char *s[] = { "aa", "bb", "cc" };
const char *s2[] = { "AA", "BB", "CC", "DD" };
const char *s3[] = { s, s2 };

これでエラーがでるんですけど...どうしてですか?
0606デフォルトの名無しさんNGNG
引数で渡した文字列を十六進数で
ファイルに書きこみたいんですけど
どーすれば(・∀・)イイ?
0607デフォルトの名無しさんNGNG
>>606
ファイルを開いてfprintfだね。
0608デフォルトの名無しさんNGNG
const char **s3[] = { s, s2 };
型が違うから
0609デフォルトの名無しさんNGNG
配列の配列だからね
0610デフォルトの名無しさんNGNG
>>606
さっきから何を言っているのかサパーリ。
16進数の文字列でファイルに書きたいの?
0611デフォルトの名無しさんNGNG
10進とか16進とか言ってるヤツはネタだろ。
0612デフォルトの名無しさんNGNG
ビット演算子と代入演算子だけでCプログラミングは出来ますか?
一度やってみたことはやったのですが構造化で挫折しますた
0613デフォルトの名無しさんNGNG
>>612
よく意味がわからんが、ビット演算と代入演算以外の演算子の使用を禁じるってこと?
というか先生! += は代入演算子に入りますか?
0614デフォルトの名無しさんNGNG
>>613
+とかついてたらだめです。使っていいのは(&|~^=)
で、漏れは関数呼び出し、条件制御が出来なくて挫折しますた
つーか、できたのは足し算関数(論理回路で言う加算器)ぐらいだけど
0615デフォルトの名無しさんNGNG
どなたか>>276教えてください。お願いします。
0616デフォルトの名無しさんNGNG
>>615
・デバッガでステップ実行して標準関数の中に入り込む
・grep (VC++なら[ファイルから検索...]とかいうメニュー)
0617デフォルトの名無しさんNGNG
新卒採用で,externとかたくさん使っていたら落ちますか?
0618デフォルトの名無しさんNGNG
全てのソースファイルにインクルードするヘッダファイルで外部変数全部extern汁
0619デフォルトの名無しさんNGNG
>>614
足し算できたのなら引き算は簡単だべ。
0620デフォルトの名無しさんNGNG
>>606
たとえば「2ch」とか放り込んだのが変換されて、
「0x32 0x63 0x68」になればいいってことなのかしらん?
0621デフォルトの名無しさんNGNG
>>619
できたのは自然数の足し算なんですよ
符号ビット調べての足し算もやりましたが所々にバグがちりばめられてます
乗除算はシフト使いたくなりますが・・・
0622デフォルトの名無しさんNGNG
>>570 = >>579 = >>606
全て同一人物とみなしていいのかなぁ?
だとすれば「 "a = 10;" と "a = 0x0A" とは全く同じコードだよ」
とかそういうことが分からないんだろうか?
0623デフォルトの名無しさんNGNG
>>621
俺も自然数のつもりだった。
自然数の足し算ができたとのことなので、
a - b = a + ~(b) + 1
を使えば自然数の引き算は簡単じゃないかという突っ込み。
0624デフォルトの名無しさんNGNG
BCD演算のことを言っているのか?
0625617NGNG
大丈夫みたいね
0626デフォルトの名無しさんNGNG
>>606
void hoge(char *p)
{
 ・・・
 for(;*p!='\0';p++)
  fprintf(fp,"%x",*p);
 ・・・
}
こういうことですか?
0627デフォルトの名無しさんNGNG
>>624
BCD(Binary Coded Decimal,2進化10進数)のこと?
いやそういうわけじゃないけど、、
0628デフォルトの名無しさんNGNG
>>623
2の補数を使うと加算が2回出るじゃないですか
それなら最初からと思うのですが
速度気にするくらいなら普通にしろよ(ワラ
0629デフォルトの名無しさんNGNG
>>628
それでは、、、、
足し算はレスを見る限り
i1(入力1),i2(入力2),ic(キャリー入力)と
o(出力),oc(キャリー出力)のフルアダーを各ビットごとに
構成して実現したんだよね?
同じように減算回路をソースに落とせば?
0630デフォルトの名無しさんNGNG
>>629
例えば5+(−8)とか0をまたぐときにバグバグなんです
条件分岐とかはプログラムカウンタいじらないと無理ですか?
0631デフォルトの名無しさんNGNG
>>630
足し算を629のように作れば5+(-8)も上手くいくはずだよ。
(&|~^=)しか使ちゃだめなら条件分岐に関しては見当もつかない。
0632デフォルトの名無しさんNGNG
おいお前ら、ここ何のスレだ?
いいかげんウザイ。
0633デフォルトの名無しさんNGNG
>>631
そうですかでなおしてきます
れすありがとうございました
0634デフォルトの名無しさんNGNG
>>632
すまん。C言語よりもむしろハードに近い内容になってしまった。
0635632NGNG
いや半分ネタだから気にすんな。言い過ぎたよ。
0636606NGNG
ミナサソ

混乱させてしまい大変申し訳ございませぬ。
ワタクシは>570でも>579でもございません。

ワタクシがやろうとしておりますのは
fprintf ( fp , "%x",argv [2] );
ってことでして。。。
これじゃーargv [2]の先頭アドレスを
16進数でfpに書き込むだけなんですよね?

そこで代替案っちゅーか、なんちゅーか。
とにかく
$hoge.c smp.txt 34567
と、したときにsmp.txtに"34567"が16進数で
書き込まれるプログラムをつくりたいんのです。

ほんと糞厨でごめんなさい。
0637606NGNG
(´Д` )ウワァァン
636禿げしくマチガテルヨ!!

$a.out smp.txt 34567
デスタ・・・

スミマセソ
0638デフォルトの名無しさんNGNG
argv[]をatoiで整数に変換してからfprintf
0639デフォルトの名無しさんNGNG
>>638の argv[] は argv[2] に訂正すます
0640デフォルトの名無しさんNGNG
>>622
×"a = 0x0A"
○"a = \x0A"

>>636
それじゃ16進なんか関係ないじゃん。
「10進数の文字列を数値にしたいんですけど」って聞いとけや
0641デフォルトの名無しさんNGNG
>>640
( ´,_ゝ`) プッ

ネタ?
0642デフォルトの名無しさんNGNG
片思いの彼女に16進数で告白したいのですが
どうすればいいですか?
0643デフォルトの名無しさんNGNG
>>642
コネクションをはってプロトコルを合わせ、文字コードを聞き出したら、喋れ。
内容についてはご自由に。
0644デフォルトの名無しさんNGNG
>>641 ばかだなあ。ネタに決まってんじゃんプププ



・・・
0645デフォルトの名無しさんNGNG
どなたか教えてください。Rt-Linuxでロボットの制御をしているのですが、ある間隔でサンプリングしてくるデータをリアルタイムにプロットするにはどうしたらよいのでしょうか?どこかこういうことが説明してあるURLでも構いませんので教えていただけないでしょうか?
よろしくお願いします。
0646デフォルトの名無しさんNGNG
gnuplotとかのプロッタにパイプで流し込むとか、
Xで書くとかしか思い浮かばないけど
0647645NGNG
>>646
プログラムも初心者でgnuplotも今日初めて使い出したばかりなので詳しいことがわからないのですが、
今gunuplotを使ってロボットが動いている間中、手動でプロットのコマンドを打っています。シェルを使って自動的に打たせたいとは思っているのですが、gnuplot上のシェルでFor文かWhile文のようなものが記述できるのでしょうか?
0648デフォルトの名無しさんNGNG
んー詳しくないけど、「gnuplot パイプ」「gnuplot 標準入力」とかを
検索するとヒントになるかも
0649デフォルトの名無しさんNGNG
>>612
無理。
他のすべてを禁止するということは関数の使用も禁止するんだろ?
無理だね。
0650645NGNG
ありがとうございます。ではちょっと調べてみます。
助かりました。
0651デフォルトの名無しさんNGNG
>>612
ああ、大抵できるね。
0652デフォルトの名無しさんNGNG
>>651
出来ないのって何?
0653デフォルトの名無しさんNGNG
>>652
わかんない。
ぱっとやってみた幹事ひととおり出来てるけど
抜けがあるかもしれない
0654デフォルトの名無しさんNGNG
#include <stdio.h>
typedef void (*callback_t)();

int callback(void) { printf("test\n"); return 1; }
void func(void (*callback)(void)) { callback(); }
int main(void) { func((callback_t)callback); return 0; }

コールバックの型が違うのにエラーが出ません。
どうしてなんでしょう?
0655デフォルトの名無しさんNGNG
>>636
> ワタクシがやろうとしておりますのは
> fprintf ( fp , "%x",argv [2] );
> ってことでして。。。
> これじゃーargv [2]の先頭アドレスを
> 16進数でfpに書き込むだけなんですよね?
文字列の終わりまで繰り返せばいいだけ
char *p;
for(p = argv[2]; *p = '\0', p++)
  fprintf(fp, "%x", *p);
または
int i;
for(i = 0; i < strlen(argv[2]); i++)
  fprintf(fp, "%x", argv[2][i]);
好きな方を使え
0656デフォルトの名無しさんNGNG
ループの中で strlen を使うのは止めてホスィ(´Д` )
0657デフォルトの名無しさんNGNG
>>654
引数が空とvoidの違いのことを言ってるのかな?

処理系依存だろうけど、関数の引数が空とvoidでは
普通は全く同じコードが生成されるんで問題なし。

func((callback_t)callback)でキャストしてるから警告も消える。
0658デフォルトの名無しさんNGNG
>>654
Cでは引数の省略と引数voidは関数定義以外では違うんだってば・・・・
0659デフォルトの名無しさんNGNG
>>656
655はどう考えてもネタだろ。
0660デフォルトの名無しさんNGNG
変数の例などで hoge と使ったのは誰が最初ですか?
0661デフォルトの名無しさんNGNG
時代遅れでも私は使い続けます。
C++に負けるな! VIVA C言語!
0662デフォルトの名無しさんNGNG
>>660
スレ違い
0663デフォルトの名無しさんNGNG
22:00げと
0664デフォルトの名無しさんNGNG
>>660
http://pc.2ch.net/tech/kako/1023/10234/1023448864.html
0665デフォルトの名無しさんNGNG
揚げ
0666デフォルトの名無しさんNGNG
おかしい、age入れたつもりだったのに・・・





・・・666get
0667デフォルトの名無しさんNGNG
おめーん 666 ゲット
0668667NGNG
取られてた・・・(鬱)
0669デフォルトの名無しさんNGNG
お前ら質問しる
0670デフォルトの名無しさんNGNG
float = 0xXXXX; てな感じで、代入したいんすけど、
上記のXXXXの部分をユーザ側からもらうには、どうすりゃいいん
でしょうか?思いつかんので、俺に教えてくらはい!
0671デフォルトの名無しさんNGNG
int main(int argc, char **argv)
0672デフォルトの名無しさんNGNG
scanf ?
0673デフォルトの名無しさんNGNG
>>657,658
そうでは無くてcallback_tの戻り値をvoidにしていて、
callbackの戻り値をintにしてる所です。
0674デフォルトの名無しさんNGNG
>>673
ポインタってちゃんと理解してる?
0675デフォルトの名無しさんNGNG
ところで、654は文法エラーのことを言っているのか、
それとも実行時のエラーのことを言っているのか。
0676デフォルトの名無しさんNGNG
質問です
FILE構造体が利用するバッファ(ストリーム)はどの関数がどのメモリ領域に確保しているのでしょうか
0677デフォルトの名無しさんNGNG
>>676
どのメモリ領域って何よ?
それと、処理系依存の話なら処理系が何かを書け。
0678676NGNG
処理系は特に考えてないですが、メモリというのはスタックとか、そういうやつです。
0679デフォルトの名無しさんNGNG
スタックは無理じゃねーか?
0680デフォルトの名無しさんNGNG
>>678
ヒープに決まってんだろ
0681デフォルトの名無しさんNGNG
>>676
printf()やscanf()等が関数の静的変数として確保しています
0682デフォルトの名無しさんNGNG
>>678
処理系が指定されていなければ答えは出せないな。
一般的な話で言えば、ヒープ領域に確保されるだろうね。
でも自分でsetvbuf等を使ってスタックとかstatic領域を
割り当てることもできるわけだし。

どの関数かは完全に処理系依存。
俺の使っているVC++では_getbufあたりかな。
これをfreadやfgetc等の関数が内部で呼び出している。
0683デフォルトの名無しさんNGNG
>>678
Linuxの場合はマニュアルによるとデフォルトではmallocを呼び出して確保するみたいだね。とするとヒープか。
プログラマがsetvbufなどで割り当てなければスタックはないと思う。
0684678NGNG
なるほど。つまり、free()はfclose()がfree(fp->base)な感じで
行っていることになりますか?
0685デフォルトの名無しさんNGNG
>>684
そうです。
0686デフォルトの名無しさんNGNG
>>675
両方ともエラーは出ません。
処理系はgcc(version2.95.4)です。
0687675NGNG
>>686
そういう意味ではなくて、
エラーにならないのがおかしいと思うのは、どっちのエラーのことか?

言い換えると、文法エラーにならないのは当たり前なんだけど
それはわかっているのか?
0688デフォルトの名無しさんNGNG
>>686
callbackの戻り値がintだろうがなんだろうがそれを無理やりcallback_tにキャストしてんだからエラーはでないでしょ
実行時にどうなるかは知ったこっちゃないけど
0689デフォルトの名無しさんNGNG
恐らくincompatibleなポインタ型を指摘するメッセージが出ると思う。
エラーと言うかワーニングメッセージ

#include <stdio.h>
typedef void (*func_t)();
int func2(void){return 1;}
int main(void) { func_t func; func = func2; func(); }

これは出た。
0690デフォルトの名無しさんNGNG
>>689
ネタですか?
0691デフォルトの名無しさんNGNG
>>688
あ、そう言われればそうですね。
0692C厨NGNG
チンコウィルスがさ
0693657NGNG
>>673
多くの処理系では(少なくともIA-32では)longくらいまでの戻り値は
レジスタ経由で返されるから呼び出し側に影響はない。

コンパイル時にエラーにならないのはキャストしてるから。

以上。
0694デフォルトの名無しさんNGNG
> 多くの処理系では(少なくともIA-32では)
IA32では戻り値に必ずレジスタを使わないといけない
という規約があるとでも言うのだろうか。

そういう俺もレジスタで返す処理系しか知らないのだが。
0695657NGNG
>>694
Intelが作った呼び出し規約の資料はあるのか知らないけど、
Visual C++やx86版のSoralisでは決まっているから、
それらのプラットフォームではその規約に従う必要がある。
0696694NGNG
>>695
Visual C++がEAXレジスタで戻り値を返すからといって、
他のコンパイラまでその規約に従う必要はないはず。
API等の外部関数とのやりとりだけを、それ専用の
呼び出し規約で対応してもいいわけだし。

慣習としてこの方式が使われているのは事実だけど、
絶対的な規則ではない気がする。 (間違ってたらごめんよ)
0697教えて君NGNG
教えてください
char ch[32] = "utudashinou";
と文字列を作ります。この文字列の末尾を指すようにポインタを使うと
char *p;
p = str1 + strlen(str1) - 1;となると本に書いてあるんですが
↑このポインタがどういったアドレス(?)を保持しているのか解らないです
ついでに、
char ch[32] = "utudashinou";←日本語文字だといけないっていうのは解ります
日本語は第1バイト、2バイトで一組で、1バイト目と2バイト目を逆にすると文字にならない
ってことですよね?・・・
0698教えて君NGNG
あれ、ミスがある・・・
5行目のp = str1 + strlen(str1) - 1
は、p = ch + strlen(ch) - 1
です
0699デフォルトの名無しさんNGNG
p = ch;    str1の先頭要素のアドレス
p = ch + 1; その次の要素のアドレス
p = ch + 2; その次の次の要素のアドレス
p = ch + 3; その次の次の次の要素のアドレス
p = ch + strlen(ch); 終端NULL文字のアドレス
p = ch + strlen(ch) - 1; 最後の文字(終端NULL文字の1つ前)のアドレス

> 日本語は第1バイト、2バイトで一組で、1バイト目と2バイト目を逆にすると文字にならない
> ってことですよね?・・・
はい。
逆にすると文字にならないというより、おかしなことになるのでやめろ。
0700699NGNG
訂正。700げと。
× p = ch;    str1の先頭要素のアドレス
○ p = ch;    chの先頭要素のアドレス
0701デフォルトの名無しさんNGNG
素人です
ポインタ型変数の宣言の時
int *pnt;
int pnt*;
どちらでもよいの?
0702デフォルトの名無しさんNGNG
>>701
試しに自分でやってみましょう。
0703教えて君NGNG
ありがとうございました!>>699さん
もう一つよろしいですか?
なんとなくわかるんですが、
char str[][32];
char *p;
として、多重配列になった場合
p = (char *)str;
と、キャストしないといけないのはなぜですか?
0704デフォルトの名無しさんNGNG
fscanf(fp,"%8d %2d %2d\n",&a,&b,&c);
としたときのフォーマット指定部分の最後の \n は付けると付けないとでどう違うのか分からないのですが
違いはあるんでしょうか?
0705デフォルトの名無しさんNGNG
>>703
次元が違うじゃん。配列strに適合するポインタは
char (*)p[32] = str; /* 32要素のchar配列(strの先頭要素に相当)へのポインタ */
0706教えて君NGNG
>>705さんありがとー
次元か。そっかそか
たびたびごめんなさい。がんばってきます
0707デフォルトの名無しさんNGNG
>>705
char (*p)[32] = str;
0708デフォルトの名無しさんNGNG
>>707 スマソ
0709デフォルトの名無しさんNGNG
>>701
多分、
int *pnt;
int* pnt;
の間違いだと思うけど。基本的には好みの問題なのでどっちでもよい。

>>704
付けても付けなくても動作は同じ。
fscanf()のフォーマット文字列のスペース、タブ、改行はどれも、
「スペース、タブ、改行のどれかがあったらなくなるまで読み飛ばす」
という意味。
0710704NGNG
>>709
サンクス!参考になりました
0711709NGNG
あ、後にfscanf()が続く場合に動作が変わるかも。スマソ。
>fscanf()のフォーマット文字列のスペース、タブ、改行はどれも、
>「スペース、タブ、改行のどれかがあったらなくなるまで読み飛ばす」
>という意味。
の説明は合ってるはず。
0712デフォルトの名無しさんNGNG
void hoge(char str[])と
void hage(char *str)は
関数内部に実体を持つか持たないかの差ですか?
hogeにポインタで渡すと配列サイズが分からない気がしますが・・・
やっぱり等価かなぁ
0713デフォルトの名無しさんNGNG
同じ。
0714デフォルトの名無しさんNGNG
>>712
つーかやってみろよ。sizeof(str)とか
文字列だったら '\0' で終端がわかるだろ
0715デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c6.html#4
0716712NGNG
よく分かりました
ありがとうございます
0717デフォルトの名無しさんNGNG
void hoge(char str[])

↑これって関数がポインタを受け取るときは(間接的に)配列を受け取る場合が多いから、わかりやすく書けるようにしただけだよね? 構文糖というかどうかは分からないけど。
0718デフォルトの名無しさんNGNG
void **p;
これ、どうやってつかうんですか?
0719デフォルトの名無しさんNGNG
>>718
ポインタ配列
0720719NGNG
ごめん嘘だvoid **pだったね
CoCreateInstance()とか1つの関数でいろいろな型(クラス)を
作って渡すのに使うのだと思う
例えば簡単に書くと
void hoge(int n,void **p)
{
 switch(n){
 case 0: *p=(char *)new char; return;
 case 1: *p=(float *)new float; return;
 ・・・
 default: *p=(int *)new int; return;
}
・・・これも嘘かも
new使ってるのがスレ違いとか言わないで
0721デフォルトの名無しさんNGNG
キャスト(void *)の間違い鬱だ
0722デフォルトの名無しさんNGNG
何を言っておる。
void *a[N];
void **p = a;
って使えるじゃん。ポインタ配列に適合するポインタでもいいんだよ?
それと、配列の生成は new char[n]
0723720NGNG
>>722
voidのポインタ配列を参照するときにキャストするのならば
最初からキャストする型で宣言した方がいいのでは?と思い直したんですよ
hogeで作るオブジェクトは配列でなくて
1個のインスタンス生成を想定してましたが、
0724720NGNG
ただC++ならテンプレート使えば済む話ですが
0725722NGNG
あーそーか勘違いした>配列
0726デフォルトの名無しさんNGNG
forループの中で,インクリメントされた値を異なる変数名に
順次代入したい場合ってどうしたらいいの?
0727デフォルトの名無しさんNGNG
なにそれ。こんなのしかイメージできないぞ↓
int a, b, c;
int *vars[] = { &a, &b, &c };
int i;
for (i = 0; i < 3; i++) *vars[i] = i;
0728デフォルトの名無しさんNGNG
すべての車バイクが電気で動くようになったら暴走族の被害がかなりへるかと
0729デフォルトの名無しさんNGNG
違法改造で放電しまくってうるさいかもしれない

一体何の関係が
0730デフォルトの名無しさんNGNG
ループ(for、while等)の中で一回だけ実行するにはどうしたらいい?
例えば、

for(i=0; i<3; i++)
{
printf("%d\n", i)
}

において、一回だけprintfを実行させたい場合。
0731デフォルトの名無しさんNGNG
/*
for(i=0; i<3; i++)
{
*/
printf("%d\n", i)
/*
}
*/
0732デフォルトの名無しさんNGNG
for(i=0; i<3; i++)
{
if(i==0)printf("%d\n", i);
}
0733デフォルトの名無しさんNGNG
ループの外に出すわけにはいかんのだろうか?
0734デフォルトの名無しさんNGNG
>>720
単純に「void*へのポインタを使いたい時」でいいんじゃない?
たとえば
void free_mem(void **p)
{
 free(*p);
 *p = NULL;
}

でもいいんだし。
0735デフォルトの名無しさんNGNG
今日、初めてC言語のソースを書きました。
本当に感激しました。
よーし、この調子で明日は少し進むぞ〜
0736デフォルトの名無しさんNGNG
んじゃ、無限ループのなかにおいてはどう?
0737デフォルトの名無しさんNGNG
>>736
for(;;) {
  static int only_one=1;
  if ( only_one ) {printf("hoge\n"); only_one=0;}
}
0738720NGNG
>>734
#define SAFE_DELETES(o) if(o){delete[] o;o=NULL;}
との違いは?
void*使ってたら型安全性もくそもないし
Cスレなのでdelete[] o;が嫌でしたらfree(o);と読んで下さい
0739デフォルトの名無しさんNGNG
>>737
それメインループの中で初期化するときによくやってる
0740720NGNG
>>738
マクロと関数の違い。
0741デフォルトの名無しさんNGNG
オーバーヘッドがある分関数が不利?
0742720NGNG
>>741
速度を取るかバイナリのサイズを取るかだね。
ただし、free自体にかかるコストがかなり大きいので、
場合によっては全体のコードサイズの関係でマクロの方が
遅くなるケースも考えられる。
0743720NGNG
↑ アプリケーション全体を考えた時の話ね。
0744720NGNG
いや、この程度ならマクロでもサイズはほとんど同じかも。
度々スマソ。
0745デフォルトの名無しさんNGNG
>>730

for(i=0; i<3; i++)
{
printf("%d\n", i);
break;
}
0746デフォルトの名無しさんNGNG
画像処理でBitmapの読み込み、書き込みに苦労してます。
助けてください。読み込んだあとにHough変換するのですが、
よくわかりません
0747デフォルトの名無しさんNGNG
マルチウザイ
0748デフォルトの名無しさんNGNG
>>730
sw=0;
for(i=0; i<3; i++)
{
if(sw==0){printf("%d\n", i);sw=1;}
}
//printf(--) <= ;付けとけよ!
0749デフォルトの名無しさんNGNG
ポインタのソートの仕方が分かりません。
誰か教えてください。
0750デフォルトの名無しさんNGNG
qsort関数でも見てみる?
0751デフォルトの名無しさんNGNG
>>750
学校の課題で出されているんですがqsort関数は使用不可なんです。
ポインタの位置を入れ替えてしないといけないみたいので。
0752デフォルトの名無しさんNGNG
>>751
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0753デフォルトの名無しさんNGNG
Base64 エンコードやりたいのですが、
6ビットごとの操作ってところで詰まっています

どっかにサンプルってないでしょうか?
0754デフォルトの名無しさんNGNG
>>749
if(a<b)
swap(&a,&b);
〜〜〜〜〜〜〜〜〜〜
swap(*aa,*bb){
int *cc;
*cc=*aa;
*aa=*bb;
*bb=*cc;
}
こんな奴かな?
0755デフォルトの名無しさんNGNG
>>754
構造体のソートなんです。
なんとかんらないでしょか?
0756デフォルトの名無しさんNGNG
ポインタに構造体の先頭アドレス放り込んだらいいんでないの?

struct tbl tb1, tb2;
struct tbl *ptb1, *ptb2;

ptb1 = &tb1;
ptb2 = &tb2;

こんな感じで
0757デフォルトの名無しさんNGNG
>>756
もう少し詳しく教えてもらえないでしょうか?
ソートはどうやっておこなうのですか?
0758デフォルトの名無しさんNGNG
>>749
> ポインタのソートの仕方が分かりません。

>>755
> 構造体のソートなんです。

結局何がしたいのよ ? 構造体を指すポインタの配列があって、それをソートしたいの ? つまり...

struct _s {
 /* ... */
} s[100];

struct _s p[100];

for(i = 0; i < sizeof(p)/sizeof(p[0]); i++){
 p[i] = &s[i];
}

となってて、p[] をソートしたいのか ?
0759デフォルトの名無しさんNGNG
>>753
> Base64 エンコードやりたいのですが、
> 6ビットごとの操作ってところで詰まっています
> どっかにサンプルってないでしょうか?

「base64 サンプル ソース」 あたりでググレばいっぱいあるぞ。

でも、何故に「6ビットごとの操作ってところで詰まっています」なの ?

unsigned char in[3];
unsigned char out[4];

out[0] = in[0] >> 2;
out[1] = ((in[0] & 0x03) << 4) | (in[1] >> 4);
out[2] = ((in[1] & 0x0f) <<2) | (in[2] >>6);
out[3] = in[2] & 0x3f;

でいいと思うけど...。(適当に書いてるから、バグってたらごめんね。)
0760デフォルトの名無しさんNGNG
64bit機ではintの大きさは8バイト?
0761デフォルトの名無しさんNGNG
>>760
オプション次第
0762デフォルトの名無しさんNGNG
すいません・・・
オプションって何でしょう?
0763デフォルトの名無しさんNGNG
1バイト三千五百円です・・・・・・・・・・・日給かよっ!安いよっ!
0764デフォルトの名無しさんNGNG
>>762
自機の後ろについてくるまるくてフワフワした憎いヤツ。
オプションイーターに喰われてスゲー泣ける
0765デフォルトの名無しさんNGNG
最初にdoubleで宣言してある配列に、
いろいろな小数が入っています。
この配列のそれぞれ整数部分だけを取り出すにはどうしたらいいですか?
0766デフォルトの名無しさんNGNG
それhグラディウス
0767デフォルトの名無しさんNGNG
>>761
> オプション次第

つーか処理系 (コンパイラ他) 次第。
0768753NGNG
おお、なるほど
激しく感謝
0769デフォルトの名無しさんNGNG
>>765
> 最初にdoubleで宣言してある配列に、
> いろいろな小数が入っています。
> この配列のそれぞれ整数部分だけを取り出すにはどうしたらいいですか?

int で宣言してある配列に代入しろ。
0770デフォルトの名無しさんNGNG
キャストじゃダメなのかな?
0771デフォルトの名無しさんNGNG
758のソースも何やってるのかわからんのだが。
* の書き忘れかな?
0772デフォルトの名無しさんNGNG
>>771
> 758のソースも何やってるのかわからんのだが。
> * の書き忘れかな?

もう少し、頑張りましょう。
0773770NGNG
>>765
なんならfloor、ceil 調べたら?
0774765NGNG
>769
なるほど、ありがとうございます。
>770
キャストって何ですか?
0775デフォルトの名無しさんNGNG
>>774
すかいらーくグループのひとつ
0776771NGNG
>>772
頑張ってみたがダメだったよ。

あんた以外の人間にもわかるように
あのソースが正しいことを説明してみてくれないか。
0777756NGNG
> 771

まずやりたいことを詳細に書いたら?
あの内容じゃワケワカラン
0778758NGNG
>>776
マジなのか ?
どこらあたりがわからんの ?
特に、どこに * を書き忘れたと思うの ?
0779771NGNG
はあ? おまえら全員でネタ披露してんの?

> p[i] = &s[i];

構造体へ構造体ポインタを代入できるの?

> 特に、どこに * を書き忘れたと思うの ?

struct _s p[100];
 ↓
struct _s *p[100];
0780758NGNG
>>779
おおなるほど、間違いだ。で、それが「何やってるのかわからんのだが。」ともったいぶって言うことか ?
単に、「間違ってるぞ、ヴォケ !!」ですむ話だと思うが。
0781デフォルトの名無しさんNGNG
みんな!
もちつけ!
     /\⌒ヽペタン
   /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;)  
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
0782758NGNG
>>780
ごめん、悪気はなかったんだよ。
*の書き忘れなのか、それとも &が余計なのか、
それとも他の意図があったのかわからんかった。
0783770NGNG
>>774
#include <stdio.h>
main(){
  double d=5.239;
  d=(int)d;//(int)<=intへのcast
  printf("%f",d);
  return 0;
}
//こんなプログラムでわかるかな?なんとなくだよ
0784デフォルトの名無しさんNGNG
↑ の名前は758でなはないです。 771の間違いですだ。
0785デフォルトの名無しさんNGNG
772が全部悪いということで
0786デフォルトの名無しさんNGNG
while(*p && *p!=' ')
この条件判定はどういう意味ですか?
0787デフォルトの名無しさんNGNG
>>786
*p かつ *p が ' ' でないなら
です
0788デフォルトの名無しさんNGNG
>>786
while(*p=0 && *p!=' ')
0789デフォルトの名無しさんNGNG
間違えた
while(*p==0 && *p!=' ')
0790デフォルトの名無しさんNGNG
*p!=0だべ
0791デフォルトの名無しさんNGNG
>>789
ネタですか?
0792デフォルトの名無しさんNGNG
間違えた
while(*p!=0 && *p!=' ')
0793デフォルトの名無しさんNGNG
空白文字で無くポインターの最後まで行っていない間ってところか?
0794デフォルトの名無しさんNGNG
間違えた
while(*p==0 && *p!======' ')
0795デフォルトの名無しさんNGNG
>>794
はい、間違えてますが・・・
0796758NGNG
> 772が全部悪いということで

まあ、心配するな、元を間違った俺が一番悪いのは当然だ、すまん。コンパイルして見りゃ良かったんだけどな。

>>786
p の指す先が文字列の終端でなくてかつ空白でない間...
0797デフォルトの名無しさんNGNG
海外の比較的マイナーな文学作品を翻訳出版する
小さな出版社がある。そして文学ファンはこういった出版社を
潰さないため、今後も翻訳を続けてもらうために
1人で同じ本を2・3冊買うことが良くある。

我々もこういう時だからこそDelphi7を買って
ボーランドを支えるべきなんじゃないだろうか。
Delphi7の売り上げはDelphi8以降の開発資金となるし、
ボーランドジャパンの今後に大きな影響をもたらすだろう。

Delphi7の出来のみを云々するのは
あまりにも近視眼的ではないだろうか?
0798デフォルトの名無しさんNGNG
つまり文字列が終了するか空白が現れるまでループってことで。
0799デフォルトの名無しさんNGNG
>>793
ありがとーベリーマッチ
んじゃ、whlie(*p)っていうのは、ポインターが最後まで行ってない間でFA?
0800デフォルトの名無しさんNGNG
初心者質問でスマソ
みんなありがとね!
0801デフォルトの名無しさんNGNG
>>799
> んじゃ、whlie(*p)っていうのは、ポインターが最後まで行ってない間でFA?

Yes, 俺は、while(*p != '\0') と書くけどね。
0802デフォルトの名無しさんNGNG
>>799
注意。
”文字列を格納した”ポインターだけだよ。
0803デフォルトの名無しさんNGNG
マジありがと!
大体わかってきたけど、まだポインタを使う意図が理解していません・・・
勉強してるうちにわかってくるもんなのかな?
0804デフォルトの名無しさんNGNG
>>803
たとえば関数に配列(文字列含む)を渡す時は
ポインタで渡すのが一般的です。
0805デフォルトの名無しさんNGNG
ふむふむ
まだ多重間接参照とかポインタを仮引数として使った奴とか勉強してないから
修行してきます(・.・;)
0806ぶたNGNG
#include <stdio.h>
#define N 1500
#define XSIZE 320
#define YSIZE 240
main()
{
int x,y;
int count;
int image1[N][N],image2[N][N];

printf("OK1");
for(y=0;y<N;y++){
count=0;
for(x=0;x<N;x++){
image1[y][x]=count;
count++;
}
}
printf("OK2\n");
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE*3;x=x+3){
image2[y][x/3]=image1[YSIZE-1-y][x/3];
printf("x=%d,y=%d, 中身%d\n",x,y,image2[y][x]);
}
}
}
が動きません。理由を教えてください
0807デフォルトの名無しさんNGNG
int を450万単位確保できるの?
Nで指定した数値を少なくして実行してみて。
0808765NGNG
>>783
遅くなりましたがありがとうございます
0809C初心者NGNG
>>806
>理由を教えてください
オーバーフローが原因ではないかと。。。
対策としては、
static int image1[N][N],image2[N][N];
~~~~~~
みたいにしてスタック領域に確保してみては。
0810デフォルトの名無しさんNGNG
↓>>809へのツッコミよろしく。
0811デフォルトの名無しさんNGNG
>807
どのくらい小さくしたらいいと思いますか?
0812809NGNG
>810
すみません。スタックではなく、静的でした。。。(--;
0813デフォルトの名無しさんNGNG
スタックではなくスタティックだったというギャグだな
0814ぶたNGNG
staticを付けたら動くようになりました。
しかし配列のなかにcountの値が格納されません。
どうしてですか?
0815デフォルトの名無しさんNGNG
if(経験人数==0)
goto 820
0816ぶたNGNG
>>814
教えてください.countはきちんと表示されるのに実際
image2の中を見ると0ばかりです
0817C初心者NGNG
>しかし配列のなかにcountの値が格納されません。
格納されていますよ。出力画面で[中身]の値が0でそう思っているのでしたら
printf("x=%d,y=%d, 中身%d\n",x,y,image2[y][x/3]); にかえてみては。
~~~~~
>814がどのような結果を求めているのかはわかりませんが。。。
それにしても、日本語 C が普及しなくてよかったと思った今日この頃っす。

0818C初心者NGNG
ハァー。また、やってしまった。。。~の位置は気にしないで下さい。(_ _)
ついでに逝ってきます。;y=-( ゚д゚)・∵・ターン
0819デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
char name[50];
printf("名前を入力してください\n");
scanf("%s",name);
printf("%sですね\n",name);
return 0;
}
漢字で入力したいのですがどうすればできますか?
0820デフォルトの名無しさんNGNG
日本語入力モードにする
0821デフォルトの名無しさんNGNG
alt+半角な
0822デフォルトの名無しさんNGNG
>>821
できません
0823デフォルトの名無しさんNGNG
できたけど・・・
0824デフォルトの名無しさんNGNG
>>819
漢字で入力できないのはそのプログラムのせいではないと思うぞ(^_^;)
ところで、>>819を書いたときはなんで入力できたの?
0825デフォルトの名無しさんNGNG
単に文字列を入力するだけなのにscanfを使うのもどうかしている。
0826デフォルトの名無しさんNGNG
>>824
??
scanfで入力するときできないんですが
0827デフォルトの名無しさんNGNG
>>826
だったらfgetsでもつかっておけ。
0828827NGNG
scanfのせいだとは思えないけどな。
0829デフォルトの名無しさんNGNG
質問の時間がやってまいりました。
System::TextとどっかのライブラリのText定義が
曖昧ですよエラーが発生します(´д`;)

簡単に解決するにはどうしたらいいのでしょか。
どっかのライブラリの方は弄りたくないらしい
ですが・・・
0830デフォルトの名無しさんNGNG
言語を明確にして他スレに書く。
0831デフォルトの名無しさんNGNG
>>829
C#かな。よー分からんけど、クラス名を明示的に指定してみたら?例えば、
Text var;
   ↓
System::Text var;
たぶん、Textってクラスが名前空間に2つあるから、コンパイラが混乱してるんだと思う。
0832831NGNG
しまった…ここC言語スレだったんだ…。逝ってくる。
0833デフォルトの名無しさんNGNG
逝って来るといいつつ滞在する
0834829NGNG
言語はC++(BCB)らしいです。
使いたい方のライブラリのクラス名が不明なので
もいっかい探してみます・・。
0835831NGNG
バ、バレてる…(;´Д`)。
0836デフォルトの名無しさんNGNG
質問です。。
自分のPCだと
printf("\033[%d;%dH",x,y);
の実行結果が
[x;yH
となってしまうのですが・・・(ι ´ェ`)
どうすれば正しくエスケープコードを
認識してくれるようになるでしょうか・・・?

知り合いのPCだと正常に動作したソースを使ってます。
環境はペンティアム3の1.6Gでosはxpです。
他に記載すべき点があれば言ってください・・・。

よろしくお願いします。
0837836NGNG
追記
[x;yHの前にエンターの記号みたいなのが表示されます(ι ´ェ`)
0838デフォルトの名無しさんNGNG
>>836
NT系のOSでは、Win32プログラムはエスケープシーケンスは使えない。
Win9xを使うか、16bitコンパイラを使うか、Console APIを使って書き換える必要あり。
0839836NGNG
>>838
レスありがとうございます。

使えないんですか・・・
そしたら32bitコンパイラでは、
カーソルの位置を指定する方法はないのでしょか?
0840デフォルトの名無しさんNGNG
標準ライブラリの strstr の実装例のソースってどこかに落ちてませんか?
0841デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
int main(){
  char *str1 = "Borland International", *str2 = "atio", *ptr;
  ptr = strstr(str1, str2);
  printf("The substring is %s\n", ptr);
  return 0;
}
//これで充分か?
0842デフォルトの名無しさんNGNG
838じゃないんだけど

>>839
> Console APIを使って書き換える必要あり
読めないのですか?
0843840NGNG
>>841
いや、strstr の使い方じゃなくて、strstr のソースが欲しいのです。
0844デフォルトの名無しさんNGNG
libcのソースってどこにあるんすか?
0845デフォルトの名無しさんNGNG
>>841
実装霊らしいが…
>>840
ftp://sources.redhat.com/pub/glibc/
0846デフォルトの名無しさんNGNG
>>843
VC++のCDの中に入ってる。
0847845NGNG
リロードはきちんとしましょう。
0848デフォルトの名無しさんNGNG
strstr.c でググれ。
0849デフォルトの名無しさんNGNG
オリバーのソースってどこにあるんすか?
0850デフォルトの名無しさんNGNG
strstrの中でstrncmpを使うのは反則?
strncmpを使うとすっきりとかけるんだけど。
0851836NGNG
>>842
意味がつかめなかったので、読み流してました。
やり方わからないですが、試してみます。

ありがとうございました。
0852デフォルトの名無しさんNGNG
\x1b[1;31m←これで赤字で出力されます
どなたか解説お願いします
0853デフォルトの名無しさんNGNG
>>852
エスケープシーケンスについて調べてみれ
0854852NGNG
>>853
感謝感謝!!
エスケープシーケンスって言葉で検索するだけで情報がいっぱい得られました
ありがとうございました
0855デフォルトの名無しさんNGNG
質問ですが、
Cを大体マスターしたのですが、あまりにも生産性が低いため次の言語へ
いきたいと思います。
C#なんかよさそうだと思ったのですが、C++を1秒もやらずにC#を習得することは
現実的でしょうか。
C#はC++を改良したものだそうなので、どうしてもC++をやるのが無駄に見えてしまうのですが、
C++をやっておいたほうがよいのでしょうか。それとも、まったくの無駄足になるのでしょうか。
0856デフォルトの名無しさんNGNG
>>855
C# と C++ は別物。つか、なんでそんな事いちいち人に訊くわけ?
0857頭悪い人NGNG
10個の数を入力して
順位を求めるプログラム作ってくださいな
#include <stdio.h>
main()
{
int dd[10],jun[10];
int jj,kk;
for(jj=0;jj<10;++jj)
jun[jj]=1;
printf("10個の数字を入力\n");
for(jj=0;jj<10;++jj)
scanf("%d",&dd[jj]);
for(jj=0;jj<10;++jj){
for(kk=0;kk<10;++kk){
if(dd[jj]<dd[kk])
jun[jj]=jun[kk];
}
}
for(jj=0;jj<10;++jj)
printf("%4d",dd[jj]);
printf("\n");
for(jj=0;jj<10;++jj)
printf("%4d",jun[jj]);
return 0;
}
こんな感じで
0858デフォルトの名無しさんNGNG
http://water.si.hirosaki-u.ac.jp/~slmizu/is2000/is2000/node5.html
0859デフォルトの名無しさんNGNG
>>857
swap()
作ったら?
0860デフォルトの名無しさんNGNG
並び替えなくても良いのか?
0861デフォルトの名無しさんNGNG
>>857
>if(dd[jj]<dd[kk])
>jun[jj]=jun[kk];
if(dd[jj]<dd[kk])
jun[jj]++;
にしてみれば?
それで出来るでしょう。
0862デフォルトの名無しさんNGNG
>>857=806
宿題代行してもらいたいならインデントくらいきちんとしろ。
読みづらいので放置。
0863頭悪い人NGNG
並び替えのプログラムと順位求めるプログラムって
考え方違う?よくわからんのだけど
0864デフォルトの名無しさんNGNG
>>863
順位だと、タイ(同着)があるからちょっぴりだけロジック増える とか
0865頭悪い人NGNG
>>861
どういうことかはわからないけどできたよ
ありがとう

>>864
ロジック?聞いたことないw
0866デフォルトの名無しさんNGNG
100回も比較する必要はないと思うのだが。

for(jj=0;jj<9;++jj)
 for(kk=jj+1;kk<10;++kk)
  if(dd[jj]>dd[kk]) jun[jj]++;
  else if(dd[jj]<dd[kk]) jun[kk]++;
0867デフォルトの名無しさんNGNG
>>865
ほら、順位もついでに表示させたいとか、とういいうことdhじゃろp
0868866NGNG
あ、インクリメントする添字が逆になってるわ。
  if(dd[jj]>dd[kk]) jun[kk]++;
  else if(dd[jj]<dd[kk]) jun[jj]++;
0869頭悪い人NGNG
このプログラムの意味がわからない
特にインクリメントのところが
0870デフォルトの名無しさんNGNG
>>864
そんなロジックいらないでしょ。結果的に。
つかqsort()使えよ。
教師の出題意図を出し抜くくらいでないと大物になれないぞ。
0871頭悪い人NGNG
クイックソートって難しそう・・
0872デフォルトの名無しさんNGNG
>>865
> どういうことかはわからないけどできたよ

できたのか ? じゃいいな。とりあえず qsort 使う版作ったけど、必要ないってことで...。
0873デフォルトの名無しさんNGNG
=と++じゃ++の方が演算子の順位が高いのに、どうして
a = b++;は
a = b;
b = b + 1;
になるんですか?
0874デフォルトの名無しさんNGNG
ネタデスカ?
0875デフォルトの名無しさんNGNG
a=b++;とa=++b;の違いを考えて下さい
0876デフォルトの名無しさんNGNG
あれだ、マジレスすると「ツレター!!!」とか言って大喜びする手合いだ。
0877デフォルトの名無しさんNGNG
>>873
コンパイラのバグですね。何を使っているんですか?
0878デフォルトの名無しさんNGNG
>>877
ネタなのか。マジなのか。
0879デフォルトの名無しさんNGNG
o= --o - o--;
0880デフォルトの名無しさんNGNG
>>879
せいしだせいしだー
0881デフォルトの名無しさんNGNG
>>879
未定義厨がくるからヤメレ。
0882デフォルトの名無しさんNGNG
たいよう と 太陽
そら と 空
などの文字列を比較したときに同じ意味だと判定するロジック、ライブラリ、サンプルソースなどはありませんか?
あったら教えてください.
0883デフォルトの名無しさんNGNG
マジなのに・・・
0884デフォルトの名無しさんNGNG
↑873です
0885デフォルトの名無しさんNGNG
>>884
そういう仕様だから
0886デフォルトの名無しさんNGNG
>>883
コンパイラのバグだっていってるだろ。
マジなのに・・・
0887デフォルトの名無しさんNGNG
>>882
ほら...

#include <stdio.h>
#include <string.h>
struct Dictionary_t{
 char *Text;
 char *Reading;
} Dictionary[] = {
 {"空", "そら"}, {"太陽", "たいよう"}
};
int main(int argc, char* argv[])
{
 struct Dictionary_t *p;

 if(argc != 3){
  printf("Usage: %s word1 word2\n", argv[0]);
  return 2;
 }
 for(p = Dictionary; p < &Dictionary[sizeof Dictionary / sizeof Dictionary[0]]; p++){
  if((strcmp(argv[1], p->Text) == 0 && strcmp(argv[2], p->Reading) == 0) ||
   (strcmp(argv[2], p->Text) == 0 && strcmp(argv[1], p->Reading) == 0)){
    printf("%s と %s は同じだよ。", argv[1], argv[2]);
    return 0;
  }
 }
 printf("%s と %s は違うよ。", argv[1], argv[2]);
 return 1;
}
後は、辞書をひたすら入力しろ。
0888デフォルトの名無しさんNGNG
VC++6.0は,遅くていらいらしてきたんですが,
win98で他に使えるコンパイラってありますか?
動作がなるべく軽いものがいいんですが。
0889デフォルトの名無しさんNGNG
コンパイラのバグじゃないってば。
b = a++; と b = ++a; の違いも知ってる。
ただ、本みたら= より ++の演算子の方が順位高かったから
あれ?なんでだろ?って疑問に思っただけ。
やっぱそういう仕様だからなのかな。
0890デフォルトの名無しさんNGNG
>>873
マジレスだけど、演算子の優先順位と、
b++ が加算前の値を返すこととは別の話。
まずは優先順位の意味について調べてみた方がいいと思う。
0891デフォルトの名無しさんNGNG
>>890
ありがとう
0892デフォルトの名無しさんNGNG
>>888

>>2-10あたり見てみろ
0893デフォルトの名無しさんNGNG
>>5

まともな処理系とは?
0894デフォルトの名無しさんNGNG
では,皆さんは何を使っていますか?
おすすめは?
0895デフォルトの名無しさんNGNG
VC++
0896デフォルトの名無しさんNGNG
VC++ gcc
0897デフォルトの名無しさんNGNG
秋月のオマケ
0898デフォルトの名無しさんNGNG
gccって英語みたいなんですけど,大丈夫ですかね?
DirectX使えますか?
0899デフォルトの名無しさんNGNG
>>898
使える
苦労したけど
0900デフォルトの名無しさんNGNG
>>889
> ただ、本みたら= より ++の演算子の方が順位高かったから

= より ++の方が優先順位が高いというのは、たとえば
b = a++;  という式なら、
b = (a++);  と等価であって、
(b = a)++;  ではないということ。
(後者は実際には文法エラーだけどね)

要するに式内の各演算子の結び付く強さという感じ。
0901デフォルトの名無しさんNGNG
>>893
こういうこというやつって友達いねぇんだろうな・・・・
0902デフォルトの名無しさんNGNG
>>>888
VCのコマンドラインコンパイラとか。
0903デフォルトの名無しさんNGNG
++ のような単項演算子では優先順位云々とかないだろう。
右から左に解釈されるだけでは?
0904デフォルトの名無しさんNGNG
>>903
おいおい大丈夫?
0905デフォルトの名無しさんNGNG
>>898
gcc は日本語化するとエラーメッセージがわけ分からなくなるので
英語のまま使え。
0906デフォルトの名無しさんNGNG
>>903
正しい!
0907デフォルトの名無しさんNGNG
コンパイラなりの返すエラーメッセージとかってそんなに難しいか?
0908デフォルトの名無しさんNGNG
先にするのは構文解析だっけ?
0909デフォルトの名無しさんNGNG
906=903だと信じたい。
0910デフォルトの名無しさんNGNG
>>901
いなければ何か?
哀れみますか?
0911901NGNG
>>910
いや、孤独な俺と友達になってもらえるかと。
0912デフォルトの名無しさんNGNG
>>911
成人式までに職を見つけなければ,友を失う事になるでしょう
来年で良ければ
0913デフォルトの名無しさんNGNG
構造体の全部のメンバの初期化って,

memset( &Kouzoutai ,0 ,sizeof( DOUZO ) * DOUZO_MAX );

とかでいいんでしょうか?

それとも構造体のメンバ1個1個初期化していくんでしょうか?
0914デフォルトの名無しさんNGNG
構造体の配列の話?
それとも
memset(&Kouzoutai ,0 ,sizeof(Kouzoutai));
の書き間違い?
0915913NGNG
あ,ミスりました
構造体のメンバが配列で,
構造体は,ひとつです
0916デフォルトの名無しさんNGNG
NULLポインタの実際の(実装上の)値がゼロ以外の処理系
があったとすれば、
構造体のメンバにポインタが含まれている場合に
memsetではNULLが入らないね。
それ以外だったらmemsetでいいんじゃない?

または、変数を定義する時に
struct hoge Kouzoutai ={0,};
という感じで初期化してもいい。
0917デフォルトの名無しさんNGNG
>>913
メンバーにひとつひとつ値を入れていった方がよいぞ。
doubleの場合、すべてのビットが0が0.0と同じになるとはかぎらないらしいし。
0918913NGNG
double型とポインタ型とかくせのあるものは,今回は使わないので,memsetを使うことにします

>>916
>>917
あとあと知っておいて役に立つ事なので,ありがとうです
0919デフォルトの名無しさんNGNG
>>913
どうしてもメンバごとの代入がいやなら、
初期状態の構造体をひとつ作っておいて、丸ごと代入。
  (初期化したい構造体) = (初期状態の構造体);
0920デフォルトの名無しさんNGNG
>>919
なるほど。
ANSIできちんと保証されているしな。
0921デフォルトの名無しさんNGNG
姫宮ANSI
0922913NGNG
>>919
画期的
盲点をつかれました
これで,明日はドライブシュートが打てそうな気がします
0923デフォルトの名無しさんNGNG
Sleep関数の引数って定数でないとダメなの?
つまり、Sleep(1000+x);ってのはダメ?xに数字を代入して。
0924913NGNG
つーことは,

void a()
{
 KOU Kou;

 Kouzou=Kou; //memcpyの方がいいか?
}

ではだめで,外部変数で用意しなきゃだめってことですよね?
それかa関数の中にstaticで用意するか
0925デフォルトの名無しさんNGNG
>>923 頭文字からして標準関数ではないヨカン
0926デフォルトの名無しさんNGNG
>>923
constついてるか確認して
0927デフォルトの名無しさんNGNG
>>923
なんでそんな質問する気になったの?
0928デフォルトの名無しさんNGNG
>>923
なんかサイレントヒルの裏世界に迷い込むぐらいの疲労を覚えたよ。
0929デフォルトの名無しさんNGNG
>>889
> b = a++; と b = ++a; の違いも知ってる。
> ただ、本みたら= より ++の演算子の方が順位高かったから
> あれ?なんでだろ?って疑問に思っただけ。
> やっぱそういう仕様だからなのかな。

ちょっとマジレス。

a++ は、(temp = a, a = a+1, temp) と言う形に展開される。
だから、b = a++; は、
(1) temp = a;
(2) a = a + 1;
(3) b = temp;
となる。ただし、(1) → (2), (1) → (3) の順序は、保証されてるけど、(2) と (3) の順序は保証されていない。((1) → (3) → (2) もありえるし、システムによっては (2) と (3) が同時に実行されるかもしれない。)
だから、a = a++; は、結果が保証されない。
0930デフォルトの名無しさんNGNG
>>923は大人気。
0931デフォルトの名無しさんNGNG
>>929は結論は正しいが過程はでまかせ
0932デフォルトの名無しさんNGNG

923や929見て思ったんだけど、ここってそういうスレなの?
0933デフォルトの名無しさんNGNG
mov ax,a
inc ax
mov b,ax
0934デフォルトの名無しさんNGNG
>>924
そんな面倒なことしないでも定義時に初期化すればいいじゃん。
それとも一旦何かに使った構造体を再初期化したいの?
 
0935デフォルトの名無しさんNGNG
>>931
禿しく同意。
0936デフォルトの名無しさんNGNG
>>934

1回構造体のメンバに例えばカウントを取る変数とかがあって,毎回0に初期化しないといけないんです
あとは,毎回座標を入れていったり
0937デフォルトの名無しさんNGNG
>>931, >>935
>>929 は結論は正しいが過程はでまかせ

どこがでまかせか、指摘してみ。
0938934NGNG
>>936
意味がわからん。
スコープ内で同じ構造体を二回以上初期化する必要があるということ?
もしそうならいいんだけど。
0939デフォルトの名無しさんNGNG
c=10;

c%50

は,0.5とかになるはずなんですが,なぜに10が返ってきますか?
0940デフォルトの名無しさんNGNG
>>939
> c=10;
> c%50
> は,0.5とかになるはず

なんて知識をどっから仕入れた ?
0941デフォルトの名無しさんNGNG
どーいう演算をしたら10と50から0.5がでてくるんだろう?
0942デフォルトの名無しさんNGNG
加算とインクリメントの区別ができない人間の集まるスレ。
0943935NGNG
>>937
結論以外全部ってのはダメかな。

主に↓の辺り。
> a++ は、(temp = a, a = a+1, temp) と言う形に展開される。
0944デフォルトの名無しさんNGNG
>>929は(2)と(3)が入れ替わってもbには加算される前のaが代入されるという罠
0945935NGNG
>>944
順序が入れ替わるかもしれないと本人も書いてるじゃん。
0946デフォルトの名無しさんNGNG
a++;ってその戻り値(?)を受け取らなければ最適化で++a;と同じコードが吐き出されることが多い?
0947デフォルトの名無しさんNGNG
>>946
a++ も ++a も a+=1 も a = a+1 も (temp=a,a=a+1,temp) も同じと思われ
0948デフォルトの名無しさんNGNG
だから>>929の論理だと、入れ替わってもbの値は変わらないんだって
0949デフォルトの名無しさんNGNG
>>947
さんきゅ。
じゃあ今までどおりforの中などではa++を使うわ。++aってなんか格好悪くて嫌い。
0950935NGNG
>>948
ごめん。意味がわかったよ。
0951デフォルトの名無しさんNGNG
>>950
いや、俺もまちがってたw
>>929の最後は"a=a++"の結果は保証されないって書いてあるので
0952935NGNG
>>948
やっぱり意味わかんないわ。 
0953デフォルトの名無しさんNGNG

新スレたてるよ。
0954935NGNG
>>951
とりあえず了解。
0955935NGNG
>>948
ああ、やっと意味わかったよ。
0956デフォルトの名無しさんNGNG
一年間に40スレ消費される勢いですね
0957935NGNG
>>955
騙るな。
0958953NGNG
>>1はひねらなくてもいいよね。
0959935NGNG
>>958
あ、どうもすみません。よろしくお願いします。
0960デフォルトの名無しさんNGNG
さっきブックマークを整理していたら、
偶然SHOW-Aのライブカメラのページが出てきた。
彼は変わりないようで、ちょっとさびしくマターリ
0961デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1033240509/

新スレ
過去ログなどは他の人に頼みます。
0962935NGNG
>>961
どうもおつかれです。過去ログは追加しました。
0963929NGNG
>>948
> だから>>929の論理だと、入れ替わってもbの値は変わらないんだって

お前、アホだろ。

b = a++; は、入れ替わろうが変わんないのは当たり前。

入れ替わって困るのは、a = a++; の時。(と書いてあるだろ。)

で、>>929 のどこがでまかせなんだ ?
0964デフォルトの名無しさんNGNG
>>963
後で訂正してるYO!
0965デフォルトの名無しさんNGNG
評価の順序とかの話ではなく、
単にa=a++の結果は未定義なのでは?

aがどんな値でもa=a++を実行すると100になるような処理系
もつくることは可能で、当然それはANSIに準拠している。
(そんなことする奴はいないだろうが・・・)
0966929NGNG
>>964
> 後で訂正してるYO!

ん ? どこで訂正してんのかよくわからんけど、>>929 は、正しいと言うことでいいのか ?
0967デフォルトの名無しさんNGNG
負け犬が遠吠えしているスレはここでつか?
0968デフォルトの名無しさんNGNG
http://yahooo.s2.x-beat.com/
0969デフォルトの名無しさんNGNG
こういう議論をみるたびに思うんだよな。

おまえら、本当にCが好きだな。と。
0970デフォルトの名無しさんNGNG
( ´,_ゝ`) プッ
今頃。
0971デフォルトの名無しさんNGNG
粘着厨ウザイ
0972デフォルトの名無しさんNGNG
ttp://nxt.sourceforge.jp/ のスレはここですか?
0973デフォルトの名無しさんNGNG
           ,. ''"´    ` ` 、          
           ;'            ':..      
          ;'      ===   ====     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ./        ●     ●    < ウタちゃんですが、何か?
        ./          ⌒  ▼⌒':     \________
  __  ./         彡  ∵人∵ノミ___
    ̄ ./  _         ミ   ノ"ミ ̄ ̄ ̄
   ̄ ̄ ̄ ̄ ̄━━ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ̄ ̄━━━ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0974デフォルトの名無しさんNGNG
結論:まあ、厨はインクリメント/デクリメント演算子は使うなってこった。
0975デフォルトの名無しさんNGNG
box[50][60];

char (*lpbox)[60];

lpbox=&box[60];

これでやると,おかしくなるんですが,どう直せばいいんでしょうか?

lpbox=&box[50];

でもおかしかったです
0976デフォルトの名無しさんNGNG
lpbox=box;

こうだろ?
0977デフォルトの名無しさんNGNG
>>975
新スレの方で質問した方がいいよ。
このスレには粘着厨と煽りしか残ってないもよう。
0978デフォルトの名無しさんNGNG
>>975
&box[60]はboxの60番目の要素(先頭を0番目とする)のアドレスだぜ。つまりbox+60。
0979デフォルトの名無しさんNGNG
>>975は質問する以前のレベル。
最初からポインタと配列を勉強しなおせ。
0980デフォルトの名無しさんNGNG
やっとうまくいきました
ありがとう
0981デフォルトの名無しさんNGNG
1000!
0982デフォルトの名無しさんNGNG
うめうめ。
0983デフォルトの名無しさんNGNG
ume
0984真・スレッドストッパー。。。&rlo;止停:&lro;NGNG
書けませんよ。。。( ̄ー ̄)ニヤリッ
0985偽・スレッドストッパー。。。NGNG
書けませすよ。。。( ̄ー ̄)ニヤリッ
0986デフォルトの名無しさんNGNG
うめやふやせや
0987デフォルトの名無しさんNGNG
987
0988未定義・スレッドストッパー。。。NGNG
書けるかもねぇ。。。( ̄ー ̄)ニヤリッ
0989デフォルトの名無しさんNGNG
ダレモイナイ…
0990デフォルトの名無しさんNGNG
(~_~)
0991デフォルトの名無しさんNGNG
久しぶりに1000げっちゅ
0992デフォルトの名無しさんNGNG
え〜んやこ〜ら
0993デフォルトの名無しさんNGNG
NULL
0994デフォルトの名無しさんNGNG
1000ぽ
0995デフォルトの名無しさんNGNG
さてと。
0996デフォルトの名無しさんNGNG
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50






0997デフォルトの名無しさんNGNG
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50


C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50

C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50


0998デフォルトの名無しさんNGNG

   ∧_∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ´∀`)/ < 先生!横から1000取ってもいいですか?
__ /    /    \___________
\⊂ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄ ̄||
0999デフォルトの名無しさんNGNG
1000げっちゅ
1000デフォルトの名無しさんNGNG
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50





10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。