C言語なら俺に聞け(入門編)Part 116
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/06/14(金) 20:22:05.73★前スレ
C言語なら俺に聞け(入門編)Part 115
http://toro.2ch.net/test/read.cgi/tech/1368444993/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 164代目
http://toro.2ch.net/test/read.cgi/tech/1370255305/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
# サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/C/C++の宿題片付けます 165代目
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0739デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANなにか不具合起こっても勝手にexitするようなわけにいかないことが多いだろうし、
きっちり終了処理書く癖つけとくべきだと思うけど
0740729
2013/07/08(月) NY:AN:NY.ANfreeするのにCPUさんがガンガン電気使ったりして。
0741729
2013/07/08(月) NY:AN:NY.ANだね。それが現実的。
0742デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN高速なCが今時扱いされるのはなぜ?
0743デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0744729
2013/07/08(月) NY:AN:NY.ANPythonとかHaskellとかJavaとかC並みに高速で安全性の高い言語
がありコンピュータの処理速度も上がり、言語による実行速度の
違いをさほど意識する必要がなくなってきたいまどきということでござろうよ。
0745デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANベンチ結果も書かずに何言ってるの?
お前が勝手に意識しないだけだろ、キメェ
0746729
2013/07/08(月) NY:AN:NY.AN黙れ羊野郎、はい論破。
0747729
2013/07/08(月) NY:AN:NY.AN俺はそう理解したと述べてるだけだしー、ベンチ結果が知りたければ
自分で勝手にベンチすればいんじゃねつー感じだしー、
一生メーメーほざいてろよって感じ。
0748デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0749デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANメリットあるの?
0751デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANcygwin の bash もわりと
0753デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN羊の寄せ乳知らない童貞野郎は引っ込んで露
それがそうでもないんだ‥‥
うちの会社のとある24時間システム、java で組んであるけど、タスクマネージャをみるたびにページファイル使用量が増えていく‥‥
そして、ある日突然リブートするんだ‥‥
GC なんて信じらんない
http://toro.2ch.net/test/read.cgi/tech/1364009659/
http://toro.2ch.net/test/read.cgi/tech/1363171842/
ここらがくわしいよ
0756729
2013/07/08(月) NY:AN:NY.ANタスクマネージャを見なきゃいんじゃないでしょうかというバカなことをいうのは
やめておこうと思いますが、実装がまずいじゃないの?
0757デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0758デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN>うちの会社のとある24時間システム
Qはロートルニートなんじゃね?
0759デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANただ使うだけで自分もろとも信用失墜する絶叫カーでしかないってことさ
0760デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANまあ、JAVA VM の実装がちゃんとしててメモリーリークがないとしても、そのシステムの実装がタコでメモリー確保しまくってたら、そりゃ落ちるわな。
0761デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN必要がないからといってそういうところ無頓着なマが書いてんだろうな。
0762デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANまずはその幻想をぶち壊す
0763デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANCは時代遅れ
0764デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN壊すじゃなくて殺すだねそれ
0765デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANというのは幻想を擬人化した表現であり
文学板ならまだしもム板ではただの基地害
0767デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANstrncat
↑
strnはstringだと思う
catって何からきてるんですか?
0768デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0769デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0770デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0771デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0772デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANわかります。
0774デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANint memcmp(const void *cs, const void *ct, size_t count)
{
const unsigned char *su1, *su2;
int res = 0;
for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
if ((res = *su1 - *su2) != 0)
break;
return res;
}
(res = *su1 - *su2) != 0
この部分は
*su1 != *su2
ではいけないんでしょうか?
0775デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANいいでしょ。これで。
for (...)
{
if (*su1 != *su2)
{
break;
}
}
return *su1 - *su2;
0776デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANmemcmp()のリターン値は、
cs > ct → 正
cs < ct → 負
cs = ct → 0
だから。
0777デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN(res = *su1 - *su2) != 0 だと算術演算をしてその結果のフラグレジスタをそのまま
参照できるから速くなるのかな?
>>775 だと引き算の結果を有効に活用しないで、別に比較命令を実行しなくてはいけない。
最適化がかかれば関係ないかもしれんけど。
0778デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0779デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANstrcatだと連結ソースの型が違うよーって怒られるデス!
0780デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANC言語でなくてもいいんだったらC++のstringで、a+bで連結できる。
0781デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANchar str[100] = "abc";
char ch = 'x';
len = strlen(str);
str[len] = ch;
str[len + 1] = 0;
0782デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANわからないと格好つけて言ったらそうなるのか。
0783デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0との比較なので
引き算 + 条件ジャンプ
比較演算 + 条件ジャンプ
CPUへの負荷は同じということなのですね
勉強になりました
0784デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANstrlcat(dst, sizeof(dst), &c, 1);
0785デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANありあと!
0786デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANそれcount==0のときaccess violation
0787デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANだから何だバーカ。
0788デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0789デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0790デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0791デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0792デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANよっぽど悔しかったか?
0793デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN*su1 != *su2
ではいけないのかって話ですが?
0794デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0795デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN>>775のコードに問題があるかどうかだが。
0796デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN疑問です。
0797デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN要素数に255個という制限があった。悲しかった。
0798デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANいやエッジケースくらい常に考えろよww
定数倍の速度より遥かに重要
0799デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANいやint x[N];
Nの最大値はどのくらいですか?
0800デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANでしょ。あんたが言ってるのはそれ、だから俺とあんたは違う話をしてるよね。
0801デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN揚げ足取りして何が楽しいのかね。
まともな教育受けてないんじゃないかね。
0802デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANstraycatsは迷い猫オーバーラン!を起こすけど、
それの対策用のstrayncats関数は無いからな。
0803デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANcount==0の話だが?
0804デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN>>776
0805デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANやおい
0806デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANある構造体Boxに中の変数Countがあるのですが、その値を見る関数GetCountを関数ポインタを使ってメンバ関数的に割り当てようとしています
//include省略
typedef struct Box{
int count;
int (*GetCount)(struct Box *);
} Box_t;
int Box_GetCount(Box_t* p_box){
return p_box->count;
}
Box_t* Box_New(int num){
Box_t* p_box = (Box_t *)malloc( sizeof(Box_t) );
p_box->count = num;
p_box->GetCount = &Box_GetCount;
return p_box;
}
int main()
{
Box_t* box1 = Box_New(5);
printf("%d", box1->GetCount(box1));
free(box1);
return 0;
}
このやり方ですと、構造体Boxのメンバ関数GetCount(外部関数Box_GetCountのポインタ)でメンバ変数countを読む時に
box1->GetCount(box1) と自身のポインタを渡すようになっているのですが、これをbox1->GetCount()のように引数なしでできるでしょうか?
構造体内の宣言を変えればいいのか、関数Box_Newの中身を変えればいいのか悩んでおります。ご教授頂けると幸いです
0807デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANムリ。
C++使ったほうがいい。
0808デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANできない
個人的にはbox1->GetCount(box1)にするくらいなら、Box_GetCount(box1)とかにすればと思う
0809デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANこれだと多態はできても、抽象型プログラミングみたいのができないからあんまりうれしくないね。
Cでやるなら >>808 みたいにしてカプセル化くらいでいいと思うわ。
0810デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANこのような引数を持つ関数を呼び出す時の作法がわかりません
以下の二つの方法は試しましたがどちらもNGでした
char ary[5][10] = {0};
// ここでary に入れる処理 (strcpy(ary[0], "abc");等)
func(ary); // 型エラー
char *ary[10] = {0};
// ここでary に入れる処理(strcpy(ary[0], "abc");等)
func(ary); // 通るけどaryの中身がおかしい
どなたかよろしくお願いします。
0811デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANc言語 関数 引数 配列 型 サイズ
で検索したらいいんでは。
0812810
2013/07/09(火) NY:AN:NY.ANどなたかよろしくお願いします
0813デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANこういうこと?
char array[10] = "abcde";
func(&array);
0814811
2013/07/09(火) NY:AN:NY.ANエラーになるんだろう。
0815810
2013/07/09(火) NY:AN:NY.ANいえ、これだと型が違うのでエラーになってしまいます
>>814
そうですね
なので char ary[5][10] = {0}; のように変数を用意してメモリ確保
その後にメモリへ目的の値ををコピー
そしてfunc読み出しとしたのですが型が違うと怒られてしまうのです
このようなケースでは具体的にどの様にすればいいのでしょうか?
0816811
2013/07/09(火) NY:AN:NY.ANこれではダメだろう。関数側で書き込む領域まで大きめにメモリ確保しないと。
自分もだが、こういう基礎レベルで迷う場合はC++を使った方がいい。
vector<string>型なら簡単。
0817デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANexeファイルだけで全てすませたいです。
0818810
2013/07/09(火) NY:AN:NY.AN申し訳ありませんが C でお願いします
そういえば getopt 等の関数がこのパターンに該当するのでGoogle等で検索してみた、、のですが
どれもmain関数からの呼び出しからのみで参考にならず…
0819811
2013/07/09(火) NY:AN:NY.ANコンパイラ側がchar[N]型みたいのを生成していて、ちょうどサイズを一致させないと受け付けなくなってる気がした。
0820810
2013/07/09(火) NY:AN:NY.ANmalloc等を使う上に環境依存だとは…
今の環境だと確実にメモリ断片化が起きるので動的にメモリ確保は使えない…
malloc が使えない環境だと getopt 等の関数は使えないのかなぁ
0822デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0823デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN組み込み?
ならその手の物は使えないよ
0825810
2013/07/09(火) NY:AN:NY.ANメモリにかなり制限がある環境でそれに近いと思います
>>824
なるほどー
staticで確保してそこを挿すようにすればよかったのですね
おかげさまで解決しました
ありがとう
0826811
2013/07/09(火) NY:AN:NY.ANそれは別にしてあれこれ動かしてみた結果、サイズを別に渡すのがうまくいくと思った。
#include <stdio.h>
void func(char *ary, int size) {
printf("%s\n", &ary[0]);
printf("%s\n", &ary[size]);
strcpy(&ary[size],"22222");
}
int main() {
char ary[2][10] = {"000000000","111111111"};
func(ary, sizeof(ary[0]));
printf("%s\n", ary[1]);
return 0;
}
0827デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0830811
2013/07/09(火) NY:AN:NY.ANポインタと配列でアクセス方法が変わってしまう事と、
ポインタの時、データが連続している保証がない事で困る。
ポインタと配列をどちらも入力できるようにするのは諦めるべきでは?
ポインタの時、配列のようにデータが繋がっているとしたら、これで共通のアクセス可能だが。
#include <stdio.h>
void func(char *ary) {
strcpy(&ary[0],"22222");
strcpy(&ary[10],"33333333");
}
int main() {
char ary[2][10] = {"000000000","111111111"};
char* bry[2] = {"000000000","111111111"};
//func(ary); func(bry);
func(&ary[0][0]); func(&bry[0][0]);
printf("%s %s\n", ary[0], bry[0]);
printf("%s %s\n", ary[1], bry[1]);
return 0; }
0831デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANメモリ制限がある環境でstaticはないだろと思ったけど、malloc/freeで断片化するような頻度での呼び出しでは有りか。
そもそも int a[][] と int *a[] とはまったく別物と決めてかかったほうがいい、それでみんな楽になる
0833デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANここはてめーの学習帳じゃねーんだよゴミ
ゴミってポインタ以前に本当に頭わりーな
0834デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0835デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN今ならHeadFirstCで分かりやすく解説してあるから立ち読みしてくるといい
0836デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANhttp://anago.2ch.net/test/read.cgi/bizplus/1373207268/
0837片山博文MZパンク ◆0lBZNi.Q7evd
2013/07/09(火) NY:AN:NY.ANリソースファイル
0838デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANブログのアクセス数どのくらい?
何か面白いプログラム作ってよ
■ このスレッドは過去ログ倉庫に格納されています