C言語なら俺に聞け(入門篇) Part 35
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/08/26(火) 23:44:06教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題を片付けます 115代目
http://pc11.2ch.net/test/read.cgi/tech/1217741118/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 34
http://pc11.2ch.net/test/read.cgi/tech/1218532990/
過去スレ
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デフォルトの名無しさん
2008/08/26(火) 23:46:220003デフォルトの名無しさん
2008/08/26(火) 23:46:48/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは>>1乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
0004デフォルトの名無しさん
2008/08/27(水) 00:36:440005デフォルトの名無しさん
2008/08/27(水) 03:47:14戦慄走る――
「狂気の底が見えねェ!!!」
2ch歴5年を超える経験と勘から相手の狂気を数値化してきたロールにとって
過去に例のない狂気を持つマジキチと出会うこと自体は決して珍しくはない
しかし
過去最狂のキチガイAAを据えてすら天秤の対として軽すぎる程の狂気を持つ気狂!!!
遥か膨大なやなせイズムを内包する怪物!!!
____
前代未聞の経験である / R /\
/ /\ \
| / /=ヽ \U |
|/ (゚)::::(゚)u \|
\ι─ ゝ── ノ
\____/
0006デフォルトの名無しさん
2008/08/27(水) 05:29:53質問です。main関数の処理が終了して、また最初の処理に戻すにはどうすればいいのでしょうか?
switch文を使って、「プログラムを終了しますか?(Y/N)」のような終了の仕方にしたいので。
0007デフォルトの名無しさん
2008/08/27(水) 05:34:33その中で処理をさせる・・・かな?
void main()
{
while(1) {
処理させる内容をここにかく
}
}
プログラムを終了させたい場合はwhileを抜ける処理を条件判定を入れて
書いておけばOK
0008デフォルトの名無しさん
2008/08/27(水) 05:35:450009デフォルトの名無しさん
2008/08/27(水) 05:37:13whileループの中に入れる。
「プログラムを終了しますか?(Y/N)」でYが入力されたら、breakする。
続行するか終了するかの制御変数を用いてもよい。
0010デフォルトの名無しさん
2008/08/27(水) 05:38:060011デフォルトの名無しさん
2008/08/27(水) 05:46:10while文の無限ループを使うってのは理解したんですが、
<<また始めの処理に戻す>>やり方がわかりません。
>>10さんのgoto文を使うやり方くらいしかないのかな?
001211
2008/08/27(水) 05:47:42無限ループをすべての処理に適用させるわけですね。
ありがとうございます。
0013デフォルトの名無しさん
2008/08/27(水) 10:46:40聞く前に考えるってことしないの?
0014デフォルトの名無しさん
2008/08/27(水) 10:47:50わからない→考えろ→聞いたほうが早いと思った
0015デフォルトの名無しさん
2008/08/27(水) 10:55:29聞くために文章にすると気がつくってこともあるからな。
0016デフォルトの名無しさん
2008/08/27(水) 10:58:57わからない→考えろ→聞いたほうが早いと思った→goto わからない
0017デフォルトの名無しさん
2008/08/27(水) 11:07:17if (聞いたほうが早い) {
聞く;
}
else {
なにもしない;
}
}
0018デフォルトの名無しさん
2008/08/27(水) 11:16:540019デフォルトの名無しさん
2008/08/27(水) 11:21:210020デフォルトの名無しさん
2008/08/27(水) 11:41:38それなら自分の考えを書いた上で意見を求めればいいと思うんだ
0021デフォルトの名無しさん
2008/08/27(水) 12:16:33まあそうだな、次たてるときまで覚えてたら>>1に追加しておくか
0022デフォルトの名無しさん
2008/08/27(水) 17:32:470023デフォルトの名無しさん
2008/08/27(水) 17:34:030024デフォルトの名無しさん
2008/08/27(水) 18:25:18CPUが進化とともにレジスタ幅を増やしていった経緯もあるし
用途によってはインテルCPUまでのパワーはいらなくて
マイコンで足りるなんてのもあって古いCPUをカスタム化
したのを使ってたりするしね
0025デフォルトの名無しさん
2008/08/27(水) 20:43:16int Add_Tax (void);
int main(void)
{
int Add_tax();
return 0;
}
int Add_Tax
{
int price,tax,taxtax; /*price=値段 tax=価格 taxtax = 消費税を含んだ価格 */
double taxrate; /*taxrate = 消費税1.05%。実数のためにdouble型 */
taxrate = 1.05;
printf("商品の値段を入力\n");
scanf("%d\n",&tax);
printf("price*taxrate+tax = %d\n",taxtax);
}
消費税を求める関数作れない!!
0026デフォルトの名無しさん
2008/08/27(水) 20:46:07独り言は他所で言ってください
0027デフォルトの名無しさん
2008/08/27(水) 21:12:47int Add_Tax();
int main()
{
Add_Tax();
return 0;
}
int Add_Tax()
{
...
}
0028デフォルトの名無しさん
2008/08/27(水) 21:32:370029デフォルトの名無しさん
2008/08/27(水) 21:53:11C言語に取り組もうと思って本なんか買っちゃったんだが、
実行するソフトや方法が分からず既に涙目だ
フリーソフトでも書店とかで買える物でも・・・いや、それも良く分からないんだが
兎に角先ずは作ったプログラムを動かすソフトみたいなものが分からない
なんとか教えてもらえないだろうか、お願いします
0030デフォルトの名無しさん
2008/08/27(水) 21:53:530031デフォルトの名無しさん
2008/08/27(水) 21:54:19マイクロソフトのサイトからVC++でも落とせば?
0032デフォルトの名無しさん
2008/08/27(水) 21:55:30http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/default.aspx
まずはこの中のVisual C++ 2008をインストールせよ
0033デフォルトの名無しさん
2008/08/27(水) 21:56:45プログラミングなんて一から九ぐらいまでは調べ物だから、
サーチエンジンの使い方も分からないようじゃ覚悟しといたほうがいい。
0034デフォルトの名無しさん
2008/08/27(水) 22:00:45お前にプログラミングなんて身に付かない
俺が保証する
0035デフォルトの名無しさん
2008/08/27(水) 22:04:59本当に無能で申し訳ない
今年の残りと翌年から三年間死ぬ気で頑張る気だ
また詰まったら助けを乞うかも知れないが、これから出来るだけ自分で調べてみる
ありがとう
0036デフォルトの名無しさん
2008/08/27(水) 22:39:310037デフォルトの名無しさん
2008/08/27(水) 22:47:170038デフォルトの名無しさん
2008/08/27(水) 23:40:26なんで正常終了できんとね
↓
#include <setjmp.h>
#include <signal.h>
jmp_buf a;
void b(int c)
{
longjmp(a, 1);
}
int main(void)
{
signal(SIGINT, b);
if (setjmp(a) == 0) for(;;);
return 0;
}
0039デフォルトの名無しさん
2008/08/28(木) 00:26:00大学生か? プログラミングなんかで遊んでないで本職のほう勉強しろよ
0040デフォルトの名無しさん
2008/08/28(木) 01:56:43シグナルハンドラが参照する変数はvolatile型でないといけない
0041デフォルトの名無しさん
2008/08/28(木) 02:21:25setjmp が割り込みに使用する環境を保存しないからじゃないか?
0042デフォルトの名無しさん
2008/08/28(木) 03:23:02}
0043デフォルトの名無しさん
2008/08/28(木) 03:23:56斬新な響きだ
0044デフォルトの名無しさん
2008/08/28(木) 16:16:09↑
こんな数値の記述を見かけたんですが、よくわかりません。
16進数なのか浮動少数なのか
0045デフォルトの名無しさん
2008/08/28(木) 16:23:26大抵のコンピュータでは浮動小数点数も二進法ベースなので、
十六進法表記できるようにするのは理に適っている。
0046デフォルトの名無しさん
2008/08/28(木) 16:35:490047デフォルトの名無しさん
2008/08/28(木) 16:36:5544の数値の文字列をsscanfでfloat型変数に読み込むにはどうすればいいですか?
0048デフォルトの名無しさん
2008/08/28(木) 16:39:38float f;
sscanf("44", "%f", &f);
0049デフォルトの名無しさん
2008/08/28(木) 16:53:41>>44
float f;
sscanf("0x1.fffffeP127F", "%f", &f);
0050デフォルトの名無しさん
2008/08/28(木) 16:54:43できない
0051デフォルトの名無しさん
2008/08/28(木) 16:55:100052デフォルトの名無しさん
2008/08/28(木) 17:03:57float f;
int n;
char c;
n = sscanf("0x1.fffffeP127F", "%f%c", &f, &c);
printf("n = %d\nf = %f\nc = %c\n", n, f, c);
出力
n = 2
f = 0.000000
c = x
できないね
0053デフォルトの名無しさん
2008/08/28(木) 17:16:430054デフォルトの名無しさん
2008/08/28(木) 17:33:57標準Cでやる手段はないんですかね
0055デフォルトの名無しさん
2008/08/28(木) 17:47:020056デフォルトの名無しさん
2008/08/28(木) 18:25:260057デフォルトの名無しさん
2008/08/28(木) 18:38:14まずexternの意味から学んでください
0058デフォルトの名無しさん
2008/08/28(木) 18:49:49C99対応の処理系で%a使え
ほかには、VC++も2005から%aが使える。
0059デフォルトの名無しさん
2008/08/28(木) 19:10:46VC++だと%aが使えるのは、printf系だけだ。
scanf系は使えない。
0060デフォルトの名無しさん
2008/08/28(木) 19:49:53char mozi[10]
という10文字の文字列を200個まとめて持てるデータ構造です
0061デフォルトの名無しさん
2008/08/28(木) 19:55:570062デフォルトの名無しさん
2008/08/28(木) 19:57:16char *mozi;
mozi="aaaa";
って代入の仕方はOKですか?
0063デフォルトの名無しさん
2008/08/28(木) 20:01:420064デフォルトの名無しさん
2008/08/28(木) 20:20:22文字列リテラルを暗黙的にchar*にキャストするのは控えたほうがいい。
0065デフォルトの名無しさん
2008/08/28(木) 20:45:380066デフォルトの名無しさん
2008/08/28(木) 20:58:55文字列定数を直接ポインタで引っ張りまわすことはもちろん可能である
しかし文字列定数が書き換え可能であることは保証されていないので、
うっかりクラッシュする原因となる危険性も多分にある
できるかぎりconst char *を使うこと
0067デフォルトの名無しさん
2008/08/28(木) 21:00:24いるかもしないし、いないかもしれないし、いたとしてもいなかったとしてもどうでもいいたぐいの問題
0068デフォルトの名無しさん
2008/08/28(木) 21:23:330069デフォルトの名無しさん
2008/08/28(木) 21:51:14>>40
volatile jmp_buf a;
としてみたが、症状くぁわらん
むぅ・・・
>>41
その辺、怪しいとは俺も思っとやが
割り込みマスクビットが立ったまま main() から return するのはマズいんかいの・・・
0070デフォルトの名無しさん
2008/08/28(木) 22:05:18どういう状態になってるんでしょうか?
文字の先頭アドレスを指すポインタが宣言されてるだけですか?
0071デフォルトの名無しさん
2008/08/28(木) 22:20:340072デフォルトの名無しさん
2008/08/28(木) 22:32:360073デフォルトの名無しさん
2008/08/28(木) 22:32:49=文字列の先頭の文字へのポインタ
0074デフォルトの名無しさん
2008/08/28(木) 22:35:10連絡用の構造体を別途用意して関数ポインタで扱う関数にはその構造体のポインターだけ渡して
内部で構造体を見るようにするとか?
0075デフォルトの名無しさん
2008/08/28(木) 22:56:51可変個引数関数でできるだろ
va_listとかで(ry
0076デフォルトの名無しさん
2008/08/28(木) 23:11:33関数ポインタ使う利点が薄くなるよ
0077デフォルトの名無しさん
2008/08/28(木) 23:14:45ということはやっぱり>>74のように渡すのはとりあえずポインター1個だけ渡すように統一して
関数内部でそのポインターの先にぶら下がってる構造体を見るとかにしたほうがいいかな?
0078デフォルトの名無しさん
2008/08/28(木) 23:16:17アルバイトでいいんだけど
0079デフォルトの名無しさん
2008/08/28(木) 23:18:44このスレで出てくる話題ってピンきりだし、言うほどレベル高い内容でてこないしな。
0080デフォルトの名無しさん
2008/08/28(木) 23:19:15今時は色んな言語使ってるんじゃないの?
LuaとCとアセンブラ、みたいな。
0081デフォルトの名無しさん
2008/08/28(木) 23:20:050082デフォルトの名無しさん
2008/08/28(木) 23:28:380083デフォルトの名無しさん
2008/08/28(木) 23:30:26そんな経歴偽装しまくりなのが今のIT業界では?
なんとか人を放り込んでマージンせしめたい中小零細な社長が多くやっていけるのは
そのためと思ってたけど・・・
0084デフォルトの名無しさん
2008/08/28(木) 23:46:27出向先でダメっぷりをひたすら披露して会社の信用を落とすくらいしか反撃方法がないな
0085デフォルトの名無しさん
2008/08/28(木) 23:51:44「C言語経験3年、プロジェクトリーダーの経験あり」
と、イカサマ派遣ソフトハウスの社長は派遣先に提出する業務経歴書に書くだろう。
0086デフォルトの名無しさん
2008/08/28(木) 23:53:24そういう人達はこのスレにはすんでない?
0087デフォルトの名無しさん
2008/08/28(木) 23:58:25double convert(const char *str);
で作ろうとしてるが手ごわい
0088デフォルトの名無しさん
2008/08/29(金) 00:07:15いや、いるだろう。
PLの仕事は計画、メンバー編成、進捗管理、顧客折衝といろいろあるが、
なんといっても、一番大変なのが種々の問題対応
問題の発生しないプロジェクトなんて、ある規模以上なら皆無
計画の遅れ、予算不足、出来上がったシステムの品質の悪さ、人間関係、顧客や上司への説得
タフな人間でないと勤まらない
008987
2008/08/29(金) 01:09:16書式チェックしてないけど…
IEEE754前提にして
90行にもわたる超大作
0090デフォルトの名無しさん
2008/08/29(金) 03:57:46そんなにかかるか?
NANとかエラーチェックとか適当でよければ、
strtolとかビット演算とか組み合わせて、十数行で済む気がするんだけど。
0091デフォルトの名無しさん
2008/08/29(金) 07:43:51まぁ、丁寧にエラーチェックすれば90行くらい行くのかも知らん。
0092デフォルトの名無しさん
2008/08/29(金) 08:23:360093デフォルトの名無しさん
2008/08/29(金) 08:24:5670行の奴はやたら1行で終わらせるタイプで
90行の奴は1行で書ける部分も{}でわけちゃうとか
if () xxxxx
を
if() {
xxxxx
}
とかさw
0094デフォルトの名無しさん
2008/08/29(金) 09:39:18xxxxx
}
は全然構わない。ていうかやってくれ
0095デフォルトの名無しさん
2008/08/29(金) 09:43:590096デフォルトの名無しさん
2008/08/29(金) 09:48:00前者はC99で定数式以外もおけるようになったはずだけど。
0097デフォルトの名無しさん
2008/08/29(金) 09:54:27if ()
{
xxxxx
}
0098デフォルトの名無しさん
2008/08/29(金) 10:33:49なんかすげー違和感
別にいいけど
0099デフォルトの名無しさん
2008/08/29(金) 10:39:40//や#ifとの相性がいい
0100デフォルトの名無しさん
2008/08/29(金) 11:10:04確かに。
自分は、蟹飯あがりなもんでずっと
if () {
xxxxx
}
なんだけど、ifのコメントアウト面倒なんだよな。
0101デフォルトの名無しさん
2008/08/29(金) 11:12:42if ()
{
//
}
になるから今の
if () {
//
}
から変えようか悩んでる
0102デフォルトの名無しさん
2008/08/29(金) 11:15:43俺がいる。
VC#オプションいじってもどうにもならなくて俺涙目。
0103デフォルトの名無しさん
2008/08/29(金) 13:25:15あとswitchのラベル
0104デフォルトの名無しさん
2008/08/29(金) 20:56:51それは、VSのオプションで変更可能。
0105デフォルトの名無しさん
2008/08/29(金) 20:59:38・・・・・;
上級者では、ifの下が一行のときは、{}をつけない人も多いな。
0106デフォルトの名無しさん
2008/08/29(金) 21:01:32俺もCだけでバリバリ書けるプログラマになりたい
0107デフォルトの名無しさん
2008/08/29(金) 21:10:41上級者よりも背伸びしたい初心者に多い
0108デフォルトの名無しさん
2008/08/29(金) 21:11:30こんな変数があったとしたらstr[4]以降はずっとNULL(\0)が入ってますか?
0109デフォルトの名無しさん
2008/08/29(金) 21:11:57そんなことない。
実際上級者に多い。
0110デフォルトの名無しさん
2008/08/29(金) 21:13:17NULLと\0は別物だぞ。
0111デフォルトの名無しさん
2008/08/29(金) 21:14:35そうなんですか?同じようなものと思ってました
0112デフォルトの名無しさん
2008/08/29(金) 21:16:410113デフォルトの名無しさん
2008/08/29(金) 21:18:040114デフォルトの名無しさん
2008/08/29(金) 21:25:01俺も同じだと思ってたが何が違うんだ?
0115デフォルトの名無しさん
2008/08/29(金) 21:28:38続くよ。
0116デフォルトの名無しさん
2008/08/29(金) 21:30:40うわぁ^^;
0117デフォルトの名無しさん
2008/08/29(金) 21:34:03>>112
0118デフォルトの名無しさん
2008/08/29(金) 21:34:08011987
2008/08/29(金) 21:37:47これを抑制するオプションはありますか?
0120デフォルトの名無しさん
2008/08/29(金) 21:49:23C言語においてはNULLという特別なマクロの名前が存在するため、
特別な文脈以外ではC言語でNULLといえばこのNULLマクロのことを指す
全てのビットがゼロであるバイトを指す場合にはヌル文字、\0、NULなどが使われることが多い
0121デフォルトの名無しさん
2008/08/29(金) 21:51:40int main(void)以外の関数内でファイルポインタを使うことはできますか?
さっきからエラーが直せなくて困ってます;;
0122デフォルトの名無しさん
2008/08/29(金) 21:52:410123デフォルトの名無しさん
2008/08/29(金) 21:57:06main以外でも使えるよ。
0124デフォルトの名無しさん
2008/08/29(金) 22:03:30うーん、そうですか〜。
どうもありがとうございます。
参考書を終えて初めて100行超えのを自作しているんですが、書いてる最中は楽しいけど
バグ取りがめっちゃめんどくさいですね^^;
とりあえずもうちょい頑張ってみます。
0125デフォルトの名無しさん
2008/08/29(金) 22:12:17--
intが32bit、ポインタが64bitの環境だと、二行目のコードはバグる。
printf("%p %d", NULL, 1);
printf("%p %d", 0, 1);
--
下のコードはNULLが0の環境がほとんどなので、まあ、ほとんどの環境で問題なく動くけど、
char s[100];
s[0] = NULL;
たとえば、
s[0] = SEEK_SET; と文字列をクリアしてるコードがあったら、だれでもおかしいと思う。
それと同じで、NULLと\0は用途が違うので、 使い分けるべき。
0126デフォルトの名無しさん
2008/08/29(金) 22:21:56いいえ特に決まっていません。
0127デフォルトの名無しさん
2008/08/29(金) 22:29:53C89では値ゼロを持つ整数定数か、それをvoid *にキャストした式と決まってたはずだけど、C99では違うの?
0128デフォルトの名無しさん
2008/08/29(金) 22:42:05NULLが0であるという保障はなかった記憶が
0129デフォルトの名無しさん
2008/08/29(金) 22:43:24君が言いたいのはNULLでなくてヌルポインタでしょう
0130デフォルトの名無しさん
2008/08/29(金) 22:44:060131デフォルトの名無しさん
2008/08/29(金) 23:35:11・アドレスを示していないポインタ
・文字列の終端であることを示す値
の区別を付けられない人がこんなにいるんですね…
\0とかNULL、null、(void*)とかそんなことの前に、
ヌルが何も示していない状態・概念を一般化した表現だという
言葉の理解をすれば\0がNULLでは用途の違いどころか意味が
違うと分かるでしょうに…。
0132デフォルトの名無しさん
2008/08/29(金) 23:37:47言葉てきにはnull文字だからやっぱごっちゃじゃねw
0133デフォルトの名無しさん
2008/08/29(金) 23:39:030134デフォルトの名無しさん
2008/08/29(金) 23:39:44C99では「処理系依存の空ポインタ定数」としか書いてない。
0135デフォルトの名無しさん
2008/08/30(土) 00:08:49\0が続く保障はないだろ。
というか、>>108はなんでそのようなことを気にしているんだろうか?
0136デフォルトの名無しさん
2008/08/30(土) 00:13:24宣言でなら保証はあるだろ
0137デフォルトの名無しさん
2008/08/30(土) 00:19:28なんで?
0138デフォルトの名無しさん
2008/08/30(土) 00:25:15char str[256]={'h','a','g','e','\0'};
だから
0139デフォルトの名無しさん
2008/08/30(土) 00:27:440140デフォルトの名無しさん
2008/08/30(土) 01:39:00分かってるからNULLでも\0でもいいよもう
0141デフォルトの名無しさん
2008/08/30(土) 02:08:05たぶんstrncpyを使いたいとかそんなんだろう
0142デフォルトの名無しさん
2008/08/30(土) 02:09:21わかってないやつが見たときに誤解するから問題なんだ
0143デフォルトの名無しさん
2008/08/30(土) 02:10:48実際何が入ってるか覗いてみればいいのに
0144デフォルトの名無しさん
2008/08/30(土) 02:12:28char ary[4]="hoge"; ができるのは、文字列リテラルによる初期化をするときに
末尾の\0を入れるか入れないかをコンパイラが自動的に判断してるってことでいいのかな
0145デフォルトの名無しさん
2008/08/30(土) 02:26:34そういう手合いに無理に美意識を押しつけなくても誰も困らんだろう
0146デフォルトの名無しさん
2008/08/30(土) 02:33:41言葉の問題は厳密さの問題で、厳密さはPGに最も必要なものの一つだ
0147デフォルトの名無しさん
2008/08/30(土) 02:35:23http://www.kouno.jp/home/c_faq/
くらいは目を通すべきだろ。
当然 http://www.kouno.jp/home/c_faq/c5.html#9 も。
0148デフォルトの名無しさん
2008/08/30(土) 03:32:390149デフォルトの名無しさん
2008/08/30(土) 03:38:010150デフォルトの名無しさん
2008/08/30(土) 03:38:22そりゃアセンブラレベルだと文字列の最後の\0も空ポインタへ入れるNULLも0だけどさ
厳密には違うぜ
NULLは実行環境でポインタサイズちがうので4バイト0x00かもしれないしもっと多いかもしれないし少ないかもしれない。
文字列の最後を示す\0だって文字列のエリアを実行時は0x00でクリアしても
実行中は面倒なんで文字列の本当に最後だけ0x00であとは実は前の文字列情報が残ってる場合もある
前 hoge_hoge_hoge\0
後 hoeg_hoge\0hoge\0
0151デフォルトの名無しさん
2008/08/30(土) 03:41:43まちがってまつ
0152デフォルトの名無しさん
2008/08/30(土) 03:43:150153デフォルトの名無しさん
2008/08/30(土) 03:43:330154デフォルトの名無しさん
2008/08/30(土) 03:44:23前半も後半もなにもかも間違ってる
0155デフォルトの名無しさん
2008/08/30(土) 03:44:48誰か解説よろしこ
0156デフォルトの名無しさん
2008/08/30(土) 03:45:40'\0'はヌル文字
そう読めばいい。
0157デフォルトの名無しさん
2008/08/30(土) 03:47:37ポインターや文字列が一緒になった構造体配列もmemsetで0x00クリアしたあと
わざわざNULLや\0を代入するロジックを見たことがない
0158デフォルトの名無しさん
2008/08/30(土) 03:49:330159デフォルトの名無しさん
2008/08/30(土) 03:53:40> ポインターや文字列が一緒になった構造体配列もmemsetで0x00クリアしたあと
> わざわざNULLや\0を代入するロジックを見たことがない
それはあまりにも危険なコード。
ひょっとしたら、doubleもmemsetで0x00クリアか?
0160デフォルトの名無しさん
2008/08/30(土) 03:56:55↓
構造体のメンバーを参照
コンパイル時、「未初期化変数の参照」のWARNINGがでない?
0161160
2008/08/30(土) 03:57:480162デフォルトの名無しさん
2008/08/30(土) 03:57:50じゃ、何が厳密だって言ったんだよ?
「そんなこと言ってない」で逃げるだけのヘタレの相手はごめんだぜ
0163デフォルトの名無しさん
2008/08/30(土) 04:02:41というかdoubleなんてそんなに使う?
0164デフォルトの名無しさん
2008/08/30(土) 04:08:53http://www.kouno.jp/home/c_faq/c5.html
特に>>157とか書いてる人
0165デフォルトの名無しさん
2008/08/30(土) 04:10:06直感的にわかりやすいし。
そのぶん指数桁にゲタを履かせたりして苦労するが、memset(&dbl_var, 0, sizeof(dbl_var));
とできるメリットは結構ある。
というわけで
「ほとんどすべての処理系でdoubleやfloatは全ビットゼロクリアで0になる」
と言ってもよいのでは。
0166デフォルトの名無しさん
2008/08/30(土) 04:13:090167デフォルトの名無しさん
2008/08/30(土) 04:18:320168デフォルトの名無しさん
2008/08/30(土) 04:24:20memset(&obj, 0, sizeof(obj));
とやってハングさせたオレが来ましたよ
・・・・だってメンバたくさんあったんだもん。
0169デフォルトの名無しさん
2008/08/30(土) 04:33:401ヶ月後にソースみたらさっぱりわからん
0170デフォルトの名無しさん
2008/08/30(土) 04:34:330171デフォルトの名無しさん
2008/08/30(土) 04:39:480172デフォルトの名無しさん
2008/08/30(土) 04:41:56うまく略すなりするとか。
あとは文字列を検索してわかりやすく表示してくれるツール使うとか。
それをしないと英単語で長い名前にした意味がないw
0173デフォルトの名無しさん
2008/08/30(土) 04:44:34素直にローマ字でかいとけばいいのかなぁ
0174デフォルトの名無しさん
2008/08/30(土) 05:08:16和英辞書で単語を探すのは極力避ける。
類似のプログラムを探して、そこで使用されている英語を使う。
略し方にはルールがあるので、それに従う。
業務プログラムはローマ字も可。
こればかりは経験。良いプログラムを多く見ること。
0175デフォルトの名無しさん
2008/08/30(土) 05:35:32NULLは4バイト
0176デフォルトの名無しさん
2008/08/30(土) 05:38:03Cじゃ文字リテラルはint型扱いだろ
0177デフォルトの名無しさん
2008/08/30(土) 10:09:12COBOLer 乙
0178デフォルトの名無しさん
2008/08/30(土) 11:19:29命名規則をまとめたサイトを見りゃ1発。
http://potting.syuriken.jp/potting_conv/CodingGuidelines_J/CodingGuidelines.htm
0179デフォルトの名無しさん
2008/08/30(土) 12:27:200180デフォルトの名無しさん
2008/08/30(土) 13:11:330181デフォルトの名無しさん
2008/08/30(土) 13:12:29NULLはヌルポインタでしょ
0182デフォルトの名無しさん
2008/08/30(土) 13:13:360183デフォルトの名無しさん
2008/08/30(土) 13:14:350184デフォルトの名無しさん
2008/08/30(土) 14:01:23coutで結果を表示させながらやらせた場合と、
何も表示せず最後にだけレポートを表示させた場合で
100倍くらい処理速度に差があるんですが
これって普通ですか
標準入出力ってこんなにも重いものなんですか
0185デフォルトの名無しさん
2008/08/30(土) 14:02:50Yes
0186デフォルトの名無しさん
2008/08/30(土) 14:03:46最後のレポートが途中の表示の1/100の量なら、普通です。
0187デフォルトの名無しさん
2008/08/30(土) 14:03:56そりゃまあ、そんなもんでしょ。
それをファイルに1レコードずつ読み書きに置き換えたらもっとだと思うよ。
表示っていっても数字を渡した場合は関数の中で文字に変換して書式に従って整形
その後画面表示だったらそのAPIなんかに渡したりと意外となかで処理はやってるし。
0188デフォルトの名無しさん
2008/08/30(土) 14:04:58処理速度を気にするプログラムを始めて作っていて
これほど差があるものだと思い知りました
ありがとうございました
0189デフォルトの名無しさん
2008/08/30(土) 16:53:04個人的にはどうでも良いけど、NULLはヌルポインタ定数と呼び、
ヌルポインタ定数をポインタ型にキャストした結果をヌルポインタと呼ぶ。
0190デフォルトの名無しさん
2008/08/30(土) 17:19:170191デフォルトの名無しさん
2008/08/30(土) 19:24:29違和感があるぞ
ポインタ変数への代入後または右辺値でなければNULLはNULLポインタにあらずって感じだ
0192デフォルトの名無しさん
2008/08/30(土) 20:21:521、PRINTえふで出力した文章って、下に下に書き足されて前の文章がいつまでも残りますよね?
そこで、出力してある文章を一旦全部消す方法はあるでしょうか。ないでしょうか。
2、キーボードの矢印キーで入力する方法はあるでしょうか。ないでしょうか。
0193デフォルトの名無しさん
2008/08/30(土) 20:31:55A. 両方環境依存ですが方法はあります
0194デフォルトの名無しさん
2008/08/30(土) 20:44:30使っている環境をありったけ述べてください
もしlinuxとかなら"\r"だけで行頭に戻るかも
0195192
2008/08/30(土) 20:44:55素早いお返事ありがとうございます。
環境依存というのは、自分のパソコンやらキーボードやらコンパイラやらの事、でいいんでしょうか?
まあ自分は完全にアマチュアで、「○を動かして宝さがしゲーム」を組んでみて、やったー!動いてるー!というレベルです。
ですからできなくてもなんら問題はないんですが、参考までにオススメの環境を教えてもらってもいいですか?
0197デフォルトの名無しさん
2008/08/30(土) 21:10:23矢印の取得なら
PeekConsoleInput とか ReadConsoleInput @ windows.h
もしくは
getch とか kbhit @ conio.h
画面消去は system("cls"); とか
0198デフォルトの名無しさん
2008/08/30(土) 21:15:44win32でいいなら↓でいろいろできるようになるよ
ttp://msdn.microsoft.com/ja-jp/library/cc429123.aspx
0199192
2008/08/30(土) 21:25:29うおおおおお!!!!!感動しました!!
system("cls")で、ぐっとゲームっぽくなりました!
ほかのはちょっと今は理解不能ですけど
ありがとうございました!!
0200デフォルトの名無しさん
2008/08/30(土) 21:29:22そう言われても、規格にそのように書いてあんだよね。
0201デフォルトの名無しさん
2008/08/30(土) 21:44:070202デフォルトの名無しさん
2008/08/30(土) 21:44:08NULLはマクロで、それはヌルポインタ定数そのものに置換されるかもしれないし、それをvoid*にキャストした式や、(C99の場合は)ヌルポインタそのものに置換されるかもしれない
ヌルポインタが何であるかは規格では定められていない
0203デフォルトの名無しさん
2008/08/30(土) 21:50:390204デフォルトの名無しさん
2008/08/30(土) 21:52:20厳密であるとは言葉の持つ意味に曖昧さがないようにするということ
0やNULLやヌルポインタが厳密なのではなく、それぞれの言葉をそれぞれの意味で明確に使い分けることが厳密さ
もちろん、曖昧さがあったとしても、正しく意志が疎通されないわけではない
しかしそれは書き手読み手の双方にCの正しい理解があることが必要であって、
ことこのスレでその前提を期待することは、無根拠な楽観を通り越して明らかな間違いであると言わざるをえない
0205デフォルトの名無しさん
2008/08/30(土) 21:54:53ネタじゃない方法plz
0206デフォルトの名無しさん
2008/08/30(土) 22:46:01他のフォルダへコピーするにはどうしたらいいのでしょうか?
フォルダ内検索でdesktop.iniのみしか表示されない、というところで詰まっています。。。
0207デフォルトの名無しさん
2008/08/30(土) 22:52:500208デフォルトの名無しさん
2008/08/30(土) 23:01:54関数は引数int(またはなし)で戻り値intのものだけ
それ以外は自分でプロトタイプを用意しない限り正しく動かない
演算子はインクルード関係ない
0209デフォルトの名無しさん
2008/08/30(土) 23:50:01203は関数宣言しなかった際の関数の型解釈(C言語仕様)ではなく、
#include しない場合に使える関数→ビルトイン関数のようなことを
聞いている。きっと。
>203
208の言っていることは間違っていないが、使う関数は宣言するのが
常識とすれば「そんな関数はない」が回答。
0210デフォルトの名無しさん
2008/08/30(土) 23:51:19main がそうだね。
0211デフォルトの名無しさん
2008/08/30(土) 23:59:47memsetとか使ってみたら警告は出たけど動作はしてるみたいなんですけどこれはたまたまそういうコンパイラだったってことでしょうかね?
0212デフォルトの名無しさん
2008/08/31(日) 00:07:24その警告はmemsetがわからねーよってのじゃね?
ワーニングレベルでコンパイル通るけど、その実何もやってないはず。
memset程度ならたまたま使う変数だとかがいい感じで初期化されてただけだと思ったほうがいい
0213デフォルトの名無しさん
2008/08/31(日) 00:12:52C言語は言語としての仕様しか提供されていないです。
その代わりというか標準Cライブラリが提供されてます。
C言語が main から動くというのもそのおかげです。
memestが動作したのは、208が言った仕様に従ってコンパイルされた
結果、memsetが入っているclibとリンクできただけ。
高度なサービスがセットになっている言語環境が欲しいなら
JavaとかC#とかの方がいいかも。
0214デフォルトの名無しさん
2008/08/31(日) 00:16:22JIS(C99)より。
値0を持つ整数定数式又はその定数式をvoid *にキャストした式を
空ポインタ定数(null pointer constant)(注釈55)と呼ぶ。
空ポインタ定数をポインタ型に型変換した場合、
その結果のポインタを空ポインタ(null pointer)と呼び、
いかなるオブジェクト又は関数へのポインタと比較しても
等しくないことを保証する。
(注釈55)
空ポインタ定数としてマクロNULLが
<stddef.h>(及び他のヘッダ)で定義されている。
となってるよ。
まぁ知ってんだろうけど、>>202の解釈はちょっと納得出来ないなぁ。
NULLはプリプロセッサで必ず空ポインタ定数に展開されるし、
ヌルポインタが何であるかは規格で定められている。
(何であるか、って内部表現の話か?それだとそもそもそんな話を持ち出す意味が無い)
>ポインタを必要とするところに書いたらヌルポインタに変換されることが保証されている
多くの場合は暗黙の型変換が発生するだけじゃないでしょーか・・・。
printfの%pはポインタを必要とするが、おそらくキャストしない0を渡してもintで渡ると思う。
まぁ、intとポインタのバイト数が違う処理系はまれなんで(ていうか俺は触ったこと無い)
処理系依存だけど殆どの環境で正しく動作する。
0215デフォルトの名無しさん
2008/08/31(日) 01:28:28C99なら、だろ
C89だとただの0とか0Lである場合もある
>printfの%pはポインタを必要とするが
ちがう
可変個数引数の関数はコンパイラが型チェックをしない
だからそれは「プログラマの責任でポインタを書かなくてはいけない場所」であって
コンパイラが変換処理をしてくれるところの「ポインタを必要とする場所」ではない
0216デフォルトの名無しさん
2008/08/31(日) 01:29:350はヌルポインタ定数なんすよ。
0217デフォルトの名無しさん
2008/08/31(日) 01:33:44よく読め、ナマの0も空ポインタ定数に入ってる
0218デフォルトの名無しさん
2008/08/31(日) 01:36:42ポインタが必要な場所に書いたらヌルポインタとして扱われるってことだろ
この話終了
0219デフォルトの名無しさん
2008/08/31(日) 01:42:50文法上ポインタを要求する場所に0を書いたらそれはヌルポインタに変換される。
0や0をvoid*にキャストしたものを空ポインタ定数(ヌルポインタ定数)と呼ぶ。
NULLはマクロの名前で、空ポインタ定数(のどれか)に展開される。
NULLやヌルポインタの本当の値がゼロである保証は無い。というか関係が無い。
だからNULLをゼロとか\0の意味で使うと誤解を招きやすい。
0220デフォルトの名無しさん
2008/08/31(日) 01:51:510221デフォルトの名無しさん
2008/08/31(日) 01:55:55メモリのアドレスの関係上0x00000000を使ってるが0xFFFFFFFFは使わない場合
NULLは0では困る可能性もあるわけだ。
0222デフォルトの名無しさん
2008/08/31(日) 02:01:48null_ptr
とC++0xの話へもうちょっとだけ続くんじゃ
0223デフォルトの名無しさん
2008/08/31(日) 02:48:23printf("%p", '\0');
0224デフォルトの名無しさん
2008/08/31(日) 02:52:30で?
0226デフォルトの名無しさん
2008/08/31(日) 03:05:450227デフォルトの名無しさん
2008/08/31(日) 03:07:27第一引数を元にキャストしてとりだすんだよね
0228デフォルトの名無しさん
2008/08/31(日) 03:11:140229デフォルトの名無しさん
2008/08/31(日) 03:13:09依存
上はNULLがvoid*にキャストされていて、ヌルポインタの内部表現が0でなかったとき0にならない(%cで表示されるかどうかは知らんが)
下はポインタのサイズが文字定数のサイズ(int)より大きかったとき、ゴミを読み込んで0以外の値になるかもしれない
0230デフォルトの名無しさん
2008/08/31(日) 03:27:37そもそも、c変換指定子に対応する引数はintでなければならず、
p変換指定子に対応する引数はvoid*でなければならない。
それ以外の場合の挙動は未定義。
0231デフォルトの名無しさん
2008/08/31(日) 05:52:040232デフォルトの名無しさん
2008/08/31(日) 12:14:040233デフォルトの名無しさん
2008/08/31(日) 12:50:140234デフォルトの名無しさん
2008/08/31(日) 13:07:410235デフォルトの名無しさん
2008/08/31(日) 13:23:35調べるという行為自体が目的なら頑張ればいいが
調べた結果に基づいて書いた処理系依存コードなんぞ窓から投げ捨てるためにあるようなものだ
0236デフォルトの名無しさん
2008/08/31(日) 13:29:020237デフォルトの名無しさん
2008/08/31(日) 13:30:210238デフォルトの名無しさん
2008/08/31(日) 13:39:130239デフォルトの名無しさん
2008/08/31(日) 13:41:090240デフォルトの名無しさん
2008/08/31(日) 13:47:280241デフォルトの名無しさん
2008/08/31(日) 14:02:10|本当に何が起きても不思議はないことを意味する。規格は何の必要条件も課さない。
|コンパイルできないかもしれないし、誤った動きをするかもしれないし
|(クラッシュしたり黙って誤った結果を出したり)、
|あるいはたまたまプログラマの意図したとおりの動きをするかもしれない。
0242デフォルトの名無しさん
2008/08/31(日) 14:56:47見たいな感じで#define での定数に括弧を使ってるソースを見かけたんですが、
括弧のあるなしでなにか動作が変わる例はあるのですか?無い様に思ったんですがひょっとしたらあるのかなと思いまして
0243デフォルトの名無しさん
2008/08/31(日) 15:14:34#define add(a, b) ((a)+(b))
9/add(1,2)
0244デフォルトの名無しさん
2008/08/31(日) 15:14:58(100+1)みたいに後から足すこともできるし
0245デフォルトの名無しさん
2008/08/31(日) 15:26:12ある日MAXを別の条件で定義し直すとする。
#define MAX 100 + 50 /*なんかの理由で50追加*/
なんてソースにしたらバグになるので、
#define MAX (100 + 50) /*なんかの理由で50追加*/
こういう修正がされることを期待してあらかじめ入れておく。
1行だけのif文に { } を入れる・入れないの議論も本来いっしょ。
オレは入れるべきだと思ってる。
MISRA-Cとかに対応するためにはどちらも必須。
0246デフォルトの名無しさん
2008/08/31(日) 15:43:00すいませんでした
数字だけなのに括弧つけてて不思議だなぁと思って質問してたんです
お手数かけて申し訳ありません
>>244
やっぱ変わらないですよね
追加のことは思い至りませんでした
どうもありがとうございました
0247デフォルトの名無しさん
2008/08/31(日) 15:48:49トークン連結演算子(##)とかにマクロを放り込むバカに注意を出してくれる
0248デフォルトの名無しさん
2008/08/31(日) 16:22:24インベーダーゲームが始まるCコンパイラがあったよーななかったよーな・・・
0249デフォルトの名無しさん
2008/08/31(日) 18:10:00仕事をしてるふりをして遊べる画期的なコンパイラだ
0250デフォルトの名無しさん
2008/08/31(日) 18:15:030251デフォルトの名無しさん
2008/08/31(日) 18:15:45よしコンパイルするか〜
↓
「ながい たびが はじまる」
0252デフォルトの名無しさん
2008/08/31(日) 18:25:360253デフォルトの名無しさん
2008/08/31(日) 18:28:57↓
「これは ひどい」
0254デフォルトの名無しさん
2008/08/31(日) 21:19:580255デフォルトの名無しさん
2008/09/01(月) 01:06:05数値リテラルの型ではなくてバイト数を固定する方法ってないんでしょうか?
多倍長整数ライブラリとかで変数に巨大な定数を代入したくなったときとかlongまでしかできなかったら不便だと思うんですが・・・
0256デフォルトの名無しさん
2008/09/01(月) 01:08:150257デフォルトの名無しさん
2008/09/01(月) 02:16:07標準Cで扱えないような数値を扱うために多倍長整数ライブラリをつかうわけで…
0258デフォルトの名無しさん
2008/09/01(月) 05:01:580259デフォルトの名無しさん
2008/09/01(月) 05:07:420260デフォルトの名無しさん
2008/09/01(月) 05:10:46臨機応変に考えろ。
昔からある言語でいろんなビット幅のCPUで使われてるんだし
時代とともにあれこれ変えて継ぎはぎだらけなんだし。
所詮は道具
0261デフォルトの名無しさん
2008/09/01(月) 05:18:330262デフォルトの名無しさん
2008/09/01(月) 05:31:10巨大な定数は文字列で渡せばおk
0263デフォルトの名無しさん
2008/09/01(月) 22:51:22そりゃ色々あるのはわかってますよ!バカな質問かもしれませんよ!?こっちはただのドしろーとで悪いと思ってますよ!!
でもたとえばテキストベースが多いとか、C言語にはC言語ならではの、得意分野ってあるのかなー、と。
むしろ純粋なC言語のみのプログラムなんてやらないんでしょうか?
0264デフォルトの名無しさん
2008/09/01(月) 23:01:360265263
2008/09/01(月) 23:11:22>>264
まだありますけど、理解しました。
ありがとうございました。
0266デフォルトの名無しさん
2008/09/01(月) 23:12:03家電のファームなんてほぼCだろ。ほぼって言うのは少数でアセンブラ含むということで
0267デフォルトの名無しさん
2008/09/01(月) 23:17:520268デフォルトの名無しさん
2008/09/01(月) 23:17:550269デフォルトの名無しさん
2008/09/01(月) 23:20:29まあマイコンも性能上がってるしなあ。
書かなきゃいけない規模もあがってるからそうなるのか。
0270デフォルトの名無しさん
2008/09/01(月) 23:31:450271デフォルトの名無しさん
2008/09/01(月) 23:34:450272デフォルトの名無しさん
2008/09/02(火) 01:04:100273デフォルトの名無しさん
2008/09/02(火) 01:05:410274デフォルトの名無しさん
2008/09/02(火) 03:08:506.000000
5
となるのは何故でしょうか?
Visual studio 2005 pro のコンパイラでは
6.000000
6
となります。
柴田望洋著の『C言語によるアルゴリズムとデータ構造』のList2-13で
intへの変換結果が6となることを意図して下のような処理がされていたのですが
するべきでない処理なのでしょうか。
#include <stdio.h>
int main(void)
{
int i;
double vision = 0.6;
printf("%f\n",vision * 10);
printf("%d\n",(int)(vision *10));
return 0;
}
0275デフォルトの名無しさん
2008/09/02(火) 03:25:28んで、数の丸めに関する動作は処理系定義。だから直接整数にキャストするのは移植性の高い書き方ではない。
演算の結果が整数に非常に近いことが期待できるなら、(int)(d+0.5)が使える。
0276デフォルトの名無しさん
2008/09/02(火) 03:26:49×整数に
○0以上の整数に
0277デフォルトの名無しさん
2008/09/02(火) 12:44:31>intへの変換結果が6となることを意図して下のような処理がされていたのですが
それが本当なら、ブックオフ行きだな
0278デフォルトの名無しさん
2008/09/02(火) 12:50:460279274
2008/09/02(火) 13:16:260.6(10) = 0.1001…(以下1001の繰り返し) (2)
となって(vision * 10)は内部では5.999999999…になっているのですね。
それで、intの変換の段階で小数点以下を切り落としてbccとgccでは5になり、
VC++では printf("%f\n",vision); の時のような処理がされていて6にしてくれると。
今回は0.1刻みの値をvisionに格納しているので0.5を足して解決するのがよさそうです。
レス有り難うございます。
>>277
付属のCDに収録されたソースコードでも同様の問題が起きたので
私の打ち間違いではなさそうです。
付属のコンパイラはbcc32なのに別のコンパイラで動作確認したのでしょうか
もう少しCになれたら他の人の本を参考にする必要がありそうですね
アドバイス有り難うございます。
0280デフォルトの名無しさん
2008/09/02(火) 17:06:13struct hoge a;
a = (struct hoge){0};
0281デフォルトの名無しさん
2008/09/02(火) 17:22:19初期化自体はstruct hoge a = {0};と同じ方法でやるので問題ない。
0282デフォルトの名無しさん
2008/09/02(火) 18:28:100283デフォルトの名無しさん
2008/09/02(火) 19:26:160.1刻みなら内部では10倍で計算しておいて出力時に1/10すれば安心では?
0284デフォルトの名無しさん
2008/09/02(火) 19:29:19って標準なの?
0285デフォルトの名無しさん
2008/09/02(火) 20:25:15もちろん
0286デフォルトの名無しさん
2008/09/02(火) 20:56:360287デフォルトの名無しさん
2008/09/02(火) 21:00:21一般の人にはなかなか手が出ませんな。
0288デフォルトの名無しさん
2008/09/02(火) 21:02:590289デフォルトの名無しさん
2008/09/02(火) 21:06:5490日間?
0290デフォルトの名無しさん
2008/09/02(火) 21:25:01ttp://www.intel.com/cd/software/products/asmo-na/eng/index.htm から
Free Non-Commercial Download たどってメールアドレス登録すれば使える.
0291デフォルトの名無しさん
2008/09/02(火) 22:23:32プログラムを書いたのですが、どういうわけか1万3000程度で停止してしまいます。
コードには全く意味のない部分もありますが、どうして止まってしまうのか教えてください。また、どのようにすれば解決するかを教えていただけると幸いです。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int l,w,v,i,*la,*wi,*va;
FILE *fp;
fp = fopen("ru.dat","r");
la = (int *)malloc(sizeof(int)*10);
if (la == NULL) exit(0);
wi = (int *)malloc(sizeof(int)*10);
if (wi == NULL) exit(0);
va = (int *)malloc(sizeof(int)*10);
if (va == NULL) exit(0);
i=1;
while(fscanf(fp, "%d %d %d", &l,&w,&v) != EOF ){
la[i] = l;
printf("%d\n",i);
i++;}
free(la);free(wi);free(va);fclose(fp);
return 0;}
0292デフォルトの名無しさん
2008/09/02(火) 22:27:40malloc の引数はこのまま?
0293デフォルトの名無しさん
2008/09/02(火) 22:32:30malloc(sizeof(int)*10); を malloc(sizeof(int)*13000); にしたってこと?
0294デフォルトの名無しさん
2008/09/02(火) 22:33:03感じでは実際には512kb=int[128]しか割り付けられてないみたいな?
そんな環境あるのかね?
0295デフォルトの名無しさん
2008/09/02(火) 22:33:50あ、そっちか
単に割り付けられる限界超えただけだな
0296デフォルトの名無しさん
2008/09/02(火) 22:35:000297デフォルトの名無しさん
2008/09/02(火) 22:40:500298デフォルトの名無しさん
2008/09/02(火) 22:43:070299デフォルトの名無しさん
2008/09/02(火) 22:43:15停止とは具体的になんなのか!?ここ基本。
0300デフォルトの名無しさん
2008/09/02(火) 22:43:170301291
2008/09/02(火) 22:44:54そうです、mallocの引数はこのまま10です。
>>296
詳しくはないのですが、
たぶんDOSではありません。
>>297
どうすればいいですかね・・・
0302デフォルトの名無しさん
2008/09/02(火) 22:46:59組み込みか・・・もしかすると某ゲーム機の非公式開発か?
あれならアプリごとのヒープサイズを今回の引っかかってるサイズまで
制限できるからなあ。
0303デフォルトの名無しさん
2008/09/02(火) 22:47:04C言語なら俺に聞け(入門篇) Part 34
http://pc11.2ch.net/test/read.cgi/tech/1218532990/7
7 名前:デフォルトの名無しさん[sage] 投稿日:2008/08/12(火) 20:20:22
>>6
ありがとうございます。
いろいろ検索して、LSI C-86 というものを今インストールしてみました。
まったくの初心者なのでこれで十分かと思ってます。
C言語のことほとんど知らないのですが、DOSプロンプトみたいな画面に
文字が出てくるのですね。びっくりしました。
0304デフォルトの名無しさん
2008/09/02(火) 22:47:32> mallocの引数はこのまま10です。
10じゃマズいじゃん。チャンチャン
0305303
2008/09/02(火) 22:48:210306291
2008/09/02(火) 22:49:11コンパイラはBorland C++ Compiler 5.5でwindows XP・・・
浅学で必要そうな情報がいまいちつかめてませんが、
あとはどのような情報が必要なのでしょうか。すいません。
0307デフォルトの名無しさん
2008/09/02(火) 22:50:07対象ターゲットは?
0308デフォルトの名無しさん
2008/09/02(火) 22:50:100310291
2008/09/02(火) 22:52:43すいません、ちょっといまわかりません。
でも*10を 10000にしたら14万行まで進めました!
解決したみたいです・・・!
>>308
>>304
変えてみたらできました・・・ほんとありがとうございます!
0311291
2008/09/02(火) 22:54:05こんなにも素早く対応していただけて嬉しいです。
もっと上達したらここでアドバイスできるくらいになります!
本当にありがとうございました!
0312デフォルトの名無しさん
2008/09/02(火) 22:56:05メモリを食いつぶしてたってこと?
0313デフォルトの名無しさん
2008/09/02(火) 22:56:21がんばって勉強してください。
0314デフォルトの名無しさん
2008/09/02(火) 22:56:58*10000なのに、14万まで進んだらまずくね?
0315デフォルトの名無しさん
2008/09/02(火) 22:58:42>>310
>でも*10を 10000にしたら14万行まで進めました!
使う分malloc()してください。
0316デフォルトの名無しさん
2008/09/02(火) 22:58:44書いている内容を素直に受け取る限りは
int *x;
x=malloc(sizeof(int)*10);
x[13000]=1234; // 落ちた!何で?
0317デフォルトの名無しさん
2008/09/02(火) 22:59:01俺は>>291のソースはすでにかなりいじる前のだと思ってたけど
>>291これが最終ソースだったのか?
0318デフォルトの名無しさん
2008/09/02(火) 23:00:06それはこえーな
メモリのこと理解してねーじゃん
0320291
2008/09/02(火) 23:02:06これからどんどんいじっていく予定です。
とりあえず10万行以上の処理ができるかテストしたら
止まってしまってたので四苦八苦してました。
0321デフォルトの名無しさん
2008/09/02(火) 23:02:510322デフォルトの名無しさん
2008/09/02(火) 23:03:19の()の中が何をやってるかどういう意味か理解してからでないとあぶねーな。
0324デフォルトの名無しさん
2008/09/02(火) 23:04:56root もしくは実行ファイルに sid があれば可能
一般ユーザ権限では変更できない
0325デフォルトの名無しさん
2008/09/02(火) 23:09:23作れるよ。なんらかのシステムコールを使うんだ。settimeだったかな?
0326デフォルトの名無しさん
2008/09/02(火) 23:18:39ひゃっほー suid だったぜ
0327デフォルトの名無しさん
2008/09/02(火) 23:24:140328デフォルトの名無しさん
2008/09/02(火) 23:24:590329
2008/09/02(火) 23:39:06正常終了しないので助けて下さい。
ソースです。
#include <stdio.h>
void main(void)
{
int i,j;
char a[30];
printf("文字入力:");
j=getchar();
for(i=0;j!=EOF;i++){
if('A'<=j && j<='Z'){
j = j - ('A'-'a');
putchar(j);
}else{
if('a'<=j && j<='z'){
j = j - ('a'-'A');
putchar(j);
}else{
putchar(j);
}
}
j=getchar();
}
}
0330デフォルトの名無しさん
2008/09/02(火) 23:42:41EOFを入力すればおk
Windows環境ならCtrl+Z
Unix系環境ならCtrl+D
0331デフォルトの名無しさん
2008/09/02(火) 23:47:080332デフォルトの名無しさん
2008/09/02(火) 23:48:56main()はintを返す。void main()は間違い。
大文字と小文字の変換はctype.hをincludeしてtolower()とtoupper()を使うべし。
0333
2008/09/02(火) 23:55:49Ctrl+Zを押さなくても終了するようにできますか?
0334デフォルトの名無しさん
2008/09/03(水) 00:17:31for文の条件を!=EOFにしてるんだから、EOF入力しなきゃ終わらんだろ。
0335デフォルトの名無しさん
2008/09/03(水) 00:21:44'\n'を終了条件にすれば?
0336デフォルトの名無しさん
2008/09/03(水) 03:00:32○^zや^dの押下で標準入力をクローズ
0337デフォルトの名無しさん
2008/09/03(水) 03:28:46int main(void)
{ char ch;
while(1)
{ printf("終了しますか? Y/N\n");
ch = getchar();
switch(ch){
case 'Y':
case 'y':
printf("終了します\n");
break;
case 'N':
case 'n':
printf("処理を続行します\n");
break;
default:
printf("正しく入力してください\n");
}
if(ch='Y','y')break;
}
}
Yを入力されない限り、終了しますか? Y/Nを毎回ループさせたいんですが、ちゃんとなってくれません・・・。
0338デフォルトの名無しさん
2008/09/03(水) 03:39:09これの意味説明してみろ
0339337
2008/09/03(水) 03:40:170340デフォルトの名無しさん
2008/09/03(水) 03:42:11if (ch == 'Y' || ch == 'y')
0341デフォルトの名無しさん
2008/09/03(水) 03:42:570342337
2008/09/03(水) 03:47:32>>340
それでいけました。 前のソースコードでもコンパイルはされました(visualC++2008)
カンマ演算子の使い方がイマイチわかってなかったです。ありがとうございます。
>>341
if文だけで作り直してみます。
0343デフォルトの名無しさん
2008/09/03(水) 03:51:39switch(ch){
case 'Y':
case 'y':
printf("終了します\n");
break;
↑をbreakじゃなくてreturnなりexitなりを使えば良いと思う
0344デフォルトの名無しさん
2008/09/03(水) 03:52:58意図した通りかどうかは兎も角、正しくコンパイルできるね。
君にはどういう風に解釈されるのかを考えてもらおうか。
0345337
2008/09/03(水) 04:01:24とりあえずif文だけを使って>>340さんと同じような意味のコードを書いてみました。
が、Nや何も入力しないと、DOS窓上で
処理を続行します
ただしく入力してください
終了しますか?Y/N
のように2重になってしまいます・・・。うーん難しい。
#include<stdio.h>
int main(void)
{
char ch;
while(1)
{
printf("終了しますか?Y/N\n");
ch=getchar();
if(ch=='Y'||ch=='y')break;
else if(ch=='N'||ch=='n'){
printf("処理を続行します\n");
}
else
printf("正しく入力してください\n");
}
}
0346340
2008/09/03(水) 04:01:31ch='Y'で代入されて戻り値は破棄される。次の'y'がifの条件文となる。
つまりif('y')と同義で、常に真となる。
…はずなんだが、それだと常にループ抜けるな。あってる?
0347デフォルトの名無しさん
2008/09/03(水) 04:04:09あってる。
>>345
getchar()で喰い残した改行文字が次のgetchar()で喰われている。
再入力前に、食い潰しておけば大丈夫。
0348デフォルトの名無しさん
2008/09/03(水) 04:50:49とりあえずおまえは回答者になる資格ぜんぜんなし。黙ってろ。
0349デフォルトの名無しさん
2008/09/03(水) 13:24:570350デフォルトの名無しさん
2008/09/03(水) 13:34:02がコンパイルできない、などという嘘を垂れ流す方がよっぽどゴミな訳だが
0351デフォルトの名無しさん
2008/09/03(水) 13:49:340352デフォルトの名無しさん
2008/09/03(水) 14:04:52#include <stdio.h>
int main(void){
int x;
x = 100;
printf("%d\n", x);
{
int y;
y = x;
printf("%d\n", y);
}
return 0;
}
0353デフォルトの名無しさん
2008/09/03(水) 14:18:590354デフォルトの名無しさん
2008/09/03(水) 14:19:48とりあえずそこだけ関数化して呼ぶとか?
0355デフォルトの名無しさん
2008/09/03(水) 14:40:01C++使う
0356デフォルトの名無しさん
2008/09/03(水) 14:46:590357デフォルトの名無しさん
2008/09/03(水) 14:56:37cosの中だったら180で計算すべきなのかな?
0358デフォルトの名無しさん
2008/09/03(水) 14:57:24その手前は自分の好きなように
0359デフォルトの名無しさん
2008/09/03(水) 15:31:20スコープを絞るというより、そこで変数を宣言したいからと言ったほうが近いように感じる。
0360741
2008/09/03(水) 16:51:07>>329のj = j - ('A'-'a'); ってどういう意味ですか?
全く理解できないんですが j+=('A'-'a');とやってもおかしく表示されたんですが
j = j - ('A'-'a'); の意味を教えてくださいお願いします
0361デフォルトの名無しさん
2008/09/03(水) 16:52:460362デフォルトの名無しさん
2008/09/03(水) 16:52:51大文字を小文字に変換してる
文字コードでぐぐればわかるんじゃね?
0363741
2008/09/03(水) 16:53:27j-='A'-'a'なんですが
Aからaをひくいみがわからないんですが。
詳しく説明お願いします
0364デフォルトの名無しさん
2008/09/03(水) 16:54:430365デフォルトの名無しさん
2008/09/03(水) 16:56:050366デフォルトの名無しさん
2008/09/03(水) 16:56:19Aのアスキーコード
aのアスキーコード
引くと?
0367デフォルトの名無しさん
2008/09/03(水) 16:57:36'a'の文字コードは 0x61
差は0x20('A' - 'a' なら マイナスだが)
例えば、jの内容が0x4a('J')なら-0x20を引く(=0x20を足す)と0x6a == 'j'になる
0368デフォルトの名無しさん
2008/09/03(水) 16:57:54まずここを眺める
http://ja.wikipedia.org/wiki/ASCII
表より、'A' は 65、'a' は 97 だから 'A' - 'a' は 65 - 97 で -32
つまり j -= -32; ということ
0369デフォルトの名無しさん
2008/09/03(水) 17:00:47'B' - ('A' - 'a') = 1 + 'A' - ('A' - 'a') = 1 + 'a' = 'b'
・・・
0370デフォルトの名無しさん
2008/09/03(水) 17:01:310371デフォルトの名無しさん
2008/09/03(水) 17:01:49同様に a〜z まで 順に連続したアスキーコード だとする
j にはアスキーコードが入っている
事前の if で A〜Z 内だと限定できる状況
j - 'A' は Aから数えて何文字目となる
j - 'A' + 'a' で Aから数えて何文字目 + aのアスキーコード
→ jのアスキーコードから対応する小文字化されたアスキーコードが手に入った
0372デフォルトの名無しさん
2008/09/03(水) 17:03:01それは意味をわかって書くならいいが、ここで解説してなんとなくで
そのままだといずれハマるな。
特に文字関連の処理をする場合
0373デフォルトの名無しさん
2008/09/03(水) 17:05:140374デフォルトの名無しさん
2008/09/03(水) 17:05:30-32なんていうマジックナンバーをコード中に埋め込んではだめです、じゃだめかな
0375741
2008/09/03(水) 17:07:32jにaといれたら 97となるわけですが aAといれたら 97+65=162になるんでしょうか?
それと329のchar a[30];は使ってない気がするんですが
char a[30];はどこで使われてるんでしょうか?
0376デフォルトの名無しさん
2008/09/03(水) 17:08:25struct{
UCHAR a;
UCHAR b[2];
UCHAR c;
}KOU;
main(){
KOU kouzou
func_A(kouzou->b);//適当な関数
}
int func_A(UCHAR bb[2]){
・・・
}
という構造体メンバの変数bからbbへ
渡しているんですが、sizeof(bb) = 2となりませんでした。
添え字を2で宣言しているのにどうしてサイズが変わるのでしょうか?
どなたか御回答お願いしますm(__)m
0377376
2008/09/03(水) 17:10:28失礼しました。
0378デフォルトの名無しさん
2008/09/03(水) 17:11:22関数の仮引数の配列の添え字を1000にしても sizeof(CHAR*) と同じ数値になる
なぜなら、そう決まっているから
0379376
2008/09/03(水) 17:14:17わかりました!どうもありがとうございますm(__)m
0380デフォルトの名無しさん
2008/09/03(水) 17:14:21getcharは1文字入力する関数だから2文字同時には入力されない
1文字ずつしか入らない
使ってない変数が宣言してあっても死にはしない
単に無駄なだけ
気にしないで放っておけばいい
0381デフォルトの名無しさん
2008/09/03(水) 17:14:30int func_A(UCHAR bb[2])
これ配列を受けてない。
意味的には
int func_A(UCHAR* bb)
と同じでポインタを受けてる。 だから sizeof(bb) はポインタのサイズ (4 とか 8 とか)
-----------
あえて 配列をスタックに積みきる宣言だと
int func_A((UCHAR bb)[2]);
# で良いんだっけ?
0382デフォルトの名無しさん
2008/09/03(水) 17:26:21違う
構造体につめて渡す以外のどんなことをやっても配列をスタックに積むことはできない
0383デフォルトの名無しさん
2008/09/03(水) 17:29:12使ってない変数があっても気にしないで放っておけだって?
おまえ教える資格ないから。
なんちゃってプログラマは黙ってろよ。
0384741
2008/09/03(水) 17:29:38ああああああ そういう意味ですか
getcharは1文字で aAって入力されたら a=97,A=65って別々に代入してるかんじですよね?
それをforで連続して a-32=A A-32=a ってputcharで出力してるんですね?
文字コードをみたら大文字と小文字は-32の誤差があるってことがわかりました
'a'-'A'ってなんかわかりずらいですね -32にすればいいんですが。
0385デフォルトの名無しさん
2008/09/03(水) 17:31:450386デフォルトの名無しさん
2008/09/03(水) 17:32:59アスキーコードを使うことが前提なら32を使っても構わない(連続性自体が文字コード依存だから)
0387デフォルトの名無しさん
2008/09/03(水) 17:34:160389デフォルトの名無しさん
2008/09/03(水) 17:34:550390デフォルトの名無しさん
2008/09/03(水) 17:35:02'a'や'A'が実際には数だって事を理解していれば
いちいちコードを調べずに済むからわかりやすいよ
0391デフォルトの名無しさん
2008/09/03(水) 17:35:47j = j - ('A'-'a');
これはどっちかといえば
j = (j - 'A') + 'a';
と考えたほうがいい
0392デフォルトの名無しさん
2008/09/03(水) 17:36:43通じる可能性はあるから間違ってはいない
0393デフォルトの名無しさん
2008/09/03(水) 17:37:060394デフォルトの名無しさん
2008/09/03(水) 17:40:03toupperやtolowerを使ってはいけないという条件付きの
0395デフォルトの名無しさん
2008/09/03(水) 17:40:54念のために言っておけば、本当に移植性の高いコードは、
(toupper()やtolower()やisalpha()を使わないなら)switchを使ってベタっと記述するものになる
switch(c){
case 'a': c='A'; break;
case 'b': c='B'; break;
:
:
case 'z': c='Z'; break;
case 'A': c='a'; break;
case 'B': c='b'; break;
:
:
0396デフォルトの名無しさん
2008/09/03(水) 17:40:550397デフォルトの名無しさん
2008/09/03(水) 17:41:400398デフォルトの名無しさん
2008/09/03(水) 17:43:24テーブル使う方法もあるよ!
結果的には同じようなものになるかもしれないけど。
0399デフォルトの名無しさん
2008/09/03(水) 18:06:34変換部に関しては
不連続でも 'A' を基準に B〜Z のオフセットの値と
'a' を基準に b〜z のオフセットの値とが一致していればよくね?
0400デフォルトの名無しさん
2008/09/03(水) 18:09:350401741
2008/09/03(水) 18:14:100402デフォルトの名無しさん
2008/09/03(水) 18:48:330403デフォルトの名無しさん
2008/09/03(水) 19:31:110404デフォルトの名無しさん
2008/09/03(水) 19:33:080405デフォルトの名無しさん
2008/09/03(水) 19:35:21君の言っている継承が具体的にどのようなもので、実現というのが具体的に何を指すのかわからないが、たぶん無理
0406デフォルトの名無しさん
2008/09/03(水) 20:01:37↑こういう感じの「Cでオブジェクト指向プログラミングをする方法」みたいなのを書く人って定期的に現れるけど、
すなおにC++使ったほうがいいな。
0407デフォルトの名無しさん
2008/09/03(水) 20:06:540408デフォルトの名無しさん
2008/09/03(水) 20:07:390409デフォルトの名無しさん
2008/09/03(水) 20:12:40C++が出る前からオブジェクト指向プログラミングはある
言語でサポートしている範囲が違うだけ
Cでないといけない場合もあるだろうから、そういう記事はあったほうがいい
自分に今必要ないからといって、世の中に必要ないわけではないんだから
0410デフォルトの名無しさん
2008/09/03(水) 20:24:49素直にC++使えばいい。
Cしか使えないなら、Cらしいコードを書けばいいよ。
0411デフォルトの名無しさん
2008/09/03(水) 20:31:40>>406 の記事程度を変な技巧に走っているというなら
C++ で boost を使うのも変な技巧に走っているといえる
Cでオブジェクト指向プログラミングは
実際大した事ではないし、目くじら立てるほどの物でもない
0412デフォルトの名無しさん
2008/09/03(水) 20:32:580413デフォルトの名無しさん
2008/09/03(水) 20:43:41boostは中身を意識しないで使えるから複雑でもいいよ。
>>406 の記事も、抽象型はいいけど、継承とか、無理やり感があって、筋悪だろ。
0414デフォルトの名無しさん
2008/09/03(水) 20:45:40中身を意識しないで使えるようにする方法だよ
class 書くのと変わらない
0415デフォルトの名無しさん
2008/09/03(水) 21:07:43中身を書く人向けでしょ。>>406の類の技法って。
C++でclassを書くのは、Cで無理やり継承やら多態やらをやるような技法とはぜんぜん違う。
0416デフォルトの名無しさん
2008/09/03(水) 21:11:50少なくとも >>406 の記事には継承も多態も関係ない
0417デフォルトの名無しさん
2008/09/03(水) 21:22:09いまさらぐちゃぐちゃ言うようなものでない
0418デフォルトの名無しさん
2008/09/03(水) 21:25:24おまえ一ページ目しか読んでないだろ。
0419デフォルトの名無しさん
2008/09/03(水) 21:27:200420デフォルトの名無しさん
2008/09/03(水) 21:28:32抽象データ型みたいのは、標準ライブラリにも入ってるしな。
「Cで継承、多態」みたいのも昔から、言ってるやつはいるけど、ぜんぜん使われてない。
言ってる本人でさえ、本当に使ってるのかよって思うよ。
0421デフォルトの名無しさん
2008/09/03(水) 21:47:11スマン、3ページ目読んでない
0422デフォルトの名無しさん
2008/09/03(水) 21:49:41昔からあるし、レアだけど使われてる場合もある。
0423デフォルトの名無しさん
2008/09/03(水) 21:57:2330年前から某有名どころでやってるのを知らない奴がまさかいるとはな
0424デフォルトの名無しさん
2008/09/03(水) 22:43:24ああ、GTKがあったね。
でもそれだって、抽象型とコールバック関数のイベントドリブンってイメージだけど。
(よく知らんけど)
とにかく、>>406 とか ↓これみたいのとか、よくあるCで無理やり系のテクニックって、まじで使ってんのかよって感じ。
http://www.sage-p.com/process/cool.htm#6-2
0425デフォルトの名無しさん
2008/09/03(水) 23:15:210426デフォルトの名無しさん
2008/09/03(水) 23:19:030427デフォルトの名無しさん
2008/09/03(水) 23:21:320428デフォルトの名無しさん
2008/09/03(水) 23:27:430429デフォルトの名無しさん
2008/09/03(水) 23:30:350430デフォルトの名無しさん
2008/09/03(水) 23:33:07APIにいくわ。ホントはC#が一番知りたかったんだけどね
0431デフォルトの名無しさん
2008/09/03(水) 23:35:52もし、そうだとするならプロバイダーを変えなきゃだめだよ。
0432デフォルトの名無しさん
2008/09/03(水) 23:44:190433デフォルトの名無しさん
2008/09/03(水) 23:46:38多分他に原因があるんだとは思うんだけど、IP変えたりしたら繋がる時ってあるじゃん
今後も必要だろうからまずはそのやり方で挑戦してみようと思ったわけです
0434デフォルトの名無しさん
2008/09/03(水) 23:48:340435741
2008/09/03(水) 23:55:21これをポインタに直してみました
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *j;
int i;
j=(char *)malloc(sizeof(char)*100);
gets(j);
for(i=0; *(j+i); i++){
*(j+i)-=32;
}
puts(j);
return 0;
}
0436デフォルトの名無しさん
2008/09/03(水) 23:56:36自宅でLANを構築しているというなら話は別だが
XPならコントロールパネル/ネットワーク接続/ローカルエリア接続/プロパティ
0437デフォルトの名無しさん
2008/09/03(水) 23:57:320438デフォルトの名無しさん
2008/09/03(水) 23:59:28意味ないだろ。
0439デフォルトの名無しさん
2008/09/03(水) 23:59:48全然違うじゃねーか!
0440741
2008/09/04(木) 00:00:05自分でもうまくいって満足です
ですがただ小文字を大文字にしか変換できないので、大文字を小文字にするには+=32なんですが
他の繰り返して入力するのをくめなくて>>329をポインタでやる方法誰か教えてください
0441デフォルトの名無しさん
2008/09/04(木) 00:02:28#include <stdlib.h>
int main(void)
{
char *j;
int i;
j=(char *)malloc(sizeof(char)*100);
gets(j);
for(i=0; *(j+i); i++){
*(j+i)-=32;
*(j+i)+=32;
}
puts(j);
return 0;
}
0442デフォルトの名無しさん
2008/09/04(木) 00:03:510443デフォルトの名無しさん
2008/09/04(木) 00:04:45forの中身を
if (j[i] >= 'A' && j[i] <= 'Z") {
j[i] += 'a' - 'A';
} else if (j[i] >= 'a' && j[i] <= 'z') {
j[i] += 'A' - 'a';
}
に換えるんだ。
0444デフォルトの名無しさん
2008/09/04(木) 00:10:27うまくいってないってヴぁ
0445デフォルトの名無しさん
2008/09/04(木) 01:56:080446デフォルトの名無しさん
2008/09/04(木) 03:07:35明解C言語 入門編という本にある直角三角形を表示する問題です。
#include <stdio.h>
int main(void)
{
int i, j, ln;
printf("何段ですか:");
scanf("%d", &ln);
for ( i = ln ; i > 0 ; i-- ){
for (j = i ; j > 0 ; j-- )
putchar('*');
putchar('\n');
}
return(0);
}
何度やってもコンパイルできないのですが、どこが原因なのか全くわかりません。
ご教示いただけますようお願いします。
0447デフォルトの名無しさん
2008/09/04(木) 03:15:56何を以ってコンパイルできないと判断したの?
その根拠を提示して欲しいな。
0448デフォルトの名無しさん
2008/09/04(木) 03:29:100449デフォルトの名無しさん
2008/09/04(木) 07:42:11プログラムにはまったく問題ない
原因はお前の頭
0450デフォルトの名無しさん
2008/09/04(木) 09:34:53と思ったことはあった
ターゲットの開発環境には Cコンパイラしかなかった ってだけの話で
0451デフォルトの名無しさん
2008/09/04(木) 09:39:150452446
2008/09/04(木) 09:54:35ファイル名を変えたら何の問題もなくコンパイルできました。
お騒がせして申し訳ありませんでした。
0453デフォルトの名無しさん
2008/09/04(木) 11:35:24>πってプログラムでいうとM_PIであらわせる
かどうかは解らない。
0454デフォルトの名無しさん
2008/09/04(木) 11:39:250455デフォルトの名無しさん
2008/09/04(木) 12:06:020456デフォルトの名無しさん
2008/09/04(木) 12:06:43というかCからポインタ−とったらBASIC程度のアプリしかできない悪寒
0457デフォルトの名無しさん
2008/09/04(木) 12:19:14全部ポインタで済ませるというのがC。
0458デフォルトの名無しさん
2008/09/04(木) 12:23:10というか元はアセンブラの延長なんで何もないのが基本でしょ。
それによそのあれこれってのが実はC->C++と進化する過程で
ごてごてくっついただけじゃん。
0459デフォルトの名無しさん
2008/09/04(木) 12:23:18math.hで#ifで定義されてるからね
#if defined __USE_BSD || defined __USE_XOPEN
みたいな
0460741
2008/09/04(木) 13:01:07を配列で改造してみました
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char j[100];
int i;
do{
for(i=0; j[i]; i++){
if(j[i]>='a' && j[i]<='z')
j[i]-=32;
else if(j[i]>='A' && j[i]<='Z')
j[i]+=32;
}
puts(j);
}while(gets(j));
return 0;
}
0461デフォルトの名無しさん
2008/09/04(木) 13:05:420462デフォルトの名無しさん
2008/09/04(木) 13:06:42最初は
j[0]=='\0';
でないと
0463デフォルトの名無しさん
2008/09/04(木) 13:13:260464741
2008/09/04(木) 13:24:43>>462
j[i]!='\0';じゃないんですか? j[i];とも書きますが。
j[0]=='\0';だとiが繰り上がっていかないのでNULL字までいかずに代入できませんi-=32;のように
0465デフォルトの名無しさん
2008/09/04(木) 13:34:17つーか、>460で警告が出ないコンパイラの使い方してるの?
警告くらい出るようにしようや。
0466デフォルトの名無しさん
2008/09/04(木) 13:42:330467デフォルトの名無しさん
2008/09/04(木) 13:50:16>getsは何故禁止なんでしょう?
gets は、渡されたバッファのサイズなんか知る由もないので
'\n' が現れるまではどんなに長い行でも読もうとする。
→所謂、バッファオーバーラン発生。
(fgets だと、バッファの長さを渡すようになってる)
まあ勉強のための短いコードや作り捨てツールじゃ問題に
ならない事が多いけども、使わないよう癖づけといた方がいい。
0468デフォルトの名無しさん
2008/09/04(木) 15:19:12char j[100] = {0};
初期化が必要という話だ
0469デフォルトの名無しさん
2008/09/04(木) 22:25:190470デフォルトの名無しさん
2008/09/04(木) 23:14:300471デフォルトの名無しさん
2008/09/04(木) 23:16:090472デフォルトの名無しさん
2008/09/04(木) 23:16:430473デフォルトの名無しさん
2008/09/04(木) 23:18:02使ってないんじゃないの?
使ってるかもしれんけど、コールされるたびに毎回API呼ぶような実装にはなってないと思う。
0474デフォルトの名無しさん
2008/09/04(木) 23:31:17ヒープ領域の開始アドレスとサイズを取得することと、空
きエリアを管理するテーブルのリストを作ることでmalloc系
は実装されていると思う。
空きエリアの管理にはAPIは必要がない。ヒープ領域の開
始アドレスとサイズを取得するときにAPIを使っているかもしれない。
0475デフォルトの名無しさん
2008/09/05(金) 00:31:27最近のVC++だとmallocは単にHeapAllocを呼ぶようになっている。
やつらにとっちゃ、mallocもHeapAllocも自分んとこで実装するわけだし、
2つも作るのは無駄でしかないんだろう。
0476デフォルトの名無しさん
2008/09/05(金) 03:15:35__FBSDID("$FreeBSD: src/bin/ls/ls.c,v 1.86 2008/04/04 03:57:46 grog Exp $");
って何ですか?
0477デフォルトの名無しさん
2008/09/05(金) 03:24:480478477
2008/09/05(金) 03:33:350479デフォルトの名無しさん
2008/09/05(金) 03:50:02janney:/home/richard$ grep FBSDID /usr/src/sys/dev/pci/pci.c
__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.292.2.7 2006/01/31 14:42:43 imp Exp $");
0480455
2008/09/05(金) 05:12:08先輩も、処理が早くなるから基本的に全部ポインタで作ると言ってました。
ありがとうございます。
0481デフォルトの名無しさん
2008/09/05(金) 05:16:59なーんも理解してなかったか
0482デフォルトの名無しさん
2008/09/05(金) 05:19:35構造体リストとかでも可変の場合は最大で使いそうな数以上を
見越して確保した状態でコンパイルとか
0483デフォルトの名無しさん
2008/09/05(金) 14:50:240484デフォルトの名無しさん
2008/09/05(金) 14:51:300485デフォルトの名無しさん
2008/09/05(金) 14:53:430486デフォルトの名無しさん
2008/09/06(土) 02:38:39>>479
ありがとうございました。
0487デフォルトの名無しさん
2008/09/06(土) 14:07:20回答集が売ってますがあまり評判がよくないようなので
0488デフォルトの名無しさん
2008/09/06(土) 14:10:50K&C って正式名称?
0489デフォルトの名無しさん
2008/09/06(土) 14:14:04あ、K&Rだった。リッチーさん・・・
0490デフォルトの名無しさん
2008/09/06(土) 14:59:04The C Answer Book 2/e
ISBN4-320-02748-5 共立出版
原書:The C Answer Book(Prentice Hall)
C.L.Tondo, S.E.Gimpel 著
矢吹道郎 訳
A5 246頁 本体価格\2,300 1995/07発売
0491デフォルトの名無しさん
2008/09/06(土) 15:44:50for文にはなんで i,j,kがよく使われるの?
アルファベットの半分からってわけでもないし
0492デフォルトの名無しさん
2008/09/06(土) 15:46:53アセンブラの名残かな?
レジスタはよく
ABCDEくらいまで使ったりするので
FGHくらいをあけてIJKあたりがループ用によく使われてる
0493デフォルトの名無しさん
2008/09/06(土) 15:47:44名前がi, j k, ..., nで始まる変数は整数、ほかで始まる変数は実数と決まっていたことに由来する。
0494デフォルトの名無しさん
2008/09/06(土) 15:48:080495デフォルトの名無しさん
2008/09/06(土) 15:50:20ポインタに p,q が用いられるのと同じ
0496デフォルトの名無しさん
2008/09/06(土) 15:51:140497デフォルトの名無しさん
2008/09/06(土) 15:51:170498デフォルトの名無しさん
2008/09/06(土) 15:51:21また嘘を
0499デフォルトの名無しさん
2008/09/06(土) 15:52:38FORTRANが元なのは書いてあるとおり。
0500デフォルトの名無しさん
2008/09/06(土) 15:53:17マシン語のレジスタも
Aがアキュムレーター
Bがベース
とかなんか無理やり付いてるしwww
0501デフォルトの名無しさん
2008/09/06(土) 15:54:410502デフォルトの名無しさん
2008/09/06(土) 16:05:39やっぱメインフレームとかで1行80文字以下みたいなのがあったのが原因?
0503デフォルトの名無しさん
2008/09/06(土) 16:11:13自分も適当になると、iとかjk、使いまくり。
0504デフォルトの名無しさん
2008/09/06(土) 16:11:59ハンガリアンなぞMSでも否定されとる
0505デフォルトの名無しさん
2008/09/06(土) 16:12:26元々は数学の慣例じゃないの?
0506デフォルトの名無しさん
2008/09/06(土) 16:14:12別にループカウンタはiとかjでもいいよ。
0507デフォルトの名無しさん
2008/09/06(土) 16:15:29そうだな。
そもそもスクリーンじゃなかったしな。
0508デフォルトの名無しさん
2008/09/06(土) 16:17:44そだな。
ループ部分はあんまり関係ないしな。
ただ、これが許されるのはへんなソース書かない奴だけにして欲しいww
ループの中がやったら長いとかそういう場合は簡便w
0509デフォルトの名無しさん
2008/09/06(土) 16:19:39これ以外の用途で使うのは簡便
0510デフォルトの名無しさん
2008/09/06(土) 16:23:130511デフォルトの名無しさん
2008/09/06(土) 16:26:490512デフォルトの名無しさん
2008/09/06(土) 16:27:55別に悪いことじゃないと思う。
>>510
全てに於いて、基本は大事よ?
0513デフォルトの名無しさん
2008/09/06(土) 16:28:340514デフォルトの名無しさん
2008/09/06(土) 16:34:050515デフォルトの名無しさん
2008/09/06(土) 16:41:48int sumBody(int n, int m, int sum)
{
if (n > m) return sum;
return sumBody(n + 1, m, sum + n);
}
int sum(int n, int m)
{
return sumBody(n, m, 0);
}
main()
{
int n = sum(10, 20);
printf("%d\n", n);
}
0516デフォルトの名無しさん
2008/09/06(土) 16:43:01日本語でおk
0517デフォルトの名無しさん
2008/09/06(土) 17:00:00再帰なんか分からないだろう
>>514
もっと具体的に
0518デフォルトの名無しさん
2008/09/06(土) 17:02:200519デフォルトの名無しさん
2008/09/06(土) 17:04:110520デフォルトの名無しさん
2008/09/06(土) 17:04:430521デフォルトの名無しさん
2008/09/06(土) 17:06:27エスパーでこんなところか?
int getGoukei() {
int goukei = 0;
int i;
for (i = n; i <= m; i++) {
goukei += i;
}
return goukei;
}
0522デフォルトの名無しさん
2008/09/06(土) 17:15:09int getGoukei(int n, int m) {
にしてやらないとな。
0524デフォルトの名無しさん
2008/09/06(土) 18:40:37(m + n) * (m - n + 1) / 2;
0525デフォルトの名無しさん
2008/09/06(土) 19:38:210526デフォルトの名無しさん
2008/09/06(土) 19:50:550527デフォルトの名無しさん
2008/09/06(土) 19:55:280528514
2008/09/06(土) 20:44:51例えば数字を2つ入力して1つめの数字から2つめの数字までの合計(例えば1から10の合計→55)
を出すような感じにしたいのですができる限り簡潔に書くにはどうすればよいのかと思い質問しました
0529デフォルトの名無しさん
2008/09/06(土) 20:48:19>524
0530デフォルトの名無しさん
2008/09/06(土) 20:49:18って何も考えないでみたら顔文字にみえるなw
0531デフォルトの名無しさん
2008/09/06(土) 20:51:06#include <stdio.h>
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d\n", (m + n) * (n - m + 1) / 2);
return 0;
}
これで満足?
0532デフォルトの名無しさん
2008/09/06(土) 21:23:560533デフォルトの名無しさん
2008/09/06(土) 21:31:21楽して単位とるなとはいわないけど、せめて宿題丸投げスレで聞けよ
0534デフォルトの名無しさん
2008/09/06(土) 22:03:36indexのi。ルーツは数学。iの次だからってj,kも使われる。
0535デフォルトの名無しさん
2008/09/06(土) 22:28:360537デフォルトの名無しさん
2008/09/06(土) 22:32:45旧世代のオッサンが考えたことだ。
理由を探すのも面倒。特に割りとあいまいに処理されるIT関連の擁護とかをみてると。
0538デフォルトの名無しさん
2008/09/06(土) 22:44:040539デフォルトの名無しさん
2008/09/06(土) 22:45:26iがどんな意味何かを考えたことはないの?
それはそれで問題があるだろ。
0540デフォルトの名無しさん
2008/09/06(土) 22:47:00なるほど、同じような書き込みがあったね。スマン。
0541537
2008/09/06(土) 22:52:44すまん
ほかの低級言語でそういうごろあわせみたいな意味を持たせてるのは知ってるから
どうせなんか意味あるんだろうなて放置してる。
0542デフォルトの名無しさん
2008/09/06(土) 22:57:590543デフォルトの名無しさん
2008/09/06(土) 22:58:560544デフォルトの名無しさん
2008/09/06(土) 23:01:550545デフォルトの名無しさん
2008/09/06(土) 23:03:35尤も、見た目の印象は壊滅的に違うが。
0546デフォルトの名無しさん
2008/09/06(土) 23:10:520547デフォルトの名無しさん
2008/09/06(土) 23:14:27これがかけるのは知らんかった
しかしこんな不細工な書き方OKなんだな>コンパイラ
0548デフォルトの名無しさん
2008/09/06(土) 23:16:520549デフォルトの名無しさん
2008/09/06(土) 23:17:190550デフォルトの名無しさん
2008/09/06(土) 23:19:040552デフォルトの名無しさん
2008/09/06(土) 23:38:16ポインタが変数なのに対し、配列名は定数という違いがある。
0553デフォルトの名無しさん
2008/09/07(日) 00:30:420554デフォルトの名無しさん
2008/09/07(日) 00:33:36無知乙
0555デフォルトの名無しさん
2008/09/07(日) 00:35:55a[1]
*(a+1)
が書き方は違うけど等価になるってことでしょ
どっちか片方だけを指して a[1] は糖衣構文だけど *(a+1) は違うとか言わないよね?
0556デフォルトの名無しさん
2008/09/07(日) 00:39:39シンタックスシュガーに対する認識が間違ってる。
0557デフォルトの名無しさん
2008/09/07(日) 00:40:51プログラマーに優しい別の書き方の事
0558デフォルトの名無しさん
2008/09/07(日) 00:41:440559デフォルトの名無しさん
2008/09/07(日) 00:42:400560デフォルトの名無しさん
2008/09/07(日) 00:42:43少なくともリッチーはそういう場合もあると考えたということなんだろう。
0561デフォルトの名無しさん
2008/09/07(日) 00:44:180562デフォルトの名無しさん
2008/09/07(日) 00:46:53そんな奴俺だけで十分だろう
0563デフォルトの名無しさん
2008/09/07(日) 00:48:46じゃあ while は if と goto のシンタックスシュガーになるのか?
気持ち悪いな
0564デフォルトの名無しさん
2008/09/07(日) 00:51:03そうだよ。
0565デフォルトの名無しさん
2008/09/07(日) 00:51:04優しいという感じな気がする
0566デフォルトの名無しさん
2008/09/07(日) 00:54:03表示される数字なんですけど、既に数値なのか、取りあえずテキスト
としての数字なのか、どっちなのでしょうか?
0567デフォルトの名無しさん
2008/09/07(日) 00:55:000568デフォルトの名無しさん
2008/09/07(日) 00:55:17テキストとしての数字です
0569デフォルトの名無しさん
2008/09/07(日) 00:55:29数字です。
0570デフォルトの名無しさん
2008/09/07(日) 00:55:47日本語でおk
0571デフォルトの名無しさん
2008/09/07(日) 00:57:360572デフォルトの名無しさん
2008/09/07(日) 00:57:42それは機械語に置き換わるレベルの話だな
まあ配列がポインター云々も似たような話か
>>566
後者です。
コンパイルする段階で数字などに置き換わります。
0573デフォルトの名無しさん
2008/09/07(日) 01:02:05条件判定式の?
だったらアセンブラにあるよ。
ただ||や&&はない
0574デフォルトの名無しさん
2008/09/07(日) 01:03:40機械語に置き換わるっていうか、実行時にな。
ソースなんだからそりゃテキストだけど、意味的には数値だろ?
>>566が、どういう意図で質問したかで答えは変わるか。
0575デフォルトの名無しさん
2008/09/07(日) 01:09:09エディタで処理する以上テキストという認識でよいのでしょうか?
早速のご回答有難う御座います。少しかじってみたいのですが。
0576デフォルトの名無しさん
2008/09/07(日) 01:10:38自分で書いてるソースをバイナリーエディタで
見てみるとすっきりしますよ。
出てくるコードはアスキーコード表にのってますので
0577デフォルトの名無しさん
2008/09/07(日) 01:17:43本当に初心者で何をそろえようかなというレベルです。
0578デフォルトの名無しさん
2008/09/07(日) 01:21:30状況によってどちらが糖衣構文になるかは変化すると考えてよい?
#include<stdio.h>
void swap_char(char *a, char *b){ // 実装は気にしないでね
char c;
c=*a; *a=*b; *b=c;
}
void swap_string(char *a, char *b){ // 実装は気にしないでね
int flag;
for(flag=0;flag!=3;a++,b++){
swap_char(a, b);
flag|=(*a=='\0')|((*b=='\0')*2);
}
}
int main(void){
char a[10]="foo", b[10]="bar";
printf("%s %s\n", a, b);
swap_string(a, b); // これは swap_string(&a[0], &b[0]); の糖衣構文
printf("%s %s\n", a, b);
swap_char(&a[0], &b[0]); // これは swap_char(a, b); の糖衣構文
printf("%s %s\n", a, b);
return 0;
}
0579デフォルトの名無しさん
2008/09/07(日) 01:26:530580デフォルトの名無しさん
2008/09/07(日) 01:29:470581デフォルトの名無しさん
2008/09/07(日) 03:14:20「シンタックス」 シュガーだろ。
「セマンティクス」シュガーじゃねーよ。
0582デフォルトの名無しさん
2008/09/07(日) 03:48:480583デフォルトの名無しさん
2008/09/07(日) 03:53:05ですが専門的過ぎて)等ありますか。やはり情報処理試験とかある
程度基本的な資格取りに専念した方がいいのでしょうか?
質問ばかりでスミマセン。
0584デフォルトの名無しさん
2008/09/07(日) 04:02:500585デフォルトの名無しさん
2008/09/07(日) 04:27:11指定してされたコマンドに標準入力にデータを投入し、
そのコマンドの出力結果を取得する popenの双方向版 のような
関数を作ろうとしております。
具体的には、
--
指定したコマンドを子プロセスで実行させる。
子プロセスで実行するコマンドの入力は、親から子へのパイプを通して渡し、
コマンドの出力は、子から親へのパイプを通して渡す。
--
のようになります。
このとき、指定したコマンドが
「標準入力を全て read してから標準出力に writeする」
仕様だと問題ないのですが、(sort 等)
「標準入力から read -> 標準出力に write」
を交互に繰り返す仕様の場合、(cat 等)デッドロックが掛かってしまいます。
write ("親から子へのパイプ", buf, bufsize); << ここで止まる。
「標準入力から read -> 標準出力に write」 の場合でも
指定するコマンドの読み書きの仕方/バッファリングの仕方に関係なく
親プログラム側でデッドロックがかからなくする方法を知りませんでしょうか?
0586585
2008/09/07(日) 04:29:07--<コマンド例>----------
OKの場合:
while(..read(..)..){
}
// 全て読んでから
write(..);
デッドロックがかかる場合:
while(..read(..)..){
// 読みながら書き込み
write(..);
}
--
0587デフォルトの名無しさん
2008/09/07(日) 04:34:15と言われたことがあって、とりあえず基本から始めて、向いていそう
だったら、いろいろなアルゴリズムにも手を出してみようかと。
少しあまいかもしれませんが、基本的には好奇心です。仕事などでは
Office製品しか使ってません。(あと業務用のパッケージ)
ポインタが難しいとかよく聞きますが
ポインタ=アドレス?それともポインタとはアドレスを扱う変数?
そもそもその辺がちょっとした本を見てもいま一つの感じです。
0588デフォルトの名無しさん
2008/09/07(日) 06:05:53シグナル
wait3()
共有メモリ
あたりは知ってる?
0589デフォルトの名無しさん
2008/09/07(日) 06:33:04先ずは、社会常識と日本語を学ぶことから始めると宜しいかと。
0590585
2008/09/07(日) 07:24:58漠然としてて答えにくいですが、知っているつもりです。
select 関数で 読み/書きそれぞれのパイプ(実際にはディスクリプタ)を
監視して、状態の変更に合わせて読み書きすればできるのでしょうか?
ちょっと調べてみます。
0591デフォルトの名無しさん
2008/09/07(日) 08:14:480592デフォルトの名無しさん
2008/09/07(日) 08:55:49基本的な操作ができること
どういう意味?
0593デフォルトの名無しさん
2008/09/07(日) 09:36:17マ板に逝け。
0594デフォルトの名無しさん
2008/09/07(日) 10:22:500595デフォルトの名無しさん
2008/09/07(日) 14:49:55というプログラムなんですが、#define buff_sizeのサイズによって、出力したファイルが化けるのですが原因はなんでしょうか。以下ソースです。
#include<stdio.h>
#include<string.h>
#define buff_size 2
char g_buffer[buff_size]; char strafter[buff_size]; int subrtn1();
int main(){
FILE *fp; FILE *result;
fp = fopen("sample.csv", "rt");
if ( !fp ){
printf("ファイルオープンエラー\n");
return;
}
result = fopen("result", "w");
while( fgets( g_buffer, buff_size, fp ) != '\0' ){
*strafter = subrtn1(g_buffer);
if ( EOF == fprintf(result, strafter) )
printf("ファイル書き込みエラー\n");
}
fclose(fp); fclose(result);
return ;
}
int subrtn1(){
int i = 0;
while ( g_buffer[i] != '\0' )
{
strafter[i] = ( g_buffer[i] == ',' ) ? '\t' : g_buffer[i];
++i;
}
return *strafter;
}
0596595
2008/09/07(日) 14:52:22読み込むファイルは行ごとに文字数がバラバラです。
調べたけれど、原因がほんとに理解できないorz
0597デフォルトの名無しさん
2008/09/07(日) 14:53:210598595
2008/09/07(日) 14:58:08OS:Linux Fedora8
コンパイラ:gcc (バージョン失念しました。Fedora8インストールの際に入れたものです。
0599デフォルトの名無しさん
2008/09/07(日) 15:02:280600デフォルトの名無しさん
2008/09/07(日) 15:06:16S-JISならTABは問題ないとおもうけど
0601デフォルトの名無しさん
2008/09/07(日) 15:07:020602デフォルトの名無しさん
2008/09/07(日) 15:17:07>>595にあるようなfopen("sample.csv", "rt");
のtはどういう意味なんでしょうか
manでfopenを見てもありません
0603デフォルトの名無しさん
2008/09/07(日) 15:17:31このソースだと2バイトしか読めないぞ
0604デフォルトの名無しさん
2008/09/07(日) 15:18:49b バイナリー
だったかな
0605デフォルトの名無しさん
2008/09/07(日) 15:22:52これって普通に使う手法でしょうか?
たとえば、こんな感じですが
char* rPtr = &src_data[0]; ←読むデータのポインタ
val = *rPtr; ←1バイト分コピーする
rPtr +=sizeof(char);
sizeofが、コンパイル時時に定数に置き換えられれば良いけど、
プログラム実行時に毎回引数の型のサイズを見てたら、
無駄に処理が重くなるんじゃない?と疑問に思ったりと。
0606デフォルトの名無しさん
2008/09/07(日) 15:26:01char*をint*にしたらどうなると思う?
0607595
2008/09/07(日) 15:26:23行によってマチマチなんですが、おおよそ1行で150文字くらいですね。
#define buff_size 2 となっているのは暫定で適当につけたものです。
とにかく出力さえ、うまくできれば・・・と思っていますorz
0608デフォルトの名無しさん
2008/09/07(日) 15:28:00見ない
それにCでコンパイルすればどっちみ機械語に変換する場合に
型ごとのサイズでポインタが加算されてる。
int型のポインターを+1すると、おおよその環境は+4バイト
short型はポインターを+1すると、+2バイト
Cで型についてうるさいのはこういうことをコンパイラがわからないと困るから。
0609デフォルトの名無しさん
2008/09/07(日) 15:28:42ほんとにそんなコード時折見るのか?
指してるサイズ分すすめるのは+1だぞ?
0610デフォルトの名無しさん
2008/09/07(日) 15:29:03fgetでrtだと一行まるまるよまれるからそのままだと2バイトしか読まないので
バッファサイズを256にでもしておけば?
0611デフォルトの名無しさん
2008/09/07(日) 15:34:13ありがとうございます
0612デフォルトの名無しさん
2008/09/07(日) 15:38:20レスありがとうございます。
最近、外注先かの納入物で見ます。
val = *rPtr;
rPtr +=sizeof(char);
↓
val = *rPtr++;
と個人的には書きたいんだけど・・・問題あるのかしら?と悶々としてたり
ちなみに通信系のコードなので、1バイト境界での読み込みしかしませんので、
常にchar*を使用します、int*は使わないです。
intは、2byteか4byte長になるかの機種依存性ありますし・・・。
0613595
2008/09/07(日) 15:39:17バッファサイズは3,4,8,16・・・128,256,512,1024など色々試したんですが
いずれも化けるか、おかしな改行が入ったりする状況です。
違う関数のほうがいいのだろうか
0614デフォルトの名無しさん
2008/09/07(日) 15:43:20VC++独自だから忘れていい。
604の言う通りだが、通常はbを指定しないことでテキストモードを表す。
0615デフォルトの名無しさん
2008/09/07(日) 15:43:520616デフォルトの名無しさん
2008/09/07(日) 15:46:11その例のrPtrは char型のポインタなんで別にsizeof(char)しなくてもOK
>>613
ごめんロジック全部はちゃんとみてないけど
なんかそっちで失敗してると思う。
関数にバッファの中身を処理させてるけど
関数を使う必要がなければもっと簡単にできるはず。
それに
1)g_bufferをクリア
2)g_bufferへ1行読み込み
3)そのまま中身書き換え
4)終わったら出力
これでいいとおもうけど
なんかその処理をみてると2つのバッファ間でへんなことやってるきがする。
あと上の手順はCSVファイルがS-JISだったらOKだけどほかの文字コードは検証してないw
0617デフォルトの名無しさん
2008/09/07(日) 15:48:39なるほど
どうりでmanに載っていないわけです
ありがとうございました
0618デフォルトの名無しさん
2008/09/07(日) 15:53:33それもくさいな。
fgetって改行コードって全部のOSの分みてくれないんだっけ?
3パターンくらいあったよね?
0619デフォルトの名無しさん
2008/09/07(日) 15:57:230620618
2008/09/07(日) 15:59:36テキストモードで1行単位で読むと遅いのでバイナリーモードで
メモリにあげて自前でやってたから気にしてなかったわ。
じゃあロジックの問題か
0621デフォルトの名無しさん
2008/09/07(日) 16:00:18> > > ものすごくいいよ。
> > > 「アルゴリズム」っていうヘッダまである。
> > > ということでソートなどは覚える必要なくなったよ。
とか言ってる奴がいるんだが大丈夫なのか?覚えなくても
0622デフォルトの名無しさん
2008/09/07(日) 16:03:24すれ違い
0623デフォルトの名無しさん
2008/09/07(日) 16:04:21すまん
0624デフォルトの名無しさん
2008/09/07(日) 16:05:01そもそもそういうのがない言語だったとしても、
ググって見つけたコードを書き換えるだけだから、
C++に限らず覚える必要はないと思う、理解さえできていれば。
ちなみに、Cにもqsortがあるよ。
0625デフォルトの名無しさん
2008/09/07(日) 16:18:10ソートされてない配列に対してbsearch呼んで
「これライブラリのバグじゃないスかねぇ?」
とか抜かしたウチの新人の様になるので気をつけてください
0626デフォルトの名無しさん
2008/09/07(日) 16:24:21>>595
>>while( fgets( g_buffer, buff_size, fp ) != '\0' ){
→g_bufferは各ループ毎に初期化した方が良いと思う
ちなみにfgetsは読み込んだ文字列の終端に
改行コードを勝手に付けたと思うので仕様を確認してみてはどうでしょう?
>>*strafter = subrtn1(g_buffer);
→strafterも同様に初期化してから文字列を格納している?か確認要かと
>>if ( EOF == fprintf(result, strafter) )
>>printf("ファイル書き込みエラー\n");
→エラーだけど、while抜けなくて良い?
コードを、ざっと見て気になりました。
0627デフォルトの名無しさん
2008/09/07(日) 16:26:31サンクス
0628595
2008/09/07(日) 16:44:31>>615氏
ファイル自体はWindowsで作ったものなんで、CRLFになっているはずですね。
改行コードの処理ちゃんとせないかんですねorz
>>616氏
バッファの初期化は確かにやってなかったですねorz
ロジック含めてもう一度見直します。
>>626氏
fgetsはNULLを追加するみたいです。
初期化はやっぱりしてませんでした。その辺の処理きちんとしときます。
while抜ける処理も書いてないですね確かにorz
0629デフォルトの名無しさん
2008/09/07(日) 16:46:030630デフォルトの名無しさん
2008/09/07(日) 17:02:35たぶんその外注先がヘボ
0631デフォルトの名無しさん
2008/09/07(日) 17:07:23NULLを追加するんじゃなくてエラーが起きたかEOFに達したときはNULLを返す、だろ
0632デフォルトの名無しさん
2008/09/07(日) 17:13:40628の言っているNULLは\0のことだと思う。
0633デフォルトの名無しさん
2008/09/07(日) 17:18:170634デフォルトの名無しさん
2008/09/07(日) 17:20:24・returnは値を返せ
・resultのfopenもチェックしろ
・fgetsの戻り値はchar*
0635デフォルトの名無しさん
2008/09/07(日) 17:24:020636デフォルトの名無しさん
2008/09/07(日) 17:25:02・グローバル変数は使うな。
・入力を再利用しないのなら、入力バッファと出力バッファを分ける必要は無い。
・','を探すのは、標準関数を使おう。
・えらーちぇっくするなら、fprintf()だけでなく(出力の)fclose()もエラーチェックすべき。
・勿論、>634の指摘したとおりfopen()も。
・型について、もう少し慎重にチェックすること。
・コンパイラは最低限の警告くらい出すようにしよう。
# 例えばgccなら gcc -Wall ...
0637デフォルトの名無しさん
2008/09/07(日) 17:26:02Cではプロトタイプと引数が食い違っててもコンパイルはできるよ
0638デフォルトの名無しさん
2008/09/07(日) 17:26:490639デフォルトの名無しさん
2008/09/07(日) 17:29:090640デフォルトの名無しさん
2008/09/07(日) 17:33:58クローズチェックはやってないけど
#include<stdio.h>
#include<string.h>
#define buff_size 1024
char buffer[buff_size];
int main(){
FILE *fp; FILE *result;
int i;
fp = fopen("sample.csv", "rt");
result = fopen("result", "w");
if ( !fp || !result ){
printf("ファイルオープンエラー\n");
return -1;
}
while( fgets( buffer, buff_size, fp ) ){
for ( i=0 ; buffer[i] ; i++ ){
/* ASCIIしか考慮してないが */
if( buffer[i] == ',' )
buffer[i] = '\t';
}
if ( EOF == fprintf(result, "%s", strafter) ){
printf("ファイル書き込みエラー\n");
return -1;
}
}
fclose(fp); fclose(result);
return 0;
}
0641デフォルトの名無しさん
2008/09/07(日) 17:36:52・fputs()を使わない訳は?
・strchr()を使わない訳は?
・main()で-1を返す訳は?
0642デフォルトの名無しさん
2008/09/07(日) 17:38:55・strchr()を使わない訳は? 特に無い
・main()で-1を返す訳は? 特に無い
0643641
2008/09/07(日) 17:40:350644デフォルトの名無しさん
2008/09/07(日) 17:41:390645デフォルトの名無しさん
2008/09/07(日) 17:44:270646デフォルトの名無しさん
2008/09/07(日) 17:44:290647641
2008/09/07(日) 17:47:02×int main(){return -1;}
○int main(){return 0;}
◎int main(){return EXIT_FAILURE;}
0648641
2008/09/07(日) 17:48:330649デフォルトの名無しさん
2008/09/07(日) 18:27:47returnでは何故か使わない…
考えたら変な癖だな
0650デフォルトの名無しさん
2008/09/07(日) 19:07:14使わないけど
0651デフォルトの名無しさん
2008/09/07(日) 19:09:33**って、なに?
ポインタのポインタ?
0652デフォルトの名無しさん
2008/09/07(日) 19:13:370653デフォルトの名無しさん
2008/09/07(日) 20:13:10unsigned char status:4;
のような宣言を見つけたのですが、:4はどのような意味があるのでしょうか。
0654デフォルトの名無しさん
2008/09/07(日) 20:22:12>>fp = fopen("sample.csv", "rt");
>>result = fopen("result", "w");
>>if ( !fp || !result ){
>>printf("ファイルオープンエラー\n");
>>return -1;
>>}
別にプロセスが終わってしまうからreturnしても問題は発生しないだろうけど、
fopen出来たものはfcloseする癖をつけたほうが良いですよ。
mallocとFreeみたいに。
>>if ( EOF == fprintf(result, "%s", strafter) )・・も。
1つの関数内でreturnを散逸させるのは控えた方が良い。
0655デフォルトの名無しさん
2008/09/07(日) 20:57:59char**は、char*を指すポインタ
>>652
まだバッファに残ってたデータがディスクフルとかで書き込めなかったときにわかるんじゃない?たぶん
>>653
ビットフィールド
0656デフォルトの名無しさん
2008/09/07(日) 21:00:55ストリーム出力はバッファリングされるので、fprintf()で全てが出力されるわけではない。
バッファに残っている分は、fclose()によって出力(フラッシュ)される。
従って、(最早殆ど意識する必要が無いとはいえ)最後の最後にディスクフルになって書けないかも知れない。
それを検出するためには、書き込み後のfclose()の戻り値はチェックしておく習慣をつけることが望ましい。
逆に、入力後のfclose()は通常エラーを起こすとは考え難いので省略してしまうことが多い。
0657デフォルトの名無しさん
2008/09/07(日) 21:02:370658デフォルトの名無しさん
2008/09/07(日) 21:17:350659デフォルトの名無しさん
2008/09/07(日) 21:18:170660デフォルトの名無しさん
2008/09/07(日) 21:22:38Cも使えるんですか?
0661デフォルトの名無しさん
2008/09/07(日) 21:23:55大丈夫だMSを信じろ
0662デフォルトの名無しさん
2008/09/07(日) 21:25:37ググってみたんですがC非対応と…
信じて良いですか?
0663デフォルトの名無しさん
2008/09/07(日) 21:28:16でも、一般的に用いられているC89-C95には対応しているから大丈夫。
ファイルの拡張子やオプションでCとC++から選べるようになっている。
0664デフォルトの名無しさん
2008/09/07(日) 21:30:12MS以外のライブラリもたくさんだし、安定度も速度も一級品。
0665デフォルトの名無しさん
2008/09/07(日) 22:22:52a[1]<-b[1],b[2],b[3]・・・・・b[10]
a[2]<-c[1],c[2],c[3]・・・・・c[10]
a[3]<-d[1],d[2],d[3]・・・・・d[10]
のように、配列aに各bcdのポインタの頭を格納したいんだ。
こういうときは、
*&a[1] = b
*&a[2] = c
*&a[3] = d
でいいのかな。
0666デフォルトの名無しさん
2008/09/07(日) 22:25:54a[0]=b
a[1]=c
a[2]=d
0667デフォルトの名無しさん
2008/09/07(日) 22:28:14面白いけど
a[1]=b;
でダメな理由が分からない
0668デフォルトの名無しさん
2008/09/07(日) 22:30:151)a[0]=bを実行
a[0]=b
a[1]=不定
a[2]=不定
2)a[1]=cを実行
a[0]=c
a[1]=c
a[2]=不定
2)a[2]=dを実行
a[0]=d
a[1]=d
a[2]=d
ってなるんだお。意味不・・・
0669デフォルトの名無しさん
2008/09/07(日) 22:33:560670デフォルトの名無しさん
2008/09/07(日) 22:41:37正確には、
/*宣言*/
struct kata* featlist[MAX_FEATURES];
struct kata* tempfeat;
tempfeat = new kata[MAX_FEATURES];
/*操作*/
for(i=0,i<10,i++)){
//tempfeatに何らかの操作を施す
featlist[i] = tempfeat
}
という風にしているんだけど、688のようなことが起こるわけ
1)featlist[0]=bを実行
featlist[0]=b
featlist[1]=不定
featlist[2]=不定
2)featlist[1]=cを実行
featlist[0]=c
featlist[1]=c
featlist[2]=不定
3)featlist[2]=dを実行
featlist[0]=d
featlist[1]=d
featlist[2]=d
ウマーーー!!!!!
0671デフォルトの名無しさん
2008/09/07(日) 22:44:32forの中で毎回宣言しなくちゃならんのかな?
0672デフォルトの名無しさん
2008/09/07(日) 22:47:37C言語にnewなんてあったっけ・・・?
0673デフォルトの名無しさん
2008/09/07(日) 22:48:550674デフォルトの名無しさん
2008/09/07(日) 22:50:18for内で毎回領域確保しないといけないんだな。
ありがとう。
0675デフォルトの名無しさん
2008/09/07(日) 22:51:410676デフォルトの名無しさん
2008/09/07(日) 23:08:50featlist[i] = new kata[MAX_FEATURES];
}
0677デフォルトの名無しさん
2008/09/07(日) 23:12:180678デフォルトの名無しさん
2008/09/07(日) 23:27:430680デフォルトの名無しさん
2008/09/07(日) 23:38:230681デフォルトの名無しさん
2008/09/08(月) 00:02:130682デフォルトの名無しさん
2008/09/08(月) 00:29:32C言語を学ぶならコンパイルがないと始まらない、と説明書で読んだのでVisual C++ 6を使いたいのですが
(これコンパイラですよね?)フリーソフトかどうかわかりません。どういう意味でしょうか?
0683デフォルトの名無しさん
2008/09/08(月) 00:31:16とりあえず Visual C++ 2008 Express Edition 落としてこれば問題ない
0684デフォルトの名無しさん
2008/09/08(月) 00:31:36VC++2008 ExpressEditionで
0685デフォルトの名無しさん
2008/09/08(月) 01:04:53VC++で1つのプロジェクトに複数の.cppファイルを作ったとき
ビルド→実行で全体のプログラム?を実行することはできますがプロジェクトの中にあるうちの
1つだけの.cppファイルを実行したいときはどうすればよいのでしょうか?
0686デフォルトの名無しさん
2008/09/08(月) 01:06:19関数の動作チェックがしたいんかい?
0687デフォルトの名無しさん
2008/09/08(月) 01:09:12関数1
{
2を呼び出し
3を呼び出し
4を呼び出し
}
みたいな感じのときに1(全体)ではなく2、3、4単体の動作チェックを行いたいです
0688デフォルトの名無しさん
2008/09/08(月) 01:26:070689デフォルトの名無しさん
2008/09/08(月) 01:33:10{
2を呼び出し
/*3を呼び出し*/
/*4を呼び出し*/
}
0690デフォルトの名無しさん
2008/09/08(月) 01:36:36テスト用のmain関数を作る。
当然別プロジェクトでテスト対象の関数の.cファイルは同一。
0691デフォルトの名無しさん
2008/09/08(月) 14:00:05int main(void){
printf("hello");
}
「14歳から始めるわくわくゲームプログラム」
と言う本にあったサンプルプログラムなのですが、エラーが出てしまって全く先に進みません。
ボーランド製のC言語です。
0692デフォルトの名無しさん
2008/09/08(月) 14:01:16エラーの種類は?
0693デフォルトの名無しさん
2008/09/08(月) 14:02:35環境設定をやってなくて、xxx.objが見つからないとかいうエラーじゃないの?
0694デフォルトの名無しさん
2008/09/08(月) 14:03:120695デフォルトの名無しさん
2008/09/08(月) 14:05:200696デフォルトの名無しさん
2008/09/08(月) 14:06:18Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照
です
0697デフォルトの名無しさん
2008/09/08(月) 14:06:33そんな変なタイトルの本、ほんとにあるのか?w
0698デフォルトの名無しさん
2008/09/08(月) 14:06:470699デフォルトの名無しさん
2008/09/08(月) 14:07:06話はそれからだ。
0700デフォルトの名無しさん
2008/09/08(月) 14:07:55尼で見た記憶がw
0701デフォルトの名無しさん
2008/09/08(月) 14:08:580702デフォルトの名無しさん
2008/09/08(月) 14:09:35姉妹品に、「15歳からはじめるDirectX9 3Dゲームプログラミング」というのもあった。
0703デフォルトの名無しさん
2008/09/08(月) 14:11:27読んだのか?最初から。
読んでもしそういうのが無ければその本返品しろw
0704デフォルトの名無しさん
2008/09/08(月) 14:16:03質問者はエラーの出たソースをそのままコピペしたか?
0705デフォルトの名無しさん
2008/09/08(月) 14:23:25Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
** error 1 ** deleting Debug\renshuu.exe
です
初期設定は本に書いてある通りに行ってます。
0706デフォルトの名無しさん
2008/09/08(月) 14:24:35コピペしたか気にしてるのは>>691のほうだよ。
0707デフォルトの名無しさん
2008/09/08(月) 14:41:29>>688-691
ありがとうございました
0708デフォルトの名無しさん
2008/09/08(月) 14:41:53サンプルファイルでそのままフォルダにあったものをコピペしてます。
0709デフォルトの名無しさん
2008/09/08(月) 14:43:44その本のどこかに訂正を書いてあるページとかない?
なければゴミシリーズ決定だな>その出版社の本
0710デフォルトの名無しさん
2008/09/08(月) 14:47:47いろいろやってたら動くようになりました。
どうもありがとうございます。
0711デフォルトの名無しさん
2008/09/08(月) 14:59:510712デフォルトの名無しさん
2008/09/08(月) 15:00:330713デフォルトの名無しさん
2008/09/08(月) 16:50:350714デフォルトの名無しさん
2008/09/08(月) 17:45:010715デフォルトの名無しさん
2008/09/08(月) 21:22:58アドレスと変数の中身ってよくメモリの番号とバイト数の関係で説明されるけど
変数がその変数の中身を指してるって事実はどう処理されてるんですか?
0716デフォルトの名無しさん
2008/09/08(月) 21:25:470717デフォルトの名無しさん
2008/09/08(月) 21:26:36どう処理って何が聞きたいの?俺は100%説明できると思うよ。
0718デフォルトの名無しさん
2008/09/08(月) 21:30:04ポインタの場合はプログラムが把握している番地の領域にさらにメモリの番地が入ってる
0719デフォルトの名無しさん
2008/09/08(月) 21:34:14static int x, y;
とかって変数があったら、コンパイルの段階で、nは100番地に置くとか、xは104番地に置くとか決めてる。
0720デフォルトの名無しさん
2008/09/08(月) 21:40:110721715
2008/09/08(月) 21:41:27アドレスが連番ってことももちろんわかります、その変数の中身が型のバイト数以内だから変数の中身もわかる
と思うんですが、それをどうやってaとか変数名と結び付けてあるのかがわかりません
0722717
2008/09/08(月) 21:41:39番地だけじゃない。暗黙のうちに、番地の先にあるオブジェクトのサイズが
包含されてるんだよ。ポインタに演算かけりゃすぐわかるだろ。
Cでさえこれなのに、C++になると頭が破裂しそうに…
0723デフォルトの名無しさん
2008/09/08(月) 21:48:31結びつけるっていうか、コンパイラが覚えてるだけだよ。
nという変数を100という番地に置くと決めて、
n = 3;
というコードがあったら、
mov [100], 3
というアセンブラのコードに置き換えるだけ。
0724デフォルトの名無しさん
2008/09/08(月) 21:49:07結び付けるも何もコンパイルしたらCの場合はaに該当する
格納先は何らかの形で確保されるけどaなんて表記はないよ。
つーかその辺理解したかったらアセンブラか機械語やらないと無理。
それにそもそもアセンブラや機械語では開発効率が悪いので
Cでそういう配置先とかを意識しなくてよくしたのに
それを理解云々って変なところにこだわりすぎ。
0725デフォルトの名無しさん
2008/09/08(月) 21:53:48マシン語では、データはすべてアドレスで持ってる。
0726デフォルトの名無しさん
2008/09/08(月) 21:54:09はぁ?ポインタに格納してるのはアドレスだけだろ?
お前がいってるのはポインタの型じゃん
0727デフォルトの名無しさん
2008/09/08(月) 21:58:31だなあ。
バイナリーをCソースには戻せないもんな。
アセンブラのソースにはできるが。
なので
Cソース->バイナリの結びつけはなんとか可能だが
その逆はできないし、そもそも必要性を感じない。
仕事でそんなところ詰まってるとすぐ切られるぞ
0728デフォルトの名無しさん
2008/09/08(月) 22:02:33型によってポインタの内部表現の種類が違うかもしれない程度かな
規格上は型を持っていてもかまわないんだろうけどそんなコンパイラあるとは思われない
0729715
2008/09/08(月) 22:03:17配列だとaが先頭のアドレスをさすのに
intだとaは変数の中身しか指さないとか理屈的におかしいな〜と思ったわけ
その場合左がポインタだと=の意味が変わることになるのも整合性がないし・・・と
0730デフォルトの名無しさん
2008/09/08(月) 22:05:550731デフォルトの名無しさん
2008/09/08(月) 22:07:45アセンブラレベルでみれば、どっちもさほどコードはかわらん。
配列の先頭のみに限ればだけど。
0732デフォルトの名無しさん
2008/09/08(月) 22:08:04違う
配列名は本当は配列そのものを意味する
ただしいくつかの例外を除いて先頭要素へのポインタに変換される
0733デフォルトの名無しさん
2008/09/08(月) 22:08:56逆だ
配列名が先頭アドレスで
&配列名が配列へのアドレスだ
sizeofは例外
0734デフォルトの名無しさん
2008/09/08(月) 22:09:18C言語がやってることというのはコンパイラがやってることを含むから
0735デフォルトの名無しさん
2008/09/08(月) 22:09:200736デフォルトの名無しさん
2008/09/08(月) 22:09:35演算してみるのがおすすめ
0737デフォルトの名無しさん
2008/09/08(月) 22:11:02違う。
配列名はアドレスではない、ポインタに変換されるだけ。
というかアドレスとポインタの区別はつけようね。>>734も言ってるけど。
0738715
2008/09/08(月) 22:17:20よくあるメモリの中身と周りに変数名、アドレスが載ってる図じゃ説明できないでしょ
0739デフォルトの名無しさん
2008/09/08(月) 22:17:50|(3つの 例外を除いて)配列の最初の要素を指すポインタに意味が格下げになる。
|結果としてできるポインタの型は「Tへのポインタ」となる。
|3つの例外とは、配列がsizeofのオペランドとなるとき、&のオペランドとなるとき、
|charの配列を文字列リテラルで初期化するとき、を指す。
とまあ規格ではこうなっている
ポインタに変換されないことは例外だが、一方でそれが本来の意味だということ
0740デフォルトの名無しさん
2008/09/08(月) 22:19:03だから特別な約束事があるんだってば。
0741デフォルトの名無しさん
2008/09/08(月) 22:20:42配列がアドレスになるのはおかしいだのなんだの
もうわかってて荒らしてるとか思われん
0742デフォルトの名無しさん
2008/09/08(月) 22:21:09あくまで指すもの=ポインタ
として理解しないと
0743デフォルトの名無しさん
2008/09/08(月) 22:22:37そうすればあるときはポインタに格下げとか言われてる意味がわかるから。
C使う以上はそんなの気にしてられねえよ。
なんのためのCだよ。
0744デフォルトの名無しさん
2008/09/08(月) 22:24:21相手して損した。
0746デフォルトの名無しさん
2008/09/08(月) 22:42:26勿論int * p = & a;としてしまうと、その時点で割り当てられることが確定するわけだが。
0747デフォルトの名無しさん
2008/09/08(月) 22:45:25まーなー
コンパイラがレジスタでいけるやんって判断したら
メモリ上には存在しないし。
0748デフォルトの名無しさん
2008/09/08(月) 22:45:36うそつくなよ。
0749デフォルトの名無しさん
2008/09/08(月) 22:50:320750デフォルトの名無しさん
2008/09/08(月) 22:54:02ややこしくすんなw
0751デフォルトの名無しさん
2008/09/08(月) 22:55:240752デフォルトの名無しさん
2008/09/08(月) 23:08:320753デフォルトの名無しさん
2008/09/09(火) 20:30:18linux の centosでgccの3.46です
0754デフォルトの名無しさん
2008/09/09(火) 21:02:38そこにないってことは実装されていない?
0755デフォルトの名無しさん
2008/09/09(火) 21:03:390756デフォルトの名無しさん
2008/09/09(火) 21:33:220757デフォルトの名無しさん
2008/09/09(火) 22:12:350758デフォルトの名無しさん
2008/09/09(火) 23:27:47grep pclose /usr/include/*.h /usr/include/sys/*.h
0759デフォルトの名無しさん
2008/09/09(火) 23:37:560760デフォルトの名無しさん
2008/09/09(火) 23:43:58static を外す
定義しているファイルを include する
関数を使ってアクセスする
アドレスを貰って操作する
等
0761デフォルトの名無しさん
2008/09/09(火) 23:51:16static int a
これを
// file; a.c
int a;
// file; b.c
extern int a;
※extern int a;をヘッダーファイルに記述して、そのヘッダーファイルを
includeしてもよい。(この方法の方がベター)
0762デフォルトの名無しさん
2008/09/09(火) 23:58:58レスありがとうございます
関数を使ってアクセスするとは具体的にどのようにやるのか教えていただけないでしょうか?
0763デフォルトの名無しさん
2008/09/10(水) 00:13:49static int a;
int getA() {return a;}
// file a.h
int getA(void);
// file b.c
#include "a.h"
0764デフォルトの名無しさん
2008/09/10(水) 03:22:45popen()はあるし使えるんですよ、
stdio.hを直接見るとに関数宣言はちゃんとあるのに
なぜか暗黙の型宣言といわれてしまいますが(popen()で)
>>755
だからCentOSですってwちなみに4の最終です
>>757
pclose()を使おうとした場合
プロトタイプ宣言がないことで出る警告だけでなく
本体がが見当たらないというほうのエラーもでてるので
libcに無いみたいです
>>758
stdio.hに
見たらプロトタイプ宣言はありました
でもなぜかincludeしてるのに関数の宣言がされてない警告が出てしまいますが
無さそうそうなので諦めて作ることにします、皆さんありがとうございました
0765デフォルトの名無しさん
2008/09/10(水) 04:04:17__STRICT_ANSI__のマクロが定義されているとstdio.hの中のpopen, ocloseのプロトタイプ宣言
は#ifndef __STRICT_ANSI__で展開されない。
> ISO 標準の C。 gcc(1) を -std=c99 や -ansi などのフラグを付けて起動した場合、
> このマクロは暗黙のうちに定義される。
0766デフォルトの名無しさん
2008/09/10(水) 07:43:36ありがとうごさいます、やってみます
0767デフォルトの名無しさん
2008/09/10(水) 12:15:55あれってたまに便利じゃね?
0768デフォルトの名無しさん
2008/09/10(水) 12:23:24なんで使うなと言われるのか、くらいはググっとけ。
0769デフォルトの名無しさん
2008/09/10(水) 12:50:100770デフォルトの名無しさん
2008/09/10(水) 13:11:37そうだね
0771デフォルトの名無しさん
2008/09/10(水) 13:13:560772デフォルトの名無しさん
2008/09/10(水) 13:15:19BASICやってたころは使ってたが今はとてもじゃないが使えんわ。
ただチューニングでどうしても関数呼び出しを減らしたい場合は
インライン展開できない部分はgotoにしたりするなあ。
0773デフォルトの名無しさん
2008/09/10(水) 13:15:24にするといっぱい使いたくなるよ
0774デフォルトの名無しさん
2008/09/10(水) 13:22:230775デフォルトの名無しさん
2008/09/10(水) 18:59:420776デフォルトの名無しさん
2008/09/10(水) 19:29:390777デフォルトの名無しさん
2008/09/10(水) 19:30:52コンパイラを換えるべき。
0778デフォルトの名無しさん
2008/09/10(水) 19:41:280779デフォルトの名無しさん
2008/09/10(水) 19:55:500780デフォルトの名無しさん
2008/09/10(水) 20:01:110781デフォルトの名無しさん
2008/09/10(水) 20:06:28gcc で-O3にして最適化させてみたけど、予定してたよりサイズ増えなかったんだよね。
つまり期待以上の最適化はやってないことかな?
0782デフォルトの名無しさん
2008/09/10(水) 21:37:030783デフォルトの名無しさん
2008/09/10(水) 21:40:39ども
こんなスレあるのねw
0784デフォルトの名無しさん
2008/09/10(水) 22:09:490785デフォルトの名無しさん
2008/09/10(水) 23:21:11javaとかCをサンプルコードコピペで動かしたことぐらいしかない初心者です
外部からの音声入力を拾ってそれを変数として何か動かすプログラムを書きたいのですが、
C言語で可能でしょうか。
具体的にはマイクの音と連動してウィンドウの色が変わるようなものを考えています。
なんでもいいので、始めるにあたってどうすればよいかご教授願いたいです。
宜しくお願いします。
0786デフォルトの名無しさん
2008/09/10(水) 23:22:430787デフォルトの名無しさん
2008/09/10(水) 23:25:11まずはウィンドウ作るところからはじめてみたら?
0788デフォルトの名無しさん
2008/09/10(水) 23:27:07Windowsならばウィンドウ関連のAPIとWave関連のAPIの知識が必要。
0789785
2008/09/10(水) 23:44:23>>787
>>788
レスありがとうございます。可能だということで安心しました。
OSはWindows Vistaです。(linuxなどの環境も用意できます)
とりあえず何もできない状態なのでウィンドウを作るとこからはじめてみたいと思います。
レス頂いたあとで恐縮なのですが、そもそもこのようなプログラムにC言語は向いているのでしょうか
他にもっと向いている言語等あったら教えていただきたいです。
0790デフォルトの名無しさん
2008/09/10(水) 23:45:220791デフォルトの名無しさん
2008/09/10(水) 23:45:510792デフォルトの名無しさん
2008/09/11(木) 00:04:17かつ開発効率もそれなりに確保したい場合
とにかく動けばいいってんならほかにもっと簡単に作れる言語がいくらもある
0793デフォルトの名無しさん
2008/09/11(木) 00:06:41デバイスドライバはまだまだいけるんじゃない?
0794デフォルトの名無しさん
2008/09/11(木) 10:26:110795デフォルトの名無しさん
2008/09/11(木) 10:35:080796デフォルトの名無しさん
2008/09/11(木) 11:07:08録音ソフトは過去に作ったことあるんだが
waveの録音ならペゾルドの『プログラミングWindows第5版』つー本の下巻にサンプルコードが載っている
言語はC
これをそのままパクれば録音ソフトは作れる
ただ、前提としてCとWindowsプログラミングの知識は必要
俺の場合2年ぐらいかかった
プログラムの方法はともかく、waveデータを扱うならCぐらいの知識は普通に必要なのでやっておいて損はない
0797デフォルトの名無しさん
2008/09/11(木) 11:22:33録音するだけなら8、音声のデータを解析しながら録音するなら7
http://wisdom.sakura.ne.jp/system/winapi/media/index.html
0798デフォルトの名無しさん
2008/09/11(木) 14:08:52文字列を数値に変換して並び替えを行うプログラムを作っているんですけど
文字列を数値に変換をして並び替えを行った結果、
先頭の数字0がなくなった状態で並び替えがされていました。
先頭の数字0がなくならない状態で並び替えを行う方法を教えてください。
お願いします。
例)
先頭の数字0がなくならない並び替え
並び替え前 並び替え後
00159 0101
130 → 130
0101 00159
先頭数字0がなくなった並び替え
並び替え前 並び替え後
00159 101
130 → 130
0101 159
0799デフォルトの名無しさん
2008/09/11(木) 14:14:43意味がわかりません。
プログラム内部では文字列の数字ではなく変換後の数字でしょ?
頭に0なんて付かないけど。
>先頭の数字0がなくならない状態で並び替えを行う方法を教えてください。
数字に直す以上は無理です。
0800デフォルトの名無しさん
2008/09/11(木) 14:24:20qsortに渡す関数の中でatoiして比較すりゃいいだけなのに。
0801デフォルトの名無しさん
2008/09/11(木) 14:25:08各文字列を残しとけ。int型配列でも作って、そこの数字を並べ替える時に文字列も一緒に並べ変えろ。
0802デフォルトの名無しさん
2008/09/11(木) 14:27:310803デフォルトの名無しさん
2008/09/11(木) 14:27:51例がたまたまシンプルなだけで、qsortが使えないような場面の話なんじゃないか?
0804デフォルトの名無しさん
2008/09/11(木) 14:29:17詳しく教えてください。
プログラムで例を出していただくと助かりますが・・・
0805デフォルトの名無しさん
2008/09/11(木) 14:29:38宿題スレにいって解答もらってこい
0806デフォルトの名無しさん
2008/09/11(木) 14:30:210807デフォルトの名無しさん
2008/09/11(木) 14:31:43自力でやる気があるなら、これだけの情報で充分できるはずだ。
出来ないまま例を見ても鵜呑みにするだけで理解なんて出来ない。
理解する気がないなら誰かに作ってもらえ。する気があるならチャレンジしろ。
0808デフォルトの名無しさん
2008/09/11(木) 14:52:40qsortとatoiが使えるなら、文字列をどっかに保存しといて、
atoiで並べ変えられた順に文字列並び替えるだけ。
qsortとatoiが使えないなら、
意味調べて自作汁
0809デフォルトの名無しさん
2008/09/11(木) 14:54:23○qsortで並べ変えられた順
orz
0810デフォルトの名無しさん
2008/09/11(木) 16:04:07>>804
qsort でググレカス(AA略
0811デフォルトの名無しさん
2008/09/11(木) 16:04:52単位ほしいだけだろ
0812デフォルトの名無しさん
2008/09/11(木) 16:06:32と究極に親切な誘導してあげてるじゃないかw
0813デフォルトの名無しさん
2008/09/11(木) 17:22:490814デフォルトの名無しさん
2008/09/11(木) 17:24:15どこからそんなレアな話を聞きつけたんだw
0815デフォルトの名無しさん
2008/09/11(木) 22:48:010816デフォルトの名無しさん
2008/09/11(木) 23:02:26int foo;
} bar;
0817デフォルトの名無しさん
2008/09/11(木) 23:03:280818デフォルトの名無しさん
2008/09/11(木) 23:05:01int a;
int b;
} arry[] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
0819デフォルトの名無しさん
2008/09/11(木) 23:08:080820デフォルトの名無しさん
2008/09/11(木) 23:10:55gccじゃあるまいしw
0821デフォルトの名無しさん
2008/09/11(木) 23:58:580822デフォルトの名無しさん
2008/09/12(金) 00:17:33Foo_t *
Hoge(Foo_t * piyo);
int main()
{
Foo_t bar = { 10 };
printf("before : bar::foo == %d\n", bar.foo);
Hoge(&bar);
printf("after : bar::foo == %d\n", bar.foo);
return 0;
}
Foo_t *
Hoge(Foo_t * piyo)
{
piyo->foo = 100;
return piyo;
}
なんか違う気がしてきた
0823デフォルトの名無しさん
2008/09/12(金) 00:22:260824デフォルトの名無しさん
2008/09/12(金) 00:53:59void * で渡して ((struct { int foo; } * )piyo)->foo = 100; こうするんですね、わかります。
もう年だからぼけてきているのかもしれない、そろそろマをやめるべきだろうか。
はぁ〜、ありえない・・・でも。
0825デフォルトの名無しさん
2008/09/12(金) 01:02:35void hoge(struct point p);
struct point make_point(int x, int y) {
struct point t; t.x=x; t.y=y; return t;
}
int main() {
/* hoge({100,200}); */ /* 無名の構造体を渡したい */
hoge(make_point(100, 200)); /* OK! */
}
だめ?
0826デフォルトの名無しさん
2008/09/12(金) 01:36:520827デフォルトの名無しさん
2008/09/12(金) 07:26:22struct sockaddr_in sin;
inet_aton(addr, &(sin.sin_addr)); /* IPアドレスの設定 */
の、IPアドレスの設定だけを、を別関数で行いたいのですが、どうしたらいいか教えてください。
同じmain関数内で実行するなら上記でいいのですが、
別関数でinet_atonをやりたくて、アドレス渡しでやってみたのですが、うまくできなくて困っています。
できれば、コードを書いていただけると助かります。よろしくお願いします。
0828デフォルトの名無しさん
2008/09/12(金) 07:38:450829デフォルトの名無しさん
2008/09/12(金) 07:42:55スレ違い。
0830デフォルトの名無しさん
2008/09/12(金) 10:06:052回目以降、名前を入力すると、出力がおかしい事になります。
どういうことですか?
#include<stdio.h>
typedef struct seiseki{
char name[20];
int kokugo;
int sansuu;
}Seiseki;
int main(void)
{
Seiseki a[3];
Seiseki *ap = a;
while(1){
printf("生徒名,国語,算数の順に入力してください\n");
gets(ap->name);
scanf("%d",&ap->kokugo);
scanf("%d",&ap->sansuu);
printf("出力:生徒名%s,国語%d,算数%d\n",ap->name,ap->kokugo,ap->sansuu);
++ap;
}
return 0;
}
0831デフォルトの名無しさん
2008/09/12(金) 10:13:50scanfで残った改行が次のgetsで読みこまれる
0832デフォルトの名無しさん
2008/09/12(金) 10:13:57構造体と関数でぐぐれ
0833デフォルトの名無しさん
2008/09/12(金) 10:15:47scanf の後 \n が入力バッファに残っている
0834デフォルトの名無しさん
2008/09/12(金) 10:20:24を入れてるサンプルが
0835デフォルトの名無しさん
2008/09/12(金) 10:27:04それM$独自の拡張だから
gccでやったら未定義の動作
0836デフォルトの名無しさん
2008/09/12(金) 10:56:160837830
2008/09/12(金) 10:56:33有難うございます。
0838デフォルトの名無しさん
2008/09/12(金) 11:01:48C++Builderのヘルプより
int fflush(FILE *stream);
The function writes any buffered output to the file associated with the
stream stream and returns zero if successful; otherwise, it returns EOF.
If stream is a null pointer, fflush writes any buffered output to all files
opened for output.
というわけで入力バッファに適用した場合にどうなるとは一言も書かれていない。
メーカーが書いてないんだから実際はM$準拠であれ未定義動作と見た方がよい。
0839デフォルトの名無しさん
2008/09/12(金) 11:52:580840デフォルトの名無しさん
2008/09/12(金) 11:57:430841デフォルトの名無しさん
2008/09/12(金) 12:59:13gets(dummy);
0842デフォルトの名無しさん
2008/09/12(金) 14:18:59getchar();
0843デフォルトの名無しさん
2008/09/12(金) 16:04:540844デフォルトの名無しさん
2008/09/12(金) 16:23:10残念な思いでいっぱいになる。
0845デフォルトの名無しさん
2008/09/12(金) 16:27:20int x, y;
}POINT;
void Test(char *data)
{
int pt = (int)*data; //エラーはでない。
}
void Test2(char *data)
{
POINT pt = (POINT)*data; //エラーになります。何故ですか?
}
error C2440: '型キャスト' : 'char' から 'POINT' に変換できません。
0846デフォルトの名無しさん
2008/09/12(金) 16:42:06エラーメッセージのとおり。
>> int pt = (int)*data; //エラーはでない。
「*data」はchar型 (=1バイトの整数型) なので
int に変換して代入できる。
>> POINT pt = (POINT)*data; //エラーになります。何故ですか?
「*data」はchar型なので
POINT構造体には変換できない。
0847デフォルトの名無しさん
2008/09/12(金) 17:06:19これがエラーになるのと同じ
char ch = *data;
POINT pt = (POINT) ch; // ←これ
本当にやりたいのはこうではないか?
POINT pt = *(POINT*)data;
0848デフォルトの名無しさん
2008/09/12(金) 17:06:57charは1バイトの整数型だから
intやdoubleに変換できるが、構造体には変換できないということですよね?
それは何故なんでしょう?
void Test2(char *data)
{
POINT *p = (POINT*)data;
POINT pt = *p;
}
こうするとエラーがでないのは、ポインタには型の区別がないということですか?
0849デフォルトの名無しさん
2008/09/12(金) 17:10:01ああ、なるほど。よく分かりました。
構造体の型でキャストというのが意味不明でしたね。
ありがとうございました。
0850デフォルトの名無しさん
2008/09/12(金) 17:19:55ないわけではないが、変換可能
キャストするとはそういうこと
0851デフォルトの名無しさん
2008/09/12(金) 22:32:18(struct hoge)data ってキャストできないのは何でだろう。
0852デフォルトの名無しさん
2008/09/12(金) 22:34:37どうやって変換したらいいか判らないからです。
例えば、struct tm dataだったら(int) dataもできません。
C++なら教えることができるので、ちゃんと変換してくれます。
0853デフォルトの名無しさん
2008/09/12(金) 22:45:160854デフォルトの名無しさん
2008/09/13(土) 00:07:080855デフォルトの名無しさん
2008/09/13(土) 00:32:170856デフォルトの名無しさん
2008/09/13(土) 00:42:340857デフォルトの名無しさん
2008/09/13(土) 02:13:550858デフォルトの名無しさん
2008/09/13(土) 16:14:35>>827 をもう一度試したのですがうまくいきません。
どなたかお願いします。
0859デフォルトの名無しさん
2008/09/13(土) 16:34:08ttp://cai.int-univ.com/sugsi/Lecture/NetProg/chapter3/struct.html
0860デフォルトの名無しさん
2008/09/13(土) 19:30:44どんな結果を期待しているんだ?
0861デフォルトの名無しさん
2008/09/13(土) 21:31:19同じ関数内でstruct sockaddr_in aaaを宣言して
inet_atonは普通にできるのはわかるのですが、
mein関数でstruct sockaddr_in aaaを宣言し、
別関数で、構造体の中身(aaa.sin_addr)の値を変更したいのです。
アドレス渡しで試してみたのですが、sin_addrが存在しない的なエラーが出て
うまくいかないのです。
構造体 関数等でググってうまくいかないので質問させていただきました。
どなたかお願いします。教えてください。
0862デフォルトの名無しさん
2008/09/13(土) 21:45:25<使い方>
例:192.168.0.10をsockaddr_in構造体に設定する場合
struct sockaddr_in serv;
inet_aton("192.168.0.10", &(serv.sin_addr));
0863デフォルトの名無しさん
2008/09/13(土) 21:55:41{
inet_aton(addr, &(bbb->sin_addr));
return 0;
}
int main()
{
struct sockaddr_in aaa;
char *str = "192.168.0.10";
hoge(&aaa, str);
return 0;
}
0864デフォルトの名無しさん
2008/09/14(日) 09:38:35どのようにすればいいのでしょうか?
fgetsで1行読み込んで「,」で区切る方法がいいんでしょうがよくわかりません
0865デフォルトの名無しさん
2008/09/14(日) 09:47:17strtok
sscanf
好きなの使え
まぁそもそも一行目がいまいち何言ってんのかわかんないけど
0866デフォルトの名無しさん
2008/09/14(日) 09:59:0616.67188,1.875e-003,
16.67188,1.1875e-002,
16.68188,-8.125e-003,
16.66188,-2.8125e-002,
こんな感じのデータが延々と続いてる奴で、左側のデータと右側のデータを別々の配列に入れたいというわけです
0867デフォルトの名無しさん
2008/09/14(日) 10:32:210868デフォルトの名無しさん
2008/09/14(日) 12:09:39ファイルから一文字一文字読み込めるだろー?
char buf[128]とかして、
�@区切り文字までをbufにいれる
�Abufから配列にこぴ〜
�Bbufくりあ
�Cgoto �@
でいいんでね?
>>866のデータ見ると、sprintfは使えないだろうからなぁ
eを処理する関数も必要かもに
0869デフォルトの名無しさん
2008/09/14(日) 12:17:59馬鹿は回答しなくても構わないんですよ。
>>866
sscanf()で"%[^,]"で変換するか、strtok()で切り出すか。
0870デフォルトの名無しさん
2008/09/14(日) 12:23:060871デフォルトの名無しさん
2008/09/14(日) 12:31:37オススメのアルゴリズム関係の書籍がありましたら教えて下さい
よろしくお願いします
0872デフォルトの名無しさん
2008/09/14(日) 12:41:08たとえば、CRC32でも使えばいい。
衝突したらずらしたり、別領域に記録するんだよ
0873デフォルトの名無しさん
2008/09/14(日) 12:47:09scanf()系の書式指定、忘れたけど、
"%f,"とかでいいんじゃね?
0874デフォルトの名無しさん
2008/09/14(日) 12:48:36amazonで、アルゴリズムとかで検索して、星がたくさんついてるのを選んだら?
0875864
2008/09/14(日) 12:54:490876デフォルトの名無しさん
2008/09/14(日) 16:10:440877デフォルトの名無しさん
2008/09/14(日) 17:04:35なぜか%fとか提案してる人がいるだけで
0878デフォルトの名無しさん
2008/09/14(日) 17:05:540879デフォルトの名無しさん
2008/09/14(日) 17:05:540880デフォルトの名無しさん
2008/09/14(日) 17:21:35スルーカが試されているのか?
(そういう俺はスルーできていない)
0881デフォルトの名無しさん
2008/09/14(日) 18:21:550882デフォルトの名無しさん
2008/09/14(日) 19:09:41アホ
sscanf する前の文字列をどうやってとるねん
バッファリミットはどこから取る気じゃ
思いっきり処理系依存するぞ
0883デフォルトの名無しさん
2008/09/14(日) 19:13:250884デフォルトの名無しさん
2008/09/14(日) 20:20:430885デフォルトの名無しさん
2008/09/14(日) 20:35:310886デフォルトの名無しさん
2008/09/14(日) 21:18:09hoge.c
#include "aa.h"
hoge2.c
#include "aa.h"
aa.h
#ifndef __INCLUDED_AA_H
#define __INCLUDED_AA_H
宣言とか
#endif
これでエラーになるんだけれど、何が悪いのかな?
0887デフォルトの名無しさん
2008/09/14(日) 21:27:580888デフォルトの名無しさん
2008/09/14(日) 21:38:350889デフォルトの名無しさん
2008/09/14(日) 21:38:47おまえは知らなくていい
この板に来なくてもいい
0890デフォルトの名無しさん
2008/09/14(日) 21:39:57http://mamono.2ch.net/test/read.cgi/newsplus/1221382248/
0891デフォルトの名無しさん
2008/09/14(日) 21:43:27突っ込まれるのが怖くて説明できないんですね。わかります。
0892デフォルトの名無しさん
2008/09/14(日) 22:20:21いーや、>>882 の文脈から「バッファリミット」の意味を見当もつけられない完全素人はまず「入門」してからこのスレに来いという意味だ
0893デフォルトの名無しさん
2008/09/14(日) 22:22:26再現する最小のソースセットうp!
0894デフォルトの名無しさん
2008/09/14(日) 22:25:260895デフォルトの名無しさん
2008/09/14(日) 22:31:04お前誰だ?
俺は >>882 で >>864=>>866 の用途に sscanf を使うことに否定の立場を示している
そこへ自分の立場を隠したまま頓珍漢なレスを返してきた >>891 を完全に馬鹿にしているところだが、
その馬鹿か、おまえは?
0896デフォルトの名無しさん
2008/09/14(日) 22:36:14> 俺は >>882 で >>864=>>866 の用途に sscanf を使うことに否定の立場を示している
おまえだって、今の今まで言ってなかっただろよ。
人に「立場を隠したまま」とか言うなよ。
だいたいこの問題に、立場とかどう関係してんだよ。
0897デフォルトの名無しさん
2008/09/14(日) 22:37:52やっぱり、あの馬鹿だったか
バッファリミットもアホも読めてない奴に説明なんかするか
チンパンジーに因数分解を教えるより面倒臭い
0898デフォルトの名無しさん
2008/09/14(日) 22:39:26自分で説明すればそれで済むことだろ。
0899デフォルトの名無しさん
2008/09/14(日) 22:39:400900デフォルトの名無しさん
2008/09/14(日) 22:42:21ツッコミされるの怖がりすぎだろ。
0901デフォルトの名無しさん
2008/09/14(日) 22:44:29いーや、sscanf を使う場合のコードが想像できることは、この問題を議論する論客として最低限の資格だ
質問する気にしても、人にものを尋ねるときの態度がまるでなっておらず、質問者として最低限の資格もおまえは備えていない
繰り返すがチンパンジーには無理な問題だ
あきらめて帰れ
0902デフォルトの名無しさん
2008/09/14(日) 22:51:20もうどうでもいいけど、こういう技術系の話題で、あおり芸で切り抜けたつもりになってるやつって、悲しくないのかね。
ほんの数行説明すればすむ話をめんどくさいと言って、避けまくって、煽りだけはめんどくさがらずにひたすら続けてるんだもんなぁ。
0903デフォルトの名無しさん
2008/09/14(日) 22:51:56エラーメッセージの内容くらい書け
0904デフォルトの名無しさん
2008/09/14(日) 22:57:14バッファリミットの話はどうした?
あいかわらず想像もできていないようだが、事実を指摘されるのが悔しければこれ以上粘るのは得策ではないぞ
それから、説明するかどうかは回答者の自由意志によるもので、その態度で言い返し続けたあげくには何も得る物がないぞ
0905デフォルトの名無しさん
2008/09/14(日) 22:57:570906デフォルトの名無しさん
2008/09/14(日) 22:58:150907デフォルトの名無しさん
2008/09/14(日) 22:58:24http://ja.wikipedia.org/wiki/Scanf
のバッファオーバーランの節とか見ればいいんでしょ。
注意しないと落ちちゃうし、固定で切った後の処理考えるのが面倒だよね。
違ってたらごめん。
0908デフォルトの名無しさん
2008/09/14(日) 23:02:01だから、それは「バッファリミット」を言い出したほうが説明するのが先だろ。
なんで周囲が、あれこれ推測してあげなきゃならないんだよ。
0910デフォルトの名無しさん
2008/09/14(日) 23:03:19人に分からせようとする気がないことが容易に推測できる。
無視するのが吉。
0911デフォルトの名無しさん
2008/09/14(日) 23:04:03>説明するかどうかは回答者の自由意志によるもので、
だったら「バッファリミットの話はどうした?」って煽るなよ。
お前が説明する気がなかったら、それ以上話は進まないよ。
0912デフォルトの名無しさん
2008/09/14(日) 23:04:34”バッファリミット”の検索結果 8 血薯 1 - 8 件目 (0.14 秒)
0913デフォルトの名無しさん
2008/09/14(日) 23:04:54fgets(buf, sizeof(buf), fp);
char col1[20], col2[20];
sscanf(buf, "%99[^,],%99[^,]", col1, col2);
と言うコードがあったとして、バッファオーバランは発生しないし、バッファリミットとやらがどう関係するのかも判らない。
まぁ、col1, col2がそれぞれ実数と言う解釈でいいのならfloat col1, col2; sscanf(buf, "%f,%f", & col1, & col2);でいいわけだけど。
# それ以前に、1行200バイトが妥当かどうかも考慮する必要はあるな。
0914デフォルトの名無しさん
2008/09/14(日) 23:07:11%19 っしょ?
0915デフォルトの名無しさん
2008/09/14(日) 23:08:310916デフォルトの名無しさん
2008/09/14(日) 23:10:54そのとおり、話を進める気なんぞ >>885 の時点から毛頭なかったが、
おまえ何を前提にレス書いて(≠話して)いたんだ?
0917デフォルトの名無しさん
2008/09/14(日) 23:13:00バッファリミットって、このコードで、200文字以上の行があった場合のことかな?
0918デフォルトの名無しさん
2008/09/14(日) 23:13:46ふーん。そんなにツッコミを怖がらなくてもいいのに。
0919デフォルトの名無しさん
2008/09/14(日) 23:15:210920デフォルトの名無しさん
2008/09/14(日) 23:15:23コード書けない奴は邪魔なんだよ
0921デフォルトの名無しさん
2008/09/14(日) 23:15:260922デフォルトの名無しさん
2008/09/14(日) 23:16:16そのとおり
知りたいことが聞き出せなくて残念だったな
0923デフォルトの名無しさん
2008/09/14(日) 23:18:16いや、どうせ脳内で見当違いのことを考えてるだけだろうから、どうでもいいよ。
0924デフォルトの名無しさん
2008/09/14(日) 23:18:330925デフォルトの名無しさん
2008/09/14(日) 23:19:20おまえイソップのキツネだな
0926デフォルトの名無しさん
2008/09/14(日) 23:23:18でも、ここまで煮詰まってるし、二人以外に何人か参加してるし、もしなんか
「普通のPGならとうぜん知ってるけど、俺が知らないだけ」みたいな点があったら、
なんかツッコミが入ってるだろうけど、そういうのないし、まぁ、あんたがシッタカしてるだけでしょ。
0927デフォルトの名無しさん
2008/09/14(日) 23:24:480928デフォルトの名無しさん
2008/09/14(日) 23:25:540929デフォルトの名無しさん
2008/09/14(日) 23:26:55struct XXX {
int hoge;
};
ではなく
typedef struct {
int hoge;
} XXX;
と書くのでしょうか?
Cで書いたものもC++でコンパイルすればいいと思うのですが。
0930デフォルトの名無しさん
2008/09/14(日) 23:28:59イソップのキツネと言われた後の発言としては気が狂ったとしか思えんが
そのツッコミもまたまた読めてないわけで、チンパンジーとキツネの悪いとこ取りで多重継承してる奴だな
0931デフォルトの名無しさん
2008/09/14(日) 23:29:07それは単に定義と同時にtypedefをするかどうかの違い
スタイルの話だからなぜもくそもない
0932デフォルトの名無しさん
2008/09/14(日) 23:29:400933デフォルトの名無しさん
2008/09/14(日) 23:31:54ん、俺は素では前者で書くぞ
現実には諸般の事情から後者の頻度が高いけどね
C++ も然り、諸般の事情で C 限定の場合がある
0934デフォルトの名無しさん
2008/09/14(日) 23:33:37いや、こいつが何を言いたいかはわかるよ、当然注意すべきことだしね
バッファリミットなんて言葉を使っちゃうアホさと無駄に相手を煽るキチガイさは動かんけど
0935デフォルトの名無しさん
2008/09/14(日) 23:37:56強制 ID 板じゃなくてよかったな
0936デフォルトの名無しさん
2008/09/14(日) 23:40:18とりあえず、バッファリミットって言葉は知らんが、
普通、スタックオーバーとか言うね。
sscanfってのは、制限無く書式通りの型を指定先のバッファにぶち込む。
それを知らんで、素人はスタック(≒用意したメモリ領域)を良くぶっ壊してたりするもんさ。
コンパイラチェック入ってないと、何もエラー出んから知らないままいることが多いね。
しかも、普通に動くこと多いんでバグが発見しづらいのが最悪な点かな。
例えば、
char destBuf;
sscanf(srcbuf,"data=%d",&destBuf)
とすると、
sscanfはint(%d)型のバイト数を値をsrcBufからdestbufにコピーする。
で、int型ってのは処理系依存で、2〜4byteで不定なもんだから使いにくいのよ。
0937デフォルトの名無しさん
2008/09/14(日) 23:41:35これ以上ややこしくすんな
0938デフォルトの名無しさん
2008/09/14(日) 23:42:46単に「Cで書く」って決まってるプロジェクトで、C++のコードを混ぜたらまずいじゃん。
0939デフォルトの名無しさん
2008/09/14(日) 23:44:12>>936のサンプルソースは、最近新人が書いたもの。
既に、destBuf(char型)の後方3バイトを壊して、
他の処理系に異常を出した例。
正しくは、char destBuf→unsigned long destBufにせんといかんだけ
こういう事は気づかん所で良くあるねぇ
0940デフォルトの名無しさん
2008/09/14(日) 23:46:30%d int
%hd short int
%ld long int
char を受けるのは無いな
0941デフォルトの名無しさん
2008/09/14(日) 23:47:28残念、%c があるんだな(笑
0942デフォルトの名無しさん
2008/09/14(日) 23:47:45> sscanfはint(%d)型のバイト数を値をsrcBufからdestbufにコピーする。
> で、int型ってのは処理系依存で、2〜4byteで不定なもんだから使いにくいのよ。
絶対なんか勘違いしてる。
0943デフォルトの名無しさん
2008/09/14(日) 23:48:12釣りはもっと上手くやれ
0944デフォルトの名無しさん
2008/09/14(日) 23:49:00おいw
0945デフォルトの名無しさん
2008/09/14(日) 23:51:55自己レスです。
でもtypedefしたないものは自分は見たことないです。
別にCで書くとかそんな決め事ないケースばかりです。
スタイルだけの問題なんでしょうか?
実際的なメリットがあってそうしているのではないかと思うのですが。
自分で考えると
○ Cにしたときにtypedefのが問題がない
× typedefすると無名ができたり似たような名前が二つ出てきたりで面倒
といった感じです。C++では構造体はclassみたいになるし、シンボルも
違ってくると思います。その辺が絡んだメリット/デメリットがあるのかと
思うのですが、どうにも思いつきませんでした。読んでる限りだと実際ないのか
と思い始め、、、そうなの?
0946デフォルトの名無しさん
2008/09/14(日) 23:54:41typedef struct tag_XXX {
int hoge;
} XXX;
をオススメする
0947デフォルトの名無しさん
2008/09/14(日) 23:56:30今、見たことなくても、そのうち見ることあるんじゃないか?
大した理由は俺の知る限りないぞ
ところで typedef の問題ってよくわからんのだが、具体的なコード例は示せるか?
0948デフォルトの名無しさん
2008/09/14(日) 23:58:35%dなのにunsignedで受けたらダメじゃん。
0949デフォルトの名無しさん
2008/09/15(月) 00:00:22すまん。誤爆した(w
>>945
typedef ・・しておけば、変数のように構造体を使えるので
通常の記述はそうする。
・typedef していない→struct 型名 変数名;
・typedef している →型名 変数名;
0950デフォルトの名無しさん
2008/09/15(月) 00:03:27いや、C++だと、typedefなくても、宣言のときにstractなしでできるのに、自分の見たコードは、
typedefしてあって、それはなぜでしょうか? って話だろ?
0951デフォルトの名無しさん
2008/09/15(月) 00:04:31細かいところによく気がついてくれた。ありがとう!
誰も突っ込んでくれないんで、どうしようかと oTL オジサン寂しいのん
では、オヤスミ
0952デフォルトの名無しさん
2008/09/15(月) 00:05:04Visual Studioなどで、正しく二つ分表示されるのが鬱陶しい。
ソースを元に簡単な解析をしたいときに鬱陶しい。
コード例ではないんですが。。。
0953デフォルトの名無しさん
2008/09/15(月) 00:11:03ソースを解析するときは逆に typedef で struct を隠されると「鬱陶しい」よな
例えば jmp_buf みたいに構造体ではなく配列であることがミソなコードが読みづらかったりする
0954デフォルトの名無しさん
2008/09/15(月) 00:11:06C99だと%hhdが使える。
0955デフォルトの名無しさん
2008/09/15(月) 00:12:220956デフォルトの名無しさん
2008/09/15(月) 00:12:38Cの構造体(共用体も)の宣言はC++とは異なり、構造体タグを自動で typedef しないことを理解しているか。
Cで書くとはCコンパイラでコンパイルできるということで、C++コンパイラでしかコンパイルできないならそれはC++のコードである。
(実質的に) typedef することはキーワード struct を省略することである。それ以上でもそれ以下でもない。
0957デフォルトの名無しさん
2008/09/15(月) 00:13:39いにゅーむ
0958デフォルトの名無しさん
2008/09/15(月) 00:17:43typedef struct hoge{
}hoge;
とかできる
0959デフォルトの名無しさん
2008/09/15(月) 00:18:47いーなむ
0960デフォルトの名無しさん
2008/09/15(月) 00:20:17http://dictionary.goo.ne.jp/search.php?MT=enum&kind=ej&mode=0&base=1&row=1
0961デフォルトの名無しさん
2008/09/15(月) 00:21:250962デフォルトの名無しさん
2008/09/15(月) 00:21:520963デフォルトの名無しさん
2008/09/15(月) 00:22:50> Cの構造体(共用体も)の宣言はC++とは異なり、構造体タグを自動で
> typedef しないことを理解しているか
いいえ。C++ではtypedefしているのですか?
> Cで書くとはCコンパイラでコンパイルできるということで、C++
> コンパイラでしかコンパイルできないならそれはC++のコードである。
> (実質的に) typedef することはキーワード struct を省略する
> ことである。それ以上でもそれ以下でもない。
つまりメリットはそこにしかないということですね。
0964デフォルトの名無しさん
2008/09/15(月) 00:23:27すきゃんふ
0965デフォルトの名無しさん
2008/09/15(月) 00:48:44他人に読み書きさせるソースコードなら。
このソースは一部C++の機能を使っているので、
C++でコンパイルしてくれと但し書きをしなければならない。
0966デフォルトの名無しさん
2008/09/15(月) 01:13:480967デフォルトの名無しさん
2008/09/15(月) 01:16:490968デフォルトの名無しさん
2008/09/15(月) 01:17:34核
↓
core
できそこないのプログラムなら得意だろ
0969デフォルトの名無しさん
2008/09/15(月) 01:26:41Cのソースコード集みたいな本は売ってませんでしょうか?
どの方向に使っていくかも決まっていないので
いろんなジャンルのソースがみたいです。
サイト上のページでもいいのですが
本は落ち着いて勉強できますので。
0970デフォルトの名無しさん
2008/09/15(月) 01:34:00アルゴリズムとデータ構造
0971デフォルトの名無しさん
2008/09/15(月) 01:36:44FreeBSDのlsなどのコマンドのソースコードはどうでしょうかね
ls http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/
echo http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/echo/
http://www.freebsd.org/cgi/cvsweb.cgi/src/binに一覧のディレクトリ
0972デフォルトの名無しさん
2008/09/15(月) 01:39:430973デフォルトの名無しさん
2008/09/15(月) 02:23:110974デフォルトの名無しさん
2008/09/15(月) 02:48:22>>971
ありがとん。
>>972
ググってみたやつですどこういうのでしょうか?
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/stdio/Attic/?cvsroot=glibc
ちょっとまだ手に負えません。本を読んで理解したいと思います。
0975デフォルトの名無しさん
2008/09/15(月) 03:23:51左手にあなたの髪を
0976デフォルトの名無しさん
2008/09/15(月) 09:41:36ここの下のほうのコードH 5行目に
> lpMetSect->lpSharedInfo->lAvailableCount*;
とあるのですが最後のアスタリスクはいったい何なんですか?
そういう単項演算子があるのでしょうか?
よろしくお願いします
0977デフォルトの名無しさん
2008/09/15(月) 10:07:59http://msdn.microsoft.com/en-us/library/ms810428.aspx
原文だと、それは--になってるな。
0978デフォルトの名無しさん
2008/09/15(月) 10:33:32どっち使いますか
0979デフォルトの名無しさん
2008/09/15(月) 10:49:13翻訳の間違いでしたか
ありがとうございます
0980デフォルトの名無しさん
2008/09/15(月) 11:36:080981デフォルトの名無しさん
2008/09/15(月) 11:39:180982デフォルトの名無しさん
2008/09/15(月) 11:41:25http://pc11.2ch.net/test/read.cgi/tech/1221446435/
0983デフォルトの名無しさん
2008/09/15(月) 13:15:06乙
0984デフォルトの名無しさん
2008/09/15(月) 13:52:36辞書引け
0985デフォルトの名無しさん
2008/09/15(月) 19:24:49それとも定義のところで書くから宣言時はいらない?
0986デフォルトの名無しさん
2008/09/15(月) 19:31:410987デフォルトの名無しさん
2008/09/15(月) 20:19:130988デフォルトの名無しさん
2008/09/15(月) 20:29:060989デフォルトの名無しさん
2008/09/15(月) 20:33:39一般的にどうするなんてものはない。
コメントの書き方の一流派でいいならDoxygenでも参考にしとけ。
0990デフォルトの名無しさん
2008/09/15(月) 20:34:58まさに>>986だよ
仕事でやるならコーディング規則だとかコメント規則(笑
とかあるよ。
ころころこれが変わる職場に行ったことがあって、
うっかり修正漏れ(影響ないんだけど)があって
システムが原因不明のトラブルの際に
怒鳴られたことさえあったよwww
0991デフォルトの名無しさん
2008/09/15(月) 20:37:190992デフォルトの名無しさん
2008/09/15(月) 20:39:26ちゃんとしたリファレンスを用意するならヘッダには何も書かずにただcopyright表記だけ書いておけばいい。
0993デフォルトの名無しさん
2008/09/15(月) 23:47:01定義ファイルへはメンテする人のためのコメントを書く。
あとは自動ドキュメント作成ツールやらコーディング規則と相談。
0994デフォルトの名無しさん
2008/09/16(火) 00:21:55明確な、君がそうするべきと信ずる十分な理由があるなら、そうすることをためらう必要はない。
けして唯一絶対の理由である必要はない。スタイルに唯一絶対の正解は存在しないからである。
しかし特に理由がないのなら、皆がやっているものに合わせるべきである。
0995デフォルトの名無しさん
2008/09/16(火) 01:03:52命名規則は気をつけないと 動詞+名詞 と 名詞+動詞 が入り混じってしまう
vectorSetValue
vectorValueSet
setVectorValue
setValueVector // これは無いが…
0996デフォルトの名無しさん
2008/09/16(火) 22:18:32val = (type)0; ではだめかな
0997デフォルトの名無しさん
2008/09/16(火) 22:21:37bzero
0998デフォルトの名無しさん
2008/09/16(火) 22:30:15static const someStruct zeroSome = {0};
を用意しておいて、適宜
someStruct foo = zeroSome;
のように代入する。
0999デフォルトの名無しさん
2008/09/16(火) 22:38:261000デフォルトの名無しさん
2008/09/16(火) 22:46:3410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。