C言語なら、俺に聞け! <8>
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001凡才ハカー
NGNGあちこちの言語に手を出したが結局極めたのはC言語だけだった。
大体のことなら分かるからオレに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・前スレ C言語なら、オレに聞け! <7>
http://pc.2ch.net/test/read.cgi/tech/1003418249/l50
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNGreadlineの使い方を教えてください
0004デフォルトの名無しさん
NGNGWhy don't you read readline's manpage?
0005ケイ
NGNG今は、ルートを使った計算を習っています。
main()
{
int i;
float a,b,c,d,e;
a=2.0;b=3.0;d=b-a;
e=1.0e-5;
i=1;
printf("%3d:%8.5f\n",i,a);
while(d>=e){
c=(a+b)/2;
if(c*c<6)
a=c;
else
b=c;
d=b-a;
printf("%3d:%8.5f\n",i,a);
}
while(d>=e){
c=(a+b)/2;
if(c*c<11)
a=c;
else
b=c;
d=b-a;
printf("%3d:%8.5f\n",i,a);
}
}
これと同じ条件で11の三乗根を求めたいのですが、教えて頂けないでしょうか?
テキスト等で調べてみたものの、初歩的な事は以外と載っていなくて苦労しています。
0006デフォルトの名無しさん
NGNGプログラムというより数学の問題じゃない?
0007デフォルトの名無しさん
NGNGgoogle で 「ニュートン法 三乗根」を調べれ
0008デフォルトの名無しさん
NGNG前のスレからreadline, readlineとしつこいんだが…
manを読めという適切なアドバイスがあるのになぜ実行しないの?
読んだけど分からんと書いてたけど、あんなに簡単に使える関数なのに?
readline()に比べたらprinf()の方が数倍複雑な仕様なんだけど。
分からんじゃなくて読んでないんじゃないの?
0009デフォルトの名無しさん
NGNGえらそーに書いてしまったので恥ずかし。
0010ケイ
NGNGありがとうございます。
0011デフォルトの名無しさん
NGNG#define SOME_SYMBOL_B 0x0001
#define SOME_SYMBOL_C 0x0002
#define SOME_SYMBOL_D 0x0003
...
みたいな定数が何百もあるとき、手作業だとかなり困ると
思うのですが、定数マクロで定数値が重複しないように
定数を自動生成してくれるツールはないでしょうか?
0012デフォルトの名無しさん
NGNG何故enumを使いませんか?
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG別のスレで聞いたら自分の頭で考えろっていうだけで何も教えてくれません。
どうも「C言語」という言葉を使うのはよくないようなのですが
そこらへんはどうなのでしょう?
0015デフォルトの名無しさん
NGNGその程度の違いじゃないの?
0016デフォルトの名無しさん
NGNGハゲシクワラタ。
0017デフォルトの名無しさん
NGNGきみは「C言語」と言って下さい。
「C language」と言えるのは平井堅がギリです。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG使い道が思いつかん。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG>独習C
オナーニみたいでやだよね。
0025デフォルトの名無しさん
NGNGいい勉強サイトない?紹介して
0026デフォルトの名無しさん
NGNGhttp://xml.apache.org/xerces-c/index.html
0027デフォルトの名無しさん
NGNG先頭と後ろに番兵を配置して番兵の中にもデータを格納するのが一般的なのでしょうか?
番兵にデータを入れると ノードを外ずしたり付け加えるときににチェックが大変
なのと チェックにかかるコストが大きいような気がするんですがどうでしょう?
0028
NGNG0029デフォルトの名無しさん
NGNG003027
NGNGリストをリングにするやりかたでのデータの終端のチェックは、
ノードが指す次のポインタが、一番最初に読み始めたノードのアドレスかどうか
を 実アドレス同士で比較するってことでしょうか?
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGstruct ListElement {
struct ListElement *prev, *next;
struct data *body;
};
struct ListElement head = {&head, &head, NULL};
void insert(struct ListElement *e)
{
e->prev = head;
e->next = head.next;
head.next->prev = e;
head.next = e;
}
void remove(struct ListElement *e)
{
e->prev->next = e->next;
e->next->prev = e->prev;
}
int empty(void)
{
return head.next == &head;
}
void search(struct data *x)
{
struct ListElement *l = head.next;
while (l != &head)
if (l->body == x)
return l;
return NULL;
}
003327
NGNGほんと助かりました。
一部理解できない部分があるけど 後は、どうにかやってみます。
ありがとうございました。
0034デフォルトの名無しさん
NGNG両端を扱うときに場合分けするのが面倒だから、ふつーは番兵にはデータを入れない。双方向連結
リストは良く使うデータ構造で、よくできた実装が既にあるから、自分で書かずに既存のライブラリを
利用するのも手だよ。
たとえば FreeBSD で使っているリスト構造だと、これ。
http://cvsweb.freebsd.org/src/sys/sys/queue.h?rev=HEAD&content-type=text/plain
>>29
リストの先頭と末尾を個別に保持する TAILQ ってのもアリですな。4.4BSD の <sys/queue.h> には
リング上のリスト構造 CIRCLEQ と TAILQ 両方あったけど、能力は同一、速度の面では (FreeBSD
の当時の実装では) 後者のほうが良かったという理由で CIRCLEQ 抹消されてます。
0035デフォルトの名無しさん
NGNGどうしたらよいのでしょうか?
例:dirとかの実行結果を表示したい
どなたかお願いします
0036デフォルトの名無しさん
NGNG一般的な話なら、ユニークなファイル名を作ってそこにリダイレクトし、
そのファイルを開く。
0037デフォルトの名無しさん
NGNGコンソールアプリなら system()
なんにせよ「プログラミング言語C」読みましょう。
003835
NGNG>>36
テンポラリーなファイルに書き込ませるというのは
盲点でした
でもファイルに書き出すのはちょっと・・・
>>37
sytem("dir")
だと実行されたかどうかしか分からないのではないのでしょうか?
003935
NGNGsystemの間違いです
鬱だ
0040デフォルトの名無しさん
NGNG普通は、system() 呼び出し時点での stdout, stderr, stdin 引き継ぐから、出力があれば
そのままコンソールに出てくるが。
004135
NGNG文字配列として得たいのです
0042デフォルトの名無しさん
NGNGじゃあ
> 例:dirとかの実行結果を表示したい
と書いちゃダメでしょ。
標準 C ライブラリの範囲からは逸れますが popen() (処理系によっては _popen() の場合もある) が
目的に合うかと。
0043デフォルトの名無しさん
NGNGsystem("dir > dir.log");
open("dir.log");
0044デフォルトの名無しさん
NGNG>>36
0046へっぽこぷろぐらま
NGNGfoo1.c:
int foo1() {
return 1;
}
foo2.c:
int foo2() {
int foo1();
return foo1();
}
この二つのファイルはコンパイルされ、リンクされるます。
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGそいつはよかったな
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG0051名無しさん@おひさまのよう。
NGNGhttp://homepage2.nifty.com/nowsmart/opinion_needless_prototype.htm
0052デフォルトの名無しさん
NGNG一見凄そうだけど、よく読むとアレなページだ...
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG/usr/lib/にはデファルトでパスが通っていますか?
gcc -L/usr/lib/ main.cとするとリンカがエラーを出して
gcc main.c /usr/lib/libpthread.a とすると大丈夫です。
0055デフォルトの名無しさん
NGNG% gcc main.c -lpthread
多分、正解はこれだと思うが。gcc のパス設定に関しては、gcc -v で表示される specs ファイルに書いて
ありますが、これはマクロなので読みにくいかも。実際に展開後の動作を見たいなら
% gcc -c -v main.c
で、どうでしょ。
0056デフォルトの名無しさん
NGNGレスありがとうございます。
とてもわかりやすいです。早速やってみます。
0057デフォルトの名無しさん
NGNG邪道。あとで int foo1() の定義を変更した場合にコンパイルエラーを検出できず、実行時に謎の
エラーが出ることになる(foo1 を呼び出すとスタックが壊れて、デバッグさえまともにできずに苦し
む、とか)。
C++ を使うなら、クラスのメソッドをヘッダに書いてしまうのはアリです。最近のテンプレートベー
スのクラスライブラリ (ATL, WTL とか) を使うと、そういうコードにせざるを得なかったり。
0058デフォルトの名無しさん
NGNGheadは構造体でeは構造体のポインタだよね?
0059デフォルトの名無しさん
NGNGの -lpthreadってなんにゃ?
pthreadってディレクトリはないにゃ。
0060デフォルトの名無しさん
NGNGlibXXX.a というライブラリを探してくれます。
libも.aも指定する必要はありません。(←分かりにくいよねえ、コレ)
実際にはもうちっと細かいけど基本はコレ。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGmain()
{
int i,n;
printf("How many times?\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("チンコ!!\n");
}
}
/* バカプログラム */
0063デフォルトの名無しさん
NGNGint main(void)
{
int i,j=0,n ;
printf("How many times?");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("チンコ");
for(i=1;i<=j;i++)
{
printf("!");
}
printf("\n");
j++ ;
}
} /*バカプログラム改良版*/
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG俺はCしか知らん!(藁
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNGところでscanfを考えたのはデニス・リッチーか?
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNGreallocする前にサイズが知りたいのです。。。
自分で変数とかに入れて管理しないとだめですか
初心者でごめんなさい。。。
0070デフォルトの名無しさん
NGNG互除法以外に方法はないのかな?
誰かアイデアを出してみてくれ!
0071デフォルトの名無しさん
NGNGVC++固有だったら_msize()なんてのがあるな。
0072デフォルトの名無しさん
NGNG他に持っていったとたん、コンパイルできなくなる。諸刃の剣。
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNGに比べられないなんて
他にも返り値にAUTO変数のポインタ返してる関数が有るし、、、
これでよく動いてたもんだ(-▽-
PC初心者板に逝って来ます。。。。
0075ビル・ジョブス
NGNGおいおい・・・
sizeofって演算子だよね。ってことは、演算の出来なければ、
コンパイルエラーだよね。
で、メモリーアロケーターっで関数だよね。(malloc()とかLocalAlloc())
コンパイラは関数の処理内容までは知らないよね。っていうか知る術が
ないよね。ということは、確保した領域のサイズはコンパイラには分かりません。
よって、「サイズの分からない領域へのsizeofは、式が評価できない」
という結論になります。
ファイルのサイズを、sizeof出来ないのと同じだよ。
0076デフォルトの名無しさん
NGNGsizeof(void *)は4か8になるCPUが多いと思われ。
コンパイルエラーにはならん。
0077デフォルトの名無しさん
NGNGmallocのソースでもみんと解らん。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNGK&Rの8.7--記憶割当て見てみれ。単純なmallocの実装が載ってる。
0080ビル・ジョブス
NGNGまず、LocalAlloc()・LocalFree()等のメモリ管理APIはサブシステム
として導入されてます。
しかし、簡単なメモリ管理の構造として、DOSはMCB(MemoryControlBlock)を
用いていて、構造体で管理しています。
typedef struct tagMCB {
char cCheck[2]; // ブレークチェックキャラ
unsigned nBytes; // 確保したバイト数
struct tagMCB *prev; // リストの先頭方向へのポインタ
struct tagMCB *next; // リストの後方方向へのポインタ
} MCB;
のような構造体を、確保したメモリーブロックの先頭に置いて管理
するのが最も基本的。自分自身へのポインタをメンバに含めるのが
ポイントかな。
図解しないと分からないかな?
0082デフォルトの名無しさん
NGNGCを作ったカーニハンとリッチーは、開発者としては優秀だったが、インストラクターとしては最低の部類だった。
彼らはいわゆるヲタで、コードは書けるがニンゲンにわかりやすく説明する能力は装備されていなかった。
Programmming language C を書いたが、これにはCのすべてはのっていなかった。
よくわからないところは、Unix のソースを読んでくれ、という雰囲気があった。
このため、さまざまなCの解釈が生まれ、ANSIで統一されるまで混乱が続いた。
開発者自身の手ではじめからわかりやすく統一された解説がなかったのが、混乱の理由だ。
0083ビル・ジョブス
NGNGCの勉強って大変?ならやめとけよ。おれは楽しいぜ。
とりあえず、言語の説明(言語仕様)というところは、
Programmming language C で十分じゃないか?
この本は、Cの使い方の説明書じゃないぞ。
0084デフォルトの名無しさん
NGNG低水準だからだろ・・・・
無知は黙ってなさぁぃ
0085デフォルトの名無しさん
NGNG負け犬になりたいのなら、ぜひ採用したい。
0086デフォルトの名無しさん
NGNG大昔の話をしてんじゃねーよ。age
0087デフォルトの名無しさん
NGNGだいたい、今ANSI C制定前の名残が原因で混乱するような事例あるか?
デフォルトでANSI準拠じゃないコンパイラ使ってるってか?
そんなもん10年も前に絶滅したと思ったが。
0088デフォルトの名無しさん
NGNGと書かれたコンパイラーを買って、実は全然準拠していないということがわかって愕然とすることはたまにある。
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG通はgotoでループ、これ最狂(´^`;)
0091win98 borland C++ compiler
NGNGで、printfで確認したら-1と出ました。
なして?
0092デフォルトの名無しさん
NGNGそれはコンパイラの最適化を阻害するから、論外。
0093デフォルトの名無しさん
NGNG処理系依存。
ガッコのマシンでやったら違うかもよ。
0094デフォルトの名無しさん
NGNG-1はどのキャラクタコードにもマップされていない特殊なオードで便利だから
0095デフォルトの名無しさん
NGNGwhile(1)はコンパイラによってはwarningでるから、for(;;)がおすすめ。
0096win98 borland C++ compiler
NGNGありがとうございます。
0097デフォルトの名無しさん
NGNGなんでもいいちゅうこと。だからコンパイラによって違う。
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGしかし、それじゃあgetcがEOFを返せなくなっちゃうよ。
0100デフォルトの名無しさん
NGNGおい
0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNGEOF と feof() と勘違いしているに 1 ガノッサ。feof() も 0, 1 ではなく 0, 非0 だけどさ。
0103デフォルトの名無しさん
NGNGシンボル値?
0104デフォルトの名無しさん
NGNG規格書は斜め読みしただけだが、単にマクロとしか書いてない気がする。ただし
「EOF は整数定数に展開される。型は int で値は負」
と規定してあるから 0 or 1 ということは、ありえん。
0105デフォルトの名無しさん
NGNGなら
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG0108プログラミンゲ
NGNG「getchar() != EOFという式の値が0か1であることを確認せよ」
ひげぶ&貧乏人 プログラミンゲ言語C より
0109デフォルトの名無しさん
NGNG比較演算式の結果は 0 と 非 0 になるが。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGわかってねぇなあ。だから>>108をやってみろって。
0112デフォルトの名無しさん
NGNG特定の処理系でどうなるかを言っても意味がないって。こういうときには規格書持ってこないと。
0113名無しさん++
NGNG111 じゃないけど、これですね。C99 の規格書から。
> 6.5.8 Relational operators
> 6 Each of the operators < (less than), > (greater than), <= (less than or equal to), and >=
> (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.89)
> The result has type int.
>
> 6.5.9 Equality operators
> 3 The == (equal to) and != (not equal to) operators are analogous to the relational
> operators except for their lower precedence. Each of the operators yields 1 if the
> specified relation is true and 0 if it is false. The result has type int. (後略)
<, >, <=, >=, ==, != の結果は 0 or 1 になることが要請されています。
0114ビル・ジョブス
NGNGみなさん、レベルが低すぎます!
質問するのは自由だが・・・もう少し考えてからなら、やってよし!
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNG{
char *a[2];
a[0] = strcat(argv[1], "age\0");
...
ってのはやばいですか?
argv[1]に入ってる文字列に "age\0" という文字列を追加したい。
仮にargv[1]にsageが入ってるとすれば、 "sage\0age\0"になるのかな?
とか思っちゃいます。
0118デフォルトの名無しさん
NGNGなるわけない。
sageage\0
になる。
0119デフォルトの名無しさん
NGNG以下の文と同じような理由で追加は無理.(**avにも*a[0]にも)
char *p = "test";
strcat(p, "ok"); /* 代入できない */
0120デフォルトの名無しさん
NGNGチュートリアルないでしょうか。
0121名無しさん++
NGNGそれは間違いです。
> 5.1.2.2.1 Program startup
> The parameters argc and argv and the strings pointed to by the argv array shall
> be modifiable by the program (後略)
argv 配列が指している文字列は、変更可能です。ただし、各文字列用に何バイトの領域を確保して
いるかは不明なので、縮小したり上書きする分には構いませんが、strcat() なので追記するのはま
ずいでしょうね。
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG/* 256もあれば十分 */
char tmp_argv[256];
strcat(tmp_argv, argv[1]);
strcat(tmp_argv, "age\0");
でうまくいってるらしいです。
ワケワカラン・・・。
0125デフォルトの名無しさん
NGNGそういうプログラム作ってっとバッファオーバーフローであぼーんされちゃうぞ。
0126デフォルトの名無しさん
NGNG>>124desu
strcatの使いかたまちがってますね・・・。
欝で死にます。
0127デフォルトの名無しさん
NGNGatterunokana?
wakewakaran...
0128デフォルトの名無しさん
NGNGint main(void)
{
struct {
char *mem;
unsigned int memSize;
}st;
st.mem = (char *)malloc(2);
st.memSize = 2;
memset((char *)st.mem,'\0',st.memSize);
printf("Here is main \n");
printf("st.mem -> %p st.memSize -> %d \n",st.mem,st.memSize);
st.mem = reallocMemory(st.mem,&st.memSize);// ここで領域を拡大してるつもり・・・
printf("Turn back from func\n");
printf("st.mem -> %p st.memSize -> %d \n",st.mem,st.memSize);
printf("st.mem -> %s \n",st.mem);
return 0;
}
char *reallocMemory(char *target,unsigned int *size)
{
char str[409600];
memset((char *)str,'a',409600);
str[409600] = '\0';
if (*size < strlen(str)){
target = realloc(target,strlen(str)+1);
*size = strlen(str)+1;
}
strcpy (target,str);
return target; //新しいポインタを返してるつもり・・・
}
このコードを書いてテストすると、思ったように動いたのですが、
時々返ってきたポインタが変な所を指している様です。
パラメータと返り値をどちらもポインタのポインタにしたら上手くいくのですが
何処かでローカル変数を指してますでしょうか。。。。
0129デフォルトの名無しさん
NGNGもっと考えて来ます。
0130デフォルトの名無しさん
NGNG何がしたいのかよくわからんが、malloc()、realloc()の返り値くらい
チェックしたらどうだ?
あと、
> char str[409600];
> memset((char *)str,'a',409600);
> str[409600] = '\0';
str[]でアクセスできるのはstr[0]〜str[409600 - 1]だぞ。
0131デフォルトの名無しさん
NGNGせっかく構造体を宣言・定義したのですから、
Result = reallocMemory(&st);
のようにされては如何?
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNGgcc manual
0134デフォルトの名無しさん
NGNG0135☆質問です☆
NGNG>a.out file.txt
としたときに、実行ファイル名のあとにあるファイル名(file.txt)を
実行ファイルから読み込む方法をどなたか教えていただけますでしょうか★
おねがいします!
0136デフォルトの名無しさん
NGNGargv[1]
0137デフォルトの名無しさん
NGNG最初の方の問題で、「ここはポインタとか使ったら簡単に済む鴨」てなことアドバイスされたのですが、
「やさしい入門」での問題だから上級手法はまだ説明されていない。
演習問題ってのは、「今まで出てきたものの応用だけで作ってみろ」ということだと思うんですが
それだとコードが長くなるんです。
それでもいいんでしょうか。
0138>>136 san
NGNG解決しました★すばやい回答ありがとうございました♪ _(._.)_
0139デフォルトの名無しさん
NGNGまずその時の自分の技量で自分で解く。
後で新しいことを覚えたらまたその時の技量で解く。
それで両者を比べてみる。
0140Kusakabe Youichi
NGNG> 実行ファイルから読み込む方法
第2章に出ていますよ。
0141Kusakabe Youichi
NGNGK&R 『THE C PROGRAMMING LANGUAGE』Prentice-Hall
の演習問題の模範解答が
『THE C ANSWER BOOK』』Prentice-Hall
です。
訳本も出ています。
2ndに対応したものも出ています。
0142デフォルトの名無しさん
NGNG『TWO Ch ANSWER BOOK』』Prentice-Hall
です。
0143デフォルトの名無しさん
NGNGム板にも来たのか…
>>142
>2ndに対応したものも出ています。
「2chに〜」と書きたかったんだろうなぁ…
0144128
NGNGどうも文字配列の扱いに四苦八苦しておりまして(´д`;)
呼び出した先で領域を広げようとしてたんですが、
構造体ポインタ、、上手く使えるかなぁ・・・・
でも、便利そうです。
頑張ります、有難う御座いました。
0145デフォルトの名無しさん
NGNGJavaとかVC++とかのString型の考えを導入するといいかも。
あれって大きさは変えられんのだよね。
たとえば、文字列の連結なんかは
新たに確保した領域に文字列をコピーして
コピー元を開放する って発想。
あとから大きさを変えられると謳ってるクラスは
大抵、中でこんなことを泥臭く繰り返してる。
それか、最初に大雑把に領域を確保してて
足りなくなったら確保しなおしてコピーとか。
0146無名λ式
NGNG通常、C++のbasic_stringでは、
大抵ropeとかいわれるデータ構造や類似のデータ構造が使われ、
あなたの言うような原始的な実装は行なっていません。
C++ではoperator[]がoverload出来るので、こういう事が出来るのです。
構文糖衣のおかげで、まずは原始的な実装から始められるのも嬉しいですね。
0147デフォルトの名無しさん
NGNG大きさを変えられる構造って何ですか?
---------------------------
string1|string2|empty |
---------------------------
こういう状態のときに、確保しなおすことをせずにstring1の大きさを変えてください。
0148デフォルトの名無しさん
NGNGマルチスレッド対応のため。
Stringみたいに頻繁に使用されるオブジェクトで
排他同期が必要になると性能に影響が出る。
だから変更可能なStringBufferとreadOnlyなStringとに分けられた。
C++のライブラリはスレッドの事は関知してないんでそ?
0149デフォルトの名無しさん
NGNGC++じゃないの?
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG>C++のライブラリはスレッドの事は関知してないんでそ?
Cのライブラリの間違い? というかCのライブラリですらWindows
なんかではスレッドセーフになっている場合がある。
Javaなんぞと違ってC/C++はスレッドについては実装によって異なるだけ
0155デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1003674814/
0156デフォルトの名無しさん
NGNG> C++のライブラリはスレッドの事は関知してないんでそ?
ANSI C++ にはスレッドに関する規定がない、というのが正しいかな。
最近の処理系だと、ライブラリ側でスレッドセーフな関数を一部提供しているのが普通。今時の
ライブラリだと、operator new あたりはふつースレッドセーフ。
0157デフォルトの名無しさん
NGNG#include<stdlib.h>
int shortest(int, int) ;
int main(void)
{
int m, n, x ;
printf("Input m:") ;
scanf("%d",&m) ;
printf("Input n:") ;
scanf("%d",&n) ;
if( m<0 || n<0)
{
printf("error! m or n is less than 0.\n") ;
exit(1) ;
}
x = shortest(m, n) ;
printf("The number of shortest paths from (0, 0) to (%d, %d) = %d\n",m,n,x) ;
}
int shortest(int m, int n)
{
int s ;
printf("called ===> number of shortest paths(%d, %d)\n",m,n) ;
if(m==0 || n==0)
{
printf("return <=== number of shortest paths(%d, %d) = 1\n",m,n) ;
return 1 ;
}
else if(m>=0 && n>=0)
{
s = shortest(m-1,n) + shortest(m,n-1) ;
}
printf("return <=== number of shortest paths(%d, %d) = %d\n",m,n,s) ;
return s ;
}
あえて再帰処理で作りました。
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGお前みたいな奴がいるから困るんだ (涙
0161デフォルトの名無しさん
NGNG組み込みなら許すかも。
>>158
環境依存だから、環境を書くように。Win32 なら Sleep(), UNIX なら sleep(), usleep() あたりか。
0163デフォルトの名無しさん
NGNGネタとしても面白くないな。逝って良し。
0164デフォルトの名無しさん
NGNGって、大した誤差はでないだろうな藁
0165デフォルトの名無しさん
NGNGclosedir()をコメントアウトすると、無事に?終了します
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNGLSIC86をダウンロードしたのはいいのですが、
テストのためにマニュアルにのっている
hello.c というプログラムをコンパイルしようとしたところ
hello.c 1: can't open: stdio.h: No such file or directory
とエラーが出てしまいます…。
マニュアルで綴りや設定の仕方など見直したのですがわかりません。
すごく初歩的な質問で申し訳ないのですが、
どなたかよろしくお願いします…。
0168デフォルトの名無しさん
NGNGINCLUDE環境変数をちゃんと設定した?
確か必要だったような気がする
0169デフォルトの名無しさん
NGNGここがLSIC86の初期設定を解説しているから読んでみそ。
http://www.sting.co.jp/mag/comp.htm
0170デフォルトの名無しさん
NGNG>>168-169さん、ありがとうございます。
INCLUDE環境変数というものが何かよくわかっていないのですが
>>169さんの紹介してくださったページ通りに設定はしてみました。
やはり同じエラーが出てしまいました…。
関係ないかもしれませんが、Win98SEを使っています。
Win95/98対応と書いてあったのですが、
SEには対応していないのでしょうか…?
0171あきじん ◆jx8Uh8fk
NGNG↓これとか使った方がいいよ。
http://www.borland.co.jp/cppbuilder/freecompiler/index.html
0172横やり
NGNG>169のページ見たけど
> -XC:\LSIC86\BIN -LC:\LSIC86\LIB -IC:\LSIC86\INCLUDE -T -O
となります。
のあたりだろ
0173デフォルトの名無しさん
NGNGWin98SEでも動作するよ。現にオレのWin98SEマシンでも動いた。
多分、ファイル_LCCの記述にタイプミスがあるんじゃないかな?
もう一度よく見直してみてくれ。
INCLUDE環境変数はCコンパイラがインクルードファイルを見つける
ときのパスを記述したもの。入門書を読めば大抵は前半部で
解説があると思う。
で、171氏が指摘しているようにLSIC86でなければいけない
特別な理由でもない限り、Borland C++を使った方がいいと
思うぞ。
0174デフォルトの名無しさん
NGNG>>171さんのところのをよく読んでみているところですが、
>>172
> -XC:\LSIC86\BIN -LC:\LSIC86\LIB -IC:\LSIC86\INCLUDE -T -O
はちゃんと直したんですよ…。
うーん。
設定するときにC:\CONFIG.SYSとC:\AUTOEXEC.BATを
書き変えたのですが、元々文字が書いてあったのでそれに書き足しました。
マニュアルには「…と書いてください」とあったのですが
元々C:\CONFIG.SYSとC:\AUTOEXEC.BATは空ファイルなのでしょうか??
0175167
NGNGもう一度_lccを見直してみることにします。
でも、別に特別な理由があるわけではなくて
LSIC86を最初に見つけたというだけなので
>>171さんのところのコンパイラをダウンロードしてみます。
どうもありがとうございました!
0176あきじん ◆jx8Uh8fk
NGNGそれよりもAUTOEXEC.BAT変更したら
再起動しなきゃ駄目だよ。SHIFT+再起動でも駄目。
じゃ頑張ってね。
0177デフォルトの名無しさん
NGNGregister char *p;
として、このpは内容が0xffであるようなメモリのアドレスを格納したとします。
そして
if(*p == 0xff){
}
とこれを判定しようとしました。これって真にならないんですか?
0178デフォルトの名無しさん
NGNGif(p == (char*)0xff)
これだったら真になるよ。
0179デフォルトの名無しさん
NGNGデバッグ中に変数の値見ても*p=0x000000ffって表示されます。(VC++)
0180178
NGNG0181デフォルトの名無しさん
NGNG符号拡張で、*p == -1 になってるんじゃない?
0182デフォルトの名無しさん
NGNG>>181
あ、きっとそれです!
0xffとではなく(char)0xffと比較しないとダメなんですね?(^^;
どうも有り難うございました。
0183デフォルトの名無しさん
NGNGif (*p == (unsigned char)0xff)
こうすればどうよ?
0184あきじん ◆jx8Uh8fk
NGNGコンパイルの時にwarning出なかった?
いっぱい出るからって無視しちゃ駄目だよ(w
0185デフォルトの名無しさん
NGNG有り難うございます。今試したところ
if(*p == (char)0xff)が正解でした。
pがchar*なのでこれにあわせてcharでないとダメと言うことでしょう。
>>184
いっぱいでるから無視してました(w
たぶんでてるかも。
0186183
NGNG激迂闊なオレ。回線切って、アキバに新設された公開首吊り場
に逝ってきます。
海よりも深く反省し、心から謝罪と賠償を(以下略)
0187一部ですが
NGNGコンパイルできないです。
スマソ
char *txt = "今日は大変良い天気です。1012abアイウaiu012";
char *p = txt;
if (isalpha(p)!=0) printf("%c===>半角英字\n",p);
else if (isdigit(p)!=0) printf("%d===>半角数字\n",p);
else if (IsKigouS(p)!=0) printf("%c===>半角記号\n",p);
alphabet.cpp(98) : error C2664: 'isalpha' : 1 番目の引数を 'char *' から 'int' に変換できません。 (新しい機能 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
0188デフォルトの名無しさん
NGNGこう直してみてください。
isalpha(p) -> isalpha(*p)
0189デフォルトの名無しさん
NGNG何がしたいの?文字列の一番目の文字を判定したいのか?
文字と文字列の違いは分かってる?
0190187
NGNGとりあえずコンパイルはできました。
ありがとう。
0191デフォルトの名無しさん
NGNGどうやって排他処理をすればよろしいのでありましょうか?
0192デフォルトの名無しさん
NGNGセマフォ、クリティカルセクションなど。
0193191
NGNG調べてまいります。ありがとう。
0194191
NGNGhttp://www.remus.dti.ne.jp/%7Etom3/multi_thread_basic.html
http://www.hlla.is.tsukuba.ac.jp/%7Eyas/coins/dsys-1998/1999-01-26/pthread-sync.html
http://www.ncad.co.jp/%7Ekomata/c-kouza17.htm
0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNGRubyだけで十分。
0197デフォルトの名無しさん
NGNGRubyのライブラリをCで書く為にCを勉強し始めている俺は、
Ruby厨としては、失格なのか?
0199デフォルトの名無しさん
NGNGundefined reference to `crypt' って (−_−)
プロの皆さんは何を使ってますか、高い強度は必要ではないです
>>195
自分はタコだけど、メモリにグッっと近づいた感じは触ってて気持ち良いよ
生産性を論じてるならアレだけど
VB、Java、Perl辺りをやっていた
0200199
NGNGUltraFastって言うのを頂きました (^^v
0201デフォルトの名無しさん
NGNGPerlの入門書を薦められ、
その前にCを触っておくべきだと
言われたのですが
どうでしょう?
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGC言語の存在ってPascalに近づいてきたかもね、
つまり、教育用言語。
Windowsで実行してない?UNIX系じゃないと実装されてないよ。
0205デフォルトの名無しさん
NGNGというか、Perlがよく分からないのでCです。はい。
0206デフォルトの名無しさん
NGNGfn(char* a){
}
int main(){
fn(A);
}
とした時
fn の a 指す値は
*a 〜 *(a+4) は全部 \0 になるの?
0207デフォルトの名無しさん
NGNGなる、と思う・・・
0208デフォルトの名無しさん
NGNGmain内に
fn("\0\0\0\0");
と書いたのと同じだもん。
文字列操作とか大変じゃないですか?
フォームから送られてくるデータの項目ごとの分割とか。
(Perlではハッシュでかんたん。)
何か美しい解決法があれば聞きたいです。
0210login:Penguin
NGNG0211デフォルトの名無しさん
NGNGそういうのは全部ライブラリでなんとかしたり、
データベースに突っ込んでなんとかしたりするから平気です。
0212デフォルトの名無しさん
NGNGK&R読んだことないの?
Bの次。が有力。
0214デフォルトの名無しさん
NGNGありがと
じゃあ、文字列の最後を \0 2個にしたいときは
#define A "abcde\0"
ってすればいいですよね
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNGBCPLの頭文字とったのがB言語で、
ダブルにその次ってことでCらしい。よくわからんけど。
次はPか。ピー言語。なんか嫌っ('Д`;)
0217デフォルトの名無しさん
NGNGありがとございました
0218 f
NGNG興味があったのでB言語について。
文法的にはほぼCですな。
BとCって何が違うんですか?
ポインタがないとか?
0219デフォルトの名無しさん
NGNGざっと読んでみた。
ポインタはあるみたい。というか、型は整数しかなくて、キャストしなくても
* 付ければポインタとして扱われているように見える。
0220デフォルトの名無しさん
NGNG{
char *szFindPoint;
char *szFileName;
if(strlen(FullPath)>MAX_PATH)
return NULL;
else
{
szFindPoint=strchr(FullPath,'\');
while(szFindPoint){
szFileName=szFindPoint;
szFindPoint=strchr(szFindPoint,'\');
}
}
if(!szFileName)return FullPath;
else
return szFileName;
}
こいつを実装とやらをしたいんだけどスタックとかから教えてください
0221デフォルトの名無しさん
NGNGまずは日本語を勉強しましょう。「実装とやら」と言われても、何のことやら分かりません。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG意味不明。
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNGszFileName=szFindPoint;
このようにさっき変えた。
そろそろスタックとかやりたいYO
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNG>>220さんはスタックってなにか知ってるのかな?
0228デフォルトの名無しさん
NGNGめもりに一個ずついれてくんだろ?
0229デフォルトの名無しさん
NGNG0230
NGNGスタック、リスト、キュー、どれもメモリー確保して格納する作業ですが?
出直しておいで。
0231デフォルトの名無しさん
NGNGセインセイにいいつけられた?
0232デフォルトの名無しさん
NGNGwhileつかって、ひとつひとつ
if(FullPath[i]='\\'&&mblen(FullPath[i-1],2)!=2)
とかやったほうがいいとおもう?
0233デフォルトの名無しさん
NGNG(スタティック)どーせならひたすら低級路線
で行こうとおもっただけアル
0234デフォルトの名無しさん
NGNGC言語の「標準ライブラリ」を極力使わずに、自作ライブラリを作りたい
ということだろ。
で、手始めにpath nameの分解をしたいと。
大方、mainのargvでわたされたファイルパス名を分解しようという動機だろう。
とりあえず、strlen使ってたら、<string.h>必要になるから、
そこも自作しなさい。
あとmblen() なんてだれもしらん。
0235デフォルトの名無しさん
NGNGstrchr()もだめだね。
0236デフォルトの名無しさん
NGNGでさぁ、どっかのHPにstrchrの定義が
あって、char *strchr( ,int)だったんだけど
あれって実体を返すうーーー、いいのだ。
VCLにはExtractFileNameがあるけど、あれは実体を
返すの?それともポインタかなぁ。もうっかい見てみるからナ!
0237いかりや長介
NGNG0238デフォルトの名無しさん
NGNGそれとも64バイト目をヌル文字って考えながらプログラム
することがプログラマの使命なのですか?
0239デフォルトの名無しさん
NGNG掟です。
0240デフォルトの名無しさん
NGNGchar *ptr;
/* 処理 */
if(hoge != NULL && strlen(hoge))
と書いていますが、これは正しいでしょうか。もしNULLならstrlenは
判定されませんか。(僕の環境では大丈夫です)
また、時々重複freeしちゃうダメっぷりなので
if(hoge){
free(hoge);
hoge = NULL;
}
こんな感じであっちこっちに散りばめてるのですが、これはドキュソですか
変な事聞いてごめんなさい、、、、
0241スシばっか食ってるNewBee
NGNG0242デフォルトの名無しさん
NGNG&&の処理順序は保証されているし、そのような書き方はよく見かける
後者のfreeについてはそういうマクロなり関数なりを用意しとけ
0243デフォルトの名無しさん
NGNGfree() のことなんだけど、>>242 さんみたいにマクロ定義するのが一般的です
#define free_safety(v) if(v){ free(v); v=NULL; }
ただし注意して扱わないといけないんだけど、
こうやってるとハマるんだよなー。。。
char *ptr = some_ptr;
/* some long long loooong proc. */
free_safety(ptr);
ptr には NULL が代入されるけど some_ptr には NULL が代入されないんで、
そこからどんなバグが生成されるやら(笑い
0244デフォルトの名無しさん
NGNG二重 free() するのは厳禁だが、条件反射的に
if (hoge) {
free(hoge);
hoge = NULL;
}
と書くと、今度は free したポインタを参照するバグに出くわすと思うぞ。これは検出しづらいから、
ムチャクチャにタチが悪いバグになる。
どこで、いつ malloc() して、どこで、いつ free() するのかを良く考えてプログラミングするのが先。
その上で防衛的に NULL 代入するようにするのはアリだと思う。(俺はやらないけど)
0245デフォルトの名無しさん
NGNG安心しましたです、出来る方の言葉を聞きたくて(^-^*
でももっと本を読まないと
何故かCよりgdbばっかり触ってるような(鬱
早速マクロにしますです
0246デフォルトの名無しさん
NGNGなるほど!、次にはまるのはそれの様な気がします(^-^; コワ
やっぱり人間GCよろしく適当に散りばめるのはヤバイんですね
構造がつかめて無いのは仰るとおりです。
0247デフォルトの名無しさん
NGNG真面目な話、GC 使うという選択肢はアリだよ。
http://www.hpl.hp.com/personal/Hans_Boehm/gc/
0248デフォルトの名無しさん
NGNGどうすればいいの?誰かおしえて。
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG出来たら英語に翻訳してくれると尚良し
0251デフォルトの名無しさん
NGNGその変換するプログラムをおしえて欲しいのよ。
0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG漢字と読み仮名の辞書を作れ。10年もあればできる。
0255デフォルトの名無しさん
NGNG単語に区切るのが難しい。
0256デフォルトの名無しさん
NGNG最小コスト法まで話しをもっていくべきか?
IMEのやってることと比べるとUIがいらない点と、
学習する必要がない分、作り込みは簡単だと思うがどうよ?
0257デフォルトの名無しさん
NGNGhttp://kakasi.namazu.org/
GPL だから、扱い注意な。自分のプログラムにコードを取り込んだ場合、自分のコードも自動的に
GPL になる。
0258デフォルトの名無しさん
NGNG248 のような質問をするやつが理解できるかどうか。
0259デフォルトの名無しさん
NGNG茶筅の方がライセンスゆるいよ。
http://chasen.aist-nara.ac.jp/index.html.ja
0260デフォルトの名無しさん
NGNGfseek(FILE *fp,long pos,SEEK_SET)
を使うと、posが、long型なので2G以上は指定してみてもオバーフローして
ファイル先頭に戻ってしまいます。
どうすれば、2GB先にシークできるのでしょうか?
0261shige
NGNGint fsetpos(FILE *stream, fpos_t *pos);
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGAPI使った方が良いのでは?
まぁ、内部ではAPI呼び出してるんだけど・・・。
0265デフォルトの名無しさん
NGNG使われ続けるのだろうなあ。
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGNTカーネルでも、intが32ビットの間は、fseek()は、32ビット。
0270デフォルトの名無しさん
NGNGftell()もlongを返すからlongであらわせない位置にファイルポジションが
あるとエラーになるのか。
0271デフォルトの名無しさん
NGNGアセンブラを知ってて、FORTRANを知ってて、BASICを知ってて、COBOLを知ってて、LISPを知ってて、PASCALも知ってる、てゆー人向けに書かれた本だよ。
プログラミングの初心者は林春比古の本からはじめたほうがいいよ。
ついでにいうと、この板の住人は技術者であって、インストラクターではないから、そのへん注意したほうがいいよ。
教育心理学の本とか読んでる人少ないからね。ここは。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG最初にわからなかったことに気をつけながらもう一度読む。
それでもわからないようなら、プログラマには向いてないのであきらめる。
0275デフォルトの名無しさん
NGNG同意
0276デフォルトの名無しさん
NGNGポインタと実態についてまた少し知識が確かになったので
このようにしてして無難にやった。
0277デフォルトの名無しさん
NGNGこんな意識の低いやつが翻訳しているのかと思うと読む気にならん。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG/ ・ / ';,
. / '; ./ ';
/ ;______/ ;
/ \
/ / \ \
/´ |____| |
| ///// | | ///// |
| .| | |
| | | |
| '; / /
\ \/ .. /
ヽ ........:::::::<
__________∧___________
/ \
| 英語読めないや... |
0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG>pがchar*なのでこれにあわせてcharでないとダメと言うことでしょう。
違います。
0282デフォルトの名無しさん
NGNGif(hoge){
free(hoge);
hoge = NULL;
}
は、
free(hoge);
hoge = NULL;
で十分。
ところで、>>244の
>今度は free したポインタを参照するバグに出くわすと思うぞ
って、どういうこと?
0283デフォルトの名無しさん
NGNGちょっと複雑なデータ構造(たとえばツリーとか)を解放するときに、
free_tree(struct tree* p)
{
if (p->left != NULL)
free_tree(p->left);
if (p->right != NULL)
free_tree(p->right);
}
みたいな関数を作るじゃない。単に free() を SAFE_FREE() みたいなマクロで置き換えた場合、
こういう状況では何の役にも立たなくて、やっぱり同じようなバグに出くわすって話じゃないの。
0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG抜けてるのは free_tree() ではなく free() と思われ。
0286美空ひばり
NGNGfuncっていう表現(カッコがない)はどういう意味になりますか?
0287デフォルトの名無しさん
NGNG関数のアドレス
0288284
NGNG同レベルかよ
0289デフォルトの名無しさん
NGNG定義城って・・・・
定義域の間違いだよね・・・・・
でもなんでコンピュータ上で間違うんだろう・・・・
0290デフォルトの名無しさん
NGNG0291
NGNG0292デフォルトの名無しさん
NGNG同じだろ。
0293デフォルトの名無しさん
NGNG場合による。
switch(i){
case 0:
case 1:
case 2:
case 3:
}
って感じだと、if より速くなるかもしれない。
コンパイラの最適化の話だから、確実とは言えないが、
if の羅列が switch より速くなることはないだろう。
0295293
NGNGと思ったけど
if(unsigned(i) < 20){
}else if(i < 40){
のように効率的に条件判断するのと比べるなら何ともいえないな。
単純に == で判断してるだけなら switch の方がいいのでは?という程度。
0296デフォルトの名無しさん
NGNGたとえばその例ではどういう最適化でifより速くなる可能性があるの?
0297デフォルトの名無しさん
NGNG配列みたいな感じで飛び先アドレスが格納されてて、
インデックスで飛び先アドレスを取ってきてジャンプ。
0298
NGNG0299デフォルトの名無しさん
NGNGVC で試したら if の羅列でも同様に最適化されました。
最近のコンパイラは優秀なんで、どっちでも同じです。
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNGif の羅列では最適化されません。
switch では最適化されます。
よって switch でどうぞ。
0302デフォルトの名無しさん
NGNGストールしますから、よく分岐する部分をifで抜き出して、それ
以外(インデックスが連続しなくなる場合はダミーをうめて)を
switchにしたほうがよいです。
0303デフォルトの名無しさん
NGNG数値から文字列への変換はあるのでしょうか?
0304デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGそんな標準関数はないよ。VC++にはおまけで_itoa()なんてのがあるみたいだけど。
ちなみに>>304が正解。
単に数値を数字列に変換するだけでsprintf()なんて使っていられるか!!と言う人もいるみたいだけれど、いちいち自作するよりはましだと思うね。
0308周富徳
NGNGいきなり
int a[1024]
とかで変数を宣言しただけでは、メモリは確保されないんでしょうか?
また、すべてのmallocはcallocで代用してもいいんでしょうか?
0309デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG私の場合、関数内で一時的に文字列をコピーする時に役立つ。
どんな長さの文字列が来るか分からないから、引数の文字列の長さをstrlen()で測って、+1した分の領域を確保すると丁度よくなる。
恐怖のセグメンテーション違反も起きないし(笑)
0312305
NGNG私も最初は標準関数だと思っていたよ。
でもgccでコンパイルできなかった時に初めて気づいたよ。
調べてみたらそんなものはないと・・・
0313デフォルトの名無しさん
NGNGhello worldにも使われる関数をばかにしちゃあいかん。
0314デフォルトの名無しさん
NGNGたまたまデータの個数が1024個よりも多かったらどうします?
0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGうん。
0317_
NGNGint a[1024]
でもメモリは確保できるけど1024個しか情報を登録できないソフトって使えないと思うよ。
Windowsのエクスプローラのツリービューとかってどうやって実現すれば良いんだろう?って話にもなってきます。
0318デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGそうか。ありがとう。
一度1025文字以上入力してみようかな(笑)
0321デフォルトの名無しさん
NGNGmallocなんて、前世紀の遺物です。
使う必要はまったくありません。
コードが不必要に複雑になるだけです。
データの、想定される最大長の同じ長さの配列を使えば、
後は、OSが仮想記憶でうまくやってくれます。
0322プヨプヨ
NGNGデータ数が保障されている場合は意味ないの?
0323デフォルトの名無しさん
NGNGデータ数が1024が上限とか、そういう仕様だったら、
必要ないですね。
0325周富徳
NGNGお仕事中ですか?
0326デフォルトの名無しさん
NGNG0327あそぼ
NGNGWindowsにはVirtualAllocって関数がそういう使い方を想定してるみたいだね。
ってことは逆に普通のLocalAllocとかって何らかの弊害があるってことじゃないですかね?
0328デフォルトの名無しさん
NGNGどうでもいいが、せっかくならvallocという名前にしてほしかった(笑)
0329白いパラソル
NGNG公開されているソースとかで勉強した人とかいますか?
昔、INNをすすめられたんですが、
もちろん挫折しました。
0330デフォルトの名無しさん
NGNG標準関数のコードで勉強しようと思ったがどこにあるのか分からずに挫折。
0331あそぼ
NGNG俺の場合はある程度書けるようになってから他人の技を盗むってかんじですね。
そのソフトの基礎(通信系ならSocketとか)はあらかじめ押さえておかないと読めないと思います。
友人は人のコードがないとプログラム書けなかったりしますが。
0332平壌市民
NGNG全部mallocした後に'\0'で初期化されているんですが、
これは糞コードの類に入るんでしょうか?
callocでやるべき?
0333デフォルトの名無しさん
NGNG例)1 -> 2 -> 3
0335デフォルトの名無しさん
NGNGchar型って1byteのunsigned intでしょう?
0336デフォルトの名無しさん
NGNGunsigned かどうかは処理系依存だが、いずれにしろ C では char が整数型であることは間違いない。
0338デフォルトの名無しさん
NGNGよく文字定数を代入するときに、
char c;
c='A';
こういう風にするけれど、char=65;やchar=0x41としても全く問題ない(内部では等価だから)。
だから文字は数値として扱えるよ。
0339デフォルトの名無しさん
NGNG訂正ありがとう。
処理系依存ということは、
int c;
while((c=getchar())!=EOF)
;
このおなじみのコードは処理系によってはcharでもうまくゆくんだね。
0340デフォルトの名無しさん
NGNG0341340
NGNGポインターならナルポインタでも返してやるんですが・・・
0342デフォルトの名無しさん
NGNG期待されるintの範囲による。
期待されるのが0以上ならば、負の数にするのが一般的。
-1,-2...にエラーコードを割り当てれば、エラーパターンを細分化できる。
0343342
NGNGあら、そういうことだと・・・
戻り値として期待されない値にエラーを割りあてるわけだから、
正常時にあらゆるint値を返す場合は、そもそもこの方法でエラーを通知
することは不可能だよ。
0344デフォルトの名無しさん
NGNGやっぱりそうですか。。。
それならもうこの関数を使う前に予め正常かどうか判断するしかないですね。
ありがとうございました。
0345342
NGNG解決策としては、戻り値じゃなく、引数に出力用の変数を設ける方法があるよ。
0346344
NGNGエラーコードを設定する変数を呼び出し元で用意するということですか?
0347342
NGNGそう、それでもいい
int foo(int input, int *err)
と定義して、呼び出すときは。
int err,ret;
ret = foo(100,&err);
if(err == ERROR){}
とか、あるいは。
int foo(int output, int input)
として
int out,err;
err = foo(100,&out);
if(err == ERROR){}
でもいい。
後者のほうが使いやすいと思うけど、前者もあり。
0348342
NGNG訂正
後者の定義は
int foo(int output, int *input)
ポインタで渡す。
0349342
NGNGint foo(int input, int *output)
だ。
鬱・・・
0350344
NGNGなるほど。よく分かりました。実際に前者と後者を試してみて使いやすい方を使うことにします。
ありがとうございました。
0351sage
NGNG0353デフォルトの名無しさん
NGNG全部やれ。
0354デフォルトの名無しさん
NGNG今やれ。すぐやれ。
0355デフォルトの名無しさん
NGNG再帰
0356ジョジョの奇妙なソースコード
NGNGK.O
0357デフォルトの名無しさん
NGNGmain() ? void main(void) ? int main() ? その他もろもろ
0358デフォルトの名無しさん
NGNG0359357
NGNG0360デフォルトの名無しさん
NGNG0361358
NGNGint書かないとwarning出ることがあるから。
0362デフォルトの名無しさん
NGNGそうなんだ。VC++,bcc32,gccのいずれも出ないからいいのかと思っていたけど。
bcc32でmain()の場合はreturnを書かないと警告が出るけどね。
0363デフォルトの名無しさん
NGNG全部間違ってるのが悲しい。
0364デフォルトの名無しさん
NGNGint main(void)が正しいということ?
0365デフォルトの名無しさん
NGNG意味不明。
0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNGこれ以外を使ってる奴は基地外
0369デフォルトの名無しさん
NGNG変数名なんてどうでもいいじゃない。
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGとかいうのがあったような・・・
0373デフォルトの名無しさん
NGNG判定するのは「素人」って、この板で言ってた
人が居たんですけど、玄人はどうやって判定
するんですか?
double a,b;
...
if( a == b ) {
...
0374デフォルトの名無しさん
NGNGそう言った人が素人
0375デフォルトの名無しさん
NGNGそれで構わないと思うけど、
計算結果を比較する場合は
丸め誤差でちょっとでもずれたりすると
イコールにならないから注意。
0376デフォルトの名無しさん
NGNG大抵はコンパイラによってWARNINGが出たり出なかったりする程度のものなんですが。
0377デフォルトの名無しさん
NGNG玄人はこのマクロ使う。
てか、資料無しで書いたんで、間違ってたらゴメソ
#define DOUBLE_EQ(x,v) (((v - DBL_EPSILON) < x) && (x <( v + DBL_EPSILON)))
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG警告の内容を理解して、無視して大丈夫かどうかそのつど、判断するしかないね。
警告の内容を理解しないで、闇雲にソースをいじって、無理に消しても
それが、バグの原因になったりするしね。
0380デフォルトの名無しさん
NGNG0381仕様書無しさん
NGNG整数だろうが実数だろうが、等しいか否かの判定は == 演算子でできる。
問題なのは、実数型の計算の場合、丸め誤差などのせいで予想と違う結果が
出やすいってこと。
とりあえず、
for ( double i = 0; i < 1; i += 0.1 ) {
cout << i << endl;
}
このコード実行してみな。
>>377
DBL_EPSILON はどこで定義してるんだよ。許容誤差がなきゃ始まらないだろ。
0382デフォルトの名無しさん
NGNGDBL_EPSILONはfloat.hで定義されてるね…
0383デフォルトの名無しさん
NGNGLIMITS.Hで定義されているらしい。
あくまでもMSDNライブラリに載っていただけだからANSI C準拠かどうかは分からないけど。
0384383
NGNG同じページに書いてあったから・・・
0385383
NGNGDBL_EPSILON = 2.2204460492503131e-016
と定義され、意味は、
1.0+DBL_EPSILON !=1.0 になるような最小の数
らしいです。
0387デフォルトの名無しさん
NGNGてことは、差をDBL_EPSILONと比較するのはあまり意味がないような。
やっぱ有効数字を設計時に決めておくのがいいと思われ。
0388デフォルトの名無しさん
NGNGとかって、やればいいのかな?
0389デフォルトの名無しさん
NGNGプログラミングC第二版の173ページのstrdup関数の例ではfree関数でを解放していないようです(そんなことをしたらどうなるかくらいは分かります)。
もしかして、場合によっては解放しなくてもよいのですか?
0390389
NGNG○ free関数で
0391デフォルトの名無しさん
NGNG>もしかして、場合によっては解放しなくてもよいのですか?
プログラム終了まで確保しっぱなしでも困らない場合は構わない。
でもおすすめできるようなことではない。
0392デフォルトの名無しさん
NGNG分かりました。ありがとうございます。
0394デフォルトの名無しさん
NGNGまともでなかったらプログラムが終了しても解放されないということですか?
で、メモリーリークの原因になると・・・・
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGDOS, Win16, Win32, Solaris, FreeBSD, NetBSD, OpenBSD, Linux あたりは、ぜんぶ問題ない。
っつーか問題がある環境が実例として挙げられた試しがない。(freestanding は除く)
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGつーことは、組み込み系の人だけ?
mallocを使うのかどうかという問題もあるが。
0400デフォルトの名無しさん
NGNGANSI C の規格は二種類あって、組み込みのほうの処理系は普通 freestanding の方を採用
している。で freestanding の方では、そもそも malloc, free は標準関数ではないから、その
あたりは処理系によりけり。
そもそも、巨大な単一ヒープを前提にした malloc, free は、メモリ制約が厳しい環境では使い
モノにならんよね。
0401399
NGNG0402デフォルトの名無しさん
NGNGなんか誤解してそうだな。
正確に書くと、「ISO/IEC 9899 (ANSI C)に準拠する実装としてはhostedと
freestandingの二種類ある。」てこと。
0403デフォルトの名無しさん
NGNG色々と操作する関数を書いているのですが、
それをライブラリとして使うようにした場合に、
外部のデータもライブラリとしてまとめてられるのでしょうか?
できれば、winとlinuxの両方で、やり方が知りたいのですが…。
0404デフォルトの名無しさん
NGNG外部のデータが何を指しているのか分からない。
0405デフォルトの名無しさん
NGNG・・・はい?
外部のデータって、「外部のバイナリファイル」なんでわ?
ライブラリとしてまとめる???
サパーリ妖精が出そう。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNG配列を関数に渡せないから。(←初心者発言)
0409デフォルトの名無しさん
NGNGどゆこと?
>408
・・・・そうだね(冷笑)
0410デフォルトの名無しさん
NGNGなんか方法ある?
0411C++忘れかけ
NGNGポインタで、関数配列とか…
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNGC言語マンセーーーー!!!!
参照なんて捨てちまえ!!!!
* このうめぼし見ただけで唾が出てくるぜ!
**(*(ptr[3])[3]);
うおーーーーーーー (オーバーラン)アヒャっ
0415デフォルトの名無しさん
NGNGやはりポインタは危険だな。
0416デフォルトの名無しさん
NGNG構造体にする。
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG確かに構造体にすれば配列でも渡せるけど、例えば1MBの配列をそうやって
渡すのはとんでもなく非効率的だし、下手するとスタックが足りなくなる
からねえ…。
0420デフォルトの名無しさん
NGNGC言語ってのはな、もっと殺伐としてるべきなんだよ。
メモリ操作で「どこが間違ってんだよぉ?」いつモニタに喧嘩を売り始めてもおかしくない、
アクセス違反が起きるか起きねーか、そんな雰囲気がいいんじゃねーか。
まあお前、>>406は、VBでも使ってなさいってこった。
0421デフォルトの名無しさん
NGNGただ関数内で参照するだけなのに、データ自体をコピーするなんて非効率的だよね。
在処さえコピーすればいいんだから。そのためにはポインターは必須。
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNGそもそも「ポインタの存在意義は何か」って話に対して「配列を効率よく関数間で渡すこと」という
意見が間違ってると思われ。それなら >>422 が言うように参照でも良いし、参照回数計測 +
copy on write を言語の機能として実装してしまってもいい。
C でポインタがあるのは、言語仕様を小さく押さえつつ、高度なデータ構造、たとえばリストやツリー
などをプログラマが実装できるようにするためでしょ。
0424デフォルトの名無しさん
NGNG>>423
VBでも実装できるんじゃぁないんすか?
リスト&ツリー
参照ではだめでポインタを使わねば!っていう
具体例を俺もしりたーい!
0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNGポインタっぽく扱えるものであれば、それで済むのです。
C++の参照は、柔軟性に乏しく、用途が限定されてるので、
ポインタでないとダメなのです。
単にそれだけのことです。
0427デフォルトの名無しさん
NGNGCやってるといつも頭の中に2次元配列の2次元配列の2次元配列
みたいなのがグルグルしてくる。。。3次元ってのはおかしいよなあ・・・・
0428デフォルトの名無しさん
NGNGC++の参照とJavaの参照を比べないで欲しい。
Javaのは参照という名前のポインタ。
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG参照とか文字列とかそんなものぜんぜん違う次元の話しだ。
0431デフォルトの名無しさん
NGNGシステム記述言語として誕生した初期の C では正解だけど、現在の ANSI C の規格の背景は? って
ことになると、微妙に違う気がする。
ポインタに関して単に「メモリアドレス」と書かずに、あれだけ微妙な言い回しをしているのは、それなりの
意味があると思わん?
0432デフォルトの名無しさん
NGNG言語の定義としてポインタ=メモリアドレスと明示的に定義することを
避けたんだ。
アドレス=ポインタは、C++に派生してもその意義は失われていない。
その中でも唯一扱いが異なるのはNULLポインタだが、
そこまで言及する必要もないだろ。
0433デフォルトの名無しさん
NGNGそういうものも多いよね。
0434組長
NGNGで書かれたファイルを読み込んで、
int変数まで持っていくプログラムを考えています。
atoi()とsscanf()を使えば簡単と思っていたんですがなかなかできません。
どなたか教えてくだし。
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNG0x37をひけ。
0437デフォルトの名無しさん
NGNGアルファベットって二種類あるよ。
0438デフォルトの名無しさん
NGNG並び順はテキスト作った人にしかわからん。
0439デフォルトの名無しさん
NGNGstrtol (stdlib.h)
0440デフォルトの名無しさん
NGNGchar *hex;
int i;
sscanf(hex,"%x",&i);
こうしたらできたけど。
もちろん、hexは初期化してね。
0441440
NGNG0442
NGNG0443デフォルトの名無しさん
NGNGそれぐらい判断してからひけ。それかマスクしろ。
0444デフォルトの名無しさん
NGNG10進数字列として数値にすると思うけど・・・
アルファベットの無い16進数字列は10進数字列と見分けがつかないし。
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGマニュアル見ろや。2進から36進まで可能。
0447デフォルトの名無しさん
NGNGすまない。名前しか知らない関数でatolと同じものだとばかり思っていた。
0448デフォルトの名無しさん
NGNGlong int strtol(const char *nptr, char **endptr, int base);
0449447
NGNGもう寝よう・・・
0450デフォルトの名無しさん
NGNGint i;
char hex;
if((( hex & 0xff ) > 0x30) && (( hex & 0xff ) < 0x7a)){
if(( hex & 0xdf ) < 0x41 )
i = hex-0x30;
else
i = hex-0x37;
}
0451デフォルトの名無しさん
NGNGp=realloc(p,64);
できる?
さいごにfree(p);
で問題ない?
0452デフォルトの名無しさん
NGNGreallocはmalloc,callocで確保した領域にしか使ってはならない。freeも同様。
0453デフォルトの名無しさん
NGNG今やったんだけどできなかった。
あーあ。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNGうちの会社のCコンパイラでは動かないんですけど
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNGコンパイラに何つかっているの?
それとOS。
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNGで
for(i=0;i<N;i++){
a[i]=i_random(n);
}
ってやってa[i]に乱数をポコポコ入れていきたいんですが、
a[i]!=a[j](j<i)という条件をいれたいんです。
で、do-whileとかつかうのかなぁと考えたんですが、
どうすりゃいいのかさっぱりわかりません。どうすりゃいいですか?
0463デフォルトの名無しさん
NGNGa[]に0〜Nまで入れて、
位置をランダムに変えればいいYO!
0464Kusakabe Youichi
NGNG> で、do-whileとかつかうのかなぁと考えたんですが、
そんなダサいやつでいいのならば、
たとえば、
for (i
0465デフォルトの名無しさん
NGNGええっと、N<nなわけで。
簡単に言うと、N=10でn=100で、
a[N]=[10,53,75,4,32,87,44,39,1,24]
みたいにしたいわけです。
でa[N]=[1,1,5,96,47,76・・]とか[5,4,47,87,35,32,47,・・]
とかはだめと。そんなかんじなんです。
0466Kusakabe Youichi
NGNG[email protected]> wrote:
> いや、そうじゃないんすよ。
なんでだめなんだろう(^^; > do-whileで、すでに使ったのは使わないように
する泥臭い方法:)
0467デフォルトの名無しさん
NGNGいや、それでもかまわないす。
でも、それでどうかけばいいのか。
for(i=0;i<N;i++){
do{
a[i]=i_random(n);
}while()←ここになんと書けばよいのでしょう?
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNGforでやれ。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG{
int i;
for (i = 0; i < num; ++i) {
if (val == ary[i]) return 1;
}
return 0;
}
for (i = 0; i < N; i++) {
do {
a[i] = i_random(n);
} while (included_p(a, i, a[i]));
}
ただし、乱数に偏りがあると遅くなる危険性はある。
もしnがNに比べてそう大きくないなら、
>>463のやり方でn個の乱数列を作ってからN個取り出すとか。
0473デフォルトの名無しさん
NGNG0474Kusakabe Youichi
NGNG> でも、それでどうかけばいいのか。
> do{
> a[i]
0475デフォルトの名無しさん
NGNG真C屋さんな皆さんならどうしますか? 低レベルの方が速いですかね
tail読めって言うのは無しの方向でお願い出来ますでしょうか(^^;
0476Kusakabe Youichi
NGNG> UNIXで大きなテキストのお尻500行とか抜きたい時
> 真C屋さんな皆さんならどうしますか? 低レベルの方が速いですかね
> tail読めって言うのは無しの方向でお願い出来ますでしょうか
tail読め。
0477デフォルトの名無しさん
NGNGこう言うのってレベル高い人には一番面白く無さそうですよね
低レベルでシコシコやってみるです。。。
関数も全部突っ込んで。。。main一個で
tail読めるかなあ。。。。
0478デフォルトの名無しさん
NGNG基本的には
1. fseek() 使ってファイルの最後に移動
2. getc() などで 1 バイト読み出す
3. fseek() 使って、ファイル位置を 1 バイト前に移動
4. goto 2
でぐるぐる回すだけじゃない。'\n' が出てきたら行の区切り目ということで。
0479デフォルトの名無しさん
NGNGあんたの使ってる糞マシンの文字コードに合わせればいい。ただそれだけ。
0480デフォルトの名無しさん
NGNGそういうのって、毎回重複をチェックするんではなくて、
あらかじめ乱数を生成しといて、あとでシャフルするのが
定石だと思うけど。
0481デフォルトの名無しさん
NGNGunixだったらそれでいいけど、移植性なくなるよね。
0482デフォルトの名無しさん
NGNGfseek() は ANSI C 標準関数だけど。(そういう話じゃなくて?)
0483デフォルトの名無しさん
NGNGテキストモードだと、3.の動作が保証されないみたい。
http://www.bohyoh.com/CandCPP/C/Library/fseek.html
バイナリモードだと、dosやmacで、\nが使えないし。
0484デフォルトの名無しさん
NGNGあとマルチバイト文字の扱いを考え出すと、話が厄介になるね。
0485デフォルトの名無しさん
NGNG記録していった方が楽じゃない? ファイルの最後に達したところで、
500行手前のファイル位置へseekしてそこから先を表示すればOK。
この場合、全ての行のファイル位置を記録する必要はなくて、戻りたい
行数分の位置を格納できるバッファだけを確保すればよい。
0486デフォルトの名無しさん
NGNG最後尾まで移動して、後ろから順番にみていってた
ような記憶がある。
0487デフォルトの名無しさん
NGNG数を数えていく。
0488デフォルトの名無しさん
NGNGがいしゅつなんてもんじゃないな。>>483読め。
0489475
NGNG最低でもtail位の実行時間で、だそうです 鬱
readとlseekでやってみようと思います、後はなるべくインラインにして、、
普段ジャバ夫で、ざっくりしたのしか書かないので、こう言うの超苦手なんです
心がおもひ
失礼します
0490487
NGNGDOSでも'\n'があれば改行とみなしてもいいんじゃないの。
'\r\n'ペアだけを改行とみなしたい場合も、ブロック境界に跨ったときの判断
が若干複雑になるだけで、バイナリでオープンすればとくに問題になるような
こともないし。
>>478との違いはブロック単位のI/Oで高速化を図るだけだが。
0491あはは
NGNG載ってないので・・・
assert <assert.h>
isprint <ctype.h>
malloc <stdlib.h>
free <stdlib.h>
多くてすいません。でもお願いします。
0492デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNGman
ttp://www.linux.or.jp/JM/
0495デフォルトの名無しさん
NGNG☆assert
assert(i == 0);
などと書くと、i が 0 以外のときはプログラムがエラー終了します。
☆isprint
何か文字があったとき、それが表示できるものかどうか調べます。
例えば 'A' とか 'B' とかは表示できる文字で、'\0' とかは
表示できない文字です。
☆malloc
メモリを確保します。
malloc(100000) ってやると、メモリが 100000 バイト確保されます。
☆free
確保したメモリが要らなくなったら、free で解放します。
これでOK?
0496デフォルトの名無しさん
NGNG0497
NGNGよく見たら”++”があって、new、deleteの解説にちっこく載ってたりして。
0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGわかる方いたら教えてください。
初心者ですみません汗
0504Kusakabe Youichi
NGNG> C言語でマイナス無限大からプラス無限大への積分はどうやったらいいのでしょ
うか?
だいたい同じですよ > Fortranのときのやりかたと
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG0508あはは
NGNGよくわかりました。ありがとうございます。
>>496
明解C言語です。索引のところに載っていないので・・・
>>498.499.500
それらの本は自分には難しくて・・・
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNGgotoの代わりに逝ってよし!とか?
0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNGリスト構造で頭に新しいデータを入れるものですが
1と2のどちらの方がいいのでしょうか?
処理速度やメモリ使用量などが変わるのでしょうか?
struct LIST{
struct LIST *next_ptr;
int value;
};
main(){
struct LIST *top;
int i;
top=insert1(top, i); >1
insert2(&top, i); >2
}
struct LIST *insert1(struct LIST *ptr, int i){
struct *newcell;
newcell=(struct LIST *)malloc(sizeof(struct LIST));
newcell->next_ptr=ptr;
newcell->value=i;
return(newcell);
}
struct LIST insert2(struct LIST **ptr, int i){
struct LIST *newcell;
newcell=(struct LIST *)malloc(sizeof(struct LIST));
newcell->next_ptr=(*ptr);
newcell->value=i;
(*ptr)=newcell;
}
0514デフォルトの名無しさん
NGNG1 は使い方を間違う可能性がありそう。戻り値を入れ忘れるとか。
2 なら間違いは起きまい。おれ的には 2 を推奨。
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGrewind(stdin);
とするのは良くないでしょうか?
0517デフォルトの名無しさん
NGNGまたワケのわからんことを・・・
標準入力がコンソールの場合は知りませんが、
標準入力がファイルにリダイレクトされてたりすると、
クリアどころか先頭に戻って入力し直しになる気がする〜。
0518デフォルトの名無しさん
NGNG三次以上の配列をつくるとすぐに
Segmentation fault
とでてしまいます。
また、一次の配列でも千以上のものを2つとると同じような状況になります。
メモリ不足なのでしょうか?
これを解決しないと僕の卒研が進まないので
だれかわかる方、教えていただけないでしょうか?
0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNGかなり FAQ ですが、配列を自動変数で取ってますね? 自動変数は、一般には
スタックという比較的狭いメモリ領域に配置されるため、巨大な配列を取るとスタッ
クを使い切ってしまいます。
1. グローバル変数として宣言する
2. 関数内 static 変数として宣言する
3. malloc を使ってヒープ領域に確保する
いずれかの方法をとってください。
0521デフォルトの名無しさん
NGNGmallocを使ってミロ。
0522デフォルトの名無しさん
NGNGそれにしても、一次元配列で「千以上のものを2つ」で、
落ちるってのは小さすぎるな。せいぜい数キロから数十キロだろ?
10年くらい前のパソコンでもそのくらい平気なはずだけど。
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGスタックサイズは環境による。
科学計算系のプログラムっぽいから
配列は一個だけじゃないんだろうよ。
0525516(初心者)
NGNGレスありがとうございます。
fflush(stdin)は良くないと聞いたので(C FAQ 12.26も見ました)、
何かいい方法は無いものかと調べたところ、MSDNライブラリに
> キーボード バッファをクリアするには、
> デフォルトでキーボードに結合している
> 標準入力ストリーム (stdin) に対して
> rewind 関数を使います。
と出ていたので、これなら大丈夫なのかと思ったのですが、
やっぱり問題があるみたいですね。。。
「標準入力がファイルにリダイレクトされている」というのが
どういう事なのかよく解りませんが、そこは勉強します。
0526デフォルトの名無しさん
NGNG#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
if((fp = fopen("C:/abc/test.txt", "r")) == NULL) { /* フルパス指定でファイルをオープン */
puts("File not open !!");
exit(1);
}else{
puts("File opened");
}
fclose(fp);
return (0);
}
とすると、ファイルが開けなくて、"File not open !!"となってしまうのですが、
どうしてなのでしょうか?
Windows95だとちゃんと動くんだけど・・。
どうか、教えてください!
0527デフォルトの名無しさん
NGNG"C:\\abc\\test.txt"じゃない?
0528デフォルトの名無しさん
NGNG環境によるけど、OS の制限ではなくシェルで limit かけてる可能性もある。その
場合にはシェルのコマンド (ulimit とか) で、OS の制限まではスタックを増やせる
ね。
>>523
前に BSD 系のカーネル読んだけど、確か
- ユーザプロセスのスタックサイズは可変
- スタック用に確保してある仮想メモリの上限部分に「読み書き実行禁止」属性をしていた
ページ (*1) を貼り付けておく。
となっていたと思う。(*1) にアクセスするとページフォルトが発生するので、それを OS が
検出して
1. 現在、スタックサイズは OS や (BSD 系だと setrlimit で指定した) プロセスの
上限値にひっかかってないか?
2. 上限に達していなければ、スタック用に「読み書き実行可能」属性のページを
割り当てる。
3. 上限に達していれば、プロセスにシグナル (SIGSEGV) を送る。
という感じで処理。今ソースが手元にないので、間違ってたらごめんな。
0529デフォルトの名無しさん
NGNGとりあえず、エラーは perror() で表示しよう。その方が詳しい原因が
分かるよ。
0530デフォルトの名無しさん
NGNGアクセス権の問題とか?
0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNGCって変数をスコープの最初にまとめて宣言するじゃないですか。
あれって変数を使用する個所と宣言が離れてしまって気持ち悪いんで
たとえばifとかforなどでは、
for(;;) {
int a; /* a, b ともfor内だけのローカル変数 */
int b;
--- a, b を使用 ---
}
ってな具合にしたいんですが、これって
int a;
int b;
...
for(;;) {
--- a, b を使用 ---
}
って書いた場合よりパフォーマンスの面で問題あるんでしょうか。
それともコンパイラの最適化とかいうもののおかげで問題ないのでしょうか。
(過去ログもあんまり読んでません。再度スマソ)
0534デフォルトの名無しさん
NGNGなんだそのへりくだった態度は?
つーのはさておき
まじでなんでだろね。オレも疑問。
0535デフォルトの名無しさん
NGNG構文解析器が作りやすい。
0536デフォルトの名無しさん
NGNG0537533
NGNG2chで初めてポストしたんでびびってました(ます)。
ってか厨房ってのはほんと。
で、もとの質問なんですが、ローカルに変数を宣言してもコンパイルは
通るんで、できればそうしたいんですが、普通そうしていないというのは
(少なくとも漏れが見たソースの範囲で)、
>>535
という理由だけでなくてパフォーマンス的に実際問題あるってことなんでしょうか。
そこがずばり疑問なわけです。
0538デフォルトの名無しさん
NGNGatoiの逆の関数ってないでしょうか。
数を文字列にしたいんです。
たとえば
int a = 123 を
char b[] = "123"
みたいに。
上の桁から数字を取り出して
b[i] = 数字 + '0'
b[おわり] = '\0'
とかやってみたんですが、
もっとスマートな方法でなんとかしたいんです。
0539デフォルトの名無しさん
NGNGない。
昔の言語は使う変数は最初に宣言するのが普通だった。
その名残なんじゃないの。
0540デフォルトの名無しさん
NGNGsprintf( b, "%d", a); とか。
バッファオーバーフローが怖いなら sn 系とか
バッファかました関数作るとかてきとーにやってくれい。
0541デフォルトの名無しさん
NGNGC FAQ 読みましょう。
http://www.faqs.org/faqs/C-faq/faq/
> 13.1: How can I convert numbers to strings (the opposite of atoi)?
> Is there an itoa() function?
URL 忘れたけど、どこかに日本語訳もあったはず。
0542540
NGNG0543デフォルトの名無しさん
NGNG>>533
俺も厨房だけど、スコープ絞りたいなら最適化されると困るんじゃないの?
ていうか初期値代入するのにまたカッコで括って、、、
余計ややこしそうな気がするけど
ifはともかくループの中でそんな事出来るんだろうか??
0544デフォルトの名無しさん
NGNGありがとございました。
0546デフォルトの名無しさん
NGNGループスコープで宣言するのは可。
ふつースタックフレーム(古いね)に展開するから
宣言の手間は構文解析→変数配置の時点で終了しているはず。
ちゃうの?
0547デフォルトの名無しさん
NGNGJavaやればそんな事は忘れちまうぜ!
for( int i=0;i<10;i++){
}
0548デフォルトの名無しさん
NGNGスレ違い――と言おうかと思ったけど、せっかくだから聞いておこう。Java だと、
そうやって i を定義した場合、実行時効率に差が出る? バイトコードのレベル
と、最近の JVM で JIT かけた場合と、両方について簡単にコメントもらえると
嬉しいかな。
0549546
NGNG0550533
NGNGループスコープの中で宣言しても外で宣言しても、スタックフレームに
展開した時点で結果は同じになるのでしょうか?
0551533
NGNG行き違いスマソ。おやすみなさい。またよろしく。
(当方アメリカ在住)
0552あやふやな人
NGNG違わないんじゃないかなぁ。
変数はスタックに積まれるだけだし、
どのタイミングで積んでも実行効率変わらないんじゃない?
JITだろーとなんだろーと最適化しないし(現時点では)
ただ、しょっちゅうループ変数に i 使うなら
変数の寿命を延ばした方が (つまり先頭で宣言しとく)
実行速度は当然速くなるんじゃないかなぁ?
宣言する=(スタックに)領域確保する=処理発生 だしさ
ってこれは何の言語でもおなじだーね
どうだろ?
0553デフォルトの名無しさん
NGNGお答えありがとうございます
私も今まで2しか使っていなかったのですが
ふとWebで1をみましてどうなのかとおもいました
今後も2を使うことにします
>515
順不同で集合として保持したいだけなので
スタックっぽく使ってました
>533 >543
↓やってみました
ループ内ではやはり毎回宣言してしまいますね
ifなら使えますね
main(){
int i=0;
for(;;){
int a=0;
printf("i=%d a=%d\n",i,a);
a=a+1;
printf("i=%d a=%d\n",i,a);
i=i+1;
if(i==3)break;
}
printf("\n");
if(1){
int b=0;
printf("i=%d b=%d\n",i,b);
b=b+1;
printf("i=%d b=%d\n",i,b);
}
}
結果
i=0 a=0
i=0 a=1
i=1 a=0
i=1 a=1
i=2 a=0
i=2 a=1
i=3 b=0
i=3 b=1
0554あやふやな人
NGNGfor(i=0;i<1000;i++)for(j=0;j<1000;j++);
ってのと
for(int i=0;i<1000;i++)for(int j=0;j<1000;j++);
ってのは
やっぱ外側のループが大きくなればなるほど
速度に差がでるんじゃないかなぁ
0555デフォルトの名無しさん
NGNGはげしい間違いでした。逝ってきます
0556デフォルトの名無しさん
NGNG漏れもわからんかったから期待してスレ見てたけど余計わからん。
だれかびしっと答えてくらさい。もう寝るけど。
0557デフォルトの名無しさん
NGNGint a,b;
for(;;){
と
for(;;){ int a,b;
なら明らかに後者の方が遅くなりそう
最適化しなければ
Cじゃこれは出来ないからまあ置いといて
>>533の例だとパフォーマンスに差は出ようもないよ
0558デフォルトの名無しさん
NGNG何度も出てくるなら初めに宣言した方がいい
と言う事でよろしいでしょうか?
>あれって変数を使用する個所と宣言が離れてしまって気持ち悪いんで
色んな所に宣言がある方が気持ち悪いのは漏れだけでしょうか?
0559Kusakabe Youichi
NGNG> 超厨房です。熟ソ
> Cって変数をスコープの最初にまとめて宣言するじゃないですか。
べつに途中でもOKですよ。
> あれって変数を使用する個所と宣言が離れてしまって気持ち悪いんで
それはそのコードが整理されてないからでしょう。
> たとえばifとかforなどでは、
> for(;;) {
> int a; /* a, b ともfor内だけのローカル変数 */
> int b;
> --- a, b を使用 ---
> }
すればいいじゃん。
> ってな具合にしたいんですが、これって
> int a;
> int b;
> ...
> for(;;) {
> --- a, b を使用 ---
> }
> って書いた場合よりパフォーマンスの面で問題あるんでしょうか。
ないでしょうね。
もしくはfor (int a = 0;;)みたいにするか。
0560Kusakabe Youichi
NGNG> atoiの逆の関数ってないでしょうか。
> 数を文字列にしたいんです。
sprintfでは重すぎ?
0561デフォルトの名無しさん
NGNG..
{
int a,b;
for(;;){}
}
と
for(;;){
int a,b;
}
だとどうでしょうか。
0562デフォルトの名無しさん
NGNG0564553
NGNG> 最適化しなければ
これは>>533で書いたのと同じなのではないですか?
こちらでは遅くなりそう、なのに
>>533の例だとパフォーマンスに差は出ようもないよ
では変わらないというのはどういうことでしょうか。
ところで、
> Cじゃこれは出来ないからまあ置いといて
コンパイルは通るんですが(gcc,VC共)、だめなんでしょうか?
コンパイラが最適化してくれるということも含めて、
1)
int a,b;
for(;;){ }
2)
for(;;){ int a,b; }
ではスタックフレームでの変数の配置のされかたという点で
違いはあるのでしょうか。
>>553 の結果ではもしかして変数は同じ個所に配置されていて
ループごとにa,bに0が代入されているのかもしれないと思ったり。
>>559
質問でスレ伸ばしてスマソ。
このあたりのことについての厨房向けの書籍などあったら教えてください。
修行して戻ってきます。
0565Kusakabe Youichi
NGNG> >>546
> ループスコープの中で宣言しても外で宣言しても、スタックフレームに
> 展開した時点で結果は同じになるのでしょうか?
コンパイラーにもよりますが、
その同じ変数名を中と外で使っているような場合でない限り、
同じコードがでてくるのがふつうでしょうね。
0566Kusakabe Youichi
NGNG> ただ、しょっちゅうループ変数に i 使うなら
> 変数の寿命を延ばした方が (つまり先頭で宣言しとく)
> 実行速度は当然速くなるんじゃないかなぁ?
> 宣言する=(スタックに)領域確保する=処理発生 だしさ
> ってこれは何の言語でもおなじだーね
あのー、何か勘違いしていませんか?
0567Kusakabe Youichi
NGNG> int a,b;
> for (;;) {
> と
> for (;;) { int a,b;
> なら明らかに後者の方が遅くなりそう
> 最適化しなければ
いったい、どこが「あきらか」なんだろう?
> Cじゃこれは出来ないからまあ置いといて
なんで「できない」とか勝手に思い込んでいるんだろう?
0568デフォルトの名無しさん
NGNGfor文のなかで宣言するより外で宣言した方がそりゃはやいだろ
0569デフォルトの名無しさん
NGNG根拠示せ
0570Kusakabe Youichi
NGNG> a, b が1度しか出てこないなら変わらない
> 何度も出てくるなら初めに宣言した方がいい
> と言う事でよろしいでしょうか?
「何度も出てくる場合に各スコープで宣言していると遅くなる」は
デマですよ。(少なくともauto変数をスタックに確保する処理系では)
信用しないように。
しくみがどうのの解説をここでするのもいいのですが、
それ以前に、カーニハン氏の「効率を云々するならまず測定せよ」という
言葉をプリンターで印刷して画面の上に貼ってください。
0571デフォルトの名無しさん
NGNG測定結果示せ
0572553
NGNGありがとうございます。納得しました。
漏れネット歴も浅いんで良く知らんのですが、なんかすごい人らしいですね。
0573デフォルトの名無しさん
NGNG>553は
int a=0
にしてるから毎回0が入ってるだけかと
ループ内でも宣言は1度だけで値は保持してます
for{
int a;
a=a+1;
}
だとaは1ずつ増えていきます
0574デフォルトの名無しさん
NGNGてことは変わらないんですね
さすがに速くなるはないですよね?w
0575Kusakabe Youichi
NGNG> >>566
> for文のなかで宣言するより外で宣言した方がそりゃはやいだろ
なんでそう思い込んでいるのですか?
0576デフォルトの名無しさん
NGNGKusakabe は放置の方向でお願いします。
まともに技術的な話をしている分には相手にして構いませんが、思い込みでいい加減
な事を言い出したら、取り合わないで下さい。こちらから質問しても、はぐらかされた回
答がくるだけで、スレが荒れる原因になります。
0577デフォルトの名無しさん
NGNGそれって問題コードだと思うよ・・・
初期値不定なところで、たまたまスタック上の同じ場所に
aが確保されてるだけだから。
0578Kusakabe Youichi
NGNG> >>Kusakabe
> 根拠示せ
...
# 入門書から勉強しなおしたほうがいいぞ :)
0579Kusakabe Youichi
NGNG> >570
> てことは変わらないんですね
でしょうねえ。変わるような実装はまずないでしょう。
> さすがに速くなるはないですよね?
遅くなる実装の存在する確率と同じぐらいでしょう > 速くなる
0580Kusakabe Youichi
NGNG> >>568-569
> Kusakabe は放置の方向でお願いします。
>
> まともに技術的な話をしている分には相手にして構いませんが、思い込みでいい
加減
> な事を言い出したら、
っていうか「思い込みでいい加減なことを言って」が誰かを考えてみるといいです
:)
0581デフォルトの名無しさん
NGNGああっと!
今分かった。オレの勘違いだ。すまん。速度に差は出ないや。
だけど、変数が初期化されずに使われるワーニングを恐れて
int a=0,b=0;
for(;;)
ってのと
for(;;){int a=0,b=0;
ってのを比べたら確かに後者の方が遅い・・・のかな?
まー なんでコード書くのですか? って言われるだけか
0582デフォルトの名無しさん
NGNGせっかく正解知ってるんだったらとっとと教えてくれよ
プログラマとしちゃ優秀かもしれんがヒトとしちゃなってないぜ?
0583573
NGNGaは初めにifで1回だけ0を入れてうまくいったんですが
たまたま同じ場所を確保したら値が残っててうまくいっただけなのですね
先頭以外で宣言したことないのでよくわかりません・・・
0584Kusakabe Youichi
NGNG>> 581 デフォルトの名無しさん wrote:
> だけど、変数が初期化されずに使われるワーニングを恐れて
ウォーニングのことか? :)
> int a=0,b=0;
> for(;;)
> ってのと
> for(;;){int a=0,b=0;
> ってのを比べたら確かに後者の方が遅い・・・のかな?
そもそもその2つじゃあ違う処理になるじゃん。
何をマヌケなことを言ってるのやら。
(中に++a;でも書いてみればバカでもわかるでしょ?)
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNGバカでもわかる、ということにしたいのですね?
0587デフォルトの名無しさん
NGNGレベルでは一緒ですよ。一度コンパイルしてアセンブリリストを眺めてみては?
#両者に違いがでる特殊な処理系があるのかもしれないけどね
0588Kusakabe Youichi
NGNG> つーかさー毒舌もいいんだけどさー、
どこが毒舌なんだろうか? こんなんが毒舌だったら、
世間のマニュアルや書籍は超毒舌だぞ。
> せっかく正解知ってるんだったらとっとと教えてくれよ
っていうか、少しは頭使え。
正解は「速度に有意な差がでることはまずない」と書いてるだろうに
正解を「みえないふり」しているの?
> プログラマとしちゃ優秀かもしれんがヒトとしちゃなってない
「ということにしたい」だけですね?
0589デフォルトの名無しさん
NGNG世間のマニュアルが超毒舌、ということにしたいのですね?
0590デフォルトの名無しさん
NGNG見えないふりしてる(ということにしたい)ですね。
05917ポイントゲット!
NGNGあんまりポイント稼げなかったな
最後の文はわりと高得点だったけど
0592Kusakabe Youichi
NGNG> >(中に++a;でも書いてみればバカでもわかるでしょ?)
>
> バカでもわかる、ということにしたいのですね?
ということは、あなたは「それでもわからなかった」例外的な馬鹿なのですか?
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNGならともかく、そうでない部分まで反応しだすと話が拡散してスレが荒れる。
どうでもいい話は放置してくれ。
0595デフォルトの名無しさん
NGNG「例外的な馬鹿」ということにしたいのですね?
0596Kusakabe Youichi
NGNG>> 589 デフォルトの名無しさん wrote:
> >世間のマニュアルや書籍は超毒舌だぞ。
>
> 世間のマニュアルが超毒舌、ということにしたいのですね?
「〜ならば」の条件節を無視したいのかな:)
0597Kusakabe Youichi
NGNG> > 正解を「みえないふり」しているの?
>
> 見えないふりしてる(ということにしたい)ですね。
いいえ。わたしが「そうしたい」のではなく、
「そうなのか?」と質問しているだけですが。
0598Kusakabe Youichi
NGNG>> 593 デフォルトの名無しさん wrote:
> いい大人がこんな時間に何やってるんだろうね。。
2chでは?
0599Kusakabe Youichi
NGNG> だから Kusakabe の煽りには反応するなって。
「反応」しているのは私のほうですね。(話が逆)
0600Kusakabe Youichi
NGNG> >ということは、あなたは「それでもわからなかった」例外的な馬鹿なのですか?
>
> 「例外的な馬鹿」ということにしたいのですね?
「なのですか?」と質問しているだけですよ。
(でも答えていない)
0601デフォルトの名無しさん
NGNG間違ってないですね
C の auto 変数では宣言をループの外に移しても高速に
なることは(処理系の実装しだいだけど)まずない。
int a = 0; は初期化込みだから、宣言と全く同じではない。
ループの外に移すことで高速になるのは C++ で何らかの
処理を行うコンストラクタ付きのクラス変数を宣言したとき
でしょうか。でも、ここは C スレなので脱線しますが。
0602Kusakabe Youichi
NGNG> Kusakabe氏は少々ぶっきらぼうだけど
え、ちっともぶっきらぼうじゃないですよ。
すごく丁寧で親切だといつも言われています。
0603Kusakabe Youichi
NGNG0604デフォルトの名無しさん
NGNG本題と逸れるけど「宣言」と「定義」を混同してる。これは規格で明確に使い分け
られてる単語なんで、細かい話をするときには注意した方が良いです。
0606デフォルトの名無しさん
NGNGいつも言われてます、か・・・
0608Kusakabe Youichi
NGNG> >>602
> いつも言われてます、か・・・
はい。
0609Kusakabe Youichi
NGNG> C の本読みなおしてくる
いったいどんな本を読んでいるのでしょうか?
興味があります。
0610デフォルトの名無しさん
NGNG>いったいどんな本を読んでいるのでしょうか?
そのツッコミワラタよ。
0611Kusakabe Youichi
NGNG> >>609
> >いったいどんな本を読んでいるのでしょうか?
>
> そのツッコミワラタよ
ん? まじめに聞いているのですが。興味があるので。
0612デフォルトの名無しさん
NGNG0613Kusakabe Youichi
NGNG> Cでは最初に変数の宣言が必要では?
べつに「最初」じゃなくても、使う前ならOKですね。
0614土曜の朝はパラダイム
NGNG{
int a=0;
{
int a=1;
{
int a=2;
{
int a=3;
printf("%d\n",a);
}
printf("%d\n",a);
}
printf("%d\n",a);
}
printf("%d\n",a);
}
0615C勉強中 ◆RubyOmS2
NGNG3
2
1
0
やっとわかったよ。ありがとう〜〜〜
>>613
K&Rの付録AのA9.3複文って所を見ると
compound-statement:
{ declaration-list statement-list }
#下付けoptは書けないので除いたYO!
ってあるんですけど、、、
どっちが正解なんですか?
0616Kusakabe Youichi
NGNG> K&Rの付録AのA9.3複文って所を見ると
> compound-statement:
> { declaration-list statement-list }
> ってあるんですけど、、、
> どっちが正解なんですか?
どっちが、って、どちらも同じでは?
0617デフォルトの名無しさん
NGNGこれってCだとダメなのな。ちょっと残念。
0618Kusakabe Youichi
NGNG> for (int i = 0; i < 100; i++) {
>
> これってCだとダメなのな。ちょっと残念。
Cでも使えますよ。
(古いコンパイラーでは通り魔園が)
0619デフォルトの名無しさん
NGNGまじ?
手元で試したコンパイラのバージョンをみたらこんな感じ
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/specs
gcc version 2.95.3-5 (cygwin special)
どのバージョンのgccならコンパイルできる?
つーかgccじゃだめなの?
0620617=619
NGNGgcc 3.0以降ならいいのかな?
>>617がOKなコンパイラをぜひ教えてください。
0621Kusakabe Youichi
NGNGIn article <[email protected]>, 619 デフォルトの名無しさ
ん <[email protected]> wrote:
> 手元で試したコンパイラのバージョンをみたらこんな感じ
> $ gcc -v
> Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/specs
> gcc version 2.95.3-5 (cygwin special)
ああ、それだと通らないですね。
> どのバージョンのgccならコンパイルできる?
少なくとも-C99オプション通るやつじゃないと。
0622デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/gcc-3.0/c99status.html
この程度は通る>gcc3.0
0623620
NGNGおお!サンクス!
0624デフォルトの名無しさん
NGNG0625C勉強中 ◆RubyOmS2
NGNGえ?
>べつに「最初」じゃなくても、使う前ならOKですね。
って言ってるようですけど、
K&Rの付録にはANSI Cでは宣言はブロックの「最初」になってませんか?
612が言っている「最初」というのはブロックの「最初」って言うことだと思ったんですが、、、
少なくとも>>613の言い方では、
int x;
x = 0;
int y;
y = 0;
としていいよと聞こえるんですが、、、
#僕はCについては初心者なので、、、
0626Kusakabe Youichi
NGNG> クサカベって、叩かれると急に真面目になるからなあ。
はつみみです。「そういうことにしてしまいたい」のかな? :)
# そんなにこわがらなくていいのに。
0627Kusakabe Youichi
NGNG> > べつに「最初」じゃなくても、使う前ならOKですね。
> って言ってるようですけど、
> K&Rの付録にはANSI Cでは宣言はブロックの「最初」になってませんか?
ああ、K&Rのは古いですね。
古いコンパイラーに合わせてかくときにはK&Rにしたがっておいたほうがいいです
。
> 少なくとも>>613の言い方では、
>
> int x;
> x = 0;
> int y;
> y = 0;
>
> としていいよと聞こえるんですが、、、
現在の標準規格ではOKですね。
> # 僕はCについては初心者なので、、、
入門書としてK&Rを選んだのは正解でしょうね。
(でも現在の標準規格については書いてないので...でもまあ些細な差ですが)
0628デフォルトの名無しさん
NGNGK&RはISO/IEC 9899:1990についての解説。これは古い規格で、ISO/IEC 9899:1999
によって置き換えられています。
0629デフォルトの名無しさん
NGNG一般的なのかな?
0630デフォルトの名無しさん
NGNG相手にしないほうがいいと思うよ>625
0631Kusakabe Youichi
NGNG> >>625
> K&RはISO/IEC 9899:1990についての解説。これは古い規格で、
こっちは俗にC89と呼ばれるやつ。
その昔「ANSI対応」とか言われていたのはこれですね。
> ISO/IEC 9899:1999によって置き換えられています。
こっちが俗にC99と呼ばれるやつです。
ですのでISOやANSIにも複数の規格が(時間軸上は)存在したわけで、
いまどきの本で「ANSI対応」とか書いてあるやつはちょっと内容が古いかも。
0632デフォルトの名無しさん
NGNG0633Kusakabe Youichi
NGNG> ところで-C99(もしくは同等の)オプションが通るコンパイラって一般的なのか
な?
3年前までは一般的ではなかったですね(あたりまえ)。
これからは一般的ですね。
0634デフォルトの名無しさん
NGNG0635Kusakabe Youichi
NGNG> 少ない言葉で曖昧に説明して、独自の解釈や妙な前提条件を強要するアフォ
ということにしたいみたいですが、
実際には一番適切に(多すぎず少なすぎず)、もっとも正しい教え方をしていますね
。
0636C勉強中 ◆RubyOmS2
NGNGそうなんですか、、、
Cってたくさん規格があるみたいで面倒ですね、、、
で、現在の標準規格というのは、何て言うのですか?
それは、gcc2.95.3(cygwin)でも使えるのですか?
#>>619と同じコンパイラを僕も使ってます、、、
0637デフォルトの名無しさん
NGNG二度は書かないよ(荒れるから)
“作ってわかるCプログラミング”でCを勉強 part4
http://pc.2ch.net/test/read.cgi/prog/1007148964/
ここで暴れてる人。
0638Kusakabe Youichi
NGNG> >>627
> そうなんですか、、、
> Cってたくさん規格があるみたいで面倒ですね、、、
たくさんはないですよ(ほかの言語よりは)
C99、C89とそれ以前のtraditionaなものの3種類だと思えばよいでしょう。
> で、現在の標準規格というのは、何て言うのですか?
俗に「C99」といわれています。
0639デフォルトの名無しさん
NGNG使えないYO!
とりあえず、「標準」が本当の標準になるまでは
てきとうに教科書にしたがってコーディングしとこうZE!
0641Kusakabe Youichi
NGNG> >>632
> 二度は書かないよ(荒れるから)
荒らすのかー
0643Kusakabe Youichi
NGNG> とりあえず、「標準」が本当の標準になるまでは
もうなっていますよ。
古い標準の範囲内で書くかどうかは、
そのソースを古いコンパイラーで処理する可能性がある場合に
気をつかうべきでしょうね。
0644Kusakabe Youichi
NGNG> ありゃ、、ログが流れるのが早い、、、
> >>628さん、ありがと〜〜〜
> でも、-C99オプションって、、gcc2.95.3では通らないの?
新しいのにすればいいのに。
0645デフォルトの名無しさん
NGNG> 3年前までは一般的ではなかったですね(あたりまえ)。
ISO/IEC 9899:1999が発行されたのはちょうど2年前の今日です。
3年前どころか、2年前ですら準拠した処理系はなかったはずです。
>>640
gcc 2.95.3だと、対応しようとしたらしい-std=iso9899:199xという
オプションがありますが、そのコードは通らないみたいです。
gcc 3.0以降にするしかないみたい。
0646デフォルトの名無しさん
NGNGとりあえず手持ち全部のコンパイラでコンパイルできないんだもん
そのソースを古いコンパイラーで処理する可能性が100%だし
しょうがねいね
0647デフォルトの名無しさん
NGNGなってないよ。JIS X 3010:1993はまだ改訂されてない。
0648デフォルトの名無しさん
NGNGと友人に聞かれた。
俺は自分に合ったほうにすればと一応答えておいたが
本当はどちらのほうがいいんだろう…
やる用途にもよるだろうが友人は色々やってみたいと言っていたので
やはりどちらかと言えばVisualCの方だろうか…
0649デフォルトの名無しさん
NGNGとすると、標準 の基準ってなんだ?
0650Kusakabe Youichi
NGNGん <[email protected]> wrote:
> >>633
> > 3年前までは一般的ではなかったですね(あたりまえ)。
> ISO/IEC 9899:1999が発行されたのはちょうど2年前の今日です。
> 3年前どころか、2年前ですら準拠した処理系はなかったはずです。
だから「あたりまえ」と書いてあるわけです。
> gcc 3.0以降にするしかないみたい。
gccの場合はそうですね。
0651Kusakabe Youichi
NGNG> >>643
> なってないよ。JIS X 3010:1993はまだ改訂されてない。
JISは問題外ですね。
0652デフォルトの名無しさん
NGNGhttp://www.jsa.or.jp/ 見れ。
0653デフォルトの名無しさん
NGNG0654デフォルトの名無しさん
NGNG0655Kusakabe Youichi
NGNG> VisualCとViaualBasicをやるならどっちがいい?
どちらもやらない。
0656デフォルトの名無しさん
NGNGそりゃあんまりだ。
0657Kusakabe Youichi
NGNG> むむむ
> とすると、標準 の基準ってなんだ?
標準に「基準」なんてないでしょう。
そもそもCに関して「ANSI対応!」とか「ISO標準準拠!」とかかかれた
本はあっても「JIS準拠のC!」とか書かれたやつは見たことないですね:)
0658デフォルトの名無しさん
NGNG0659デフォルトの名無しさん
NGNG新しい標準でコンパイルできないは
けっこう多いので、古い基準で作った方が
幸せになれる、と
0660デフォルトの名無しさん
NGNG「あれ?」と思っても、それは罠なので無視しましょう。
0661デフォルトの名無しさん
NGNG猛烈にKusakabeさんが活躍したんですか?
0662デフォルトの名無しさん
NGNG条約が批准され、国会で承認されないかぎり国内において効力を持たないのと同様、
国際規格は国家規格として制定されてはじめて国内で効力を得るのになあ。
0663Kusakabe Youichi
NGNG> デファクトスタンダード=標準 って考えちゃだめ?
それがC99でしょ。いまは。
0664デフォルトの名無しさん
NGNG0665仕様書無しさん
NGNG失格である。よってお前は去れ!
0666デフォルトの名無しさん
NGNG>「JIS準拠のC!」とか書かれたやつは見たことない
ほとんどのC処理系は海外製だから。
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNGそういうお前はマ板の住人じゃないか。
0669:デフォルトの名無しさん
NGNG今,マ板でやりあってるから、名前がそうなった。
voidにレスしたければ,ここへこい。
http://pc.2ch.net/test/read.cgi/prog/1007148964/
現在,討論中。
0670Kusakabe Youichi
NGNGん <[email protected]> wrote:
> >>655
> そりゃあんまりだ。
いや、そんな悩みかたをする人はぜったいどっちもやらないほうが正解です。
0671Kusakabe Youichi
NGNG> すくなくとも今流通してるコンパイラで
> 新しい標準でコンパイルできないは
> けっこう多いので、古い基準で作った方が
> 幸せになれる、
それはそこローカルな特殊な事情であって、「標準かどうか」の話題とは
無関係ですね。
単に「おれは古いのを使ってるぞ」っていうだけのことじゃん。
0672Kusakabe Youichi
NGNG> 変数を宣言するたびにスタックを確保するとか変なことを言ったので
そういう変なことを言ってたひとがそういえばいましたね。
> 猛烈にKusakabeさんが活躍したんですか?
私が書いたのはそれより前からです。
0673Kusakabe Youichi
NGNG> じゃあひとりごと。ひとりごとなので意見無用。
> 条約が批准され、国会で承認されないかぎり国内において効力を持たないのと同
様、
> 国際規格は国家規格として制定されてはじめて国内で効力を得るのになあ。
で、「国内」がどこかが問題ですね。
# こういうひとはきっと世の中にタイムゾーンも1つしかないと思っているに
# ちがいない:)
0674デフォルトの名無しさん
NGNG***決してレスしてはいけません***
0675Kusakabe Youichi
NGNG> >>657
> >「JIS準拠のC!」とか書かれたやつは見たことない
>
> ほとんどのC処理系は海外製だから。
っていうか、日本の本とかの話ですが。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNGcygwinもそうだね。
UNIXっぽい世界はほとんど特殊なローカル事情だあね。
0678デフォルトの名無しさん
NGNGディメンジョンを
例えばa[10][10][10][10][10][10]やa[10000][10][10]
としたいのですが、コンパイルは通るんのですが、
走らせるとセグメンテーションエラーとなります。
ディメンジョンを小さくすると
走るのでこれが原因だと思うのですが、
ディメンジョンを多くするにはどうしたら良いですか?
gccのバージョンは2.95.2です。
0679デフォルトの名無しさん
NGNGcharだとしても、10の6乗だと、えーと、すげー大きいので
スタックに入らないとかなんとかじゃねーの?
よくわかんねーけど
そういうときは何かおまじないがあったと思うけど
面倒だからスタティックなところに確保しちゃえば?
それかmallocで確保しちゃうとか
0680Kusakabe Youichi
NGNGIn article <[email protected]>, 678 デフォルトの名無しさ
ん <[email protected]> wrote:
> すみません、最近Cをはじめた者ですが
> ディメンジョンを
> 例えばa[10][10][10][10][10][10]やa[10000][10][10]
> としたいのですが、
すればいいじゃん、4個でも5個でも通ります。50個は無理でしょうけど。
> 走らせるとセグメンテーションエラーとなります。
> ディメンジョンを小さくすると
> 走るのでこれが原因だと思うのですが、
じゃあそうなのでしょう。
> ディメンジョンを多くするにはどうしたら良いですか?
> gccのバージョンは2.95.2です。
そもそもそんなに確保しなきゃいいだけでは?
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGほっといてもプログラムが終了したら閉じてくれると思う
でもなるべくなら開けたら閉じよう。
このへん、マッピーのドアと一緒だね
0683デフォルトの名無しさん
NGNGっつーか、それfjねたじゃん。
malloc()、free() みたいな。
0684Kusakabe Youichi
NGNG> fopenしたらfcloseは絶対にしないといけないのですか?
fcloseするか終了するまでは開いたままになりますが、
それでかまわなければ。
0685デフォルトの名無しさん
NGNGその配列は、サイズが最低でも 1000000 バイトもあって、
スタックが足りません。
グローバル変数にするか、static 変数にするか、
malloc で確保するか、スタックサイズを大きくするか、
しましょう。
0686デフォルトの名無しさん
NGNGさては、開けたドアを閉めないタイプの人間だな?
0687デフォルトの名無しさん
NGNG自動ドアだから気にしたことないもんで…
0688デフォルトの名無しさん
NGNGOS側の上限個数にひっかかるだろうねえ
0689デフォルトの名無しさん
NGNG679 さんの言う「おまじない」は,多分 679 さん自身がズバリ言ってる
「スタティックに確保」じゃないかなーと思いました
static Type a[10000][10][10];
ただし調子に乗って要素数を増やしていくと
static Type a[10000][10000][10000];
コンパイルエラー「配列が大きすぎます」が出てきました(VC++5.0)
10000x10000x10000 が整数型か何かで表せないからかなあ? よく知らないけど・・・
個人的には malloc でメモリを割り当ててくれるとなんか安心します
int i, j;
Type ***a;
a = (Type ***)malloc(10000 * sizeof(Type **));
for(i=0; i<10000; ++i){
a[i] = (Type **)malloc(10 * sizeof(Type *));
for(j=0; j<10; ++j){
a[i][j] = (Type *)malloc(10 * sizeof(Type));
}
}
コレはコレで問題がないワケじゃないんだけど,
それはまた別のお話・・・
0690Kusakabe Youichi
NGNG> >>686
> 自動ドアだから気にしたことないもんで…
っていうか、ふつうの自動ドアは「開け閉め」が自動なので、
stdinみたいなもので、「開ける」ことはしないでしょうね手動で。
だからよくある「半自動」ドア(閉まるのだけ自動)みたいなのを
例に出したほうがいいのでは?
0691デフォルトの名無しさん
NGNGあーあー
開放わすれてるー
0692689
NGNGぎゃふん (;´Д`) そこまで示さないとダメですか
for(i=0; i<1000; ++i){
for(j=0; j<10; ++j){
free(a[i][j]);
}
free(a[i]);
}
free(a);
0693デフォルトの名無しさん
NGNGOSの制限以前にfopenで、開けるファイル数は制限されてる。
てか、今回の話題とは関係薄い。
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNGいけないことなのでしょうか?
0696Kusakabe Youichi
NGNG> >>691
> ぎゃふん (;´Д`) そこまで示さないとダメですか
>
> for(i=0; i<1000; ++i){
> for(j=0; j<10; ++j){
> free(a[i][j]);
> }
> free(a[i]);
> }
> free(a);
で、それがプログラムの終了時だったりすると「アホだ」といわれたりする
わけです:)
0697デフォルトの名無しさん
NGNGそれってOSの制限なのでは?
0698Kusakabe Youichi
NGNG694 デフォルトの名無しさん wrote:
> しなかったときの弊害、という点では関係があると思うけど。
ないですね。
fcloseすればかならず上限を超えないという保証があるわけじゃあないんだから。
0699デフォルトの名無しさん
NGNG***レス付け厳禁です***
荒れないために、ご協力ください。
0700Kusakabe Youichi
NGNG> CのプログラムをC++のコンパイラでコンパイルするのは
> いけないことなのでしょうか?
お好きなように。(コンパイルできるコードなら(上位コンパチじゃあないからね))
0701デフォルトの名無しさん
NGNG>a[10000][10000][10000];
10000×10000×10000 = 1000000000000 = 1テラ (1000ギガ)
それわ無理です。。。
0702Kusakabe Youichi
NGNG> >>693
> それってOSの制限なのでは?
OSの制限以前にプロセスごとの制限が小さいのでは?
0703デフォルトの名無しさん
NGNG小さい って言い切る根拠は?
0704デフォルトの名無しさん
NGNGfopenの制限はOSの制限よりかなりきつめ。(の処理系が多い)
0705デフォルトの名無しさん
NGNG***レス付け厳禁です***
荒れないために、ご協力ください。
0706デフォルトの名無しさん
NGNG0707692
NGNGそれもいいけど,アソコにも突っ込んで欲しかった・・・
誤:for(i=0; i<1000; ++i){
正:for(i=0; i<10000; ++i){
ところで free on exit ネタにも触れたいんだけど
Kusakabe さんとしては
「終了時には free すんな!(`Д´)!」派?
「終了時には free してもしなくてもいいよ(´_`)」派?
「終了時でも free しろ!(`Д´)!」派?
0709デフォルトの名無しさん
NGNG0710Kusakabe Youichi
NGNG> >>702
> 小さい って言い切る根拠は?
「のでは?」を「言い切る」だとぼけたことを言う頭の程度は? :)
0711デフォルトの名無しさん
NGNG0712Kusakabe Youichi
NGNG> ところで free on exit ネタにも触れたいんだけど
これはよそでやったほうが楽しめるのでは?
> Kusakabe さんとしては
> 「終了時には free すんな!(`Д´)!」派?
> 「終了時には free してもしなくてもいいよ(´_`)」派?
> 「終了時でも free しろ!(`Д´)!」派?
わたしのfj.comp.lang.cに以前書いた記事をみればわかりますね:)
0713デフォルトの名無しさん
NGNG0714デフォルトの名無しさん
NGNG誰もアンタにレス付けたりしないよ。放置しといてやるから安心しな。
0715707
NGNG# だって fj の記事って皮肉交じりで読みにくいんだもん
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG0718Kusakabe Youichi
NGNG> んー・・・んじゃ,fj 再読します・・・
あ、もしくは、fjだけじゃなくて本もいっしょに読むと、
「実はどう主張しているのか」わかるかも:)
> # だって fj の記事って皮肉交じりで読みにくいんだもん
気のせいでは? 気にしすぎというか。
0719Kusakabe Youichi
NGNG> 傲慢だなKusakabeは
ということにしたいのですか?
# でもどこも傲慢ではないですね。
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG0722715
NGNGこ,これだけ,これだけ教えてくれればすぐに逝きますんで
fj の記事のバックナンバーどこぉ?
>>718
> > # だって fj の記事って皮肉交じりで読みにくいんだもん
> 気のせいでは? 気にしすぎというか。
そですかー
ニューズグループのこと,まだあんまし慣れてないや・・・
0723デフォルトの名無しさん
NGNG>fj の記事のバックナンバーどこぉ?
検索してください。
http://groups.google.co.jp/groups?hl=ja&group=fj.comp.lang.c
http://queen.heart.ne.jp/
0725Kusakabe Youichi
NGNG> すいません
> こ,これだけ,これだけ教えてくれればすぐに逝きますんで
>
> fj の記事のバックナンバーどこぉ?
当該グループでそのように、大きめのフォントで叫べば、
親切な人がその話題をまとめたファイルを送ってくれる可能性は大きいです。
(そんなときのための全国40万人のfj読者がある)
もちろんその前にあちこちのアーカイヴを探して見つからないという
前提が必要ですが。
> > > # だって fj の記事って皮肉交じりで読みにくいんだもん
> > 気のせいでは? 気にしすぎというか。
>
> そですかー
> ニューズグループのこと,まだあんまし慣れてないや・・・
ニュースグループじゃないでしょ。
たとえばTVやTVの番組はいくつものチャネルにわかれていますが、
「TVに出演する」のかわりに「ちゃねるに出演する」とか、
「TVに慣れていなくて」のかわりに「ちゃねるになれていなくて」って言いますか
?
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNGへみねこかぁ。別に傲慢ではないな。
あたりまえのことをあたりまえに言ったら傲慢あつかいされるという妙な現世ならば、
存在するけど。
あともう1つ。
へみねこを、「状態をもつ」という意味での人間あつかいをする必要は、ないだろう。
現世が上記のように妙なことになってる理由は、(多くの)人が自分の「状態」を
持ちたがる(自分の考えかたとか好みとかを曲げたくない)という意味で
「状態」を持っていて、そのことを正当化したいから、だ。
だからこそみんなが言うんだ。「俺を思いやってくれ」と。
それに半旗(ナイス誤字)を飜してる(本人狙ってるのかどうか知らぬが)のが奴なんだから、
そのへみねこの「状態」にこっちが気を配る必要は、ない。
こっちが奴に何を言ったからといって、奴の「状態」、たとえば
怒ったとか笑ったとか悲しんだとか、がどうなっちゃうか?を気にする必要は、ない。
そう捉えれば、あれくらい「つきあいに手のかからない」人間(たぶん人間なんだよねえ)は
めずらしいくらいであり、かえって重宝する、と思われ。
0730引用ウザ
NGNG0731Kusakabe Youichi
NGNG> へみねこかぁ。別に傲慢ではないな。
ですね。
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG日下部さんにかまわないで、放置してください。
0734Kusakabe Youichi
NGNG> ほうちほうち言ってる方へ。
新聞の勧誘なのかも。
0735デフォルトの名無しさん
NGNG放置って言っている奴はうざいから放置しよう。
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNG0738Kusakabe Youichi
NGNG0739デフォルトの名無しさん
NGNG「実はガッコで懇切丁寧に教えられたクチ」なんだよ。K&Rで真に理解したんじゃないのよ。
K&Rは難解だとの評価は大多数から既に出ている。
人の理解度なんかはそれぞれだから、K&Rが難しく感じても気にすることではないし
わかったからって偉いものでもない。
そういう俺はK&Rをバイブルとして崇め奉ってるけど(w
「自分がわかりやすいと思うものでやれ しかし向上心は何であれ忘れるな」
つうこったわ(ワラ
0740デフォルトの名無しさん
NGNG煽りたいやつは勝手に煽れ。俺はもうこのスレ放置する。
0741デフォルトの名無しさん
NGNGつまらん
0742デフォルトの名無しさん
NGNGいいえ。規格上、main 終了後に正しく後始末されることが保証されています。
>>740
俺も、このスレは今後放置する。今まで何度か回答側に回ってたけど、ね。
俺程度の人間が一人抜けたところで大した影響はないけど、スレを荒らすと
回答側に回ってる人間に見放される可能性があるから、注意しろよ。>質問
してる人
0743デフォルトの名無しさん
NGNGあと、プログラムを作る際の手法として流れ図と状態遷移図以外に何かあるんでしょうか?
0744デフォルトの名無しさん
NGNG同じフィールドに複数の名前を割り当てるのが共用体。
別の名前は別のフィールドに割り当てるのが構造体。
0745デフォルトの名無しさん
NGNG厨房ですいません。フィールドって何でしょうか?
それと構造体をもう少し詳しく教えてもらえないでしょうか?
みなさんに聞きたいんですが、プログラムを作る際の手法として流れ図と状態遷移図以外に何かあるんでしょうか?
0746デフォルトの名無しさん
NGNG同じ記憶領域に複数の名前をつけるの。
同じデータを共用するから共用体と。
0747デフォルトの名無しさん
NGNGなるほど〜 ありがとうございました。
C言語でポインタの所では結構詰まる人が多いようですが何ででしょうね?
質問ばかりで申し訳ないんですが、コマンドラインパラメータとオプションフラグって何でしょうか?
0748デフォルトの名無しさん
NGNGコマンドラインパラメータはmain関数の第二引数(第一引数はそれの個数)かな?
0749デフォルトの名無しさん
NGNG0750Kusakabe Youichi
NGNGIn article <[email protected]>, 738 Kusakabe Youichi
<[email protected]> wrote:
> お願いですから、思いやってください。
意味不明ですね。
0751デフォルトの名無しさん
NGNGHIPO,PADとか(w
っていうか宿題くさいんだが気のせいか?
0752Kusakabe Youichi
NGNG> でもよー、K&R読めとかあれはわかりやすいとか知ったかコイてるヤツは、
> 「実はガッコで懇切丁寧に教えられたクチ」なんだよ。
そう思い込みたいんでしょうね:)
> K&Rで真に理解したんじゃないのよ。
> K&Rは難解だとの評価は大多数から既に出ている。
あれを難解だと思うようでは「なんちゃって」系なんでしょうね:)
0753デフォルトの名無しさん
NGNG「プログラムを作る際の手法」としての「流れ図」とかって言葉としてどうなん?
意味はわかるけど微妙にひっかかる。
0754Kusakabe Youichi
NGNG> 構造体と共用体ってなんでしょうか?
本に説明が書いてありますよ。
0755デフォルトの名無しさん
NGNG大きい領域をあるスコープ内で宣言すると、ときたま
文字列が壊されちゃう可能性があるから、その文字列の
安全を保証するためにstatic宣言を行うんですか?
長くなくても、ある瞬間だけ使う変数じゃなくて、
数プロセスを経ても内容を安全に確保したいときは
staticを使うんですか?
0756デフォルトの名無しさん
NGNGなんて言ったらいんでしょう・・・
プログラムを記述する際に、流れ図や状態遷移図なんかを書いてからプログラム作りませんかね?
プログラムを作る前に使う道具として流れ図や状態遷移図以外にないですかねって事なんですけど・・・
これじゃさっきと同じですかね・・・?
0757デフォルトの名無しさん
NGNG金をケチらないで、入門書買え。
0758デフォルトの名無しさん
NGNG書く人もいるし書かない人もいると思います。
0759Kusakabe Youichi
NGNG> >>747
> なるほど〜 ありがとうございました。
> C言語でポインタの所では結構詰まる人が多いようですが何ででしょうね?
難しいとおもいこまされているからでは? > つまる
実際どうってことないです。
> 質問ばかりで申し訳ないんですが、
> コマンドラインパラメータとオプションフラグって何でしょうか?
41ペイジと102ペイジを読みましょう。
0760デフォルトの名無しさん
NGNGなにかないですかね?
0761Kusakabe Youichi
NGNG> プログラムを作る際の手法として流れ図と状態遷移図以外に何かあるんでしょう
か?
べつにそれは「手法」ではないですね。
「プログラム作成の一般的な手順」については182ペイジに書いてあります。
0762デフォルトの名無しさん
NGNG182ペイジって何の本の話?
0763Kusakabe Youichi
NGNG> あぁ、相変わらずstaticの使い勝手がわからんのだが、ぁ、
> 大きい領域をあるスコープ内で宣言すると、ときたま
> 文字列が壊されちゃう可能性があるから、その文字列の
> 安全を保証するためにstatic宣言を行うんですか?
いいえちがいます。
> 長くなくても、ある瞬間だけ使う変数じゃなくて、
> 数プロセスを経ても内容を安全に確保したいときは
> staticを使うんですか?
まず、関数の定義内に書いてあるstaticと、外に書いてあるstaticでは
意味が違います。
あとは178ペイジと254ペイジを読んでください。
0764デフォルトの名無しさん
NGNG使っているかどうかはともかく、プログラムの設計のためのダイアグラム
なら、DFDとかUMLとかいっぱいあるよ。
俺はJavaやC++では、UMLのクラス図ないときついな。
0765デフォルトの名無しさん
NGNGそれはそういった設計手法を新たに会得したいという
ことなのか?
流れ図や状態遷移図が肌に合わないとかで。
それだったらどれぐらいの規模のプログラムを組むとか
書いてくれなきゃなんともいいようがないよ。
短いプログラムで再利用もしないのならそんなの要らないし。
0766デフォルトの名無しさん
NGNGあの・・・ 何の本のことでしょうか・・・
できればタイトルを教えていただきたいです。
>>764
そういうのがあるんですか。初めて知りました。
>>765
いえ、別に会得したいとかじゃなくて、ただ単に気になったので・・・
0767デフォルトの名無しさん
NGNGK&R
0768デフォルトの名無しさん
NGNG次回その関数が呼ばれたときのために、前回の内容を残しておきたい場合に
はstatic宣言する。そうすれば変数領域は開放されない。
0769Kusakabe Youichi
NGNG> 書く場合で考えたいんですが、作る前の道具として『流れ図』や『状態遷移図』
以外に何かないですかねって事です。
> なにかないですかね?
そもそもなんで「書く」が前提になるわけ?
どれがいいかわからないぐらいの知識なのに。
0770デフォルトの名無しさん
NGNGあの・・・ どちらの版でしょうか・・・
0771@@
NGNG0772デフォルトの名無しさん
NGNG書くにこだわらなくてもいいんです。
ただどんなものがあるのかを知りたくて・・・
0773デフォルトの名無しさん
NGNGムリ。
0774デフォルトの名無しさん
NGNG意味不明、やっぱり宿題か?
0775デフォルトの名無しさん
NGNG書かないなら「手法」はいらないじゃん?
0776Kusakabe Youichi
NGNG> >>761
> あの(Iゥァ_燭遼椶里海箸任靴腓Δォ(Iゥ・
> できればタイトルを教えていただきたいです。
文字化けしないようにもう1回書いてみてください。
0778デフォルトの名無しさん
NGNG0779デフォルトの名無しさん
NGNG>> でもよー、K&R読めとかあれはわかりやすいとか知ったかコイてるヤツは、
>> 「実はガッコで懇切丁寧に教えられたクチ」なんだよ。
>そう思い込みたいんでしょうね:)
そう思い込みたいんでしょうね:)
>> K&Rで真に理解したんじゃないのよ。
>> K&Rは難解だとの評価は大多数から既に出ている。
>あれを難解だと思うようでは「なんちゃって」系なんでしょうね:)
人それぞれを理解できないようではプログラム以前の問題ですね:)
0780デフォルトの名無しさん
NGNG***レス付け厳禁です***
0781Kusakabe Youichi
NGNG> >>769
> 書くにこだわらなくてもいいんです。
> ただどんなものがあるのかを知りたくてゥ・
知る必要はないです。
0782Kusakabe Youichi
NGNG> > > でもよー、K&R読めとかあれはわかりやすいとか知ったかコイてるヤツは、
> > > 「実はガッコで懇切丁寧に教えられたクチ」なんだよ。
>
> > そう思い込みたいんでしょうね:)
> そう思い込みたい
なるほど、やはりそうでしたか。
> > > K&Rで真に理解したんじゃないのよ。
> > > K&Rは難解だとの評価は大多数から既に出ている。
> >あれを難解だと思うようでは「なんちゃって」系なんでしょうね:)
>
> 人それぞれを理解できないようではプログラム以前の問題ですね
本気で「ひとそれぞれ」だと思っているんだったら、
「K&Rは難解だとの評価は大多数から既に出ている」とかいう理屈は
使えないわけですよね:)
つまり「ひとそれぞれ」という言葉を使ってごまかそうとしているだけな
わけですね。
0783デフォルトの名無しさん
NGNG> > > でもよー、K&R読めとかあれはわかりやすいとか知ったかコイてるヤツは、
> > > 「実はガッコで懇切丁寧に教えられたクチ」なんだよ。
>
> > そう思い込みたいんでしょうね:)
> > そう思い込みたいんでしょうね:)
>私はそう思い込みたい。
なるほど、やはりそうでしたか。
> > > K&Rで真に理解したんじゃないのよ。
> > > K&Rは難解だとの評価は大多数から既に出ている。
> >あれを難解だと思うようでは「なんちゃって」系なんでしょうね:)
>
> 人それぞれを理解できないようではプログラム以前の問題ですね
大多数が認めているから
「K&Rは難解だとの評価は大多数から既に出ている」とかいう理屈は
使えるわけですよね:)
つまり「そう思い込みたい」という言葉を使ってごまかそうとしているだけな
わけですね。
0784デフォルトの名無しさん
NGNGnntpの中継システムがバグってるのかな?
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNGハタから見てると間抜けでしかない。
0787デフォルトの名無しさん
NGNG臭かべちゃんが狼狽しているとしか・・・(笑
0788デフォルトの名無しさん
NGNGわかりやすくてサイコーでした。
そっかー、そーすっと、少し応用的に考えると、
コールバック内でHWND hChildとかをstaticにしないと
ページ違反とかがおきるのは、存在してるhChildが
関数を抜けるときいたづらされちゃうからとかそーいうのも
あるのKANA
0789デフォルトの名無しさん
NGNGスレ違いだがそれはまったく別の理由だと思う
0790デフォルトの名無しさん
NGNG便利な使い方を聞いていたんじゃなくて、意味を聞いていたのか。。。
0791デフォルトの名無しさん
NGNG断定しないでよかったです。
前にAPI初心者のときstaticにしたかどうか忘れたけど
switch(msg)の前にi++とかやってカウンタできるかな
とか思って失敗してそれきりだった覚えがあるんですけど、
void func(){
static i=0;
i++
.....
}
とかやればiはカウンタになるのかが疑問だ!
0792デフォルトの名無しさん
NGNGどっちの本がいいか?
0793デフォルトの名無しさん
NGNG別の理由かな?
HWNDをローカル変数に格納してるから、コールバックされたとき参照できな
くなって、スタックのゴミ値でWindowクラスにアクセスしようとしてるんじ
ゃないの?
staticにすれば解決するよ、多分。
0794デフォルトの名無しさん
NGNGつきです
0795デフォルトの名無しさん
NGNGなるよ。
0796デフォルトの名無しさん
NGNGナイスゲッチュー
ありがとうでゴザイ!(ました)
0797Kusakabe Youichi
NGNG> C実践プログラミング VS プログラミング言語C
>
> どっちの本がいいか?
「迷ったら両方買う」が秋葉原の原則1の2
0798それはいい
NGNG0799名無しさん@お腹いっぱい。
NGNGやっぱK&RがCのバイブルなのでは・・・?
0800デフォルトの名無しさん
NGNGテンションは妙だが、それであっている。
0801デフォルトの名無しさん
NGNG> > > でもよー、K&R読めとかあれはわかりやすいとか知ったかコイてるヤツは、
> > > 「実はガッコで懇切丁寧に教えられたクチ」なんだよ。
>
> > そう思い込みたいんでしょうね:)
> > そう思い込みたいんでしょうね:)
>いや、そもそもK&Rとは、Kusakabe & Real 厨房なので、
>そんなものをバイブルにするなどもってのほか:)
なるほど、やはりそうでしたか。
> > > K&Rで真に理解したんじゃないのよ。
> > > K&Rは難解だとの評価は大多数から既に出ている。
> >あれを難解だと思うようでは「なんちゃって」系なんでしょうね:)
>
> 人それぞれを理解できないようではプログラム以前の問題ですね
この"K&R"は読むに及ばないものですね:)
いやさ、何かいいものがあるはずさ。キラリと光る禿げの一つもあろうというものさ。
:)
0802デフォルトの名無しさん
NGNG面白くないからもうヤメレ。
0803Kusakabe Youichi
NGNGIn article <[email protected]>, 801 デフォルトの名無しさ
ん <[email protected]> wrote:
> > > > K&Rで真に理解したんじゃないのよ。
> > > > K&Rは難解だとの評価は大多数から既に出ている。
> > >あれを難解だと思うようでは「なんちゃって」系なんでしょうね:)
> >
> > 人それぞれを理解できないようではプログラム以前の問題ですね
>
> この"K&R"は読むに及ばないものですね:)
っていうか「自分が理解できないぼけ」だったことを正当化したいといって
K&Rを不当におとしめるのは問題ありますね:)
0804デフォルトの名無しさん
NGNG大部分は標準ライブラリ関数についての説明です。
欲しい関数があったらここから探せます。
便利ですので一冊持っておきましょう。
0805デフォルトの名無しさん
NGNG>そんなものをバイブルにするなどもってのほか:)
>この"K&R"は読むに及ばないものですね:)
「このK&R」にしないと理解できないのかヨ!
0806臭カベ勇み足
NGNG0807デフォルトの名無しさん
NGNG3次配列をやりたいんです。
char *data1[]={"1","2","3"};
char *data2[]={"a","b","c"};
char *data3{}={"A","B","C"};
....
だったらいっそのことdata[1][][],data[2][][]...
としたいのが人情というものです。
僕は
char *data[][]=(***dataとか**data[])
{
{"1","2","3"},{"a","b","c"},{"A","B","C"}
}
とかしか思いつかないんですけど、これでいいんですか?
あぁ、
0808デフォルトの名無しさん
NGNGいいんじゃねーの?;
0809デフォルトの名無しさん
NGNGあるんすけどやってみるっす。
0810デフォルトの名無しさん
NGNG二次以上の場合、配列の上限値をすべて書かずに [][] だとまずいと思われ。
0811デフォルトの名無しさん
NGNG0812ミニラ
NGNG代わりにデバッガ等でできますか?
環境はSun WorkShop 5or6です
使えたらデバッグ便利になるのになあ
0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNG助けてっください。
次の方程式の解を以下の4つの方法で求めるプログラムを作成し、小数点以下第4位まで正確に解を求めよ。
x−cos(x)=0
1、2分法
2、割線法
3、ニュートン法
4、反復法
0817デフォルトの名無しさん
NGNGprintf("%s\n",__TIME__);
printf("%s\n",__DATE__);
printf("%s\n",__FILE__);
printf("%s\n",__LINE__);
だけかな標準__マクロ__は
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGつーか、C言語初めて5日目でそんな課題出されたのか?
0820デフォルトの名無しさん
NGNG5日目にしちゃ簡単な問題だと思われ
0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG「構造体を使ってプログラム構成をやり直すことを"構造改革"と呼びます」
こりゃ何点あげればよかと?
0823デフォルトの名無しさん
NGNG山田君、ざぶとん全部持ってきなさい
(ついでに sage なかった 822 のざぶとんも没収)
0824816です
NGNG0825
NGNGprintf("%s\n",__LINE__);
文字列出力できたっけ?
0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNGおいおい、たった20分弱でしびれを切らすなよ。
0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNG簡単なプログラムなんだな。
だが俺は補間法なんかとっくに忘れてしまっているから答えられないんだな。
0830デフォルトの名無しさん
NGNG0831○
NGNGプログラム実行して、
使われる順番に関数名出力したいんでしょ
やりかたはわからんけどね
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNG格納された数をヒストグラム風に出力してみようと思い、
( 0, * *
1, * * * * * *・・・・ というふうに)
色々試したのですが、どうも上手くいきません。
ndigit[c - '0']で数を格納したときに、ヒストグラム部でも" *"を足していけばいいのかなと思いましたが
上手いコードが書けず、
結局、ndigit[1]、ndigit[2]、・・・・とイチイチ一つづつ格納されている数を見させながら
n = 0;
while(ndigit[1] > n) {
n++;
printf(" *");
if(n == ndigit[1])
printf("\n");
}
こんな感じで
ヒストグラムを表示させる方法しかできませんでした。
理想的なコードはどのようなものなのでしょうか。
0834デフォルトの名無しさん
NGNG何がわからん?
>>833
終端は何?
とりあえずそのプログラム滅茶苦茶
0835816です
NGNGヘルプ・・・
0836833
NGNGK&Rの27ページと28ページにまたがって載ってるプログラムに、
これをホイッとくっつけてみたのです。
0837暇人allザピーポー
NGNGとりあえず、どこがわからないのか書きなさいよ。
そうしたら手伝ったゲルよ
0838833
NGNG何かものすごく短くできる良い案が浮かびそうでカタチにならない、
そんな状況で、コレが出来てしまいました。
0839デフォルトの名無しさん
NGNGfor(i=1;i<=MAX;i++){
printf("%d,",i);
for(j=ndigit[i];j--;)
printf("*");
printf("\n");
}
普通にこんな風で駄目?
0840デフォルトの名無しさん
NGNGfor(i=0;i<100;i++){
n=rand()%10;
hist[n]++;
}
for(k=0;k=10;k++){
printf("%d",k);
for(i=0;i<hist[k];i++){
printf("*");
}
printf("\n");
}
}
</pre>
恐ろしく適当に作って見ました。
0841デフォルトの名無しさん
NGNGK&R時代の(今となっては旧式の)書き方を言う。
(ANSIC言語辞典(技術評論社)より)
0842デフォルトの名無しさん
NGNGまあ、C99は限られた環境かもしれないけど…
0843833
NGNG0844 デフォルトの名無しくん
NGNG0845デフォルトの名無しさん
NGNGとりあえずgcc3.0以上ならオッケーっぽいぞ
0846833
NGNGint main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for(i=0; i<10; ++i)
ndigit[i] = 0;
while((c = getchar()) != 'Q'){
if(c >= '0' && c <= '9'){
ndigit[c-'0']++;
d = ndigit; }
else if(c == ' ' || c == '\n' || c == '\t'){
nother++;
e = nother; }
else {
nwhite++;
f = nwhite; }
}
printf("digit =");
for(i=0; i<10; ++i)
printf(" %d", ndigit[i]);
printf(" other = %d white = %d\n", nother, nwhite);
return 0;
}
元のはこういうものなんです・・・・
0847デフォルトの名無しさん
NGNG何か良い本はありますか?プログラミング自体初心者です。
ホントに基礎から勉強したいんですが、いい本あったら教えてください。
お願いします
0848833
NGNG頭が悪いもので、短時間では上手いこと結果が出せません。
腰据えてやりたいと思います。
アドバイスくださった方、ありがとうございました。
0849デフォルトの名無しさん
NGNG明解C言語 入門編 柴田望洋 著 ソフトバンク
これ、初心者に最高!
0850デフォルトの名無しさん
NGNGキーボードから二つの整数x、yを入力し、
それらの整数の最大公約数(gcd)と最小公倍数(lcm)とを求める
。そして、入力データとgcdおよびlcmwp出力するプログラム(gl.c)を書きなさい。
また、入力データが正の整数以外のときは、"illegal number"と出力するようにする。
なお、lcm=x・y/gcdである。
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNGネーミングがやばめ。プログラミングの本色薄め。これ。
で、これ電車の中で読んでいると次から他のリーマンからマークされる
危険を伴う両刃の剣。素人にはお勧めできない。
0854 どうですか?
NGNGDelpyi6プロフェッショナルを貯金をおろして
買ってしまいました。もう、後には引けません。
0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNGWin32 なら、Borland C++ Compiler か Cygwin の gcc が無料で入手可能。
VC の無料版はない。
0857デフォルトの名無しさん
NGNG0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNG君は検索エンジンを知らないのかね?
0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGこの件に限っては、検索エンジンで探し当てるのは難しい。
0863 どうですか?
NGNG0864デフォルトの名無しさん
NGNGその理由とPRINTF関数で出力する時、なぜ
* 変数ではなくそのまま出力できるのか?
&変数に値を格納しても、&を外した変数そのものは
空っぽではないのか?
これってさらっと書いてあるけど、自分には良くわからないです。
誰か分かる人、教えて下さい
0865デフォルトの名無しさん
NGNGhttp://www.borland.com/bcppbuilder/freecompiler/cppc55steps.html
リンク切れてただけかな?
0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGhttp://www.google.com/search?hl=ja&q=C%2B%2B+Compiler+%96%B3%8F%9E%81%40%83_%83E%83%93%83%8D%81%5B%83h&btnG=Google+%8C%9F%8D%F5&lr=
そうか?
0868デフォルトの名無しさん
NGNGテキトゥー
int i, j, t, x, y ;
printf("x,y>") ;
if(2!=scanf("%d,%d", &x, &y)){
printf("illegal number\n") ;
return ;
}
i = x ;j = y;
while(i%=j){
t = j ;
j = i ;
i = t ;
}
printf("GCD:%d\nLCM:%d\n",j,x*y/j) ;
0869デフォルトの名無しさん
NGNG君はどこを見ているんだい?まさかFTPの使えない環境から落とそうとしたとか言わないよね?
http://www.borland.co.jp/cppbuilder/freecompiler/bcc55download.html
0870デフォルトの名無しさん
NGNGprintf に渡すのは変数ではなくて、変数から取出した値。
だから printf("%d", a * 100); みたいな式も値として渡せる。
scanf に渡すのは値の格納先(つまりポインタ)。
scanf の中で、受取ったポインタ値 p に対して *p = 入力値;
のように代入している。これでわかるか?
0872デフォルトの名無しさん
NGNG別段特殊なキーワードは入れてないつもりだが?
0874デフォルトの名無しさん
NGNG格納先を渡す関数は他にもいっぱいあるよね。getsとかstrcpyとか。
ただ、実際使うときに、&をつけてアドレス渡しすることがscanf以外ではあまりないというだけで。
0876874
NGNG○ scanf系
0877デフォルトの名無しさん
NGNG配列名で渡すと異常動作する処理系が一杯あるから。
俺はいつも &配列名[0] で渡してる。
0878デフォルトの名無しさん
NGNGまじ!?
配列名==先頭のアドレスと定義されていないことがあるとか!?
0879デフォルトの名無しさん
NGNG今まで三つ体験した。
0880デフォルトの名無しさん
NGNG初耳・・・
今までVC++,BCC32,gccしか使ったことがないから知らなかった・・
0881
NGNG役に立つプログラムが書けません。
どうしたら役に立つプログラムが
書けるようになれるのでしょうか?
0882デフォルトの名無しさん
NGNG自分が必要に迫られるとか。
0883デフォルトの名無しさん
NGNG何か自分で作りたいプログラムは無いのかよ。
0884デフォルトの名無しさん
NGNG2つはgccだったり・・・。
0885
NGNG分らないのです。
0886デフォルトの名無しさん
NGNG古いバージョンの?
私は最近のだからなぁ(LINUX用)。
0887デフォルトの名無しさん
NGNG役立ちそうなライブラリを作って配るとか・・・
0888デフォルトの名無しさん
NGNG次は自分が使っている環境について勉強。
それで何も思いつかないようなら向いてないんじゃない?
0889デフォルトの名無しさん
NGNG2つはターゲットがx86じゃ無い奴ね。
0890デフォルトの名無しさん
NGNGそうか。なるほど。
0891デフォルトの名無しさん
NGNG1)ゲーム。
2)就職。(嫌でも何を作るか判ります。)
0892
NGNGそうですね、気軽に頑張ってみます。
0893デフォルトの名無しさん
NGNGを受け取って
そのポインタの先の変数にそのポインタの値(つまりアドレス)を
代入してるという事ですか。
そうすると アドレスとそのアドレスの先にある変数は同じ値という
事になるのですね。
0894デフォルトの名無しさん
NGNGちがう
0895デフォルトの名無しさん
NGNGポインタは入力した値そのものじゃないよ。入力してフォーマットした後のものを入れる場所を指すアドレスだよ。
0896895
NGNGなんか説明が変だな・・
0897デフォルトの名無しさん
NGNGですか?まず入力した値は、SCANFの&変数の中に代入される
みたいに書いてあったような気が・・
0898デフォルトの名無しさん
NGNG「エロサイトのポップアップを消すソフトを作るために勉強するやつ。」
↑こういうのが上達すると思う。
0899デフォルトの名無しさん
NGNGCのポインタって(C++は知らんが)すげー便利だなっておもったよ。
0900デフォルトの名無しさん
NGNG一歩間違えばセグメンテーション違反
0901デフォルトの名無しさん
NGNG変数のコピーを渡すと、加工しても元の変数は加工されないまま。
データを加工する関数は大抵ポインタ渡しだね。
0902デフォルトの名無しさん
NGNG>>897
入力された値を戻り値として受け取れないから、入れ物の場所を指定して
そこに入れてもらうため。
つか、ポインタと戻り値を理解できるまでK&Rを復唱せよ。
0903デフォルトの名無しさん
NGNGポインタのポインタのポインタとポインタのポインタが
ポインタの配列と混じっている関数へのポインタ
とかを使ってデバグではまったら分かる。
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGんなものは無い。
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNGtry{}catch(){}
みたいな簡単な仕組みでよろしく
セグメンテーションフォールトが手に入ればそれでいい
0908デフォルトの名無しさん
NGNGデバッグ以前に設計が悪い。
0909デフォルトの名無しさん
NGNG梅干何個くらいならOK?
俺は***までは割とすんなりですが、
それを超えると逝ってよしと思ってしまう。。
0910デフォルトの名無しさん
NGNGそれ以上は酸っぱすぎる。
文字列の配列へポインタとか。
0911デフォルトの名無しさん
NGNG0912Kusakabe Youichi
NGNG> 伝わることを願うのですが、
> 3次配列をやりたいんです。
> char *data1[]={"1","2","3"};
> char *data2[]={"a","b","c"};
> char *data3{}={"A","B","C"};
これ2次元では?
(ああcharレヴェルで数えると3次元か)
0913Kusakabe Youichi
NGNG> 現実問題、そこまで複雑になったら構造体つかうべき。
なぜ連体形? :)
0914Kusakabe Youichi
NGNG> 当方、C言語を始めて5日目。恥ずかしながら四則計算が関の山です。
> 助けてっください。
>
> 次の方程式の解を以下の4つの方法で求めるプログラムを作成し、小数点以下第4
位まで正確に解を求めよ。
>
> x−cos(x)=0
>
> 1、2分法
> 2、割線法
> 3、ニュートン法
> 4、反復法
ニュートン法とはなにか、ってのをちゃんと授業効いてなかったのでわからない
だけでは? :)
# プログラム以前の問題のような。
0915Kusakabe Youichi
NGNG> >>814
> プログラム実行して、
> 使われる順番に関数名出力したいんでしょ
> やりかたはわからんけどね
ふつうに__func__つかえばいいんじゃないの?
そういう話じゃなくって?
0916デフォルトの名無しさん
NGNG0917Kusakabe Youichi
NGNG> K&Rスタイル
> K&R時代の(今となっては旧式の)書き方を言う。
> (ANSIC言語辞典(技術評論社)より)
いまK&RっていうとK&R2ndのことを言いそうな気がするが。
C89以前のtradな書き方のことだろうか??
0918Kusakabe Youichi
NGNG> 私はプログラム初心者で、Cを習ってるんですが、全く分かりません。
> 何か良い本はありますか?
あるのでは?
0919デフォルトの名無しさん
NGNG0920Kusakabe Youichi
NGNGIn article <[email protected]>, 864 デフォルトの名無しさ
ん <[email protected]> wrote:
> なぜ、SCANF関数には格納する変数がアドレスなのか?
> その理由とPRINTF関数で出力する時、なぜ
標準になさそうな関数ですね:) > SCANF, PRINTF
> * 変数ではなくそのまま出力できるのか?
> &変数に値を格納しても、&を外した変数そのものは
> 空っぽではないのか?
> これってさらっと書いてあるけど、自分には良くわからないです。
> 誰か分かる人、教えて下さい
110ペイジに書いてあります。
0921Kusakabe Youichi
NGNG> >>874
> 配列名で渡すと異常動作する処理系が一杯あるから。
> 俺はいつも &配列名[0] で渡してる。
それってようするに、バグですよね > 異常動作する処理系
そういうのをさももっともらしく書くと本気にする人がいるかも。
0922Kusakabe Youichi
NGNG> 参考書を一通り理解できても
> 役に立つプログラムが書けません。
参考書が悪かったか、もしくは
自分では理解したと思っているが理解できていないかどちらかでしょう。
参考書に書いてあるプログラムが実際に役に立つプログラムだったりすると
そっちほうめんに行きやすいでしょうね。
0923デフォルトの名無しさん
NGNGこっちの板の人達に迷惑かけてんじゃねえよ。
0924Kusakabe Youichi
NGNG> それが何を作っていいのか分らないのです。
つまり必要性がないかいぎり「役に立つ」ことは不可能なので、
あなたは何も作る必要はないのです。
# モティヴェイションは重要
0925デフォルトの名無しさん
NGNG宿題スレにいって、答えてあげて下さい。
役に立ちます。
0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNGttp://www14.big.or.jp/~midoriko/kusakabe/jinmei_4.htm
0928Kusakabe Youichi
NGNG> 日下部さんのヒープソートが大好きです! (・∀・)(I墨典�Z歙淌
「ねたを仕入れた」とおもって得意げにかくまえに、
ちゃんと本読んでみたほうが恥かかなくてすむぞ :)
0929名無しさん@お腹いっぱい。
NGNG何でそんなにネットに時間費やすの?
俺見たいのなら分かるが、何か時間の使い方間違えてる気がするなぁ・・・
それでストレス発散になるってんならここはいい場所だろけどねー
0930デフォルトの名無しさん
NGNG0931Kusakabe Youichi
NGNG>結構ちゃんとしてるし頭切れるのも分かるんだけど
> 何でそんなにネットに時間費やすの?
そんなに時間使っていますか?
> 俺見たいのなら分かるが、何か時間の使い方間違えてる気がするなぁ・・・
つまり2chばかりしてると思い込んでいるのですね:)
0932デフォルトの名無しさん
NGNG女ってのは駄目な男にひかれるのかな、、、 と(失礼
0933デフォルトの名無しさん
NGNGhttp://www.void.tako.org/void/
0934デフォルトの名無しさん
NGNG写真がいっぱいある・・・。
結構可愛いですね。
0935デフォルトの名無しさん
NGNG嫉妬と羨望だよな。
そのサイトを注意深く探れば、もっといい写真が隠されてるよ。
0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNGどうしても返ってきた時distの値が切れてしまうんです(実際は構造体のメンバからのコピー)
strcpyの後でprintしても切れてしまいます 鬱
main()
{
char *dist = NULL;
func(&dist);
printf("%s \n",dist);
exit(0);
}
func(char **dist)
{
char src[] = "TEST STRINGS";
*dist = (char *)realloc(*dist,strlen(src)+1);
strcpy(*dist,src);
}
0938937
NGNGコピーの手前でlength=strlen(structsrc->member);メンバの名前を
間違えてました 情けない、、、2時間悩んだよぅ
0939デフォルトの名無しさん
NGNGWin32 なら構造化例外 (SEH) で捕まえられる。
int isViolated = 0;
__try {
// やばそうな処理
} __exception (GetExceptionCode() == STATUS_ACCESS_VIOLATION)
{
isViolated = 1;
}
UNIX だと SIGSEGV に対応するシグナルハンドラを登録すれば、アクセス保護違反が
発生した瞬間にシグナルハンドラが呼ばれる。ただし、そのときに適切な処理を行うた
めには、設計段階でアクセス保護違反が発生しうることを想定しておく必要がある。後
づけてコードを追加するのは、けっこう難しい。
0940デフォルトの名無しさん
NGNG複数のプロセスから fprintf() で
一つのログファイルに書き出す場合の排他処理の定石は?
特別なこと(排他処理)をしなくてもうまく書き込めている
気がするのですが木の精ですか?
同じようなことをバッファリングなしで putc() で行うと
ログファイルがぐちゃぐちゃになります。
バッファリングとか fprintf() の実装とか関係ありますか?
あとログファイルのローテーションはどう実装したらよいですか?
0941デフォルトの名無しさん
NGNGログ専用プロセスを用意してそいつとプロセス間通信。
ローテーションもそのプロセスがやればよい。
0942デフォルトの名無しさん
NGNGwrite()で一つのブロックを一回で追加書きこみが定石。
ファイルアクセスはそれ自体が排他的なんで、追加書きこみなら
何も気にしなくて良い。
0943デフォルトの名無しさん
NGNGいや、本みたら、ポインタ変数に直接、入力した値が書き込まれるみたい
に書いてあったので、へっ?って思ったけど、そのアドレス先の実体だけに
書き込んでいるのですね。 だからscanf( "%d" , &a)で入力した値は
aに書き込まれて,&aの値(番地)は入力前も入力後も同じですよね。
0944デフォルトの名無しさん
NGNGscanf()を使うのがよくないんですか?
誰か説明してくれませんか?初めて知りました・・・
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNGいや、なんかさっき別の板でも言ってた人いましたし、
ずいぶん前に、知り合いがボソッと言ってました。
何でかって、知り合いに聞いたんですけど難しい言葉を
並べられただけで・・・
自分には理由がわからないんです。だから教えてもらい
たくって・・・
0947デフォルトの名無しさん
NGNG>SIGSEGV に対応するシグナルハンドラ
おっとーそういやそんな仕組みあったな。
つーか、例外が起こったら適当に傷を記録して
そのあと元処理に復帰したいんだけど、なかなかムずいね
Javaってこの辺楽なんだよね。遅くっても許すって感じ
0948デフォルトの名無しさん
NGNG書式と型や入力数が異なってもエラー検出できないからかな?
CUIやらないんで使った事ないや。
0949Kusakabe Youichi
NGNG> ずいぶん前に、知り合いがボソッと言ってました。
その知り合いに聞くってのはだめですか? > scanf()がダメだとかいう人
> 何でかって、知り合いに聞いたんですけど難しい言葉を
> 並べられただけで
なんだ聞いたのですか。
もう少しわかりやすく言ってくれってたのんだらどうですか?
0950デフォルトの名無しさん
NGNG忘れてました。
でもこの板見つけたから、詳しい人が沢山いるだろうと思って聞いてみました。
0951デフォルトの名無しさん
NGNGscanf() が使いづらいのは
1. 字句解析
文字列の並びから、ここまでが数値、ここまでが演算子、といったようにトークンを
切り出す処理
2. 型変換
文字列の "1111" を int 型の 1111 に変換するような処理
を一つの関数にまとめてしまっていて、エラー処理などが難しいからでしょう。
実はscanf() の書式指定はかなり強力で(正規表現ほどではないけど、かなりのことが
できる)使いこなすと便利なのですが、それでも
1. 字句解析は getc(), ungetc() で一文字ずつ拾いながら、トークンの切れ目を探す
2. トークンの切れ目が見つかったらところで、トークン種別を確定して itoa, sscanf()
などで型変換
と 2 段階にした方がつぶしがきくので、よく使われます。
0952Kusakabe Youichi
NGNG> scanf() が使いづらいのは
>
> 1. 字句解析
> 文字列の並びから、ここまでが数値、ここまでが演算子、といったようにトー
クンを
> 切り出す処理
> 2. 型変換
> 文字列の "1111" を int 型の 1111 に変換するような処理
>
> を一つの関数にまとめてしまっていて、エラー処理などが難しいからでしょう。
あと、ほかのsscanf()などとちがって、改行をまたぐときの問題がありますね。
0953デフォルトの名無しさん
NGNGありがとうございます。知りたかったことがわかってよかったです。
0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNGgetc,sscanfの他にgetsなんてのはどうなんですか?
0956デフォルトの名無しさん
NGNGgets() は最悪ですね。バッファオーバーランが防げない。
0957デフォルトの名無しさん
NGNG入力はgetcとsscanfがいいって事ですか?
0958デフォルトの名無しさん
NGNGとりあえず google 逝け。
0959デフォルトの名無しさん
NGNGwrite()では一度に指定したサイズを書ける保障はないので、
ロック -> ファイル末尾へシーク -> 書き込み -> アンロック
の方が確実だと思われ。
0960Kusakabe Youichi
NGNG> 他にC言語で、あまりよくないものってあるんでしょうか?
>
> getc,sscanfの他にgetsなんてのはどうなんですか?
388ペイジに書いてありますね > gets()
0961デフォルトの名無しさん
NGNGchar str[80]; //char 型の str変数を str[0] から str[79] まで 80個確保
gets(str); //gets でキーボードから文字列を入力
としても、70文字以下の入力だったら問題無いが、80文字以上の入力をされたときになにもできないため、オーバーフローがおきる。
セキュリティーホールになる。
fgets だったら、最大入力可能文字を数字で指定できる。その数字を超えたものは次回の入力にまわせる。
だから、gets は使わず fgets を使うべき。
0962デフォルトの名無しさん
NGNGすいませんが、特定の本を出されても困っちゃいます。
それに何の本ですか?
>>961
なるほど。そういうことなんですか。ありがとうございます。
0963デフォルトの名無しさん
NGNG> すいませんが、特定の本を出されても困っちゃいます。
> それに何の本ですか?
Kusakabe 先生のスレ違い/意図不明な書き込みに対する苦情には専門のスレ
が用意されて いるので、ム板では書かないようにお願いします。そのような書き
込みにコメント をつけるのは、彼と一緒に一緒になって荒らし行為をし てるのと
変わりません。
日下部 陽一先生の隔離スレッド void ***
http://pc.2ch.net/test/read.cgi/prog/1006918877/
#同意も反論も不要。なんかあったら↑のスレで言ってくれ。
0964Kusakabe Youichi
NGNG> バッファオーバーランってなんですか?
たとえば、飛行機が離陸するときに滑走路からはみ出して海に落ちたら痛いですよ
ね。
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG幼女タンのマムコに、大人のチンポを無理やりねじこんだら、子宮破裂するでしょ。
それと同じ。
0967デフォルトの名無しさん
NGNGそれを騙す人がいなければ。
というか、ふぇーるせーふ でなるべく使わないに越したことはないかと
0968デフォルトの名無しさん
NGNGWWWサーバーソフトが設定するのだとばかり思っていましたが。
0969968
NGNG0970デフォルトの名無しさん
NGNG今時 Web サーバにバグがない、なんてことは誰も信じてません(w
まぁ CONTENT_LENGTH が腐ってることはまずないと思いますが、それでも万が一の
ときにバッファオーバーランが発生する(しかも検出できない)のと、エラーをプログラ
ム側で検出してログに残すなり何なりの対処を取るのでは、プログラムの信頼性が
違ってきますし、バグへの対処に要する時間も変わってきます。
0971デフォルトの名無しさん
NGNG速やかに移動してください。
http://pc.2ch.net/test/read.cgi/tech/1007272267/l50
0972newbieM
NGNGリネームというようなソフトを作ろうと思っているんです。
つまりaっていうフォルダに
abc.txt
efg.txt
・・・・
ってあったとき
abc.txtをエービーシー.txt
efg.txtをイーエフジー.txt
という風に初めからあるリストと比較してリネームしたいんです。
ですが具体的にどのように書いたらいいかがわかりません。
どの命令を組み合わせるかおしえていただけないでしょうか?
0973デフォルトの名無しさん
NGNGそのプログラムを組むには、いろいろ関数を使います。
もう少し的を絞って質問してください。
それと、新しい、スレに移動もおねがいします。
0974Kusakabe Youichi
NGNG> 今ある特定のディレクトリの中のファイル名を比較して
> リネームというようなソフトを作ろうと思っているんです。
man 5 rename
0975newbieM
NGNG早速移動して書き直したいと思います。
が、ほんとにまったくわからないんです。
一つのファイルだけならできるんですが・・・
0976デフォルトの名無しさん
NGNGプラットフォームは?
0977newbieM
NGNG意味わからないです(w_−; ウゥ・・
0978デフォルトの名無しさん
NGNG分からなくていい。>>963 見とけ。
0979デフォルトの名無しさん
NGNGOSは?
答えはは新スレで
0980デフォルトの名無しさん
NGNG>「K&Rは難解だとの評価は大多数から既に出ている」とかいう理屈は
>使えないわけですよね:)
「人それぞれ」って「K&Rは簡単ってことになる」と思い込んでいる人もいるようですね:)
っていうか「そういうこと言う人が多いですよ」ということと「理屈は使えない」ってどう繋がるのでしょうね:)
0981デフォルトの名無しさん
NGNGなに、この人?
0982デフォルトの名無しさん
NGNG0983C初心者
NGNGEOFまで繰り返せまで進んだんですが僕も話しに加われますか?
0984デフォルトの名無しさん
NGNG加わってもいいけどもうスレが終わりです。
0985デフォルトの名無しさん
NGNGC言語なら、俺に聞け! <9>
http://pc.2ch.net/test/read.cgi/tech/1007272267/
レス数が950を超えています。1000を超えると書き込みができなくなります。