part 0x64 おめでとう!
文字列の細かい操作はやっぱりC++よりCの方がやりやすいなあ え?独り言はチラシの裏に書けって?どうも
>>5 std::stringが使いにくいってこと?
それなら同意。
rubyやpythonと比べたら使いづらいけど Cと比べれば全然マシだと思うけどなぁ
sprintfの万能さには勝てない。
sprintfじゃバッファオーバーフローが防げない char buff[十分なバッファ]; とかしてsnprintfの戻り値チェックとかめんどくさいっす
/dev/nullに書いて長さ調べるのはだめなの?
数スレ前で同じような話があった気がする
テンプレートライブラリって普及してるの? あれってコンパイルするとマクロみたいに展開されて デバッグ凄く大変になるんじゃなかったっけ? 昔ATLとか出始めの時に使おうと思ったけど メンテナンス性が凄く悪そうな印象だったからやめた記憶がある。 なんかライブラリと自分のコードの境目が曖昧になるのって あんまり居心地がよく無い
普及してる
>>10 どういうこと?
できたらサンプルソースお願い。
>>14 #include <stdio.h>
#include <stdarg.h>
int formattedLength(const char * form, ...)
{
FILE * fp = fopen("/dev/null", "w");
va_list args;
va_start(args, form);
int len = vfprintf(fp, form, args);
va_end(args);
fclose(fp);
return len;
}
int main(int argc, char ** argv)
{
printf("%d\n", formattedLength(argc > 1 ? argv[1] : "%g", 1. / 3));
return 0;
}
文字配列の初期化って0x00で初期化するのがいいの? ヌル文字で初期化ってどうなのかなあ。 0x20で初期化するのってどう?
危険
>>16 asciiの積もりだろうから空白文字だろうけど、それで初期化することは無意味。
先頭にナル文字を書いておけば、長さ0の文字列として扱える。
>>15 んーと、それを簡単に書くと
int len = snprintf(NULL,0,...);
でしょ?
int len = snprintf(NULL,0,...);
int plen = len+1;
char *p = malloc(plen);
snprintf(p, plen, ...); /* erro check 省略 */
free(p);
毎回、snprintfを2回呼んでmalloc/freeはダサくね?って話。
とはいえ、固定長バッファで溢れたらエラーで終わりってのも微妙だし
バッファを使いまわしてreallocするのも微妙
天地明察の原作者が一番かわいそうだわ
誤爆ごめんなさい
22 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/31(土) 23:02:22.15
asprintf使えよ
assprintf?
処理系依存じゃん
うん
俺はC言語の達人 まいったか!?
まいりました
なにこの名前欄
これもすべてQZクズのせい
yaccで分岐ステートメントをインタープリター実装する方法がわからないので教えてください。 selection: __STATE_IF expression __STATE_THEN expression __STATE_ELSE expression とした場合にthen、else両expressionが還元されるので、 if x then a=1 else a=2のような構文がインタープリター動作の場合破綻してしまい困ってます。 これを解決する一般的な良い方法があったら教えてください。
パースの段階では構文木を構築するだけにして、実行とは段階を分けるのが普通。 小手先のトリックを使えばなんとかならんでもないけど… 例えば cond: __STATE_IF expression __STATE_THEN ifstatement: cond expression __STATE_ELSE expression という風にふたつに分離してしまえば条件節の結果を先に得られるので、 それが真であれば else 節はよみとばす (パースだけして副作用を発生させないようにフラグを立てるとか) というような実装にできる。
>>32 フラグで読み飛ばすって、具体的にどうやるか思いつかないです。
cond: __STATE_IF expression __STATE_THEN {$$=$2; if_cond=$2;}
ifstatement: cond if_expression __STATE_ELSE if_expression
if_expression : expression {if (if_cond) 各種;}
的なことだろうけど、このif_cond をどう使えばいいのかイメージが沸きません。
>>実行とは分けるのが普通
たしかに全体を一旦中間コード(おれアセンブラコード)へ変換するアプローチの方が
逆に簡単なような気がしてきましたorz
(簡単のためにインタープリターにしようと思ったのだけど、コンパイラー作る方が逆に簡単っぽい)
いま閃いたんですけど、 lexのパーサーモードに%x <if_then>や %x <if_else>を用意して 字句解析の段階でダイレクトに if_expression の読み飛ばしを指定してみてはどうかと。 gotoをラベルテーブルに対するyyin操作で実装するような感じで。
35 :
31 :2012/04/01(日) 13:40:59.33
>>32 ありがとうございます。とてもいいヒントになりました。
&((HOGE + i)->fuga) という表記って、もっとすっきり書けないんでしたっけ? (別にポインタを用意するのはナシで) もう長年使ってないから忘れてもーた…(´Д`)
&HOGE[i].fuga
>>36 あんま変わんね
&HOGE[i].fuga
FUGA* getFugaReference(HOGE* hoge, int index);
40 :
36 :2012/04/01(日) 19:15:16.83
やっぱ直接メンバ指定すると配列になっちゃうかー dd
プログラミングの勉強を始める時に色々オススメの本を教えて頂いた者です。どうしてもお礼が言いたくなり、この場を借りてお礼を言わせて下さい!あの時は本当にありがとうございました!お陰で苦手だった勉強も楽しくなってきました!本当ありがとうございます!
可愛いやつだ
ステマ乙www
>>44 #defineではなく、enumで、数値に名前をつける。constもつかえる
「数値は、マクロではなく定数として定義しよう。Cプログラマは、マジックナンバー
の値を管理するのに伝統的に#defineを使ってきた。しかしCのプリプロセッサは
強力だが乱暴なツール(中略)
CとC++では、整定数をenum文で定義できる。C++では任意の型の定数をconstで
宣言できる。
const int MAXROW = 24, MAXCOL = 80;
」
『プログラミング作法』p. 41(ブライアン・W・カーニハン、ロブ・パイク)
>>44 オブジェクトサイズは言語に計算させよう(中略)
2や4ではなく、sizeof(int)
(中略)
char buf[1024];
fgets(buf, sizeof(buf), stdin);
バッファサイズは依然としてマジックナンバーだが、宣言に1回登場するだけで
済む」
『プログラミング作法』p. 43(ブライアン・W・カーニハン、ロブ・パイク)
>>46 C++ならいいけど、Cのconstは外部リンケージだから定数には使いにくいっていうか。
配列の要素数とか使えないところもあるし。
>>44 未来から来て、過去の人を笑うのは簡単。
100%バグのないプログラムもない。
人間謙虚でありたいものですね。
> 配列の要素数とか使えないところもあるし。 具体例ほしいなー
>>50 const int TBL_SIZE = 10;
int tbl[TBL_SIZE]; ← エラー
>>51 あー、ごめん
それがエラーになるような実行環境の具体例ね。
マクロはプリプロセッサーだけど constはコンパイラーオプションだからな
>>44 これもC++の仕様と混同してるだけなんじゃないの?
え? そいつ、C++知らねーんじゃねーの? 今時Cの本もないだろに。
>>54 初めて知ったわ
file scopeだとダメなんだね
59 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/02(月) 16:14:45.52
>>57 C++だとマクロよりconstやらinline関数の使用が推奨されてるから、
Cでもそうだと思ってるんじゃないの?
>>44 のブログの人。
61 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/02(月) 16:17:13.73
本 人 乙。
enumハックなつかしいなぁ。
即値やdefineマクロを使わずイミディエイト値を用意するとなると・・・
#define定数をconst定数に書き換えたところで大してありがたみを感じたことって実際ないよな #defineで普通に問題なく事は進んでいくし
まぁデバッガで見えるのと、括弧をつけたつけないで変なことにならなくて 済むってくりだからね。
C++ での NULLの実装は… 任意なんだっけ? ほとんど #define でやってるように見受けられるけど
関数のプロトタイプにconst付いてない場合にconst定数を引数で渡すと引数の型が違うとか言って怒られるし プロトタイプを変更したらconst付けてないのが渡せなくなるしマジうざいんだけど
>プロトタイプを変更したらconst付けてないのが渡せなくなるしマジうざいんだけど こう言う動作だっけ? もうC++書いてないから忘れたけど 関数の引数でconst宣言するのって 関数内部で参照先の値を変えませんよって言ってるだけじゃなかったっけ? 呼び出し側でパラメーターに非const渡せないとか有るんだけっけ?
70 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/02(月) 19:08:01.79
ス レ 違 い
プログラミング作法って本当に良書だよなあ さすがカニチャーハンさん 尊敬しております(^人^)
間違いを突っ込まれるとスレ違いって言い出す人が現れるな。
どこがつっこみだよ。 ろくに知りもしないなら書くなよ。
constは糞でFA
自分がconstの仕様を知らないのをconstが糞だって言ってごまかしてたらいつまでたっても上達できないだろ。
>>69 メンバ変数を書き変えませんよの const メソッドとごっちゃになってる気配
単にプロトタイプと定義の両方を同時に変更してないってだけじゃね?
>>71 鬱になって会社辞めた時、もうプログラムなんてしない
と思って「プログラミング作法」捨てたんだよな。
もったいないことした。
もうプログラムなんてしないなんて言わないよ絶対〜
デスマ はじまるよ ほら また 僕のそばで〜
こういうのってマヌケがよく書くよな。
>>71 俺も欝でITは辞めたけど、未だにプログラムは書いてる。
でも辞めた際、結構本捨てたなぁ…
>>42 、43
レス遅くなってすみません。色々あって職を変えることになり、覗く暇がなかったもので^^;
なるべく自分で答えを見つけたいのでどうしても分からなくてどうしようもない時はまたお願いしていいですか?優しい言葉ありがとうございます!
C++のconstはオブジェクトを値で渡すイメージで使いたい時にとても便利 オブジェクトを実際に値で渡すとスタックを大きく消費するしそのたびにコンストラクターや コピー演算子が呼ばれてしまうが、constを付けることでオブジェクトのアドレスをスタックにコピーするだけですむのだ 関数内部でオブジェクトが変更されないことが保証されているので、 呼び出し側はあたかも引数に渡したオブジェクトをプリミティブ型のように扱うことが出来る。 いわゆる近代的な言語で設計されているStringオブジェクトやIntegerオブジェクトのようなプリミティブ型を 具象化したクラスが、非コンストメンバーを持たないことで、プリミティブ型のような動作を するのはとても興味深い。このような動作をさせるのにコンスタントオブジェクトという考え方はとても重要である。
何アホなこといってんだコイツ 脳みそにウジでも湧いてんのか Cのconst語れよ低能
>>84 それは const とともに & も必要じゃないかい?
まだC言語スレでC++を語る馬鹿がいたのか
つかC99で可変長配列おkになったよね?
なんか
>>51 とか
>>54 で不安になって確認しなおしちゃったよ
C99でもダメじゃないのか?
C99では、配列宣言時には要素数に変数も使えるんじゃなかったか? 真の意味の可変長配列(スコープの途中で要素数を変更したりできるもの)ではないけど…
ああ、ファイルスコープか
>>92 これ、ちゃんと最適化されて静的配列になるのかね。
ヘッダーファイルで#define のかわりにconst使うとすると、
static const int n = 100;
とか
extern const int n;
とかしないといけないじゃん。
下のようにすると最適化は不可能だよね。
C99のお作法的にはどうするのが正解なんだろ。
>>97 処理系によって、状況によって最適化されるよ。
VC や gcc は翻訳単位をまたぐ最適化もできる。
C言語で2Dゲーム作るのにDXライブラリーより簡単なライブラリーってある?
ncursesだとnethackくらいが限界かと思う。
つくーるでつくれ。
うん
猫でもわかるってサイト一通り見たんだけど、次何やればいい? サイトとか教えて
「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得 ↓ 「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する ↓ 「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得 ↓ 「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ ↓ 「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター ↓ 「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する ↓ 神の誕生
英語で言う文法みたいな感覚は理解できたけど、そこから先が・・・orz
やろうとしていることをプログラミング言語以前に母語で説明できない奴はプログラマに向いてないってダイクストラが言ってた。
だいたい分かるだろw
109 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/04(水) 00:17:35.18
天才の9割は左利き
というかB型が圧倒的に多い、経験則だが。 組み込み系なら一層ね。
まず作りたいものがあってその実現の為に必要な知識を身に付けるという流れが正しいのであって ただ盲目的に知識だけ身に付けてもそれで何か勝手に生み出されるかっていうとそういうわけではないよね
デタラメに仕入れたはずの知識が線で結ばれることがある オートマトンとかグラフとか、汎用性が高いと信じられているものと それに付随するアルゴリズムは、知っておくだけでも有益
ポインタについて質問させて下さい。 いま、あるメモリ上にint型の領域をおき int*型ポインタ変数ip3にそのアドレスを、 int**型ポインタ変数ip2にip3のアドレスを、 int***型ポインタ変数ip1にip2のアドレスを入れ、 ip1から辿って***ip1でint型の値を得られるようにすることを考えます。すなわち、 ip1→ip2→ip3→int型の値 のような形にしたいという事です。それで以下のようなコードを書いたのですが int ***ip1, **ip2, *ip3; ip3 = malloc(sizeof(int)); *ip3 = 2; ip2 = malloc(sizeof(void*)); *ip2 = ip3; ip1 = malloc(sizeof(void*)); *ip1 = ip2; printf("%d",***ip1); これだと型宣言の時点において、int型の値との間に挟まれているポインタの数に応じて、*の数を静的に決めなければなりません。 最終的にint型の値を取り出す際には、*の数を指定してやらなければならないと思いますが、 ip1, ip2, ip3はその仲立ちに過ぎないのですから、「int型からポインタ何個分離れているか」はドントケアで良いはずです。 このような場合、そのように定義するのが適切でしょうか? ip1,ip2,ip3をvoid*で定義しようとしたらエラーが出ました。
訂正です。 ×そのように定義するのが適切でしょうか? ○どのように定義するのが適切でしょうか?
115 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/04(水) 18:54:36.28
そもそもの設計が間違ってる。
テメーの手に余ることを設計しても 手のつけられないゴミカスが出来上がる お前がアホなうちは そんなクソをこの世に生み出すのは やめ☆とけ
>>113 void *ip3;
ip3 = malloc(sizeof(int));
*ip3 = 2;
これがエラーになる理由を考えよう。
>>113 void *で宣言して使う時にキャストすりゃできるけどさぁ…
ip1とip2のmallocはいらないだろw
>>113 > 「int型からポインタ何個分離れているか」はドントケア
うんうん、ドントケアだよドントケア。
そんなこと考えないからね。
専用のmalloc/freeを作るところから始めようじゃないか *int malloc_i2(int**);void free(int**) **int malloc_i3(int**);void free(int***);
ip1→ip2→ip3→int型の値 ここだけ抜き取ってみると線形リストでことたりるんじゃね? と思ってしまう
>>113 よくわからんが、やりたい事は↓のようなことじゃないか?
int *pi, **ppi, ***pppi;
// int用領域確保
pi = malloc(sizeof(int));
// intの値設定
*pi = 2;
ppi = π
pppi = &ppi;
printf("%d\n", ***pppi);
>>122 ppi = π
って右辺は化けている。
化けないようにアンパサンドを全角で書くけど。
ppi = &pi;
です。
化けてないでござる
jane style と firefox じゃあ モロにギリシャアルファベットのパイになってる
>>122 アンパ **;ってHTMLの特殊文字の書き方だったのを思い出して、
下記のように書き換えました。
int i, *pi, **ppi, ***pppi;
// int 値設定
i = 2;
// 各ポインタ設定
pi = &i;
ppi = π
pppi = &ppi;
printf("%d\n", ***pppi);
構造体を使えば済む話だろ、どうせ。
エロイ人〜教えてー mallocとかでメモリ確保するのに実メモリサイズ以上の メモリ取ろうとしたい場合ってどうすりゃいいの? 例えば、PCに8GBの実メモリ積んでて、10GBのメモリを確保したい時とか。 仮想メモリとか、実メモリで説明してくれ。 ダメなら、どういうエラー処理すればいいのかもよろしく。
>>128 設計見直して、実メモリ内で収まるようにする。
メモリマップドファイル使え 以上。
さんきゅー ぐぐってみるゎ!
標準関数と同じ結果を返す自作関数(strlenやstrcpy)を作成してみたのですが、 パフォーマンスが大きく異なるのですが一体何が原因なのでしょうか? 以下strlenの自作関数strlen2 int strlen2(char *Buff){ int i=0; while(Buff[i]!='\0'){ ++i; } return i; }
最適化
>>136 具体的にどのようなコードにすればよいのでしょうか?
>>135 Cの標準ライブラリ関数は非常によく使われるので、
実装がチューニングしてある事も多い
内部でSSEのような拡張命令を使ってたりね
あと、コンパイラが標準ライブラリ関数を検出して、
インライン展開などの最適化をかけている事がある
>>128 PCがWindowsマシンをさしているのなら、実メモリサイズの制限は受けないよ。
>>113 に答えて頂いた方々ありがとうございます。
線形リストをやりたいのではなく、ポインタを使ってアクロバットな事をやればポインタへの理解が深まるかなぁと思ったのですが・・・どうもトンチンカンな事をしていたようです。
ip1とip2のmallocは確かに要りませんでした。ip1 = &ip2;で良かったですね。
void *にキャストされたポインタは、元のポインタに戻すことができると決まっているけれど、 元の型がわからないから、そういうのを構造体に持たせて、線形リストにしてはどうかという提案だと思っていたよ。 いかにもめんどくさそうでしょ。でもポインタへの理解を深める目的だったらやってみてもいいんじゃないの。
>>137 repne scasb
あたりを使えば速くなると思うけど、最適化で既に使われるのかな?
143 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/05(木) 09:36:36.95
論理演算で、指定の位のビットフラグが立っていれば削除するのってどうすればよいですか? 以下のことをif文をつかわずにやりたいです。 if(hoge & 3) { hoge -= 3; }
hoge &= ~3
145 :
143 :2012/04/05(木) 09:50:17.54
146 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/05(木) 10:05:10.99
みんなwchar_tって使ってる?
うん
>>143 最早どうでもいいだろうけど>143のコード断片では例えばhogeが1のときに破綻するよ。
149 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/05(木) 12:01:26.70
よかったです
1と2のorかもしれないじゃないか
>>143 4の倍数じゃなかったら3を引くってことをやりたいわけじゃないのね
うん
3てのは2ビット立っているってのを理解してないに3カノッサ。
指定の位のビットフラグ、、、 hoge &= ~(1<<2) なんじゃないのか?
日本語の説明と記述されたコードが不一致だから どうとでもとれるな
hoge 1 2 3 4 5 6
>>143 結果 -2 -1 0 4 2 3
>>144 結果 0 0 0 4 4 4
157 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/05(木) 18:38:17.55
#include <stdio.h> #include <sys/types.h> static u_int biton(u_int a, u_int bit) { return a | (1 << bit); } static u_int bitoff(u_int a, u_int bit) { return a & ~(1 << bit); } static int bitcmp(u_int a, u_int bit) { return (a & (1 << bit)) ? 1: 0; } main() { printf("%u\n", biton(biton(0, 0), 1)); printf("%u\n", bitoff(7, 2)); printf("%d %d %d\n", bitcmp(3, 0), bitcmp(3, 1), bitcmp(3, 2)); }
hogeの下位2ビットをクリアしたい、と解釈しましたので、
>>144 のようなコードになりました。
どういう結果になって欲しかったんだろう・・・?
3がどうこうif無しどうこうで少し前のレスに釣られてフィズバズ試してた俺はピンとキタ こんなのしたかったんじゃないかな? int main(){unsigned x5=32,x3=8;int x; char buf[256]; char const*p[]={buf,"Fizz","Buzz","FizzBazz"}; if ((x=atoi((gets(buf),buf)))<=0)return -1; x3>>=(x%4); x5>>=(x%6); while(~0){sprintf(buf,"%d",x++); puts(p[(x3&1)+(x5&1)*2]); x3|=(x3<<3)&8;x3>>=1; x5|=(x5<<5)&32;x5>>=1; } return 0; }
mallocでメモリを確保したさい、callocと同様にゼロクリアするにはどうするのでしょうか? forで回してnilやNULLを代入してみたのですがダメでした。
面白い回答 ↓
0クリアしたいなら最初からcalloc使えよ
calloc = clear and allocate
>>160 ゼロクリアしたいならゼロいれればいいのに。
allocと別タイミングでゼロクリアしたいんだという話ならmemsetで
Cで文脈なしにnilって言われてもなんのことやら
NUL、NULLと間違えたんじゃないかとスルーしていた
NULなんて定義はないと思うが。
NULとかnilって昔なんかでみた気がする。 VBだかCOBOLだかでなかったっけ?
>>160 int *p = malloc(100);
memset(p, 0, 100);
NILは使ったことあるな。
ただし、気象用語だったが…
NULはASCIIコードの0x00 CRが0x0d,LFが0x0aってのと同じ nilは思いつくところでRuby,Lisp,Delphi,Luaで使われてる
C言語スレだっつーのに。 アホか。
なら、objcってことで。
なんだこのバカ
174 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/06(金) 08:29:06.23
>>forで回してnilやNULLを代入してみたのですがダメでした。 こっちの方が問題だろ。なにが起きたんだよ。
んなわけあるかボケ。
うん
でも、実際に>175が問題になる処理系はあんまりないんだよね。
パッキングによるmemcmpは普通にあるでしょ。
うん
ソースコードを実行形式に変換するには、どうすればいいですか?
chmod +x ソースコード
>>184 ググったんですけど、よくわかりません・・・orz
>>185 環境は?
Linuxとかなら、「gcc ソースコード」でコンパイルされ、
a.outっていう実行形式が生成されるはずだが。
サイト主に質問したら、VC++ 2005 Express 用のプロジェクトファイルなので VC++ 2005以降をインストールしろって言われました 自分の環境は、フリーのBccDevです
188 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/06(金) 16:39:00.27
はい、解決。
BccDevを使ってコンパイルできないんですか?
190 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/06(金) 17:25:46.19
まぁ手間はかかるかも知れんが、別にできんじゃね?
さぁ? できるかもしれないし、できないかもしれないし、できても動かないものかもしれないし
>>189 それを聞くようなレベルなら、VC++ 2005 Expressを入れたほうがいいよ。
金がかかるものでもないので。
うん
こんなのを質問されるサイト主も大変だ。
うん
めずらしくないよ
そして結局解決できずにこんなところにまで書き込む……
で?
プログラマになりたいんですがPGやSEの仕事はきついですか?
千差万別なので一概には言えませんが概ねきついです。 つーかそんなのはマ板で訊け。
まずスレチなのに書き込んじゃう時点できついんじゃね? 少し見渡せばわかるものを
Cだと1日1000行くらいしか書けないな。
むしろ、Cは沢山かける言語だと思うけど。 1行あたりの仕事量が少ないから。
それかけるっていうよりかくだよな
Cだと1日がんばって1000行だったな。しかも1000行越えると覚えてらん なくなって効率が落ちた。 C++を覚えたら1万行くらいまでは効率落ちなくなった。
確かにCだと一日1000行くらいが限界か… Perlだと400行くらいで頭がパンクするわ。
1000行書けるってすげーな 頭使わなくていい部分でないとそんなスピード出せねー
コードの7割は異常処理だからな 頭使う分のコードはせいぜい300行だ
1000行もあれば大抵のことはできる。
211 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/09(月) 11:17:31.24
1ファイルに1000書くの?
212 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/09(月) 11:43:14.63
1000!
0から1000行書くだけなら簡単だろ 数万行に膨らんだ後でも改変が容易かどうかで評価されるべき
215 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/09(月) 15:37:01.48
1000行で済むなんてのはコンパクトにまとめることに成功した時だな 手際が悪いとすぐ数倍に膨れあがる
1000行もあれば大抵のことはできる。
217 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/09(月) 19:35:24.71
質問です。 C言語で三角関数を使わずに画面上に楕円(軸が斜めも含む)を書くプログラムを教えてください。 そもそも可能なのでしょうか?
>>217 何も考えないで書くならピクセルを端から端までなめつつ
2つの焦点からの距離の和が一定の範囲に入っている所を塗ればそれっぽくなるんじゃ
線の太さとかはきれいにならないと思うけど
傾けるってことが分かってないのに得意げに 例示されてもな
affine変換すればいいだけだろ。
ID強制になったら面白いだろうなぁ。
面白いだろうな QZみたいな奴が2人以上いるのかどうか
>>220 ミッチェナーのアルゴリズムという名前が付いている。
ねぇ、なんでちょっとググればわかることを聞いちゃうの?
1.取り返しのつかないバカだから 2.他者との好意的なコミュニケーションを期待している 3.
はちみつが自信満々だから
ドヤ顔を見たいから
ともかくも プログラミングで扱うなら 全ての描画方法に名前を付けなきゃいけない
また変なのが湧いたな。
桜が満開だからじゃないかな。
239 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/09(月) 23:47:04.40
C11なんてのがあるんだ 知らんかった
桜の木の下に埋まっていればいいのに
C++11じゃなくて?
>>241 C11 は有るよ。 まだ JIS に反映されてないから日本語の資料はあんまりない。
こないだ読んでて無名共用体とか C で今まで使えなかったことを知った。
たぶん C11 をそこそこちゃんと実装してるのは gcc くらいだと思う。
いやいや、プログラマは数学強くないと駄目だって。 アルゴリズム考えるのに数学の力がなきゃ歯が立たないよ。 例えば、m×n行列とn×l行列の積を求めるアルゴリズム考えられるか? もうお手上げだよ ちなみにループが三重構造になるんだぜ
行列の積程度で 数学強くないと かよ アホか
それは数学とか以前に、定義からゆっくり考えろよ…… 結果のm*l行列について、第i行j列の値を出すには i行k番目とj列k番目の積を足していくんだから、そりゃ三重ループになるよ Strassenのアルゴリズムが思いつかないというなら、 それはそうかもしれない
そもそもそんなの使う仕事が無いけどな。 研究にしたところでライブラリ使えばいい話。
35歳、喫煙歴なし あぐらをかいていると、関節が固まるような感じがして だんだん痛くなり30分もすると立つことすらできなくなります。 足を投げ出して(これがすでに大変)数分も放置すれば 回復するのですが、これは何科にかかるべきでしょうか。
とりあえず偉そうに言う奴はまずcodepadに自分のコード書いてうpれよ 大言博ならその後にしろよ
お前は何もできないくせに偉そうだな。
>>160 に回答して頂いた方々ありがとうございます。
nilはObjective-Cの値です。スレチかなとも思いましたが、
オブジェクトをCの配列に入れるのに配列要素(オブジェクトのポインタ)がゼロクリアされていなければいけないらしく
そのために確保と同時にゼロクリアするcallocを使わないとダメと書いてあったのですが、malloc+アルファの処理でcallocと同じことが出来ないか?
と思い、その範囲(mallocを使ってcallocと同じ事をする)ならCの範疇だろうということで質問させて頂きました。
素直にcalloc使えということになるのでしょうか?
>>252 ちょっと確認だが
>>160 の「ダメでした」というのはオブジェクトを配列に入れることが出来なかったという意味か?
どういう挙動から出来ていないと判断した? 何かエラーメッセージでも出るのか、それとも seg fault になるのか?
>>174 も言っていることだが、何が起きているのかわからんので回答のしようがない。
C では特に代入にゼロクリアが必要とか無いし Objective-C の仕様でゼロクリアがどう関係してくるのかなんて知らんがな。
C スレ的には for 回しても memset でもゼロクリアはできるんでそこから先は素直に Objective-C のスレで訊けよ。
>>246 三重ループくらいなら直接for文書くが、4重以上の時はループ1個で済ませたりする。
255 :
217 :2012/04/10(火) 11:00:20.51
>>217 へのご回答をいろいろして頂きありがとう御座います。
>>222 さんが云われているように、軸を傾けるにはどう対処すればいいでしょうか?
なるべく整数だけの計算で済ませたいのですが、可能でしょうか?(sqrt()とか使わない条件です。)
>>252 > ゼロクリアされていなければいけないらしく
スレチだとおもうなら、このソースを出したほうがいいんじゃないの。
> そのために確保と同時にゼロクリアするcallocを使わないとダメ
なのになんでcalloc使わないの?反骨精神?
初心者が自分なりの工夫とか、10年早いんじゃね
ループでもmemsetでもゼロクリアできるじゃん。
C++難しすぎワロタ、キャストだけで4種とかないわ
スレ違いくそワロタ
>>259 一種類にいくつもの意味を持たせている C の方がムズい。
ひとつだと割り算だけどふたつだとコメントとか 冷静に考えれば気が狂った仕様だよな・・・
割ってかけたら、かけて割るまで無視されるからな。
割ると掛けるでコメントってのも似たようなものだろ。
ポインタの -> が一番違和感感じたわ。 何?この矢印モドキ。
そんなところで引掛ってるからお前はずっと間抜けのまんまなんだ
266「他人を非難出来る俺ってカッコイイ!!」
このいかにも春っぽいテンションの人って一人でいいのかな。 一人があちこちのスレにいたりするのかな。 そんなことはなくて何人もいるからこそ春なのかな…
->を使わなければ(ry
>>267 そんなこと言ってるからお前は間抜けのままなんだよ。
深い意味なんてないただの決め事をあーだこーだ言ってもしょうがないだろ
272 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/10(火) 18:28:10.25
コードの読みやすさはRubyが最強伝説 読みやすさならCではとうていかなうまい。 全てオブジェクトだから統一感もある コメントも#で始まって読みやすいぞォ 識別子に?が使えるのも素晴らしい if stack.empty? ・・・とか書ける訳だ Cも見習って欲しいな
RubyとかLinuxインストールしたときに最初から入ってない時点で論外
だよね Pythonのほうが読みやすいし
それは Gauche ユーザの俺への挑戦か
276 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/10(火) 20:36:42.42
>>259 なるほど、おまえさんには難しすぎるようだな
4種類じゃなく無数にあるぞ
BYTE列から指定フォーマットで変数代入したいんだけど、どうやんの? fscanf(fp, format, ...)みたいなこと簡単にできないかー
sscanf?
sscanf(const char *str, const char *format, ... );
rubyはメソッドチェーンが最高にガンだからなぁ
おまえら時代はPHPだよ。 俺もHTMLの中に書くだけの簡単なスクリプト言語でしょ なんて馬鹿にしてたんだけど、これがC言語とPerlのいいとこ取りで 機能的にも足りないところはほとんど無い感じ。 WEB言語なんてイメージとどまらずにC言語の標準入出力ライブラリーにPerlの文字列操作、 画面ライブラリーにHTMLを使えると思えば良いんじゃないのかな。 キーワードはHTML5、JavaScript、そしてPHP。 これが世界の最先端開発環境で間違い無しだよ
PHPは文字列なのか数値なのかいまいちはっきりしてないし 開発チームがセキュリティにかなり無関心というのも気にくわない
ンなこと言ったら C言語は型にうるさすぎて しかも肝心の型がデフォで少なすぎる てな話になる 100文字の文字列と100個の数字 同じように見えるけど 100個の数字のほうはCじゃムリじゃん
なんだ100個の数字って。 ひょっとして100桁の数値といいたのか?
0000000000012322 こういう数字のカタマリは どーなるんだよ っちゅーことだよ
アホとは話にならんな、まったく。
PHPスレからでてくんな
>>288 PHPだと文字列なら文字列、数値なら数値
Cだと文字列なら文字配列、数値なら8進数の数値
なんだ、結局COBOLが最強だったのか
もうアセンブラでいいよ。
だね
COBOLは帳票向けの言語だから、数字処理が得意ってだけ 科学技術計算はfortran使うって、昔は住み分けてたんだけどね
PHPerは何がしたかったんだろう…
CではなくWindows APIなのですが 数値の表示方法(エラー表示)はどうすればいいのですか? Cだと 文字表示 printf("hello"); 数値表示 int i = 10; printf("%d", i); Winodows APIだと 文字表示 MessageBox(NULL, "hello", NULL, MB_OK); 数値表示 ???
>>298 #include <stdio.h>
#include <stdlib.h>
ありがとうございます。できました char c[100]; sprintf(c, "%d", 10); MessageBox(NULL, c, NULL, MB_OK); でも3行かかってしまいました printf("%d", 10);のように みなさん、どうやって一行で表示してますか?
可変長引数を受け取る関数を自作してその中で。
ありがとうございます。一行で表示することができました
いえいえ
OutputDebugStringというのもあるんだけどな
306 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/11(水) 19:00:11.59
>>301 デバッグ用なら AllocConsole と freopen しとけば
普通に printf や perror が使える
# もっとも俺はそんなことしない
# GUI はデバッグ情報が膨大すぎるので
# 絞り込みの工夫・・・というかデバッグ自体をきちんと設計する必要がある
名無しがもとにもどった‥‥‥
void my_strcat(char *dest, char *source){ while (*dest++); while (*dest++ = *source++); *dest = 0x00; } main(){ char fname[128]; char ext[] = ".csv"; strcpy(fname, "filename"); my_strcat(filename, ext); printf("%s\n", filename); } 実行結果がfilename.csvと出力されないのは、文字列リテラルは書き換えができないからでしょうか。
>>309 > while (*dest++);
これが問題じゃね?
考えると *dest == '\0' であることがわかった後に ++ してるんだから、
この文が終わった時点で dest が指しているのはヌル終端の一個後ろだろ。
while (*dest) dest++;
に書き換えればいいと思うよ。
実際に動作させずに言ってるし酒飲んでるから間違ってたらごめんな。
>>309 #include<stdio.h>
void my_strcat(char *dest, char *source)
{
while (*dest)dest++;
while ((*dest++ = *source++));
}
int main()
{
char fname[128];
char ext[] = ".csv";
my_strcat(fname, "filename");
my_strcat(fname, ext);
puts(fname);
return 0;
}
略した書き方しないで普通にif文やら配列やら使って分かりやすく書けよ。結局自分でも分からなくなってるジャン
315 :
デフォルトの名無しさん :2012/04/12(木) 00:30:10.13
>>313 なるほど
>>312 には「自分は解ってません」て書いてあるな
werror 君ぽい滑稽な作風も痛い
316 :
デフォルトの名無しさん :2012/04/12(木) 00:33:20.57
ま た チ ョ ン か。
317 :
デフォルトの名無しさん :2012/04/12(木) 00:38:38.93
脳なんたらの?www
皆様ありがとうございます。
はじめのwhile (*dest++);
これが間違っていたのですね。
>>313 さんの仰るとおり、カッコつけた書き方はやめて、誰が読んでもわかるようなコーディングを身に着けていきたいと思います。
それにしても、Cはどうしてこう、複雑に書けるようになっているのでしょうか。
実行速度が求められるから?
そもそもなんでstrcatを使わないんだ? 勉強ならstrcatのソースを読めばいいのに。
>>318 それが当時の計算機に一番素直な形だったからだよ。
自分に実力をつけて、自信を持ちたいというのがあります。 ライブラリにある、システムコールのない関数のアルゴリズムを考えることくらいはできた方がいいかなと思いました。 これまでにstrlen(),strcpy(),memset(),atoi()など、簡単に実装出来そうな関数は作ってみたのですが。 どうやったら実力がつくのかなあ。 ちょっとパスカルを勉強して、コーディング作法を身につけたりしたほうがいいのかなあ。 優秀なマになりたいのです(´Д` )
だったらソースを読めって。 strcatのソース読んだのか?
アセンブラで書かれてました。
珍しく基本を押さえたことしてるのが...
>>321 アルゴリズムの本買ってソートを順番にやっつけてこうぜ
>>318 その複雑に見えるのは、難しそうに見えているだけじゃないかな。
惜しいところはいくつかあるけど、素直な方針でやれてるので、その調子でとしか。
>>321 その意気やよし
自分でコードを書くこともいいが他人のコードを読むのもいいぞ
LinuxやFreeBSDなどの様々なコマンドのソースを読んでみるがよい
>>318 頼むから後置++ ごときで「複雑」とかやめてくれ
マシン自体がもともとそのようにできているのだから (例: PC, SP)
>>329 そこじゃなくて評価順の理解がまだ不十分なだけだと思うよ。
あとその例はおかしいよな。たとえ前置インクリメントと読み替えたとしても、それである必要性がない
331 :
デフォルトの名無しさん :2012/04/12(木) 11:41:20.51
>>330 空想論か? それとも RISC の PC が前置だとでも言いたいのか?
ポインタの更新が直列と思い込んでいるほど ++ が不可解に見えるだけだ
一般的に、スタックポインタは前置デクリメントだけどね。 問題は、CPUがどうかじゃないよ。 C独特の手っ取り早く済ませるスタイルも書けないまでも読めないとね。
>>331 モトローラの石は後置インクリメント、前置デクリメントじゃなかったっけ?
>>332 書かないまでも読めるべき。書けるのは前提。
char * straycat(char * restrict s, const char * restrict append) { char *r = s; char *a = "2回○ね〜っ"; for (; *s; ++s); while (*s++ = *a++); return r; }
>>334 たった1つしか知らないくせにモトローラのとかwww
>>312 綺麗に書こうぜ。
void my_strcat(char *dest, char *source)
{
while (*dest) dest++;
for (;;) {
*dest = *source;
if (*dest == '\0')
break;
dest++;
source++
}
}
きたねぇ。
10のなんとか乗を表すのにeとEがありますが 今まで意識せずにeを使ってましたが別にどっちでもいいんですよね?
いいんです。
342 :
デフォルトの名無しさん :2012/04/12(木) 14:09:01.60
>>332 で、後置はどうなんだ? デクリメントか?
C 独特というのは間違いだぞ
>>337 もう一度聞く、空想論か?
普通、pre-increment/post-decrementだな。
>>318 K&R本の付録A参照マニュアルのA13:文法(295ページからの6ページ)を
なにも見ずに空で書けるようになるまでは、K&R本を捨てない方がいいですよ
とだけ言っておく
そんなもん書くやついねぇ。
おい 今日からプログラムを始めようと思うんだ それでC言語やればいいみたいってとこまでわかったんだ そんでコンパイラってのがいるってのもわかったんだ 俺に最適なコンパイラを教えてくれ 勿論フリーで 俺のスペックは14歳の女子だ
つくーる いじってろ。
なんで俺がプログラムに目ざめたかといえばだ クラスメイトの奴がアプリ開発しやがってなんかちょっと羽振りがよさそうだから羨ましくなったんだ きいたら半年くらいあればアプリ開発までいけるって言ってたから 俺も頑張ってその金でカラコン買いたいんだ
カラコン買ってコスプレしてカシャカシャフラッシュを浴びまくりたいんだよ そんでその写真が大物監督の目にとまって映画デビューするんだ そのためにはコンパイラは避けては通れないんだ
春だなぁ。 学校にはちゃんと行けよ。
ケチなお前らが教えてくんねんから一応 Visual C++ 2010 Express をインストール中だ いいのか?これで?
いいよ。
で、どんなもん作りたいんだ?
>>356 マジか さんクソ
今いれたの早速削除するわ
俺のOSはW7だけど大丈夫だよな?
>>357 バカ売れするアイフォンアプリを作りたいんだが
どんなんが売れるんだ?
ちょっと図書館いってくるわ 閉まっちゃうから早くいかないと C言語の本借りてくるわ あとラノベと
>>358 iPhoneだったら、MacのiOSかその互換OSが必要だよ。
Visual C++じゃ無理。
ごめん、iOSじゃなくてMac OS Xだった
362 :
デフォルトの名無しさん :2012/04/12(木) 17:21:57.14
>>358 最後の一行が致命傷だ
提案力ないやつはどんなに頑張っても決して報われない
何が売れるかわかったら、さっさと引きこもる。
技術的には割としょーもないもんでもウケてるのあるからな。 売れ筋を見極める目がないようではだめぽ。 つーか、そんなんわかるんだったら自分で作るわ。
携帯のアプリ作りたいならJavaだろ
>>360 マジで?
マックねえとアイフォンアプリ作れんの?
困るじゃねえか
>>362 いいの とりあえずCから学ぶの
オブジェクティブCってので書けば出来ると思ってたんだが 違うのか?
>>367 どう考えても貴様様にはご無理でしょう。
iPhoneアプリを開発するには、iPhone SDKが必要。
iPhone SDKを動作させるには、Mac OS Xかその互換OSが必要。
初心者は、おとなしくMac買うんだな。
>>367 アイフォンは持ってるよ 4S
じゃあマックを手に入れるのが先なのか
という事はその金はアンドロイドアプリの開発で稼ぐしかないのかな
よく考えたらカラコンよりマックのほうが高いじゃねえか
あれだな。 自宅業務内職のために、まずワープロ買わせる、みたいなビジネスモデルだな。
詐欺にひっかかった気分だ ラノベよも
374 :
デフォルトの名無しさん :2012/04/12(木) 18:15:50.23
何をしたらいいかわからん奴におすすめは脱獄 ひたすら悪さばっかりするクソガキやってると その頃の生活の知恵が後に糧となっている
アプリ開発で金稼ぐ自信があるならウィンドウズ向けにアプリ作ってvectorあたりにシェアウェア登録して金儲けしてみろよと何でもしもしならうまくいくと思えるんだ
一応もしもしのほうが金が取りやすいのは間違いない
ちょっと調べてみたが インテルCPU積んでるマックならいいのか? スペックとかうんこでも
>>377 原理的には可能。多少いらつくと思うけどね。
Mac OS XじゃなくてIntel Macだったようだね。あやふやな知識でごめん。
そうか ねだって買ってもらった7のミニノートがあるんだフロンティアの 1年以上使ってないからまずそれを売ろう あとX箱のソフトとか売って さらにアイフォン3Gの本体あるから売るわ そんで中古のマックMINIとか買えばいいな
>>380 いや 色々ありがとう
パンツのひとつもあげたいくらいだ
問題はミニノート以外は妹の持ち物という事だが 最近スカイリムを買ってもらって夢中だから気づかないだろう
385 :
330 :2012/04/12(木) 18:40:09.54
>>342 ええと、なんかがんばってたんだな。
たとえばSPが後置インクリメントである環境を用意するよね。
>>329 は、マシン自体がそうなってるから、
それを複雑というのはやめてくれという主張だよね。
これがどれだけおかしな主張だったり例であるかがわからないの?
Mac OS X 10.5.3以降必須って書いてあるぞ。
AndroidならLinuxでJavaでタダじゃないの
何! OSも新しいのがいるのか 2万以下で買えるかな・・・
389 :
デフォルトの名無しさん :2012/04/12(木) 18:51:17.98
>>385 方言が強くてわからへん、何言うとんねん
>>387 なんかさ アンドロイドのアプリは端末の使用がいっぱいあって開発がめんどくせえんだろ?
どっかの会社が開発コストかかりすぎて儲からんってアンドロイドからは撤退してたじゃん
>>390 あれ、ネイティブコードをばりばりつかってるゲームだからじゃね?
あえてネイティブコードで書かないと性能が出ないってのも困りモンだな
あるshift-jisで書かれたテキストファイルを読み込み、 multibytetocharおよびwidechartomultibyteを使ってutf-8に変換して、 またファイルに書き出してます。 ですが、ファイルの末尾を書き出すと、その末尾の文字は正しく書き出されるのですが、 その後ろに数倍とぐらいゴミみたいなデータが書き込まれてしまいます。 これってどんな原因が考えられるでしょうか
> あるshift-jis shift-jisにはいくつかの種類があんのか? それとも「shift-jisで書かれたとあるテキストファイル」なのか? 日本語くらいはしっかり使えアホ > 数倍とぐらいゴミみたいなデータ そのバイト列は具体的にどんなもんで いつも同じなのか それとも違うのか そんくらい書けよバカ
397 :
デフォルトの名無しさん :2012/04/12(木) 23:49:04.22
などと意味不明な供述をしており
mallocで領域を確保するといいますが、確保しただけじゃ領域に書き込む事って不可能では? 実際 int *m; m=malloc〜〜だと ポインで与えられるので、目的の領域に数値を書き込めなくない? と思うのですが。
>>398 なんでやね〜ん。
そんなことより、ただの typo だとわかっていても「ポインで与えられる」という言葉が妙にツボった。
400 :
デフォルトの名無しさん :2012/04/13(金) 00:27:05.52
>>398 確保された領域の記憶保護については未規定ということか
よく思いついたね、でっていう
>>398 この辺のいきさつは規格に何か書いてあったような記憶がある
malloc()で確保した領域に書き込み出来る事が保証されてないのなら
多くのプログラムが書けなくなってしまうからな
なんだここ 随分上から目線のやつがいるんだな 俺よりレベル下のくせによ まあいい 明日また来るよ
だってchar *t;の場合tの指し示す領域に書き込みするにはstrcpyとか必要でしょう? int *tの場合は、ポインタ経由で同じ領域に書き込めるのは何故かなと。
>>403 バカ発見
char *p; が既に領域確保済みなら
*p = 'a'; と書き込み可能
あんたが言ってるのは文字列のコピーであって、全く意味が異なる
>>396 > shift-jisにはいくつかの種類があんのか?
まるで「種類なんてないだろ?なんでこう取れる書き方をした?」とでも言いたそうだけど。
406 :
デフォルトの名無しさん :2012/04/13(金) 02:31:00.75
Cの参考書で、分かり易いものがあったら教えて貰えませんか?
いまどのレベルなの
C実践プログラミング
3000バイトぐらい確保したバッファの末尾部分だけを見たいんですが、 デバッガでブレークポイントで停止しても最初の100バイトぐらいしか見れません どうにかして末尾部分を見る方法ないっすか?
>>409 デバッガの使い方は他のスレで。
つーか、あんたがどんなデバッガ使っているかわからんのに答えろとでも?
気がきかねーな デバッグつったらVCしかねーだろ
正解を見つける前に工夫して何とかすることができない限り未来は暗い
工夫する前に過去事例をチャッチャと見つけられない限り未来は暗い
つーかファイル出力するとか色々やり方はあるだろ File* fp = fopen("dbg.txt", "wb"); for(int i=0; i<3000; i++) fputc(data[i], fp); fclose(fp); たった4行でできるのに馬鹿じゃね
バーロー ファイルに出力するときにもう解読不可能な文字になってるから、 文字コードを見たいんだよ
バイナリエディタで開くかsprintfで16進に変換した跡で出力
fprintf("%02X " , data[i] & 0xff); こんな感じでいいんじゃね?
デバッガ名乗って>409ができないとかあり得ない VCならウォッチにptr+2900, 100とかデバッグ→ウィンドウ→メモリとか
名乗るほうのデバッガじゃないと思うよ
gdbなら全部見るオプションがあるね
だから、スレ違いなんだから相手にすんなよ。
一週間前に買ったC言語入門編の本を読み終えそうなんだけど 次、どの本読めばええの…
バイナリエディタを忘れてた ありがと
>424 コンパイラのマニュアル 他人の書いたソース
>>424 本屋でぺらぺらめくって、知ってることと知らないことが書いてある本を探す
>424 PC9801プログラマーズバイブル
C言語を256倍使う本
堀紘一 著 「一番いいのはサラリーマン」 「サラリーマンなんか今すぐやめなさい」
433 :
406 :2012/04/13(金) 19:34:26.44
>407-408 ありがとうございました。繰り返しとか条件分岐は分かる程度です。
434 :
424 :2012/04/13(金) 19:50:51.20
ふむ。サンクス とりあえず本屋よってみる
ゴミデータが書き出される理由がマジわかんね 誰か助けてくれよ
末端と思っている箇所が末端として伝わらないファイル書き出しをしてるとエスパー 変換の過程で得られるであろうバイト数(or 文字数)を利用して fwrite() してるのか \0 終端を期待して fprintf() してるのか
最後はstrlenを使ってバイト数を出して、 fwriteのバイナリモードで書き出してる。 fprintfって\0まで書き出してくれるっていう仕様だっけ? やってみる。
fprintfで書き出しても一緒だった じゃあヌル文字の前に何故かゴミが入ってるってことか。 くそっ UTF-8変換の過程で末尾に変なゴミが入る原因って何だよ!! 末尾以外の文字は完璧に変換できてるっていうのに!!
pとqというリストをもらってpの後ろにqを連結するプログラムを作りたいのですがこれで実行するとpのリストしか表示されません なぜこれではリストの連結ができないのでしょうか リストを表示するプログラムはこの中にあるのと同じような条件でやっています。 実行結果は p= 10 20 30,q= 40 50 というリストがあった場合 10 20 30 と出力されます struct cell *append(struct cell *p, struct cell *q) { struct cell *k, *h; h=(struct cell *)malloc(sizeof(struct cell)); k=(struct cell *)malloc(sizeof(struct cell)); k=p; h=k; while(p!=NULL) { printf("%d %d\n",p->value, k->value); p=p->next; k=k->next; } k=(struct cell *)malloc(sizeof(struct cell)); k=q; while(q!=NULL) { printf("%d %d\n",q->value, k->value); q=q->next; k=k->next; } return(h); }
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ★ 本日13日(金)よる10時より 《人権救済機関設置法案反対ツイッターデモ》開催 ★ ツイッターしている人は、ハッシュタグに#人権救済機関設置法案反対#nhk24をつけて、この法案の 危険性、抗議の法案などをいっせいに呟きましょう。 ツイッターと連動している「NEWS WEB24」に取り上げてもらいましょう 。 ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
>>440 リストpの後にqをつなげているように見えないけど?
お漏らししてるw
>>439 Win32 の WideCharToMultiByte とか MutiByteToWhideChar 使ってるのか?
これの戻り値は終端の \0 を含まない文字数を返すから
文字列として(つまり \0 で終わることを保障するように)扱いたいのならば
必要なバッファの大きさは 戻り値+1 であり
変換前に領域を 0 で埋めるか バッファ[戻り値] = 0 と終端を付加しないと
その後の文字列処理(例えば strlen 等 \0 終端前提の関数)が成立しないぞ
>>447 win32api はそういうのが多いのかな?
*(DWORD *)buff = N;
n = SendMessage(hwndEdit, EM_GETLINE, i, (LPARAM)buff);
InnerBuff[n] = 0;
のセットに気がつくまで苦吟した。
>>448 文字を操作するのはほとんどそういうの
所々「文字数」だったり「バイト数」だったりで
動的確保時に要注意の奴があったようななかったような
>>447-449 それやってもダメだった。
なんかゴミが書き出されないときと書き出されるときがあるんだよな。
それぞれ読み込んでるファイルは違う。
コードはこんな感じ
void Write(char *buf,FILE *fp)
{
int nsize;
WCHAR *p16;
char *p8;
nsize= MultiByteToWideChar(CP_ACP,0,(LPCSTR)buf,-1,NULL,NULL);
p16 = new WCHAR[nsize+1];
memset(p16,0,sizeof(nsize+1));
MultiByteToWideChar(CP_ACP,0,(LPCSTR)buf,-1,(LPWSTR)p16,nsize);
nsize=WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)p16,-1,NULL,0,NULL,NULL);
p8=new char[nsize+1];
memset(p8,0,nsize+1);
WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)p16,-1,(LPSTR)p8,nsize,NULL,NULL);
nsize=strlen((char*)p8);
fwrite(p8,nsize,1,fp);
delete [] p16;
delete [] p8;
}
sizeof(nsize+1)はただのnsize+1の間違い もちろんこれでもだめ。 ゴミが出るときはあるファイルを読みこんで書き出すとゴミが発生する でも発生しないときのファイルの末尾は、 ゴミが出るときのファイルと一緒で改行コードで終わらせてる だから何が原因かマジでわからん
24時間経ってようやくコードのお出ましかよ 一緒に出しときゃあ24時間も丸々ムダにせずにすんだのに
> memset(p16,0,sizeof(nsize+1)); ここは memset(p16,0,sizeof(WCHAR)*(nsize+1)); じゃないと全部ゼロクリアできないんじゃないの?
454 :
451 :2012/04/14(土) 07:33:59.96
>>453 うん
その通りだ
でもそこ修正してもダメだった。
この関数を呼び出す前の、テンプレートファイルを読み込む部分のコードは、
fp=fopen(TEMPLATE1,"rb");
fseek(fp,0,SEEK_END);
fgetpos(fp,&size);
fseek(fp,0,SEEK_SET);
basic = new char[(int)size];
memset(basic,0,(int)size);
fread(basic,(int)size,1,fp);
fclose(fp);
こんな感じでバッファを確保して、
このバッファをWrite関数に渡してるんだがおかしくないよね?
455 :
451 :2012/04/14(土) 07:41:26.13
ちなみにこのテンプレートファイルを読み込んで、 そのままUTF-8に変換せずに書き出してもゴミはなかった。 だからテンプレートファイルに最初からゴミが入ってるってことはないと思う。 よって、やっぱりさっきの変換関数のどこかがおかしいんだと思う
一般的にファイルには、終端文字が記録されていないので、 basic = new char[(int)size+1]; memset(basic,0,(int)size+1); だな。
457 :
451 :2012/04/14(土) 10:23:43.31
>>456 うおおおおおおおおおおおおおお!!
これだ!
やってみたらゴミ消えたよ!!
マジありがとう!!!
基本のファイル読み込みの時点で間違ってたとは情けない
ご迷惑をおかけしました
ベターCということで以後よろしゅうお願いします。
> 基本のファイル読み込みの時点で間違ってたとは情けない ださっ
>>456 basic = new char[size + 1];
basic[size] = 0;
>>456 細かいことだけどサイズがわかってるんだからmemset使うのは無駄な処理だね
末尾に'/0'を入れてやるだけでいい
463 :
デフォルトの名無しさん :2012/04/14(土) 20:19:23.89
細かいことだけどシングルクオートの中に2文字入れると効果は処理系定義だぞ あんたどこの文化圏の人?
は?ヌル文字だろ?(威圧)
かみわりだとニャル子さん、さんかれあ、ふぁて このあたりが再生数多いな
いきなりなんだ とうとう狂ったか
ダウンロード違法化も決まったと言うのに
ふう
むにゃむにゃ おやすみなさい
AB|C|D AC|B|D AD|B|C A|BC|D A|BD|C A|B|CD 異なる4個を区別しない3箱に分けるにはスターリング数で上記のように6通りですがこれを列挙するアルゴリズムを考えてください。 出力は{{1100,0010,0001},{1010,0100,0001},{1001,0100,0010},{1000,0110,0001},{1000,0101,0010},{1000,0100,0011}} のように2進数4ビット3つ組みで、箱に入れる物のビットが立つようになってると良いです。順番はどうでもいいです。 実際は個数・箱数は入力して可変にしたいです。 2箱ならビット演算余裕で思いついたんですけどね
思いついたの晒せよアホ
いいよ
箱の数+1=玉の数の場合、箱の数=m、玉の数=nとすると。 組み合わせの数は、n*(n−1)/2*1 例 4*3/2=6 箱の数+2=玉の数の場合、上にmを掛けた、m*n*(n−1)/2*1 例 3*4*3/2=3*6=18 箱の数+3=玉の数の場合、上にmを掛けた、m*m*n*(n−1)/2*1 例 3*3*4*3/2=3*3*6=54 箱の数+4=玉の数の場合、上にmを掛けた、m*m*m*n*(n−1)/2*1 例 3*3*3*4*3/2=3*3*3*6=162
できたけど codepad って使ったことないんだよな ちょっと待って
int a[3][4] = {0}; ってできなかったっけ… codepad でエラー取り切るのむずいもうちょっと待って
481 :
C言語初心者 :2012/04/15(日) 15:53:16.31
483 :
C言語初心者 :2012/04/15(日) 16:59:38.68
substをchar型にすればよいのですか?? あと戻り値はどのようにすればうまくいきますか??
char* subst(char *str, char c1, char c2){ char *p = str; while(*p){ if(*p == c1){ *p = c2; } p++; } return *str; }
>>484 まちがえてるぞ
return *str;
じゃなくて
return str;
488 :
デフォルトの名無しさん :2012/04/15(日) 17:42:37.05
void でええやん無理しないで (void* はやめれ)
>>479 3の4乗通り全部試してるのか、結構無駄があるな
今日はこれをビット演算に改造して使わしてもらおう
もっと速いの考えた人待ってるよ
ちなみに実行は12玉・3箱くらいが主に
3箱なら、一箱+(一箱+一箱)って考えれば再帰的に解けそうな気がするけどなー
>>478 全部0で初期化される事が規格で保証されているよ
でも、警告出るコンパイラもあるのでmemsetした方が鬱陶しくないと思う
492 :
デフォルトの名無しさん :2012/04/15(日) 18:33:31.00
>>491 そのコンパイラを窓から投げ捨てるかオプションで黙らせるべき
memset なんか、それこそ保証ないんだから
>>478 >>491 警告を出さないためにはこうじゃないかな。
int a[3][4] = {{0}};
>>492 投げ出す前に正しく書くべきじゃないかな。
494 :
デフォルトの名無しさん :2012/04/15(日) 18:49:16.21
>>493 ていうか、{}だけでいいだろ。
「最初の要素を0で、それ以降を0で初期化」
って冗長な表現だと思わないか?
499 :
479 :2012/04/15(日) 21:49:08.63
>>489 いやそんなに試してないよ
確かに、途中で 「入れてないアイテム数 == 空の箱数」 になれば、後は順番に入れていく1通りが確定するから、
その処理を入れれば、試行じゃなくて純粋に列挙できる…と思う
500 :
479 :2012/04/15(日) 21:51:12.76
>>489 補足:
現に、1つめのアイテムは、1つめの箱にしか入れてない
また、2つめのアイテムは、1つめまたは2つめの箱にしか入れてない
UTF-8の文字コードで書かれたファイるがあるんですが、 これをfgetsで読み込んだ場合ちゃんと一行ごとに読んでくれるんですか?
うん。
試しゃーいいじゃねーかよ アホ
strstrで比較するときはどうなんですか? これも正しく比較されますか?
試しゃーいいじゃねーかよ アホ
今PC壊れてるんでお願いします
直しゃーいいじゃねーかよ アホ
clってexec-charset相当のオプションはないのかね?
探しゃーいいじゃねーかよ アホ こうかな。
まずはそのクソオプションそのまま試したのかよ アホ
そういえばバカバカ言うツンデレはたくさんいるけど アホアホ言うツンデレって見たこと無いな・・・ 大阪系のツンデレになるのかな
>>511 初代いいんちょの名をほしいままにする東鳩のいいんちょを忘れるとは
514 :
デフォルトの名無しさん :2012/04/16(月) 18:23:11.91
アセンプリでpushって命令あるけど、あれどういう意味? moveは移動ってわかるんだけど、pushも似たようなんじゃないのですか? 調べてもスタックがどうたらよくわからない。
牧草を筒の中に入れて固めていた頃があったんだよ で、固めることをpushって入ってたんだよねー アメリカの伝統的牧畜の影響
配列だと文字をstrcpyできないですかね? char a[3] a[0]='s'; a[1]='t'; a[2]='u'; char b[2]; b[0]='r'; b[2]='d'; この場合、strcpy(a,b);はエラーですか?
pushはメモリに数値を書き込むって意味じゃなかったっけ? それ以外考えられんのだが。 push abc 3 abc番地に3を書き込む。 違うっけ?
>>517 運がよければ動く
確実にするには文字列の終端が必要
新卒入社の研修かな
>>519 char *s;
char *t;
s="good";
t="bad"
strcpy(s,t);だとOK?
配列型文字列はstrcpyダメで、ポインタ型文字列はstrcpyOK?
内容も間違ってるし、書き込むスレも間違ってる
utf-8の文字コードで書かれたファイルを読んだ場合、strstrで比較してもちゃんとひっかかりますか?
うん。
ワロタwwstrcpy使えないじゃんww
>>521 もダメで、
>>517 もダメなら何が正しいんだよ。
文字列はポインタか配列でしか表現できんだろうに
528 :
デフォルトの名無しさん :2012/04/16(月) 18:50:28.97
間違えたwww strcpyじゃなくて strcmpです。 よろしくお願いします。
>>526 > 探すものがasciiのみであるならば。
ascii範囲外でも問題ないよ
>>526 >>529 ありがとうございます。
ascii範囲外でも問題ないってどういう仕組みなんでしょうか?
勝手に文字コード判断して比較してくれてるんですか?
単にバイナリで比較してるだけ。
532 :
デフォルトの名無しさん :2012/04/16(月) 19:19:45.77
別に文字コード判断する必要ないだろ
やっぱそういうことか おk サンキュ
536 :
526 :2012/04/16(月) 19:59:15.10
>>530 双方がちゃんとutf-8なら問題ないです。ごめんなさい。
#include <stdio.h> int main() { int i; double a; a=0; for(i=0; i<10; i++) { a = a + 0.1; if(a == 0.3) break; } printf("a =%6.3f\n", a); return 0; } このプログラムでa=1.000ってなっちゃうんだけどなんでだろ a=0.3じゃないの?
a == 0.3が成立しないから。 なぜ成立ししないかは、浮動小数点数 誤差あたりでぐぐってしらべれ
>>537 初めてCを習ったとき、それ注意されたわ
懐かしい。
if ( a >= 0.3 ) break; にでもしとけ
541 :
デフォルトの名無しさん :2012/04/16(月) 22:55:01.33
書式指定フォーマットの%Xで32ビット分しか表示されないのは仕様ですか? ※VS2010
仕様です もっとまともなC99対応コンパイラ使って下さい
マニュアル読めば書いてあるだろうが
色つきの文字って配列に入れたりできないのかな? 好きなときに保存した色を簡単にだしたいんだけどどうすればいいんだろう
パーサってなんだろ 色々調べてみたけどちんぷんかんぷんだから今は諦めます ありがとう
色つきの文字を表現する構造体を作って配列にすれば? 文字列としても使いたいなら、文字列と色情報配列を持つ構造体にするとか。
cursesお勧め
printf( "\033[2J" ); /* これまでの画面を消去します。*/ printf( "\033[043m ABC\t" ); /* 背景色黄色で ABC と表示し、タブを表示します。*/ printf( "\033[034m DEG\t" ); /* 青色で DEF と表示し、タブを表示します。*/ printf( "\033[031m GHI\n\n" ); /* 赤色で GHI と表示し、2回改行します。*/
動的に確保したい構造体配列(hoge)のメンバに動的に確保したい構造体配列(sub)を持ったもの
を考えており、main関数で宣言自体をして確保、解放自体は別の関数でするようなものを作ってみたのですが
どうもしっくり来ないんですがもっといい方法はあるのでしょうか。
http://codepad.org/D6VOZ2X6
>>550 関数名をalloc_hogeとfree_hogeとかに変えたらいいんじゃないだろうか
どのあたりがしっくりこないんだろ。 確保と解放が完全な対になってないあたり?
>>550 C はそういうものじゃね?
C++ ならもうちょっと「しっくりくる」ように書けそうに思うけど。
555 :
550 :2012/04/17(火) 20:20:47.88
とりあえずセグメント違反を繰り返しながらここにたどり着いたのでしっくりこない点は free関数の引数が*hogでいいが確保では**hogにしないといけないのか 確保関数でアドレスの先頭を表すのにhog[0]を使わないといけないのか です。
>>555 一般的な感覚だと
struct hoge* initial_main(void)
{
struct hoge* hog = malloc(sizeof(struct hoge));
hog->A = malloc(sizeof(struct sub)*(2));
hog->B = malloc(sizeof(struct sub)*(4));
hog->C = malloc(sizeof(struct sub)*(8));
hog->C[5].a = 100;
return hog;
}
と定義しといて、
呼出す側は
hog=initial_main();
じゃないかなぁ。
>>555 こんな感じとか。
名前は、initial_mainじゃなくて create_hogeとかalloc_hogeにしたほうがいいと思うけど
struct hoge* initial_main()
{
struct hoge* hog;
hog = malloc(sizeof(struct hoge));
if(hog){
hog->A = hog->B = hog->C = 0;
hog->A = malloc(sizeof(struct sub)*(2));
hog->B = malloc(sizeof(struct sub)*(4));
hog->C = malloc(sizeof(struct sub)*(8));
if(hog->C){
hog->C[5].a = 100;
}
}
return hog;
}
>>557 確かに initial って名前だと確保とは別っていう印象を受けるね。
C++ から用語を取って construct でもいいかも。
基本どおりに 〜〜alloc と 〜〜free でいいだろ
>>556 ,557
ありがとうございます。名前はわかりやすくしときます。
struct hoge* initial_main(void){ }
ような使い方を知りませんでした。
こっちのほうがぱっと見わかりやすいです。
562 :
デフォルトの名無しさん :2012/04/17(火) 21:50:02.50
「malloc_なんたら」を C++ では作りやすくしてくれてるだけ construct はやだな、extern "C" したときのうんこ臭が耐えがたい
なんでC++?
564 :
デフォルトの名無しさん :2012/04/17(火) 22:12:25.72
あ、隔離する気ならノープロブレム
>>557 > create_hogeとかalloc_hogeにしたほうがいいと思うけど
create,alloc,init(ialize),newなどは好みだけど
hoge_createやhoge_allocのほうがいいと思うな。
create_hoge = hogeを作れ hoge_create = hogeが作る
合成語として考えるなら hogecreate でもおかしな順序ではないよ。 伝統的には create_hoge の方が主流に思えるのは確かだけど…。
めんどくせぇからnewつかえるのに移れよ
namespace 的な考え方すりゃ接頭辞を共通にしたほうが分かりやすい
>>565 俺の好みでは確保したメモリの構造を見せる場合には alloc と free で
ハンドルとして扱ってもらう場合には create と close って使い分けな感じ。
うん
>>567 gtk_init
Py_Initialize
lua_open
SDL_Init
>>572 そのあたりは API としての性格をもったものだから区別が必要じゃないかなぁ。
allocateとinitializeをallocate関数でやるのはどうかと思うの。
>>573 じゃぁ
組み込みではなく生成したインターフェースが
NAME_newな形になるCSTLはどう?
create_hoge
より
hoge_create
のほうが扱いやすいと思うよ
補完しやすいし。
C++じゃ オブジェクト.メソッド なんだが、お前らオブジェクト指向言語使わんの?
どーせ ファクトリ.create_hoge vs ファクトリ.hoge_create になるよ
>>576 ンなの聞いてねーよks
スレタイすらも読めないのかよ池沼
ヒャッペン音読して出直せバカ
>>575 マクロを使って生成しているとは言え、それも CSTL というライブラリが提供している API っていう気もする。
ただ、いずれにせよ上述の「主流に思える」というのはそうでもないかな、という気がしてきた。
>>575 補完しやすいというのは疑問があるぞ。 構造体とそれに対する操作の組を名前にするわけだろ。
だとすると hoge_ まで入力したときの候補は create_ まで入力した候補より分量が多くなる。
補完候補は少ない方が良いと考えると create_hoge の方が補完しやすいと言えないか?
581 :
デフォルトの名無しさん :2012/04/18(水) 00:19:00.97
個人的にgimpソースハックしたときに、関数名の冗長さには苦労させられたわ GtkWidget *scale; scale = gimp_prop_spin_scale_new (config, "brush-size", _("Size"), 0.01, 1.0, 2); gimp_spin_scale_set_scale_limits (GIMP_SPIN_SCALE (scale), 1.0, 1000.0); gimp_spin_scale_set_log_mode (GIMP_SPIN_SCALE (scale), TRUE); 終始こんな調子の長い名前で変数や関数が羅列されてる。 処理的には大して高度なことしてないのに、パッチ当てるべき箇所を探すだけでも、妙に疲れる。 経験的実感として、全体が長い名前ばかりなコードは、明らかによみずらい。妙な疲労感を伴う気がするわ。 関数は gmp_set_scale() や gmp_new_scale() 程度の10文字程度の長さが最も読みやすいと経験的に感じる。これ以上長いと短期記憶を余計に消費して疲れるし、これ以上短いと意味が不明で疲れる。
そしてその命名ルールを守ってもGIMPほどのモノは作れないという不思議w
>>579 単なるモジュールプレフィクスだよ。
関数名が被らんようにと言うのが主目的で、操作対象を表すわけじゃない。
せいぜいどのモジュールに属する関数かという程度。
モジュール外部と結合する意味でAPI的と言えるだろうけど、
CSTLが提供している云々は関係ないな。
外部結合だから出力の命名規則がそうなってるだけだ。
なんで、意味合いが違うのは同意なんだけど、Cの世界じゃ
モジュールに分けたらプレフィクス付ける方が主流だと思うよ。
>>583 俺は API 的というのを広い範囲で、外に公開する名前くらいの意味で言ってた。
言葉の使い方を除けばだいたい認識は一致していると思う。
>>582 gimpって規模は異常に巨大だけど、徹底的にコードを単純な書式にして、モジュール化も徹底してるおかげで
局所単位でいぢれるし、局所単位で見ればそれほど超高度なことをしてる箇所は少ないので、意外と改造できるのでハック初心者の練習におすすめ。
とにかくコード書式が、これでもかというほど単純なように徹底されてる。
関数中で使う変数の宣言は、必ず関数の先頭位置で行うようになってるし、
GtkWidget *scale;
scale = gimp_prop_spin_scale_new ();
を
GtkWidget *scale = gimp_prop_spin_scale_new ();
と書くことすらしない。徹底的に一行の情報量を減らすというアプローチで書かれてる。
一見すると過剰な程にコードが簡易化されてるが、そのおかげで、所見でもある程度読める。ただし全体の行数は膨大。
>>586 >GtkWidget *scale;
>scale = gimp_prop_spin_scale_new ();
>を
>GtkWidget *scale = gimp_prop_spin_scale_new ();
>と書くことすらしない。
auto変数の初期化すら嫌いな -pedantic な人たちなのでしょう、多分。
GTK自体の仕様がよくわからん…
っていうか 関数スコープの途中で変数宣言できるようになったのってC++が出てきてからじゃね? 1行の情報量を減らすってのはなるほどなぁとは思う。
590 :
デフォルトの名無しさん :2012/04/18(水) 22:12:00.57
関数スコープとか・・・またまた香ばしいw
ブロックの先頭以外、でいいのにね
関数スコープは荒れる
うん
関数スコープの宿命だな
関数スコープの宿命はよ
596 :
デフォルトの名無しさん :2012/04/19(木) 00:02:06.72
言うなら PG の、C 使いの宿命を言ってみな
597 :
デフォルトの名無しさん :2012/04/19(木) 00:45:13.12
お前が関数ポインタの宿命を言ったらな。
C++のソースがCのソースに変換されたのを見て、ショックを受けた、口
C++のtry-catch構文って、Cのソースに変換すると、どんな記述になりますか?
600 :
589 :2012/04/19(木) 00:57:41.83
catch, finallyブロックのアドレスを順番にスタックに積んでいって 割り込みハンドラーが呼ばれたら順番にそれを呼べば良いんじゃね?
無理じゃね
関数ポインタならできるんじゃね?
前処理におけるエラーについての質問です。 #if (TESTDEF == 1) aaa(); #else bbb(); #endif 上の例では TESTDEF が 1 だったら、aaa() を実行して、 そうでない値のときには bbb() を実行してくれることを期待して記述し、そのように動作します。 しかし TESTDEF が未定義の場合にも bbb(); が実行されてしまいました。 てっきり未定義エラーのようなものが発生すると思ったので驚きました。 上記のようなことをする場合に、 TESTDEF が未定義である場合にコンパイルエラーとする方法はありませんでしょうか?
#if (ISSET_TESTDEF == 1) ccc(); #else ddd(); #endif なるプリプロセッサを延々と書き連ねる
>>606-607 やはり前処理1行だけで判断させてエラーにするのは難しそうですね。
>>607 のコードのやりかたで自分でエラー行を書く方法で考えてみます。
ありがとうございました。
609 :
デフォルトの名無しさん :2012/04/19(木) 02:38:18.42
ふざけた野郎だな。
#ifdef TESTDEF #if (TESTDEF == 1) aaa(); #else bbb(); #endif #endif
プリプロセッサには elif 構文あるんだけどな
この時どうするかいい方法が思い浮かばんかった。 #include <stdio.h> #define TESTDEF void aaa(void) { fprintf(stdout, "aaa\n"); } void bbb(void) { fprintf(stdout, "bbb\n"); } int main(void) { #ifndef TESTDEF #error "not defined TESTDEF." #elif TESTDEF == 1 aaa(); #else bbb(); #endif return 0; }
mfcなんですが、何故か?値が代入されません for ( i=0; i<opetbl.recv_len; i++ ){ recv_dt.data[i] = (unsigned char)opetbl.recv_data[i]; } と言う文が有ったのですが・・・ 同じ様に・・・ for ( i=0; i<opetbl.recv_len; i++ ){ recv_dt.data[i] = (unsigned char)opetbl.recv_data[i]; dainyuu_data[i] = (unsigned char)opetbl.recv_data[i]; }
と、入れてみました。上の方は値がちゃんと代入されるのですが 同じ事をやっている下は代入されません・・・ 変数の宣言は、グローバル変数で宣言しました int dainyuu_data[RECV_LENG]; 一方、値が代入される変数は、 union を使い、やっています。 union U_recv_dt { unsigned char data[RECV_LENG]; }; メモリの設定とか、必要なのでしょうか?
>一方、値が代入される変数は、 recv_dt のこと? dainyuu_data は int の配列 recv_dt は unsigned char の配列 代入されているかの検証で 元データを文字列と期待し printf にて先頭アドレスを渡したとすると、異なる出力になるのは当然だと思うが 配列の index 総なめで、個々に出力してみたの? (printf("%d\n", daynyuu_data[i] ってこと)
fprintf(stderr, "dainyuu_data = %p\n", dainyuu_data); で代入時、参照時にdainyuu_dataのaddress確認してみたら? 異なると思うよ。
>>616 >>617 有り難うございます。
>dainyuu_data は int の配列
recv_dt は unsigned char の配列
unsigned char の配列でも試してみましたが、駄目でした。
>総なめで、個々に出力してみたの? (printf("%d\n", daynyuu_data[i] ってこと)
デバグモードのブレークポイントで配列の中を確認しました。
入っていない様です、また画面に表示も出ません(値は0です)
返信有り難う御座います・・・
疲れたので寝ます・・・
おやすみ、ムーニーマン
下の代入文は本当にfor文の中に入ってるの?
デバッガ使ってて分からんぐらいだから、他のスレッドにリセットされたことも考慮しないとだめかもね
うむ
グローバル以外にもdainyuu_dataという名前の配列があるとか。
そうだよ
次の方どぞ
626 :
デフォルトの名無しさん :2012/04/19(木) 23:03:21.29
宿命はよ
C++の基本〜標準を学校で学びましたが C言語を独学で勉強できますか?
できます。具体的には以下の通りです。 「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得 ↓ 「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する ↓ 「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得 ↓ 「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ ↓ 「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター ↓ 「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する ↓ 神の誕生
629 :
デフォルトの名無しさん :2012/04/20(金) 21:55:24.56
-神の誕生 +土方の誕生
ゲーム作るには最低どのくらいの知識が必要なのよ
歩く前に歩くことをやめる人間には無理
何の知識だよ
最低でも四元数 あとはUI関連の古典 誰のためのデザイン でも読んどけ プログラム知識だけで面白可笑しく作れるとか思ったら そいつはアホ
誰がゲームを面白おかしく作れるための知識がほしいって書いてんの?
面白くもおかしくもない一流のクソゲーでも作りたいのかwww いやそういう知識なら俺は知らんよw
ゲーム作るのには四元数は必須だよな。俺もそう思う。 どんなゲームでも絶対使うもん。マインスイーパとか。
637 :
デフォルトの名無しさん :2012/04/20(金) 22:59:23.41
>>630 それはおまえさん自身が決めることだ
少しでもマシンの動かし方を憶えたら
こんなことできないか? とアイディアから始めるんだ
必要な知識はそれによって決まる
ゲームプログラマってのはコンピュータのプロではなく
遊びのプロであることを片時たりとも忘れてはならない
そんなもんディレクターとかデザイナーの話だろ プログラマとは別
質問者はスレチともどうとも取れない感じだったのに、回答者が全力でスレチってどういうことなん。 しかも超偉そう。
ゲームプログラマは、無能な企画の脳内にあるイメージを口頭でのわずかな情報で再現する能力が必要
641 :
デフォルトの名無しさん :2012/04/20(金) 23:18:05.79
ディレクタやデザイナになりたければ そこそこの組織に入るにはどうするかが問題となる で、面接でくだんの質問をしたらまず祈られるだろう スレチとか言っている連中はそこがわかってない 内容的に1人で勝負できる人がスポンサーをつのる様相がわかってない
ああごめん。たしかに俺わかってなかった。 スレチじゃなくて板違いだったね…
(白黒4階調の初代ゲームボーイで)フルカラー出してくれ。 と企画から言われた時は、ハードウェアのマニュアルをそいつに投げ付けた事は良い思い出。
インベーダーの仕様や白黒TV用カラーガラスでも投げ返されると面白いんだがな
645 :
デフォルトの名無しさん :2012/04/20(金) 23:41:01.13
色のにじみでハードの定義にない色を出していたのも良い思い出 通信路の定義の違いまで何とかできてしまったのは無知のおかげで今の俺なら発狂してた そこそこの組織にいる人ならハード担当と癒着でない仲の良さを大事にする
>>645 その時代の話、結構興味あるので、酉とかつけてもらえますか?
647 :
デフォルトの名無しさん :2012/04/20(金) 23:44:55.59
さんずいがねえなあ
じゃあ酒あげるんで、レスの1行目に 〜おじさんの楽しい昔話〜 ってつけるようにしてもらえませんか
〜おじさんの楽しい昔話〜(板違いじゃないよ!) でもいいです。あと、もしおばさんだったらごめんなさい。その場合はおばさんと表記を改めていただけるようお願いします。
ゲ板にでもスレ立てたら?
ほんとだよな。
652 :
デフォルトの名無しさん :2012/04/20(金) 23:58:48.56
そりゃごっつぁん、でマダー?tntn 1行目がどうのって意味わかんねえし セクハラ野郎は嫌いだぜ
レスを抽出してまとめて読めるからだよ
興味ない人はNG設定できる副作用もあるよ。
MPIってモッピーと読むと言われたが冗談ですよね?
へえ
660 :
デフォルトの名無しさん :2012/04/21(土) 23:07:24.27
素数を認めるプログラムを作っているのですがこのプログラムだとwebコンパイラだと17や19の時にタイムアウトします。ヒントもらえないでしょうか? #include <stdio.h> int main(void){ int i,N; printf("please key in integer n="); scanf("%d",&N); if(N>2){ printf("%dは素数ではない",N); return 0; } if(N==2){ printf("%dは素数",N); return 0; } if(N%2==0){ printf("%dは素数ではない",N); return 0; } for(i=3;i<N;i+2){ if(N%i==0){ printf("%dは素数ではない",N); return 0; } } printf("%dは素数",N); return 0; }
>>661 うおおおおおおおおおおおおお
しょうもないケアレスミスでした。
ありがとうございました
if(N>2) (;゚ Д゚) …!? (つд⊂)ゴシゴシ あれ? if (N < 2) の間違いだよね・・・ 俺の見間違え?
C言語のサンプルプログラム集みたいなサイトはありませんか? 昔見てたサイトがあるのですが思い出せないのです。
自演で宣伝乙
>>665 面白そうなサイトですが、たぶん違います
ハノイの塔とか定番アルゴリズムを網羅してるサイトだったのですが
心当たりある人いないでしょうか?
>>667 特定のサイトを捜したいなら相当詳しく書かんと特定不能だぞ
うろ覚えならもう自力でありったけの検索ワード入れてググるしか
671 :
デフォルトの名無しさん :2012/04/22(日) 08:50:10.21
Cで書かれたマルコフ連鎖ジェネレータのソースがどっかに公開されてたら教えてほしいんですが
if (1) goto A; else goto B; A: nop(); goto END; B: nop(); goto END; END: 上記のC風ソースコードを、アセンブラコードへと変換するプログラムを書く。 gotoをpc命令へ変換するとして、ifの時点ではラベルのアドレスが不明。 どのようにしてアセンブラコードへ変換すればいいか。
アドレス解決はアセンブラがやってくれるはずだが… まあ、「アセンブラコード」とか言う意味不明のこと言い出す奴だかなぁ…
2パスで処理すりゃいいだろ。
アセンブラコードの宿命はよ
巻き戻しでしたけ? 再帰したとき巻き戻しが起こるのはなぜですか?
お前、自分の質問の意味がわかってるか? 少なくとも俺はわからん。
なぜ? じゃねーよw スタック巻き戻しで再帰機能を実装しましょう てな話だwww もしも無限が扱えるようなファンタジーな計算機があるんなら 巻き戻す必要が無い
679 :
660 :2012/04/22(日) 12:48:16.65
>>663 そこもミスってましたorz
指摘サンクス
c言語を勉強しようと思うのですが、おすすめの書籍がありましたら教えてください。 cは入出力、演算、分岐、繰り返し等ができます。初級〜中級程度で実用的に使えるような書籍をお願いします。
>>681 ありがとうございます
そっちに行ってみます
いえいえ
お褒めに預かり光栄で御座います。
開発・実行環境 Vista 32bit VC++EE 1つのプログラムがmallocで確保できるメモリサイズ合計は2GBまでですか? 64bit版ではそれ以上確保できるのでしょうか
それを確かめられないヤツは 2GBも確保するな
ソース
コード、データで2GBまで、32bit PAEという誤魔化し使うと、データ分が増やせる可能性がある
いえいえ
この受け答えで「納得しました」てのは何か違和感ある 理解も無くなぜも出典も問わずに納得しましたとだけ、 危険な気がする
692 :
デフォルトの名無しさん :2012/04/23(月) 23:28:14.37
いつものことだ
FindFirstFileでメモリアクセス違反のエラーが出るんだが原因がわからん WIN32_FIND_DATAって初期化必要ないよな?
エスパー試験2級問題 (制限時間10分・5点)
やっぱ事故解決 なぜか WIN32_FIND_DATA *p じゃなくて WIN32_FIND_DATA p の&p渡しならエラーでなかった 何でだろ? まあサンキュ
696 :
デフォルトの名無しさん :2012/04/23(月) 23:37:21.28
大コケ
何でだろ?って悩むところじゃないだろ
>>695 ちょwww マジかよ。
何でだろじゃねーよ。
>>695 char *p;
strcpy(p, "hogehoge");
これ、なぜか落ちるよね。俺も何でかわからんもん。
今わかった *pだと構造体自体のメモリが確保されてないってことね 余裕余裕 あばよ
わかったのか! 俺よりも一歩先に進んだなぁ。うらやましい
>>699 p「■■■■」
strcpy(p, "hogehoge");
p「■■■■」← hogehoge\n
p「hoge」hoge\n
>>702 うわwwwww
寝ぼけすぎて色々おかしいwwwww
p(ココを見よ)→「■■■■」(※メモリ上のどこか)
strcpy(p, "hogehoge");
p(ココを見よ)→「■■■■」← hogehoge\n
p(ココを見よ)「hogehoge\n 」
他(あれ?誰だよそこは俺の場所だろ。)
うん。寝よう。
p「俺が先頭じゃ」 strcpy「hogehoge入れたれや」 p「お前が入れるかわからんわ」 malloc「おいpここの先頭になれ」 p「おkまかせろ」 strcpy「hogehoge入れたれや」 p「おkmallocに許可もらってるからこい」
きも
アスペって皮肉理解できないよな
struct quf_alloc{char s[];}:
fgetsでutf-8の文字コードで書かれたファイルを読み込んでるんですが、 一行目からNULLが帰ってきます utf-8の文字コードで書かれたファイルはfgetsでは読めないんですか?
いいえ。
本当ですか? じゃあなんでエラーになるんだろ fgetsって改行コードまで読んで末尾にヌル文字入れるっていう仕様ですよね? 文字コードが違うのに改行コードとか判別できるんですか?
それはfgets()の問題ではなくてprintf()の問題だろ。
すいません。 そのグーはとっくに読んでたんですが、 ccs=UTF-8っていうオプションを指定しようとしてもそんなのありませんって言われるんで 実行できませんでした。 fopenにそんなオプションないですよね?
あります。
>>713 UTF-8 を wchar_t で扱おうとするとか訳が分からん
そんなオプションないですっていわれるんです どうやったらそんなオプション使えるのか教えてください
うひょー
情報が少ないことに対する返しだと思うよ。 お互いにうそはついてないけど、それを読ませたい相手には伝わってない
とにかく私がやりたいことは、 utf-8の文字コードで書かれたファイルを 一行ずつ読みたいんです 方法を教えてください お願いします
バイナリー読み込みで妥協?
utf8が使えるライブラリ持ってくればいんじゃね?
バイナリ読み込みの場合、 strstrで改行コードまで読むことになりますが、 そのときに指定する文字はどうしたらいいんですか? 文字コードが違うんだから\nではひっかからないでしょう?
まず、UTF8とは何か、それからggrks。
そんなのとっくに調べたわ 早く教えろ
結局誰も答えられねーんだろ 話にならん クズしかいねーなここ
ひょひょ
珍しいバカもいたもんだな。 あ、今時別に珍しくはないか。
OSもわからないんじゃ改行の扱いなんか答えよう無いじゃん
>>724 ためせよ。
で、その思い込みがあるってことは結果にびっくりするだろうから、なんでそうなのかを調べろよ
改行コードでググレ
>>721 UTF8のASCII範囲(0x00-0x7F)のコードは
それ以外で使われないので
SJISと同じように読めばいいよ
改行コードは大概LF,かCR/LFなので
テキストモードで開いてfgetsすれば問題ない
すまん 今調べたら読み込んでるファイルが空っぽだった そりゃNULL返るよな 俺は数時間何していたんだ 中身のあるファイル読み込んだらいけたわ
うむ
コードとか標準ライブラリとか文字コードとか改行とかCRLFとかOSでの違いとかテキスト/バイナリとか 全く関係のない次元の話じゃねーか ついでに ホントウに中身がないのは オマエだw
いや、俺は中身はあるぞ ただたまにこういうどん臭いミスをするだけ こういうミスは天才に多いからね♪
良かった、天才じゃなくて。
737みたいな奴とは仕事したくないな
天災
人災だろ
臭い天才?腐ってるのか。
うどん臭い天才
ふーん
個人的には、それで問題ないと思う。 強いて言えば、コメントを書いておくぐらいかな。
そこに解答例があるのになぜ聞くのだろうか。
変数がdoubleなのが気に入らない キャストのタイミングが気に入らない
特に間違いも無い。 個人的に water=198; milk=138; は water=198.0; milk=138.0; としたい。
四捨五入に言及してるのだから 四捨五入なり五捨六入なり小数点以下切り上げなり、 そういう関数が無い解答例はかなりおかしい どこにも「これで四捨五入されました」とかが書いてない、 これはそのサイトに不備があることに他ならない、 だからあなたのプログラミングの外の能力は上がらない もっとマシな参考書を参考したほうがいい、 そのソースはさっさと捨てろ
言及って… するかどうかは自由って書いてあるじゃん そもそも回答例は四捨五入じゃねーし
753 :
デフォルトの名無しさん :2012/04/25(水) 16:55:41.10
インターンシップでソフトウェア開発の現場で仕事体験するおwwwwwwwwwwwwwwww
うむ
>>754 一見仕事してなさそうなところだといいね。
obj-cも俺に聞いて良いよ!
うん
なんでも。
決まった順番に複数のLEDを光らせたいです。 LEDを光らせる関数を作ってそこに int型のLEDの数だけある1次元配列を投げて光らせようとしています。 光らせるパターン分だけ1次元配列を用意するために、パターンとLEDの数で2次元配列にして、 その中から、光らせるタイミングで、1次元配列を抜き出して光らせたいのですが、コンパイルが通りません。 こういった場合にはポインタを使うといいのかなと思ったのですが、使い方がまちがっているでしょうか const int patt[3][3]={{1,0,1},{0,1,1},{1,1,0}}; void main(){ LED_Blink(&patt[1][0]); } void LED_Blink(int pattern[3]){ ~~~ }
>>762 エラーメッセージを貼れ
そして consi int [] 渡すなら const つけろ
関数をmainより前で宣言してないだけだったりしてw
765 :
762 :2012/04/27(金) 18:59:22.42
エラーですが、こんなのが出ています。 error: invalid types 'const int[int]' for array subscript 環境はArduinoIDE Ver.1.0です。 1次元const配列をそのまま引渡しではエラー出ませんでした。 constをつけるというのは void LED_Blink(const int pattern[3]){ というのはやってみたのですが、エラー変わりませんでした
766 :
デフォルトの名無しさん :2012/04/27(金) 19:00:11.96
>>762 プロトタイプがないのに pattern に型があるから
それと pattern の次元が足りない
# こんなのを瞬時に指摘できない回答者が戯れ言ぬかしてんじゃねえ
一次元配列として取り出したいんだから、pattern[3]でいいんじゃ?
>>766 偉そうにレスするときはミスすると恥ずかしいぞ
769 :
デフォルトの名無しさん :2012/04/27(金) 19:14:09.76
あははは 俺も焼きが回ったな # はあ、飲みにでも行こうか・・
ダサ...
>>769 ある程度の人間ならやきがまわることもあるかもしれないが
最初からカスだった場合にはどうなんだろう
手元の環境ではconstつけて、使う前に宣言しとけばコンパイル通るし動くけどな。
>手元の環境ではconstつけて、使う前に宣言しとけばコンパイル通るし動くけどな。 読点の使い方は教わらなかったのか?
>>773 constつける話と前方宣言する話は別だから分けたかったんだよ。
どうするのが正しいのか教えてよ。
#include <stdio.h> #include <string.h> struct student{ char name[10]; }; int main(void) { struct student data[3]; scanf("%s", d[0].name); if( !strcmp(d[0].name, "0") ) printf("ZERO!\n"); } 上記のような処理をしたいのですが、 構造体配列の文字列をif文で比較する場合に、 strcmpを使わずに実現するにはどのようにすればいいのでしょうか? また構造体配列はポインタという考え方でよろしいのでしょうか? どうぞよろしくお願いします。
struct student data[3],ckv={{"0"}},msk={{"\0\0" ~'\0'}}; if (d[0]^ckv&~msk)puts("ZERO");
>>777 すみません、コンパイルエラーになるのですが・・・
if( *((short *)d[0].name)==*((short *)"0") ) printf("ZERO!\n");
いえいえ
>>776 1)文字列比較をstrcmpを使わずに実現したい
理由は何?それ次第で回答が変わってきそう。
2)先頭一文字だけ比較すればよい?それなら
d[0].name[0] == '0'でいいかも。ただし、終端されているか確認しないことになる。
3)
>構造体配列はポインタという考え方でよろしいのでしょうか?
もちろんダメです。
struct {
char name[10];
char *p;
}hoge;
hoge.nameは配列だし、hoge.pはポインタです。
構造体配列は構造体の配列のことで、構造体の中の配列のことじゃないんじゃ?
>また構造体配列はポインタという考え方でよろしいのでしょうか? 配列名を書けば配列先頭のポインタ値が得られる程度に思っとけばいい。
strcmpって書くのが長くていやだとわがまま言ってるだけじゃ
786 :
776 :2012/04/28(土) 16:59:07.49
アロー演算子 ドット演算子
>>783 >>786 すみません。「構造体の配列」と「構造体メンバの配列」を混同していました。
どっちにしても、配列とポインタは別物です。
>>784 さんのとおりですが、例外があります。
int a[10];
int *p = a;
とした場合に
sizeof(a),sizeof(p)
&a,&p
が問題になります。
>>786 >>782 の(2)の書き方、、、先頭一文字の比較でよかったの?
そうならそうと最初に書いてくれれば
790 :
デフォルトの名無しさん :2012/04/28(土) 23:26:03.74
割り込みしてすみません。 ほぼ素人です。 スレチでしたらすみませんが、教えてくださったら嬉しいです。 3uwzclt4ht ↑ おそらくエンコードされた文字列なのですが、これはどうすれば元の文字列にすることができますか? 逆に、元の文字列をどうすればこの文字列にすることができますか?
>>790 エンコード方法が分からないと無理
シーザー暗号 とか base64 とか
トリップ割りたいなら crypt とか
首尾よくエンコード方法がわかっても 100年かけてもムリとかあっからなwww
クラウドやGPUでブルートフォースするし キリッ
794 :
デフォルトの名無しさん :2012/04/28(土) 23:55:41.48
>>791 >>792 やっぱり難しいですよね…
もう少し自分で試行錯誤してみます。
こんなアホな質問にわざわざお時間いただいてありがとうございました。
ハッシュだったら算出方法がわかっても元には戻せません
ハッシュとか関係ないから 情報を間引いてるかどうかの違いだけ
え?w
>>797 キーが最大でN個の時に
バケツをN個用意ししてみよう
それは可逆だよね
>>798 ハッシュてのは同一の値には同一のハッシュ値を返すって以外何も保証されないものです。
N個全部で同じハッシュ値を生成することもありえます
801 :
デフォルトの名無しさん :2012/04/29(日) 01:17:08.95
>>800 間違ってないよ
単純にハッシュ生成アルゴリズムが2で割るってだけだと考えてみよう
N/2しかバケツは使われません
>>801 何を言ってるの?
もっと単純に、なにもせずにそのまま返すというハッシュ関数を考えてみ
可逆ですよね
>>802 だから、ハッシュってのは同じデータには同じ値を返すとしか定義されてないの
バケツの数がデータの数より多くても全て使われる保証は全くないの
ハッシュを全く理解してないの?
? バケツの数がデータの数より多くても全て使われる保証は全くないの ○ バケツの数がデータの数より少なくても全て使われる保証は全くないの
小難しそうな言葉を最近覚えたばかりで ハッシュって言ってみたかっただけ なんだろうからさ もうスルーしようよ。
入門スレだからしょうがないけどハッシュぐらいは理解しよう
>>803 ハッシュ関数=非可逆
これは
802の簡単な例でも分かるように
必ずしも真ではないよね?
ハッシュ関数次第なのよ。
>キーが最大でN個の時に
と言っているように
データ数ではなく
表現可能なすべてのバケツを用意したら
可逆でしょ
可逆、非可逆とバケツの数は無関係 ハッシュ関数にのみ依存します
と、思ったけど キーの表現可能な数 = ハッシュ値として表現可能な数 で重複しようがないから 可逆だな。
バケツが余っていても同じバケツを複数回使うか余ってるバケツを使うかはハッシュ関数のみが決定します
どっちにしてもハッシュは不可逆
あぁ、そだね。
簡単に言うとチェックサムという加算を使ったハッシュ値が可逆かどうかを考えればわかります 一部可逆ハッシュという可逆であることを保証する特殊なハッシュもあることはあるけど一般的には非可逆です
Q. ハッシュ値から元キー復元は可能ですか? A. ハッシュ関数次第 これでFA
ディープ・パープル
fgetsの仕様として、\nまで読み込んでその\nの改行コードを\0に置き換える仕様があったと思いますが、 これってもしかしてバイナリモードでファイル読み込んだときには起こらない仕様ですか? いまやってみたら\r\nのまま残ってたもので。。
>>818 テキストモード/バイナリモード、というのがそもそも MS-DOS とか CP/M とかからの負の遺産。
制御コード二つでやっと改行できるとか、ファイル末は ^Z とか、テレタイプをひきずった変仕様としか。
改行にしても OS によって、\r\n、\n、\r といろいろだ。いいかげ勘弁してほしい
最近はわりきって、\r, \n がどう混在しようが対応しておくのが、いろいろな意味で幸せなのではないか? \n\r とかはみかけないけど。
ちなみに手元の cygwin/windows xp x32 では
>\r\nのまま残ってたもので。。
>>818 \nを\0に置き換えるってのはないよ。他のなんかと勘違いしてるかも。
>>819 ぐちゃぐちゃとうるさいなぁ。
>>820 ありがとうございます。
strtok?みたいなやつが置き換わるんでした
fgetsは関係なかったですね。
勘違いしてました
>>819 ごちゃごちゃうっせーんだよボケ
>>819 んな無意味な駄文はチラシの裏にでも書いてろやカス
>>819 嫌われすぎ
確かにそんなこと聞いてないのに長々語る奴はうざいけど
>>823 テキストモード()
バイナリモード()
でいいのにね
たまに聞きかじった単語があるとうれしくなるんだろ
(笑)の省略形で、バイナリモード キリッ()って空のカッコがあるじゃん? 俺プログラムのやり過ぎか(void)って読んじゃうんだよね〜(ドヤッ 地獄のミサワにこれがないのは何故だ
>>828 そこでニワカっぽさをさりげなく演出してるのさ(大嘘)
アホか strtokを使うとは誰も言ってないだろ そういうのは余計なお世話なんだよハゲ
ハゲじゃなく頭パイパン
834 :
デフォルトの名無しさん :2012/04/29(日) 17:32:50.84
テキストモードの問題は根底に「C の標準こそ実は方言」というオチがあるので 負の遺産がどうたらいう見解は逆だと思う まあ、現実は系譜より実効支配力で決まることだが
>>834 kwsk(_ _)
改行コードはひとつで機能しかつ一種類であればどれほど楽かと思わずにはいられないのですけれども、どうしてこうなってしまったのでしょうか?
この問題、いにしえの raw / cooked と関係あるのでしょうか?
で いま実効支配しているのはなに?
そりゃ iOS の \r では?
unix が lf mac が cr 後発の MS は cr+lf でとりあえずいいとこどりを狙った
知ったかぶりがひどすぎるw
知ったかぶりを楽しむのも一興よ
841 :
デフォルトの名無しさん :2012/04/29(日) 17:51:20.76
楽だからって勝手にルールを変えるとどうなるかってお手本だね B で printf("*n"); とかやってた頃に endl みたいな発想はしなかったらしい
MS-DOSの方がMacより先だろうし、今時のMacはCrじゃないし。
入門スレなの忘れないでよね
話についてけないからって水差すな無能 消えろよks
ふぇぇぇんこわいよおおお
物理的に制御することを考えたら、 行を送る LF とキャリッジ (カーソル) を左端に戻す CR の組合せ で改行を表すのはそれはそれで理にかなってる。
ラインフィード、と、キャリッジリターン、でしたかね、確か。
とはいえ、なんだか悲しいなあ。
>>839 失礼な。話題をつくってやったんだからモリタポ払え
モリタポスレに籠もってろよカス
後から報酬を請求するってかなり悪質ではないか?
850 :
デフォルトの名無しさん :2012/04/29(日) 19:33:41.21
後払いはむしろ良心的だし ここから先は有料ですよというのもごく普通
>>850 自作自演のksクズゴミは失せろ
巣にこもって出てくんな
そのまま飢えちまえ
>ここから先は有料ですよ ちょっと待って!本番するなら追加で諭吉4枚よ! >後から報酬を要求する フフフ…気持ちよかったぁ?ちなみに本番は諭吉4枚だったの。それぐらい持ってるわよね? 後者は悪質っていうかイラっとくる
853 :
デフォルトの名無しさん :2012/04/29(日) 20:56:20.41
商取引の基本がわかってねえな イラッで済むやつをカモって言うんだよ
・ポインタによるアドレス計算で、 int a[3] = {1, 2, 3}; int *x; x=&a[0]; printf("%d\n", *x); x++; printf("%d\n", *x); このように書いてあったのですが、 x=&a[0]; のところは、x=a; ではダメなのでしょうか? 同じ結果になると思うのですが、 いけない理由があればどうぞ教えてくださいませ
試せばいいじゃん つーか試せ
いえ、この処理だと試した結果は同じ結果になるのですが、 他の処理をした際に上手くいかないのではないかと思ったので、 x=a;でもいいのか配列の先頭のアドレスを参照すべきなのか聞いた次第です。
857 :
デフォルトの名無しさん :2012/04/29(日) 22:28:19.24
これの何がいけないのかわからないです。 char *str[3]; int i; printf("文字を入力してください。\n"); for(i=0;i<3;i++){ scanf("%s",&str[i]); } //ここからエラー for(i=0;i<3;i++){ printf("入力された文字は%sです\n",str[i]); } return 0; }
なんでもない間違えた
>>857 printf("文字を入力してください。\n");
for(i=0;i<3;i++){
str[i] = (char*) malloc (100);
scanf("%s",str[i]);
}
//ここからエラー
for(i=0;i<3;i++){
printf("入力された文字は%sです\n",str[i]);
free(str[i]);
}
誰かモリタボ入れてやれよ 連休明けに消費者センターに行ってセンターじゃ対応できないから警察に被害届出せばいいじゃん
架空請求詐欺www
>>857 X printf("入力された文字は%sです¥n",str[i]);
O printf("入力された文字は%sです¥n",&str[i]);
>>863 お前はなにをいっている?
>>857 字面上での形式を合わせて、とは考えないことだ。
まず入力された文字群がどこにどのように格納され、そして出力されることを想定しなければならない。
そういう意味では C はかなり具体的なハードウェアイメージがなければ理解が困難だ。
はじめて言語を習うのなら、そして今、言語の選択を変更できるのなら java とか他の言語がお勧めだ。
二つ目以降ならそのままがんばれ。
俺だったら%cとか使うかなどうだろう そのあたりはCの流派でいろいろとちがうんじゃないかな だから師の教えの通りに%sをそのまま使った方がいいと思うよ おれは
そもそも>857が何をしたいのかも判らないのに何を言っているんだ。
>>867 何をしたいのか
>>857 自身が記述できない可能性がある。
とすれば、ある程度のエスパーは止むを得ない。
>>831 strtokのどの変に問題があったの?kwsk(_ _)
>>868 エスパーしたのはどこだ?
プロンプト文言から日本語を除外したことか?
それとも領域を用意したことか?
入力長に制限を課したことか?
相変わらず初心者には最小限の修正をすべきということを学ばないな。
内部に状態を持つような関数はだいたいイケてない。
したがってクロージャもイケてない
>>871 状態を持つというか、内部で文字列を変更されるのはイケてないかもしれない。
けれど、その点は別にQZはなんとも思っていないのではないか。
状態ってのはNULL渡すことだと思うよ
>>869 >strtokのどの変に問題があったの?kwsk(_ _)
>>831 じゃないけど、スレッドセーフじゃないところと、引数の文字列を変更するところかな。
>>869 strtok() が状態を持つ、という仕様。
877 :
869 :2012/04/30(月) 00:44:24.19
いろいろレスありがとうございました。 あと誤字すみませんでした。
>>870 >プロンプト文言から日本語を除外したことか?
それは手元の処理系の都合だ。まあ英語にしても誤解はないだろうから問題ないだろう。
>それとも領域を用意したことか?
>入力長に制限を課したことか?
それこそが問題だ。これは必須の修正だ。
この点を考慮せずして C なぞ書けない、と
>>865 で述べたつもりなのだが、読めなかったのか?
いや、そもそも C の本質を理解していないのか?
>相変わらず初心者には最小限の修正をすべきということを学ばないな。
お前さんには C は向かない、java をお勧めする。
>>873 なんとも思っていないのなら、わざわざ cutToken() などという関数を自力で記述する必要もない。
>>831 のリンク先を読め。
>>878 であれば、それはエスパーでもなんでもない、ただの回答だわ。
1行目を懸念したのであれば、それはエスパーといってもいいかもしれんね。
なぜjavaが出てきたのかは分からんが、初心者が困っているときには必ずしも最適解を与えるべきではないということぐらい学べ。
なもんで、
>>821 のような言葉を頂戴する事態になるんだわ
>>872 Cの「状態を持つ関数」とクロージャは同じではないけどな。
いずれにせよ、 strtok はリエントラントとかスレッドセーフとか以前の問題で、
ふたつの文字列を交互に扱うということさえ出来ないってのは格好悪い設計。
Qにとってはそれがエスパーレベルの回答だと思えるんだろ いつもエスパーすればモリタポもらえるぐらいの普通のコードが書けるかもな
>>875 >引数の文字列を変更するところかな。
実は、これはそんなに問題とはおもっていない。
>スレッドセーフじゃない
これも必要に応じて対応するから、すでに準備されている関数がスレッドセーフかどうかが明示されておれば問題とはしない。
あらためて考え直すと、かなり主観的な判断をくだしているようだ。
そういう意味では、
>>871 >イケてない
が極限にまで正確な記述であると、心の底から同意する次第である。
>>880 >初心者が困っているときには必ずしも最適解を与えるべきではない
確かにこの点は判断は分かれるだろう。それ自体については認める。
私は最適解を提示する立場。
>>885 > >引数の文字列を変更するところかな。
> 実は、これはそんなに問題とはおもっていない。
これと
>>879 の違いをkwsk
ぶれただけ?
>>881 与えられた引数(とそれに関連するコンテキスト)を内部で変更してしまう、という点については、それさえわかっておれば対応可能だから問題とはしない。
俺がそういう思想の元に関数を作って公開していたのであれば、
>>873 に「そう、そこは問題視していない」とレスするがなぁ。
せいぜいつっこむなら、
>>873 が状態の話を別の話にずらしてしまったことについてだけれど、
それについてはエスパーするほどでもないだろうから、一般には捨て置いていいとおもう。
>>873 QZは引数を変更することについてはなんとも思ってないんでない?
→
>>879 なんとも思ってないのに作るわけないだろボケが!!!
>>875 引数の文字列を変更するのはちょっと問題かもね
→
>>885 問題だとは思ってないよ
>>885 と
>>879 になんら差異はない(キリッ
やっぱどうかしてるわ。
strtokなんて初めて知ったんだけど、C言語マスターするには標準ライブラリ関数全部覚えなきゃだめ?
マスターじゃねーよ そこからようやく始まるんだよ
>>892 1) 状態を持つこと
2) 引数として渡された文字列を、内部で変更してしまうこと
の両方が
>>873 で記述されているが、そのうち、私は状態を持つことについて問題視している。
ただし、今となって白状するが、当初
>>831 の時点ではそれを明確に記述できない状態であった。
問題点の記述化に関しては
>>871 に助けてもらったことを認め、
>>871 に感謝する次第である。
まずはいったんながめる。 そうすれば、時々使いどころに気づくと思うから、使う。 頻度が低いものは忘れていくから、たまにながめなおす。 そんな感じでいいと思うよ
897 :
◆QZaw55cn4c :2012/04/30(月) 01:29:30.12
>>893 存在することを知っており必要に応じて参照・試行する手間さえ厭わなければ全然 OK
>>894 mainを書いたときから、いや、C言語ってのがあるんだ?ってところからすでに始まっている。
900 :
デフォルトの名無しさん :2012/04/30(月) 13:37:10.18
>>895 副作用のある関数を全て否定するのか? (肯定しろと主張しているのではない)
>>900 状態を持つことと副作用を持つこととは違う。状態を持たせる場合は静的変数を表に出して記述したい。
ところでなんでQZaw55……はキャップつけてんの?なんかの権威なの?
903 :
デフォルトの名無しさん :2012/04/30(月) 14:08:48.88
>>901 char* qz_strtok(char **, const char *);
てことなら俺もそう思うが
char* qz_strcat_need_free(const char *, const char*);
みたいのはやだな
905 :
◆QZaw55cn4c :2012/04/30(月) 14:28:46.47
>>903 >char* qz_strcat_need_free(const char *, const char*)
これって、例の
char *p = qz_fgets(fp); //内部で malloc() して関数外に丸投げ
free(p);
のことですか?
確かに、win32api の一部の関数群などにみられる
n = NeedBufferFunction(NULL, ...)
buff = malloc(n);
result = NeedBufferFunction(buff, ...); // ここで目的の作用を発揮させる。
free(buff);
という流儀があるのは、あー、認識していますけれども、あー、そこまでやるというのも、うー、どうかなと、あーうー。
906 :
デフォルトの名無しさん :2012/04/30(月) 14:50:42.08
>>905 ガッしたくなるな
本来
n = EstimateBuffer(that, fragment1, fragment2);
buff = malloc(n);
BuildBuffer(that, buff, fragment1, fragment2);
free(buff);
とすべきところ、エクスポートテーブルをけちるためとはいえ
>>904 そのスレでだけキャップつければいいんじゃないの?
よそのスレでも宣伝のためにキャップつけるなんてことせずにさ
反感もたれて逆効果だと思うけど?
つけてもつけなくてもアホな発言で叩かれるんだから、つけてあったほうがNGリストが効くのでありがたい
NGに役に立つが、都合の悪いときはキャップ外して自演にまわることもできるからな…… どのスレでも触れちゃダメなやつが湧くもんだね
910 :
◆QZaw55cn4c :2012/04/30(月) 15:07:08.71
911 :
◆QZaw55cn4c :2012/04/30(月) 15:14:35.22
>>906 今きがついたんですが、
>>905 の NeedBufferFunction() は内部に static な領域を持たなければならなくなりますね。これはもっとも嫌うところ。
とすると、
>>906 のアンカー「that」 の存在が必須か?現時点でよくわかっていないから実装してみようか?んー、んー。
912 :
◆QZaw55cn4c :2012/04/30(月) 15:17:54.11
>>909 煽るためには自演も辞さない。でも炎上のなかで新しい概念が浮かび上がるという収穫は捨てたもんじゃないでしょう?
炎上するだけで終わってしまう、という迷惑な結果が大半ではありますけれども。
それはともかく自演認定はわりと外れていますねえ、実のところ。
913 :
デフォルトの名無しさん :2012/04/30(月) 15:20:09.97
証明も反証もできない自演認定の敗者は釣られた者
引数をいんすうって読んじゃった場合、どのようにして誤魔化すべきでしょうか?
wikipediaだと「いんすう」でもいいように書いてあるけど。
どっかの解説サイトで引数は「ひきすう」と読み、いんすうと読むのはバカ。笑われてろって書いてあったんだ どうでもいいことだから次の質問お先にどーぞ
917 :
デフォルトの名無しさん :2012/04/30(月) 15:30:48.49
>>914 は、いいか悪いかじゃなく、ごまかし方を尋ねている
918 :
◆QZaw55cn4c :2012/04/30(月) 15:50:32.47
>>914 argument は independent variable のことだから略して「引数」だ!
dependent variable (って単語はあるのか?しらない。)はパラメータ parameter という。
プログラム言語では argument も parameter も同じ意味のようなきがしますけれども。
QZが元気だな 仕事無くなったのか
920 :
デフォルトの名無しさん :2012/04/30(月) 16:14:49.36
のんきな奴だな 世間では「昭和の日」の振替休日なんだよ 休日に働く人だっているし 平日に休む人だって普通にいるが それ以前の問題だ
parameterは関数を定義したときに用いられるplace holderとしての 変数のことを指し、argumentは関数にinputする具体的な値を指す。 英語圏の人も、厳密でない人は区別を曖昧にするし、はっきりと区別する ことは必要ではないと思うけどね。 俺は日本語の「引数」というのはどうも好きになれない。 他の訳語はうまいなって思うのもあるけど、これは意味的にも 読み方的にも意味不明に感じる。
922 :
デフォルトの名無しさん :2012/04/30(月) 17:19:06.49
英語圏にもバカはいるってだけ ISO/IEC9899 において argument と parameter は区別されているし 望ましくない言葉遣いを牽制もしている
>>921 argcじゃなくてparamcにすべきってこと?
int func(int a) { return a * 2; } // aはparameter(仮引数) int x = func(100); // 100はargument(実引数) こうじゃね?
926 :
921 :2012/04/30(月) 18:21:32.49
例えば、
int add(int i, int j) {
return i + j;
}
を考える。ここで、iやjは関数を呼び出すまでは具体的な値を持たない
空の箱みたいなものものでしょ?
place holderというのはそういう意味で、iやjはこの関数に使われている
parameterとなる。
一方、この関数を具体的に呼び出すとき、例えば
add(1, 2)
においてiやjに代入される1や2のことを、argumentという。
>>923 これでよい?
927 :
923 :2012/04/30(月) 19:28:04.87
よきにはからう。
ありがとう。>
>>925 ,926
928 :
デフォルトの名無しさん :2012/04/30(月) 21:31:39.50
文字列 SRC を文字列中の文字 SEP で区切って,配列 RET に格納する関数 split を作成せよ.
返却値は分割数である.ただし,分割数は最大 MAX までとする.
この関数を作って実行したのですがうまくいきません。
どこが間違っているのでしょうか。
http://codepad.org/C5gSM3UF
横着しねえでちゃんと解説しろよ スレ主旨を勘違いしてんじゃねー
やりたいことが微妙に食い違ってる気がする
面倒クセェからstrtokのラッパでいいだろもう
この手の質問はとても困る。 間違い箇所を強いて言うと全体的にとしか…。 i は文字列毎のインデックスで、 count が分割数であるべきなんだけど混同しているのが根本的な原因じゃないかなぁとは思う。
>>933 こいつは何でトリップ付けてんの?
何かの権威なの?
936 :
デフォルトの名無しさん :2012/05/01(火) 01:50:11.72
う る せ ー ク ズ
共用体ってオワコンですか?
オワコンだかなんだか知りませんが、使い途を思いつけない人には無用のものでしょう。
939 :
デフォルトの名無しさん :2012/05/01(火) 06:34:44.27
お 前 が 無 用 の オ ワ コ ン だ ク ズ
共用体は終わったコンテンツです.
使えない奴の戯言だな。
>>937 私も
>>241 で述べた様に最近知ったのですが、 C11 ではようやく無名共用体が規格に取込まれたようです。
C++ では当初からある機能であり、 C においても処理系の一部 (Turbo C 等) はかなり古くから拡張として提供していた機能です。
規格改定の際に検討される範囲内に入っているくらいには使われていると考えていいでしょう。
私が知っているところでは yacc が生成するコードで共用体が使われているので、それ見ればどういう用途で使うか参考になるかもしれません。
C++ なら共通のクラスを基底にもつクラスを定義して dynamic_cast するような状況でしょうか。
使う場面ないよ
>>928 d = split(str, ret , c[0], m);
printf("分割数は%dです。\n", d);
printf("分割元文字列は%sです。\n", str); /* 分割した1つ目しか出てこない */
こうなるのは想定してる?
>>937 >>943 メッセージループ処理とかで、関数テーブルを使うような場合によく使う。
プロトタイプ宣言を揃える必要があるため、引数を共用体にして、型が異なる引数を
処理できるようにしている。
割りと一般的な手法だと思う。
>>935 SCHEMEスレが過疎ってるから出張してきたんだろ
>>932 strtok だとうまくない。
素直に strtok を使って実装するとこうなるが
int split(char* str, char* ret[], char sep, int max) {
int count = 0;
char* t, tok[] = {sep, '\0'};
t=strtok(str, tok);
while(t!=NULL) {
ret[count++]=t;
if(count>=max) break;
t=strtok(NULL, tok);
}
return count;
}
例えば分割数が最大2で、カンマで分割するとした場合、
aaaa,bbb,ccc は aaaa と bbb,ccc に分割されず aaaa と bbb になってしまう。
int split(char *str, char *ret[], char sep, int max){ int count = 0; char *t, *x; char tok[2] = {sep}; t = strtok(str, tok); while(t != NULL){ ret[count++] = t; if(count >= max) break; t = strtok(NULL, tok); } x = strtok(NULL, tok); if(x != NULL) *(t + strlen(t)) = sep; return count; }
949 :
948 :2012/05/01(火) 12:10:55.22
ごめん。 バグってます。
すぐに直せば許すよ
大丈夫、他も阿呆だらけだ。
>>951 プログラマーってなんでこうも言葉のコミュニケーションが苦手なんだろうな?
その説明が相手に伝わるかどうかに興味が無いんだろうな
>937 DirectXのライブラリでも使用してたはずだが。
>>953 学生の時、悪い例としてそういう記述を習った。
>>956 で、なんでそれが悪いのかもちろん説明できるよな?
是非とも蒙昧なオレ様に教えてくれよ
>>954 プログラムできないやつがいいそうなこと。
つーか、どのレスも語りたがりだったり勘違いだったりで気持ち悪い。
前に俺に改行コードで云々ぬかしてきやがったクズと似てるな おっさんになるとぐだぐだと長くしゃべりたがるからな プログラマーも高齢化が始まってるんだろう
アホがなんか言ってるな。
963 :
デフォルトの名無しさん :2012/05/01(火) 15:04:17.78
出汁にされただけでは?
>>961 自分のことは見えないと言う、いい見本乙
うひょ
出汁(だし)
はい
で?
日本では底辺職業 底辺職業ドカタらしいくて良いじゃないか
( ゚∀゚)o彡° 底辺!底辺!
この国にプログラマより身分の低い職業は存在しない
っ介護 っ清掃
>>971 そうなのか
嘆いていないで地位改善に努めりゃいいじゃん
板ちがいですよ!
マ板へGo!!
現代のえたひにん
c言語使えるようになりたいのですが まずは、basicとか始めるべきなのでしょうか?
C言語からはじめるべき。
日本語と英単語から始めよう。
C言語は上級者向けすぎるから perl python ruby とかのラクなところから入る そのあとC、それなりに分かった気になったら学習用としてZ80 Cを極めたいなら機械語は絶対にやっとけ
調べてみると c、c++、c#とか cの仲間がいろいろあるようなのですが どれから始めるべきでしょうか
C言語からはじめるべき。
プログラミングしたいだけなら perl python ruby とかのラクなところから入る
ありがとうございました
C言語でゲームプログラミングをするうえでハードウェアの知識って必要ですか? ハードウェアは基本情報の午前とかの知識を言ってます
>986 目的次第。 ゲーム作るなら必須。 ちょこっと計算するだとか、ファイル操作レベルならいらない。
989 :
988 :2012/05/04(金) 01:12:41.21
>ゲームプログラミング ゲームと明言されてたorz WindowsならDirectXやOpenGLの知識が必要だな。
ゲーム会社で掃除かなんかのアルバイトから始めたほうがいいかもね
それは掃除のおねーちゃんがしてくれる。
AWKもいいよ。Linux, FreeBSDなら、最初からはいってるとおもう
Cのコンパイラもはいってる
次スレはよ
>>994 最近のLinuxディストリにはコンパイラ抜かれてるやつもあるぜ
まあパッケージ一発で入るが
UME
100スレ目もつつがなく終わったな 大変喜ばしい
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。