C言語なら俺に聞け(入門篇) Part 52
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/08/17(月) 03:16:31初心者、初級者の方は他の質問スレのほうが良いかもしれません。
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
http://pc12.2ch.net/test/read.cgi/tech/1250204272/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 51
http://pc12.2ch.net/test/read.cgi/tech/1248445143/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0002デフォルトの名無しさん
2009/08/17(月) 03:24:50ほうがいいと思います。
0003デフォルトの名無しさん
2009/08/17(月) 04:59:510004デフォルトの名無しさん
2009/08/17(月) 05:30:440005デフォルトの名無しさん
2009/08/17(月) 07:34:10ARToolKit試したいけどjavaのがねーわ
0006デフォルトの名無しさん
2009/08/17(月) 09:55:29/ // /| r'7\ ,.ヘ‐'"´iヾ、/\ニ''ー- 、., / /
/ / | |::|ァ'⌒',ヽ:::ヽrヘ_,,.!-‐-'、二7-ァ'´|、__
`'ー-‐''" ヽ、_'´ `| |:::::|'" 二.,_> ,.へ_
/ //__// / / / `ヽ7::/
か っ も | / // メ,/_,,. /./ /| i Y //
ァ て う. |'´/ ∠. -‐'ァ'"´'`iヽ.// メ、,_ハ , |〉
| 約 ク ヽ! O .|/。〈ハ、 rリ '´ ,ァ=;、`| ,ハ |、 /
| 束 ソ > o ゜,,´ ̄ . ト i 〉.レ'i iヽ|ヽ、.,____
| し ス / ハ | u ,.--- 、 `' ゜o O/、.,___,,..-‐'"´
| た レ | / ハ, / 〉 "从 ヽ! /
| じ は |,.イ,.!-‐'-'、,ヘ. !、_ _,/ ,.イヘ. ` ヽ.
ッ .ゃ .立 |/ ヽ!7>rァ''7´| / ', 〉`ヽ〉
! ! な て .', `Y_,/、レ'ヘ/レ' レ'
い .な ヽ、_ !:::::ハiヽ. // /
で い ./‐r'、.,_,.イ\/_」ヽ ', / /
す / `/:::::::/ /,」:::iン、 / /
〈 ,,..-‐''"´ ̄ ̄77ー--、_\.,__ /
,.:'⌒ヽ ´ | | , i |ノ `ヾr-、
0007デフォルトの名無しさん
2009/08/17(月) 12:55:49いくつか隠しフォーマット(というか一般的に使われて無い)みたいなのがあったと思うんだけが・・・
誰か知ってる人いない?
0008デフォルトの名無しさん
2009/08/17(月) 13:07:31言語みたいなものだけど、MS以外の処理系は似たり寄ったり
合わせてるけどMSはバシバシ独自拡張してるね
気に食わないんだが、こういうレベルのまでC規格として
共通化制定されてしまうと別の意味で秩序が乱れてしまう
んで、基本的に処理系定義のものだと思ったほうがいいのかもね
0009デフォルトの名無しさん
2009/08/17(月) 13:18:250010デフォルトの名無しさん
2009/08/17(月) 13:37:29POSIXのprintf()のマニュアルくらいは目を通してから再質問してくれ。
まさかとは思うが、ISOの範疇で書かれた"%*.*s%n%%"の説明くらいできるよな。
0011デフォルトの名無しさん
2009/08/17(月) 13:59:450012デフォルトの名無しさん
2009/08/17(月) 14:34:510013デフォルトの名無しさん
2009/08/17(月) 14:40:51もう大抵の物クラスライブラリにしてるからprintfを使うことは、ほとんど無いんだが
気になるから、そのうちソース読んでみよう
サンクス
0014デフォルトの名無しさん
2009/08/17(月) 16:43:50普段使わないから忘れたけど・・・
0015デフォルトの名無しさん
2009/08/17(月) 16:56:430016デフォルトの名無しさん
2009/08/17(月) 17:12:35char *str = "abcdefg";
printf("%5s\n", str);
printf("%*s\n", 5, str);
printf("%*s\n", num, str);
こういう?
使ってみるとすぐ利点が理解できると思うよ。
0017デフォルトの名無しさん
2009/08/17(月) 17:35:07いろいろ数値を変えていじっててようやく意味が分かった。
*の中には精度用の値を入れられるのか。
0018デフォルトの名無しさん
2009/08/17(月) 17:37:56printf(buf, str);
を1手で実現できる
0019デフォルトの名無しさん
2009/08/17(月) 17:47:17こんな使い方もあるんだ。
目からうろことはまさにこのことだなあ。
sprintfはいろいろと便利だから使えるね。
いろいろと面白い情報ありがとうございました。
あ、あとちなみに僕は>>7ではないです。
0020デフォルトの名無しさん
2009/08/18(火) 09:32:400021デフォルトの名無しさん
2009/08/18(火) 17:33:250022デフォルトの名無しさん
2009/08/18(火) 17:39:07printfはsprintfで長く使うだろうけど、使うほど覚えるだろう。
でもこれに限らず、覚えることよりもさっと調べる手段を持つ方が大事。
0023デフォルトの名無しさん
2009/08/18(火) 18:02:50分かったよ!ありがとう!
0024デフォルトの名無しさん
2009/08/18(火) 18:45:000025デフォルトの名無しさん
2009/08/18(火) 20:56:06それとも小文字にするのが普通でしょうか?
書籍やネットで調べてみると、
struct BookShelf {};
のようにJavaのクラス名のような付け方と
struct bookshelf{};
のように全て小文字の付け方をする人が多いようです。
そしてFILEという構造体が何故大文字なのかが謎です。いつもFileと書いてコンパイルエラーに。。
0026デフォルトの名無しさん
2009/08/18(火) 21:27:27コーディングスタイルというやつ。いろいろなスタイルがあるからどれが一般的かとはいえない。
FILEに関しては「謎」ではなく大文字で定義してあるから。
一般にマクロ名称は大文字にすることが多い。しかし小文字にしたって悪くはない。
0027デフォルトの名無しさん
2009/08/19(水) 06:31:12俺の中では全部大文字が一般的だよ
0028デフォルトの名無しさん
2009/08/19(水) 17:48:36書籍を参考に勉強していたのですが、昨日完読しました。
他の言語の経験があるおかげなのか、書籍にあるポインタの説明はわりと楽に理解しました。
が、今日はUNIXのコマンドのソース読んでいて、ポインタに関する面白いコードを見つけました。
完読したC言語についての書籍は、ポインタに関する説明が物足りない気がします。
ポインタってもっと奥が深いものだと思ったのです。
というわけで、ポインタを完全にマスターできるような、おすすめの書籍を
紹介していただけたらと思います。
002928
2009/08/19(水) 17:51:27Amazonのレビューのいくつかにネガティブな意見もありました。
Rubyのまつもと氏もこの本を「迷教科書」と表現していました。
不安です。どうしたらよいでしょうか。。
0030デフォルトの名無しさん
2009/08/19(水) 17:52:20http://www.amazon.co.jp/dp/4774111422
これでも全てではないけどね
0031デフォルトの名無しさん
2009/08/19(水) 18:05:27そのほかポインタについてそこそこ語られているもの
エキスパートC何たら、これは知らない知識が載っていて満足
CプログラミングFAQ、手元にあれば安心できる
Cの強化書、まぁこれはこれで読みものとしてよかった
ここがへんだよ上下、実験的で蘊蓄野郎がなかなか強い
叫ぶなんたら、もう内容忘れた
003228
2009/08/19(水) 18:33:07アドバイスありがとうございます。
いろいろ悩みましたが、「エキスパートCプログラミング」を買うことにしました。
ポインタだけでなく、雑多でinterestingな内容があるみたいです。
Amazonなどでも良い評価をされています。
ありがとうございました。
0033デフォルトの名無しさん
2009/08/19(水) 18:46:28Java1.2辺りの仕様を指摘して批判してたりしていかにも時代錯誤という感じ。
そこそこ新しい本で定番の本買ったほうが無難な気もする。ポインタ本なんてたくさん出てるし。
0034デフォルトの名無しさん
2009/08/19(水) 18:54:57その本持ってるけど結構参考になったよ。初心者にとっては目から鱗な内容も多いと思う。
作者が毒を吐きたくてしょうがない性格みたいだから、嫌う人も多いみたいだけど。
本の元になったページ↓ここ読むだけでも結構参考になると思う。
http://kmaebashi.com/programmer/pointer.html
>Rubyのまつもと氏もこの本を「迷教科書」と表現していました。
http://kmaebashi.com/seiha/hosoku001.html
一応弁解(?)みたいなことが書いてある
0035デフォルトの名無しさん
2009/08/19(水) 19:25:36Cでは一から構造体を定義して連結リストを自分で作って、要素を削除・追加するための関数を書いて・・・とやらなければならないのでしょうか?
ある程度の規模になれば連結リストは当たり前のように使うだろうし、毎回同じようなコードを書くことになりそうです。
実際の開発現場などでは有名なライブラリとかフレームワークのようなものがあるのでしょうか?
0036デフォルトの名無しさん
2009/08/19(水) 19:56:01C99になってポインタまわりの挙動って変わったんだっけ?
0037デフォルトの名無しさん
2009/08/19(水) 20:07:33C++つかえば一通り揃ってる。
Cに限定して言うと、大抵のCプログラマはその手の自作ライブラリを溜め込んでる。
(会社やプロジェクトごとにライブラリを揃えてることもある)
ただ、メモリ効率や速度を気にしてその都度チューニングすることも多いけど。
0038デフォルトの名無しさん
2009/08/19(水) 20:07:510039デフォルトの名無しさん
2009/08/19(水) 20:20:10使ってるよ。
全部の機能を使ってるわけじゃないけど。
004035
2009/08/19(水) 22:35:06ありがとうございます。
なるほど、Cに限定すると世間一般で共通して使われてるようなモノは無いのですね。
すごく奥深そう。大学とかでじっくり勉強してみたかったなぁ。
C++も少し漁ってみましたがこちらはJavaに近いですね。
0041デフォルトの名無しさん
2009/08/20(木) 01:10:10希望いっぱい、夢いっぱい(笑)
だからライブラリは、いつも一新する。
流用できる? うるさい黙れ。
0042デフォルトの名無しさん
2009/08/20(木) 01:20:55それ言える(笑)
マジ言える!!
0043デフォルトの名無しさん
2009/08/20(木) 01:57:24もうはじめて3ヶ月もたつというのに・・・
0044デフォルトの名無しさん
2009/08/20(木) 02:02:24そりゃ遅いな。
0045デフォルトの名無しさん
2009/08/20(木) 02:06:210046デフォルトの名無しさん
2009/08/20(木) 02:11:29しかしそれをライブラリーと本気で呼ぶヤツがいたら
縁を切るしか。
0047デフォルトの名無しさん
2009/08/20(木) 02:19:440048デフォルトの名無しさん
2009/08/20(木) 02:22:36すげーなwww
無能な働き者でないことを願うばかりだ
0049デフォルトの名無しさん
2009/08/20(木) 03:07:330050デフォルトの名無しさん
2009/08/20(木) 11:08:16っていう配列testがあって、中身のデータ2Bを二桁の16進数文字として解釈して
ascii文字の+に変換したいのですが、そういうライブラリ関数みたいなのはありますか?
0051デフォルトの名無しさん
2009/08/20(木) 11:14:520052デフォルトの名無しさん
2009/08/20(木) 11:33:480053デフォルトの名無しさん
2009/08/21(金) 00:04:120054デフォルトの名無しさん
2009/08/21(金) 02:33:470055デフォルトの名無しさん
2009/08/21(金) 03:01:21冬コミにでも期待しとけ
0056デフォルトの名無しさん
2009/08/21(金) 06:05:17ニコニコのミクと学ぶC言語でも見てろ。
どうせ、動画見ただけで分かった気になって何も身につきはしないだろうがなw
0057デフォルトの名無しさん
2009/08/21(金) 10:10:480058デフォルトの名無しさん
2009/08/21(金) 13:38:260059デフォルトの名無しさん
2009/08/21(金) 13:39:120060デフォルトの名無しさん
2009/08/21(金) 14:19:10タイトルで有名になっているんじゃないかという
気がするのだが、どうなの?
実際良い本なの?
0061デフォルトの名無しさん
2009/08/21(金) 14:43:120062デフォルトの名無しさん
2009/08/21(金) 14:54:540063デフォルトの名無しさん
2009/08/21(金) 14:57:44俺今から作るわ
ちょっとまってろノシ
0064デフォルトの名無しさん
2009/08/21(金) 15:00:380065デフォルトの名無しさん
2009/08/21(金) 17:49:294種類くらい変化球作ってピッチャーに投げさせたんだけど、
投げるのはいいけどバッターが打つってどうすればいいの?
キー入力したタイミングで空振りとかヒットとかにしようと思ったんだけど、
ピッチャーがボール投げてる最中は割り込み出来ないからダメなの?
0066デフォルトの名無しさん
2009/08/21(金) 18:21:510067デフォルトの名無しさん
2009/08/21(金) 19:08:01フレーム管理にするかマルチスレッドにするかだよね
0068デフォルトの名無しさん
2009/08/21(金) 19:10:33これってただ小数点以下が切り捨てられるだけなのですか?
発見しづらいバグを誘発しそうでとても恐ろしいんですけど。
0069デフォルトの名無しさん
2009/08/21(金) 19:14:10警告は出るだろ。
警告レベル高めにして、警告がでないように書くってのはCでも基本。
0070デフォルトの名無しさん
2009/08/21(金) 19:17:49何も考えずにキャストしまくってバグだすよ。
0071デフォルトの名無しさん
2009/08/21(金) 19:25:26Cの勉強をせずにCでプログラムを書こうとする行為がとても恐ろしいんですけど。
0072デフォルトの名無しさん
2009/08/21(金) 19:32:51・・・
0073デフォルトの名無しさん
2009/08/21(金) 19:57:31int a[10] = { 0 };
でこの配列の全ての要素を0にできると思いますが
2次元配列や3次元配列の場合は同様にできないのでしょうか?
0074デフォルトの名無しさん
2009/08/21(金) 19:59:06同じようにできるさ
0075デフォルトの名無しさん
2009/08/21(金) 20:11:28int a[10][10] = { { 0 } };
でいいですか?
0076デフォルトの名無しさん
2009/08/21(金) 20:20:13慣れるとその類のバグはすぐ見つけられるようになるよ。
0077デフォルトの名無しさん
2009/08/21(金) 20:20:40俺も初心者で勉強中だが、こんな初歩的なものは自分で本かネットで調べろ。
聞いてばっかりじゃ伸びないよ。
0078デフォルトの名無しさん
2009/08/21(金) 20:27:29それではダメですか?
0079デフォルトの名無しさん
2009/08/21(金) 20:29:39だったかもしれない
0080デフォルトの名無しさん
2009/08/21(金) 20:52:43その書き方を認める処理系の信用度を1回だけ
デクリメントしておいてくれれば良い
0081デフォルトの名無しさん
2009/08/21(金) 21:24:07正解がわからねぇw
0082デフォルトの名無しさん
2009/08/21(金) 21:29:38p.97 例3 に書いてある。
なんかよくわからんが、コピペ出来ないようになってる・・・
要するに
int a[10][10] = {0};
でOK
>>75でも大丈夫じゃないか?
a[0][0]が0で初期化されて他の足りない要素も0で初期化されるわけだし。
0083デフォルトの名無しさん
2009/08/21(金) 21:30:31http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
ごめんこっちだった
008465
2009/08/21(金) 23:08:19ピッチャーの球種は乱数で決定する。
それでバッターはその球を打つ。
でも、実際ボールって打てない?
マルチスレッドって命令実行中に割り込むってことですか?
そんなことって出来るのでしょうか。
基本を教えて欲しいのですが。
0085デフォルトの名無しさん
2009/08/21(金) 23:11:310086デフォルトの名無しさん
2009/08/21(金) 23:12:39ぜんぜんできてないんじゃないか。
008765
2009/08/21(金) 23:24:35誰か解る人いない?
0088デフォルトの名無しさん
2009/08/21(金) 23:30:560089デフォルトの名無しさん
2009/08/21(金) 23:48:590090デフォルトの名無しさん
2009/08/21(金) 23:52:030091デフォルトの名無しさん
2009/08/21(金) 23:54:310092デフォルトの名無しさん
2009/08/22(土) 00:01:260093名無しさん
2009/08/22(土) 00:16:19#include <string.h>
int main(void)
{
char *p="A";
char *h="B";
char *rp;
int length;
length=p-h;
printf("%d\n",*p);
printf("%d\n",*h);
printf("%d\n",*p-*h);
printf("%d\n",length);
return 0;
}
これで最後のlengthが何故 -4 って出るかがわからない
上の*p-*hはA(64)-B(65)で-1ってわかるけど
length=p-h;これが何故-1なのか不明教えてくれ
0094名無しさん
2009/08/22(土) 00:18:060095デフォルトの名無しさん
2009/08/22(土) 00:20:24アドレスの引き算したんだろ
メモリ上に配置されてるんだけど4バイト境界で収まってるんじゃね?
メモリ上に
A\0??B\0??
という感じで
?のところは何が入ってるか不定という意味で使ってる
0096デフォルトの名無しさん
2009/08/22(土) 00:20:44一番最後の行は無いな
0097デフォルトの名無しさん
2009/08/22(土) 02:08:02これはポインタの引き算だけど、
二つのおぺらどんが同じ配列のオブジェクト
またはその配列の最後の要素の一つあとでないときは
不定となるっていうルールなので、
length のあたいは超不定。
0098デフォルトの名無しさん
2009/08/22(土) 02:21:050099デフォルトの名無しさん
2009/08/22(土) 05:35:310100デフォルトの名無しさん
2009/08/22(土) 05:46:35詐欺師乙
0101デフォルトの名無しさん
2009/08/22(土) 06:56:220102デフォルトの名無しさん
2009/08/22(土) 09:55:26「ピッチャー投げた」と表示
(内部でどの球種(コース)かは決められている)
↓
「バッターどうする?」と、その選択肢も書いて、
その後、scanfなどで入力待ち状態にし、
ユーザーに入力してもらう
1、速球のタイミングで積極的に打つ
2、変化球のタイミングで積極的に打つ
3、ボール球に気をつけて消極的に打つ
・・・など
↓
投手の投げた球種(コース)と打者の打ち方により、
結果(空振り、アウト、ヒットなど)を計算する
キー入力したタイミングで空振りとかは難しいかもしれない。
ピッチャー投げたの後にclockで時間を計り始め、
バッターの入力のタイミングが0.5秒だったら速球のタイミング、
0.6秒なら変化球のタイミングとかできるかもしれないけど。
010393
2009/08/22(土) 10:11:29基本情報の午後問でlengthが使われていて。
void convert(const char *path, const char *base, char *result)
const char *pp, *bp;
int length;
Cの答えがlength=bp ‐base
これもあのわかりずらいアドレスの引き算なのか?
0104デフォルトの名無しさん
2009/08/22(土) 10:14:130105デフォルトの名無しさん
2009/08/22(土) 10:46:25後から宣言したbはaよりも後ろのほうに配置されただろう、なんて思い込みはやめること。
0106デフォルトの名無しさん
2009/08/22(土) 10:48:080107デフォルトの名無しさん
2009/08/22(土) 11:07:29010893
2009/08/22(土) 11:11:44C言語でRPG作ってんだけど
2次元配列でマップつくってswitchでキャラおいて。
扉も作って持ち物メニューとステータスも作った。
もちろん、鍵を使う?Y/Nも実装して扉の前の座標にたって、鍵の名前をstrcmpで一致させて
そしたら開くようにした。
0109デフォルトの名無しさん
2009/08/22(土) 11:13:160110デフォルトの名無しさん
2009/08/22(土) 11:49:22ネタなのか本気なのか罠なのか
0111デフォルトの名無しさん
2009/08/22(土) 11:52:21ある程度知識つけたら、後はひたすら書いてけばそのうちなれるし。
0112デフォルトの名無しさん
2009/08/22(土) 11:58:30独習Cは1冊目に読むには向かないとは思う。
0113デフォルトの名無しさん
2009/08/22(土) 12:04:390114デフォルトの名無しさん
2009/08/22(土) 12:18:01#define HOGE(aaa)
#define HAGE(bbb) HOGE(bbb)
のような記述があります
使われ方から察するに、 HOGE を変数のように扱って、 HAGE(bbb) は
HOGE に bbb を入れているようなのですが、
その考えで正しいのでしょうか?
0115デフォルトの名無しさん
2009/08/22(土) 12:36:560116デフォルトの名無しさん
2009/08/22(土) 12:46:25どう違うんでしょうか?
ググっても入門書読んでも分からなかったんで聞いているんで
分かるようでしたら教えていただけると幸いです
0117デフォルトの名無しさん
2009/08/22(土) 12:51:140118デフォルトの名無しさん
2009/08/22(土) 12:58:06分からない人に分かるように説明してもらえると助かるんですが
0119デフォルトの名無しさん
2009/08/22(土) 12:59:57#define HOGE(aaa)
とはどういう意味なんですか?
0120デフォルトの名無しさん
2009/08/22(土) 13:04:570121デフォルトの名無しさん
2009/08/22(土) 13:09:11なら分かりますが、
#define HOGE(aaa)
は分かりません。
0122デフォルトの名無しさん
2009/08/22(土) 13:10:27#define HOGE(aaa) xxxxxx(aaa,0x01)
これはxxxxxx関数の引数を2つ用意したけど実際は第一引数しかかわなくなったとかで
マクロを使った場合のイメージ
0123デフォルトの名無しさん
2009/08/22(土) 13:12:12では、お分かりになる
#define HOGE(aaa)
の方で結構ですので教えていただけると助かります。
0125デフォルトの名無しさん
2009/08/22(土) 13:23:52挙げていただいた例は分かります
これは
HOGE(aaa) が xxxxxx(aaa,0x01) に置き換えられるのですよね
しかし、問題のソースは
#define HOGE(aaa)
とだけあって、本来これを置き換えるであろう文字列が存在していないのです
知識不足の私はこのようなコードは今回初めて見ました。
質問の元となったソースというのはMPEG1デコードライブラリ(ttp://chihara.aist-nara.ac.jp/people/97/shuuji-o/mpeg_lib/mpeg_lib-1.3.0.tar.gz)
のutil.hにある
#define UPDATE_COUNT(numbits)
の一文です。このソースはUNIX上ではビルドできるらしいのでコードが間違っているということは恐らくないと思います。
0126デフォルトの名無しさん
2009/08/22(土) 13:27:02ソース及びヘッダ等関連ファイルのテキスト検索やってみた?
UPDATE_COUNT(
とかをキーワードにして
使われなくなって放置されてるとかそういうのではないの?
0127デフォルトの名無しさん
2009/08/22(土) 13:28:10マクロってのは単純に置き換えるだけだから、
#define HOGE(x)
は何も無い状態に置き換える(削除する)
0128デフォルトの名無しさん
2009/08/22(土) 13:29:170129デフォルトの名無しさん
2009/08/22(土) 13:38:35grepしてみたところutil.h内でしか使われていません。
util.hにはバイトアライメントされていないデータを読込むためと思われるコードがあり、
例えば3bit読込むマクロには
UPDATE_COUNT(3); \
のようにUPDATE_COUNTの引数には読込んだbit数が入っています。
しかし、それを何かに使っている様子がないので
一体何のためにあるのかまったく分かりません。
もしかしたら使われずに放置されているのかもしれませんね
>>127
なるほど、そういうことでしたか
確かに何もない状態に置き換えになりますね
0130デフォルトの名無しさん
2009/08/22(土) 13:57:29現場でやっていけるのか不思議に思うんだけど、今はそれが主流なのかな
0131デフォルトの名無しさん
2009/08/22(土) 14:10:510132デフォルトの名無しさん
2009/08/22(土) 14:13:12とりあえず、コメント読んどけ
~/mpeg_lib-1.3.0% sed -n 44,45p util.h
/* Macro for updating bit counter if analysis tool is on. */
#define UPDATE_COUNT(numbits)
0133デフォルトの名無しさん
2009/08/22(土) 18:57:29アドレス先の問題において、bpはもともとbaseを基にしたアドレスでしょ。
>>93とはまったく意味合いが異なる。
ってか文字列長出すならちゃんと終端文字の位置探せ。
0134デフォルトの名無しさん
2009/08/22(土) 23:25:31フローチャートをうまくコツってありますか?
0135デフォルトの名無しさん
2009/08/22(土) 23:26:360136デフォルトの名無しさん
2009/08/22(土) 23:27:36Cのコードを書いて、そこからフローチャート起こすと、楽で早いよ。
0137デフォルトの名無しさん
2009/08/22(土) 23:28:060138デフォルトの名無しさん
2009/08/22(土) 23:28:18フローチャートかあ。まだ教えているとこあるの?
0139デフォルトの名無しさん
2009/08/22(土) 23:35:32どうせ見ないだろおまえと言ってしまった
0140デフォルトの名無しさん
2009/08/22(土) 23:52:430141デフォルトの名無しさん
2009/08/23(日) 00:00:05いらないな、うん。
0142デフォルトの名無しさん
2009/08/23(日) 04:48:46または、順序や条件が複雑な問題を考えるときに、頭ん中を整理したくて書きたいことはあるな。
0143デフォルトの名無しさん
2009/08/23(日) 06:01:44フローチャートの意味がまったくない
0144デフォルトの名無しさん
2009/08/23(日) 06:18:54フローチャートで整理することもあるよ。
0145デフォルトの名無しさん
2009/08/23(日) 10:13:31いるけど、初心者はマにうけないようにな。
フローチャートは特別表現力が高いわけじゃないし、描くのも、
プログラミング言語に比べたらすごい労力になるから、そういう用途に
つかったら、ひどい目にあう。
0146デフォルトの名無しさん
2009/08/23(日) 10:43:38フローチャートって、裏紙に適当に描くものだろ。ホワイトボードでもいいけど。
0147デフォルトの名無しさん
2009/08/23(日) 10:46:43今の開発規模やプログラムの作り方では使いにくにくいんだよな
フローチャートとかねえ
そういえば某H社が使う変なチャート図はなんていうんだろ
0148デフォルトの名無しさん
2009/08/23(日) 13:16:54フローチャートは禁止しましょう。フローチャートは制御の流れを「もろ」に書けてしまうので良くありません。
0149デフォルトの名無しさん
2009/08/23(日) 13:40:09フローそのものが解決したい問題の本質であるときは、それを「もろ」に書くために有用。
0150デフォルトの名無しさん
2009/08/23(日) 13:54:280151デフォルトの名無しさん
2009/08/23(日) 15:49:00かっこつけか伝統とかしかないな。
書くだけ 無 駄 なんだよ
プログラマーのステータスだろ フローチャートを書いて、ブログやHPに載せて見せびらかすのはww
0152デフォルトの名無しさん
2009/08/23(日) 15:58:14ITに進むやつはバカで知的にみられたいのか知らんがバカがおおすぎww
必死にgrepネタ出してるけどそれで何かするわけでもないしコマンドを覚えて無駄ww
なんだかんだいってエクセルとワードを使いこなせるやつのほうが世間一般的にウケがいいなw
0153デフォルトの名無しさん
2009/08/23(日) 16:00:110154デフォルトの名無しさん
2009/08/23(日) 16:01:16うっせーんだよITドカタw
マ板にいけ。
0155デフォルトの名無しさん
2009/08/23(日) 16:01:58芸能界は覚せい剤など、コネなどステータスかと思ってマネするのと同じだなww
0156デフォルトの名無しさん
2009/08/23(日) 16:04:46状態遷移図やシーケンス図なども駆使して多角的に表現できなくてはならない。
0157デフォルトの名無しさん
2009/08/23(日) 16:12:48wの数を数えると
そいつの程度の低さが分かるって言うけど本当なんだね。
0158デフォルトの名無しさん
2009/08/23(日) 16:17:460159デフォルトの名無しさん
2009/08/23(日) 16:24:09スレ立てて別のところでやれ
0160デフォルトの名無しさん
2009/08/23(日) 17:38:46このスレないで収めてくれ
0161デフォルトの名無しさん
2009/08/23(日) 17:42:420162デフォルトの名無しさん
2009/08/23(日) 17:44:160163デフォルトの名無しさん
2009/08/23(日) 17:45:050164デフォルトの名無しさん
2009/08/23(日) 18:12:14K&Rのライブラリの説明はあまりにも簡素すぎて今の私には使いこなせません。
0165デフォルトの名無しさん
2009/08/23(日) 18:18:130166デフォルトの名無しさん
2009/08/23(日) 18:37:56MS-Cの頃は、それなりの書籍があって、MS-C 独自関数も含めて標準ライブラリの使い方を書いた本があったんですけどね。
今はどうかな?
0167デフォルトの名無しさん
2009/08/23(日) 19:34:28システムコールレベルのコード読んでると標準ライブラリ見てるだけでは気付かなかったことが色々分かってくる。
Javaから始めた人がCを勉強して色々気付くのと同じ感覚。
0168デフォルトの名無しさん
2009/08/23(日) 21:05:260169デフォルトの名無しさん
2009/08/23(日) 21:20:43昔からそうやって利用者を囲い込む姑息な企業だからな。
0170デフォルトの名無しさん
2009/08/23(日) 21:28:270171デフォルトの名無しさん
2009/08/23(日) 21:38:43ちょっとちがうけど「Cプログラム診断室」は?
人の書いたコードをけなしながら「そういう処理は標準関数をこうつかえよw」みたいな
つっこみがいっぱいあったような記憶が。
今でもネットで見れると思う。
0172デフォルトの名無しさん
2009/08/23(日) 21:55:27「キーボードから整数の入力を受け取って、それを10倍した値を返す関数を作って下さい。」
という問題で下記を作ったのですが、失敗作のようです。
どこがどう間違っているのか解説お願いします。
#include<stdio.h>
int sum(void);
int main(void)
{
sum();
printf("%d",(int)(num * 10));
return 0;
}
int sum(void)
{
printf("整数を入力してください\n");
scanf("%d",&num);
return 0;
}
0173デフォルトの名無しさん
2009/08/23(日) 21:56:32南無
0174デフォルトの名無しさん
2009/08/23(日) 22:02:00#include<stdio.h>
int sum(void);
int main(void)
{
printf("%d\n",sum());
return 0;
}
int sum()
{
int num;
scanf("%d",&num);
return num*10;
}
こう
0175デフォルトの名無しさん
2009/08/23(日) 22:04:000176デフォルトの名無しさん
2009/08/23(日) 22:05:31おまえ、雑記帳ってサイトでネタにされてたよ。
0177デフォルトの名無しさん
2009/08/23(日) 22:11:14でぐぐれかす
0178デフォルトの名無しさん
2009/08/23(日) 22:12:19ありがとうございます!
自分のだと自作関数内の数値がメイン関数に反映されてないっぽいですね。
見比べながら復習しようと思います。参考になりました。
0179デフォルトの名無しさん
2009/08/23(日) 22:13:55POSIXいいぞ。
教科書どおりのfopenとかだけで20年以上飯食えてるからな。
0180デフォルトの名無しさん
2009/08/23(日) 22:28:36僕は意味不明なファイルがどういうものか知りたくて
(たとえばCドライブにあるsetting.iniとかを見て「こいつはこのソフトを動かすのに使われているんだな」って分かるような)
プログラミングを始めました。言語はVB.NETです。
それで、VBの方は簡単なゲームを作れるところまでできてきたのですが、当初の目的の
「ファイルがどういうものかを知る」というのがいまひとつピンときません。
VBだから当たり前なのかもしれないのですが、なぜかC言語なら分かる気がしたのでVisualC++をとりあえずインストールしました。
そこで伺いたいのは、別にCとかC++とか関係なくC系の言語を学べばファイルというものがどういうものなのか理解できるのでしょうか?
本当にあいまいな質問ですみません。
また、職業はプログラマとかではないので将来プログラミングをバリバリ使って働くわけでもないです。
そういう意味で僕の目的を満たすには、C言語を学ぶのはオーバーワークなんでしょうか?
ご回答よろしくお願いします。
018193,174
2009/08/23(日) 22:36:47C言語がいちばん簡単だから安心しろ^^
資料もおおいし。
最初からPythonとかマイナー言語進める奴はバカだな
何かの記事でハッカーはPythonを使うとかバカの一つ覚えてかっこいいと思って使ってる奴が多い。
名前が蛇みたいでかっこいいとか^^;(滝汗)
0182デフォルトの名無しさん
2009/08/23(日) 22:40:09VBでもファイルを読み書きしたり、作ったりと言うようなプログラムは作れるでしょ。
0183デフォルトの名無しさん
2009/08/23(日) 22:41:54setting.iniに関していえば、初期設定情報をファイルとして外に出したと思っていい。
0184デフォルトの名無しさん
2009/08/23(日) 22:42:23救いようのない馬鹿だな。
何調子のってんだ?
0185デフォルトの名無しさん
2009/08/23(日) 22:45:11消えろカス
0186デフォルトの名無しさん
2009/08/23(日) 22:45:32これはいい燃料ですね
とりあえず.NETならXMLという話をどこかできいた
0187デフォルトの名無しさん
2009/08/23(日) 22:46:09018893,174
2009/08/23(日) 22:46:31Pythonをやればハッカーだと思って勉強しちゃったカスですか かっこわらい
018993,174
2009/08/23(日) 22:47:180190デフォルトの名無しさん
2009/08/23(日) 22:47:55ポインタも理解できないお前の方がカスだけど(爆笑)
019193,174
2009/08/23(日) 22:49:260192デフォルトの名無しさん
2009/08/23(日) 22:50:28Pythonで挫折したんですね、わかります。
0193デフォルトの名無しさん
2009/08/23(日) 22:51:170194デフォルトの名無しさん
2009/08/23(日) 22:52:35どうした?
夏休みの宿題が終わらなくて泣いているのかな?w
じゃあてめぇが素晴らしい言語を設計してみろカス
0195デフォルトの名無しさん
2009/08/23(日) 22:53:19無いっていうのを聞いて驚いたんだが、今はそういうのが多いの?
0196デフォルトの名無しさん
2009/08/23(日) 22:53:59ただの一度も完遂したことがないな
0197デフォルトの名無しさん
2009/08/23(日) 22:54:11#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="A";
char *h="B";
char *rp;
int length;
length=p-h;
printf("%d\n",*p);
printf("%d\n",*h);
printf("%d\n",*p-*h);
printf("%d\n",length);
return 0;
}
これで最後のlengthが何故 -4 って出るかがわからない
上の*p-*hはA(64)-B(65)で-1ってわかるけど
length=p-h;これが何故-1なのか不明教えてくれ
0198デオフォルトの名無しさん
2009/08/23(日) 22:54:27どうした?
夏休みの宿題が終わらなくて泣いているのかな?w
じゃあてめぇが素晴らしい言語を設計してみろカス
0199デフォルトの名無しさん
2009/08/23(日) 22:55:02#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="A";
char *h="B";
char *rp;
int length;
length=p-h;
printf("%d\n",*p);
printf("%d\n",*h);
printf("%d\n",*p-*h);
printf("%d\n",length);
return 0;
}
これで最後のlengthが何故 -4 って出るかがわからない
上の*p-*hはA(64)-B(65)で-1ってわかるけど
length=p-h;これが何故-1なのか不明教えてくれ
0200デフォルトの名無しさん
2009/08/23(日) 22:55:25ファイルってのは標準関数でオープンしたりするあれ?
それとも特定の開発現場でSQLを使わなくてアクセスできるあれのこと?
0201デフォルトの名無しさん
2009/08/23(日) 22:56:16もういいそれは見飽きた貼るな
020293,174
2009/08/23(日) 22:57:28くやしいのぅwwwwwww草w
0203デフォルトの名無しさん
2009/08/23(日) 22:59:03標準関数でオープンしたりするアレ。
特定の開発現場は知らん。
0204デフォルトの名無しさん
2009/08/23(日) 22:59:13低能の釣りに低能が釣られる
0205デフォルトの名無しさん
2009/08/23(日) 22:59:52よっぽど高級なことやってたに違いない
アルゴリズマー
0206デフォルトの名無しさん
2009/08/23(日) 23:00:01> C言語がいちばん簡単だから安心しろ^^
簡単なことで躓いている奴が言う台詞じゃねぇ・・・w
0207デフォルトの名無しさん
2009/08/23(日) 23:00:46まあ分業でやることが増えてるからそういう人もいるんじゃないの?
020893,174
2009/08/23(日) 23:01:05おいおい、見苦しいぞ低脳君 かっこわらい
0209デフォルトの名無しさん
2009/08/23(日) 23:02:160210デフォルトの名無しさん
2009/08/23(日) 23:02:47まだ終わらないのか>夏休み
>>93はこれでもみてろ
http://www.b-ch.com/flash/mv_det.php?sq=1&msc=10
0211180
2009/08/23(日) 23:03:47>>182
確かにそうですね。その辺りもやってみます。
>>183
それについてはネットで検索して「なんとなく分かるような分からないような」という感じです。
でも、教えていただきありがとうございます。
>>186
xmlですか。
そういえば以前ちょっとだけやって何に使うんだろうと思ったことはあります。
やっぱりファイルといえども全部を理解しようとするのは無理なのかもしれなかったです。
C言語をやるかどうかはもう少し考えてみたいと思います。
0212デフォルトの名無しさん
2009/08/23(日) 23:04:450213デフォルトの名無しさん
2009/08/23(日) 23:05:130214荻原
2009/08/23(日) 23:07:180215デフォルトの名無しさん
2009/08/23(日) 23:09:37ファイルの識別をしたいのか?もちろんVBでもできるよ。
大抵のファイルにはヘッダやフッダがあるから、バイナリで先頭数バイトを読んでみれ。
ヘッダ一覧は別ファイルでDBにでもしておけばいいだろう。
0216180
2009/08/23(日) 23:18:23VBでもできるんですか!
自分の勉強不足で全く知りませんでした。
それではもう少しVBをやってみたいと思います。
スレ違いの質問に答えて下さりありがとうございました。
0217デフォルトの名無しさん
2009/08/23(日) 23:21:03iniなんかはWindowsAPIに読み書き関数が用意されていて
フォーマットも分かりきっているけど
「俺は■■■みたいに書いて△☆ミのように読みたいんだ!」っつーフォーマットを自分で決めればいい
0218デフォルトの名無しさん
2009/08/24(月) 00:28:13極窓か?識別プログラム自体は楽だろうが、
ファイルのヘッダのデータ収集が一番めんどくさそうだ。
0219デフォルトの名無しさん
2009/08/24(月) 00:34:12gccでコンパイルする時にコンパイラは何を元に関数の実体の場所を探しているのですか?
たとえばJavaであればclasspathというのがありますが、Cにも独自の環境変数が用意されているのでしょうか?
0220デフォルトの名無しさん
2009/08/24(月) 00:35:250221デフォルトの名無しさん
2009/08/24(月) 00:42:31結構色々なソフトがありますが、ファイル数が多いとハッシュを取得するのに結構案時間がかかってしまいます。
なので、咲にファイルサイズを取得してから同一のサイズのファイルだけハッシュの取得、比叡するという事をしたいです。
どうすればいいですか?
0222221
2009/08/24(月) 00:44:370223デフォルトの名無しさん
2009/08/24(月) 00:47:13リンカオプションですべてのファイルの位置をちゃんとぴっちり設定する必要があるのだ。
0224デフォルトの名無しさん
2009/08/24(月) 01:02:410225デフォルトの名無しさん
2009/08/24(月) 01:03:53一応ファイルスコープだ
0226デフォルトの名無しさん
2009/08/24(月) 02:18:360227デフォルトの名無しさん
2009/08/24(月) 17:31:050228デフォルトの名無しさん
2009/08/24(月) 17:53:240229デフォルトの名無しさん
2009/08/24(月) 18:16:41MD5 アルゴリズムそのものは↓
ttp://www.ipa.go.jp/security/rfc/RFC1321JA.html
もっとも早くの"早く" が実行速度を指しているのだったらワカラン
0230デフォルトの名無しさん
2009/08/24(月) 21:04:5452枚のトランプカードから2枚引くプログラム作ってみてコンパイル通ったけどおかしな数値しか出てこないんだ
構造体でマークと数字を別々に保管してるの作ろうとしたら二枚目で同じカード引かないようにするトコで行き詰ってこういう形になった
要するに配列52個用意して一度引いた配列に0代入して同じの引かないように作ったんだが、何か間違ってたんだろうか
int i,j,x,y,z=0;
int pcard[2];
//プレイヤーの引いたカード・今回は二枚なので
char *mark[]={"Diya","Clober","Spade","Heart"};
//数字をマークに変換する為の変数
srand(time(NULL));
//乱数の種をまく
int allcard[52];
x=1;
for(x=1;x<5;x++){
y=x*100;
for(i=0;i<13;i++){
allcard[z]=i+y+1;
z++;
}
}
//52種類のカードを用意
//100の位がマーク
//1〜10の位でカードの数字
for(i=0;i<52;i++){
printf("%d\n",allcard[i]);
}
//確認用
0231デフォルトの名無しさん
2009/08/24(月) 21:05:44printf("まずは一枚目です。");
j=0;
//jは今が何枚目のカードなのか
while(getchar()!='\n'){}
i=rand()%52;
//出した乱数をとりあえず変数に保存しておく
pcard[j]=allcard[i];
allcard[i]=0;
//今回引いたカードにはゼロを入れておく
printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
//プレイヤーカードを100で割った余りのを出力
//プレイヤーカードを100で割った数値に対応したマークを表示
j=1;
//プレイヤーカード二枚目
printf("\n二枚目を引いてください。\n");
while(getchar()!='\n'){}
i=rand()%52;
pcard[j]=allcard[i];
while(allcard[i]==0){
i=rand()%52;
pcard[j]=allcard[i];
}
//既に引いたカードならやり直し
allcard[i]=0;
//今回引いたカードにゼロを入れておく
printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
0232デフォルトの名無しさん
2009/08/24(月) 21:13:34まずアプローチがちがう
配列 シャッフル
でggrks
0233デフォルトの名無しさん
2009/08/24(月) 21:21:27その本は焼き捨てるか、
窓から投げ捨てると良いよ。
このご時世ならリサイクルもありだな。
0234デフォルトの名無しさん
2009/08/24(月) 21:43:22pcard[i]%100じゃなくて、,pcard[j]%100だろ
0235デフォルトの名無しさん
2009/08/24(月) 21:54:13ありがとうございます。視力が弱いせいでiとjが同じに見えてました
凡ミス・・・確認不足・・・恥ずかし・・・もうちょっと区別の付きやすい変数にしとこ・・・xyz使い回すか
0236デフォルトの名無しさん
2009/08/24(月) 22:02:17allcard[i] = allcard[51-j];
i = rand() % (52 - j);
0237デフォルトの名無しさん
2009/08/24(月) 22:33:012プロセス間(A,B)でメッセージ通信を行っています。
この際に例えばAでBからのメッセージ1を受信後、さらにBよりメッセージ2を受信しようとすると、
セグメンテーションエラーがでます。
GDBを利用してデバッグしましたが、具体的にエラーが出ている行数や関数名等が表示されず、
大変困っています。
0238デフォルトの名無しさん
2009/08/24(月) 22:35:37謝罪と賠償ニダ
0239デフォルトの名無しさん
2009/08/24(月) 22:39:41とりあえずソースを見せろ
0240デフォルトの名無しさん
2009/08/24(月) 23:47:53独習Cってそんなにまずいの?w
2回も読んだよ
0241デフォルトの名無しさん
2009/08/25(火) 00:00:17ともかく平易で読みやすくキレイにまとまってはいるんだけど
平易にしすぎるせいか、意味があいまいだったり、
コードが安全でなかったりするんだよね。
STL標準講座も標準講座MFCもそんな感じだった。
とっかかりの本としてはいいんだけど
それだけで終わるとプログラマとしても終わってしまう。
別の本で、曖昧な箇所をきっちり矯正しておく必要あり。
ある程度他の言語を使ってきた人には二度手間本。
0242デフォルトの名無しさん
2009/08/25(火) 00:03:360243デフォルトの名無しさん
2009/08/25(火) 00:04:480244デフォルトの名無しさん
2009/08/25(火) 00:32:49コア吐かせれば何か分かるでしょ。
0245デフォルトの名無しさん
2009/08/25(火) 00:37:57*((char*)p+1)なことやってるとか
handleを生ポインタで扱ってるとか
作って消して渡して読み取ってるとか
そもそもメッセージングには何使ってるんだおい
0246デフォルトの名無しさん
2009/08/25(火) 01:06:46旧型PS3:
Linuxインストール機能内蔵でPS3をPCとして使うことができる。
PPC Linux用の無料のソフトがいっぱい動く。
また、Cellの開発ツールも無料で入手できるので自分でCellのプログラムを作って実行させることができる。
ドルビーTrueHD、DTS-HDMAはリニアPCM変換で対応。
HDD〜80G
実勢価格36000円程度
薄型PS3:
Linuxインストール機能は除去された。
ブラビアリンク機能でブラビアと連動した電源のON OFFができる。
ドルビーTrueHD、DTS-HDMAのビットストリーム出力対応。
HDD120G
比較して低騒音低発熱
実勢価格29980円
0247デフォルトの名無しさん
2009/08/25(火) 09:59:48何?nanなの?
0248デフォルトの名無しさん
2009/08/25(火) 13:11:54ぐっときた
0249デフォルトの名無しさん
2009/08/25(火) 14:24:23iとjを見分ける労力=無駄【目がチカチカ】
http://pc12.2ch.net/test/read.cgi/tech/1243509968/
このスレ思い出したw
0250デフォルトの名無しさん
2009/08/25(火) 18:49:570251デフォルトの名無しさん
2009/08/25(火) 19:12:27lと1の区別がつかないのもあるし、mとnも似てるし、oは0と混同するし、qは9と似てる場合もあるし。
0252デフォルトの名無しさん
2009/08/25(火) 19:13:390253デフォルトの名無しさん
2009/08/25(火) 20:37:20消費税1.05%込み、答えは整数で。
って言う問題でコレ作ったんだけどコンパイルできない。
正答は知ってるけど、全然違うやり方だし、コレのどこがおかしいのか知りたいので
アドバイスお願いします。
#include<stdio.h>
int main(void)
{
int juice,milk,money,change,tax;
juice = 198;
milk = 138;
money = 1000;
tax = 1.05;
printf("%d",(int)(tax * (money - (juice + milk * 2))));
return 0;
}
0254253
2009/08/25(火) 20:39:28コレです。
#include<stdio.h>
int main(void)
{
int juice,milk,money;
double tax;
juice = 198;
milk = 138;
money = 1000;
tax = 1.05;
printf("%d\n",(int)(tax * (money - (juice + milk * 2)));
return 0;
}
0255デフォルトの名無しさん
2009/08/25(火) 20:43:37エラーメッセージを読め、馬鹿
0256デフォルトの名無しさん
2009/08/25(火) 20:47:330257デフォルトの名無しさん
2009/08/25(火) 20:57:310258デフォルトの名無しさん
2009/08/25(火) 21:01:040260デフォルトの名無しさん
2009/08/25(火) 23:00:43ブロック内でvalue2の宣言をしていないのに普通に使え、ブロック外でもブロック内での変更が
有効なのはなぜですか?
普通だったらブロック内→使えない ブロック外→20になるように思えるのですが。
#include <stdio.h>
int main(void)
{
int value1 = 10;
int value2 = 20;
printf("1:value1 %d\n",value1);
printf("1:value2 %d\n",value2);
{
int value1;
value1 = 30;
value2 = 40;
printf("2:value1 %d\n",value1);
printf("2:value2 %d\n",value2);
}
printf("3:value1 %d\n",value1);
printf("3:value2 %d\n",value2);
return 0;}
実行結果
1:value1 10 1:value2 20
2:value1 30 2:value2 40
3:value1 10 3:value2 40
0261デフォルトの名無しさん
2009/08/25(火) 23:04:00>普通だったらブロック内→使えない ブロック外→20になるように思えるのですが。
それはどこの言語のルールだ。
Cではこれが普通なのだ。
仕様どおりなのだ。
0262デフォルトの名無しさん
2009/08/25(火) 23:04:53%d→%pにしてみりゃわかる。
0263デフォルトの名無しさん
2009/08/25(火) 23:05:330264デフォルトの名無しさん
2009/08/25(火) 23:06:38>>260
{
int value1;
value1 = 30;
value2 = 40;
printf("2:value1 %d\n",value1);
printf("2:value2 %d\n",value2);
}
はブロック外でなくブロック内。
0265デフォルトの名無しさん
2009/08/25(火) 23:08:14ブロック内で宣言しなかったらブロック外の変数をそのまま使用。
0266デフォルトの名無しさん
2009/08/25(火) 23:10:160267デフォルトの名無しさん
2009/08/25(火) 23:10:57ありがとうございます。もう少し詳しく説明してもらってもいいですか?
ローカル関数の寿命はブロック内、value1は別ブロック内で宣言されているので、
当初のvalue1とは名前が同じだけの別物の変数ですよね?
value2が宣言なしに別ブロック内で使えていること(このvalue2は当初のvalue2と同じものなのか別物なのか)
別ブロックを抜けたあとにも関わらず当初宣言されていた20が適用されず40になっていること
ここがよく理解できません。よろしければ詳しいアドバイスお願いします。
0268デフォルトの名無しさん
2009/08/25(火) 23:19:28でもこのスレはCだから面倒だなあ
0269デフォルトの名無しさん
2009/08/25(火) 23:19:480270デフォルトの名無しさん
2009/08/25(火) 23:23:51話は単純なのだ。変数は宣言されたスコープ内では常に有効だ。
A{
B{ }
}
のような場合、B{ }の中はA{ }のスコープの中でもあるのだ。
だからA{}の中で宣言された変数はB{}の中でも使えるのだ。
そんだけ。
0271デフォルトの名無しさん
2009/08/25(火) 23:24:53すみません、ポインタはまだ勉強していないのでよく分かっていません。
>>263
ググってみましたがC言語での説明が見つからなかったので、後で詳しく調べてみます。
>>264
{ (ブロック1){ (ブロック2)} } とした場合、ブロック1=ブロック2となるのでしょうか?
>>265
value2はブロック2で宣言されていなかったのでブロック1と同じものになるということでしょうか。
このルールは、例えば { (ブロック1)} {ブロック2 } といった環境でも適用されますか?
0272デフォルトの名無しさん
2009/08/25(火) 23:25:121.上位ブロックで定義されたシンボルは下位ブロックでも同じものとして参照できる。
2.上位ブロックで定義されたものと同じシンボルが下位ブロックで定義されたら
それは別物とする。
こういう規則ですよ。
0273デフォルトの名無しさん
2009/08/25(火) 23:26:09なるほど!!!理解することができました。
皆様親切にどうもありがとうございます、とても助かりました!
0274デフォルトの名無しさん
2009/08/25(火) 23:31:09ありがとうございます!おかげさまで完全に理解できました。
そのルールで考えると
下位ブロック内でのvalue1は別物であり下位ブロック内のみで有効、
下位ブロック内でのvalue2は上位ブロックと同じもの
となるのですね。詳しい説明、どうもありがとうございました。
0275デフォルトの名無しさん
2009/08/25(火) 23:32:07ブロック内で宣言した変数はブロック内でのみ有効。
だからブロックが終了したらそれと同時に破棄される(例外はあるが)。
どうしてもブロック外の変数が使いたいなら、{ }以外の場所で
グローバル変数として宣言すべき。
0276デフォルトの名無しさん
2009/08/25(火) 23:32:26はい、そのとおりです。
0277ドクターゲロ
2009/08/25(火) 23:36:150278デフォルトの名無しさん
2009/08/25(火) 23:37:440279ブリーフ博士
2009/08/25(火) 23:38:37ドクターゲロなんてワシよりだめだのー
則巻センベエさんと話あったらドクターゲロとドクターミューはポインタが理解できてないっていってたの(笑)
0280デフォルトの名無しさん
2009/08/25(火) 23:38:49{ } { } となった場合でも使えるのがグローバル変数なんですね。
ちょうど勉強中のところなので参考になります、どうもありがとうございました!
0281デフォルトの名無しさん
2009/08/25(火) 23:59:11広域でも static 付けた
ファイル内のみ有効なのはグローバルとは言わん。
0282デフォルトの名無しさん
2009/08/26(水) 02:07:490283デフォルトの名無しさん
2009/08/26(水) 09:31:570284デフォルトの名無しさん
2009/08/26(水) 10:04:16*((UCHAR*)0x4AAA) = 0xAA;
この場合0xAAが代入されるのはどこですか?
0x4AAA番地?0x4AAA番地に入ってるアドレスの番地?
0285デフォルトの名無しさん
2009/08/26(水) 10:10:200x4AA0 xx xx xx xx xx xx xx xx xx xx XX xx xx xx xx xx
このXXの部分が書き換わる
0286デフォルトの名無しさん
2009/08/26(水) 10:37:58いろいろツッコミどころがありすぎるが
**((UCHAR*)0x4AAA) = 0xAA;
後者はこう
0287デフォルトの名無しさん
2009/08/26(水) 11:34:43それは
>**((UCHAR*)0x4AAA)
に突っ込んでくれ、ってこと?
0288デフォルトの名無しさん
2009/08/26(水) 11:35:260289デフォルトの名無しさん
2009/08/26(水) 11:46:430291デフォルトの名無しさん
2009/08/26(水) 12:55:280x4AAA番地
おかしなレスはスルーしとけ
0292デフォルトの名無しさん
2009/08/26(水) 17:07:490293デフォルトの名無しさん
2009/08/26(水) 20:08:050294デフォルトの名無しさん
2009/08/26(水) 21:05:51それならUCHAR**にキャストしないと
0295デフォルトの名無しさん
2009/08/26(水) 21:19:370296デフォルトの名無しさん
2009/08/26(水) 22:11:090297デフォルトの名無しさん
2009/08/26(水) 22:13:130298デフォルトの名無しさん
2009/08/26(水) 22:18:420299デフォルトの名無しさん
2009/08/26(水) 22:26:040300デフォルトの名無しさん
2009/08/26(水) 22:27:090301デフォルトの名無しさん
2009/08/26(水) 22:41:16配列やポインタ操作で
予約している大きさを突破して書き込んでいるパターンかも
0302デフォルトの名無しさん
2009/08/26(水) 22:49:43おそらく、どこかでスタック上のメモリーを壊しているか
初期設定されていないスタック上のデータをアクセスしている。
printfなどの関数を呼ぶとスタック上のメモリーが呼ばないときと変わるので
上のようなケースでは呼ぶ場合と呼ばない場合とで動作が異なってくる。
0303デフォルトの名無しさん
2009/08/26(水) 22:57:50現代の科学技術ではこの問題に対して人類は目視デバッグでしか対抗できないのですか
0304デフォルトの名無しさん
2009/08/26(水) 23:00:260305デフォルトの名無しさん
2009/08/26(水) 23:01:080306デフォルトの名無しさん
2009/08/26(水) 23:04:01サークリデバッグしとくから
0307デフォルトの名無しさん
2009/08/26(水) 23:08:23メモリ破壊プログラム。
void sub(int** p)
{
*p = (int*)100;
}
int main(void)
{
int* p;
sub(&p);
return 0;
}
0308デフォルトの名無しさん
2009/08/26(水) 23:10:47これ安全じゃないの?
0309デフォルトの名無しさん
2009/08/26(水) 23:16:190310デフォルトの名無しさん
2009/08/26(水) 23:26:23クラッシュするなんてことはありえるんですか?
0311デフォルトの名無しさん
2009/08/26(水) 23:29:10実はアドレスの0x64(100)番地を差すって意味になってるとか?
0312デフォルトの名無しさん
2009/08/26(水) 23:32:52一緒の意味じゃねーかw
0313デフォルトの名無しさん
2009/08/26(水) 23:36:000314デフォルトの名無しさん
2009/08/26(水) 23:40:42二回ちゃんと開放したらクラッシュするかもね
0315デフォルトの名無しさん
2009/08/26(水) 23:40:430316デフォルトの名無しさん
2009/08/26(水) 23:58:55ってのググったらバグの内容だけはすぐに分かった。原因はまだ分からない
あまりにも珍事だったんですぐ聞いてしまった。ごめん
ほんと初心者の常識なんて当てになんないねぇ
0317デフォルトの名無しさん
2009/08/27(木) 00:17:08くだらない書き間違いだったmalloc(10 + sizeof(int))
見つけるのに2時間かかったが・・・
ありがとうございました
0318デフォルトの名無しさん
2009/08/27(木) 01:14:160319デフォルトの名無しさん
2009/08/27(木) 02:46:40だからやさしいC++って本買ったら、C言語からおしえやんの
猿でもわかるC言語みたら、いきなり数学やらすから蕁麻疹でてやめた
0320デフォルトの名無しさん
2009/08/27(木) 02:54:010321デフォルトの名無しさん
2009/08/27(木) 02:55:13あきらめたらそこで試合終了だよ!
0322デフォルトの名無しさん
2009/08/27(木) 03:17:350323デフォルトの名無しさん
2009/08/27(木) 06:02:08止めとくのが良いかと。
どの言語だって上になるにつれて難しくなってくるし。
0324デフォルトの名無しさん
2009/08/27(木) 06:07:13ちょっとばかしできたからと、直ぐ調子に乗るのがお前の悪いところだ
0325デフォルトの名無しさん
2009/08/27(木) 08:47:510326デフォルトの名無しさん
2009/08/27(木) 08:49:05与えられた時間内にそれなりの結果を出さないといけないんだよ
向いてないものにかかりっきりとか馬鹿じゃねーの?
0327デフォルトの名無しさん
2009/08/27(木) 09:49:24A,B以外の場合にプリントエフ文を実行させたくて作ったプログラム(プログラム三行目)
が、Aの場合でも実行されてしまいます。
A||Bに直したらうまく実行されるようになりましたが、なぜなのかが理解できておらず
困っています。分かる方、宜しくお願いします。
if(A)printf(A)
if(B)printf(B)
if(!(A && B))printf(A,Bではありません)・・・失敗
if(!(A || B)printf(A,Bではありません)・・・成功
0328デフォルトの名無しさん
2009/08/27(木) 09:53:550329デフォルトの名無しさん
2009/08/27(木) 09:59:000330デフォルトの名無しさん
2009/08/27(木) 10:29:33!(A || B) = (!A && !B) だから、!(A || B)でprintf(A,Bではない)の実行が成功したということ
が理解できました。ありがとうございます!
ただ、!(A && B)というのは 否定(AとB)なのに、
なぜ(A,Bでない)にならずに(Aでない または Bでない)になるのかが感覚的に理解できないのですが、
括弧内の&&論理演算子の偽が適用された(!で(&&)の真が偽に切り替わった)訳ではなく、
単純に論理的に考えると(AとB)の反対は(AかB)になる、ということなんでしょうか?
読みづらい質問で大変恐縮ですが、よろしければ回答お願いします。
0331デフォルトの名無しさん
2009/08/27(木) 10:34:37俺がゆとり世代だからか。
0332デフォルトの名無しさん
2009/08/27(木) 10:45:18ド・モルガンの法則ググって幸せになれました、感謝です!
自分は高校でも習った記憶ないのですが、文系特化した私立高だったので飛ばされたっぽいです。
0333デフォルトの名無しさん
2009/08/27(木) 11:59:05ttp://www.dainippon-tosho.co.jp/math_history/history/age03_ju/index.html
0334デフォルトの名無しさん
2009/08/27(木) 12:03:42団塊Jrの上の世代だな
0335デフォルトの名無しさん
2009/08/27(木) 16:33:401. ソースコードを目で追って確認
2. デバッグモードでコンパイルすると落ちた箇所の関数名とライン数が出るコンパイラもある
(gccは知らない)
3. デバッガーで実行し、落ちたところの状況を調べる。
4. gccでコンパイルするときにリンクマップファイルを出力する。
そのリンクマップファイルに書かれている関数のアドレス、外部変数のアドレスを目安につきとめる。
まあ、こんなところかな。
0336デフォルトの名無しさん
2009/08/27(木) 16:56:47core と一緒にデバッガに渡せばすぐ判るだろjk
0337デフォルトの名無しさん
2009/08/27(木) 18:02:48Wikipedia を wiki と略すぐらいおかしい。
0338デフォルトの名無しさん
2009/08/27(木) 18:06:340339デフォルトの名無しさん
2009/08/27(木) 18:09:040340デフォルトの名無しさん
2009/08/27(木) 18:13:120341デフォルトの名無しさん
2009/08/27(木) 18:18:29Can I 〜?
0342デフォルトの名無しさん
2009/08/27(木) 18:38:290343340
2009/08/27(木) 19:06:39やたらとコミュニケーションとかを重視して、技術力を忘れてるバカだよな。
だいたい339の言ってる事はわかるだろ。
何故そうやって主語が無いのでわからないとかいうんだろうな^^;
過去に、お前主語が無いよって指摘されたのか、主語を国語で習ってそれから使いだしたやつだよな(爆笑)
034493,174
2009/08/27(木) 19:11:170345340
2009/08/27(木) 19:15:09英語 コミュニケーション能力 を重視してるわけ?(笑)
過大評価し過ぎだろ^^;
マスコミの影響だろうな。英語ができれば給料があがるとか。
ITが発達してきて忘れられてる物などのドキュメンタリー番組の影響を受けて
やたらとコミュニケーション能力を過大評価しすぎ。
英語できないとだめ そんな事無い。日本で働いてるなら英単語くらい
コミュニケーション能力 いらない 話かけて応答できるくらいで。
技術力がなくて仕事に興味が無いっていうやつは邪魔。
だいたい企業の紹介文に、明るく前向きにコミュニケーションがとれるかた!
とIT系にやってるのはコンプレックスの裏返し。
ネクラ企業、怪しい企業とみられたくないように必死に女性などの画像をはって
明るくみられたいための手段(笑)
だいたいお見通しですよ(爆笑)
0346デフォルトの名無しさん
2009/08/27(木) 19:15:500347デフォルトの名無しさん
2009/08/27(木) 19:25:04コミュニケーション能力が欠如してるやつってのは普通の人から見たらほとんど宇宙人とかわらないんだよ
自覚してくれまじで
0348デフォルトの名無しさん
2009/08/27(木) 19:26:180349デフォルトの名無しさん
2009/08/27(木) 19:35:440350デフォルトの名無しさん
2009/08/27(木) 19:36:26日本語の口語では主語をはっきり言わないことが多い。
文脈や相互の立場から主語は暗黙のうちに理解されている。
0351デフォルトの名無しさん
2009/08/27(木) 19:42:38(私は)ソフトウェアキーボードのような他の窓などに
キー情報を送るアプリとか簡単に組めるようになりますか?
0352デフォルトの名無しさん
2009/08/27(木) 19:43:49C言語の勉強をはじめたばかりで、下記の問題の正答に納得できない部分があります。
Q1:関数に数値を渡すために宣言する変数のことをなんと呼ぶか。
自分の答え:実引数
正答 :仮引数
Q2:関数を作るのは何のためか、簡潔に説明せよ。
自分の答え:プログラムとは関数の集まりであり、関数を作らない限り動作しないから。
正答 :機能別に関数を作り、それを組み合わせることでプログラム全体が完成し、
大きなプログラムでも作りやすくなるため。
Q1
実引数=呼び出し側の関数が関数側に渡す数値。
仮引数=関数側が呼び出し側から実引数を受け取るための特別な変数。
というように理解していたので、渡すための変数なら実引数のように思えたのですが、
なぜ仮引数になるのか。
Q2
大きなプログラム云々の前に、関数を作るのはプログラムをつくるためだと思うのですが、
なぜこのような正答になるのか。
長文ですみませんが、アドバイスもらえたら助かります。宜しくお願いします。
0353デフォルトの名無しさん
2009/08/27(木) 19:44:38おまえ次第、としか言いようがない。
035493,174
2009/08/27(木) 19:47:22ワロタ wwwwwwwwwwwwwwwwwww
0355デフォルトの名無しさん
2009/08/27(木) 19:48:38こんなことに頭を使うより、具体的なコード作成練習をするべき。
0356デフォルトの名無しさん
2009/08/27(木) 19:51:45Q1
「と理解していた」ていうけど、本来の意味を無視して自分勝手に解釈してるだけ
Q2
「云々の前に」というけど、これもまだ大したプログラムができない自分をを中心に
勝手に解釈してるだけね
035793,174
2009/08/27(木) 19:57:54俺が問題作成者なら
「関数に数値を渡すために宣言する変数」
→「関数に数値を受け取るために宣言する変数」
 ̄ ̄ ̄ ̄ ̄ ̄
035893,174
2009/08/27(木) 19:59:07日本語でおk
0359デフォルトの名無しさん
2009/08/27(木) 20:02:17まだ引数、仮引数、実引数あたりの知識が曖昧な感じなので、間違って覚えてたら
困ると思って質問しました。
>>356
仰る通り自分勝手に解釈しているので、どこが間違っているのか指摘してもらうために
ここで質問したんですが…ずいぶんな言い方されてますが、嫌なことでもあったんですか。
あんまり噛み付かないでくださいね。
0360デフォルトの名無しさん
2009/08/27(木) 20:04:34036193,174
2009/08/27(木) 20:06:070362デフォルトの名無しさん
2009/08/27(木) 20:10:58既に渡り歩いてますので大丈夫です。
036393,174
2009/08/27(木) 20:13:09問題が素直に解けないんだな かっこわら
0364デフォルトの名無しさん
2009/08/27(木) 20:16:340365デフォルトの名無しさん
2009/08/27(木) 20:19:33バカがくだらないことしてるって鼻で笑って気にしないのが一番。
0366デフォルトの名無しさん
2009/08/27(木) 20:23:27main"関数"すらないプログラムだってかけるんだぜ。
よってプログラムを作成するために必須であるとはいえない。
char main = 0;
0367デフォルトの名無しさん
2009/08/27(木) 20:33:29それに対し、あるバッファ(配列)を特定の値で埋めるような関数はないでしょうか?
例えば、DWORD型配列の先頭ポインタpBuffDstに対し、4要素分( 4 * sizeof( DWROD ) = 16[ Byte ] )すべてに0xfe8d9aを埋めたいときなどに使える関数です。
今はfor文で回して、各要素に順番に代入していますが、関数を使えば記述がシンプルになるほか、
速度面でも改善されるかもしれない、と期待しています。
(for文によるコピーよりもCopyMemoryやmemcpyのほうが断然速かった経験があるため)
もし、そういう関数をご存知でしたら教えてください。
よろしくお願いします。 m(_ _)m
0368デフォルトの名無しさん
2009/08/27(木) 20:35:440369デフォルトの名無しさん
2009/08/27(木) 20:36:38自前で作ったらどう?
0370デフォルトの名無しさん
2009/08/27(木) 20:37:31その問題からは、どっちが正しいとも言えない。
多分、初心者か中級者が作った問題なんだろうけど
問題が悪いとしかいいようがない
世の中渡り歩いてるなら、相手の意図を汲み取って回答するようにしよう
0371デフォルトの名無しさん
2009/08/27(木) 20:39:53なんでそんな自己批判を繰り返すのですか?
0372デフォルトの名無しさん
2009/08/27(木) 20:41:55for文で書いても普通に最速になるはず
memcpyが速い理由として、CPUの特殊命令(SSEとか)を使っている可能性が
あるけど、仮にそうでもよほど大きなサイズでないと for文との差は出ない。
0373デフォルトの名無しさん
2009/08/27(木) 20:47:35ありがとうございます。煽り耐性身につけようと思います。
文句言うだけの暇人なんて気にしない!
>>366
参考になりました。Q2はプログラムとは基本的に関数の集まりであるから、と考えることにします。
>>377
私もこの問題は曖昧すぎるように思いましたが、初心者の時点で問題が悪い、と決めつけるのは
学習の妨げになると思っているので、他の方の意見が欲しくて質問しました。
あと、作った方は筋金入りのプロみたいですよ。間違っても良問だとは言えませんが。
欲しかった答えがもらえたので失礼します。ありがとうございました。
0374367
2009/08/27(木) 20:51:05ありがとうございました!
速度はあまり変わりませんでしたが、勉強になりました!
>>372
う〜ん、for文の二重ループで1920x1080の画像を同サイズのバッファにコピー移ししたときに
計測(QueryPerformance〜を利用)しましたが、
for文記述: 約3.0[ms]
CopyMemory: 約1.6[ms](memcpyもほとんど同じ)
でした。
CPUはCore2Duo E8600@定格です。
VC++の設定で「拡張命令セットを有効にする」は設定なしにしているので、SSEとかは
入ってないはずです。
不思議ですね・・・(汗)
0375368
2009/08/27(木) 20:54:16その関数の中ってアセンブラでかかれてない
0376デフォルトの名無しさん
2009/08/27(木) 20:58:05必ずしも関数の集まりである必要はないんだけど、なぜ関数の集まりになっているのかというと、
先の回答の通り。
0377デフォルトの名無しさん
2009/08/27(木) 21:00:52for文回すときでも、アライメント合わせて複数バイトまとめて転送とかは基本テクニック。
あとパイプラインを乱さないために、ループ一回で16byteくらいはコピーした方がいい。
0378372
2009/08/27(木) 21:02:27for文がバイト単位でコピーしてるなら、copymemoryの方は
アライメントを揃えてワード単位でやってるかもしれない。
逆にいうとそれぐらいの工夫はfor文でも普通にやるもんだと思う。
あと確かに >>375のいう命令(loopだっけ)で効率化されるけど、
ほとんどの時間はメモリアクセスに掛かってるんじゃないかなあ
0379デフォルトの名無しさん
2009/08/27(木) 21:04:394byteデータでfillする話と
for文の二重ループで1920x1080の画像を同サイズのバッファにコピー
の話はまるで違うように思わんでもないが
0380デフォルトの名無しさん
2009/08/27(木) 21:06:050381372
2009/08/27(木) 21:06:400382368
2009/08/27(木) 21:08:39rep movsd とか
0383368
2009/08/27(木) 21:09:44http://www5c.biglobe.ne.jp/~ecb/assembler/7_3.html
これは8086の話なのでもっと大きなレジスタ使える今だともっと違う方法があるかもね
0384367
2009/08/27(木) 21:14:06なるほど。
そうだったんですか。
>>377
>>378
アライメントというのを考慮しないといけないんですね。
ありがとうございます。
>>379
はい、それはまた別の話です。
あと、1920x1080とは言いましたが、UYVY形式になっていますので、RGB形式とはちょっと違ってきますね。
0385367
2009/08/27(木) 21:15:04DWORD *pBuffSrc;
DWORD *pBuffDst;
・・・
(pBuffSrcに画像データが入る)
・・・
W = 1920 / 2;
H = 1080;
// pBuffDstにコピーする
for( int Y = 0; Y < H; Y++ )
{
for( int X = 0; X < W; X++ )
{
*( pBuffDst + X ) = *( pBuffSrc + X );
}
pBuffSrc += W;
pBuffDst += W;
}
-------------------------------------------------------------
関数コピーの場合のコードを以下に記します。
CopyMemory( pBuffDst, pBuffSrc, DataSize );
0388デフォルトの名無しさん
2009/08/27(木) 21:21:37>縦 x 横 / バイト数 分繰り返すのも同じだし
これ変だな
縦 x 横 分繰り返すのも同じだし
0389デフォルトの名無しさん
2009/08/27(木) 21:21:59左側だけ新しいのを貼り付けたいってこと?
0390デフォルトの名無しさん
2009/08/27(木) 21:23:161重に落とすのが楽だろうね
0391デフォルトの名無しさん
2009/08/27(木) 21:31:570392367
2009/08/27(木) 21:32:04x86は寛容ですね!
>>387
>>388
>>390
ありがとうございます!
一重にしたらかなり高速化されて、CopyMemoryとほぼ同じ1.4[ms]となりました!
(それでも若干(70[us]ほど)まだCopyMemoryのほうが速いです)
ありがとうございました!
0393368
2009/08/27(木) 21:36:33寛容というかアライメントの話は8086までさかのぼるんだけどねw
x86はひたすら互換を維持することで今まで拡張されつつ残ったCPUだからねえ
0394デフォルトの名無しさん
2009/08/27(木) 21:43:330395368
2009/08/27(木) 21:49:17ただアライメントの話をするにはどこからそうなってるかというので8086とあえて言ってるだけ
8086をベースにモードが増えたりレジスタを拡張したりそれまでは
バス速度とCPUの速度が一緒だったのをCPUだけクロックあげる仕組みいれたりと・・・
0396デフォルトの名無しさん
2009/08/27(木) 22:00:34while (count--) *pBuffDst++ = *pBuffSrc++;
とやるのはどうなんだろうか。
0397363
2009/08/27(木) 22:03:250398デフォルトの名無しさん
2009/08/27(木) 22:05:050399デフォルトの名無しさん
2009/08/27(木) 22:06:110400デフォルトの名無しさん
2009/08/27(木) 22:06:50do {
*pBuffDst++ = *pBuffSrc++;
} while (pBuffSrc != pSentinel)
このほうがいいかなぁ。
だけど、CopyMemoryで実現できることをなんでわざわざループでどうにかしようとしているんだろう。
0402デフォルトの名無しさん
2009/08/27(木) 22:08:55なんで?
0403デフォルトの名無しさん
2009/08/27(木) 22:08:57#include <stdio.h>
#define MATHMAX 1000
typedef struct{
char mathbox[MATHMAX][MATHMAX];
} MATH;
int matharr(MATH *math){
long int roop1, roop2;
for(roop1=0;roop1<MATHMAX;roop1++){
for(roop2=0;roop2<MATHMAX;roop2++){
math->mathbox[roop1][roop2]=1;
}
}
return 0;
}
int main( void){
MATH math;
matharr(&math);
return 0;
}
現在、構造体の勉強中なのですが、これは間違っていますでしょうか?
MATHMAXの値を大きくすると、セグメンテーションフォルトになってしまいます。
0404デフォルトの名無しさん
2009/08/27(木) 22:10:414byteデータでfillしたいという話ならループの話に持ってってもいいけどねえ。
なぜ画像コピーの話になったのやら。
0406デフォルトの名無しさん
2009/08/27(木) 22:11:40スタックに巨大な領域を確保しようとしているから
とりあえずは static を追加すればおk
int main( void){
static MATH math;
matharr(&math);
return 0;
}
0407デフォルトの名無しさん
2009/08/27(木) 22:12:35サイズがでかすぎたんでないの?
0408デフォルトの名無しさん
2009/08/27(木) 22:12:36おもしろい?
0409デフォルトの名無しさん
2009/08/27(木) 22:12:52int main( void){
MATH math;
この確保だとスタックという場所にMATHが確保されるんだけどスタックはそれほど大きな場所じゃないので
エラーがでます
mallocで動的に確保するかstaticで確保しましょう
0411363
2009/08/27(木) 22:16:49日本語でおk
と言われて不快だろ?
人に言われて嫌なことを言うな。
0412デフォルトの名無しさん
2009/08/27(木) 22:18:43こういう、ひねくれた事ばかり言っているから
問題が素直に解けないんだな かっこわら
0413403
2009/08/27(木) 22:19:16スタックと言うものを少し調べてみたのですが、プログラムの間違いではなく、OS?の仕様と言う認識でよろしいでしょうか?
0414デフォルトの名無しさん
2009/08/27(木) 22:20:41まあそんなところです
0415デフォルトの名無しさん
2009/08/27(木) 22:21:190416デフォルトの名無しさん
2009/08/27(木) 22:21:57やられたらやりかえすのは悪いクセだということを小学校で習わなかったかい?
0417デフォルトの名無しさん
2009/08/27(木) 22:21:58いえ
staticをつけると実行ファイルの中に確保されます
0418デフォルトの名無しさん
2009/08/27(木) 22:24:23嘘言ってんじゃないよ
0419デフォルトの名無しさん
2009/08/27(木) 22:25:45初期化してなければそうでもないんじゃね?
初期化してないっつーのは、要は全部 0 ってことな。これもまあ初期化ではあるけど。
0420デフォルトの名無しさん
2009/08/27(木) 22:29:160421デフォルトの名無しさん
2009/08/27(木) 22:29:53まあ正確には実行ファイルのサイズが増える場合とそうでない場合がある
0422デフォルトの名無しさん
2009/08/27(木) 22:32:11初期化の有無とかでかわるのかも知れないがstaticをつけると実行ファイルの中に
すでに組み込まれてる場合もあるよ
その場合はスタックでもないし
0423デフォルトの名無しさん
2009/08/27(木) 22:34:09そりゃ、実行ファイルはstaticがどう初期化されるかって情報を
持ってるだろうけど「実行ファイルに確保される」は変だろ。
0424デフォルトの名無しさん
2009/08/27(木) 22:34:46場合によって意味が変わるから本を読むとかググって調べるといいよ
0425デフォルトの名無しさん
2009/08/27(木) 22:36:10じゃあなんというんだいw
実行ファイルがstaticありとなしで配列分程度サイズが増減する場合はどこにあるっていうんだよw
実行ファイルがメモリにロードされた時点でメモリに存在するし
配列はスタックの上には無いぜ
mallocで確保したわけでもない
0426デフォルトの名無しさん
2009/08/27(木) 22:36:59俺は感動したよ
0427デフォルトの名無しさん
2009/08/27(木) 22:37:400428デフォルトの名無しさん
2009/08/27(木) 23:09:47文字列リテラルだって実行ファイルの中にあるわさ。
わざわざコピーする手間省くためにロードしたそれをそのままアクセスしてるだけだろ。
0429367
2009/08/27(木) 23:13:55考えてくださって、ありがとうございます。
結果は約3.0[ms]でした。
>>400
結果は約2.5[ms]でした。
>だけど、CopyMemoryで実現できることをなんでわざわざループでどうにかしようとしているんだろう。
僕が「forループでコピーするよりCopyMemory等の関数のほうが速い」と言ったのに対して、
そんなことはなく、ループでも同等に速くなるはず、という意見をいただいたからで、
それを実証すべく、ループでのコピー方法を考えるという流れになりました。
0430デフォルトの名無しさん
2009/08/27(木) 23:15:57そこはぜんぜん否定してないよ。
「static変数はスタックに確保されますか?」って文脈だと
「実行ファイルに確保される」って答えは変って話。
0431デフォルトの名無しさん
2009/08/27(木) 23:16:24初期値があれば初期値も入っている。
ということではないかな?
0432デフォルトの名無しさん
2009/08/27(木) 23:16:44p[2] = 'u';
こういうのって許されるの?
0433デフォルトの名無しさん
2009/08/27(木) 23:21:01ふつうのコンパイラではダメでしょ。
"Fack you."の文字列が格納してあるところにセグメント/ページにwriteプロテクトをかけている。
writeプロテクトを設定しないコンパイラ(環境)だったら許される。
0434デフォルトの名無しさん
2009/08/27(木) 23:45:42実行時に静的領域に確保されるんだろ?
0435デフォルトの名無しさん
2009/08/27(木) 23:47:350436デフォルトの名無しさん
2009/08/28(金) 00:01:16言語か?それともコンパイラか?OSか?
0437デフォルトの名無しさん
2009/08/28(金) 00:08:33お前どんだけ無能なんだよww
規格とヘルプの違いも知らんのか。
0438デフォルトの名無しさん
2009/08/28(金) 00:10:42どこに確保しようがコンパイラの自由
0439デフォルトの名無しさん
2009/08/28(金) 00:15:230440デフォルトの名無しさん
2009/08/28(金) 00:18:10揚げ足とりは楽しいかい?
0442デフォルトの名無しさん
2009/08/28(金) 04:06:22何言ってるのかわからないので放置しまう^p^
0443デフォルトの名無しさん
2009/08/28(金) 09:29:15だから環境によるって何度も言われてるじゃないか。
初期値があれば勿論のこと、なくても
定数 0 の羅列が実行ファイルに確保されることだってある。
0444デフォルトの名無しさん
2009/08/28(金) 12:06:42最近はP2P技術に興味がありwinnyなんかのソースを解読したいと思っています。
大学レベル程度のことでしたら独学でいけますが、ハッカーになるためには次に勉強するべきことは何でしょうか?
英語はTOEIC730ぐらいです。
0445デフォルトの名無しさん
2009/08/28(金) 12:11:37俺?おれ420ですよ論文やばい
0446デフォルトの名無しさん
2009/08/28(金) 12:13:230447デフォルトの名無しさん
2009/08/28(金) 12:13:350448デフォルトの名無しさん
2009/08/28(金) 12:16:17めっちゃやばい日常会話ができない
0449デフォルトの名無しさん
2009/08/28(金) 12:18:23夏だからか。。
0450デフォルトの名無しさん
2009/08/28(金) 12:20:47> ハッカーになるためには次に勉強するべきことは何でしょうか?
それくらいググればいくらでも出てくるだろ。。
0451デフォルトの名無しさん
2009/08/28(金) 12:22:020452デフォルトの名無しさん
2009/08/28(金) 12:38:20スレタイに書いてある程度の漢字も読めないみたいだし。
0453デフォルトの名無しさん
2009/08/28(金) 12:40:38winnyはC++で書かれてるはずだし
0454デフォルトの名無しさん
2009/08/28(金) 12:41:520455デフォルトの名無しさん
2009/08/28(金) 12:57:060456デフォルトの名無しさん
2009/08/28(金) 13:08:570457デフォルトの名無しさん
2009/08/28(金) 13:10:44他にKADOKAWA-Cもあります。
0458デフォルトの名無しさん
2009/08/28(金) 13:41:48これなんかのコピペだろ
0459デフォルトの名無しさん
2009/08/28(金) 13:48:09スルーしておけ。
0460デフォルトの名無しさん
2009/08/28(金) 15:18:290461デフォルトの名無しさん
2009/08/28(金) 18:46:05スタックじゃなければどこよ?って話なんだから実行時のメモリの使い方だろが。
初期値がどこに確保されるか?って話じゃないのに何故実行ファイル?
0462デフォルトの名無しさん
2009/08/28(金) 19:15:050463デフォルトの名無しさん
2009/08/28(金) 20:42:14while(1)
{
Move1();
::Sleep(10);
}
「::」でググってもうまくヒットしてくれない
0464デフォルトの名無しさん
2009/08/28(金) 20:47:18C++
スコープ解決演算子
名前空間の中にも同じSleep()という関数があり、それと
区別してWin32 APIのSleep()を呼び出す
0465デフォルトの名無しさん
2009/08/28(金) 20:48:48void convert(long num,char str[]);
int main(void)
{
char str[80];
char u[80]="4";
long i;
i=1234567;// 1,234,567
convert(i,str);
printf("%s\n",str);
return 0;
}
void convert(long num,char str[])
{
int i=0,j=0;
char table[]="0123456789";
char tmp;
do{
str[j++]=table[num%10];
num/=10;
i++;
0466デフォルトの名無しさん
2009/08/28(金) 20:50:33{
str[j++]=',';
}
}while(num!=0);
str[j--]='\0';
for(i=0; i<j; i++,j--)
{
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
}
これって出力結果が1,234,567になるけど
i%3の時に,を入れるって書いてありますよね?
いれたらかぶっちゃいませんか?
str[3]=4にして
num/=10
iが3だから
str[3]=','
4が消えてしまうんですが。流れが全然よめません。どなたか詳しく教え
てください。
0467デフォルトの名無しさん
2009/08/28(金) 20:57:50ありがとうございます!!
0468デフォルトの名無しさん
2009/08/28(金) 21:20:42j
0469デフォルトの名無しさん
2009/08/28(金) 21:32:10> char table[]="0123456789";
これ無駄だろ。
char *table="0123456789";
にしろよ。
0470デフォルトの名無しさん
2009/08/28(金) 21:33:20あんたも好きね
0471デフォルトの名無しさん
2009/08/28(金) 21:35:42IPAの基本情報の午後問題にtable[]って書いてあったんだけど(笑)
0472デフォルトの名無しさん
2009/08/28(金) 21:38:00中身を書き変えてるんだろ?
0473デフォルトの名無しさん
2009/08/28(金) 21:40:15str[j++]="0123456789"[num%10];
0474デフォルトの名無しさん
2009/08/28(金) 21:41:02do{
str[j++]=table[num%10];
num/=10;
i++;
if(i%3==0 && num!=0)
{
str[j++]=',';
}
}while(num!=0);
i++ってループをぬけたら+1だっけ?
それともi++をやった直後+1だっけ?
0475デフォルトの名無しさん
2009/08/28(金) 21:51:470476デフォルトの名無しさん
2009/08/28(金) 21:51:560477デフォルトの名無しさん
2009/08/28(金) 22:07:15行が処理された後
0478デフォルトの名無しさん
2009/08/28(金) 23:11:39s = i++ + i++;
0479デフォルトの名無しさん
2009/08/28(金) 23:31:32俺が透視能力を得た
0480デフォルトの名無しさん
2009/08/29(土) 03:47:12ブロックを何重も使ってプログラムを書いた場合、1つのブロックの範囲がどこまでなのかがわかりません。
例えば下のようになっている場合、一番はじめの { が閉じられるのは4番目の } なのか、最後の } なのか、という感じの疑問です。
{ { { } { } } }
また、ブロック文について参考になるサイトがあったら教えてください。よろしくお願いします。
0481デフォルトの名無しさん
2009/08/29(土) 04:19:27それと、対応するカッコがすぐ見つけられるエディタ/開発環境使えよ。
0482デフォルトの名無しさん
2009/08/29(土) 05:04:25}はそれよりも前の一番近い{と対応する、というのが本来の考え方だけど、
一番内側の{}ペアが一つのブロックになると思えばいいよ。
そのブロックをさらに挟み込む形でブロックがあって、一番外までという感じ。
0483デフォルトの名無しさん
2009/08/29(土) 05:37:47ありがとうございます。
{ が単純に次の } に対応してしまう訳ではなく、下位ブロックからきちんとセットで認識していくと分かって納得しました。
見やすいプログラムを書けるよう気をつけようと思います!
0484デフォルトの名無しさん
2009/08/29(土) 05:38:130485デフォルトの名無しさん
2009/08/29(土) 07:18:56これで悩む理由がわからん
直感で理解できるだろう
プログラム向いてなさそう
0486デフォルトの名無しさん
2009/08/29(土) 07:44:27例えば、 { { } という打ち間違いがあった場合にどういう判断がなされるのか(どういった手順でブロックを認識していくのか)という意味を含んだ質問だったのですが。
下手な質問でまさに知りたかったことを教えてくれた>>482さんと比べて、>>485さんは思考が安直ですね。
嫌味とか通じなさそうw
0487デフォルトの名無しさん
2009/08/29(土) 07:47:36こういう話がしたいんだったらCスレから離れて構文解析等のキーワードでぐぐるべきだな
0488デフォルトの名無しさん
2009/08/29(土) 07:48:53燃料として機能するとは…
0489デフォルトの名無しさん
2009/08/29(土) 07:53:140490デフォルトの名無しさん
2009/08/29(土) 08:03:53文字列走査してー
開き括弧('(', '{', など)に出会ったらー、スタックに push push !
閉じ括弧(')', '}', など)に出会ったらー、スタックから pop pop ! して
対応するものと == 演算子で比較するお (^^
0491デフォルトの名無しさん
2009/08/29(土) 08:15:42開きおっぱい括弧 { に出会ったらフラグ反転。
閉じおっぱい括弧 } に出会ったら、フラグの値が真(=括弧が開いている)なら
括弧終了ということで、またフラグ反転。
0493デフォルトの名無しさん
2009/08/29(土) 08:25:060494デフォルトの名無しさん
2009/08/29(土) 08:39:33ケンカの売り方が似ている・・・
0495デフォルトの名無しさん
2009/08/29(土) 09:16:51コンパイラの立場にたって考えればすぐ分かる内容だな。
0496デフォルトの名無しさん
2009/08/29(土) 09:47:420497デフォルトの名無しさん
2009/08/29(土) 09:59:59成りすまされたくなかったらトリップつけたほうがいいかも。
0498デフォルトの名無しさん
2009/08/29(土) 13:08:32引用符って片方しかないんだよね。
“ ” ‘ ’
が正しい筈なのに、後ろの一つずつしかない。
特に ' は引用符でない記号とも共用だしな。
0499デフォルトの名無しさん
2009/08/29(土) 14:11:480500デフォルトの名無しさん
2009/08/29(土) 14:17:070501デフォルトの名無しさん
2009/08/29(土) 14:45:21/* /* */ */
も置いておきますね
0502デフォルトの名無しさん
2009/08/29(土) 15:05:050503デフォルトの名無しさん
2009/08/29(土) 15:11:550504デフォルトの名無しさん
2009/08/29(土) 16:14:16ありがとう
長年悩んでいた問題が氷解したw
0505デフォルトの名無しさん
2009/08/29(土) 16:36:32俺もそれやってみたら、股間にストレッチパワーが溜まってきた!
0506デフォルトの名無しさん
2009/08/29(土) 17:18:11フレーム(frame)という構造体へのポインタ配列を
メンバにもつブロック(block)という構造体を作りたいんですが。。。
blockはframe(mallocで動的に確保する)を任意の個数
持つとして、
struct block {
frame * buf[];
}
という構造体を宣言した場合、実行時に
buf[0] = (frame*)malloc(sizeof(frame));
といった書き方ができますか?
この場合、コンパイラはbuf配列の個数が
わからないような気がしますが。。。
0507デフォルトの名無しさん
2009/08/29(土) 17:30:38規格では保証されてないけど
struct block {
frame *buf[1];
};
としといてblockの領域を大目に取って置いてframeを
mallocで1を超えて確保する事はよくある
何回も言うけど規格で動作は保証されてないので
本当は鼻から悪魔
でもなぜかよく使われるテクニック
0508デフォルトの名無しさん
2009/08/29(土) 17:43:30ご教授、ありがとうございます。
構造体の内部で、
frame *buf[];
とした場合、
frame *buf[1];
とコンパイラは判断するということでしょうか?
0509デフォルトの名無しさん
2009/08/29(土) 17:49:52struct frame {
int foo;
};
struct block {
unsigned size;
struct frame *buf[];
};
void *
malloc();
foo(bufs, nbufs)
int *bufs;
unsigned nbufs;
{
struct block *blk = 0;
blk = malloc(sizeof(struct block) + sizeof(struct frame *)*nbufs);
blk->size = nbufs;
for ( unsigned i = 0; i < nbufs; ++i ) {
blk->buf[i] = malloc(sizeof(struct frame)*(i+1));
}
return 0;
}
規格のセクションは、ガチ規格スレで聞いてくれたら答える
0510デフォルトの名無しさん
2009/08/29(土) 18:08:47ありがとうございます。
この場合、
struct block {
unsigned size;
struct frame **buf;
};
としないのは、
使用する側に、bufはポインタ配列であることを
明示するのが目的なのでしょうか?
度々の質問ですいません。
0511デフォルトの名無しさん
2009/08/29(土) 18:26:45ただC99なら最後のメンバが配列の場合要素数を省略できることを示したかっただけ
ポインタ配列であることを明示しているわけではない
で、コンパイル通るように適当に作ったのでbufs使うの忘れていた
>510の場合はまた違う確保の方法になるだろ
一例としては
struct block *blk = malloc(sizeof(struct block) + sizeof(struct frame *)*nbufs);
blk->buf = (char *)blk + sizeof(struct block);
blk->buf[i] = malloc(sizeof(struct frame)*nelems);
もっと効率よく一度にメモリを確保してもよい
0512デフォルトの名無しさん
2009/08/29(土) 18:28:19違う
frame *buf[]; はコンパイルエラーになるから
frame *buf[1]; としている
このテクニックはメモリがシームレスに連続している事を前提として
いるから、規格は無視してとにかくこうしないと困るという場合に
用いられる事が多い
0513デフォルトの名無しさん
2009/08/29(土) 19:13:25long n = 0;
以下のように書くべきだといわれました。
long n = 0L;
C言語の本を読めば分かるといって理由は教えてもらえませんでした。
サフィックスをつけないといけない理由が分かりません。
誰か教えてください。
0514デフォルトの名無しさん
2009/08/29(土) 19:42:500515デフォルトの名無しさん
2009/08/29(土) 19:47:17long 型だから
よほど古いコンパイラを使ってるのでない限り気にしないけど
0516513
2009/08/29(土) 20:06:200517デフォルトの名無しさん
2009/08/29(土) 20:16:110なら特に困ることはないよ。
longがintより大きい環境で、intを超えた定数のときはLをつけないとエラーになるんだったかな?
もう忘れた。
0518デフォルトの名無しさん
2009/08/29(土) 20:16:38大抵のコンパイラならコンパイル時に何とかしてくれるはず
0519デフォルトの名無しさん
2009/08/29(土) 20:19:57↓こういうときもLをつけないとバグるかな?
printf("%ld %d", 10L, 20);
ただの代入だと、困るようなことはないと思う。
0520513
2009/08/29(土) 20:35:55もっと致命的なことが、起こるのかと思っていました。
私は経験もそんなにないのですが、先輩に指摘された
long n = 0L;
のような初期化は現場で一般的にどこでも使われるのでしょうか?
0521デフォルトの名無しさん
2009/08/29(土) 20:55:03一般的ではないんじゃないの?
上司の言うとおり、Cの本を適当にいくつかみてみて、longの変数に
代入してる箇所で、Lがついているか確認してみたら?
0522デフォルトの名無しさん
2009/08/29(土) 21:04:18long val = 2000000000 + 2000000000;
とかしちゃえばいいよ
0523デフォルトの名無しさん
2009/08/29(土) 22:36:29そういうバカなルールが出来ることはままあるな。
0524デフォルトの名無しさん
2009/08/29(土) 22:37:350525デフォルトの名無しさん
2009/08/29(土) 22:55:21丁寧にありがとうございました。
0526デフォルトの名無しさん
2009/08/30(日) 01:32:05要素番号0からメモリ領域が連続しているってので合ってますか?
0527デフォルトの名無しさん
2009/08/30(日) 01:33:220528デフォルトの名無しさん
2009/08/30(日) 01:35:30どうもありがとうございます!
0529デフォルトの名無しさん
2009/08/30(日) 01:58:170530デフォルトの名無しさん
2009/08/30(日) 02:00:09int=2バイトだとそのままアセンブラで組みそうだけど
0531デフォルトの名無しさん
2009/08/30(日) 02:03:400532デフォルトの名無しさん
2009/08/30(日) 02:05:280533デフォルトの名無しさん
2009/08/30(日) 02:11:270534デフォルトの名無しさん
2009/08/30(日) 02:13:58そういえあ64bit windowsの場合アプリケーションが使える最大メモリはかわってるんだっけ?
32bit windowsは2GBが最大だっけ?
0535デフォルトの名無しさん
2009/08/30(日) 02:14:32shortを4バイトにしたら、今度は2バイトの整数使えなくなるし。
0536デフォルトの名無しさん
2009/08/30(日) 02:15:001プロセスが最大2GBな
メモリ自体は3GBまで認識=32bit
64bitはどうなんだろう
果てしなく大きい事は確かだが
0537デフォルトの名無しさん
2009/08/30(日) 02:16:17だからLLP64にしたのかもな
0538デフォルトの名無しさん
2009/08/30(日) 02:17:57理論上は果てしなくだがPC業界ってなぜか中途半端なところを最大にしちゃうから幾度となく拡張する羽目になってるよねw
HDDとか言い例だし
まあ新しく変われば物が売れるからいいのかねw
0539デフォルトの名無しさん
2009/08/30(日) 02:18:400540デフォルトの名無しさん
2009/08/30(日) 02:19:19まあその頃には
int32_tやint16_t型が、
独自拡張も含めて、「当然のように使える」という状態になってるよ。たぶん。
32bitをカバーできないなら、__int32 とかが使われて、ね。
0541デフォルトの名無しさん
2009/08/30(日) 02:20:07ひどい物になってしまったけどな
まあ幸いな事に命令コードに関してだけで、ハードウェア的には
まずまずの線を行っているのでまだよかった
0542デフォルトの名無しさん
2009/08/30(日) 02:20:50差し当たってtime()の返すtime_tはまず64bitにされる罠
0543デフォルトの名無しさん
2009/08/30(日) 02:53:09Windows x64 では、1ユーザープロセスは8TBまで。
2GBの400万倍。
0544名無しさん@そうだ選挙に行こう
2009/08/30(日) 06:03:364000倍に見えるぞ
0545名無しさん@そうだ選挙に行こう
2009/08/30(日) 07:50:11例えばポインタとかデータサイズを256bit長にしたとして、それで解決すると思う?
現時点では処理が重くなってメモリも無駄に消費するだけだけど、いずれ足りなくなって拡張することになる。
「そんなバカな、256bitもあれば人類が滅亡するまで大丈夫だろ」って議論は過去に何度もなされてる。
歴史が繰り返した結果が今のぐちゃぐちゃの規格なわけだ。
これはある程度経験を積まないと理解できない話なんだけど、
一般的には、最初から保険をかけておくより、足りなくなってから拡張した方がコストは安く済むんだよ。
0546名無しさん@そうだ選挙に行こう
2009/08/30(日) 08:28:370547名無しさん@そうだ選挙に行こう
2009/08/30(日) 12:11:180548名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:32:07if(...) { ... }
みたいな。
0549名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:33:58その方が読みやすいんなら別にいい。
0550名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:36:36if (...) break;
みたいな。
0551名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:39:260552名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:40:27複文を書くときはbegin-endで囲み、単文の時は書かない
0553名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:44:08if(...)
処理;
後から追加した処理;
とかやらかしてプギャーするんですね分かります。
0554名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:45:12やった事は一度も無い
0555名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:47:38うん、そういうのが嫌だから、基本的には
if (...) {
...
}
を使っている。ただ、ループを抜けるときの式(break文のみ)などのときは
>>550の方が好み。
0556名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:02:13今はコードを統一するために
if ( cond ) {
statements;
}
にしている、スタイルを統一することは重要
確信犯的に
for ( x; y; z )
for ( u; v; w ) {
if ( c )
s;
}
こんなの見てびっくり、マジ止めてほしいわ
0557名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:05:12インデントすりゃいいじゃん
0558名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:06:550559名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:09:01あるとすればインデントを間違えた時だけ
0560名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:13:570561名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:18:11switch case 文を入れ子にすると
インデントめちゃくちゃになるよね。
0562名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:18:570563名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:19:57linux
git
postgresql
subversion
firefox
python
apache
vim
ruby
gimp
OpenOffic
jdkのライブラリのソース
机上の空論じゃなくて、実践でばりばりコードを書いてる人たちは、省略したってバグるとか思ってない。
0564名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:21:070565名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:21:370566名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:26:11高度なコードを書いたりする人は、ケアレスミスもぜんぜんしないとかってわけじゃないだろうし。
0567名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:26:25趣味でやってる人かな。
0568名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:28:01これって、趣味レベルで、他人にメンテナンスされないプロダクツなんだ。
0569名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:45:32{ }をつけるかつけないかみたいな些細な話は
チームで統一すべきコーディング標準の中には含まれないって書かれてるじゃろ。
重要なことは自分自身の書くソースコードの中では「一貫性を保つこと」であって
他人のコードに強制するのは間違っている、とも。本嫁よ、夏休みなんだから^^
0570名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:54:120571名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:54:40i = sizeof(array) / sizeof(array[0])
printf("%d\n",array[i]);
という感じにsizeof演算子で求めた要素数を変数に代入して、要素番号として使うことは無理なんでしょうか?
0572名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:55:50要素数でアクセスすると配列の最後の要素を1超えた要素になるよ
アドレスを取る事は許されるが要素の参照は許されない
0573名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:01:47俺は結構このミスやらかすな。注意力が足りないのかな・・・
if(...)|
処理;
VC++のエディタだとif文の括弧の右側にカーソルがあるときにエンターを押すと、
if(...)
|
処理;
↑の場所にカーソルが来るんだよ
自分がミスをする人間なら>>555みたいに書けばいいと思う
0574名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:08:36ありがとうございます。
では求めた要素数-1すればおkですか?
>アドレスを取る事は許されるが要素の参照は許されない
申し訳ないです、勉強はじめたばかりで理解できないので、
もう少し詳しく教えてもらえないでしょうか?
0575名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:10:46int array[10] = {1,2,3,4,5,6,7,8,9,10};
i = sizeof(array) / sizeof(array[0])
printf("%d\n",array[i-1]);
printf("%p\n", &array[i]);
みたいな感じ
0576名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:12:02要素数を超えた"アドレスそのもの"までは使うことはできるが、アドレスが指している"要素"を使うとアクセス違反になる。おけ?
0577名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:19:18件のケースなら[0.10)のように記述する。
0以上10未満。10を含まない。
10-0=10で、要素数10個と簡単に計算できる。
for ( int i = 0; i != 10; ++i )
が何回ループするかなど、簡単におまんこできる。
0578名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:23:33>>576
>>577
printf("%d\n",array[i-1]); がエラーになっちゃうのは何故なんだ・・・。
皆様の教えてくれたことを理解する作業に入ります。ありがとうございました。
0579名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:26:12そりゃ変数 i が定義されてないからでしょ
0580名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:31:32セミコロン忘れてました。バカスw
ご指摘どうもありがとうございました!
0581デフォルトの名無しさん
2009/08/31(月) 02:25:410582デフォルトの名無しさん
2009/08/31(月) 14:58:190583デフォルトの名無しさん
2009/08/31(月) 14:59:100584デフォルトの名無しさん
2009/08/31(月) 15:08:380585デフォルトの名無しさん
2009/08/31(月) 15:20:090586デフォルトの名無しさん
2009/08/31(月) 16:44:09新入社員からdelete[]pを使わなく良いかと質問があったんだが
現実的にdelete pで良いんだよな?
0587デフォルトの名無しさん
2009/08/31(月) 16:50:28new[]で確保したらdelete[]pで解放しないと鼻から悪魔だぞ
0588デフォルトの名無しさん
2009/08/31(月) 16:51:24スレ違いだが簡単に答えると意味に違いがある
delete[] p;はp = new T[n];の時、delete p;はp = new T;の時
メモリの管理情報が異なるので使い分けなければならない
0589デフォルトの名無しさん
2009/08/31(月) 16:51:330590586
2009/08/31(月) 16:59:25>>587->>589
ありがとう仕様として知っていたけど
return 0; return (0);程度の違いだと思っていた
0591デフォルトの名無しさん
2009/08/31(月) 17:01:54規格票読んでみ
0592デフォルトの名無しさん
2009/08/31(月) 17:16:16とりあえずEffective C++を読むといいよ
英語版はどっかの誰かがWebに載っけてたと思うし
0593デフォルトの名無しさん
2009/08/31(月) 21:33:56例えば
typdef struct AAAAA{
int a;
int b
}AAAAA_t;
のような構造体がある場合、
get(int param)
{
?????
}
を下記のようなmain関数から呼び出すと、paramに上記構造体のアドレスが返却されるという
ものを実装してますが
どうしてもうまくいきません。
宜しくお願いします。
int main(void)
{
get( ??? );
}
0594デフォルトの名無しさん
2009/08/31(月) 21:37:19ポインタで調べろ
0595デフォルトの名無しさん
2009/08/31(月) 21:38:44ヒントだけでも構わないのでお願いします。
0596デフォルトの名無しさん
2009/08/31(月) 21:39:03void get(AAAA_t** param) {
*param = &どこかにあるAAAA_tの実体;
}
こういうこと?
文面からすると初心者っぽいけど、いまからこんな変なコードを書くのはお勧めしない。
0597デフォルトの名無しさん
2009/08/31(月) 21:40:50596さんのおっしゃるようなAPIだとうまく実装できるのですが・・・
0598デフォルトの名無しさん
2009/08/31(月) 21:44:14ポインタ使わないとどうやってもmain()に値を返すことは不可能だよ。
0599デフォルトの名無しさん
2009/08/31(月) 21:48:37int main(void)
{
AAAAA_t a;
get((int)&a);
]
となるような気が。。
0600デフォルトの名無しさん
2009/08/31(月) 21:53:46get((int)&a);
void get(int param) {
*(AAAA_T**)param = &実体;
}
で、できるね。一般的な64bit環境では動かないだろうけど。
0601デフォルトの名無しさん
2009/08/31(月) 21:58:45ありがとうございます。
試してみます!
>一般的な64bit環境では動かない
よくわからないので簡単におしえてください。
Linuxでも動かないですか?
0602デフォルトの名無しさん
2009/08/31(月) 22:01:170603デフォルトの名無しさん
2009/08/31(月) 22:01:460604デフォルトの名無しさん
2009/08/31(月) 22:18:25get(int param)
{
?????
}
の形式じゃないといけないのかがまったくわからない。
なにか根本的な勘違いをしてる気がする。
0605デフォルトの名無しさん
2009/08/31(月) 22:25:42その機能をCで実装したいとかなのかなあ
自分も以前、配列を渡して要素数を返す関数を書こうとしてはまったことがある
0606デフォルトの名無しさん
2009/08/31(月) 22:52:21アドレスだろうが何だろうが
param で返すのはダメだろw
ひどすぎる……
0607デフォルトの名無しさん
2009/08/31(月) 23:05:53if ( !(c == 'y' || c == 'y') )
return;
length = (length < BUFSIZE) ? length : BUFSIZE;
flag = flag ? 1 : 0;
quote = (*line == '"') ? 1 : 0;
if (val & 1)
bit = 1;
else
bit = 0;
と 云う様な物なのですが 着目点が掴めないので助言をして頂けないでしょうか…
0608デフォルトの名無しさん
2009/08/31(月) 23:10:290609デフォルトの名無しさん
2009/08/31(月) 23:12:07可読性
0610デフォルトの名無しさん
2009/08/31(月) 23:13:18その問題の模範解答が改良かどうか疑問なので
分かったら教えて欲しい
下は改良というより書き換えただけ
改悪と言えなくも無い
'y' は両方小文字であってるのか?
if(toupper(c)!='Y') return;
if(length>BUFSIZE) length=BUFSIZE;
flag=!!flag;
quote=(*line=='"');
bit=val&1;
0611デフォルトの名無しさん
2009/08/31(月) 23:17:54flagについては、
if(flag) flag = 1;
の方が代入が一つ減る可能性あるかな。
0612デフォルトの名無しさん
2009/08/31(月) 23:22:02小文字では在りませんでした…
if ( !(c == 'y' || c == 'Y') )
return;
こうです
0613デフォルトの名無しさん
2009/08/31(月) 23:37:55打ち込み miss です
取り敢えず レスして頂いた source を比較して着目点を考える事にします…
上がって居る時に またお願いします
0614デフォルトの名無しさん
2009/09/01(火) 00:38:05もう一つ打ち込み miss が在りました…
flag = flag ? 0 : 1;
こうでした…
0615デフォルトの名無しさん
2009/09/01(火) 01:11:550616デフォルトの名無しさん
2009/09/01(火) 01:16:14もう一つ在りますが…
0617デフォルトの名無しさん
2009/09/01(火) 01:27:40日経ソフトウェアのMissionCのようなC言語学習ソフトがあったら教えてください
0618デフォルトの名無しさん
2009/09/01(火) 01:31:37int read(int *ip) {
scanf("%d", ip);
return *ip;
}
insert(&graph[vert], read(&val), read(&ch));
個人的に source に問題点が無い様に思えて仕方在りません
着目点も分からないのです… 今度の source は打ち込み miss は無いです
二度 確認しました…
0619デフォルトの名無しさん
2009/09/01(火) 01:51:56flagに1と0しか入らないことが確実なら
flag = 1 - flag;
とでも書かせたいのかね。
0620デフォルトの名無しさん
2009/09/01(火) 01:52:520621デフォルトの名無しさん
2009/09/01(火) 02:31:37だとおもうんだけど
0622デフォルトの名無しさん
2009/09/01(火) 02:32:412個あるread呼び出しのうち、どちらが先に呼ばれるかが分からないのが問題
0623デフォルトの名無しさん
2009/09/01(火) 02:46:18そう思うんならそれでいいんじゃね?
実行速度とか気にするほどのもんでもないしな。
0624デフォルトの名無しさん
2009/09/01(火) 02:52:49それは改良じゃなくて、改悪w
0625デフォルトの名無しさん
2009/09/01(火) 02:59:570626デフォルトの名無しさん
2009/09/01(火) 03:02:55それ以外の可能性を考えるほうが不自然だと思うが。
そもそもflag = flag ? 0 : 1;より劣るflag = !flag に改悪しちゃいかんよなw
0627デフォルトの名無しさん
2009/09/01(火) 03:04:050628デフォルトの名無しさん
2009/09/01(火) 03:12:11flag = flag ? 0 : 1;
00411A25 xor eax,eax
00411A27 cmp dword ptr [flag],0
00411A2B sete al
00411A2E mov dword ptr [flag],eax
flag = 1 - flag;
00411A31 mov eax,1
00411A36 sub eax,dword ptr [flag]
00411A39 mov dword ptr [flag],eax
flag ^= flag;
00411A3C mov eax,dword ptr [flag]
00411A3F xor eax,dword ptr [flag]
00411A42 mov dword ptr [flag],eax
flag = !flag;
00411A45 xor eax,eax
00411A47 cmp dword ptr [flag],0
00411A4B sete al
00411A4E mov dword ptr [flag],eax
0629デフォルトの名無しさん
2009/09/01(火) 03:15:09これが消費クロックは少なそうだな
あーでもあれか参照と書き込み両方あってもキャッシュに持ってくるからそれほど差はねーか
0630デフォルトの名無しさん
2009/09/01(火) 03:23:49flag ^= 1; は flag ^= flag に書き換えるとか、せこくない?w
0631デフォルトの名無しさん
2009/09/01(火) 03:26:14flag ^= 1;
00411A3C mov eax,dword ptr [flag]
00411A3F xor eax,1
00411A42 mov dword ptr [flag],eax
いずれにしても
flag = 1 - flag;
flag ^= 1;
は元のコードと挙動が異なる事には変わりないですね。
0632デフォルトの名無しさん
2009/09/01(火) 03:27:59if (toupper(c) == 'Y') return;
length = (length < BUFSIZE) ? length : BUFSIZE;
flag = !!flag;
quote = (*line == '"') ? 1 : 0;
bit = val & 1;
可読性落ちるだけだな
0633デフォルトの名無しさん
2009/09/01(火) 03:31:25if (flag != 0) {
flag = 1;
} else {
flag = 0;
}
とすべきだったのかもね。
if (flag == 1) {
flag = 1;
} else {
flag = 0;
}
とするのが愚であることは分かると思うけど。
0634デフォルトの名無しさん
2009/09/01(火) 03:31:580635デフォルトの名無しさん
2009/09/01(火) 03:33:220636デフォルトの名無しさん
2009/09/01(火) 03:34:56可読性重視でいいよw
0637デフォルトの名無しさん
2009/09/01(火) 03:35:440638デフォルトの名無しさん
2009/09/01(火) 03:36:210639デフォルトの名無しさん
2009/09/01(火) 03:38:38>>614
まぁ、いいたいことは分かる。
0640デフォルトの名無しさん
2009/09/01(火) 03:44:33勝手な思い込って言えるほど、この場合のflagの初期値に0と1が入らないと思うなら、
いったいどんな数字がflagの初期値だと思うの?
0641デフォルトの名無しさん
2009/09/01(火) 03:48:31ミスタイプではあったが、最初に書かれたコードは
flag = flag ? 1 : 0;
であり、flagに1か0しか入らないのであれば、このコードを削除することがいちばんの改良法なわけだし。
0642デフォルトの名無しさん
2009/09/01(火) 03:55:16アルゴリズムの改良も出来ないし,外部化することも出来ない
となると可読性くらいしか残らないんだけど,所望の動作が分からないのでコメントでも加えればいいんでね?
0643デフォルトの名無しさん
2009/09/01(火) 03:58:07些細な間違いをいつまでもグダグダいって、建設的な代案を出せないどころか
それにケチつけるだけかw
0644デフォルトの名無しさん
2009/09/01(火) 04:23:200645デフォルトの名無しさん
2009/09/01(火) 06:46:122回read関数の入力があるけど最初の入力がvalかchかが環境依存
0646デフォルトの名無しさん
2009/09/01(火) 07:56:360647デフォルトの名無しさん
2009/09/01(火) 13:50:220648デフォルトの名無しさん
2009/09/01(火) 13:53:10速度的には変化はないみたいだし、「改良」とは言えないってことじゃね。
0649デフォルトの名無しさん
2009/09/01(火) 15:43:580650デフォルトの名無しさん
2009/09/01(火) 15:47:55>flagに1と0しか入らないことが確実なら
って書いてるのに、しつこく絡むほうもどうかと思うがなw
0651デフォルトの名無しさん
2009/09/01(火) 15:49:00いつものことですw
0652デフォルトの名無しさん
2009/09/01(火) 15:50:080653デフォルトの名無しさん
2009/09/01(火) 15:52:26今のx86はわからねえw
flagが置かれてるメモリは参照書き込みあるけどキャッシュに持ってきてるから
誤差のようなレベルだけどな
むしろflagの置き場所で効率が変わるかもしれない
0654デフォルトの名無しさん
2009/09/01(火) 15:54:150655653
2009/09/01(火) 15:57:50離れてるからレジスタに乗ってるってことは少ないと思うので
そういえばデータ領域ってキャッシュ転送する場合は一定サイズのブロックで行われるんだっけ?
0656デフォルトの名無しさん
2009/09/01(火) 16:06:230657デフォルトの名無しさん
2009/09/01(火) 16:12:26いやいやw
今のプロセッサで今回のような微たるクロックの削減を考えるのは無意味だってw
flagの参照更新箇所がものすごい回数あるならあれだけどさ
0658デフォルトの名無しさん
2009/09/01(火) 16:18:01なんの根拠が??
0659デフォルトの名無しさん
2009/09/01(火) 16:18:20どうしたらいいかわからなくなりそうだが。
0660デフォルトの名無しさん
2009/09/01(火) 16:20:090661デフォルトの名無しさん
2009/09/01(火) 16:21:53どうだろ
今のプロセッサの場合はキャッシュの効率の方が重要だったりするしね
その昔のおじさんたちはゲームを作るのに三角関数などの計算をあらかじめ行って
テーブル化しておいたけど今のプロセッサは下手すると計算した方がいい場合がほとんどだしねえ
それだけメモリとCPUの速度差が無視できないレベルになってる
0662デフォルトの名無しさん
2009/09/01(火) 16:38:15どこが重いかをプロファイルして実測比較していくんだろうね
0663デフォルトの名無しさん
2009/09/01(火) 17:44:38コンペアが重いのは今でも変わってないだろ。
0664デフォルトの名無しさん
2009/09/01(火) 18:04:25メモリアクセスよりはよっぽど速い。つーか、処理速度を語りたいなら他所に行ってくれ。
0665デフォルトの名無しさん
2009/09/01(火) 19:09:47細かいこと気にするくらいだから、もっと遅いプロセッサ使ってる可能性もある。
0666デフォルトの名無しさん
2009/09/01(火) 22:15:03終了コードとしてあつかわれちゃうのです
0667デフォルトの名無しさん
2009/09/01(火) 22:20:57何のために?
行間を空けたいのならスペースの文字コード入れるとか
0668デフォルトの名無しさん
2009/09/01(火) 22:23:28文字列として扱わないようにすればいいよ
0669デフォルトの名無しさん
2009/09/01(火) 22:26:50文字列を終端の\0に頼らず自分で長さ管理する
0670デフォルトの名無しさん
2009/09/01(火) 23:12:320671デフォルトの名無しさん
2009/09/01(火) 23:16:400672デフォルトの名無しさん
2009/09/01(火) 23:24:47C++なら文字列クラスがあるのに。
それに相当するのってc言語にもあるっけ?
0673デフォルトの名無しさん
2009/09/01(火) 23:50:45自力でなんとかするしかない。
0674デフォルトの名無しさん
2009/09/01(火) 23:52:35俺の開発環境がC++で本当に良かったと痛感するわ。
0675デフォルトの名無しさん
2009/09/02(水) 00:12:13そのルール破るならそれは単なるバイト列だよ。
0676デフォルトの名無しさん
2009/09/02(水) 00:30:300677デフォルトの名無しさん
2009/09/02(水) 00:40:52おまえみたいに掟破りなことをするのがいるからC#が誕生するんだよ
0678デフォルトの名無しさん
2009/09/02(水) 01:59:180679デフォルトの名無しさん
2009/09/02(水) 04:27:360680デフォルトの名無しさん
2009/09/02(水) 05:10:21文字コード其々にライブラリ化せないかんのがにんともかんとも
0681デフォルトの名無しさん
2009/09/02(水) 05:23:44元利計算に使いたいのですが、ググっても分からず困っています。
0682681
2009/09/02(水) 05:27:05重ねて質問なのですが、累乗する際に有効な計算式や関数があったら教えてください。
0683デフォルトの名無しさん
2009/09/02(水) 05:43:040684デフォルトの名無しさん
2009/09/02(水) 05:45:05有用な関数を教えてくださり、どうもありがとうございました。
0685デフォルトの名無しさん
2009/09/02(水) 06:01:25うまく作動しません。改善点を教えていただけると助かります。
#include<stdio.h>
#include<math.h>
int main(void)
{
int period;
double rate,rating,sum,money;
printf("元金の入力:");
scanf("%d",&money);
printf("利率(年利)の入力:");
scanf("%lf",&rate);
printf("期間の入力:");
scanf("%d",&period);
rating = pow((1 +rate),period);
sum = money * rating;
printf("元利合計は%dです\n",(int)sum);
return 0;
}
0686685
2009/09/02(水) 07:31:57>>685のプログラムについてなんですが、計算の途中経過を逐一チェックしようと
プログラムの間にprintf関数をはさんでみた所、全ての数値は正しく計算されており、
最後の変数sumでも正しい結果が得られました。
printf関数の挿入以外は上記のプログラムと全く同じで、計算方法は全く同じなのに
どうしてこのような結果になるのか全く分からず困っています。
アドバイスよろしくお願いします。
0687デフォルトの名無しさん
2009/09/02(水) 07:47:230688デフォルトの名無しさん
2009/09/02(水) 07:49:34↓
printf("元利合計は%fです\n",sum);
0689デフォルトの名無しさん
2009/09/02(水) 07:53:30あと一番よく使われるコンパイラ教えて
0690デフォルトの名無しさん
2009/09/02(水) 07:57:10>>688
こんな朝早くに回答してくれて本当に感謝です。
どこもいじっていないと書きましたが、成功したプログラムでは指定子が一致していました。
printf関数挿入の際に無意識で直していたようです…。
基本的な所からきちんと見直していかなければいけませんね。
どうもありがとうございました!
0691デフォルトの名無しさん
2009/09/02(水) 09:37:590692デフォルトの名無しさん
2009/09/02(水) 09:46:070693デフォルトの名無しさん
2009/09/02(水) 14:17:20いたずらする小人さんの方が多いけどw
0694デフォルトの名無しさん
2009/09/02(水) 16:06:18gcc
0695デフォルトの名無しさん
2009/09/02(水) 16:25:05お金があったら欲しいやつ
使われてるかどうかはしらね
http://sourceforge.jp/magazine/09/02/18/1117225
0696デフォルトの名無しさん
2009/09/02(水) 18:28:450697デフォルトの名無しさん
2009/09/02(水) 19:06:390698デフォルトの名無しさん
2009/09/04(金) 07:12:07それぞれ違う変数に代入したいのですが、良い方法はありますか?
0699デフォルトの名無しさん
2009/09/04(金) 07:16:000700デフォルトの名無しさん
2009/09/04(金) 07:28:14欲しいのは数値化文字列か、先ずそこをはっきりしろ。
0701デフォルトの名無しさん
2009/09/04(金) 07:40:05助かりました。どうもありがとうございます。
>>700
計算に使用したいので欲しいのは数値です。
>>699さんの方法でやってみようと思います、どうもありがとうございました。
0702デフォルトの名無しさん
2009/09/04(金) 12:01:342000年2月1日の結果を求めたところ2という結果が返ってきました。
wikiなどを見たところ2は月曜日に当たるように思うのですが、
カレンダーを確認すると2000年2月は火曜から始まっています。
C言語に直しているサイトを参照してみたのですが、自分では間違いがわからず困っています。
間違っている所がありましたら教えてください。よろしくお願いします。
if((month == 1) || (month == 2)){
year--;
month += 12;
}
day = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + 1) % 7;
/*ツェラーの公式*/
printf("ツェラーの公式の結果%d\n",day);
※yearとmonthはscanfから入力された数値を用い、日にちは1で固定しています。
0703デフォルトの名無しさん
2009/09/04(金) 12:50:18そのサイトに、0ならば日曜日とか書いてない?
0704デフォルトの名無しさん
2009/09/04(金) 12:52:080705デフォルトの名無しさん
2009/09/04(金) 12:53:040706デフォルトの名無しさん
2009/09/04(金) 13:12:550707デフォルトの名無しさん
2009/09/04(金) 13:30:360708デフォルトの名無しさん
2009/09/04(金) 14:25:230709デフォルトの名無しさん
2009/09/04(金) 14:28:50> いちいちめくじら立てんな
無能なヤツの言い訳w
0710デフォルトの名無しさん
2009/09/04(金) 15:06:59馬鹿だねぇ
0711デフォルトの名無しさん
2009/09/04(金) 15:11:020712デフォルトの名無しさん
2009/09/04(金) 15:13:42ねぇねぇ、無能って
どんな気持ち?
∩___∩ ∩___∩
♪ | ノ ⌒ ⌒ヽハッ __ _,, -ー ,, ハッ / ⌒ ⌒ 丶|
/ (●) (●) ハッ (/ "つ`..,: ハッ (●) (●) 丶 今、どんな気持ち?
| ( _●_) ミ :/ :::::i:. ミ (_●_ ) | ねぇ、どんな気持ち?
___ 彡 |∪| ミ :i ─::!,, ミ、 |∪| 、彡____
ヽ___ ヽノ、`\ ヽ.....::::::::: ::::ij(_::● / ヽノ ___/
/ /ヽ < r " .r ミノ~. 〉 /\ 丶
/ /  ̄ :|::| ::::| :::i ゚。  ̄♪ \ 丶
/ / ♪ :|::| ::::| :::|: \ 丶
(_ ⌒丶... :` | ::::| :::|_: /⌒_)
| /ヽ }. :.,' ::( :::} } ヘ /
し )). ::i `.-‐" J´((
ソ トントン ソ トントン
0713デフォルトの名無しさん
2009/09/04(金) 15:40:36ねぇねぇ、無能って
どんな気持ち?
∩___∩ ∩___∩
♪ | ノ ⌒ ⌒ヽハッ __ _,, -ー ,, ハッ / ⌒ ⌒ 丶|
/ (●) (●) ハッ (/ "つ`..,: ハッ (●) (●) 丶 今、どんな気持ち?
| ( _●_) ミ :/ :::::i:. ミ (_●_ ) | ねぇ、どんな気持ち?
___ 彡 |∪| ミ :i ─::!,, ミ、 |∪| 、彡____
ヽ___ ヽノ、`\ ヽ.....::::::::: ::::ij(_::● / ヽノ ___/
/ /ヽ < r " .r ミノ~. 〉 /\ 丶
/ /  ̄ :|::| ::::| :::i ゚。  ̄♪ \ 丶
/ / ♪ :|::|=@ ::::| :::|: \ 丶
(_ ⌒丶... :` | ::::| :::|_: /⌒_)
| /ヽ }. :.,' ::( :::} } ヘ /
し )). ::i `.-‐" J´((
ソ トントン ソ トントン
0714デフォルトの名無しさん
2009/09/04(金) 15:54:27m9(^Д^)プギャーーーッ
0715デフォルトの名無しさん
2009/09/04(金) 16:34:18でたらめ多いしね。
0716デフォルトの名無しさん
2009/09/04(金) 16:43:59って言うやつ自身よりはWikipediaの方がマシなのであった。
0717デフォルトの名無しさん
2009/09/04(金) 16:54:00でC#厨に居座られたくないからな
WikipediaがゴミだったとしてもWikiと略すのはいやだな
0718デフォルトの名無しさん
2009/09/04(金) 17:08:35その略は不適当だろ?
例:USBメモリ->USB
とか。
カルボナーラスパゲッティ
と
カルボナーラ
も違うとか聞いたがな。忘れたけど。
0719デフォルトの名無しさん
2009/09/04(金) 17:11:520720デフォルトの名無しさん
2009/09/04(金) 17:14:43お前ら今からはC#の話だけをしろよ
0721デフォルトの名無しさん
2009/09/04(金) 17:16:10このように、現代の若者は単語を略すのが好きです。
略して、ゲワタリャです。
0722デフォルトの名無しさん
2009/09/04(金) 17:18:010723デフォルトの名無しさん
2009/09/04(金) 17:21:500724デフォルトの名無しさん
2009/09/04(金) 18:42:020725デフォルトの名無しさん
2009/09/04(金) 19:51:05だからC#の#は省略できない。
東中野を中野というのようなもの。
0726デフォルトの名無しさん
2009/09/04(金) 20:09:53S c heme
S c ala
C ASL
BASI C
みんなC言語
0727デフォルトの名無しさん
2009/09/04(金) 20:19:47ほんとにOOPを追加しただけなのでしょーか?
0728デフォルトの名無しさん
2009/09/04(金) 20:24:29「だけ」ではないだろう。
ただしメインはoopということで。
0729デフォルトの名無しさん
2009/09/04(金) 21:17:35なんでも++しているような気がしてならないのですがきのせいですかそうですかっ
0730デフォルトの名無しさん
2009/09/04(金) 21:32:39C++は最初は「C with Classes」という名称で、それに上のようなものが
後になって追加された。
0731デフォルトの名無しさん
2009/09/04(金) 21:53:17って聞いたけど...
0732デフォルトの名無しさん
2009/09/04(金) 22:06:15開発者が同じというのもあるんだろうけど。
0733デフォルトの名無しさん
2009/09/04(金) 22:40:08何を言ってるんだと思ったけどやっと理解した
なんと安易なw
0734デフォルトの名無しさん
2009/09/04(金) 22:46:29いや、Javaだろ。
0735デフォルトの名無しさん
2009/09/04(金) 23:31:590736デフォルトの名無しさん
2009/09/04(金) 23:34:550737デフォルトの名無しさん
2009/09/05(土) 02:49:26スレ違い
0738デフォルトの名無しさん
2009/09/05(土) 07:55:300739デフォルトの名無しさん
2009/09/05(土) 17:08:55ソートして並べる、というプログラムが欲しいのですが
どなたか御教授願えないでしょうか??
よろしくお願いします
0740デフォルトの名無しさん
2009/09/05(土) 17:15:470741デフォルトの名無しさん
2009/09/05(土) 17:16:04> 麻雀の配牌をランダムに生成し、
ここは乱数で行う。
> ソートして並べる
これはもう容易だろ。
具体的には麻雀の牌136枚にそれぞれ
0〜135の通し番号を付けるのがいいかもね。
0742デフォルトの名無しさん
2009/09/05(土) 17:17:49まさかと思うけどソートは出来るよね?
知らないなら遅いけど簡単な
C言語講座:バブルソート
ttp://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
この辺をご覧ください。
0743デフォルトの名無しさん
2009/09/05(土) 17:21:210744742
2009/09/05(土) 17:22:48まあそうなんだけどね。
車輪の再発明はするべきではないが、
ソートを知らない初心者の場合は
その限りではないと思ってさ。
うん、まあいいや。
0745デフォルトの名無しさん
2009/09/05(土) 17:26:00単に答えだけが欲しいんだろ?素直になれよ
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct tag_mj_tile_t{
int id;
}mj_tile_t;
char *get_symbol(char *dest, int id){
sprintf(dest, "%.2s", &("1m2m3m4m5m6m7m8m9m1p2p3p4p5p6p7p8p9p1s2s3s4s5s6s7s8s9s東南西北白發中"[(id/4)*2]));
return dest;
}
void swap_tile(mj_tile_t *a, mj_tile_t *b){
mj_tile_t t;
t=*a; *a=*b; *b=t;
}
int compare_tile(const mj_tile_t *a, const mj_tile_t *b){
if(a->id<b->id) return -1;
return (a->id>b->id);
}
int main(void){
int i;
mj_tile_t tile[136], haipai[14];
char symbol[10];
srand(time(NULL));
for(i=0;i<136;i++) tile[i].id=i;
for(i=0;i<136;i++) swap_tile(&tile[i], &tile[rand()%(i+1)]);
for(i=0;i<14;i++) haipai[i]=tile[i];
qsort(haipai, 14, sizeof(mj_tile_t), (int (*)(const void*, const void*))compare_tile);
for(i=0;i<14;i++) printf(" %s", get_symbol(symbol, haipai[i].id));
return 0;
}
0746デフォルトの名無しさん
2009/09/05(土) 17:31:32何でそんなにやさしいんだ。
0747デフォルトの名無しさん
2009/09/05(土) 17:32:27彼のソースを実行するとこうなった。
0748デフォルトの名無しさん
2009/09/05(土) 17:41:340750デフォルトの名無しさん
2009/09/05(土) 18:51:070751デフォルトの名無しさん
2009/09/05(土) 21:36:280752デフォルトの名無しさん
2009/09/05(土) 21:42:38とりあえずもう一度落ち着いて考えてよう。
0753デフォルトの名無しさん
2009/09/06(日) 00:22:06なら君の手牌は毎回同じでいいのかね?
0754デフォルトの名無しさん
2009/09/06(日) 00:24:110755デフォルトの名無しさん
2009/09/06(日) 00:25:070756デフォルトの名無しさん
2009/09/06(日) 00:27:040757デフォルトの名無しさん
2009/09/06(日) 00:59:130758デフォルトの名無しさん
2009/09/06(日) 01:04:280759デフォルトの名無しさん
2009/09/06(日) 02:31:32誰か教えてくだしあ><
0760デフォルトの名無しさん
2009/09/06(日) 02:52:55うまく作れません。どなたか作成、または作成の仕方のアドバイスをしてもらえませんか?
DrawLine (0,0,1,1)
このように初めに始点の座標、次に終点の座標xyを指定して線を引くプログラムです。
DrawLine (0,0,cos(e), 1)
現在このようにして0,0を中心にcosのθ部分をfor文で微小変化させながらx軸周りに円を書こうと思ったのですが、このプログラムだと高さが1
の部分の線しか表示されません。
そこでy座標の1を変数hにしてどうにかしようと思ってるのですがどのように変化させればいいか考えてみたのですがわかりませんでした。
hをどのように変化させていけばきれいな円が書けるか教えてください。、どなたかお願いします。
0761デフォルトの名無しさん
2009/09/06(日) 02:55:16用途じゃなくて使い方?
0762デフォルトの名無しさん
2009/09/06(日) 02:59:44http://pc12.2ch.net/test/read.cgi/tech/1248010352/845
解決したりしなかったり面倒な人だね
ちなみにdpiいくつ?
0763デフォルトの名無しさん
2009/09/06(日) 03:03:28sin(e)にしてみ
0764デフォルトの名無しさん
2009/09/06(日) 03:11:13?
この質問は私ではないですよ??
0765デフォルトの名無しさん
2009/09/06(日) 03:11:30for(i=1; i<n; i++) {
x1 = cos(2 * PI / n * i);
y1 = sin(2 * PI / n * i);
DrawLine(x0,y0,x1,y1);
x0 = x1;
y0 = y1;
}
円ってこんな感じに描くんじゃねーの?
0766デフォルトの名無しさん
2009/09/06(日) 03:15:49出来ました
ありがとうございます
0767デフォルトの名無しさん
2009/09/06(日) 03:18:21あらぬ疑いをかけて申し訳ないです。
直径1mの円描画乙おめ
0768デフォルトの名無しさん
2009/09/06(日) 03:20:03いえ、ありがとうございます
0769デフォルトの名無しさん
2009/09/06(日) 08:21:27課題なら専用スレへ。
Cとは関係ない話だし。
0770デフォルトの名無しさん
2009/09/06(日) 09:55:15使い方です><
既に動いてるC言語プログラムと通信って可能ですかね?
0771デフォルトの名無しさん
2009/09/06(日) 09:59:03そのプログラムが出力(或いは入力)するファイル名が判っていて事前に作って置けるのであれば、
名つきパイプに出力(或いは入力)させることはできる。
しかし、やっぱりスレ違い。
0772デフォルトの名無しさん
2009/09/06(日) 11:15:170773デフォルトの名無しさん
2009/09/06(日) 11:19:060774デフォルトの名無しさん
2009/09/06(日) 12:09:11いいえ。マニュアルを読みましょう。
0775デフォルトの名無しさん
2009/09/06(日) 12:10:200776デフォルトの名無しさん
2009/09/06(日) 12:17:12不思議!数学の定義から始めて欲しいところだね
0777デフォルトの名無しさん
2009/09/06(日) 12:23:37>だからそれは数学上の場合を言ってるんです。実際はどうなるのかを聞いています
いいえ。xが0の場合は数学的には解がありません。
0778デフォルトの名無しさん
2009/09/06(日) 12:26:050779デフォルトの名無しさん
2009/09/06(日) 12:33:500780デフォルトの名無しさん
2009/09/06(日) 12:43:09便宜上、atan2()はそう解釈するよう仕様が決められているね。
0781デフォルトの名無しさん
2009/09/06(日) 13:34:44___, - 、
/_____)
. | | / ヽ || 数学もC++も、どっちもできなくても腹は減るんだな。
|_| ┃ ┃ ||
(/ ⊂⊃ ヽ ) /  ̄ ̄ ̄ \
! \_/ ! ( ( (ヽ ヽ
,\ _____ /、 | −、ヽ\ !
ゝ/  ̄ ̄ ̄ \ /. \/ ̄\/ .\ |・ |─ |__ /
/ _____ヽ | | _┌l⊂⊃l | | ┌ - ′ ) /
| | / ─ 、−、! | | / ∋ |__| | | ヽ / ヽ <
|__|─ | /|ヽ | | /`, ──── 、 | | ` ─┐  ̄
( ` ─ o−i ヽ / \ .ノ_ .j ̄ ̄ |
ヽ、 ┬─┬ノ / ̄ ./ ヽ- 、\ /  ̄ ヽ\
// /ヽ─| | ♯| / i | ..) ) \ i ./ |\\
| | / `i'lノ))┘/ , ─│ !-l⊂⊃l┐__ヽ__/\ / | | |
| | | ̄| / /| / ( (... .ヽ / |____|∈ __./ .| | |
|_|/ヽ、_/ ./ ` ─ /\ /ヽ  ̄ \-──| \|_|
| | |───/____i l=======l |_____ __\ |\ | |
|/ ヽ── |______\ l二|^|二二|^|二l 丿______ |_丿 \|
l ̄ ̄ ̄ ̄ ̄ | | | |. | | | | | | | |  ̄ ̄ ̄ l
| ̄| ̄ ̄ ̄ ̄.| |────| |. | | | | | |.──────| | ̄ ̄ ̄| ̄|
0782デフォルトの名無しさん
2009/09/06(日) 13:39:12えっ
0783デフォルトの名無しさん
2009/09/06(日) 13:58:56--
DESCRIPTION
`atan2' computes the inverse tangent (arc tangent) of Y/X. `atan2'
produces the correct result even for angles near pi/2 or -pi/2 (that
is, when X is near 0).
RETURNS
`atan2' and `atan2f' return a value in radians, in the range of -pi to pi.
If both X and Y are 0.0, `atan2' causes a `DOMAIN' error.
You can modify error handling for these functions using `matherr'.
0784デフォルトの名無しさん
2009/09/06(日) 14:55:12-- Function: double atan2 (double Y, double X)
-- Function: float atan2f (float Y, float X)
-- Function: long double atan2l (long double Y, long double X)
This function computes the arc tangent of Y/X, but the signs of
both arguments are used to determine the quadrant of the result,
and X is permitted to be zero. The return value is given in
radians and is in the range `-pi' to `pi', inclusive.
If X and Y are coordinates of a point in the plane, `atan2'
returns the signed angle between the line from the origin to that
point and the x-axis. Thus, `atan2' is useful for converting
Cartesian coordinates to polar coordinates. (To compute the
radial coordinate, use `hypot'; see *Note Exponents and
Logarithms::.)
If both X and Y are zero, `atan2' returns zero.
加えて
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/atan2.3.html
処理系定義って事かね
0785デフォルトの名無しさん
2009/09/07(月) 11:37:06arctan y/x がxが0の場合に0になる根拠まだ〜
0786デフォルトの名無しさん
2009/09/07(月) 12:20:550787デフォルトの名無しさん
2009/09/07(月) 16:43:220788デフォルトの名無しさん
2009/09/07(月) 23:54:49void print_rec(int num);
int main(void)
{
print_rec( 0 );
return 0;
}
/* 100を起点に、引数までの数値を表示する再帰関数 */
void print_rec(int num)
{
if( num <= 100 ) /* 100まで再帰呼び出し */
{
print_rec( num+1 );
printf( "%d\n", num ); /* 再帰呼び出しから戻ってきたときに表示 */
}
}
このプログラムでprint_rec( num+1 );の部分でnum+○の○の部分だけ減っていくのが
よく分からないのですが、なぜ−ではないのでしょうか?
0789デフォルトの名無しさん
2009/09/08(火) 00:00:33print_rec(0) は何をするか? ・・・ print_rec(1) を呼び出した後、0を表示する。
print_rec(1) は何をするか? ・・・ print_rec(2) を呼び出した後、1を表示する。
print_rec(2) は何をするか? ・・・ print_rec(3) を呼び出した後、2を表示する。
以下略
表示するのは、呼び出した後であることに注意しよう。
つまり、0を表示するのは、1を表示した後である。
0790デフォルトの名無しさん
2009/09/08(火) 00:05:05{
if( num <= 100 ) /* 100まで再帰呼び出し */
{
printf( "%d\n", num ); /* 再帰呼び出しする前に表示 */
print_rec( num+1 );
}
}
0791デフォルトの名無しさん
2009/09/08(火) 01:52:35> y が +0 (-0) で x が +0 の場合、+0 (-0) が返される。
さらに条件が付くけど、これは?
0792デフォルトの名無しさん
2009/09/08(火) 09:18:32「これは?」って、何を聞きたいの?
まさかとは思うけど、「数学上」と断りをつけているのに「xが0の場合」とだけ書いているにも拘らず
「更に」yが0の場合のことを語っているなんて寝言を言いたいなら眠った方がいい。
0793、
2009/09/08(火) 09:23:370794デフォルトの名無しさん
2009/09/08(火) 09:25:49Linuxはどうなってるのかしらね
0795デフォルトの名無しさん
2009/09/08(火) 09:39:38ビルドエラーが出ていると言う時点で、何か大きな勘違いをしている。
何をしたいのか、どんなエラーが出るのか書きたまえ。
0796793
2009/09/08(火) 09:48:520797デフォルトの名無しさん
2009/09/08(火) 10:00:27ここはCの入門編の質問スレだから、Cの用語で質問できないのならお門違い。
0798デフォルトの名無しさん
2009/09/08(火) 10:23:28該当部分のソースのせて。
あなたの説明では必要な情報が全部落ちてる。
0799デフォルトの名無しさん
2009/09/08(火) 11:23:250800デフォルトの名無しさん
2009/09/08(火) 11:25:440801デフォルトの名無しさん
2009/09/08(火) 11:56:20codepad
ttp://codepad.org/
ここに貼れ。
0802デフォルトの名無しさん
2009/09/08(火) 12:03:44超かわいそうwwwwwwwwwwww
0803デフォルトの名無しさん
2009/09/08(火) 12:08:16> テーブルの構築で、二つの要素があります。
> ここでは、A、Bとします。検索時Bを引っ掛けたいのです。
> Aはなんでもよいです。Aの部分をワイルドカードにしたいです。
> エラーの種類は構文エラーです。
このレスは無いとおもうぜww
スレタイ知らなければ
ぱっと見ではC言語の質問しているとは思えないだろ?
0804デフォルトの名無しさん
2009/09/08(火) 13:41:33数学上、xがゼロの時はpi/2なの?
0805デフォルトの名無しさん
2009/09/08(火) 13:43:08select * from table_a where B = 検索条件;
と回答してしまいたくなるよなぁ
0806デフォルトの名無しさん
2009/09/08(火) 13:52:380807デフォルトの名無しさん
2009/09/08(火) 14:19:210808デフォルトの名無しさん
2009/09/08(火) 14:25:26それが言えるのはyが0でないときに限る。
同様に、
yが0なら π or -だろ、数学的に考えて。
も成り立つ。ただしこれも言えるのはxが0でないときに限る。
そして
数学の世界で厳密に語るなら
x=y=0の時は未定義(不定の値)となる。
C99の世界で厳密に語るなら
未定義だったり不定だったりはせず、
The atan2 functions compute the value of the arc tangent of y/x, using the signs of both arguments to determine the quadrant of the return value. A domain error may occur if both arguments are zero.
この様に定められている。
0809デフォルトの名無しさん
2009/09/08(火) 16:40:29極限値とるにしても近づけ方によって値が変わるし
0810808
2009/09/08(火) 19:11:46どうだろうねぇ。
NaNだと数じゃないって意味になっちゃうからねぇ。
まあNaNにするべきという見解もありだろうけど、
数学的には任意(不定)ってだけで数じゃないとまでは言い切って無い気がする。
べきとかべきじゃない議論は不毛になりやすいから
あんま深入りはしないでおこう。
0811デフォルトの名無しさん
2009/09/08(火) 21:53:26のちの処理に影響が出てしまうのですがどうにかできませんか
0812デフォルトの名無しさん
2009/09/08(火) 22:45:10受け取ったデータを全部使う必要なんてないぜ
0813デフォルトの名無しさん
2009/09/08(火) 23:07:36そのプロトコルに準拠するような処理にするしかない
0814デフォルトの名無しさん
2009/09/09(水) 11:10:31そのプロトコルを作った人を呪え。
普通はテキスト部とバイナリ部を分けるから問題にならんと思うのだが……
0815デフォルトの名無しさん
2009/09/09(水) 15:35:59変数名まで書くのと省略するのとどっちが主流なの?
int func(int x, int y);
int func(int, int);
0816デフォルトの名無しさん
2009/09/09(水) 15:39:13名前を書いたほうが、プロトタイプ宣言を見ただけで意味が分かる
0817デフォルトの名無しさん
2009/09/09(水) 15:39:55俺は昔後者の方がタイプ量が少ないと思っていたが
今は全部前者
コピペで貼り付けてる
0818デフォルトの名無しさん
2009/09/09(水) 18:17:150819デフォルトの名無しさん
2009/09/09(水) 18:17:56www
0820デフォルトの名無しさん
2009/09/09(水) 18:29:03こいつバカ過ぎるwww
>>815
どっちが主流かどうかはちょっと分からん。
しかし変数名は飾りじゃない以上、付けるべきでは?
むしろ付けないのはC++でオーバーロード解決のためにつかう
便宜上のクラスとかじゃね?
0821デフォルトの名無しさん
2009/09/09(水) 18:31:17int func(x,y)
int x;
int y;
{
}
0822デフォルトの名無しさん
2009/09/09(水) 18:32:12スレ違いになるから詳しくは書かないが、C++の場合は宣言だけでなく定義の仮引数名も省略できる。
0823820
2009/09/09(水) 18:45:22うむ、俺も
> C++でオーバーロード解決のためにつかう
> 便宜上のクラスとかじゃね?
これはそれを言いたかったんだが。
わかりにくかったかな?・・・。
まあいいか。スレ違いだしね、
0824デフォルトの名無しさん
2009/09/09(水) 19:41:140825デフォルトの名無しさん
2009/09/09(水) 19:44:120826デフォルトの名無しさん
2009/09/09(水) 20:08:41必要なパラメーターと各パラメーターの変数を使った式を書いていただけませんか?
よろしくお願いします
0827デフォルトの名無しさん
2009/09/09(水) 20:34:060828デフォルトの名無しさん
2009/09/09(水) 20:34:55台形積分
0829デフォルトの名無しさん
2009/09/09(水) 20:44:21v = v0 + 10 * t
0830デフォルトの名無しさん
2009/09/09(水) 20:59:45ありがとうございます
0831デフォルトの名無しさん
2009/09/09(水) 21:03:19これにて終了。
0832デフォルトの名無しさん
2009/09/09(水) 21:23:140833デフォルトの名無しさん
2009/09/09(水) 21:24:12プロトタイプなんてコンパイラがみるもんで、人間がみるもんじゃないから
書かなくていいよ。
void hoge(int x, int y);
void hoge(int row, int col) {・・・}
となってて、プロトタイプ見て信じてたらひどいことになる。
0834デフォルトの名無しさん
2009/09/09(水) 21:24:36これ参考にして自分で組んでみ
精度が欲しかったら4次ルンゲ・クッタ法を使う
http://nyan11.ciao.jp/B/NA/EWSNA/linkANNA.html
↑
ここのEULER.CとかEULER2.C
.ルンゲ・クッタ法はRK4.C
0835デフォルトの名無しさん
2009/09/09(水) 21:24:580836デフォルトの名無しさん
2009/09/09(水) 21:35:25その例はさすがに無理があるというか、当てはまらないだろう。
0837デフォルトの名無しさん
2009/09/09(水) 21:36:18適当なこと言うなよ。
0838デフォルトの名無しさん
2009/09/10(木) 03:46:57シリアル通信をして一文字づつデータを取得しようと思い。
ttp://www.takebay.net/~daigo-ao/paddlewiki.pl/title_A5B7A5EAA5A2A5EBC4CCBFAE2852532D3233324329A4C7C1F7BFAEA1A6BCF5BFAEA4F2B9D4A4A6A5D7A5EDA5B0A5E9A5E0.html
を利用したのですが、str や pszBuf に入るデータが一文字づつではなくて困っています。
上のソースからどのようにすれば一文字づつのデータを取得することが出来るでしょうか?
0839デフォルトの名無しさん
2009/09/10(木) 03:53:530840デフォルトの名無しさん
2009/09/10(木) 04:00:330841デフォルトの名無しさん
2009/09/10(木) 04:07:18str[0] str[1]って感じで文字ごとにアクセスできるよ
0842838
2009/09/10(木) 04:27:53ありがとうございます。
私のやりたいことを伝えられなくて申し訳ありません。
以下のようにGPSのデータを加工しようと考えています。
rx_dataには一文字ずつ入って欲しくて
rx_data = ?
の?の部分を何とか作れないかと考えています。
/* 受信データの取り込み */
while(1){
i = 0;
do{
rx_data = sci1_rx(); // 1文字受信
rx_b[i] = rx_data; // 受信データを順に配列変数に入れる
i++;
}while(rx_data != '\n'); // 改行文字の場合は取込停止
rx_b[i] = '\0';
for(i = 0; i < 6; i++){ // 文字列rx_bから最初の6文字を取出す
b[i] = rx_b[i];
}
b[i] = '\0';
c = strcmp(a, b); // 文字列aと文字列bを比較する
if(c == 0){ // 取得した文字列がRMCセンテンスの場合
for(i = 0; i < 2; i++){ // 緯度データの切り取り
lati_s1[i] = rx_b[i +16];
}
lati_s1[i] = '\0';
・・・・・
0843デフォルトの名無しさん
2009/09/10(木) 05:10:16受信自体をどこでやるのかが不明なんだけど、sci1_rxの中でやりたいと思えばいいの?
…質問者がレスするたびに内容が変わりまくるパターンだろうか
0844デフォルトの名無しさん
2009/09/10(木) 05:30:180845838
2009/09/10(木) 05:36:37ありがとうございます。
シリアル通信は
ttp://www.takebay.net/~daigo-ao/paddlewiki.pl/title_A5B7A5EAA5A2A5EBC4CCBFAE2852532D3233324329A4C7C1F7BFAEA1A6BCF5BFAEA4F2B9D4A4A6A5D7A5EDA5B0A5E9A5E0.html
で行っているのでsci1_rx() ※本来で有れば一文字ずつ受信の所をなんとか上のソースを活かして実装できない物かと考えています
現状のソースではは str や pszBufの中身を取り出すと
$GPGSA,A,3,24,12,26,14,30,22,27,21,09,18,,,2.5,1.6,1.9*3B
$GPRMC,202700.000,A,3559.7317,N,13939.6303,E,0.17,228.81,090909,,*05
$GPGGA,202701.000,3559.7317,N,13939.6302,E,1,10,1.6,22.1,M,39.1,M,,0000*68
$GPGSA,A,3,24,12,26,14,30,22,27,21,09,18,,,2.5,1.6,1.9*3B
というような感じで一行ごとに出てきます。
sci1_rx();にあたる部分を実装したいと考えています。
0846デフォルトの名無しさん
2009/09/10(木) 05:37:31while(1){
i = 0;
do{
rx_data = sci1_rx(); // 1文字受信
rx_b[i] = rx_data; // 受信データを順に配列変数に入れる
i++;
}while(rx_data != '\n'); // 改行文字の場合は取込停止
rx_b[i] = '\0';
for(i = 0; i < 6; i++){ // 文字列rx_bから最初の6文字を取出す
b[i] = rx_b[i];
}
b[i] = '\0';
c = strcmp(a, b); // 文字列aと文字列bを比較する
if(c == 0){ // 取得した文字列がRMCセンテンスの場合
for(i = 0; i < 2; i++){ // 緯度データの切り取り
lati_s1[i] = rx_b[i +16];
}
lati_s1[i] = '\0';
・・・・・
一文字ずつの受信が出来れば、
/* 受信データの取り込み */
以降のソースでGPSデータの加工が可能になります。
よろしくお願いします。
0847デフォルトの名無しさん
2009/09/10(木) 07:08:50こんな感じかねぇ。インデックスの計算とか間違ってるかもしれないけど。
char* gBuf;
int gBufLen = 0;
int gBufIndex = 0;
get1(){
if(gBufIndex == gBufLen){
gBuf = sci1_rx();
gBufLen = strlen(gBuf);
gBufIndex = 0;
}
return gBuf[++gBufIndex];
}
0848デフォルトの名無しさん
2009/09/10(木) 08:01:21もうちょっとレベリングすると「なんてアホな子としてたんだろう」ってなるからおk
0849838
2009/09/10(木) 11:50:10ありがとうございます。
get1()
の部分が良く分かりません、また
error C2143: 構文エラー : ';' が '{' の前にありません。
となります。
お願いします<(_ _)>
0850デフォルトの名無しさん
2009/09/10(木) 12:48:14strncmpとかstrstrつかいなよ
0851デフォルトの名無しさん
2009/09/10(木) 13:06:42受信スレッドの中を文字列解析処理に書き換え
255バイト毎に読み込んでるところを
1バイトづつ読む込むsci_rx()に書き換えればいいのでは?
255バイト毎に読み込んでるところを生かすなら、
sci_rx()って処理は無理かと?
0852デフォルトの名無しさん
2009/09/10(木) 14:24:53受信データの中に"$GPRMC"という文字列が含まれていた場合に、
データ中の特定の数バイトを変数へ取り込みたいんだろ?
よほどトリッキーなことしない限り、普通は>>850の言うようにstrstr()とstrncpy()で簡単にできる。
0853デフォルトの名無しさん
2009/09/10(木) 14:52:050854838
2009/09/10(木) 23:59:05今日、こんな感じを考えてみました、
int i;
for(i = 0; i<256; i++){
if(pszBuf[i] == '\0') break;
rx_data = pszBuf[i];
}
これでもOKでしょうか? って私が質問するのも変ですが今試せる環境がないので。。。
strncmp、strstrって意見を頂いたので調べてみます。
ある程度知識のある方からすればしょうもない質問とは思いますがよろしくお願いします。
0855デフォルトの名無しさん
2009/09/11(金) 00:19:11strncpy の自作版?
0856デフォルトの名無しさん
2009/09/11(金) 01:33:22>$GPRMC,202700.000,A,3559.7317,N,13939.6303,E,0.17,228.81,090909,,*05
だったら、これがbufに入っていると仮定して、
#define RMC_STR "$GPRMC,"
if (strncmp(buf, RMC_STR, sizeof(RMC_STR) - 1) == 0) {
double valueA, valueB, valueC;
char letterA, letterB, letterC;
if (sscanf(buf + sizeof(RMC_STR) - 1, "%lf,%c,%lf,%c,%lf,%c", & valueA, & letterA, & valueB, & letterB, & valueC, & letterC) == 6) {
// success
}
}
こんな要領でしょ。
0857デフォルトの名無しさん
2009/09/11(金) 01:39:07if (sscanf(buf, "$GPRMC,%...",...) == xx)
で良いだろ
0858デフォルトの名無しさん
2009/09/11(金) 05:10:260859デフォルトの名無しさん
2009/09/11(金) 15:57:48自前バッファの末尾に 受信データ文字(列) を連結する
字句解析側( $から始まって LF(CRLF?) が1単位か?)は
自前バッファ が空でなければ 自前バッファの先頭の1文字を取得
(さらに 自前バッファを先頭側へ詰めたり リングで管理したりして ところてんの筒のようにする)
※ TCPもそうだけど、シリアル通信は行単位や全てのデータが一気に来るとは限らないからね
0860デフォルトの名無しさん
2009/09/11(金) 19:14:350861デフォルトの名無しさん
2009/09/11(金) 19:21:01俺ライブラリが充実しそうだと夢がふくらんでる頃合い
0862デフォルトの名無しさん
2009/09/11(金) 19:24:350863デフォルトの名無しさん
2009/09/11(金) 23:19:59↑これって何?
0864デフォルトの名無しさん
2009/09/11(金) 23:20:59キャストじゃない?
0865デフォルトの名無しさん
2009/09/11(金) 23:27:130866デフォルトの名無しさん
2009/09/11(金) 23:28:20C言語じゃない。
0867838
2009/09/12(土) 00:48:06どうも行単位でイベントが発生しているわけではないようです。ようやく気づきました。。。
ごめんなさい。
既存のソースを流用するのはあきらめようと思います。
質問し直させて下さい。
bufに
07,02,13,,,,1.5,0.9,1.2*3C
$GPGSV,3,1,11,02,80,342,31,04,60,116,27,05,56,304,33,10,48,290,29*7B
$GPGSV,3,2,11,13,29,042,19,07,26,087,23,08,21,127,34,29,09,322,36*7E
$GPGSV,3,3,11,15,08,216,25,24,03,308,32,17,01,168,19*48
$GPRMC,145317.000,A,3559.7367,N,13939.6392,E,0.12,7.19,110909,,*0A
$GPGGA,145318.000,3559.7369,N,13939.6395,E,1,09,0.9,23.0,M,39.1,M,,0000*65
$GPGSA,A,3,04,15,29,10,08,05,07,02,13,,,,1.5,0.9,1.2*3C
$GPRMC,145318.000,A,3559.7369,N,13939.6395,E,0.08,292.44,110909,,*01
$GPGGA,145319.0
の様なデータが送られて来る場合
$GPRMCセンテンスの"," ごとに区切られたデータ12個をa,b,c,d,e,f,g,h,i,j,k,l
の変数に入れるにはどうしたら良いでしょうか?
0868デフォルトの名無しさん
2009/09/12(土) 01:03:48受信バッファから1バイトずつ読んで「","が来たら次の変数に」、「"LF"が来たら1行そろった」
の判定を繰り返せばいいんじゃないの?
0869デフォルトの名無しさん
2009/09/12(土) 01:10:59sscanf()でいいだろ。上で誰か実例挙げてたと思うが。
0870デフォルトの名無しさん
2009/09/12(土) 02:13:42if(!a) a = bar();
を
a = foo() ||| bar();
みたいに一括して書く方法ないですか?
foo, barは0,1以外も返す可能性があります。
0871デフォルトの名無しさん
2009/09/12(土) 02:49:17a = foo()?foo():bar();
0872デフォルトの名無しさん
2009/09/12(土) 03:02:27さすがと言わざるを得ない
0873デフォルトの名無しさん
2009/09/12(土) 03:12:40つーか、どうしたいのかを明確にしろよ。
0874デフォルトの名無しさん
2009/09/12(土) 03:21:49とか。
読みにくいだけで、意味は全然無いと思うけどな。
0875838
2009/09/12(土) 03:34:22float time = 0;
char valid = 0;
float latitude = 0;
char NorthSouth = 0;
float longtitude = 0;
char EastWest = 0;
float sog = 0;
float direction = 0;
int date = 0;
float magneticDeclination = 0;
char magneticEastWest = 0;
int checkSum = 0;
sscanf(buf, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x",
&time,
&valid,
&latitude,
&NorthSouth,
&longtitude,
&EastWest,
&sog,
&direction,
&date,
&magneticDeclination,
&magneticEastWest,
&checkSum);
}
これでOK? 上手く動かないんだけどな。。
0876デフォルトの名無しさん
2009/09/12(土) 03:40:02>>867のGPRMCが含まれる行と形式が違わないか?
あと、bufに対してsscanfをそう書くって事は先頭にマッチさせられるような状況を作ったってこと?
0877デフォルトの名無しさん
2009/09/12(土) 03:42:11両方やっちゃって良いならこれでも良いけど、処理変わるよな。
0878デフォルトの名無しさん
2009/09/12(土) 03:50:48とりあえず動かした。
char *p;
if(p = strstr(buf, "$GPRMC")){
float time = 0;
char valid = 0;
float latitude = 0;
char NorthSouth = 0;
float longtitude = 0;
char EastWest = 0;
float sog = 0;
float direction = 0;
int date = 0;
float magneticDeclination = 0;
char magneticEastWest = 0;
int checkSum = 0;
// sscanf(buf, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x",
sscanf(p, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,,*%x",
&time,
&valid,
&latitude,
&NorthSouth,
&longtitude,
&EastWest,
&sog,
&direction,
&date,
// &magneticDeclination,
// &magneticEastWest,
&checkSum);
}
0879838
2009/09/12(土) 04:06:39ありがとうございます。
形式違いますか?あれ、どこかな?
先頭にマッチさせられるような状況は作れてません><
>>878
ありがとうございます。
うーん。&time.....それぞれにちゃんと値が入りません。
先頭にマッチさせてないことが原因でしょうか?
0880デフォルトの名無しさん
2009/09/12(土) 04:37:40これは動くよね
#include <stdio.h>
#include <string.h>
int main()
{
char *buf = "hoge$GPRMC,202700.000,A,3559.7317,N,13939.6303,E,0.17,228.81,090909,,*05hoge";
char *p;
if(p = strstr(buf, "$GPRMC")){
float time = 0; char valid = 0; float latitude = 0; char NorthSouth = 0; float longtitude = 0;
char EastWest = 0; float sog = 0; float direction = 0; int date = 0; float magneticDeclination = 0;
char magneticEastWest = 0; int checkSum = 0;
// sscanf(buf, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x",
sscanf(p, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,,*%x",
&time, &valid, &latitude, &NorthSouth, &longtitude,
&EastWest, &sog, &direction, &date,
// &magneticDeclination,
// &magneticEastWest,
&checkSum);
printf("$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x\n",
time, valid, latitude, NorthSouth, longtitude,
EastWest, sog, direction, date,
magneticDeclination, magneticEastWest, checkSum);
}
return 0;
}
0881デフォルトの名無しさん
2009/09/12(土) 04:41:02> 形式違いますか?あれ、どこかな?
コメントアウトされてることに気づきませんか
0882デフォルトの名無しさん
2009/09/12(土) 04:56:370883デフォルトの名無しさん
2009/09/12(土) 05:11:050884デフォルトの名無しさん
2009/09/12(土) 08:42:42特に列数が11個だったり12個だったり
0885デフォルトの名無しさん
2009/09/12(土) 10:55:24薄っぺらい人間はひねりたがる。
繁殖期に男が料理などにはまって、良い夫を演じるのに似てるな。
0886デフォルトの名無しさん
2009/09/12(土) 14:10:21おまえのほうが中二っぽい。
0887838
2009/09/12(土) 19:34:13ありがとうございます。
>>880
バッファのタイミングを弄ったら無事に出来るようになりました。
>>883
じゃないですよ。
>>884
そうみたいです。しかも説明書の解説と実際のデータが違って昨日は混乱しました。言い訳ですが。。
0888デフォルトの名無しさん
2009/09/12(土) 20:31:29ま、業務のコードでもひどいのはいくらでもあるけどな。
0889デフォルトの名無しさん
2009/09/14(月) 11:37:30・シリアル通信を用いてデータ単位毎にイベント発生(or ブロッキングからの脱出)する+当該データを取得する しくみ
[大前提] 通信資源からの入力操作は "行単位" や "転送側の送出操作単位" が保証されるわけではない
# 装置が 1回 send してるにもかかわらず 複数回 recv しないとデータが揃わない とか
# 装置が 複数回の send が 1回 recv でまとまってやってきた とか
(最もプロトコルによっては、"時間" により データ終端を規定してたりすることもあるが…)
・1データ単位から如何にして値を取得するか
0890デフォルトの名無しさん
2009/09/15(火) 08:03:110891デフォルトの名無しさん
2009/09/15(火) 08:17:300892デフォルトの名無しさん
2009/09/15(火) 09:12:040893デフォルトの名無しさん
2009/09/15(火) 13:08:120894デフォルトの名無しさん
2009/09/15(火) 13:13:500895デフォルトの名無しさん
2009/09/15(火) 13:14:230896デフォルトの名無しさん
2009/09/15(火) 16:47:08TDM's GCC/mingw32 Builds
ttp://www.tdragon.net/recentgcc/
ここで公開されているGCC/mingw32をインストールするといい。
最新版はバグありだけど、まあ大丈夫だよ、うん。。。
すぐ修正されるだろ。
0897デフォルトの名無しさん
2009/09/15(火) 19:45:510898デフォルトの名無しさん
2009/09/15(火) 20:12:42君がビルドした物を俺が使うより良い
とか。
0899デフォルトの名無しさん
2009/09/15(火) 21:12:360900デフォルトの名無しさん
2009/09/15(火) 21:53:20?
0901デフォルトの名無しさん
2009/09/15(火) 21:55:54言い換えると俺がビルドした物を>>900さんはインストールする気になりますか?
ってこと。
冗談じゃねぇよって思うだろ?
0902デフォルトの名無しさん
2009/09/15(火) 22:05:37いやいや、MinGWプロジェクトが配布してるバイナリじゃなくて、TDMがビルドしたバイナリを使う利点はなんですか?と
聞いたつもりなんだけど、、、もしかして前者は存在しないの?
0903デフォルトの名無しさん
2009/09/15(火) 22:11:23で、その最新バージョンをTDMがビルドしたものを使うとCPU負荷が異常に高くなってしまうと
0904デフォルトの名無しさん
2009/09/15(火) 22:19:09持ってないからわからん。
持ってるのなら試してみてはどうですか
0905デフォルトの名無しさん
2009/09/15(火) 22:22:25char *point=&s;
↑エラー出る何で?
0906デフォルトの名無しさん
2009/09/15(火) 22:23:07char *point=&s;
間違え こうだった
0907デフォルトの名無しさん
2009/09/15(火) 22:23:240908デフォルトの名無しさん
2009/09/15(火) 22:23:370909デフォルトの名無しさん
2009/09/15(火) 22:24:28char * に char ** を代入しようとしているから
0910デフォルトの名無しさん
2009/09/15(火) 22:24:41○ char *point=s;
0911デフォルトの名無しさん
2009/09/15(火) 22:25:080912デフォルトの名無しさん
2009/09/15(火) 22:26:36ありがとう
0913デフォルトの名無しさん
2009/09/15(火) 22:26:46それはない
0914913
2009/09/15(火) 22:27:57char s[256];
char **p = &s;
これなら通るかのように読めたわけだが
0916デフォルトの名無しさん
2009/09/15(火) 22:32:350917デフォルトの名無しさん
2009/09/15(火) 22:33:54これがなんでだめなのかは、sが配列だからに他ならない
配列で定義したsは、その時点でアドレス変数(つまりポインタ)
になるので、ポインタ変数へはそのまま代入しなければならない
つまり、>>909が正しい
0918デフォルトの名無しさん
2009/09/15(火) 22:39:25文法的には間違っていないからでは?
ただし、配列の場所(アドレス)を格納している配列sの場所(アドレス)
をポインタpointに代入していることになる
実質ポインタのポインタとなる
コンパイラが、ある人にとってはありがた迷惑なエラー(ワーニングだとおもうが)を吐き出しているということだと思う
0919909
2009/09/15(火) 22:41:07ごめん >>909 は正しくないんだ
関係ないけど
char s[256];
char (*p)[256] = &s;
これは正しい
0921デフォルトの名無しさん
2009/09/15(火) 22:48:43ところで、これは、ポインタ配列pにsのアドレスを入れてるけど、
どういうことになるんだろう?
こんがらがってきた
0922デフォルトの名無しさん
2009/09/15(火) 22:49:09ポインタのポインタ?
char **p = (char **)&s;
が問題ないと言っている?
0923デフォルトの名無しさん
2009/09/15(火) 22:50:49ポインタ配列じゃないので大丈夫。
0924デフォルトの名無しさん
2009/09/15(火) 22:54:11http://wisdom.sakura.ne.jp/programming/c/c25.html
0925デフォルトの名無しさん
2009/09/15(火) 22:56:16char (*p)[256]はポインタ配列定義にならないんだっけ?
0926デフォルトの名無しさん
2009/09/15(火) 22:57:45話が違う。
>>925
配列へのポインタであって、ポインタ配列ではない。
0927デフォルトの名無しさん
2009/09/15(火) 22:59:44char *p[256]とchar (*p)[256]は違うということか
つまり、これはポインタのポインタ?
0928デフォルトの名無しさん
2009/09/15(火) 23:00:08char **p = (char **)&s;
printf("%d\n", **p);
これはp[0]を出力しない。
char *p = (char *)&s;
これは合法
0929デフォルトの名無しさん
2009/09/15(火) 23:01:01char [256] 型を指すポインタであって、ポインタのポインタではない
0930デフォルトの名無しさん
2009/09/15(火) 23:06:34こうした場合、配列の先頭要素にアクセスするには、*p[0] **p のどちらでも動作する。
ならばポインタのポインタではないか、といいたくなる気持ちも分からなくはないが、
char (*p)[256];
char **q;
としたときの、sizeof(*p) と sizeof(*q) は違う。
*p は char [256]型であり、*q は char *型だから。
0931デフォルトの名無しさん
2009/09/15(火) 23:09:29C FAQでも読んでろwww
0932デフォルトの名無しさん
2009/09/15(火) 23:18:31char[256]型って、実質ポインタだったりしないのかな。。
たとえば、char s[256];で定義して、*sを参照したらアドレスが
出てくるんだよね?
0933デフォルトの名無しさん
2009/09/15(火) 23:20:24やばい、わからんw
qはchar **型じゃないの?
0934デフォルトの名無しさん
2009/09/15(火) 23:25:140935デフォルトの名無しさん
2009/09/15(火) 23:36:17> char[256]型って、実質ポインタだったりしないのかな。。
しない。
char[256]型の変数を宣言すると、
char str[256];
こうなるよ。
0936デフォルトの名無しさん
2009/09/15(火) 23:37:12qはchar **型だよ。だから、*qはchar *型
連投スマソ
0937デフォルトの名無しさん
2009/09/15(火) 23:45:43なるほど、確かにw
0938デフォルトの名無しさん
2009/09/15(火) 23:46:52もちろん、表面的には*出てこないし、ポインタではないんだけど、
中身というか、メモリ上では実質ポインタと同じなのかなと言う意味
0939デフォルトの名無しさん
2009/09/16(水) 00:06:08あんまり使わないといえば使わない、、、んだけど、配列を関数に渡したいという要望自体は初心者でもありがちだし。。。
0940デフォルトの名無しさん
2009/09/16(水) 00:19:21多分君が考えてることは合ってる
0941デフォルトの名無しさん
2009/09/16(水) 00:22:24配列の先頭アドレスは変わらない。故に配列≠ポインタ。
0942デフォルトの名無しさん
2009/09/16(水) 00:39:52なるほど説得力があるな。
ただ、やったことはないから、そもそもできるかわからんが、例えば
char str[256];
str = &str[1];
ってやると、先頭アドレス1バイト分、後ろにシフトした配列に
なったりしない?
だったら、やってみろって話になるかもしれんが。w
0943デフォルトの名無しさん
2009/09/16(水) 00:44:540944デフォルトの名無しさん
2009/09/16(水) 00:47:41char str[256];
str++;
でもいい。
どうだろうか?
0945デフォルトの名無しさん
2009/09/16(水) 00:48:43あ、やっぱ定数扱いなんだ
じゃあ、無理だね
するとポインタでできるような>>944も無理だね
ありがとございます
0946デフォルトの名無しさん
2009/09/16(水) 00:58:31つまり
char str[ 256 ];
char* s;
s = str;
s++;
とかは可能
0947デフォルトの名無しさん
2009/09/16(水) 01:02:14うん、それだと納得
だって、sは明らかにポインタとして定義されてるからね
むしろs++でアドレスとsizeof(char)ずつインクリメントできないと困る
ということは、やっぱりstr++のように、配列として定義したstrに
対してポインタのような演算はできないということなんだね
0948デフォルトの名無しさん
2009/09/16(水) 01:05:28char str[ 256 ];
char* s;
s = str + 12;
とかは可能
0949デフォルトの名無しさん
2009/09/16(水) 01:12:06なるほど。
配列をアドレス定数として扱っての演算は可能ということなのね
理解が深まった
ありがとう
0950デフォルトの名無しさん
2009/09/16(水) 02:09:32{
char str[5][100] = {{1, 2, 3}, {2, 4, 6}, {3, 6, 9}, {4, 8, 12}, {5, 10, 15}};
char (*p)[100] = &str[0];
char (*end)[100] = &str[5];
do {
printf("%d\n", ((char *)p)[1]);
} while (++p != end);
return 0;
}
配列型を意識したコードでなんか例がないかと考えた結果こんなことに。
++pで何が起こってるかを見てもらえれば分かるかなぁ?
0951デフォルトの名無しさん
2009/09/16(水) 05:31:35i=strlen(r);
r[i]=20;
}while(i+1 != strlen(r));
x0を探し出してスペースに変えるもの作ろうとしたら
符号が違うだとかでエラー出るよ
どうしたらいの
0952デフォルトの名無しさん
2009/09/16(水) 05:38:260953デフォルトの名無しさん
2009/09/16(水) 06:12:200が2個連続してないと延々とメモリを書き換えていきそうだな
0954デフォルトの名無しさん
2009/09/16(水) 06:54:220955デフォルトの名無しさん
2009/09/16(水) 07:04:36rが指す先が通常のC文字列として扱えるのならそのコードはおかしい。
rが指す先が特殊なバイト列ならstrlen()を使うのはおかしい。
特に後者の場合、コーディング規約でchar以外の型にtypedefすることを要請する場合もあるほどだ。
0956デフォルトの名無しさん
2009/09/16(水) 07:09:42rの型はなんなのよ
符号というからおそらく
unsignedが付いているんだと思うけど
エラーではなく警告じゃないかな
0957デフォルトの名無しさん
2009/09/16(水) 08:15:24char str[] = "abcde";
と
char *str = "abced";
の扱いの違いで悩んだ記憶があったなあ
0958デフォルトの名無しさん
2009/09/16(水) 08:21:09r[i]=20;
は
r[i-1]=20;
じゃないの?
0959デフォルトの名無しさん
2009/09/16(水) 08:28:56#include <stdio.h>
int main()
{
char s[] = "hello\0world\0";
char *p = s;
char *q = p + sizeof(s) - 1; // ここでは配列のサイズから文字列の長さを算出
printf("len=%d\n", strlen(s)); // strlenは途中の\0を拾うから役に立たない
printf("len=%d\n", sizeof(s) - 1);
for(; p < q; p++)
if(*p == '\0') *p = ' ';
printf("%s\n", s);
return 0;
}
0960デフォルトの名無しさん
2009/09/16(水) 10:40:50俺には質問の意味が理解できん…
0961デフォルトの名無しさん
2009/09/16(水) 11:08:110962デフォルトの名無しさん
2009/09/16(水) 11:14:35>符号が違うだとかでエラー出るよ
どの行にでるか、程度のことも解らんのかお前は。
どうせ i が int なんだろうけど。
>>958
r[i] = 0x20;
0963デフォルトの名無しさん
2009/09/16(水) 13:48:33Cとか習得後はPHPとか簡単だと聞くけど
0964デフォルトの名無しさん
2009/09/16(水) 13:52:380965デフォルトの名無しさん
2009/09/16(水) 13:52:56Javaは簡単だと思うよ
0966デフォルトの名無しさん
2009/09/16(水) 13:53:020967デフォルトの名無しさん
2009/09/16(水) 14:26:20つまりプログラマの意識の問題。一方、コンパクションは処理系ではなくOSの仕事であるべき。
0968デフォルトの名無しさん
2009/09/16(水) 14:44:450969デフォルトの名無しさん
2009/09/16(水) 14:50:46その「ちゃんと解放する」という考え方自体がこれまでなかったわけだから、
苦労するんじゃないかな、と思った次第
0970デフォルトの名無しさん
2009/09/16(水) 14:52:230971デフォルトの名無しさん
2009/09/16(水) 14:54:19何も言うことはないよ
0972デフォルトの名無しさん
2009/09/16(水) 14:54:27領域の確保と解放?なにそれpgrって感じだったな。
0973デフォルトの名無しさん
2009/09/16(水) 16:14:39領域の確保と解放?なにそれpgrって感じだったな。
0974デフォルトの名無しさん
2009/09/16(水) 17:58:340975デフォルトの名無しさん
2009/09/16(水) 18:22:410976デフォルトの名無しさん
2009/09/16(水) 22:27:220977デフォルトの名無しさん
2009/09/16(水) 22:37:43どうしても C でないとダメというのでなければ C++ の STL を使うのが楽
0978デフォルトの名無しさん
2009/09/16(水) 22:39:090979デフォルトの名無しさん
2009/09/16(水) 22:42:24C言語なら俺に聞け(入門篇) Part 53
http://pc12.2ch.net/test/read.cgi/tech/1253110182/
0981デフォルトの名無しさん
2009/09/17(木) 04:39:34memcpy(&s+30,b,4); こうしたらコンパイルはできたが実行すると問題発生した
0982デフォルトの名無しさん
2009/09/17(木) 04:42:400983デフォルトの名無しさん
2009/09/17(木) 05:23:43sの型による
s+1としても、実際は内部的にs+sizeof(s)だけポインタずらされるから
どうしてもというなら(char *)にキャストするとか
0984デフォルトの名無しさん
2009/09/17(木) 07:02:08ってスレは今 無くなった??
0985デフォルトの名無しさん
2009/09/17(木) 07:33:18(struct sockaddr *)&server
これは、何をしてるの?
0986デフォルトの名無しさん
2009/09/17(木) 07:53:13マジレスすると、
その手のコードの場合、大抵はserverの型は
struct sockaddr ではなく、 struct sockaddr_in とかが使わている。
で、connectが受け取るのは struct sockaddr * なので、キャストして渡している。
socket関係を自力で書くときはほとんどそういう形になる。
0987デフォルトの名無しさん
2009/09/17(木) 07:54:33connectの第二引数の型がstruct sockaddr *なのでそれにあわせてキャストしている
多分serverはsockaddr_in型なんだろう
0988デフォルトの名無しさん
2009/09/17(木) 13:28:57スレを勃てるまでもないC/C++の質問はここで
無くなっちゃったね
0989デフォルトの名無しさん
2009/09/17(木) 16:40:08ありがとうございました
0991デフォルトの名無しさん
2009/09/17(木) 23:00:530992デフォルトの名無しさん
2009/09/17(木) 23:02:130993デフォルトの名無しさん
2009/09/17(木) 23:02:550994デフォルトの名無しさん
2009/09/17(木) 23:30:130995デフォルトの名無しさん
2009/09/17(木) 23:54:070996デフォルトの名無しさん
2009/09/17(木) 23:56:260997デフォルトの名無しさん
2009/09/18(金) 00:00:150998デフォルトの名無しさん
2009/09/18(金) 00:01:010999デフォルトの名無しさん
2009/09/18(金) 00:02:571000デフォルトの名無しさん
2009/09/18(金) 00:04:0610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。