【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/09/30(土) 19:56:29まず問題を冷静に吟味して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 129
http://pc8.2ch.net/test/read.cgi/tech/1156661024/
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0232デフォルトの名無しさん
2006/10/21(土) 12:26:35出せない奴乙
0233デフォルトの名無しさん
2006/10/21(土) 12:37:23理解してないのに口先だけで世の中渡ってこれたんだ?
それだけでも勲章モノだから、もう出しゃばらない方がいいと思うよ、うん
0234デフォルトの名無しさん
2006/10/21(土) 12:40:20それが、その、数ヶ月前のコードは、自分が書いたものに見えないんです。
まるっきり記憶が飛んでいて。まるで他人のコードを見ているように
感じます。それを1−2日かけて思い出すと、どうにか理解できる
場合があります。やはり歳かな。
0236佐賀
2006/10/21(土) 12:48:35「口先だけで世の中渡ってる」感が強い。
0238デフォルトの名無しさん
2006/10/21(土) 12:57:22〜ただいま>>218が真っ赤な顔で必死になっております〜
0239デフォルトの名無しさん
2006/10/21(土) 12:58:54コメントを書く際は、まず最初に
/* 【何でこんな処理しているのか】 */
/* ・・・ */
と書くルールを決める。
他に書きたい事があるだろうが、それらは後回し。
0240デフォルトの名無しさん
2006/10/21(土) 13:06:32んだね
プログラミング以前に戻って情報を引っ張ってこれるなら、
全体が、何を問題にして何を目標にどんな解決法でコードを導いたのか、一筆書き加えると後々楽だね
0241デフォルトの名無しさん
2006/10/21(土) 13:21:02構造化というか、クラスのように階層化できるのがベストなんだが。
0242デフォルトの名無しさん
2006/10/21(土) 13:21:36i++; //カウンタをインクリメント
とかアホかと
0243デフォルトの名無しさん
2006/10/21(土) 13:32:54確か専用スレなかったっけ?
0245デフォルトの名無しさん
2006/10/21(土) 14:33:17っ ttp://pc8.2ch.net/test/read.cgi/tech/1068752664/
0246デフォルトの名無しさん
2006/10/21(土) 14:36:210247デフォルトの名無しさん
2006/10/22(日) 13:38:31それは脳に血栓があるかもよ
場所によっては自己同一性にアクセスできなくなるから。
0248デフォルトの名無しさん
2006/10/22(日) 19:41:240249デフォルトの名無しさん
2006/10/22(日) 21:24:02arr
&arr
&arr[0]
&*arr
実質的に全部同じなんですが、違いを教えてもらえないでしょうか
0250デフォルトの名無しさん
2006/10/22(日) 21:31:37&arr だけ、型が違う。
0251デフォルトの名無しさん
2006/10/22(日) 21:37:04注意せよ、「実質的に」にひどい罠がある
0252デフォルトの名無しさん
2006/10/22(日) 21:42:04それを逆参照してまたアドレスを得ているだけなので、arrと&*arrは等価。
また添え字演算子は間接参照演算子などの糖衣構文であることから、&*arrと&arr[0]も等価。
故にarrと&arr[0]も等価。
&arrはというと、アドレス演算子が「式中で配列は先頭要素へのポインタに変換される」という規則の例外となっており、
配列そのものへのポインタが得られるということになっている。
まあ、ようするに&arrだけは結果の型がchar (*)[1]で、ほかは結果の型がchar *になる。
0253デフォルトの名無しさん
2006/10/22(日) 22:08:36>>252 よくわかりました。
>&arrだけは結果の型がchar (*)[1]で、
>ほかは結果の型がchar *になる。
0254デフォルトの名無しさん
2006/10/22(日) 22:14:57これは嘘
printf("%u", sizeof arr);
0255デフォルトの名無しさん
2006/10/22(日) 22:24:22そのコードで何を証明したつもりなの?
0256デフォルトの名無しさん
2006/10/22(日) 22:40:360257デフォルトの名無しさん
2006/10/22(日) 22:57:430258デフォルトの名無しさん
2006/10/22(日) 23:02:460259デフォルトの名無しさん
2006/10/22(日) 23:04:590260デフォルトの名無しさん
2006/10/22(日) 23:21:080261デフォルトの名無しさん
2006/10/22(日) 23:23:070262デフォルトの名無しさん
2006/10/22(日) 23:25:080263デフォルトの名無しさん
2006/10/22(日) 23:26:520264デフォルトの名無しさん
2006/10/22(日) 23:27:420265デフォルトの名無しさん
2006/10/22(日) 23:29:590266デフォルトの名無しさん
2006/10/22(日) 23:32:350267デフォルトの名無しさん
2006/10/22(日) 23:32:55char arr[1]={'A'};
arr
&arr
&arr[0]
&*arr
この次にやりそうなのを先に書いたんじゃないかな
とエスパー
0268デフォルトの名無しさん
2006/10/22(日) 23:44:45が怒っているように見えるのにエスパー
0269デフォルトの名無しさん
2006/10/23(月) 00:35:29マジレスするとsizeofも配列そのものの大きさを返すことから、アドレス演算子同様あの規則の例外。
0270デフォルトの名無しさん
2006/10/24(火) 15:06:26例) AB123cdを受け取ったら数字3、大文字2、小文字2
↑この答えお願いしますm(_ _)m
0271デフォルトの名無しさん
2006/10/24(火) 15:43:24#include<stlib.h>
#include<ctype.h>
int main(void) {
int numbers=0,upperCase=0,lowerCase=0;
char *p="AB123cd";
for( ; *p ; p++) {numbers+=(isdigit(p)!=0)?1:0;upperCase+=(isupper(p)!=0)?1:0;lowerCase+=(islower(p)!=0)?1:0}
printf("数字%n、大文字%n、小文字%n\n",numbers,upperCase,lowerCase)
return EXIT_SUCCESS;
}
0272デフォルトの名無しさん
2006/10/24(火) 15:57:06宿題スレ逝け阿呆。
0273デフォルトの名無しさん
2006/10/24(火) 16:07:34自分の間抜けさが露呈するから止めたほうがいいよ
0274デフォルトの名無しさん
2006/10/24(火) 16:28:350275デフォルトの名無しさん
2006/10/24(火) 16:29:590276270
2006/10/24(火) 16:37:39OSはWindows XP home SP1
グラフィックは GemeForce5200です。
ハードディスクは1が40ギガBで2が80ギガBです。
0277デフォルトの名無しさん
2006/10/24(火) 16:43:03それは本気で言っているのか
0278デフォルトの名無しさん
2006/10/24(火) 16:46:57あっ、Bはバイトです
0279デフォルトの名無しさん
2006/10/24(火) 16:48:11そのプログラムはGemeForce5200じゃ動かないよ
0280デフォルトの名無しさん
2006/10/24(火) 17:53:58WindowsでもUnixでも使える関数があれば教えてケロ。
0281デフォルトの名無しさん
2006/10/24(火) 18:13:16必要に応じてsetvbuf
0282デフォルトの名無しさん
2006/10/24(火) 18:20:25ありがとうございます。
できれば、サンプルをアップロードしてもらえるとうれしい。
0284デフォルトの名無しさん
2006/10/24(火) 18:51:49何かがおかしくなっていると感じるのだが
どこまでが正しかったのか分からない。
そんな経験ないだろうか。
0285デフォルトの名無しさん
2006/10/24(火) 20:02:14このスレが今そんな感じ
0286デフォルトの名無しさん
2006/10/25(水) 00:21:28mainと言う関数内で行いたいのですが、エラーが出てぜんぜんダメなんです。。。
誰か助けてください(泣)
わたしって馬鹿すぎですかね。。。
32bit処理系です(←関係ないですかね〜)
void ( *func )( void ) ;// 関数ポインタを宣言
void def( void ){//何か処理をする関数
}
void abc( void ){
func = &def ;// 関数defのアドレスをセット}
}
long check( void ){// 関数のアドレスを返す関数のツモリです
return( ( long )func ) ;
}
void main( void ){
if( check() == &def ){
//funcのの関数はdef
}
else{
//defでは無い
}
}
0287デフォルトの名無しさん
2006/10/25(水) 00:31:56キーボードから入力された文字列をHEXコードに変換するプログラムを書きたいんですけど
やりかたがさっぱりわかりません。
たとえばAと入力したとき、実際は0x41ですけどこれを0x0Aに変換したいんですがどなたか
アイデアをください。初心者なのでほんとお願いいたします。
0288デフォルトの名無しさん
2006/10/25(水) 00:35:06単なるwarnigじゃないんですか?
だとするとcheckのlongをvoid *にして(long)を取り払えばいいと思いますが。
0289デフォルトの名無しさん
2006/10/25(水) 00:36:180290デフォルトの名無しさん
2006/10/25(水) 00:41:59解答ありがとうございます。
明日会社で早速試してみます。
>>289
abc()は別の関数で呼んでいます、説明が悪かったと思います、申し訳ございません。
0291デフォルトの名無しさん
2006/10/25(水) 00:46:04distance = 'A' - 0x0A
putchar (getchar() - distance) ;
0292デフォルトの名無しさん
2006/10/25(水) 00:52:16printf ("%X", (getchar () - distance)) ;
0293デフォルトの名無しさん
2006/10/25(水) 01:13:18ありがとうございます。俺の書き方が悪かったんですが、これだと0〜9まで
の入力がうまくいかないんですよ。16進数だから16通りのIf分岐
でできそうだけどもっとスマートにできないかなと・・・。
0294デフォルトの名無しさん
2006/10/25(水) 01:34:02もちつけ。
頼むからもちついてくれ。
16進数で表現できるのは65536通りの数字なわけだが、1ビットごとに処理を分岐させるつもりかおまいさんわ。
0295デフォルトの名無しさん
2006/10/25(水) 01:36:26c2n(x){return (x&79)%55;}
0296デフォルトの名無しさん
2006/10/25(水) 01:47:35> 16進数で表現できるのは65536通りの数字なわけだが
オマエがおちつけ。
0297デフォルトの名無しさん
2006/10/25(水) 01:48:55そんな方法があったのか・・・
いつも0-9、a-f、A-Fの場合で条件分岐してやってたよ・・・
0298デフォルトの名無しさん
2006/10/25(水) 01:51:17落ち着かなくてイイ
ただこの世から消えてくれるだけでイイ
0299デフォルトの名無しさん
2006/10/25(水) 02:52:12保守担当者がリアルorzとなるのが目に浮かんで
オラなんだかとってもワクワクしちゃうぞ。
0300デフォルトの名無しさん
2006/10/25(水) 03:30:350301デフォルトの名無しさん
2006/10/25(水) 05:41:45達人は16段のifを使う
0302デフォルトの名無しさん
2006/10/25(水) 08:46:490303デフォルトの名無しさん
2006/10/25(水) 09:55:26>>302にgoto禁止を提示!
0304デフォルトの名無しさん
2006/10/25(水) 10:52:54それならキャラクタセットがASCII上位互換でなくてもOKだしなにより移植性が高い
0305デフォルトの名無しさん
2006/10/25(水) 13:01:48char* p = s;
�@
p + 100;
�A
p += 100;
�B
p += 100;
*p;
どの時点で未定義ですか?
それともすべて未定義?
0306デフォルトの名無しさん
2006/10/25(水) 14:09:370307デフォルトの名無しさん
2006/10/25(水) 14:23:070308デフォルトの名無しさん
2006/10/25(水) 14:29:241から値は不定になるよ。(例えばNULLと判定されても文句は言えない)
正常な比較等ができると保証されているのはs+10まで。
アクセスできるのは*(s+9)まで。
それと機種依存文字はやめた方がいいぞ。
他の板ならともかく、こういう板では互換性に気を配るべきだ。
0309デフォルトの名無しさん
2006/10/25(水) 16:57:590310デフォルトの名無しさん
2006/10/25(水) 19:51:27ありがとうございました。無事解決しました。
みなさんありがとうございました。
0311デフォルトの名無しさん
2006/10/25(水) 22:14:45struct A{
struct A *next;
};
ファイルb.c
struct A *aroot, *alist;
func_a(){
aroot = (struct A *)calloc(1, sizeof(struct A));
alist = aroot;
func_b();
alist = aroot;
while(alist = alist->next != NULL){
alistの要素を表示
}
}
ファイルc.c
extern A *alist;
func_b(){
while(){
func_c(alist);
}
}
func_c(struct A *list){
list = (alist->next = (struct A *)calloc(1, sizeof(struct A)));
}
大体このような感じでalistの要素を表示のところでalistの中身を次々に出ることを期待したんですが、
1つしか出ません。
アドレスを調べてみるとfunc_cを読んですぐの時点でlistのアドレスが毎回arootのアドレスになってました(順々にアドレスが増えていっていて欲しい)
func_cでcallocした後のアドレスは順々に増えていっています
なぜ1回1回listのアドレスがarootのアドレスに戻ってしまっているのでしょうか?
上記の範囲で問題があるのでしょうか?それとも書いてない部分に問題があるっぽいでしょうか?
0312デフォルトの名無しさん
2006/10/25(水) 23:33:51func_c(struct A **list){
*list = (alist->next = (struct A *)calloc(1, sizeof(struct A)));
}
って事?
0313デフォルトの名無しさん
2006/10/25(水) 23:49:21aroot = (struct A *)calloc(1, sizeof(struct A));
alist = aroot;
の辺りも意味不明だな
0314311
2006/10/26(木) 00:15:18まさにそれっぽいです
試してみます
>>313
arootの領域を確保しておかないとnextに代入しようとしたときにエラーが出ると思ったので
確保してからalistがarootを指すようにしたんですが
どう書くのが正しかったのでしょうか?
0315デフォルトの名無しさん
2006/10/26(木) 01:03:02>>289
今日、早速試してみたら問題なくできました!!
本当にありがとうございました。
今まで4年間アセンブラで書いていて、急に環境がC言語になってしまって・・・
C言語は難しいです。。。
0316デフォルトの名無しさん
2006/10/26(木) 01:34:140317デフォルトの名無しさん
2006/10/26(木) 01:37:00とりあえずインラインアセンブラで書いとけばいいんじゃね?
0318デフォルトの名無しさん
2006/10/26(木) 01:42:57ずっとアセンブラだけやってる人から見たら、そーゆーモノらしいよ。
とくにVBとかの高級言語になるともう完全にバイナリでの動作を
イメージ(する必要もないのに)できなくてギブアップしてしまうらしい。
まぁ、あれだ、彼らは言うなれば深海魚で浅い海にあがってくると破裂して死んでしまうんだよ。
0319デフォルトの名無しさん
2006/10/26(木) 01:54:240320デフォルトの名無しさん
2006/10/26(木) 01:57:30メモリ上にどのようにデータとコードが展開され、
レジスタがどのように使われるかわかんないと破裂しちゃうらしい。
0321デフォルトの名無しさん
2006/10/26(木) 02:45:36int(ポインタ)が20バイトとか考えてるのかな。
それじゃ、破裂しちゃう。
0322デフォルトの名無しさん
2006/10/26(木) 04:28:01コンパイルエラーが無いと破裂する
0323デフォルトの名無しさん
2006/10/26(木) 05:34:590324デフォルトの名無しさん
2006/10/26(木) 08:21:520325デフォルトの名無しさん
2006/10/26(木) 08:41:240326デフォルトの名無しさん
2006/10/26(木) 08:44:370327デフォルトの名無しさん
2006/10/26(木) 10:51:00ポインタの型依存な加減算で嵌るらしい。
アセンブラにも似たのはあるけど(type ptr)、参照時の抜き出す大きさ解決だけだしな…
0328デフォルトの名無しさん
2006/10/26(木) 11:12:400329デフォルトの名無しさん
2006/10/26(木) 11:40:06>イメージ(する必要もないのに)できなくて
不安になるんだろう。俺もVBやってると
「これNewしっぱなしで大丈夫なのか?」と不安になる事があった。
0330デフォルトの名無しさん
2006/10/26(木) 12:27:000331デフォルトの名無しさん
2006/10/26(木) 12:30:46不安になる必要はないぞ
ちゃんとリソースリークしてくれるから安心しろ
■ このスレッドは過去ログ倉庫に格納されています