【ANSI-C】 C言語なら俺に聞け! Part 129
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/08/27(日) 15:43:44まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け! Part 128
http://pc8.2ch.net/test/read.cgi/tech/1151282084/
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
C/C++の宿題を片付けます 73代目
http://pc8.2ch.net/test/read.cgi/tech/1155355501/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0004デフォルトの名無しさん
2006/08/27(日) 16:05:150005デフォルトの名無しさん
2006/08/27(日) 16:09:28ない
>>3
ちんこ弄ってるだけよりは可能性がある
>>4
エロいのは無理
0006デフォルトの名無しさん
2006/08/27(日) 16:16:23じゃあ、将来性のある言語ってなんですか?
0007デフォルトの名無しさん
2006/08/27(日) 16:23:38WindowsならC#使っとけ。
ゲームとか組み込みとか貧弱なOSで生バイナリ使う必要あるならC++一択。
C99はプロのCプログラマが使う上で有利な多数の拡張が施されているが、
C++とかなりの機能がダブっており、生粋のC屋以外には半ば無用の言語。
そしてスレ違い。
0008デフォルトの名無しさん
2006/08/27(日) 16:42:340009デフォルトの名無しさん
2006/08/27(日) 16:56:030010デフォルトの名無しさん
2006/08/27(日) 17:24:35static int num=strlen(str);
:
:
このような事をやろうと考えていたんだが、static属性の付いた変数に定数以外の値を代入しようとするとコンパイルエラーになる。
かと言ってそれだけの為に毎回値を渡したり計算させたりするというのもスマートじゃない。
知恵を貸してくれないか?
0011デフォルトの名無しさん
2006/08/27(日) 17:31:42いやです。
0012デフォルトの名無しさん
2006/08/27(日) 17:37:57そりゃ初期化子に書くからいかんのだ。
static int num;
:
num=strlen(str);
と書けば問題なかろうが。
ところで、staticの意味はわかっておろうな?
0013デフォルトの名無しさん
2006/08/27(日) 17:52:42printf("%d\n", sizeof(argv[argc - 1]));
return 0;
}
と言うコードをコンパイルして、
./a.out 12としても、./a.out 123456としても
4が出力されます。 実行時の引数に渡した値(上記の場合12, 123456)
のサイズを調べたい場合はそうすればいいのでしょうか?
0014デフォルトの名無しさん
2006/08/27(日) 17:54:30strlen
0015デフォルトの名無しさん
2006/08/27(日) 17:55:420017デフォルトの名無しさん
2006/08/27(日) 17:57:46求めたいのは「文字列の長さ」なのか「charへのポインタのサイズ」なのかどっちだ?
0018デフォルトの名無しさん
2006/08/27(日) 18:02:180019デフォルトの名無しさん
2006/08/27(日) 18:30:120020デフォルトの名無しさん
2006/08/27(日) 18:37:340021デフォルトの名無しさん
2006/08/27(日) 18:42:212度目の呼び出し時以降は宣言しないため初期化しないと思っていた、勘違いだった。
激しくサンクス。
0022デフォルトの名無しさん
2006/08/27(日) 19:52:38char*hoge="hogehoge";
return hoge;
}
int main(void){
char *piyo;
piyo=foo();
printf("%s",piyo);
}
このようにプログラムを書いたとき、関数fooを抜けた時点で"hogehoge"へのポインタを参照いることに問題はありませんか?
0023デフォルトの名無しさん
2006/08/27(日) 19:53:150024デフォルトの名無しさん
2006/08/27(日) 19:53:24実行してみた?
0025デフォルトの名無しさん
2006/08/27(日) 19:55:01日本語でおk
0026デフォルトの名無しさん
2006/08/27(日) 20:03:57文字列リテラルのアドレスだから問題ないが、同じ調子でローカル変数のアドレスなんか返すんじゃないぞ。
0027デフォルトの名無しさん
2006/08/27(日) 20:04:28正常に動作していても、それはたまたま動いているだけで、問題はあるよ
0028デフォルトの名無しさん
2006/08/27(日) 20:07:560029デフォルトの名無しさん
2006/08/27(日) 20:11:42どっちでもいいか。
別にどうでもいいし。
0030デフォルトの名無しさん
2006/08/27(日) 20:13:590031デフォルトの名無しさん
2006/08/27(日) 20:17:00どなたかわかるかたいませんか?
int Henkan (変換の文字列,変換後の文字列,変換後のバイト数)
0032デフォルトの名無しさん
2006/08/27(日) 20:20:13なかなか言うねえW
0033デフォルトの名無しさん
2006/08/27(日) 20:35:58日本語でおk
0034デフォルトの名無しさん
2006/08/27(日) 21:53:24限定しておるわけではない。
ANSI-Cの規格に従う限り、このプログラムは正しく動くはずだと言っておるのだ。
0035デフォルトの名無しさん
2006/08/27(日) 22:26:36変換関数から変換後の文字列とバイト数を戻してもらいたいと言うことかな?
まぁ、初心者スレにでも逝ってくれ。
0036デフォルトの名無しさん
2006/08/27(日) 23:08:40変換って何に変換するんだ。
何の文字列をなんに変換するんだ?
ひらがなから漢字に変換するのか?
0037デフォルトの名無しさん
2006/08/28(月) 00:29:04printf("%s %d\n",変換後の文字列,変換後のバイト数);
0038デフォルトの名無しさん
2006/08/28(月) 16:09:22int main(){
char *str="test";
str[0]='b';
}
このようなコードを書いて実行すると「STATUS_ACCESS_VIOLATION」というエラーがでて強制終了してしまいます。
Googleで検索してみたのですが難しい事が書いてあってよくわからず、かろうじて領域破壊が発生している可能性があることだけ読み取れました。
ですが上記コードのstr[0]を出力してみるとtが入っている事が確認でき、ますますわからなくなってしまった次第です。
よろしければこれの原因と解決策を教えてください。
0039デフォルトの名無しさん
2006/08/28(月) 16:19:340040デフォルトの名無しさん
2006/08/28(月) 16:20:210041デフォルトの名無しさん
2006/08/28(月) 16:26:50文字列リテラルが書き換え可能な領域に置かれる事は一切保証されない。
書き換え不可の領域に置かれた状態で書き換えようとすればエラーが出て当然だわな。
0042デフォルトの名無しさん
2006/08/28(月) 16:29:55int main(){
char str[]="test"; /* 書き換え可能な場所にコピーする */
str[0]='b';
return 0;
}
0043デフォルトの名無しさん
2006/08/28(月) 21:54:20実装に踏み込んだ怪しいコメントだな。
「書き換え可能な配列として初期化する」のほうがいいだろう。
0044デフォルトの名無しさん
2006/08/29(火) 03:49:160045デフォルトの名無しさん
2006/08/29(火) 17:50:42・文字列が定数ならconstを付けてバグを防ぐ
0046デフォルトの名無しさん
2006/08/29(火) 17:54:450047デフォルトの名無しさん
2006/08/29(火) 17:55:46意味ねーだろーが
0048デフォルトの名無しさん
2006/08/29(火) 20:50:250049デフォルトの名無しさん
2006/08/29(火) 21:01:070050デフォルトの名無しさん
2006/08/29(火) 23:51:44読み取ってくれず連続して scanf を使うとき上手く動作しないトラ
ブルで、これの解決パターンは何通りもあるけど、このまとめサ
イトとか、このイディオムというかいろいろな解法を扱っているとこ
ろ知ってる人いますか?
少しCから離れてしまうと、このイディオム忘れちゃって…
0051デフォルトの名無しさん
2006/08/29(火) 23:56:05あんまり好きな書き方じゃないけど
fgets + sscanfとかが代表的な逃げ方だな。
あとはscanf("%*[^\n]");scanf("%*c");でも叩き込んで改行まで殺すとか.
0052デフォルトの名無しさん
2006/08/30(水) 00:01:16>>51少しCから離れると、そういうの忘れちゃいませんか?
0053デフォルトの名無しさん
2006/08/30(水) 00:03:080054デフォルトの名無しさん
2006/08/30(水) 00:37:47突然に、辞書って何のこと
英語の辞書??
0055デフォルトの名無しさん
2006/08/30(水) 00:59:400056デフォルトの名無しさん
2006/08/30(水) 01:10:56m9(^Д^)プギャー
0057デフォルトの名無しさん
2006/08/30(水) 01:12:59それとも上で言っているイディオムとか、痒いところに手が届くようなお勧め辞書があるということ?
そんな辞書あったらオレにも教えてくれよー
0058デフォルトの名無しさん
2006/08/30(水) 01:34:51とりあえず時代には逆行してるよね。
0059デフォルトの名無しさん
2006/08/30(水) 02:01:21C99が流行らずにC#,java,スクリプト言語全盛なのは
C99が時代に取り残されそして逆行していると解釈してOKね
0060デフォルトの名無しさん
2006/08/30(水) 02:06:37いやいや、C99はC++との互換性を無視したので、これから新しい
プログラムをC99で書いた物をC++に移植する時に大変な手間が
必要になるのも一因でしょう。
CPUに例えれば、x86がセグメント方式という8086当初の汚点を
未だに引きずっても互換性を重視した結果バカ売れしたのに対し、
Motorolaの流れはColdfireのような組み込み系に変わって行って
しまったのに似てますね。まあ制御系はCPUの数だけから言えば
PCで使われている数よりもずっと多いんですけども。
0061デフォルトの名無しさん
2006/08/30(水) 02:09:40C++との住み分けのつもりなのかな。
0062デフォルトの名無しさん
2006/08/30(水) 02:12:13ベンダーもなかなかC99対応のコンパイラ出さないし。ICCとかは
完全対応してるんだっけ。
まあD言語みたいにマニア向けの色が強くなってると思う。
0063デフォルトの名無しさん
2006/08/30(水) 02:16:12つーかあと5年は早く出しとけよって感じだ。
0064デフォルトの名無しさん
2006/08/30(水) 02:21:40いやあと8年早く出て欲しかった。そしてC99の上位互換性を持つC++が
作られるという流れにして欲しかったなあ。
C99の致命的な欠点はクラスが作れないという事です。OOPをするのに
C言語と同じ苦労をしなければいけない。これは生産性に重大に関わります。
0065デフォルトの名無しさん
2006/08/30(水) 02:24:35必要な人はgccあるし、あえてCに戻ってもらっても困るしさ。
そして、言語仕様をいっぺんに拡張してまったく別物のようになってしまって、対応コンパイラも普及してないからマニア向けな感じがするのかな。
どのあたりをターゲットと見据えて言語拡張したんだろ。
0066デフォルトの名無しさん
2006/08/30(水) 02:28:24生産性とかも、CにはCのよさがあって、クラスとかなら他の言語でゴニョゴニョ・・
0067デフォルトの名無しさん
2006/08/30(水) 02:31:02OOPに関して問題を感じるなら、
C++を推進するとか、他のOOPLを推進するとか、
どっちにせよCを離れるが吉だと思われ。w
0068デフォルトの名無しさん
2006/08/30(水) 02:31:490069デフォルトの名無しさん
2006/08/30(水) 02:31:57あるCやC99を使うでしょうね。友人がC++の組み込みプログラムを
書いてるんですけど、STLはばっさりけずられてるし、言語仕様も
結構縮小されて、出来るだけバイナリを小さくするようにしてるそうです。
0070デフォルトの名無しさん
2006/08/30(水) 02:35:00Embedded C++ だな。日本の企業が実装の難しい機能をばっさり削って
「Embedded C++ 準拠」と宣伝したいがために策定した規格。
作成意図がほんとでこんなんじゃないかと信じてしまうほどの糞規格。
0071デフォルトの名無しさん
2006/08/30(水) 02:41:15はい、それですまさに。プログラムの保守性と生産性を保つために
クラスだけは残したような。
0072デフォルトの名無しさん
2006/08/30(水) 02:42:50組み込みとか、速度重視とか、バイナリ小さくとか、描画速くとか
そういったかゆいところで本領発揮する、実によくきく薬なんで
しょう。
C99の拡張も特にPC向けを考慮しているわけではないと思うけど
0073デフォルトの名無しさん
2006/08/30(水) 02:43:32そんなことないよね?
0074デフォルトの名無しさん
2006/08/30(水) 02:54:25http://ja.wikipedia.org/wiki/Embedded_C++
0075デフォルトの名無しさん
2006/08/30(水) 02:58:27読んだ。
固まった。
顎が落ちた。
なんだこりゃ。
C++じゃねえじゃん。
マジで>>70が言うとおりコンパイラ実装側が手を抜くためとしか思えんな!
誰が使うんだ、こんな糞規格って
>>71が可哀想すぎる…
こんなのってないよ…
0076デフォルトの名無しさん
2006/08/30(水) 06:59:23今更名前にC++が入ってるのは詐欺だな。
0077デフォルトの名無しさん
2006/08/30(水) 07:32:38委員会のメンバが胡散臭すぎる。
0078デフォルトの名無しさん
2006/08/30(水) 10:02:29return;
}
void b () {
return a ();
}
これとくに警告とか出ないんですけどこういう書き方正しいんでしたっけ?
return a ();のところ
0079デフォルトの名無しさん
2006/08/30(水) 10:04:55C++ では有効。それが無いと template 書くときに困る。
0080デフォルトの名無しさん
2006/08/30(水) 10:10:08gcc使ってたんですけど今-pedanticというオプションつけたら警告出ました
それつけわすれてました
0081だいころ
2006/08/30(水) 11:45:16何か良いフリーのソフトを配布しているサイトをご存知でしたら、
教えて貰えないでしょうか。
宜しくお願いします。
0082デフォルトの名無しさん
2006/08/30(水) 11:53:21へ へ|\ へ √ ̄| へ
( レ⌒) |\ ( |\)| |/~| ノ ,__√ /7 ∠、 \ . 丶\ _ __
|\_/ /へ_ \) | | | |∠ | |__ | / ! | | |_〜、 レ' レ'
\_./| |/ \ .| |( ̄ _) | ) | | i | へ_,/ ノ ,へ
/ / ̄~ヽ ヽ. | | フ ヽ、 ノ √| | ! レノ | !. \_ ー ̄_,ー~' )
/ /| | | | | |( ノ| |`、) i ノ | | \_ノ ノ / フ ! (~~_,,,,/ノ/
| | | | / / | | . し' ノ ノ | | / / | |  ̄
\\ノ | / / | |___∠-". | | ノ / ノ | /(
\_ノ_/ / (____) し' ノ/ / / | 〜-,,,__
∠-''~ ノ/ (_ノ 〜ー、、__)
0083取り敢えずdoxygen
2006/08/30(水) 11:54:13スレタイ読めますか?
0084デフォルトの名無しさん
2006/08/30(水) 12:45:52「明解C言語入門編」
「解きながら学ぶC言語」
「プログラミング言語C」
で勉強していこうと思います。
これらで効率よくプログラミングを学んでいける方法、
読み方を教えてください。
0085デフォルトの名無しさん
2006/08/30(水) 12:47:111ページ目から始めて、最終ページまで読めばいいと思うよ。
0086デフォルトの名無しさん
2006/08/30(水) 12:52:220087デフォルトの名無しさん
2006/08/30(水) 13:07:39doxygenでも使え。
0088デフォルトの名無しさん
2006/08/30(水) 13:14:14最近の初心者は最初からやるべき参考書を沢山ピックアップしすぎ。
1冊何か読んでちゃんと理解すれば次に何を読むべきかわかるから、
その時に2冊目を買えばいい。何にもわからないうちに買い置きするのは危険。
解きながら学ぶC言語って、明解C言語入門編例解演習の改定本だろ?
明解C言語入門編と相当内容が被っているから両方買った時点で効率悪すぎ。
0089デフォルトの名無しさん
2006/08/30(水) 13:22:02そうです。明解Cは少しずつ読み進めていて、
問題もたくさん解いたほうがいいのかなと思って購入してしまいました。
明解だけに絞って進めていこうと思います。
最初問題を解くときなどは、問題を見たら
すぐに回答を見て理解しながら自分で写すいった方法でいいのでしょうか?と
それとも時間をかけまず1から自分で全部考えてみてから回答を見て、
こういう方法でやるんだ、と納得して次に進む方法がいいのでしょうか。
後者だと時間が結構かかってしまいます。
0090デフォルトの名無しさん
2006/08/30(水) 13:28:39しかし俺はそんな超人的なことは無理で、問題をよく考えて解説を何度も読んで、それでなんとか理解できる程度。
何が言いたいかというとだ、こんな所で聞く時間があったら1ページでも多く読め
0091デフォルトの名無しさん
2006/08/30(水) 13:30:18大学受験勉強は、問題を見てすぐ答えを見てその流れを理解して覚える、
といったような方法を取ってきていたのですが、
プログラミングとなるとどう勉強していったら分からないといったところが
率直なところです。
大学では、ちょこちょこと説明した後課題が出されて、
それについて自分でいろいろ調べといていくといったやりかたでやってますが
自習となるとちょっと・・・
0092デフォルトの名無しさん
2006/08/30(水) 13:33:25テストで良い点を取るための勉強とは違うのだよ
0094デフォルトの名無しさん
2006/08/30(水) 13:49:51>大学受験勉強は、問題を見てすぐ答えを見てその流れを理解して覚える、
なにその非効率な勉強方法
解きもしないで身につくわけがない
C言語も同じ
0095デフォルトの名無しさん
2006/08/30(水) 13:52:27宿題を提出したり、テスト当日漬けには物凄く効率はいいがな。
ただ、指摘どおり身に付かないので追えなくなったらニート確定w
0096デフォルトの名無しさん
2006/08/30(水) 13:53:52落ちたときにつらいw
0097デフォルトの名無しさん
2006/08/30(水) 14:02:19一概に非効率だとは言い切れない。
だがプログラミングの勉強においてその方法は何の役にも立たない。
0098デフォルトの名無しさん
2006/08/30(水) 14:18:16実行させて思う通りに動かなくて悩んで・・・そうやって憶えるもんだ
009984
2006/08/30(水) 14:39:53大学受験でこの勉強方法が効率的だった(というか自分に合っていた)というのは
実体験も含めて分かってます。ここでそれは特に説明はしません。
>>94>>97>>98で言われているように
プログラミングに関しては効率的ではないことは分かりました。
ただ、初歩の部分というのは覚えだけのことが多くありますよね。
それにも>>98の方法が本当に効率的なのかというのは疑問でもあります。
もうちょっと参考書の使い方の部分まで考えていきたいのです。
例えば、
まずその章の説明を読んで例題を読む。
次にそれを自分で書き写しながら理解していく。
そこから同じことを使う練習問題を何題か解いてみる。
というような感じで。
0100デフォルトの名無しさん
2006/08/30(水) 14:42:39早く理解すること より 正しく理解すること のほうが重要な分野だぞ?
010184
2006/08/30(水) 14:46:36なるほど。としか言い様がありません。
プログラムの経験が極浅いために、
イマイチ受験的な考えから抜け出せない感じです。
0102デフォルトの名無しさん
2006/08/30(水) 14:48:550103デフォルトの名無しさん
2006/08/30(水) 15:09:50人にアドバイスを貰っておいて、今度はそれを疑いだすとか基地外か?
第一、今のお前には、どんなアドバイスを貰っても
それが本当に効率的かどうかを判断できる能力が備わってないだろ。
本当は自分の中である程度勉強法が固まっていたものの、
不安だったので背中を押してもらおうとスレ住民に聞いたが、
反発されたのでうだうだ言っている。そんな風にしか見えない。
■ このスレッドは過去ログ倉庫に格納されています