C言語なら俺に聞け! Part 123
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/02/26(日) 13:58:25質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 122
http://pc8.2ch.net/test/read.cgi/tech/1139570025/
0002デフォルトの名無しさん
2006/02/26(日) 14:24:480003デフォルトの名無しさん
2006/02/26(日) 14:25:070004デフォルトの名無しさん
2006/02/26(日) 14:28:060005デフォルトの名無しさん
2006/02/26(日) 14:37:26コンソールで、コンパイラはgcc。Bcc32でつ。
本を何冊かみても、色分けの表示の解説がなかったのでつい書き込んでしまいました。
すみませんがよろしくお願いいたします。
0006デフォルトの名無しさん
2006/02/26(日) 14:44:07C言語じゃない
0007デフォルトの名無しさん
2006/02/26(日) 15:06:43ある何度も使用する関数内にて
int lpData[1024];
と宣言されているとします。
この場合上記ではなく
static int lpData[1024];
と宣言される場合、メモリ使用状況はともかくとしてCPUへの負荷は軽くなるものなのでしょうか
0008デフォルトの名無しさん
2006/02/26(日) 15:18:39環境依存につき、一般的には一概に言えない。
前者は恐らくスタックフレーム上に確保されるので毎回スタック操作が入るかもしれない。
しかし、だからと言って後者が速くなるとは限らない。
例えばCygwinで似たようなことをした経験から言えば、その他の変数の確保し方によっても変わった。
0009デフォルトの名無しさん
2006/02/26(日) 15:31:34うーん、そうですか
出来うる範囲で高速化を図りたかったのですが・・
とりあえず今まで通りの使い方でプログラミングしていく事にします。ありがとうございました
0010デフォルトの名無しさん
2006/02/26(日) 15:36:51だからぁ、環境書かずに答は得られないって。
つーか、環境依存スレなり各環境ごとのスレにでも行けと。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
2006/02/26(日) 15:42:020013デフォルトの名無しさん
2006/02/26(日) 15:42:22ロクにプログラムも組めない厨房か上級者
>>7はどっちだろうな
0014デフォルトの名無しさん
2006/02/26(日) 15:49:09俺は厨房のようだ( ゚∀゚)ハハハッハ
0015デフォルトの名無しさん
2006/02/26(日) 17:04:25高速化したいなら、実測してボトルネックを見つけろ。
0016デフォルトの名無しさん
2006/02/26(日) 20:23:46どこを計測すればよいのでしょうか?
高速化したいプログラムはメモリの初期化(0で初期化)です。
とりあえず、アセンブリ?
0017デフォルトの名無しさん
2006/02/26(日) 20:24:350018デフォルトの名無しさん
2006/02/26(日) 20:25:27C、C++の最適化について語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1084676298/
0019デフォルトの名無しさん
2006/02/26(日) 22:33:45現在の処理時間がどれくらいで、それを高速化でどのくらいにしようとしているの?
0020デフォルトの名無しさん
2006/02/26(日) 23:26:05始めに目的ありき
まずどんな条件をクリアできればいいのかをはっきりさせ
測定方法などの手段はその次に考える
0021デフォルトの名無しさん
2006/02/26(日) 23:34:140022デフォルトの名無しさん
2006/02/26(日) 23:35:100023デフォルトの名無しさん
2006/02/26(日) 23:48:04・・・もっとも、入門レベルで言う「高速化」ってのは無駄に気づけってのがそもそもの目的なわけだが
0024デフォルトの名無しさん
2006/02/27(月) 00:09:420025デフォルトの名無しさん
2006/02/27(月) 00:16:57http://gtkboard.sourceforge.net/doc/doxygen/tetris_c.html
0026デフォルトの名無しさん
2006/02/27(月) 00:19:26Oh yeah! 素晴らCでーす!
0027デフォルトの名無しさん
2006/02/27(月) 03:33:00んなもんな memset() 使え。
ライブラリに任せろ。
0028デフォルトの名無しさん
2006/02/27(月) 05:15:53memsetだとバイト単位だから遅い。そんなものもわからんのか?
対象とする環境がどんなものかわからんがな。
0029デフォルトの名無しさん
2006/02/27(月) 05:37:23バイト単位とは限らない
0030デフォルトの名無しさん
2006/02/27(月) 08:28:01未最適化のmemsetをコンパイラ製作者が提供するほうが珍しいと思う。
0031デフォルトの名無しさん
2006/02/27(月) 08:54:180032デフォルトの名無しさん
2006/02/27(月) 22:12:34>バイト単位とは限らない
でも0x12345678って書き込むと0x78ばかりが書き込まれます(ビッグエンディアンの場合)
すると書き込みデータが0のときのみ最適化するのでしょうか?
ちなみにうちのPC(セレロン600MHz)じゃあまり違いがわからないので
プログラム実行中のみ割り込み禁止にしてCPUパワーを落として
アルゴリズムの違いによって処理時間が明確に違うようにできますか?
環境はWin2000でCPUはセレロン600MHzでコンパイラはBCCです。
0033デフォルトの名無しさん
2006/02/27(月) 22:17:500034デフォルトの名無しさん
2006/02/27(月) 22:18:02そうではなくてたとえば0x78をmemsetの埋める引数にしたら、
内部では0x78787878を埋める処理が行われると言う感じだろ。
memsetの埋める内容を指定する引数はint型だが、挙動はcharへ変換して使用することになっているはず。
0035デフォルトの名無しさん
2006/02/27(月) 22:18:100036デフォルトの名無しさん
2006/02/27(月) 22:25:040037デフォルトの名無しさん
2006/02/27(月) 22:34:39sprintf(s, "%I64u", Big)
とやってできたのですが、逆に文字列から大きい数にするにはどうすればいいのでしょうか?
atoi(Big)ではできないみたいです。
お願いします。
0038デフォルトの名無しさん
2006/02/27(月) 22:40:31つまり0x12345678を0x78787878にして書き込むのか?
すると配列が奇数バイトに置かれているところは・・・きちんと計算して処理してるのかな?
0039デフォルトの名無しさん
2006/02/27(月) 22:45:52データ型について具体的なbit数の話は環境依存。
【初心者歓迎】C/C++室 Ver.25【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1140963340/
0040デフォルトの名無しさん
2006/02/27(月) 22:52:20atoiを自分で実装するってのも手。それぞれの数から
'0'引いて、桁かけて足すような感じでできるんじゃない?
0041デフォルトの名無しさん
2006/02/27(月) 22:54:320042デフォルトの名無しさん
2006/02/27(月) 23:01:16てのはmem系では違ったっけ?
0043デフォルトの名無しさん
2006/02/27(月) 23:01:41どうしても駄目ならstdio.hはいいよ。
0044デフォルトの名無しさん
2006/02/27(月) 23:03:090045デフォルトの名無しさん
2006/02/27(月) 23:13:350046デフォルトの名無しさん
2006/02/27(月) 23:13:45困ったことがあるなw
LoadLibraryさえ使えれば・・・と思ったら、インポートライブラリが必要だったw
004737
2006/02/27(月) 23:45:440048デフォルトの名無しさん
2006/02/27(月) 23:52:410049デフォルトの名無しさん
2006/02/28(火) 00:21:26横だけど、VC++なんかだとCのメモリ関係の関数は、メモリ関係のwin32apiを
使っていたと思う。BCCがそうなら、結局そのAPI次第では?
あと処理系依存の話なので、こっちの方がいいかもね
http://pc8.2ch.net/test/read.cgi/tech/1140963340/
0050デフォルトの名無しさん
2006/02/28(火) 00:21:48スレ違いだけど、BCC32ではインポートライブラリが無くても、代わりにDEFファイルでインポートできる。
0051デフォルトの名無しさん
2006/02/28(火) 00:25:08いや、VC++の場合は逆で、WinAPIのメモリ関係の関数が実はマクロでC標準関数を呼んでいる。
特にCopyMemoryはDLLに実体が無く、完全にマクロだけしかないと言う具合。
もちろんVC++のmemset類はバイト単位で書き込むなんてことはしていない。
0052デフォルトの名無しさん
2006/02/28(火) 00:38:06てっきりそうなんだと思っていた。勘違いスマソ
0054デフォルトの名無しさん
2006/02/28(火) 00:58:01どうでもいいが、そんな事で高速化云々を言うことが間違い。
高速化を行うなら、
・何故、高速化を行うのか?(目的)
・全体の内、どこがボトルネックとなっているか?(現状)
と言う観点を考える必要がある。
ただ漠然と
「メモリの初期化(0で初期化)を高速化したい」
などと考えるものではない。
0055デフォルトの名無しさん
2006/02/28(火) 00:59:220056デフォルトの名無しさん
2006/02/28(火) 01:07:16そうなると、どの仕事場にいっても有効に使えそうな
自分で作ったユーティリティ関数ってあります?
もしありましたら、どのようなジャンルか教えてください。
(中身は自分で考えます。)
・・・そういう意味では高速ゼロクリアも便利関数?
0057デフォルトの名無しさん
2006/02/28(火) 01:09:440058デフォルトの名無しさん
2006/02/28(火) 01:10:450059デフォルトの名無しさん
2006/02/28(火) 01:12:330060デフォルトの名無しさん
2006/02/28(火) 01:13:070061デフォルトの名無しさん
2006/02/28(火) 03:44:22設定ファイル読み込み関数、csvセル分割関数なんてのは結構使い回している。
高速ゼロクリアなんて、使う必然性を感じたことがないので作ってもいない。
0062デフォルトの名無しさん
2006/02/28(火) 04:44:58普通はな。
まあ、0クリアとか、何か特定の値で埋めたい場合はCPUに依存した
書き方すれば絶対に速い。インラインアセンブラ機能を使ったりして
書けば速い。速いが移植性はなくなる。
0063デフォルトの名無しさん
2006/02/28(火) 20:39:24アセンブラを作ってくれるの?
それとも、アルゴリズムが最高にイカしてるの?
0064デフォルトの名無しさん
2006/02/28(火) 22:38:35処理系付属のライブラリの出来次第。
有名なものならそれなりに速いはず。
0065デフォルトの名無しさん
2006/02/28(火) 22:47:110066デフォルトの名無しさん
2006/02/28(火) 23:19:300067デフォルトの名無しさん
2006/03/01(水) 00:14:580068デフォルトの名無しさん
2006/03/01(水) 00:22:430069デフォルトの名無しさん
2006/03/01(水) 00:26:10HeapAlloc
0070デフォルトの名無しさん
2006/03/01(水) 00:29:010071デフォルトの名無しさん
2006/03/01(水) 00:29:06#include<stdio.h>
#include<stdlib.h>
char *strcpy(char *,char *);
main(int argc, char *argv[]){
int i,j;
char *buf;
for(i=1;i<argc;i++){
buf = malloc((strlen(argv[i])+1) * sizeof(char));
strcpy(buf,argv[i]);
for(j = strlen(buf) - 1; j>=0;j--){
printf("%c",buf[j]);
}
printf("\n");
free(buf);
}
}
文字列をひっくり返すプログラム組んだんですが、数字を入れてもひっくり
返えるんですよ。
なんででしょうか?すみません、初歩で。
0072デフォルトの名無しさん
2006/03/01(水) 00:31:11123を渡したらやはり"123"という文字列として渡される
0073デフォルトの名無しさん
2006/03/01(水) 00:33:45数字って数字文字列じゃないの?
0074デフォルトの名無しさん
2006/03/01(水) 00:41:48コマンドラインはすべて、文字列ですか・・・ありがとうございました。
勉強不足でした。
0075デフォルトの名無しさん
2006/03/01(水) 02:05:40どこで入手できる?
0076デフォルトの名無しさん
2006/03/01(水) 02:14:420077デフォルトの名無しさん
2006/03/01(水) 02:20:200078デフォルトの名無しさん
2006/03/01(水) 02:21:54載っているWebってありませんか?
どなたかご存知の方いらっしゃりましたら教えてください
0079デフォルトの名無しさん
2006/03/01(水) 02:49:57その関数のソースコードを書いてください。
引数の変数名はaとbとし、戻り値の変数をxとします。
解答は、算術演算子、代入演算子どちらを用いても構いません。
○与えられた整数の変数が100または200のときだけ真(true)を返し、
それ以外の場合は偽(false)を返す関数 checknum をC言語で設計し、
その関数のソースコードを書いてください。
・・・こんな問題を出されたんですが、どういう意味なんでしょうか??
どなたか教えてください・・・;
0080デフォルトの名無しさん
2006/03/01(水) 02:51:000081デフォルトの名無しさん
2006/03/01(水) 02:51:33簡潔に分かりやすく書いてあると思うけど。
0082デフォルトの名無しさん
2006/03/01(水) 03:15:52そちらに退散します!!
0083デフォルトの名無しさん
2006/03/01(水) 06:35:50records.oldというファイルを元に清算して
records.newというファイルに書き込むというのは成功したんですが
そのrecords.newをrecords.oldという名前に変更して保存したいんですが
どんな風にすればよいのでしょうか?
検索してみたらrename()という関数があるみたいなんで
rename("records.new","records.old");
とやってみましたが、全然変わらないです。
こんな時間に質問してもなんですが体育座りして待ってます。
ではお願いします。
0084デフォルトの名無しさん
2006/03/01(水) 06:46:47標準Cにファイル削除の機能は無かったはず
環境依存スレ池
0085デフォルトの名無しさん
2006/03/01(水) 08:23:420086デフォルトの名無しさん
2006/03/01(水) 09:16:12008785
2006/03/01(水) 09:22:030088デフォルトの名無しさん
2006/03/01(水) 09:25:32JM見たら確かに準拠ANSI Cって有ったな
スマソ、見落としてた
008983
2006/03/01(水) 12:06:52というか、皆さんならこんな場合どうしてるんですか?
プラットフォームに関係なく
最新のデータを清算後にリネームする場面はいくらでもあると思うんですが。
実際、自分もこの後UNIXに移さないといけないですし。
009083
2006/03/01(水) 12:29:43ttp://www.ecs.shimane-u.ac.jp/~hamaguchi/class/c-language/c-lan_12.htm
ttp://www9.plala.or.jp/sgwr-t/lib/rename.html
0091デフォルトの名無しさん
2006/03/01(水) 12:40:47まず、エラー要因の調査くらいしろ。
0092デフォルトの名無しさん
2006/03/01(水) 13:03:040093デフォルトの名無しさん
2006/03/01(水) 14:03:46WindowsならWinAPIのMoveFile類も試してみろ。
当然スレ違いだからWinAPIについて聞きたいときにはVC++やWinAPIのスレで聞くこと。
0094デフォルトの名無しさん
2006/03/01(水) 15:08:48マルチか…。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1999370
0095age
2006/03/01(水) 16:35:09のですが、70%以上が"_fini"に費やされていました。
この関数はなんなのでしょうか?(おそらくfprintf関連かと予想しています)
また、この"_fini"はfprintfの使用を控える以外には最適化する方法は
あるのでしょうか?
すいませんが、よろしくお願いします。
0096デフォルトの名無しさん
2006/03/01(水) 17:08:52>>1
>初心者なのですが
見苦しい言い訳だ。
0097デフォルトの名無しさん
2006/03/01(水) 18:25:08「自称初心者」を言い訳としか捉えられない人w
こういう人って自分にも思い当たる節があるんだろうな…。
テメーの使えねー脳みそのレベルを教える側の為の指針として明示してくれてんだよ。
例えそれが良い解決法だったとしても馬鹿にはあまり難しいこと教えても理解できないだろ?
そいつを防ぐ為の予防策だよ。ムカつくんなら教えなくていい。
0098↑
2006/03/01(水) 18:28:270099デフォルトの名無しさん
2006/03/01(水) 18:30:08プ ロ フ ァ イ ル 見 せ ろ
010095
2006/03/01(水) 18:38:52環境はAMD Opteronの64bitでlinuxマシンです。
gccのversionは3.2.3です。
time seconds seconds calls ns/call ns/call name
71.51 4827.46 4827.46 8729093182 553.03 553.03 _fini
17.78 6027.56 1200.10 2504400000 479.20 479.20 main
5.66 6409.80 382.24 init_by_array
2.41 6572.50 162.70 next_state
1.57 6678.29 105.79 init_genrand
0.66 6723.16 44.87 genrand_int32
0.25 6740.28 17.12 __libc_csu_fini
0.10 6747.21 6.93 __libc_csu_init
0.06 6751.22 4.01 __do_global_ctors_aux
010195
2006/03/01(水) 18:41:58よろしくお願いします。
time seconds name
71.51 4827.46 _fini
17.78 1200.10 main
5.66 382.24 init_by_array
2.41 162.70 next_state
1.57 105.79 init_genrand
0.66 44.87 genrand_int32
0.25 17.12 __libc_csu_fini
0.10 6.93 __libc_csu_init
0.06 4.01 __do_global_ctors_aux
0102デフォルトの名無しさん
2006/03/01(水) 18:42:56勝手に端折るな
0103デフォルトの名無しさん
2006/03/01(水) 18:47:22MT法ですか・・・
_finiってmainのあとに実行される関数じゃなかったけ?
010495
2006/03/01(水) 18:55:56すいませんでした。以下残りの部分です。
index % time self children called name
<spontaneous>
[1] 91.7 162.70 6027.56 next_state [1]
6027.56 0.00 227908589/227908589 _fini <cycle 1> [3]
-----------------------------------------------
[2] 89.3 6027.56 0.00 227908589+11005584593 <cycle 1 as a whole> [2]
1200.10 0.00 2504400000 main <cycle 1> [4]
-----------------------------------------------
29059238427 _fini <cycle 1> [3]
8501184593 main <cycle 1> [4]
6027.56 0.00 227908589/227908589 next_state [1]
[3] 71.5 4827.46 0.00 8729093182+29059238427 _fini <cycle 1> [3]
2504400000 main <cycle 1> [4]
29059238427 _fini <cycle 1> [3]
-----------------------------------------------
2504400000 _fini <cycle 1> [3]
[4] 17.8 1200.10 0.00 2504400000 main <cycle 1> [4]
8501184593 _fini <cycle 1> [3]
-----------------------------------------------
010595
2006/03/01(水) 19:03:36はい、MT法です。とってきたのをそのまま用いているだけですが…。
>_finiってmainのあとに実行される関数じゃなかったけ?
うーん、そうなんですかね。
とりあえず、今回用いているプログラムには_finiという関数名
は見当たらないです。
0106デフォルトの名無しさん
2006/03/01(水) 19:04:330107デフォルトの名無しさん
2006/03/01(水) 19:07:19Linuxいじったことねえからな〜
0108デフォルトの名無しさん
2006/03/01(水) 19:13:44http://www.linux.or.jp/JM/html/LDP_man-pages/man3/dlopen.3.html
なんか後始末する関数?みたいですね。
0109デフォルトの名無しさん
2006/03/01(水) 19:16:30ttp://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/miscellaneous.html
の
>5.2. ライブラリのコンストラクタ関数およびデストラクタ関数
あたりが参考になるかも?
古いデストラクタを制御する関数らしい
0110デフォルトの名無しさん
2006/03/01(水) 19:23:250111デフォルトの名無しさん
2006/03/01(水) 19:28:17何らかの後始末をするルーチンのことを総称してそう呼んでるのでは?
011295
2006/03/01(水) 19:28:37どうもありがとうございます。
読んだ感じでは、ライブラリと関係があるように思われるのですが、
ライブラリというのは用いていないと思います。
(#includeはmath.hとstdio.hだけです)
ただ、.cのファイル10個ぐらいを直接gccでコンパイルしているのですが
そういった作業に問題があるのでしょうか?
すいません、正直あまりよく分かっていませんが、よろしくお願いします。
0113デフォルトの名無しさん
2006/03/01(水) 20:26:400114デフォルトの名無しさん
2006/03/01(水) 20:30:17すべての {・・・} の外
0115デフォルトの名無しさん
2006/03/01(水) 20:35:17サンクス
0116デフォルトの名無しさん
2006/03/01(水) 21:01:39ただし、参照しているところよりも上で定義されていなければならない。
0117デフォルトの名無しさん
2006/03/01(水) 21:11:54前方でも宣言すればできるが…。
0118デフォルトの名無しさん
2006/03/01(水) 21:24:15#include <stdio.h>
int x = 1;
int main(void)
{
int x = 3;
{
extern int x;
printf("%d\n", x);
}
printf("%d\n", x);
return 0;
}
0119デフォルトの名無しさん
2006/03/02(木) 03:10:46コマンドラインオプションのやり方がわからないので教えていただきたいです、
お願いします。ヘルプ見たのですが、どうもわからなくて・・・
0120デフォルトの名無しさん
2006/03/02(木) 03:32:40[実行]->[コンパイル時パラメータ]で開く設定ダイアログの実行のタブで
入力する。
0121デフォルトの名無しさん
2006/03/02(木) 03:48:28Borland C++ にすることをお勧めする
0122デフォルトの名無しさん
2006/03/02(木) 08:08:410123デフォルトの名無しさん
2006/03/02(木) 08:10:400124デフォルトの名無しさん
2006/03/02(木) 08:12:260125デフォルトの名無しさん
2006/03/02(木) 08:57:44Borland C++ならVirtualAlloc使えるだろ。
0126デフォルトの名無しさん
2006/03/02(木) 09:24:17そんな「高レベル」な話じゃないだろ
おおかた単にスタック調整の方法を知らないだけ
0127デフォルトの名無しさん
2006/03/02(木) 11:14:300128デフォルトの名無しさん
2006/03/02(木) 11:32:150129デフォルトの名無しさん
2006/03/02(木) 11:32:210130デフォルトの名無しさん
2006/03/02(木) 11:34:360131デフォルトの名無しさん
2006/03/02(木) 11:36:22%%
0132デフォルトの名無しさん
2006/03/02(木) 11:40:300133デフォルトの名無しさん
2006/03/02(木) 11:48:14ス レ 違 い の 相 手 を す る な
0134127
2006/03/02(木) 12:04:060135デフォルトの名無しさん
2006/03/02(木) 12:40:49printf( "%c", '%' );
0136デフォルトの名無しさん
2006/03/02(木) 13:01:200137デフォルトの名無しさん
2006/03/02(木) 13:10:350138デフォルトの名無しさん
2006/03/02(木) 14:03:170139デフォルトの名無しさん
2006/03/02(木) 14:08:230140デフォルトの名無しさん
2006/03/02(木) 14:14:33int printf( const char *format, ...)
{
putchar('%');
}
void main()
{
printf(NULL);
}
0141デフォルトの名無しさん
2006/03/02(木) 14:35:01printf("/O\n");
0142デフォルトの名無しさん
2006/03/02(木) 14:56:020143デフォルトの名無しさん
2006/03/02(木) 15:38:230144デフォルトの名無しさん
2006/03/02(木) 16:05:190145デフォルトの名無しさん
2006/03/02(木) 16:17:13lcc file名 のように書いていただければありがたいのですが。
0146デフォルトの名無しさん
2006/03/02(木) 17:42:40オプションはlccとファイル名の間に空白で区切って指定する。
つうか個別のコンパイラの話はスレ違い。
0147デフォルトの名無しさん
2006/03/02(木) 18:50:57void strcpy(char *to,char *from){
while(*to++ = *from++);
}
と書くとWarningが出るんでしょうか。
0148デフォルトの名無しさん
2006/03/02(木) 18:51:29if文で代入しているから
0149デフォルトの名無しさん
2006/03/02(木) 18:56:39==を誤って=と書き間違えてないか、と警告しているわけだ
0150デフォルトの名無しさん
2006/03/02(木) 18:57:07>>147のどこにif文があるのかと(ry
>>147
(whileの)条件式で代入しているため。
0151デフォルトの名無しさん
2006/03/02(木) 19:03:350152デフォルトの名無しさん
2006/03/02(木) 19:07:180153デフォルトの名無しさん
2006/03/02(木) 19:07:260154デフォルトの名無しさん
2006/03/02(木) 19:15:27こちらで聞いてみては?
http://pc8.2ch.net/test/read.cgi/tech/1141294369/
0155デフォルトの名無しさん
2006/03/02(木) 19:58:43成程。
ありがとうございます。
0156デフォルトの名無しさん
2006/03/02(木) 22:02:270157デフォルトの名無しさん
2006/03/03(金) 12:13:10あれは制御式ってゆうんだよ
これだから学のないやつは
0158デフォルトの名無しさん
2006/03/03(金) 12:15:28↓
→ ゆう ←
↑
0159デフォルトの名無しさん
2006/03/03(金) 12:28:31その名前を知らないからって何か困る事でも?
0160デフォルトの名無しさん
2006/03/03(金) 13:45:50regexecを使ってみたのですが
一行内で複数回マッチさせることができません
どのようにしたらいいでしょうか?orz
0161デフォルトの名無しさん
2006/03/03(金) 14:16:280162デフォルトの名無しさん
2006/03/03(金) 17:46:31スレ違い
0163デフォルトの名無しさん
2006/03/03(金) 19:54:50pmatch[] とか使えばいんじゃないか?
0164デフォルトの名無しさん
2006/03/03(金) 19:56:13ああ。そうか。ANSI C とかとは関係ないな。
regexはPOSIXだ。
0165デフォルトの名無しさん
2006/03/03(金) 20:05:200166デフォルトの名無しさん
2006/03/03(金) 20:48:32forやwhileで遅延ループすると高負荷になってしまって。
0167デフォルトの名無しさん
2006/03/03(金) 20:52:470168デフォルトの名無しさん
2006/03/03(金) 21:36:43sleep あたりかな。
0169デフォルトの名無しさん
2006/03/03(金) 21:50:43標準で同等のは無かった希ガス
0170デフォルトの名無しさん
2006/03/03(金) 21:51:51処理系が変わったらそこだけ変えればいいようにしておく
てのがいいと思う。
# ifdef __unix__
void delay(int time) { sleep(time); }
# elif windows
void delay(int time) { Sleep(time); // だっけ? }
# else
void delay(int time) { forやwhileで遅延ループ }
# endif
てな感じでプリプロセッサに切り替えさせればいい。
0171デフォルトの名無しさん
2006/03/04(土) 00:03:110172デフォルトの名無しさん
2006/03/04(土) 00:09:430173デフォルトの名無しさん
2006/03/04(土) 00:41:290174デフォルトの名無しさん
2006/03/04(土) 01:19:360175デフォルトの名無しさん
2006/03/04(土) 02:10:580176デフォルトの名無しさん
2006/03/04(土) 02:16:340177デフォルトの名無しさん
2006/03/04(土) 02:29:31>void delay(int time) { Sleep(time); // だっけ? }
エラー。
0178デフォルトの名無しさん
2006/03/04(土) 07:12:24例えばこんな仕様のもの・・・
replace(char *dest, char *src, char *target, char *alternative)
あるいは
replace(char *str, char target, char alternative)
など・・・何か、見つからない・・・
C++にはあるのでしょうか?
0179デフォルトの名無しさん
2006/03/04(土) 08:28:20Cの標準ライブラリにはない。
C++の標準ライブラリにもそのような置換をする関数はない。
(指定した箇所を指定した文字列で置換する関数はあるが、検索して置き換えるというものはない)
1から作るのが面倒なら置換を持った正規表現のライブラリを探せばいいと思う。
0180デフォルトの名無しさん
2006/03/04(土) 10:26:38strstr()/strchr()とsprintf()を組み合わせれば数行でできるよ。
0181デフォルトの名無しさん
2006/03/04(土) 10:34:10>176
チャンクって何ですか?
0182デフォルトの名無しさん
2006/03/04(土) 11:06:24>>1のテンプレより
>質問する前には最低限検索を。
検索しても理解できなかったんだな。
そんな低能は芯だほうがいいね。
0183デフォルトの名無しさん
2006/03/04(土) 11:40:50チャンクって何ですか?
0184デフォルトの名無しさん
2006/03/04(土) 11:43:52http://www.usagi-goten.com/jp/AVI_structure.html
0185デフォルトの名無しさん
2006/03/04(土) 11:49:270186デフォルトの名無しさん
2006/03/04(土) 11:49:430187デフォルトの名無しさん
2006/03/04(土) 11:58:57みなさんは普通、チャンクをどのように使用しますか?
ログ?
0188デフォルトの名無しさん
2006/03/04(土) 12:00:020189デフォルトの名無しさん
2006/03/04(土) 12:00:530190デフォルトの名無しさん
2006/03/04(土) 12:01:180191デフォルトの名無しさん
2006/03/04(土) 12:02:220192デフォルトの名無しさん
2006/03/04(土) 12:04:30マルチメディア系のデータの塊をチャンクと呼ぶことが多いというだけで
その質問に意味はない。質問の意図を明確にして一般スレで聞きなおせ。
0193デフォルトの名無しさん
2006/03/04(土) 12:12:59他人が作った昔のソースを眺めていたらLOGという名のディレクトリにチャンクに関する
ソースがあった。
だから、ログの機能でつかうんじゃないの?
0194デフォルトの名無しさん
2006/03/04(土) 13:22:16はい、次の人。
0195デフォルトの名無しさん
2006/03/04(土) 13:40:49後者はC++にある。けど(文字列ではなく)文字の置換になってるのがただのtypoならやっぱりない。
0196デフォルトの名無しさん
2006/03/04(土) 16:16:37if
と入力して実行しようとしたら
「コマンドの構文が誤っています。」
と出たんですが、なぜでしょうか?
因みにif.exeと拡張子まで入力したら実行できました。
0197デフォルトの名無しさん
2006/03/04(土) 16:25:02理由が良く分かりません。
#include <stdio.h>
char* aaa;
void func(void){
char bbb[] = "Hello.";
aaa = bbb;
return;
}
int main(void){
func();
printf("%s\n", aaa);
return 0;
}
0198デフォルトの名無しさん
2006/03/04(土) 16:25:24C:\>help if
0200デフォルトの名無しさん
2006/03/04(土) 16:31:46変数の寿命を考えれ
0201デフォルトの名無しさん
2006/03/04(土) 16:32:49#include <float.h>
int main()
{
double pai=3.14159265358979;
int mon=2;
float flt=1.2f;
printf("%5.2hf\n",flt);
printf("%-5.2f\n",flt);
printf("%05.2f\n",flt);
printf("%+08.2f\n",flt);
printf("%-08.2f\n",flt);
printf("%d\n",mon=3);
printf("%e\n",pai);
printf("%08.2f\n",pai);
printf("%05d\n",mon);
printf("円周率は%fです\n",pai);
printf("円周率は%lfです\n",pai);
printf("もう少し詳しい値は%10.8lfです\n",pai);
printf("もう少し詳しい値は%15.13lfです\n",pai);
printf("もう少し詳しい値は%20.18fです\n",pai);
printf("円周率は%010.2f\n",pai);
printf("円周率は%-10.2f\n",pai);
printf("円周率は%10.2f\n",pai);
return 0;
}
BCCでコンパイルしたら「警告 W8004 format04.c 7: 'mon' に代入した値は使われていない(関数 main )」
と出たんですが、いけない事なんでしょうか?
0202デフォルトの名無しさん
2006/03/04(土) 16:41:32プロならいけない事
0203デフォルトの名無しさん
2006/03/04(土) 16:42:56書いてあるとおりだと思うが・・・
0204デフォルトの名無しさん
2006/03/04(土) 16:47:11そうですか。
もう一つ質問ですが、
printf("%e\n",pai);の所を3.141593e+00ではなく3.141593e+000
printf("もう少し詳しい値は%20.18fです\n",pai);の所を
もう少し詳しい値は3.141592653589790007ですではなく
もう少し詳しい値は3.141592653589790000
にするにはどうしたらいいですか?
0205デフォルトの名無しさん
2006/03/04(土) 16:49:08何がいけないのかを聞いてるんだろ。
つーか何故最初に2を代入した?
0206デフォルトの名無しさん
2006/03/04(土) 16:52:10doubleの精度が高い環境でコンパイルして動かす。
もしくはprintf("もう少し詳しい値は%20.17f0です\n",pai);
>>205
「なにがいけないか?」ではなく「いけない事なのか否か?」を聞いてるんでしょ。
0207デフォルトの名無しさん
2006/03/04(土) 16:52:450208デフォルトの名無しさん
2006/03/04(土) 16:55:210209201
2006/03/04(土) 16:55:38なんで?
0210デフォルトの名無しさん
2006/03/04(土) 16:58:52paiは2つしかないから。
0211デフォルトの名無しさん
2006/03/04(土) 16:59:46( ゚∀゚)彡 おっpai!おっpai!
⊂彡
0212デフォルトの名無しさん
2006/03/04(土) 17:01:00英語ではpiと書く。
0214デフォルトの名無しさん
2006/03/04(土) 17:06:17_ ∩
( ゚∀゚)彡 おっpai!おっpai!
⊂彡
0215デフォルトの名無しさん
2006/03/04(土) 17:06:210216デフォルトの名無しさん
2006/03/04(土) 17:18:00paiotu
0217デフォルトの名無しさん
2006/03/04(土) 17:32:20tanはだめだろtanは
つかfloatに何かくっつケロ
0218デフォルトの名無しさん
2006/03/04(土) 18:23:470219デフォルトの名無しさん
2006/03/04(土) 18:35:29/ / /'"/ / /i | / ,,イ ,| |l|| i, | ゙i, | | ゙i, li i i, | |i. |川 / | \、ヽ .\、
// ./// /i' ./ | .l//.l| | || | リ |, 从 ゙| | ヽ |l トヘ |i,ヾ川|//i \\ \,
i' i // /l| /| |/イ| .ハ | || | ii ハ |lリi |/ ゙i, |!i|ヽi. | | ll|川/ノ ヽ\\ リ,
| l / i / { /ソ/| .| |.| ゙| |l || | /| i | リハ |-=‐''i, ||l i i' .| ソ~= ゙i |ヽヽ i, リ,
.| l/ | / .| ,メ‐'| | | | l,| ゙i,ハ .|/ | / | |メ‐| |-='"~}リ|、、| / /l//,ハ i, .|ヽ\i, | i,
||l | i!,,メ~l | i | l, |==|i、 / |/ |// -ノ{::::::::::リ:o:〉} / / /ノ / / /|| ゙i, \i,
|リ i,‐|~ |:ハ | i |.|i,メ==ヾト / リ ゙/- ヽ;;;;;;|;;メ / / / (ソ / i / || ヾ ヽi
ヾ ヽ,| リ i i| | |ハ ヘ、::::oヽ / ノ / // / __/ i"/ |!
ヽ ヽl |、.ハヘヽヽ‐‐' ノイ/ /レ / | i'
iN | ゝ、 ゙、\ /// / / / /l /
l | ヾ ヽ ヽ / / // //l/
ヽ \ 、-─ニフ / /ノ////_
゙ヽ、 \:::ノ ,,,/-‐'''"~ ̄ ̄ ̄-‐'" ̄"'''ヽ、
゙'ヽ 、 ゙'' r'"~ / ゙i,
,,,--‐''''"~~"'‐,-‐''| | / ゙i,
/‐‐、 i |,| ,,,‐'" i
,,,-/,,-'''"ヽ ,,,,-‐''-─'/ | ,,-''/ |
,,-‐'"/-'/┌‐''''/ /ノ ,,-| ,,-'ヽ/ |
0220デフォルトの名無しさん
2006/03/04(土) 18:35:59/ノ ノ_,二l///" ,-''"-''"ヽ\ ,,-'" |
//,, /-─l // ,,‐'"''" ゙i ヽ_,,-‐___ | / |
,,-''~ /-‐''/ /‐"~ヽ,,メ=ニ二 ̄ 、 Y ,, |
,,-'~ メ‐''"~| ,,l,,-‐'''"~--──-、,,_゙"''ヽ-、,,_゙''‐-、| / |
./ {,,-,r-''" ,-‐''~'''''─-,-、,,_゙ヽ、゙'''ヽ-、゙''ヽ、∨ }
., ' ,,,/ ‐''''~~ ̄≧-、,,, / /ヽ-、-゙''ヽ-、゙"''メ, i
/ /''" ,,-‐'"~ ,,,-‐''---、,/_ ゙/ヽ-、 ̄"'ヽi |
. i / ,,,,/~ ....::::::.:.. \、/ ゙/ヽ、 ヽ. |
.{ ,,-'''i'" エ二,,,,,,,,,,,,,,;;;;、,,;).:.:.:: ゙ヾ、 / ゙メ、ヽ. |
"i, ,,-イ‐/ヽ ___,,,,,-‐':.:.:.:.:.: \、 ノ /ヽ, ノ
∨~ |''"/''ヽ ,-'゙i ヾ / l ゙i,
‐'" |// ゙メ、 ,/// ゙、 ∧ソ./} }
0221デフォルトの名無しさん
2006/03/04(土) 18:52:47二人とも何を貼っている?
0222デフォルトの名無しさん
2006/03/04(土) 18:57:21おもわず、ちんこがたちました
0223デフォルトの名無しさん
2006/03/04(土) 19:08:150224デフォルトの名無しさん
2006/03/04(土) 19:30:27下のA.txtをインプットすると、B.txtがアウトプットされるC++プログラムを作りたいです。
while{ }を使うことも条件ですが、なかなかうまくイキマセン・・・。
while{ }で文字カウントする方法を中心に教えてください。
A.txt の内容-------------------
ll chA chI
ll chU chE
ll chO jyo
ll shi shu
ll she sho l
nyi nyu nyo
-------------------------------
↓↓
↓↓
B.txt の内容-------------------
母音の数、行数、文字数。
Number of a's: 1
Number of e's: 2
Number of i's: 3
Number of o's: 4
Number of u's: 3
Number of lines: 5
Number of characters: 68
-----------------------------------
0225デフォルトの名無しさん
2006/03/04(土) 19:43:41おまえみたいな奴は社会に出てもお荷物になるだけだから
0226デフォルトの名無しさん
2006/03/04(土) 20:34:080227デフォルトの名無しさん
2006/03/04(土) 20:38:01>NULL
>
>NULL は、多くのポインタ演算およびポインタ関数で使用される NULL ポインタの値です。
MSDN殺す
0228デフォルトの名無しさん
2006/03/04(土) 20:41:05sscanfでやるのは限界があるような気がします。
そこで考えたのが、sprintfの反復試行による分割なのですが、効率を考えると気が進みません。
定石ともいえる方法はどんな方法でしょうか?
0229デフォルトの名無しさん
2006/03/04(土) 20:42:25タブ区切りで配列に入れることが目的です。
0230デフォルトの名無しさん
2006/03/04(土) 20:45:280231デフォルトの名無しさん
2006/03/04(土) 20:46:520232デフォルトの名無しさん
2006/03/04(土) 21:05:38ウィルスの作成、スパムツールの作成、ワームの作成、
0233デフォルトの名無しさん
2006/03/04(土) 21:18:30ありがとうございます。
マジっすか、もうちょっと調べてみます。
0234デフォルトの名無しさん
2006/03/04(土) 21:19:18ありがとうございます。
勉強するのやめます。
0235デフォルトの名無しさん
2006/03/04(土) 21:19:25AIが止まらない! を読むんだ
0236デフォルトの名無しさん
2006/03/04(土) 21:24:44ただしこれだと行末に来たのかどうかが分からない。
0237デフォルトの名無しさん
2006/03/04(土) 21:26:370238デフォルトの名無しさん
2006/03/04(土) 21:28:58\tを\0に変換。
先頭をatoi。strlen+1だけ後ろにずれる。…というのを末尾まで繰り返す。
0239デフォルトの名無しさん
2006/03/04(土) 21:31:16イミナサス
0240デフォルトの名無しさん
2006/03/04(土) 21:34:16結構好きだw
アセンブリも使えるようになりたい俺
0241デフォルトの名無しさん
2006/03/04(土) 22:57:310242デフォルトの名無しさん
2006/03/04(土) 23:09:110243デフォルトの名無しさん
2006/03/04(土) 23:11:190244デフォルトの名無しさん
2006/03/04(土) 23:18:43�d
でも色んな種類があるんだな(´・ω・`)迷う
0245デフォルトの名無しさん
2006/03/04(土) 23:18:580246デフォルトの名無しさん
2006/03/04(土) 23:21:300247デフォルトの名無しさん
2006/03/04(土) 23:29:340248デフォルトの名無しさん
2006/03/04(土) 23:44:090249デフォルトの名無しさん
2006/03/04(土) 23:50:53strtok() で分割したトークンに対して sscanf() で変換するというのを
繰り返せばいいのではないだろうか。
0250デフォルトの名無しさん
2006/03/04(土) 23:56:19OS作成。組み込み用マイコンなどのROM作成。普通のアプリ。
など、たいていのことは出来てしまうが、大規模なソフトを作る
場合は注意が必要。というか、何でもCで出来るからといって
何でもCを使うのはやめとけ。
0251デフォルトの名無しさん
2006/03/05(日) 00:14:09*((char*)d+n)=0;
を1命令でやってくれる関数ないですか?
0252デフォルトの名無しさん
2006/03/05(日) 00:20:52一命令でこなす関数と言うかCPUはシラね
つ【strlcpy】
0253デフォルトの名無しさん
2006/03/05(日) 00:21:25sprintf(d, "%.*s", n, s);
0254デフォルトの名無しさん
2006/03/05(日) 00:28:33*(strncpy(d, s, n) + n) = 0;
0255デフォルトの名無しさん
2006/03/05(日) 00:29:460256デフォルトの名無しさん
2006/03/05(日) 00:31:58サンクス。BSD系のものですね。
しかし何でWikipediaに載ってるんだw
0257デフォルトの名無しさん
2006/03/05(日) 00:39:340258デフォルトの名無しさん
2006/03/05(日) 00:58:260259デフォルトの名無しさん
2006/03/05(日) 01:07:340260デフォルトの名無しさん
2006/03/05(日) 01:44:59C言語でプログラムを作り、H8マイコンに入力して、オシロスコープに
文字(アルファベットなど)を表示させるという実験をしているのですが、
どう考えたらいいか分かりません。sin波形や円は出せたのですが、文字に
ついてはサッパリです。どなたか分かる方、考え方を教えて下さい。
0261デフォルトの名無しさん
2006/03/05(日) 01:46:46プログラム関係ない
0262デフォルトの名無しさん
2006/03/05(日) 01:51:000263デフォルトの名無しさん
2006/03/05(日) 01:52:42そんな事無いぞ
0264デフォルトの名無しさん
2006/03/05(日) 01:54:54今ググって見たがそんな機能がついてるものがあったなんて・・・
0265デフォルトの名無しさん
2006/03/05(日) 01:56:40機能なんて必要ないって。
オシロの基本の機能だけでできる。
0266260
2006/03/05(日) 02:01:30文字というのは、H8マイコンの出力をオシロで観測して、波形の
組み合わせで作るという事です。
また、この質問について、どなたかスレ誘導お願いします。
0267デフォルトの名無しさん
2006/03/05(日) 02:03:27円ではなく線を書くのはできた?
0268デフォルトの名無しさん
2006/03/05(日) 02:14:120269260
2006/03/05(日) 02:14:480270デフォルトの名無しさん
2006/03/05(日) 02:15:38struct LIST{
int val;
struct list *next;
} ;
main()
{
struct LIST root, *p;
p = &root;
p->val = ...;
for(;;){
if((p->next = (struct LIST *)malloc(sizeof(struct LIST))) ==NULL){
printf("malloc error\n");
exit(1);
}
p = p->next;
p->val = ...;
p->next = NULL;
}
}
この自分と同じ型へのポインタを持つやつの扱い方がなんかあやふやなんですが
なんか書いててすごく違和感があるんですがこの書き方は変で普通こう書くって部分はありますか?
(実際に書いてるのはこのデータ構造ではないのでこの場合特有というのではなく、一般的な話で)
0271デフォルトの名無しさん
2006/03/05(日) 02:20:35>struct LIST{
>int val;
>struct list *next;
>} ;
普通も何も、struct LIST * next;じゃないの?
>main()
これは int main()だろうな。
0272デフォルトの名無しさん
2006/03/05(日) 02:21:000273デフォルトの名無しさん
2006/03/05(日) 02:23:41まあ、しなくてもいいんだが、最後のfree()でrootだけ特別扱いになる。
0274デフォルトの名無しさん
2006/03/05(日) 02:38:29struct LIST *root = NULL;
だよな。
0276デフォルトの名無しさん
2006/03/05(日) 02:49:08実際はケースバイケースだとは思いますが、
VisualC++8[高速化オプション]+Pentium4 PCの場合
a+b と a*b の実行速度は大体何倍くらい
違うんでしょうか?
0277デフォルトの名無しさん
2006/03/05(日) 02:49:510278デフォルトの名無しさん
2006/03/05(日) 05:02:07それこそ基礎の基礎から分かるようなC言語の参考書などありますか?
0279デフォルトの名無しさん
2006/03/05(日) 05:02:230280デフォルトの名無しさん
2006/03/05(日) 05:51:03初期の俺がそうだったからわかる
0281・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/05(日) 05:57:095倍は違う
0282デフォルトの名無しさん
2006/03/05(日) 05:59:093倍くらい
0283デフォルトの名無しさん
2006/03/05(日) 06:28:320284デフォルトの名無しさん
2006/03/05(日) 06:45:130285デフォルトの名無しさん
2006/03/05(日) 08:51:21それかっこいいですね!使わせていただきます!
0286デフォルトの名無しさん
2006/03/05(日) 10:46:420287デフォルトの名無しさん
2006/03/05(日) 10:55:40プ
0288デフォルトの名無しさん
2006/03/05(日) 11:18:35ポ
0289デフォルトの名無しさん
2006/03/05(日) 12:13:22右小指でシフト押して「!」、左小指でシフト押して「=」。あほか
0290デフォルトの名無しさん
2006/03/05(日) 12:25:270291デフォルトの名無しさん
2006/03/05(日) 12:26:290292デフォルトの名無しさん
2006/03/05(日) 12:51:120293デフォルトの名無しさん
2006/03/05(日) 12:56:010294デフォルトの名無しさん
2006/03/05(日) 13:07:180295デフォルトの名無しさん
2006/03/05(日) 13:08:100296デフォルトの名無しさん
2006/03/05(日) 16:20:22全角使っちゃだめとか、文字数制限とか
0297デフォルトの名無しさん
2006/03/05(日) 16:40:41Winならパス込みで256文字以下でスペース・全角込みでもOK
0298デフォルトの名無しさん
2006/03/05(日) 16:40:44MS-DOS/Windows16ビット版は最大8文字だった。
0300デフォルトの名無しさん
2006/03/05(日) 16:51:320301デフォルトの名無しさん
2006/03/05(日) 17:03:280302デフォルトの名無しさん
2006/03/05(日) 17:08:40<iso646.h>があるだろ。
0303デフォルトの名無しさん
2006/03/05(日) 17:46:28あ、コンパイラじゃねえ
ローカル変数、関数の引数、リターンアドレス、ebpレジスタの保存値が
挙げられますが、このebpレジスタの値とは、main関数やユーザー定義関数等
での始まりのアドレスの値の事を指していると言う解釈でよろしいでしょうか?
どなたかebpレジスタの値について、大まかな説明をして頂けませんか?お願いします。
0305デフォルトの名無しさん
2006/03/05(日) 17:51:560306デフォルトの名無しさん
2006/03/05(日) 17:54:560307デフォルトの名無しさん
2006/03/05(日) 17:58:220308304
2006/03/05(日) 17:59:250309デフォルトの名無しさん
2006/03/05(日) 17:59:55アセンブラ系のスレの方がいいかもね。
うろ覚えで間違っているかもしれないけど、ebpは積まれている
現在のアドレスだったような気がする
0312309
2006/03/05(日) 18:07:36でも自己解決したならいいか。スレ汚しスマソ
0313デフォルトの名無しさん
2006/03/05(日) 19:25:270314デフォルトの名無しさん
2006/03/05(日) 19:40:080315デフォルトの名無しさん
2006/03/05(日) 20:17:220316デフォルトの名無しさん
2006/03/05(日) 20:54:18Cファイルが開けなくなってしまいました。
何が原因でしょうか?
http://www.imgup.org/iup172215.jpg
0317デフォルトの名無しさん
2006/03/05(日) 20:55:250318デフォルトの名無しさん
2006/03/05(日) 20:56:47>Visual C++ 2005 Express Editionを導入して
>削除した
から
0319デフォルトの名無しさん
2006/03/05(日) 20:59:430320デフォルトの名無しさん
2006/03/05(日) 21:02:14>>317
0321デフォルトの名無しさん
2006/03/05(日) 21:06:190322デフォルトの名無しさん
2006/03/05(日) 21:10:34Microsoft .NET Framework 2.0
Microsoft .NET Framework 2.0 日本語 Language Pack
この二つ消してみ
0323デフォルトの名無しさん
2006/03/05(日) 21:10:44C言語という物を始めてみたいのですが
OSの入れ方が分かりません。
何が原因でしょうか?
0324デフォルトの名無しさん
2006/03/05(日) 21:11:36なんでC言語始めるのにOSの入れ方聞くの?
0325デフォルトの名無しさん
2006/03/05(日) 21:13:20氏ね
0327デフォルトの名無しさん
2006/03/05(日) 21:27:15「VCExpress.c.8.0」と書いてあるところを「Cファイル」にするにはどうしたらいいですか?
>>322
削除したけど元に戻りませんでした。
0328・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG0329デフォルトの名無しさん
2006/03/05(日) 21:47:450330デフォルトの名無しさん
2006/03/05(日) 21:48:540331デフォルトの名無しさん
2006/03/05(日) 23:35:360332デフォルトの名無しさん
2006/03/05(日) 23:36:490333デフォルトの名無しさん
2006/03/05(日) 23:39:23まぁ関連付けは標準エディタにしてるけど
0334デフォルトの名無しさん
2006/03/05(日) 23:41:030335デフォルトの名無しさん
2006/03/05(日) 23:43:050336デフォルトの名無しさん
2006/03/05(日) 23:45:02でlenはbufの長さなんだが上の場合bufの最後の要素を保持する
メモリの次からbufの内容がもう一個続くという解釈でよい?
0337デフォルトの名無しさん
2006/03/05(日) 23:48:280338デフォルトの名無しさん
2006/03/05(日) 23:48:51lenが本当にbufの長さなら、バッファオーバーラン確実なわけだが
0339デフォルトの名無しさん
2006/03/05(日) 23:52:410340デフォルトの名無しさん
2006/03/05(日) 23:56:070341デフォルトの名無しさん
2006/03/05(日) 23:56:110342デフォルトの名無しさん
2006/03/05(日) 23:56:56bufの大きさはlenの2倍以上あり、
memcpyする前にbufのうち有効なデータを保持しているのはlen分だけだということでは?
0343デフォルトの名無しさん
2006/03/06(月) 00:04:000344デフォルトの名無しさん
2006/03/06(月) 00:05:530345デフォルトの名無しさん
2006/03/06(月) 00:07:350346デフォルトの名無しさん
2006/03/06(月) 00:08:49暇だから
0347デフォルトの名無しさん
2006/03/06(月) 00:29:090348デフォルトの名無しさん
2006/03/06(月) 00:38:23こうゆう宣言はどうゆう意味なの?
0349デフォルトの名無しさん
2006/03/06(月) 00:43:270350・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/06(月) 00:46:16第1引数は形式の通り。第2引数以降は、主に第一引数で与えられたパラメータで指定される。
printfの場合、%dとか%sとかの書式を判断して、第2引数以降をスタックから取り出している。
第1引数の書式を間違える第2引数以降の解釈がおかしくなる危険を伴う、諸刃の剣。
素人にはお勧めできない。
0351デフォルトの名無しさん
2006/03/06(月) 00:57:200352デフォルトの名無しさん
2006/03/06(月) 01:09:160353デフォルトの名無しさん
2006/03/06(月) 01:47:33何をすればいいんだ?
エロいお前ら教えてくれ。
0354デフォルトの名無しさん
2006/03/06(月) 02:16:300355デフォルトの名無しさん
2006/03/06(月) 04:06:530356デフォルトの名無しさん
2006/03/06(月) 04:11:43・newlibのソースを読む
・Cマガの実用ライブラリ開発講座の連載を見る
0357デフォルトの名無しさん
2006/03/06(月) 05:50:32引数個々の長さを変更できたりはしないんだが・・・ もしかして可変個数引数のことか?
# 可変長と不定長を混同する奴がときどきいるが、それ以前だな・・・
0358デフォルトの名無しさん
2006/03/06(月) 06:02:38むしろ可変個数引数っていう言い方のが聞きなれない。
0359デフォルトの名無しさん
2006/03/06(月) 06:26:59char型の変数から一文字ずつ取り出して行きたいのだが、どのような方法があるのでしょうか?
ファイルじゃないのでfgetじゃできなくて困っています。
0360デフォルトの名無しさん
2006/03/06(月) 06:31:05^^^^^^^^^^^
俺用語の典型だなw
0361デフォルトの名無しさん
2006/03/06(月) 06:43:060362デフォルトの名無しさん
2006/03/06(月) 06:51:19可変引数(variable argument)ですから
可変.{0,2}引数程度なら俺は理解してやるよ
0363デフォルトの名無しさん
2006/03/06(月) 08:55:09char型の変数には最初から1文字しか入ってないから
迷うまでもない
0364デフォルトの名無しさん
2006/03/06(月) 09:15:25char data[256], *p = data;
for(i=0; i<10; i++)
printf("%c\n", *p++);
とかこんな感じ
0365デフォルトの名無しさん
2006/03/06(月) 11:16:23forでやるならいちいちポインタ使わなくても
for(i=0;i<10;i++) printf("%c\n",data[i]);
で良くないか
0366デフォルトの名無しさん
2006/03/06(月) 13:15:59for (; *p != '\0'; ++p)
0367デフォルトの名無しさん
2006/03/06(月) 14:40:56複数バイト文字は無視していいのか? いいならいいんだが。
0368デフォルトの名無しさん
2006/03/06(月) 15:31:080369デフォルトの名無しさん
2006/03/06(月) 15:35:30勇気を出して言ってみましょう。
0370デフォルトの名無しさん
2006/03/06(月) 15:37:39一つのプロジェクトで5万行以上、総数20万行のコードを書いたら。
0371デフォルトの名無しさん
2006/03/06(月) 15:38:08・・・じゃなくて入門書をクリアしたあとは、どんなプログラムをやっていけば
いいのですか?
0372デフォルトの名無しさん
2006/03/06(月) 15:39:37そんな高レベルで中級者ですか・・・。実務経験ないので無理ですね。
では標準ライブラリの使いこなしを覚えていくのが吉という事ですね?
0373デフォルトの名無しさん
2006/03/06(月) 15:42:490374デフォルトの名無しさん
2006/03/06(月) 15:51:390375デフォルトの名無しさん
2006/03/06(月) 15:52:440376デフォルトの名無しさん
2006/03/06(月) 15:53:37↑なんて読むの?
0377デフォルトの名無しさん
2006/03/06(月) 15:55:160378デフォルトの名無しさん
2006/03/06(月) 15:55:39それはOS次第だがたいていは大丈夫。
ただエディタのテンポラリファイルとかに使われるから
間違って消されても知らないぞ。
0379デフォルトの名無しさん
2006/03/06(月) 15:56:280380デフォルトの名無しさん
2006/03/06(月) 15:57:44自分で調べられるようになったら、中級者。
0381デフォルトの名無しさん
2006/03/06(月) 15:59:37うまい言葉ですね。わかりました。結局は自分で頑張るのが普通という事でしたか。
ありがとうございました。
0383デフォルトの名無しさん
2006/03/06(月) 16:23:35int main(void)
{
char str[64];
fgets("str",64,stdin);
puts("str");
return 0;
}
質問なんですが、これを実行すると出力文字が文字化けして表示されます。
原因はなんですか?
0384デフォルトの名無しさん
2006/03/06(月) 16:23:43間違えました。
Cファイルを保存しておくフォルダの名前です。
0385デフォルトの名無しさん
2006/03/06(月) 16:26:15久々にわろたwww
0386デフォルトの名無しさん
2006/03/06(月) 16:26:42おまい、Perlユーザーだろ?
0387デフォルトの名無しさん
2006/03/06(月) 16:29:25笑わないで教えて下さいorz
>>386
それが分かるのがすごいですね。
0388デフォルトの名無しさん
2006/03/06(月) 16:31:42strは変数
""取っ払え
0389デフォルトの名無しさん
2006/03/06(月) 16:33:49あっ!!実行できた!!!ダブルクォーテーションでしたか・・・。
初歩ミスすいません。ありがとうございました。
0390デフォルトの名無しさん
2006/03/06(月) 19:20:30Perlでも効率悪いからこんな書き方すべきじゃない
0391デフォルトの名無しさん
2006/03/06(月) 19:28:15なるほど。そういう見方があるか。
たいした洞察力だな、おまいはw
0392デフォルトの名無しさん
2006/03/06(月) 19:30:010393デフォルトの名無しさん
2006/03/06(月) 19:56:19どうやっても文字が表示されてしまいます
どうすればいいんでしょうか?
0394デフォルトの名無しさん
2006/03/06(月) 20:02:160395デフォルトの名無しさん
2006/03/06(月) 20:08:250396デフォルトの名無しさん
2006/03/06(月) 20:24:290397デフォルトの名無しさん
2006/03/06(月) 20:31:40通報しま(ry
0398デフォルトの名無しさん
2006/03/06(月) 20:35:11/dev/null にリダイレクト。
0399デフォルトの名無しさん
2006/03/06(月) 20:39:160400デフォルトの名無しさん
2006/03/06(月) 20:50:39どうなる事を想定したのかも書けよ
0401デフォルトの名無しさん
2006/03/06(月) 21:03:36「初めてのC」を理解してから出直せってことだ、わかったか?
0402デフォルトの名無しさん
2006/03/06(月) 21:15:30どう見ても釣りです
本当にありがとうございました
0403デフォルトの名無しさん
2006/03/06(月) 21:16:26釣りの意味わかってないだろ?単なるボケで釣りかよw
0404デフォルトの名無しさん
2006/03/06(月) 21:17:22puts( &1["\0aiueo"] );
↓
/* puts( &1["\0aiueo"] ); */
0405デフォルトの名無しさん
2006/03/06(月) 21:21:08ソレダ!
0406デフォルトの名無しさん
2006/03/06(月) 21:22:48puts( &1["\0aiueo"] );
0407デフォルトの名無しさん
2006/03/06(月) 21:31:420408デフォルトの名無しさん
2006/03/06(月) 21:48:13晒しage
0409デフォルトの名無しさん
2006/03/06(月) 21:52:40んじゃこうか?
putchar("aiueo"[0]);
ていうか[]の中に定数使うなら putchar('a'); でいいな。
0410デフォルトの名無しさん
2006/03/06(月) 21:57:540411デフォルトの名無しさん
2006/03/06(月) 22:01:470412デフォルトの名無しさん
2006/03/06(月) 22:03:590413デフォルトの名無しさん
2006/03/06(月) 22:05:310414デフォルトの名無しさん
2006/03/06(月) 22:07:47晒しagain
# 同一人物くせえし
0415厨房
2006/03/06(月) 22:17:210417デフォルトの名無しさん
2006/03/06(月) 22:31:48メジャーなプログラミング言語の1つ。
最近はどちらかというとC++/Java/C#への足がかりに勉強する奴が多い気がする。
0418デフォルトの名無しさん
2006/03/06(月) 22:37:500419デフォルトの名無しさん
2006/03/06(月) 23:01:130420デフォルトの名無しさん
2006/03/06(月) 23:15:14・・・・・・・・・・・・・・何を書きゃいいんだ?
0421デフォルトの名無しさん
2006/03/06(月) 23:16:58printf("C言語はつまらない。\n");
0422デフォルトの名無しさん
2006/03/06(月) 23:19:05MsgBox("時代はVBだと思った。")
0423デフォルトの名無しさん
2006/03/06(月) 23:20:00でもそれだと感想文1行で終了だよ。。。はぁ。。。
0424・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG「可変長引数」で意味は通るよ。
スタックはいわゆる配列構造だからそれの長さが可変ってことで意味通るでっしゃろ。
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&oe=Shift_JIS&q=%89%C2%95%CF%92%B7%88%F8%90%94
K&Rの訳本みたら「可変引数リスト」だった。
0425デフォルトの名無しさん
2006/03/06(月) 23:32:55>>352
0426・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG0427デフォルトの名無しさん
2006/03/06(月) 23:56:01標準規格に従ってる処理系ならスイッチに関わらず引数の個数が可変な関数はスタック渡しになる。
>>352は無知だろう。レジスタ渡しだけで済むのは引数の個数が決まってる場合だけだ。
0428デフォルトの名無しさん
2006/03/07(火) 00:02:23お前の脳内規格はどうでもいいんだけど。
0429デフォルトの名無しさん
2006/03/07(火) 00:08:12。。。ただ今、ファイルを開いております。
しばらくお待ちください。
と出たまま見れない
この症状は俺だけかな?
去年は見れたんだけど・・・
0430・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNGどうみてもスタック実装です。本当にありがとうございました。
0431デフォルトの名無しさん
2006/03/07(火) 00:18:130432デフォルトの名無しさん
2006/03/07(火) 00:43:42Google先生が多数決を取った結果は↓こうなった。
可変引数 の検索結果 約 60,400 件中 1 - 10 件目 (0.23 秒)
可変長引数 の検索結果 約 27,100 件中 1 - 10 件目 (0.13 秒)
可変個引数 の検索結果 約 19,400 件中 1 - 10 件目 (0.28 秒)
可変個数引数 の検索結果 約 606 件中 1 - 10 件目 (0.17 秒)
可変引数リスト の検索結果 約 113 件中 1 - 10 件目 (0.85 秒)
# ちなみに、漏れは「可変個引数」派
0433デフォルトの名無しさん
2006/03/07(火) 00:59:320434デフォルトの名無しさん
2006/03/07(火) 01:07:580435・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNGPowerPCなんかにもスタック専用レジスタはないけどソフト的にスタック作って管理してんじゃん。
push/pop専用命令があるかどうかなんて問題じゃないと思うんだ。
0436429
2006/03/07(火) 01:30:03ttp://www.jisc.go.jp/app/pager?id=139035
0437・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG404っぽくね?
0438デフォルトの名無しさん
2006/03/07(火) 02:26:46自動変数をスタックに作らなくても実現は出来る。
引渡す時にとにかく引数が列んでいればいい。
スタック構造のデータを使うとしても、それがCPUの
持つスタックレジスタを利用したものでなくても良い。
実際のところ、リターンアドレスまで入っている場所を
バッファオーバーフローをチェックしない言語の変数
領域として使うというのは危ない設計のように思える。
せめてリターンアドレスと関係ない所に作った方がいい
んじゃないだろうか。
0439デフォルトの名無しさん
2006/03/07(火) 02:47:07アフォが多いのはわかったよ
だが、どうあがいても誤りは誤りであって
言葉遣いがおかしいのを指摘されて
まだ正式名を調べずに必死で突っぱるだけな
DQN ぶりはとりわけム板では痛いだけ
0440デフォルトの名無しさん
2006/03/07(火) 02:53:14「可変個数の実引数」と呼ばれてるよ
K&Rほど一般的ではないかもしれないが、JISの規格書だしこっちが正統だと思うんだが
0441デフォルトの名無しさん
2006/03/07(火) 02:57:00>>439
K&Rが正式とは限らない
m9(^Д^)プギャーーーッ
0442・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNGパラグラフ1の意味するところが
ハードウェアの提供するプログラムスタックでも、コンパイラあるいはランタイムの生成した
ソフトウェアスタックでもないそれ以外のものを独自実装するっちう意味なら、ちと賛同しかねる。
ハードやOS依存の手続きが必要になるので標準Cから大きく外れるやん。
> 実際のところ、リターンアドレスまで入っている場所を
> バッファオーバーフローをチェックしない言語の変数
> 領域として使うというのは危ない設計のように思える。
あと、これもちょっと違う希ガス
変数どこに置くか云々の問題じゃないと思う。
たとえばレジスタにヒープ領域のアドレスを入れ、ヒープに引数リストを置く、とかやったとしても、
結局はスタック上にリターンアドレスが置かれるわけで、バッファオーバーランによる
リターンアドレス書き換えの問題は解決のしようが無い希ガス。
【こんな風にデータが並んでますよの図】
バッファ→
■■■■■■■■■■□□□□□□
□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□
□□□□□□■■■■■■■■■■
←スタック
VC++はコンパイルオプションでバッファオーバーランを検出するCookieを設定できたと思う。
最近はハードやOSレベルでも保護機能(DEPとかNXとかXDとかいうやつ)実装してるし。
0443デフォルトの名無しさん
2006/03/07(火) 03:11:45「の」が入るようになったのね
邦訳が変わったのは気付いていなかった、これは失礼
案の定、実引数ではなく仮引数の場合もあるのは変わってないようだが
0444デフォルトの名無しさん
2006/03/07(火) 03:21:12"可変個数" の検索結果 約 285 件中 1 - 10 件目 (0.07 秒)
0445・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNGK&Rって共立出版のアレのこといってるんだよね。
アレただの訳本じゃね?
ちなみに
"可変長引数" の検索結果 約 11,100 件中 1 - 10 件目 (0.22 秒)
"可変引数" の検索結果 約 911 件中 1 - 10 件目 (0.11 秒)
"可変個数" の検索結果 約 285 件中 1 - 10 件目 (0.29 秒)
大学の教授には「可変長引数」って習った気がしたけどなおいらは。
もっともLISPとか研究で使ってる先生だけど。
0446デフォルトの名無しさん
2006/03/07(火) 03:23:30通常使うような、printf("%d:%s\n", foo, bar);程度なら全てレジスタで済むわけだ。
元々>352は>350をさしてスタックとは限らないと言っているわけで、
>350を改めて読むと第二引き数はスタックからのみ取り出すように読める。
68kのある実装では、コードスタックとデータスタックを分けていたし、
コードスタックが保護領域内ならバッファオーバーランで破壊しようがない罠。
0447デフォルトの名無しさん
2006/03/07(火) 03:24:52だからかな? 他言語の話を唐突に持ち出して強弁する人材が育つのは
0448デフォルトの名無しさん
2006/03/07(火) 03:28:12こうすれば?
□□□□□□□□□□□□□□□□
□□□□□□■■■■■■■■■■←スタック
●●●●●●●●●●●●●●●●←コード(リードオンリー)
●●●●●●●●●●●●●●●●(書き込みアクセス不可)
●●●●●●●●●●〇〇〇〇〇〇
バッファ→
■■■■■■■■■■□□□□□□
□□□□□□□□□□□□□□□□
0449デフォルトの名無しさん
2006/03/07(火) 03:28:120450・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNGASM叩かずにできるわけ?できても独自拡張丸出しじゃね?
スタックオンリーのほうが実装エレガントじゃね?
うい
"可変長引数" "C言語" の検索結果 約 775 件中 1 - 50 件目 (0.38 秒)
"可変引数" "C言語" の検索結果 約 520 件中 1 - 50 件目 (0.37 秒)
"可変個数の引数" "C言語" の検索結果 約 96 件中 1 - 50 件目 (1.96 秒)
0451デフォルトの名無しさん
2006/03/07(火) 03:34:350452デフォルトの名無しさん
2006/03/07(火) 03:39:11OS依存の手続きはC言語とは関係のない話だ。
間にラッパーのライブラリ入れればいい。
それが嫌ならOSごと全部再コンパイル。
0453・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNGつか、どれが間違いだとか宗教じみてるから辞めない?
正規表現のバックリファレンスが前方参照か後方参照か並に不毛だと思う。
0454デフォルトの名無しさん
2006/03/07(火) 03:42:500455デフォルトの名無しさん
2006/03/07(火) 03:42:51"ナル文字"とかいう言葉使ってるやつだろ?
0456デフォルトの名無しさん
2006/03/07(火) 03:45:25俺は従わないって主張されちゃ勝手にしろとしか言いようがない
0457デフォルトの名無しさん
2006/03/07(火) 03:48:290458・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG0459デフォルトの名無しさん
2006/03/07(火) 03:49:510460デフォルトの名無しさん
2006/03/07(火) 03:50:190461・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG言葉狩りのためじゃないと思う。
0462デフォルトの名無しさん
2006/03/07(火) 03:59:37とりあえずソース出せ
0463デフォルトの名無しさん
2006/03/07(火) 04:00:24どうも耳ふさいじゃったようなんで、こっちもやめとくわ
0464・∀・)っ-○●◎- ◆Pu/ODYSSEY
NGNG0465デフォルトの名無しさん
2006/03/07(火) 04:03:08あんたも言葉遣いがおかしいよ
人に物事を頼んだり尋ねたりするときは相応の態度で言いな
0466デフォルトの名無しさん
2006/03/07(火) 04:06:11同時に標準規格化されたものと思い込んでる痛い奴が居るスレはここですね?
0467デフォルトの名無しさん
2006/03/07(火) 04:07:590468デフォルトの名無しさん
2006/03/07(火) 04:14:0292 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/01(水) 13:03:04
164 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/03(金) 19:56:13
178 名前:デフォルトの名無しさん[] 投稿日:2006/03/04(土) 07:12:24
467 名前:デフォルトの名無しさん[] 投稿日:2006/03/07(火) 04:07:59
「ANSI」なんてこのスレで300レス近く発した人間は居ない模様
0469デフォルトの名無しさん
2006/03/07(火) 04:17:150470デフォルトの名無しさん
2006/03/07(火) 06:44:15なら可変.{0,4}引数まで理解したるか
0471デフォルトの名無しさん
2006/03/07(火) 07:51:09可変長引数:引数の個数って長い短い・・・なのか? 日本語おかしくね?
可変個数引数:ちと冗長。可変個引数でいい。
可変引数リスト:何が可変なのかよく分からん。
0472デフォルトの名無しさん
2006/03/07(火) 08:37:55>可変長引数:引数の個数って長い短い・・・なのか? 日本語おかしくね?
「長い文字列」に対して、「文字の個数が長い短いっておかしくね?」って言ってるようなもんだぞ
0473デフォルトの名無しさん
2006/03/07(火) 08:56:110474デフォルトの名無しさん
2006/03/07(火) 10:26:29「Cの規格書に書いてある言い回しだけが正しい」ってのはただの基地外。何時言い回しまで規格化されたんだよw
0475デフォルトの名無しさん
2006/03/07(火) 10:33:010476デフォルトの名無しさん
2006/03/07(火) 10:40:550477デフォルトの名無しさん
2006/03/07(火) 10:41:59ニート乙
0478デフォルトの名無しさん
2006/03/07(火) 10:48:28規格書にない用語はおかしい!と机を叩いて頑張るアレな>>475であった。
0479デフォルトの名無しさん
2006/03/07(火) 11:01:040480デフォルトの名無しさん
2006/03/07(火) 11:03:170481デフォルトの名無しさん
2006/03/07(火) 11:05:58普通は個々のプログラミング言語とは切り離して行われるもの。
引数の個数が可変な函数はC以前の言語から存在したものでCから始まったものじゃないし。
特許文書とか規格書とか書いたこと無い奴にはわからんだろうなぁ。
0482デフォルトの名無しさん
2006/03/07(火) 11:06:30→「汎用」これは何て読むんですか?
ばんよう でも ぼんよう でも無いですし、何て言っているのか教えて下さい。
0484ぬるぽ
2006/03/07(火) 11:21:040485デフォルトの名無しさん
2006/03/07(火) 11:24:30ttp://dictionary.goo.ne.jp/search.php?MT=%C8%C6%CD%D1&kind=jn
>>484
がっ
0486デフォルトの名無しさん
2006/03/07(火) 11:25:03謝れ!エヴァンゲリオンに謝れ!
0487デフォルトの名無しさん
2006/03/07(火) 11:31:08凄まじくかっこ悪い呼び名なんですね・・・。
やっぱり皆大好きだ〜〜〜〜〜〜〜(ノ∀`)ありがとうございます。満足しました。
>>486
エヴァンゲリオン知ってれば読めるって事かな?9巻しか持ってないです。
0488デフォルトの名無しさん
2006/03/07(火) 11:35:270489デフォルトの名無しさん
2006/03/07(火) 11:58:380490デフォルトの名無しさん
2006/03/07(火) 12:02:350491デフォルトの名無しさん
2006/03/07(火) 12:04:05まあ10巻はこれからだからね。原作も何もかもあるのにこれほどゆっくりな連載も珍しい。
>>483
http://dictionary.goo.ne.jp/search.php?MT=%A4%CF%A4%F3%A4%E8%A4%A6&kind=jn&mode=0&base=1&row=3
0492デフォルトの名無しさん
2006/03/07(火) 16:38:05{
return "";
}
関数内から空文字列を返す方法として、上記の方法は間違ってるでしょうか?
リテラルだからリードオンリーですが、関数内のリテラルは関数の終了と同時に消滅
するのでしょうか? それともコンパイラによってまちまちなんでしょうか?
0493デフォルトの名無しさん
2006/03/07(火) 16:49:11const char * func() {return "";}
なら問題ない。リテラルはstatic同様の期間、生き続ける。
0494デフォルトの名無しさん
2006/03/07(火) 16:53:32という問いに対する答えだろうか
0495デフォルトの名無しさん
2006/03/07(火) 17:10:21return したいものが、文字列、配列、ポインタの場合に関数名に*をつけるという
解釈でよろしいですか?
>>492の関数を例としてみると、func関数は空文字列をリターンしてもらい、
func関数は空文字列の先頭アドレスの値を返す。という事ですよね?この解釈でいいのでしょうか?
0496デフォルトの名無しさん
2006/03/07(火) 17:18:07文字列は基本的にコンパイルしたときにデータセクションに置かれるから基本的にずっと生き続ける。
0497デフォルトの名無しさん
2006/03/07(火) 17:20:30そうですか。ありがとうございました!!
0498デフォルトの名無しさん
2006/03/07(火) 17:21:39ていうか、 return ""; って書いたら char * を返すことになるんだよ。
ダブルクォーテーションで括られた文字列定数はその文字の先頭を指す
char * なの。
配列の場合は、配列の名前だけ出すとそれはその配列へのポインタに
なる。char s[] = "abc"; printf("%s\n", s); と書いた時に printf()
に渡される s は char * だ。
0499デフォルトの名無しさん
2006/03/07(火) 17:31:43て事は、func関数は空文字列の先頭を指すchar *を返す訳ですね。
文字列、配列、ポインタは奥が深すぎますね・・・。
ポインタをもっと勉強しますorzありがとうございます。
0500デフォルトの名無しさん
2006/03/07(火) 18:25:13const char *
0501デフォルトの名無しさん
2006/03/07(火) 19:01:11Borlandのやつ設定がわからなかったので何かいいのがあれば教えて欲しいです。
やっぱり有料のコンパイラのほうがわかりやすいんでしょうか?
ちなみに当方プログラミング初心者です。
0502デフォルトの名無しさん
2006/03/07(火) 19:04:15Borlandでいいと思うけど。
設定ならググれば分かると思うよ。
0503デフォルトの名無しさん
2006/03/07(火) 19:19:230504デフォルトの名無しさん
2006/03/07(火) 19:27:48Borland の環境設定をやってくれるフリーソフトもある
http://www.vector.co.jp/vpack/filearea/win/prog/c/index.html
cygwin をインストールすると、gcc が設定作業なしですぐ使えたりもする
インストール中にオプション選択画面がでたら Devel の中の gcc を選択する必要あり
http://www.cygwin.com
英語が苦手な人にはつらい環境だけど、目指すレベルによっては英語は絶対に逃げられない
Borland C++ 5.5.1 は出たばかりの頃はとても優秀な印象だったけど
あれから6年、今となってはさすがに gcc の最新版に比べると見劣りがし始めている
0505デフォルトの名無しさん
2006/03/07(火) 19:39:030506デフォルトの名無しさん
2006/03/07(火) 19:42:42スレ違い
あと氏ね
0507デフォルトの名無しさん
2006/03/07(火) 19:43:13そりゃC++だ。しかも推奨されてるだけ。
まあCでもC++でもそうした方がいいという話なら同意だが。
cursesのprintwなんてフォーマット文字列がchar*型でもうコロスって感じ
0508デフォルトの名無しさん
2006/03/07(火) 20:55:53VC++ の無料版でいいじゃんかよ。
0509デフォルトの名無しさん
2006/03/07(火) 21:19:00>>505
新しいスレ作ったから、そこで
0510デフォルトの名無しさん
2006/03/07(火) 21:19:38丸投げなら宿題スレへ
0511デフォルトの名無しさん
2006/03/07(火) 21:26:19おまえの出した結論は何故か正しいが、
>>498の説明を真に受けたりすると配列の配列とポインタの配列をごっちゃにしたりしそうでこわい。
""は元々char[1]だよ。自動型変換でchar*になる(ことがある)だけ。
0512デフォルトの名無しさん
2006/03/07(火) 21:32:36ありがとうございます。早速フリーソフトを使ってみたいと思いますw
0513デフォルトの名無しさん
2006/03/07(火) 21:39:48Microsoft Visual C++ 2005 Express Edition 日本語版
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
0514デフォルトの名無しさん
2006/03/07(火) 22:05:550515デフォルトの名無しさん
2006/03/07(火) 22:32:27#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#include<stdlib.h>
void AA(char *s)
{
printf("%d\n",sizeof(s));
return;
}
int main(int argc,char* argv[])
{
char s[55];
printf("%d\n",sizeof(s));
AA(s);
return 0;
}
取得サイズが違う^0^
0516デフォルトの名無しさん
2006/03/07(火) 22:36:10そりゃそうだ、AAの中ではsはchar *型だもの。
0517デフォルトの名無しさん
2006/03/07(火) 22:37:12そりゃ違って当然。
AA() の方の sizeof は *s に対して行われている。
main() の方は s[55] に対して行われている。
0518デフォルトの名無しさん
2006/03/07(火) 22:43:46AAでちゃんと55サイズ取得できますか?
printf("%d\n",sizeof(*s));
*sに変えてもだめでした
0519デフォルトの名無しさん
2006/03/07(火) 22:45:51ヒント: AA(s); ではなく AA(&s); で渡す
0520デフォルトの名無しさん
2006/03/07(火) 22:48:23Cではポインタを渡すしかない。
#include <stdio.h>
typedef char S[55];
void AA(S *s)
{
printf("%d\n", sizeof *s);
}
int main(void)
{
char s[55];
ptintf("%d\n", sizeof (s));
AA(&s);
return 0;
}
0521デフォルトの名無しさん
2006/03/07(火) 22:48:450522デフォルトの名無しさん
2006/03/07(火) 22:52:23もう答えは出ているが、要するにC言語は配列単体で配列全体を渡せない、ということ。
構造体の中に入れてしまうしかない。しかしあまりに大きい構造体をまるごと渡すのは
後々それ全体をコピーすることになるかも知れず、無駄な処理になる可能性が高い。
0523デフォルトの名無しさん
2006/03/07(火) 22:56:48typedef 使ってて 55 が2回かよ・・・
0524デフォルトの名無しさん
2006/03/07(火) 22:57:11構造体でくるんでみます。
0525デフォルトの名無しさん
2006/03/07(火) 23:00:03このスレに常駐して全く無価値な突込みをし続けるのが君の生き甲斐なのか?
0526デフォルトの名無しさん
2006/03/07(火) 23:02:50いいからコードで恥晒すなよ
0527デフォルトの名無しさん
2006/03/07(火) 23:03:06#define FUNC(data) \
FuncA(#data, data)
のように設定し、
int ABC = 10;
FUNC(ABC);
を設定すると、
FuncA("ABC", 10);
になるとおもうのですが、これを可変引数で行うことは可能ですか?
つまり、
FUNC(ABC, DEF, GHI);を
FuncA("ABC", ABC, "DEF", DEF, "GHI", GHI);
にしたいのです。
何か方法がありましたら教えてください。
0528デフォルトの名無しさん
2006/03/07(火) 23:04:02メモリの開放自動でやってくれるのですが
98や2kは自動でやってくれますかね?
自動じゃないならちゃんと組まないと^^;
0529デフォルトの名無しさん
2006/03/07(火) 23:07:07void FuncA(const char *, ...);
FuncA(X(ABC), X(DEF), X(GHI));
# 俺はこんな馬鹿な真似はしないが
0530デフォルトの名無しさん
2006/03/07(火) 23:09:19>1
0531デフォルトの名無しさん
2006/03/07(火) 23:11:19ありがとうございます。
やっぱり馬鹿な真似ですかね。
実際に使う際にいちいち他人に
FuncA("Data", Data);
みたいに設定してもらうのではなく
FuncA(Data);
にして中で細工できないものかと考えていたので・・・
可変引数にしなければ簡単ですがね〜・・・
0532デフォルトの名無しさん
2006/03/07(火) 23:13:12スレ違いだが、大事な基本は持ち合わせているようだな
大きくなっても忘れるなよ
0533デフォルトの名無しさん
2006/03/07(火) 23:14:35ん? 何か縛りでもあるのか??
0534デフォルトの名無しさん
2006/03/07(火) 23:17:33実はこれ、Trace関数の機能の一部で格納データを固定にすると
変更があったときいっせいに変更するのも面倒なので可変個数の引数にしたいのです。
(規定数以上の個数のデータがセットされた場合は無視する)
なるべく、関数の中身で細工し、呼び出しは簡単に・・・をめざしてます。
0535デフォルトの名無しさん
2006/03/07(火) 23:19:58コマンド名と関数の辞書みたいのか?
0536デフォルトの名無しさん
2006/03/07(火) 23:45:11VAR1:40 VAR2:14というような、「変数名:中身」出力になるような
関数TRACEがほしい、ってことでそ?可変数で。
0537デフォルトの名無しさん
2006/03/07(火) 23:49:55そんな感じです。
特に、バイナリで出力して、バイナリエディタで見る場合、変数名がないと、
その値がどのデータを示しているのかわからないので。
C99仕様だと可能だと聞いたのですが、コンパイラが対応していないので
C99に頼らずにできないものかと考えております。
0538デフォルトの名無しさん
2006/03/08(水) 00:28:420540デフォルトの名無しさん
2006/03/08(水) 06:35:06この問題が解けなくて困っています。
何回 入力しますか? と表示し
数字を入力 例えば 3 と入れた場合
1
22
333
6といれた場合
1
22
333
4444
55555
666666
となる プログラムです。
do whileを2つ使用しなくてはいけません。
わかるかたいたら教えてください!
0541デフォルトの名無しさん
2006/03/08(水) 08:11:39C/C++の宿題を片付けます 62代目
http://pc8.2ch.net/test/read.cgi/tech/1141363718/l50
0542デフォルトの名無しさん
2006/03/08(水) 08:17:55たしかにデバッグ時はデバッガで十分です。
しかし、私の作ってるのはメカ制御のため
実際には外で稼動し、何か問題があれば上位システムのログ
を見て解析します。
なのでエラー発生時にトレースコマンドみたいなのを上位から送信してもらい
内部トレースを上位へ報告、そのログをバイナリエディタで確認・・・という流れです。
0543デフォルトの名無しさん
2006/03/08(水) 09:21:50そういうことなら、なおさらあんな真似はおかしいんじゃね?
障害分析は片手間じゃなくシステムの根底から計画的に組み入れるものだぜ
0544デフォルトの名無しさん
2006/03/08(水) 18:11:26乱数発生器にMTを使用しているのですが
乱数を使用した計算プログラムを作ってるうちにプログラムが常に同じ解を返す事に気がつきました
しかもまったく同じソースを再ビルドしても同じ値を返してしまいます
そんなことねーですか?
0545デフォルトの名無しさん
2006/03/08(水) 18:14:420546デフォルトの名無しさん
2006/03/08(水) 18:15:51コンパイル時に値が決定されるんですか(;´д`)
0547デフォルトの名無しさん
2006/03/08(水) 18:16:240548デフォルトの名無しさん
2006/03/08(水) 18:22:40納得いかねーですが、これにtimeでも与えて解決する事にします...
0549デフォルトの名無しさん
2006/03/08(水) 18:22:55unsigned long int next = 1;
int rand(void){
next = next * 1103515245 + 12345;
return (unsigned int)(next / 65536) % 32768;
}
void srand(unsigned int seed){
next = seed;
}
0550デフォルトの名無しさん
2006/03/08(水) 18:25:33そもそもSeedを与えるAPIが何のために存在すると思ってるんだ
0551デフォルトの名無しさん
2006/03/08(水) 18:27:240552デフォルトの名無しさん
2006/03/08(水) 18:31:26擬似乱数であることには変わりないよ。
本当の意味での乱数が欲しいなら/dev/randでも使っとけ。
0553デフォルトの名無しさん
2006/03/08(水) 18:43:150554デフォルトの名無しさん
2006/03/08(水) 18:49:560555デフォルトの名無しさん
2006/03/08(水) 18:53:0932767までのランダムな数を得るためじゃなかったっけ?
0556デフォルトの名無しさん
2006/03/08(水) 18:53:560557デフォルトの名無しさん
2006/03/08(水) 19:06:570558デフォルトの名無しさん
2006/03/08(水) 19:16:37良い参考書を教えて下さい。
0559デフォルトの名無しさん
2006/03/08(水) 19:19:450560デフォルトの名無しさん
2006/03/08(水) 19:44:55速度が問題なら既存のデータを買うのが一番だが
そこをわざわざ自作するケースに於いて、速度は度外視だと思う
0561デフォルトの名無しさん
2006/03/08(水) 20:40:23しかし、きちんと設計し、レビューもし、デバッグも行い
テストをし、さらにQAでの検査、正常、異常系、寿命テスト、
現地テストなどをこなし、ても不具合ってでるもんだからね・・・
とにかく、色々答えてくださりありがとうございました>ALL
なんとか考えてトレース関数作ります。
0562デフォルトの名無しさん
2006/03/08(水) 20:49:08Cは低級な言語なんだからあまり高級なことをやろうとして
プリプロセッサだのフィルタだのかましてもいいことないよ。
0563デフォルトの名無しさん
2006/03/08(水) 20:52:540564デフォルトの名無しさん
2006/03/08(水) 21:02:14プリプロセスはむしろCの十八番じゃね?
0565デフォルトの名無しさん
2006/03/08(水) 21:05:31CEの対応とかマニュアル化してる?
0566デフォルトの名無しさん
2006/03/08(水) 21:33:010567デフォルトの名無しさん
2006/03/08(水) 21:54:250568・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/08(水) 21:59:16それなんて線形合同法?
MTはテーブル使う奴だよ。
0569デフォルトの名無しさん
2006/03/09(木) 00:01:05「疑似乱数」の意味すら理解せずに疑似乱数を使うような
池沼は、C言語がどうこう以前にエンジニアにならないで
いただきたい。
0570デフォルトの名無しさん
2006/03/09(木) 00:06:290571デフォルトの名無しさん
2006/03/09(木) 00:43:09>570がチューリング賞取ってたら失礼。
0572デフォルトの名無しさん
2006/03/09(木) 01:16:40はじめて見る文法が出てきたのですが、
下記の文法はどういう意味を持つのでしょうか?
len1 = -len1;
0573デフォルトの名無しさん
2006/03/09(木) 01:28:22それくらい実行してみろよ。
0574デフォルトの名無しさん
2006/03/09(木) 01:31:01⇔2len1=0
⇔len1=0
ってことを遠回しに言っただけ
0575デフォルトの名無しさん
2006/03/09(木) 01:39:56len1 = -len1が成立するのは符合がないときだから、0のみ
と考えていたよ。(数学的には同じだけど)
いや〜ためになったな〜
0576デフォルトの名無しさん
2006/03/09(木) 01:40:17int r(){ return 0; }
0577デフォルトの名無しさん
2006/03/09(木) 01:43:28卵数発性器に彼女を使用しているのですが
排卵日を使用した計算プログラムを作ってるうちにプログラムが常に同じ解を返す事に気がつきました
しかもまったくオギノ式を再オギノ式しても同じオギノ式を返してしまいます
そんなことねーですか?
0578デフォルトの名無しさん
2006/03/09(木) 02:20:01DOS起動してもキー押すだけで強制終了させられてしまうので
0579デフォルトの名無しさん
2006/03/09(木) 02:30:26http://www.orchid.co.jp/computer/cschool/cschool.html
0580デフォルトの名無しさん
2006/03/09(木) 07:37:360581デフォルトの名無しさん
2006/03/09(木) 07:44:540582デフォルトの名無しさん
2006/03/09(木) 08:37:10ぉぃぉぃ
0583デフォルトの名無しさん
2006/03/09(木) 09:11:41効率悪くていいなら簡単でしょ。
>>581
支援くらいなら兎も角、当てるのは無理でしょ。
0584デフォルトの名無しさん
2006/03/09(木) 09:46:58その賞は残念ながら東通工の人に先に取られてしまったよw
0585デフォルトの名無しさん
2006/03/09(木) 14:35:45プログラム未経験でC言語を学びたいのですが
入門に適した書籍を紹介していただけないでしょうか?
よろしくおねがいします。
http://www.amazon.co.jp/exec/obidos/ASIN/4894710293/
これなんかよさそうだと思うのですが
0586デフォルトの名無しさん
2006/03/09(木) 14:51:41ここで聞くなボケ
0587魔天王ザムデイン ◆XnE.rF0YCI
2006/03/09(木) 14:58:24ア?早く答えろやボケが
0588デフォルトの名無しさん
2006/03/09(木) 15:09:34読んでみて、わからなかったら他のを読めばいい
0589デフォルトの名無しさん
2006/03/09(木) 15:20:44logoutした者の名前をファイルから削除するのってどうやるんですか?
ttp://www9.plala.or.jp/sgwr-t/c/sec17.html
とか見ても書いてないし、""でせめて空白にはなるかとと思いきやしっかり残ってるし
ここの達人方はどうやって削除してるんですか?
typedef struct {
int recNum;
char userID[8];
} user;
void logOut(int option, char *id) {
FILE *file_ptr;
user record_file;
long int offset;
int recNum;
recNum = readUserID(id);
strcpy(record_file.userID, "");
if((file_ptr = fopen("CURRENT.DTA", "r+")) == NULL) {
printf("Can't open user ID file.\n");
exit(0);
}
offset = recNum * sizeof(record_file);
if(fseek(file_ptr, offset, SEEK_SET) != 0) {
printf("Can't find the file.");
exit(0);
}
fwrite(&record_file, sizeof(record_file), 1, file_ptr);
fclose(file_ptr);
}
0590デフォルトの名無しさん
2006/03/09(木) 15:23:41前提条件が抜けていて何をしたいのかいまいち分からん。
君は何を作っているのか?
独自に作ったソフトでのログインとログアウトをしたいのか?
ならば独自にやればいいだけ。
0591デフォルトの名無しさん
2006/03/09(木) 15:32:22削除フラグでも立てとけば?
0592588
2006/03/09(木) 15:48:54それではファイルが膨れ上がる罠です
0593デフォルトの名無しさん
2006/03/09(木) 16:22:08そもそも、「現在ログインしているユーザ」情報を、
ファイルで管理する方が珍しいかと。
0594デフォルトの名無しさん
2006/03/09(木) 16:24:47ちなみに構造体定義はsys/utmp.hより
struct utmp
{
short ut_type;
pid_t ut_pid;
char ut_line[UT_LINESIZE];
char ut_id[UT_IDLEN];
time_t ut_time;
char ut_user[UT_NAMESIZE];
char ut_host[UT_HOSTSIZE];
long ut_addr;
};
0595デフォルトの名無しさん
2006/03/09(木) 19:58:43初心者です。
Borlandのコンパイラをダウンロードして、Widowsのメモ帳でプログラムを書いたところです。
これをコンパイルすると書いてるのですが、どうしたらいいのかわかりません。
教えてください。よろしくお願いします。
0596デフォルトの名無しさん
2006/03/09(木) 19:59:130597デフォルトの名無しさん
2006/03/09(木) 20:25:17コンパイラにパスを通すんだが、面倒だからCPadっての使って
適当に設定して
ttp://www.vector.co.jp/soft/win95/prog/se141451.html
0599デフォルトの名無しさん
2006/03/09(木) 21:53:010600デフォルトの名無しさん
2006/03/09(木) 21:54:18日本語でOK
0601デフォルトの名無しさん
2006/03/09(木) 21:55:27なるほどサンクス
0602デフォルトの名無しさん
2006/03/09(木) 21:57:17どういたしまして
0603デフォルトの名無しさん
2006/03/09(木) 22:00:090604595
2006/03/09(木) 22:04:30頑張ってみます。
0605デフォルトの名無しさん
2006/03/09(木) 22:05:26人の書いたソースを読んでいるのですが
以下のような構造体があり func1という関数ポインタなのですが
これはどこで定義されているのかわかりません・・・がなぜか動作しています;
struct mode{
char *name;
void (*func1)(struct mode *, int);
};
すごく長いソースなのですがソースは1枚しかありません
構造体の中の関数は何か特別なんでしょうか?
0606デフォルトの名無しさん
2006/03/09(木) 22:07:09struct mode{
char *name;
kansuu_pointer func1;
};
と、考えればいい
0607デフォルトの名無しさん
2006/03/09(木) 22:07:34構造体だから特別なことは何もない。
初期化せず正しく動作するということもありえない。
0608デフォルトの名無しさん
2006/03/09(木) 22:14:21ああ、ありがとうございます
”func1”で検索かけていてぜんぜん引っかからないので・・・
なるほど以下にこんなコードありました 助かりました
ありがとうございます ありがとうございます
struct mode mode_list[] = {
{"123", get_qui},
{"434", get_rupus},
{"222", get_status},
{"333", get_goo}
};
0609デフォルトの名無しさん
2006/03/09(木) 22:20:51func1は関数へのポインタを入れるためのただの変数
なので初期化されないままでも特に問題はない。
実際にその関数を呼び出したい時に struct mode *
と int を引数に取る void の関数へのポインタが
入っていればいいだけだ。
0610デフォルトの名無しさん
2006/03/10(金) 00:06:520611デフォルトの名無しさん
2006/03/10(金) 01:02:350612デフォルトの名無しさん
2006/03/10(金) 01:11:06ワロタ
0613デフォルトの名無しさん
2006/03/10(金) 01:13:08どこが笑う所だ?
0614デフォルトの名無しさん
2006/03/10(金) 01:23:33いや、なんとなく
おいらもXMLをファイルに書き出すときprintfでやりました
XMLを読むのは難しいけど書き出すときは簡単
0615・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 01:27:460616デフォルトの名無しさん
2006/03/10(金) 01:30:32関数だろアフォ
強いてもブロック・・・
0617・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 01:41:01関数の再帰コールはデータの噛ませようによっては危険なので
ヒープに自前スタック作ってループで処理するのが確実かつ速い。
関数再帰コールベースだと消費メモリが直感的にわかりにくいしな。
0618デフォルトの名無しさん
2006/03/10(金) 01:53:06アフォ確定
0619・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 02:14:25クィックソートが再帰コールじゃないと記述できないと思ってる類の初心者でしょうか。
こういうの相手したくないんですが、最適化で再帰をループに展開しなおす処理系もあるくらい
再帰コールはコーディング効率はともかく実行効率的にはダサい代物であることは
把握しといて欲しいものです。
使い捨てならともかくセキュアなプログラム書こうと思ったら、再帰を利用すると
関数コールスタックのオーバーフロー対策がかえって面倒。
ヒープに自前スタック作ったほうが楽。
例外処理の為にsetjmp/lngjmpなんて使う必要も無い。
0620デフォルトの名無しさん
2006/03/10(金) 02:24:420621・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 03:15:41再帰コールだとスタティック変数やグローバル変数でも使うか、
いちいちスタックにカウントして渡してやんないと駄目っしょ。
管理したい状態が増えるとどうするか?関数の引数を追加する?
グローバル変数を追加?
どうみてもウンコです。本当にあr
1関数内だけで処理を済ませれば、ローカルの変数をみるだけで済む。
もし ヒープの容量が不足すればお塩ロック、リアルロック、もといreallocすればいいし
アロケーションに失敗すれば例外処理に素早く移行できる。
よって、自前スタック使ってループまわして処理したほうがどう考えてもエレガント。
結局のところ、再帰コールが許されるのは初学者までだよねー、ってこと。
でも初学者であることを恥じる必要は無いと思うんだ。
0622デフォルトの名無しさん
2006/03/10(金) 03:23:46XMLを書き出すときは、fprintfで書き出したほうがよいのですかね?
XMLは色々便利ですけど
Cで書き出すときは、CSVとかほうが扱いやすいですね・・・
読み込みもexpatとか使わずに、自前で作りこんだほうがよい気がしてきました・・・
0623589
2006/03/10(金) 03:38:56全然答えになってないんですが。
達人の方のみ回答願います。
(ちゅーか、ファイルの内容の一部削除についての回答がまったくないのがこのスレらしい)
0624デフォルトの名無しさん
2006/03/10(金) 03:42:270625デフォルトの名無しさん
2006/03/10(金) 03:46:58Cでやるのはやめた方がいいよ。
0626589
2006/03/10(金) 04:03:320627589 ◆Q6fo44/dLk
2006/03/10(金) 04:11:08どなたかわかりませんか?
0628デフォルトの名無しさん
2006/03/10(金) 04:13:28さすがに文字列操作もファイル操作も理解
してないレベルだったとはおもわなかったんだろ。
"ネットワーキング"はギャグで言ってたんじゃなくて
若気の至りだったんだろうから、問題の切り分けも
要点を絞った質問もしないからといって無下にせず、
みんなちゃんとソースを読んでやれ。
strcpyの挙動ならスレで扱う範疇だろ?
0629デフォルトの名無しさん
2006/03/10(金) 04:16:140630589
2006/03/10(金) 04:26:17目的がなんだか判らんが。w
>>629
そりゃシーケンシャルファイルに限ったことじゃないのか?
ランダムアクセスファイルが何かも知らないくせに回答してんぢゃねーだろうな、おまいら?
0631589 ◆Q6fo44/dLk
2006/03/10(金) 04:33:13辞めろって、いい加減にしてくれ!
そんな発言したら、俺が無能みたいじゃないか。
0632デフォルトの名無しさん
2006/03/10(金) 04:40:040633デフォルトの名無しさん
2006/03/10(金) 04:40:29ランダムアクセスファイルって固定長レコードファイルでレコード番号でシークできるファイル、
それだけだよ。特定レコードを物理的に削除できるということはランダムアクセスファイルの
定義にはない。
これをやるんだったら、メモリーのリストにユーザー情報を保持し、ユーザーの追加・削除は
リスト上で行い、ファイルにはその結果を上書きするようにする。これしかない。
つまり、ひとりのユーザにログアウトでファイルの全レコードを置換するわけだ。
0634デフォルトの名無しさん
2006/03/10(金) 04:43:410635589
2006/03/10(金) 07:14:17ええ、マジでぇ?
シーケンシャルファイルだと最初から読むんで
そんな風に更新するしか手がない、というのは知ってるが
ランダムアクセスならseekで書き換えなんて余裕じゃん?
seekで空白にしてその一レコード分詰める
(ちゅーか詰めるんなら空白にする必要もないんだが)なんて出来ないの?
0636デフォルトの名無しさん
2006/03/10(金) 07:52:23シーケンシャルファイルだってseekできるよ。
ただ可変長レコードからなるシーケンシャルファイルの場合、どれだけseekしていいかわからない
からランダムアクセスができないだけ。
というか、Cのファイルにはシーケンシャルファイルもランダムアクセスファイルもない。
あるのは先頭からなめるか、先頭から所定のバイト数をすっ飛ばして(seekして)読むかの
読み方の違いだけ。つまりseekを使うか使わないかの違いだけ。固定長レコードからなる
ファイルだと、N番目のレコードを読むには、先頭から(N−1)*レコードサイズをすっ飛ばして、
レコードサイズ分読むことで可能(=ランダムアクセス)。
>seekで空白にしてその一レコード分詰める
この詰めるということがCで扱うファイルではできない。
データベースはレコードの削除はできるけど、あれはCのファイルよりもっと複雑なデータの持ち方
をしているからできる。
0637デフォルトの名無しさん
2006/03/10(金) 07:54:00やっぱり削除フラグにして、追加するときに、削除フラグのたってるところを
探して埋めた方がよくね?
1レコード=1ファイルにして、ファイルを削除するようにする手もあるな(w
0638589
2006/03/10(金) 08:01:17そこまで説明されると真実味がある。
じゃ、やっぱ削除フラグにするかな。
達人たち、どうもありがとう。
0639デフォルトの名無しさん
2006/03/10(金) 08:31:47gccで使えるクラスライブラリがあればの話だが
0640デフォルトの名無しさん
2006/03/10(金) 08:52:260641デフォルトの名無しさん
2006/03/10(金) 10:35:09関数外で以下のように記述すれば、ファイルスコープの“変数”は作れますよね?(←たぶんこれは合ってると思う…(^^;)
static int i;
関数だとglobalになってしまい、他のファイルで定義した関数と被ってしまうので、ファイルスコープで宣言したいのです。
0642デフォルトの名無しさん
2006/03/10(金) 10:36:470643641
2006/03/10(金) 10:52:14なんか static つけてもうまくいかないので質問したのですが、
プロトタイプ宣言にだけstatic付けて、関数自体に付けてませんでした…orz
ありがとうございます。
0644デフォルトの名無しさん
2006/03/10(金) 12:03:13xmlみたいに上から下に向かってインデントが深くなるのは再帰よか
ループってのはわかるけど、例えば二分木を
*-+(19)
*-+(63)
| *-+(35)
*-+(74)
| | *-+(4)
| *-+(50)
*-+(87)
| *-+(78)
*-+(86)
*-+(83)
こんな感じで表示すんのはスパゲッティ回避しつつ効率よくループでいける?
0645デフォルトの名無しさん
2006/03/10(金) 12:09:36いいえ、宣言にstaticがついていれば関数自体につける必要はありません。
0646デフォルトの名無しさん
2006/03/10(金) 12:10:36出来れば団子の相手は避けて欲しい。
個人的には、末尾再帰でもない処理をループに置き換えるのは
避けたい。
0647デフォルトの名無しさん
2006/03/10(金) 12:14:33末尾再帰ってこんなパターン?
int foo(args) { /*終端チェック...*/ return foo(some-args); }
0648647
2006/03/10(金) 12:25:12ttp://ja.wikipedia.org/wiki/%E6%9C%AB%E5%B0%BE%E5%86%8D%E5%B8%B0
0649デフォルトの名無しさん
2006/03/10(金) 12:48:53> 最適化で再帰をループに展開しなおす処理系もあるくらい
「いまどきのコンパイラなら末尾再帰はループに直すから、
効率を気にしないでどんどん使いましょう」
みたいな意見はよく見るけど、コンパイラがループにしてしまうから
使うなっていうのははじめてみた。
0650デフォルトの名無しさん
2006/03/10(金) 12:51:45C/C++でこんなコンパイラあるのか?
0651デフォルトの名無しさん
2006/03/10(金) 12:52:22使ったってぜんぜん平気でしょう。
0652デフォルトの名無しさん
2006/03/10(金) 12:59:12gcc,vcは直した
0653デフォルトの名無しさん
2006/03/10(金) 13:13:320654652
2006/03/10(金) 13:19:06int fact(int n,int v=1){
if(n==0)return v;
else return fact(n-1,v*n);
}
int main(){
std::cout << fact(3);
}
>>653
g++ -O3 で末尾再帰は最適化されました。VCでも同じです。何が直さないのでしょうか?
0655デフォルトの名無しさん
2006/03/10(金) 13:19:27最適化を切っているとか度合いを低く抑えているとか、
或いはお前が末尾再帰だと思い込んでいるだけで実際には末尾再帰でないという可能性もある。
0656・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 13:43:19クィックソートあたりの実装を参考にするといいお。
こっちが再帰コール版
http://www.comp.dit.ie/rlawlor/Alg_DS/sorting/quickSort.c
再帰コールせず自前スタック管理とループで実現
http://www.d.umn.edu/~gshute/C/examples/quicksort.C.html
まぁ俺ならこんなコードにするかな。細かい部分は端折るが。
int depth = 0; //現在の階層; 0がトップ
LPNODE p = tree->head;
LPNODE *stack = (LPNODE*) malloc( sizeof (LPNODE) * 100 ) ;
for ( ;; ) {
if ( p->child ) { //ネストあり
開始タグ出力
stack[depth++] = p; //push, 下の階層に逝く
p = p->child;
}
出力とか
if ( !p->next ) { //同階層の終端に達した
p = stack[depth--]; //pop , 上の階層に戻る
終了タグ出力
if (depth == -1) break;
}
p = p->next; //同階層の次の要素を参照
}
free(stack);
0657デフォルトの名無しさん
2006/03/10(金) 13:48:49ちょうど団子先生がいるんで聞きたいんだが
末尾再帰とそのループ展開について解説してるいいサイト無い?
0658デフォルトの名無しさん
2006/03/10(金) 13:50:530659デフォルトの名無しさん
2006/03/10(金) 13:52:240660デフォルトの名無しさん
2006/03/10(金) 13:55:34その糞コードで'|'や' 'をどうやってはさむつもりだ?wwwww
馬鹿も休み休み言えよwwwww
0661・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 13:58:59関数再帰コールベースなら簡単にできるとでも?馬鹿も休み休み言えよwwwwww
0662デフォルトの名無しさん
2006/03/10(金) 14:01:59俺団子じゃないけどいいかな。
http://d.hatena.ne.jp/yaneurao/20051008
http://d.hatena.ne.jp/yaneurao/20051025
0663デフォルトの名無しさん
2006/03/10(金) 14:03:25スタックオーバーフローだけを心配するなら2分割したうちの短い方だけを再帰にして、長い方をループにするのが簡単
末尾再帰が最適化されることを前提にするなら短い方を先に呼び出す
自前でスタックを用意するなら長い方を先に積む
これでスタックの深さは確実に O(log n)以下になる
0664デフォルトの名無しさん
2006/03/10(金) 14:04:42gccとかなら-Sでも指定してアセンブラ吐き出せば
末尾再帰になってるのが一目瞭然ですが( ´_ゝ`)
0666デフォルトの名無しさん
2006/03/10(金) 14:09:230667デフォルトの名無しさん
2006/03/10(金) 14:10:060668デフォルトの名無しさん
2006/03/10(金) 14:12:540669デフォルトの名無しさん
2006/03/10(金) 14:13:28ループでは簡単に出来ないことを認めたな?wwwww
0670デフォルトの名無しさん
2006/03/10(金) 14:14:25サンクス、ちょっと読んでくる
0671デフォルトの名無しさん
2006/03/10(金) 14:17:190672デフォルトの名無しさん
2006/03/10(金) 14:18:41関数の部分を見ると確かにループになってる。
gccって末尾再帰を最適化してくれるのか。知らんかった
__Z4factii:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl 12(%ebp), %eax
jmp L4
.p2align 4,,7
L7:
imull %edx, %eax
decl %edx
L4:
testl %edx, %edx
jne L7
popl %ebp
ret
0673デフォルトの名無しさん
2006/03/10(金) 14:19:40http://pc8.2ch.net/test/read.cgi/tech/1084676298/
0674・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 14:29:25端折ってるだけですが。単純化したほうが解りやすいだろ?
とりあえず関数の再帰を使うと簡単に書けることを証明してくれ。
インデント量をいちいちグローバル変数やパラメータで渡す必要がある時点で論外なのだが。
出力も厳密にはキューに溜め込んで、遅延処理することを想定してる。
入れ子になってる要素数に応じて、複数行に分けたり分けなかったりしたいからね。
0675デフォルトの名無しさん
2006/03/10(金) 14:31:23目的と労力との天秤じゃね?
0676デフォルトの名無しさん
2006/03/10(金) 14:39:01>>656�dクス
そういえば>>621でも言ってるけど関数の引数を追加するとなんかまずいの?
0677デフォルトの名無しさん
2006/03/10(金) 14:43:060678デフォルトの名無しさん
2006/03/10(金) 14:43:130679・∀・)っ-○○◎- ◇Pu/ODYSSEY
2006/03/10(金) 14:52:100680・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 14:53:29関数のプロトタイプが変わっちゃうでしょ。仕様変更に柔軟に対応しにくい。
何より、渡す引数が増えればその分だけ関数コールスタックの消費も増える。
>>675
XMLの解析なら、さすがにXercesやMSXML使うかな。
労力の少なさ重視ならCじゃなしにインタプリタ言語でも使いますわ。
実際のコンパイラやインタプリタのソース見れば再帰コールなんて、まず使ってませんわ。
バグの根源っす。
0681デフォルトの名無しさん
2006/03/10(金) 15:01:51俺はfindの実装すらも再帰以外では書けないヘタレだから無理だけどな
0682デフォルトの名無しさん
2006/03/10(金) 15:03:04??変わっちゃうってどういうこと?
そもそも再帰コールで書くつもりで始めたのなら追加も何もないんじゃないの?
0683デフォルトの名無しさん
2006/03/10(金) 15:08:40末尾再帰を最適化できないようなコンパイラを選定してる時点でダメ。
0684デフォルトの名無しさん
2006/03/10(金) 15:12:580685デフォルトの名無しさん
2006/03/10(金) 15:16:29ちゃちゃっと書いてテストするときって 先に再帰のほうを想像しないか?
いきなりループで思考するとかえってドツボ&バグの温床のような…
0686デフォルトの名無しさん
2006/03/10(金) 15:19:010687デフォルトの名無しさん
2006/03/10(金) 15:20:48void showTree(TREE* tree)
{
static char indent[INDENT_LENGTH] = "";
showTreeBody(tree->head, indent, 0, 0);
}
void showTreeBody(LPNODE current, char *indent, int above, int below)
{
static const char *nextIndent[] = {"  ","| "};
if(current) {
showTreeBody(current->child, strncat(indent, nextIndent[above], INDENT_LENGTH), 0, 1);
indent[strlen(indent)-2] = '\0';
printf("%s*-+(%d)\n", indent, current->data);
showTreeBody(current->next, strncat(indent, nextIndent[below], INDENT_LENGTH), 1, 0);
indent[strlen(indent)-2] = '\0';
}
}
0688デフォルトの名無しさん
2006/03/10(金) 15:20:48ループだと不自然だろ?
0689デフォルトの名無しさん
2006/03/10(金) 15:31:46ループで非再帰化したBNF記法のようなもの登場か!!!
…イラネ
0690デフォルトの名無しさん
2006/03/10(金) 15:39:030691・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 15:56:29LRLRと自由文脈で英文法チェックルーチン(もどき)作るの講義でやったなぁ。懐かしい。
普通に自前スタックに退避で実現できるんじゃね?
Bisonあたりのソース参考にすればいい?ソースとってきてトレースして関数コールツリー
みてるけど、さて、再帰コールしてる箇所ってどこにあ(ry
findって要するにディレクトリツリーの中身全部展開して取得するだけでいいっしょ。
つい最近ディレクトリの中身を無駄なファイル除いてまとめてパックするプログラムとか
書かされたいたけど普通に再帰コールなしで出来たよ。いちおう参考までに。
>>682
共有しないといけないパラメータが、初期に想定してた分より変わるかもわからんね。
>>684
組み込みは無視ですか><
0692デフォルトの名無しさん
2006/03/10(金) 17:35:360693デフォルトの名無しさん
2006/03/10(金) 19:04:37組み込みでも再帰は使うよ
案件によっては禁止の場合もあるってだけ
使う場合のノウハウはちゃんとある
0694デフォルトの名無しさん
2006/03/10(金) 19:07:57{
char buf[256];
printf("Y/N?");
gets(buf);
if(strcmp(buf, "Y")==0) return 1;
if(strcmp(buf, "N")==0) return 0;
return confirm();
}
0695デフォルトの名無しさん
2006/03/10(金) 19:11:32やっぱ思考の過程をそのまま記述するのが自然でよいな。
その上で問題があるなら ループ⇔再帰 の置換を行えばいいし。
0696デフォルトの名無しさん
2006/03/10(金) 19:17:32うわー懐かし
新米の頃、似たようなこと書いて怒られたっけ(恥
0697デフォルトの名無しさん
2006/03/10(金) 20:52:21ヒットしたので試しに読んだらスレッドとタスクの違いが良く分からなくなってきますた。
そんなC言語を習得中の漏れに解説して頂けるもっさエロイ人キボン。
0698デフォルトの名無しさん
2006/03/10(金) 20:55:38スレ違い。
0699デフォルトの名無しさん
2006/03/10(金) 21:18:16prg2ch.libとか?
0700デフォルトの名無しさん
2006/03/10(金) 21:20:330701デフォルトの名無しさん
2006/03/10(金) 21:54:350702デフォルトの名無しさん
2006/03/10(金) 22:36:27何が間違っているのかご指摘を本当にお願いします。
#include <stdio.h>
void change(int *data);
int main(void)
{
int input;
puts("値の入力");
scanf("%d",&input);
change(&input);
printf("%d",input);
return 0;
}
void change(int *data)
{
int *temp;
while(*data / 2 != 0){
*temp++ = *data % 2;
*data = *data / 2;
}
}
0703デフォルトの名無しさん
2006/03/10(金) 22:38:45と言いますか、全ての数字において0が帰ってきます。助けて下さい。
コンパイラはgccです。
0704デフォルトの名無しさん
2006/03/10(金) 22:42:122進数で表示したいというのなら文字列にしないと
changeについては殆ど意味のない関数になってる
単にdataが0か1になるまで割り算していってるだけ
tempもまったく意味がない
0705デフォルトの名無しさん
2006/03/10(金) 22:42:270706デフォルトの名無しさん
2006/03/10(金) 22:44:49ほんとですか・・・文字列で書き直して再度聞きに来ます。ありがとうございます!!
>>705
それをぜひ教えて頂きたいです。
0707デフォルトの名無しさん
2006/03/10(金) 22:50:11こんな感じで良いよ。
void change(int *data)
{
int temp=0;
int i=1;
while(temp = temp+*data%2*i,*data / 2 != 0){
i*=10;
*data = *data / 2;
}
*data = temp;
}
0708デフォルトの名無しさん
2006/03/10(金) 22:56:04dataでかいとあふれるぜ
0709デフォルトの名無しさん
2006/03/10(金) 22:58:29うぁぁ・・・むずかしい・・・orz。
少しwhile式内を考えてみます。わざわざ解答書いてくださりありがとうございます!
0710デフォルトの名無しさん
2006/03/10(金) 22:59:20仕様ですw
>>709
>>707は急いで書いたから変になったけど、こう書いたほうが読みやすいかもしれない。
void change(int *data)
{
int temp=0,i=1;
while(*data != 0){
temp = temp + *data%2 * i;
*data = *data / 2;
i *= 10;
}
*data = temp;
}
0711デフォルトの名無しさん
2006/03/10(金) 23:04:39表示だけしたいのならこういう手もある
void print_bin(int n)
{
if(n < 0){
putchar('-');
print_bin(-n);
} else {
if(n/2 != 0)
print_bin(n/2);
printf("%d",n%2);
}
}
int main(void)
{
int n;
scanf("%d",&n);
print_bin(n);
putchar('\n');
return 0;
}
0712・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 23:07:18C:\Documments and Settings\だんご 食べたい\My Documents\Visual Studio Projects\
ってパス名が含まれるからですか?><
0713デフォルトの名無しさん
2006/03/10(金) 23:11:16じゃないのか。
0714デフォルトの名無しさん
2006/03/10(金) 23:11:32-2147483648
0715デフォルトの名無しさん
2006/03/10(金) 23:13:17仕様で(ry
まじごめん
0716デフォルトの名無しさん
2006/03/10(金) 23:24:32式内の仕組みがやっと分かりました!!ありがとうございます!
これを参考にして16進数とかに挑戦してみます。
0717707
2006/03/10(金) 23:35:49特に変換処理をしなくても
printfで%xを指定したら自動的に16進数で表示してくれるよ
printf("%x",input);
0718デフォルトの名無しさん
2006/03/10(金) 23:36:03期待して書くのってやっぱり(仕事でやる場合)良くないこと
なんですかね? 組織のポリシー次第と言えばそれまでですが…
自分は再帰の回数が十分少ないと断言できる場合のみ
使っています。楽ですし。
0719デフォルトの名無しさん
2006/03/10(金) 23:42:52書式指定子の変更で16進に変換可能できるんですか!凄いですね(^ω^;)
ではいろいろネットで違う基本を学んできます。
0720・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 23:43:290721デフォルトの名無しさん
2006/03/10(金) 23:45:39仕事なら、性能要件を満たす限りはなるべく分かりやすいコードがよい。
0722デフォルトの名無しさん
2006/03/10(金) 23:46:25○>>718
0723デフォルトの名無しさん
2006/03/10(金) 23:47:46最適化に限ったことじゃないが「保証されている」かどうかが仕事では超重要
0724デフォルトの名無しさん
2006/03/10(金) 23:49:37あるけど、これって末尾再帰最適化してくれるの?
0725・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 23:51:000726デフォルトの名無しさん
2006/03/11(土) 00:31:06Cの規格でぜったい保障されてる範囲でしかコードを書かないってことになったら、
まともに実用のコードなんてかけないよ。
0727デフォルトの名無しさん
2006/03/11(土) 00:37:040728・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/11(土) 00:46:36ここは俺的に要ブックマーク
0729デフォルトの名無しさん
2006/03/11(土) 00:46:50おめー、厳密規格合致プログラムのことを言っているのか?
処理系定義だって立派に保証されている動作だし、
void hoge(int); だって、それを出荷しているベンダーが保証している場合もあるぞ?
自分の仕事の成果に対する責任範囲と「移植性」を近藤しとるんちゃうか?
金もらう時点でここで引っかかる奴はいないはずだが・・・
0730デフォルトの名無しさん
2006/03/11(土) 00:54:04この話の流れで、なんでそういう方向に行くのか分かりません。
0731デフォルトの名無しさん
2006/03/11(土) 01:15:140732デフォルトの名無しさん
2006/03/11(土) 08:21:190733デフォルトの名無しさん
2006/03/11(土) 10:57:05あまりにもトリッキーで環境依存なコードも問題あるが。
・・・とここのスレを見て感じました。
0734デフォルトの名無しさん
2006/03/11(土) 10:58:22意味もなくノーコストで得られる移植性を損なう奴もアホ。
0735デフォルトの名無しさん
2006/03/11(土) 11:02:36ないでしょうか? 以下は例です。
for (i=1;i<=10; i++) {
malloc( i*4096 );
}
0736デフォルトの名無しさん
2006/03/11(土) 11:05:25その例は別の意味で問題ある
0737デフォルトの名無しさん
2006/03/11(土) 11:15:10別の問題とは、どういう問題でしょうか?
0738デフォルトの名無しさん
2006/03/11(土) 11:15:510739デフォルトの名無しさん
2006/03/11(土) 11:17:180740デフォルトの名無しさん
2006/03/11(土) 11:37:240741デフォルトの名無しさん
2006/03/11(土) 11:40:06確かにそうですね。例の誤りですね。
0742デフォルトの名無しさん
2006/03/11(土) 11:45:14static char a[M+1][N+1];と宣言してあって
その後、a[i][j]++;とかすぐにインクリメントしたりしてるんですが
この宣言方法の場合、最初に0で初期化しなくても0が挿入されてるんですか?
0743デフォルトの名無しさん
2006/03/11(土) 11:46:290744デフォルトの名無しさん
2006/03/11(土) 11:52:01ありがとうございます
流れ見ていく限り、どうもすべてに0が入っているのを
前提とした感じだなぁっていうのはわかったんですが
static使ったことなくて、調べても次に呼び出されたとき
値が変化しない静的としか書かれてなかったんでわかりませんでした
0745デフォルトの名無しさん
2006/03/11(土) 20:28:13規格ではゼロ初期化ってことになってるけど
このルールには従っていない処理系が結構あるから
ちゃんと確認したほうがいいぞ
0746デフォルトの名無しさん
2006/03/11(土) 20:29:360747デフォルトの名無しさん
2006/03/11(土) 20:31:35そんな処理系無いだろ
少なくとも普通に手に入るであろう処理系ではの話だが
とゆうかstatic変数がゼロクリアされるのはC89で既に規格化されてるんだから
C89にすら準拠してないような糞処理系は窓からry
0748デフォルトの名無しさん
2006/03/11(土) 20:48:43結構あると言い切ってるんだから
まずは話を聞いてみようじゃないか。
0749デフォルトの名無しさん
2006/03/11(土) 21:06:39言っていいのはここまで
特に 747 みたいなのがいるところで言ったらシャレにならん
0750デフォルトの名無しさん
2006/03/11(土) 21:16:54何か厨臭いな
0751デフォルトの名無しさん
2006/03/11(土) 21:23:55標準Cなんて信用するなといってみたり
なかなか初心者に辛いスレだな。
0752デフォルトの名無しさん
2006/03/11(土) 21:35:30ANSIなどと書かれてるコンパイラならクリアされてるはずだわな
0753デフォルトの名無しさん
2006/03/11(土) 21:56:170754736
2006/03/11(土) 22:03:17736=743=754
0755デフォルトの名無しさん
2006/03/11(土) 22:15:52しているのか、解説をして頂きたいのですが、お願いします。
#include <stdio.h>
char *c[]={
"ENTER",
"NEW",
"POINT",
"FIRST"
};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
main()
{
printf("%s",**++cpp);
printf("%s ",*--*++cpp+3);
printf("%s",*cpp[-2]+3);
printf("%s\n",cpp[-1][-1]+1);
}
出力 POINTER STEW
0757デフォルトの名無しさん
2006/03/11(土) 22:22:460758デフォルトの名無しさん
2006/03/11(土) 22:28:040759デフォルトの名無しさん
2006/03/11(土) 22:28:35できればヒントをお願いします。
printf関数2番目で cppでの+3と++ではどちらが優先されるのでしょうか?
どちらを試しても答えとは違くなってしまうので、この場合の優先順位を教えて頂けないでしょうか?
0760デフォルトの名無しさん
2006/03/11(土) 22:35:350761デフォルトの名無しさん
2006/03/11(土) 22:42:12++ですか!。そうしますとcppのアドレスを増やす = NEW を指すとします。
(この時printf関数の1番目のアドレスの位置を記憶しているのでしょうか?)
していないとしますと、そしてアドレス位置の--によって ENTER を指し
cpp「0」+3と解釈し、POINT + ER でよろしいのでしょうか?
0762デフォルトの名無しさん
2006/03/11(土) 22:48:24まじめにやれ >NEW を指す
0763デフォルトの名無しさん
2006/03/11(土) 22:52:53すいません・・・。NEWを指すのですか。ありがとうございます
0764デフォルトの名無しさん
2006/03/11(土) 22:53:26まじめにやれ >NEWを指すのですか。
0765デフォルトの名無しさん
2006/03/11(土) 23:00:43ではあと一つ答えて頂きたいのですが、4番目の式なんですが
cpp[-1][-1]+1は どうなるのでしょうか?
0766デフォルトの名無しさん
2006/03/11(土) 23:11:15質問の意味が明らかになっていない
>printf関数2番目で cppでの+3と++ではどちらが優先されるのでしょうか?
例えばこういう風に論点をはっきりしろ
0767デフォルトの名無しさん
2006/03/11(土) 23:11:32cpp[-1][-1]は何かよく分からんが配列より前を指すことになるので
その動作は未定義
細かいことは規格票の加減演算子を嫁
0768デフォルトの名無しさん
2006/03/11(土) 23:13:06(1)一つ目
文字列配列 c の要素へのポインタを c とは逆順に保持する cp の先頭アドレスで初期化された
文字列配列の要素へのポインタ配列の要素へのポインタ cpp をインクリメントし。その指し示す
文字列配列の要素へのポインタが指している文字列を表示。
(2)二つ目
一つ目でインクリメントした、文字列配列の要素へのポインタ配列の要素へのポインタ cppをさら
にインクリメントし、その指し示す保持列配列要素へのポインタをデクリメントして、その文字列配
列要素、つまり文字配列であるところの文字列先頭を指し示すポインタを3つ勧めたアドレス以降
を文字列としてその後ろにスペースをひとつ加えて表示。
(3)三つ目
さらに、文字列配列の要素へのポインタ配列要素へのポインタ cpp を、Cの構文糖であるところの [ ]
演算子による配列同等のアクセス方式を利用して、すなわち、cpp を文字列配列の要素へのポインタ
配列要素へのポインタを要素とする配列とみなし、オフセット -2 の位置の要素であるところのポインタ
が指し示す文字列配列要素へのポインタが指し示すポインタが指し示す文字列(つまり文字配列先頭
ポインタ)を3つ進めて、そのアドレス以降のデータを文字列として表示。
ちなみにcpp は(2)までに二回インクリメントされているので、cppを配列とみなした場合、そのオフセット
-2とは、つまりはcppの初期値が指し示す要素をあらわすことが自明。
四つ目
文字列配列の要素へのポインタ配列要素へのポインタ cppを構文糖により、文字列配列要素へのポイン
タの二次元配列とみなし、インデックス-1,-1位置の要素、すなわち文字配列であるところの文字列先頭
ポインタに1を足したアドレス以降のデータを文字列として表示。
ちなみにcpp は(2)までに二回インクリメントされているので、cppを文字列への二次元配列とみなした
場合、インデックス-1,-1とは、つまりはcppの初期値が指し示す要素の次の要素が指し示す文字列配列
要素へのポインタの指す要素の、一つ前の要素をあらわすことが自明。
0769デフォルトの名無しさん
2006/03/11(土) 23:15:17この場合の優先度も何も、優先順位が変わることは有り得ない
0770デフォルトの名無しさん
2006/03/11(土) 23:24:28申し訳ないです。何を言おうとしているのか分からないですよねorz
>>767
そちらを探してみる事にします。
>>768
全部書いて下さりありがとうございます!1つずつ理解できるように読みます。
丁寧に書いて下さり本当に感謝しますm(__)m
>>769
勉強不足ですよね。もっと頑張ります。
答えて頂いた皆さん、本当にありがとうございました。
0771デフォルトの名無しさん
2006/03/11(土) 23:31:13天才w
0772デフォルトの名無しさん
2006/03/11(土) 23:31:20宿題なら宿題スレへ池
768 みたいな回答が欲しかっただけだろ
761 のここまではよかった
>++ですか!。そうしますとcppのアドレスを増やす =
cpp の指す先にあるのは cp と自分で書いておきながら NEW だのと言い出したあたりから
おまえさんとは話になりそうかどうかに疑問がわいていた
論議という所場代が払えない者に恵んでやる範囲にはきつい限界があるぜ
0773デフォルトの名無しさん
2006/03/12(日) 00:21:41Eclipseでも出来なくはないけどさ,別にEclipse使うメリットもない。
むなしくエディタで書いてる漏れ。
0774デフォルトの名無しさん
2006/03/12(日) 00:26:320775デフォルトの名無しさん
2006/03/12(日) 00:27:27DOSもしくはHEWっていう統合環境上から使用。
エディタで十分でし。
0776デフォルトの名無しさん
2006/03/12(日) 00:29:020777デフォルトの名無しさん
2006/03/12(日) 00:29:34win用のEmacsってあったっけ。あっても、最適な環境まですごく遠くない?
ライブラリが用意してあるのか知らないけど
0778デフォルトの名無しさん
2006/03/12(日) 00:31:00昔はBorland C++とK2Editorを使っていた。
更に遡るとLSI C-86とメモ帳。
0779デフォルトの名無しさん
2006/03/12(日) 00:31:020780デフォルトの名無しさん
2006/03/12(日) 00:31:300781デフォルトの名無しさん
2006/03/12(日) 00:31:360782777
2006/03/12(日) 00:36:100783デフォルトの名無しさん
2006/03/12(日) 00:37:34日本語でおk
0784デフォルトの名無しさん
2006/03/12(日) 00:40:52やっぱJavaの方がとっつきやすいような希ガス。
最近の若者はC言語に見向きもしないんじゃないかと。
0785デフォルトの名無しさん
2006/03/12(日) 00:45:49秀丸を使う人は、どんなとこが便利であの金額払ってるの?(払ってない人はスルーで)
0786デフォルトの名無しさん
2006/03/12(日) 00:49:12オートインデント、予約語の強調、エディタ内でのmakeシェル起動、エラー箇所へのジャンプ、
正規表現を使ったによる置換、grepとhitファイルの該当行へのジャンプ、タグジャンプ、括弧
の対応関係表示。
これだけあれば取り合えず、プログラミングには十分だと思うが。
ちなみに上はxyzzyやMeadowならデフォルトで持ってる機能だ。
0787デフォルトの名無しさん
2006/03/12(日) 00:51:090788デフォルトの名無しさん
2006/03/12(日) 00:52:270789デフォルトの名無しさん
2006/03/12(日) 00:53:200790デフォルトの名無しさん
2006/03/12(日) 00:53:44無料の上にヘルプ込みの完全な統合開発環境だぞ。
0791777
2006/03/12(日) 01:01:300792デフォルトの名無しさん
2006/03/12(日) 01:02:51どこが完全な統合開発環境なんだ
0793デフォルトの名無しさん
2006/03/12(日) 01:04:430794デフォルトの名無しさん
2006/03/12(日) 01:05:14どこから落とせばいいんだ?
0795デフォルトの名無しさん
2006/03/12(日) 01:07:16日本語のヘルプと補完あるぞ
0796デフォルトの名無しさん
2006/03/12(日) 01:10:24C言語に関しては英語
無いのはリファクタリングだった
お詫びして訂正します
上位版にはあるのに・・・・
0797デフォルトの名無しさん
2006/03/12(日) 01:13:11ランタイム ライブラリ リファレンス
printf、_printf_l、wprintf、_wprintf_l
参照 使用例
すべて折りたたむ すべて展開 言語のフィルタ : すべて 言語のフィルタ : 複数 言語のフィルタ : Visual Basic 言語のフィルタ : C# 言語のフィルタ : C++ 言語のフィルタ : J# 言語のフィルタ : JScript
Visual Basic (宣言)
Visual Basic (使用法)
C#
C++
J#
JScript
標準出力ストリームに書式付きで出力します。これらの関数にはセキュリティを強化したバージョンがあります。「printf_s、_printf_s_l、wprintf_s、_wprintf_s_l」を参照してください。
int printf(
const char *format [,
argument]...
);
int _printf_l(
const char *format,
locale_t locale [,
argument]...
);
int wprintf(
const wchar_t *format [,
argument]...
);
int _wprintf_l(
const wchar_t *format,
locale_t locale [,
argument]...
);
0798デフォルトの名無しさん
2006/03/12(日) 01:13:570799デフォルトの名無しさん
2006/03/12(日) 01:16:15「完全な」統合開発環境というのを取り消せば許してやる
0800デフォルトの名無しさん
2006/03/12(日) 01:19:14↓
「
・〜〜
・〜〜
だよ」
↓
「うぇwwwwwんなのが完全なのかよ >>〜〜のお里が知れるなww」
↓
以降煽り、のの知り合い愛情を深めていく
0801デフォルトの名無しさん
2006/03/12(日) 01:24:00おれでよければいくらでも取り消したる by798==785!=790
0802デフォルトの名無しさん
2006/03/12(日) 01:59:56禿丸使い続けるメリットなんて皆無だろ。
0803デフォルトの名無しさん
2006/03/12(日) 02:25:500804デフォルトの名無しさん
2006/03/12(日) 02:42:470805デフォルトの名無しさん
2006/03/12(日) 02:43:290806デフォルトの名無しさん
2006/03/12(日) 02:50:42ありが�d!
できました!
0807デフォルトの名無しさん
2006/03/12(日) 09:57:51結局xyzzyなどのエディタとDOSコンパイラになってしまう
0808デフォルトの名無しさん
2006/03/12(日) 13:08:29PAStaticDS.libとstrmiids.libをリンクすると
IID_IKsPropertySet はすでに strmiids.lib(strmiids.obj)
というようにリンクエラーがでます
回避する方法あります?
0809デフォルトの名無しさん
2006/03/12(日) 14:03:20エラーメッセージを、一切加工せずに書け。
0810デフォルトの名無しさん
2006/03/12(日) 15:09:25{
strcpy(d, s);
return d + strlen(d);
}
みたいな標準関数ないですか?
0811デフォルトの名無しさん
2006/03/12(日) 15:23:170812デフォルトの名無しさん
2006/03/12(日) 15:23:520813デフォルトの名無しさん
2006/03/12(日) 15:24:300814デフォルトの名無しさん
2006/03/12(日) 15:42:38アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
アドレスとポインタの差なんて、ちゃんと勉強した奴なら誰でも知ってるよ。
http://pc8.2ch.net/test/read.cgi/prog/1140616676/
0815デフォルトの名無しさん
2006/03/12(日) 16:13:54sprintf(d, "%s", s )
0816>815
2006/03/12(日) 18:29:35ここは?
0817デフォルトの名無しさん
2006/03/12(日) 18:34:29みたいな、だから。
0818デフォルトの名無しさん
2006/03/12(日) 18:54:39s += sprintf(s, "%s", hoge);
0819デフォルトの名無しさん
2006/03/12(日) 19:14:050820デフォルトの名無しさん
2006/03/12(日) 19:32:090821デフォルトの名無しさん
2006/03/12(日) 19:42:04数値の前の空白、数値の直後の英字などは無視されるので、
atoi(" 123abc") は123を返すがそれでは不満か?
もしそうならsscanf()を使え。
sscanf(" 1234abc", "%3d", & foo)でfooに123が得られる。
0822デフォルトの名無しさん
2006/03/12(日) 19:57:42そういう使い方もできるんですね
調べが甘かったです
ありがとうございました!
0823デフォルトの名無しさん
2006/03/12(日) 20:46:18printf(hairetu);
では表示できるんですが、
printf("%s",hairetu);
では表示できないんですけど、仕様ですか?
0824デフォルトの名無しさん
2006/03/12(日) 20:51:33普通に出来る
0825デフォルトの名無しさん
2006/03/12(日) 20:53:56もう一度コンパイルし直したら出来ました
ありがとうございます
0826デフォルトの名無しさん
2006/03/12(日) 21:39:01int c;
char str[50];
scanf("%s", str);
c = getchar();
return0;}
とするとgetcharが行われないのですが何故でしょうか?
実行するとscanの部分だけで終了してしまいます。
0827デフォルトの名無しさん
2006/03/12(日) 21:51:32scanfの食べ残した改行をgetcharが食べるから
0828デフォルトの名無しさん
2006/03/12(日) 21:57:300829デフォルトの名無しさん
2006/03/12(日) 22:08:47int c;
char str[50];
scanf("%s", str);
getchar();
c = getchar();
return0;}
0830デフォルトの名無しさん
2006/03/12(日) 22:11:490831デフォルトの名無しさん
2006/03/12(日) 22:22:49>>829の方法で無事、動作しました。
0832・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/12(日) 22:22:570833デフォルトの名無しさん
2006/03/12(日) 22:34:49こうで十分だろ。
scanf("%s%*c", str);
c = getchar();
0834デフォルトの名無しさん
2006/03/12(日) 22:59:56そこに50バイト以上流し込んでやる。
0835デフォルトの名無しさん
2006/03/12(日) 23:08:06「getchar が行われていない」 とは何を根拠に言っている?
0836デフォルトの名無しさん
2006/03/12(日) 23:24:42正しくはgetcharのところでプロンプトが入力待ちにならないってことだが、
そんなの雰囲気で分かるやろ、ぼけ。
0837デフォルトの名無しさん
2006/03/12(日) 23:30:10そんなの雰囲気で分かるやろ、ぼけ。
そんなの雰囲気で分かるやろ、ぼけ。
そんなの雰囲気で分かるやろ、ぼけ。
そんなの雰囲気で分かるやろ、ぼけ。
そんなの雰囲気で分かるやろ、ぼけ。
そんなの雰囲気で分かるやろ、ぼけ。
0838デフォルトの名無しさん
2006/03/12(日) 23:51:090839デフォルトの名無しさん
2006/03/12(日) 23:53:10sprintf(s,"%s%s",s1,s);
printf("%s\n", s);
”何?うんこ”
になりません><
”何?”
になります。
きっとsprintfの入れ先がsだからいけないのでしょうか。
べつにs3[100]を確保してそこに入れればいいのですが
メモリがもったいないです、確保したくありません
何か解決策ダサイ><
0840デフォルトの名無しさん
2006/03/12(日) 23:56:40そのコードは鼻から悪魔。
素直に別領域使えよ、ボォケェ
0841デフォルトの名無しさん
2006/03/13(月) 00:01:090842デフォルトの名無しさん
2006/03/13(月) 00:07:56int s1len = strlen(s1);
memmove(s+s1len, s, strlen(s)+1);
memcpy(s, s1, s1len);
printf("%s\n", s);
0843デフォルトの名無しさん
2006/03/13(月) 00:13:40メモリを使え。ケチるな。
0844デフォルトの名無しさん
2006/03/13(月) 00:13:41THX><
0845デフォルトの名無しさん
2006/03/13(月) 00:15:38#include <stdio.h>
#include <string.h>
char *InsertStr(const char *src, char *dst, size_t dstSize)
{
size_t lenSrc = strlen(src);
size_t lenDst = strlen(dst);
if (lenSrc + lenDst + 1 > dstSize) /* 1は'\0'の分。次の行も*/
lenDst = dstSize - 1 - lenSrc;
memmove(dst + lenSrc, dst, lenDst);
dst[lenSrc + lenDst] = '\0';
memcpy(dst, src, strlen(src));
return dst;
}
int main(void)
{
char s1[16] = "Bar";
char s2[8] = "Hoge";
InsertStr("Foo", s1, sizeof s1);
puts(s1);
InsertStr("Ahya!", s2, sizeof s2);
puts(s2);
return 0;
}
0846デフォルトの名無しさん
2006/03/13(月) 00:16:38いけません><
PCがかわいそうです。
私は、林檎三個食べただけでもうアウアウなのに
char s3[100]なんて確保したらPCがアウアウパウになります。
0847デフォルトの名無しさん
2006/03/13(月) 00:19:04char *s1="うんこ";
char *s2="何?";
にすればメモリの消費量も解決(w
0848デフォルトの名無しさん
2006/03/13(月) 00:20:460849デフォルトの名無しさん
2006/03/13(月) 00:21:05ありがとうございます><
私のPCもとてもよろこんでます。
/ ̄ ̄ ̄ ̄/
/ FMV / <うれピー!
\/____/
0850デフォルトの名無しさん
2006/03/13(月) 00:23:370851デフォルトの名無しさん
2006/03/13(月) 00:28:22char s[100];
sprintf(s,"%s%s",s0,s1);
printf("%s\n", s);
0852デフォルトの名無しさん
2006/03/13(月) 00:41:04メモリ使用量はほぼ変わらない。
0853デフォルトの名無しさん
2006/03/13(月) 00:49:420854デフォルトの名無しさん
2006/03/13(月) 00:53:01いまさら配列サイズをケチったって、破壊された森林は戻ってこないわ」
0855デフォルトの名無しさん
2006/03/13(月) 00:57:020856デフォルトの名無しさん
2006/03/13(月) 01:16:16struct A{ int val; struct A *next; struct B *b;} *a1;
struct B{ int val; struct *next;} *b1;
a1->val = N; はできますよね
a1->b->val = N; としようとするとエラーが出るんですがこういうようにしたい場合どう書けばいいんでしょうか?
0857デフォルトの名無しさん
2006/03/13(月) 01:22:58>a1->val = N; はできますよね
できない
>a1->b->val = N; としようとするとエラーが出るんですが
当然
ポインタを理解できない人種ってこれのことか?
0858デフォルトの名無しさん
2006/03/13(月) 01:23:20> struct B{ int val; struct *next;} *b1;
>
> a1->val = N; はできますよね
ポインタの先の実体が無いとできませんよ
0859デフォルトの名無しさん
2006/03/13(月) 01:23:320860デフォルトの名無しさん
2006/03/13(月) 01:27:13ポインタがインスタンスを指していないんじゃないんか?
a1 = malloc( sizeof(struct A) );
a1->b = malloc( sizeof (struct B) );
0861デフォルトの名無しさん
2006/03/13(月) 01:28:44a1->bは集約関係だから必要ないだろ
0862デフォルトの名無しさん
2006/03/13(月) 01:29:50struct B{ int val; struct *next;} *b1;
struct A{ int val; struct A *next; struct B *b;} *a1;
0863856
2006/03/13(月) 01:31:24struct A{ int val; struct A *next; struct B *b;} *a1;
struct B{ int val; struct *next;} *b1;
a1 = (struct A *)malloc(sizeof(struct A));
a1->b = (struct B *)malloc(sizeof(struct B));
これで
a1->val = N; は大丈夫ですよね?
a1->b->val = N; というようなことがしたいということです
書き忘れですすいません
0864デフォルトの名無しさん
2006/03/13(月) 01:35:40普通に出来るはずだが
struct Aの宣言でエラーが出てるとか言ったら殺す
0865デフォルトの名無しさん
2006/03/13(月) 01:37:41で宣言でエラーが出てる、とかいって殺されるに1票
0866856
2006/03/13(月) 01:38:58できますか
これも書き間違えてましたがstruct Bの方が先に書いてあるのでそこではエラーは出ていません
a1->b->val = N;をなくすとコンパイルも通るので宣言の部分でのエラーというのは考えられません
他に変なところがないか見てみます
0867デフォルトの名無しさん
2006/03/13(月) 01:39:460868デフォルトの名無しさん
NGNGどのように書けばいいのでしょうか。
0869デフォルトの名無しさん
2006/03/13(月) 01:40:42変なのは藻前の頭
0870856
2006/03/13(月) 01:43:22というエラーが出ます
0871デフォルトの名無しさん
2006/03/13(月) 01:43:35スレ違い。死ね
0872デフォルトの名無しさん
2006/03/13(月) 01:47:100873デフォルトの名無しさん
2006/03/13(月) 01:51:08している場所と
a1->b->val = N;
している場所は実は全然別で、片方には
struct Bの定義が無かったというオチか?
0874デフォルトの名無しさん
2006/03/13(月) 01:54:46のところでstruct Aかstruct Bの宣言が欠けていると思われ
0875デフォルトの名無しさん
2006/03/13(月) 02:15:46struct B{ int val; struct *next;} *b1;
↑
なんか抜けてねえか?
0876デフォルトの名無しさん
2006/03/13(月) 03:25:170877デフォルトの名無しさん
2006/03/13(月) 03:32:480878デフォルトの名無しさん
2006/03/13(月) 03:34:00NILの定義を示してください
0879876
2006/03/13(月) 03:40:330880デフォルトの名無しさん
2006/03/13(月) 03:48:030881デフォルトの名無しさん
2006/03/13(月) 03:54:500882デフォルトの名無しさん
2006/03/13(月) 12:03:39元々代入されている文字配列へ再度代入するという行為(一番下のfor文の所です)はダメなのでしょうか?
#include <stdio.h>
void main(void){
int i,j,str_size;
char str[64];
puts("文字列の入力");
fgets(str,64,stdin);
if(!str) puts("文字列は入力されていません");
printf("入力された文字列は%sです",str);
str_size = sizeof(str)/sizeof(str[0]); //文字のサイズ
for(i=0,j=str_size;i < '\0' , j >= 0 ; i++,j--)
str[i] = str[j];
printf("回文は%sです",str);
}
0883デフォルトの名無しさん
2006/03/13(月) 12:26:52色々と間違えてる。
とりあえず、各変数の値がどうなるか、
一行ずつしっかり確認汁。
0884デフォルトの名無しさん
2006/03/13(月) 12:32:09分かりました。変数を出力して確かめてみます。解答ありがとうございます!
0885デフォルトの名無しさん
2006/03/13(月) 12:32:11これは、文字のサイズじゃなくて配列の個数だと思うのだが。
strlen()とか使う。
しかし、2バイト文字はこのまま(char)だとうまくいかない。
わかるね?
そして、
>str[i] = str[j];
文字列上書きしてるだろ。
0886デフォルトの名無しさん
2006/03/13(月) 12:32:43それに回文を作るルーチンとしてもおかしい
0887デフォルトの名無しさん
2006/03/13(月) 12:36:060888デフォルトの名無しさん
2006/03/13(月) 12:36:35すいません。そうでした要素数を計算したかったんです。
2バイト文字はcharの領域を倍使う事位しか知りません・・・。
もう一度やり直すべきですね・・・。
では言われた事を再度確認してきます。ありがとうございます。
0889デフォルトの名無しさん
2006/03/13(月) 12:38:41というのはプログラム自体を考え直すべきなのですねOrz
>>887
デバッグの仕方を知りませんので、分からないです
0890デフォルトの名無しさん
2006/03/13(月) 12:56:49もっともそれすらうまくいってないが
0891デフォルトの名無しさん
2006/03/13(月) 13:03:02回文というのは要素数が奇数でしたら下のi=jの条件でいいと思ってたんですが
それすらもダメですね。偶数の場合の判定条件も要素が隣接したらブレイクする位しか
思いつかないし・・・orz
この考えは回文としては不適切なのか教えて頂けないでしょうか?
#include <stdio.h>
#include <string.h>
void main(void){
int i,j;
char str[64];
puts("文字列の入力");
fgets(str,64,stdin);
printf("入力された文字列は%s",str);
j = strlen(str);
for(i=0; i < '\0'; i++){
str[i] = str[j--];
if(i == j) break;
}
printf("回文は%s",str);
}
0892デフォルトの名無しさん
2006/03/13(月) 13:08:51i < '¥0'の時点でループが(ry
0893デフォルトの名無しさん
2006/03/13(月) 13:12:04うわぁ・・・すいません。文字列での条件でした。
0894デフォルトの名無しさん
2006/03/13(月) 13:29:22回文なんか俺にはできる訳ねぇーーーーーーーーーーんだよ馬鹿めぇぇ!!!!!!
うはははははははは見くびるな!もういい。俺はプログラムのデリケートな所が大嫌いだ。辞〜めた
0895デフォルトの名無しさん
2006/03/13(月) 13:52:310896デフォルトの名無しさん
2006/03/13(月) 13:56:340897デフォルトの名無しさん
2006/03/13(月) 14:41:32下の結果で文字列strの入力した(文字数+1)に反転させた文字列をコピーさせるのですが
実行結果が入力12345→出力12345、回分が12345で同じになってしまいます。
なぜなのか教えて下さい('A`)
printf("入力された文字列は%s",str);
j = strlen(str);
for(i = j+1 ; j >= 0 ;i++,j--){
str[i] = str[j];
}
printf("回文は%s",str);
0898デフォルトの名無しさん
2006/03/13(月) 14:45:28forループの最初でコピーされるstr[j]は何だと思う?
0899デフォルトの名無しさん
2006/03/13(月) 14:52:07jはstrlen(str)によって求められた要素数ですので、12345を入力したとしたら
5になるわけですから、str[6] ==@str[5]になるbフではないでしb蛯、か?
bサしてjをデクリメントして行く = 12345のj--によって配列4番目の要素がstr[7]に
代入される。というのが自分の考えです・
ですのでstr[j]は12345の場合5の要素・・・
あっ配列ですので要素数は-1されるんですね?ちょっとやってみます!!
0900デフォルトの名無しさん
2006/03/13(月) 14:58:19文字列、配列の扱いが全然難しいので、文字列とはを検索して勉強します。
0901デフォルトの名無しさん
2006/03/13(月) 15:41:41str[6] = str[5] // \0
str[7] = str[4] // 5
str[8] = str[3] // 4
str[9] = str[2] // 3
str[10] = str[1] // 2
str[11] = str[0] // 1
結果
1 2 3 4 5 \0 5 4 3 2 1
これを出力したら\0で止まるから12345だな
0902デフォルトの名無しさん
2006/03/13(月) 15:42:25でした
0903デフォルトの名無しさん
2006/03/13(月) 15:46:04あと2箇所直せばいいだけなんだがな...惜しいな
0904デフォルトの名無しさん
2006/03/13(月) 16:02:23char moji[]="hello";
int len,i,l,mo;
l = strlen(moji)-1;
for(i = 0; i < l/2;i++){
mo =moji[i];
moji[i] = moji[l - i];
moji[l - i] =mo;
}
0905デフォルトの名無しさん
2006/03/13(月) 16:10:22文字列の回文できました!ありがとうございます!出力結果が改行されて見た目が
少し変ですけど、嬉しいです(ノ∀`)スッキリ
j+1→j-1 と str[j]→str[j-1]の変更でできました。ヒントありがとうございました。
>>904
それも挑戦してみたんですけど、できなかったので参考にさせて頂きます。
0906デフォルトの名無しさん
2006/03/13(月) 16:19:22boolean b=false;
while(b){}
としたらできたのですが、友人に聞いたら、
それではメモリが支配されてしまう(?)ので、あまり良くないとのことです。
やはりそれではダメなのですか?ダメならどうすればいいですかね?
0907デフォルトの名無しさん
2006/03/13(月) 16:19:22> j+1→j-1 と str[j]→str[j-1]の変更でできました。
いや、それは「たまたま」上手く動いているだけ
俺の考えた方法は
j = strlen(str) - 1; ← わざわざjを-1するより、ここで-1した方が良くね?
for(i = j+1 ; j >= 0 ;i++,j--){
str[i] = str[j];
}
str[i] = '\0'; ←非常に重要、何故重要なのかは宿題とする
あと、表示を綺麗にしたいなら
printf("\n回文は%s\n", str);
とでもすればいい
0908デフォルトの名無しさん
2006/03/13(月) 16:21:10(b)→(!b)
ですm(_ _)m
0909デフォルトの名無しさん
2006/03/13(月) 16:21:54友人に聞け
0910デフォルトの名無しさん
2006/03/13(月) 16:24:31解決策については本人も分からないらしいです。
0911デフォルトの名無しさん
2006/03/13(月) 16:32:14あっ・・・そちらの方が見やすいですね。
なぜstr[i]='\0'をするのかはfor文で代入直後には終了を示す'\0'が代入されて無いので
文字配列が終端を認識できないため、代入するという事だと思いますが・・・。
0912デフォルトの名無しさん
2006/03/13(月) 16:32:530913デフォルトの名無しさん
2006/03/13(月) 17:58:09まぁおそらく>>912が書いてるようにCPUが占有されることだと思うが
並列処理については環境依存の方法使った方がいいんじゃないか?
0914デフォルトの名無しさん
2006/03/13(月) 18:09:470915デフォルトの名無しさん
2006/03/13(月) 18:11:23そうします。
0916デフォルトの名無しさん
2006/03/13(月) 18:19:21密結合でか?
メモリの帯域をどうシェアしているかによるが
疎結合で言うとフラグファイルのようなものって言えばわかるかな
0917デフォルトの名無しさん
2006/03/13(月) 18:26:540918デフォルトの名無しさん
2006/03/13(月) 18:28:06>>916ごめんなさいわかりません(@_@)
>>906以外の方法で、条件が満たされるまでウェイトするような
方法はありませんかね?
0919デフォルトの名無しさん
2006/03/13(月) 18:35:18密結合がわからないってことは、「並列」と言っているのはマルチスレッドか?
もっとかみ砕いて言うと、組み込みか、そうでないか、どっちだ
0920デフォルトの名無しさん
2006/03/13(月) 18:41:59組みこみでないと思います。
0921デフォルトの名無しさん
2006/03/13(月) 18:42:36OSによってやり方が変わるが、シグナルとかを使う
0922デフォルトの名無しさん
2006/03/13(月) 18:47:26OSによって変わるんですか…
いまの私には難しそうですね。
0923デフォルトの名無しさん
2006/03/13(月) 19:45:270924デフォルトの名無しさん
2006/03/13(月) 20:45:12switch(TRUE){
case 論理式:
処理1。break;
case 論理式:
処理2。break;
・
・
・
}
っていう書き方はあり?
来月からマになってしまうんですが、今まで独学でやってきたので、
自分は変態なんじゃないか(書き方が)と不安で不安で…。
こんなこと恥ずかしくて同期には聞けないので教えてください(///)
0925デフォルトの名無しさん
2006/03/13(月) 20:46:320926デフォルトの名無しさん
2006/03/13(月) 20:47:270927924
2006/03/13(月) 20:50:020928デフォルトの名無しさん
2006/03/13(月) 20:52:19団塊の世代(50代-60代前半) : アセンブラ, PL/I, COBOL70
新人類世代(40代) : 新生COBOL, C
バブル世代(30代後半) : C, C++(実際の所C言語レベルが大半), VB, Perl
偽団塊ジュニア世代(30代前半) : C, C++, VB, Perl, PHP
真性団塊ジュニア世代(20代後半) : C++, Java, Perl, PHP, AspectX (Xはそれぞれ適した言語)
やる気のない世代(20代前半) : D言語, VB, C++, Java, Perl, PHP, AspectX(Xはそれぞれ適した言語)
0929デフォルトの名無しさん
2006/03/13(月) 20:59:16ただし、
register n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
こういう変態的なコードは書けてしまったりする。
0930デフォルトの名無しさん
2006/03/13(月) 21:00:100931デフォルトの名無しさん
2006/03/13(月) 21:14:36switchのほうが格好悪いし使いにくい。
while(なんかのイテレータ->hasNext()){
値 = イテレータ->next();
if(値が妥当で有れば){
//else-if文替わりに実行
}
}
ってかんじならelse-ifのかわりにできるだろう
0932デフォルトの名無しさん
2006/03/13(月) 21:22:04そもそも、caseに書けるのは定数のみ。
式なんて書いたらコンパイル通らないだろ。
0933924
2006/03/13(月) 21:24:44最近ActionScriptとかperlしか触ってなかったので、cでも出来るんじゃねとか思ってました…。
> 929
なにやってるんだかまったくわかんない…。
0934デフォルトの名無しさん
2006/03/13(月) 21:24:48switchが使いにくいっていうやつより有望ではあるな
ま、でもCではif-elseにするしかない。
いやなら多段if-elseは関数にくくり出して結果をintにコード化して返してswitchで使うだわな。
コードに論理的意味付けを持たせれば、
判定実装と論理的意味に対する処理という異なるレイヤーを混在させなくてすむ。
0935デフォルトの名無しさん
2006/03/13(月) 21:30:360936デフォルトの名無しさん
2006/03/13(月) 21:30:54switchは上から総なめするときに有効なだけで
無理して使うことは無い。
0937924
2006/03/13(月) 21:42:32今まで学問としてcや他の言語を学んだことがないので、
自分のソースコードってどうなんだろうと疑問に思ったんです。
周りの同期はみな大学でプログラムを学んでいるようなので、
書き方のお作法や定石なんかがしっかりしてるんだろうなと。
レスをもらって、そこら辺自分は甘いなぁと改めて感じました…。サンクスです。
>>931, >>934, >>935
判定用の関数を作ってイテレータをぐるぐる回すとかの方がカッコイイんですかね。
そうすれば、もう変にswitchになんかこだわらなくても良さそうです。
0938デフォルトの名無しさん
2006/03/13(月) 21:43:02935 も言いたげだが、自分で作るための言語にあれもこれも用意させてどうする
0939デフォルトの名無しさん
2006/03/13(月) 21:46:37コーディングの作法はやらないと思うがな
0940デフォルトの名無しさん
2006/03/13(月) 21:47:510941デフォルトの名無しさん
2006/03/13(月) 21:50:43true
0942デフォルトの名無しさん
2006/03/13(月) 21:54:040943デフォルトの名無しさん
2006/03/13(月) 21:55:37C++ にあって C99 にないものか
0944デフォルトの名無しさん
2006/03/13(月) 22:54:43コピペしか方法が分かりません
0945デフォルトの名無しさん
2006/03/13(月) 22:56:27↓これも併用して
Windowsキー+Eを二秒押すと全角カナ設定が保存される。
Windowsキー+Lで編集が便利になる機能がオンになる。
0946デフォルトの名無しさん
2006/03/13(月) 22:58:130947944
2006/03/13(月) 23:13:03もう1つお願いします。全くの初心者なんですが、コンパイルするメモ帳のファイルはどこに置いたらいいですか?
デスクトップのCというフォルダに保存してるんですが、今の場合だとC:\Documents and Settings\自分の名前\デスクトップ\C>
という感じで長くなって見にくいです
0948デフォルトの名無しさん
2006/03/13(月) 23:13:38パスが通っている。
0949944
2006/03/13(月) 23:15:010950デフォルトの名無しさん
2006/03/13(月) 23:16:180951デフォルトの名無しさん
2006/03/13(月) 23:17:55あと質問は一回にまとめろ。本はやさしいものを買え。
0952944
2006/03/13(月) 23:21:53どうもありがとうございました
0953デフォルトの名無しさん
2006/03/13(月) 23:24:000954デフォルトの名無しさん
2006/03/13(月) 23:24:13こりゃまた最悪な種をまいたもんだな
0955デフォルトの名無しさん
2006/03/13(月) 23:40:37自動生成するツールがあれば教えてもらえると嬉しいです。
0956デフォルトの名無しさん
2006/03/13(月) 23:41:090957デフォルトの名無しさん
2006/03/13(月) 23:42:20クラス図作成機能があったのは知ってるが
0958デフォルトの名無しさん
2006/03/13(月) 23:45:530959デフォルトの名無しさん
2006/03/14(火) 00:01:29関数仕様書や処理フローも無く、どう製造するのかと問いたい。
0960デフォルトの名無しさん
2006/03/14(火) 00:04:08因果関係が逆
関数からどんな意図が推定できるかではなく(ソース読む人を馬鹿にしすぎ)、
どんな意図からその関数が出てきたのかを示さねば人手で資料を作る意味はない
0961955
2006/03/14(火) 00:19:07足がかりに出来ないかなとか考えてました。
0962デフォルトの名無しさん
2006/03/14(火) 00:39:31普通はタグテーブル作って参照できるようにするだけじゃないかね
0963デフォルトの名無しさん
2006/03/14(火) 00:41:070964デフォルトの名無しさん
2006/03/14(火) 00:44:350965デフォルトの名無しさん
2006/03/14(火) 00:47:43他人のコードを読むのはほぼ初めてで全然進まない状況なんですが
タグテーブルって何ですか?検索してもHTMLのタグのことばっかりでてきます
効率よく読める方法があれば是非教えてもらいたいのですが
0966デフォルトの名無しさん
2006/03/14(火) 00:51:48なんか初心者向けなフロントエンドあったっけな
と思って検索してみたらこんなの出た
http://catfish.virtualave.net/ctagsbr/ctagsbr.html
0967デフォルトの名無しさん
2006/03/14(火) 00:59:380968デフォルトの名無しさん
2006/03/14(火) 01:35:39少々癖がある+結構高い$495上に英語のみ(まぁここは問題ないだろうけど)だが
評価版もあるんで試してみると吉
0969デフォルトの名無しさん
2006/03/14(火) 02:03:34全然進まないならタグテーブルでも情報量過多になることも考えられるので
相当物を手作業で作ったほうがよいかも。
ナビゲーション性が悪いとストレスが溜まるのでブックマークをつけられる
エディタやヴューワを使ったほうがよい。
あとは印刷物にマーカー持って向き合うかだな。
0970デフォルトの名無しさん
2006/03/14(火) 02:27:00横だけど、これいいね。xyzzyとも相性いいね。
VSのプロジェクトファイルがあるなら、VSがベストだけど
この軽さもいい感じ。いい情報ありがとう
0971デフォルトの名無しさん
2006/03/14(火) 04:08:250972デフォルトの名無しさん
2006/03/14(火) 05:17:54だめ
0973デフォルトの名無しさん
2006/03/14(火) 05:18:530974デフォルトの名無しさん
2006/03/14(火) 08:05:31使ってる人います?使うとしたら形式はQTとJavaDocどっちにしてます?
あとフローチャートを作成するのにお勧めToolはありますか?
また関数からフローチャートを作成するToolも探してます。
できればフリーのほうがいいです
なぜならQAの人たち(検査する人たち)に説明する際にソースを印刷するよりもフローのほうがいいからです。
よろしくお願いします。
0975デフォルトの名無しさん
2006/03/14(火) 09:02:34まず、アドレスとは限らない。
# 実装としてアドレスが使われる事は多いが。
0976デフォルトの名無しさん
2006/03/14(火) 11:21:38http://pc8.2ch.net/test/read.cgi/tech/1142302804/
0977デフォルトの名無しさん
2006/03/14(火) 18:17:29char name[64];
struct person *next;
}Person;
Person* AllocNode(void)
{
Person *heap = (Person *)malloc(sizeof(Person));
return heap;
}
void TempPerson(Person *data)
{
Person *ptr;
data->next = AllocNode();
ptr = data->next;
printf("名前の入力");scanf("%s",ptr->name);
printf("%s",ptr->name);
}
0978デフォルトの名無しさん
2006/03/14(火) 19:07:190979デフォルトの名無しさん
2006/03/14(火) 19:35:24何でですか><
0980デフォルトの名無しさん
2006/03/14(火) 19:40:000981デフォルトの名無しさん
2006/03/14(火) 19:52:290982デフォルトの名無しさん
2006/03/14(火) 19:57:51インラインでググッテきます。
0983デフォルトの名無しさん
2006/03/14(火) 20:11:13インライン云々の問題じゃないと思われ
0984デフォルトの名無しさん
2006/03/14(火) 20:11:450985デフォルトの名無しさん
2006/03/14(火) 20:13:230986デフォルトの名無しさん
2006/03/14(火) 20:27:420987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
2006/03/14(火) 20:33:17の紹介文において、わいせつ行為で捕まえられないですか?
0989デフォルトの名無しさん
2006/03/14(火) 23:39:32あれをわいせつ行為だと思える、その精神がわいせつ。
エロいことばっかり考えてるからそう思えるんだって。
"C"言語にもそういうこと期待してる?もしかして。
0990デフォルトの名無しさん
2006/03/14(火) 23:55:200991デフォルトの名無しさん
2006/03/14(火) 23:57:470992デフォルトの名無しさん
2006/03/15(水) 01:03:38main () {
int a;
printf("a = %d\n",a);
a = 2;
printf("a = %d\n", a);
return 0;
}
これを実行すると
a = 1
a = 2
と出るのはなぜですか?なぜ最初にa = 1と出るかが分かりません
0993デフォルトの名無しさん
2006/03/15(水) 01:05:240994デフォルトの名無しさん
2006/03/15(水) 01:05:340996デフォルトの名無しさん
2006/03/15(水) 01:11:110997デフォルトの名無しさん
2006/03/15(水) 01:11:27>>993-994で理解できないなら向いてないからやめた方がいいよ^^
0998デフォルトの名無しさん
2006/03/15(水) 01:17:120999デフォルトの名無しさん
2006/03/15(水) 01:18:321000デフォルトの名無しさん
2006/03/15(水) 01:21:16main () {
int a; ←宣言した時、a に入っている値は不定値。
printf("a = %d\n",a); ←ここでその不定値を表示してるだけ。不定値の意味くらいは分かるよな?
a = 2; ←ここで初めて、a に2が入りました。
printf("a = %d\n", a); ←ここでその、a の中に入っている2を表示してると。
return 0;
}
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。