- 1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
- C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 130代目 pc12.2ch.net/test/read.cgi/tech/1250204272/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 53 pc12.2ch.net/test/read.cgi/tech/1253110182/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 964 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:18:29 ]
- >>961
? バッファに際限なくたまるというのは確かにそうなってる時点でなんか変だと思う。 recv近辺のコードを上げてくれたらなんか分かるかも。
- 965 名前:951 mailto:sage [2009/10/29(木) 12:27:47 ]
- >>963
なるほど、覚えておくと見やすくなるだけでなく色々活用できるんですねえ… >>963 今まで平気で文字列として扱ってきたのですがバイトだったのですか! …それを知ったところで今すぐ何かが変わるわけじゃないのが不勉強なところですが 保存したレスをいつか発掘したら意味がちゃんと分かるようになってるといいなあ… >>964 相談したいのは山々なのですが ネットワーク周りはDXライブラリの関数を使用しているので ここだとスレ違いな気がするのです。
- 966 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:40:43 ]
- >>965
念の為に捕捉。 >963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。 終端されていないものにはstrlen()やstrcpy()などの関数が使えないから、意識しておかないとね。 だからと言って、受信バッファより多めにメモリを確保して事前にクリアするなんてのは下策。 尚sprintf()の場合は、>962にあるようにサイズ制限ができるからバイト列に対しても使えなくはない。
- 967 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:46:22 ]
- >>966
> >>963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。 別に>>963がどうとかじゃないよね。 Cにおける文字列の定義の話でしょ。
- 968 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:02:58 ]
- >>967
異論避け。それほど他意はない。
- 969 名前:デフォルトの名無しさん [2009/10/29(木) 14:38:26 ]
- 1から40までの数のなかで、3がつく数字とさんの倍数をすべて表示するプログラムを教えてください。
- 970 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 14:43:03 ]
- >>969
puts("3 6 9 12 13 15 18 21 23 24 27 30 31 32 33 34 35 36 37 38 39");
- 971 名前:デフォルトの名無しさん [2009/10/29(木) 14:44:44 ]
- >>969
#include <stdio.h> #include <string.h> int main(void) { int i; char buf[32]; for(i = 1; i <= 40; i++) { sprintf(buf, "%d", i); if (i % 3 == 0 || strchr(buf, '3') != NULL) { printf("%d\n", i); } } return 0; }
- 972 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 15:59:09 ]
- #define _XOPEN_SOURCE
#include <stdio.h> #include <unistd.h> int main() { char a[100]; *a = crypt("hogehoge", "EV"); printf("%s", a); return 0; } crypt関数について調べようと思ってこんなん作ったんだけどaに何も入らないのはなぜ? crypt関数自体がアレなのかなと思って int main() { char a[100]; printf("%s", crypt("hogehoge", "EV")); return 0; } を試しに実行してみたけどこれはまともに動いた。
- 973 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:12:20 ]
- gcc -Wall
- 974 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:19:50 ]
- >>972
char a[100]; の時、a は &a[0] と同じ つまり、*a はa[0]と同じ a[0] = crypt・・・ が変なのはわかるだろ。 strcpy使え。
- 975 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:22:14 ]
- *a = crypt("hogehoge", "EV");
は a[0] = (char)crypt("hogehoge", "EV"); と同じ
- 976 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:49:46 ]
- C言語学びはじめてもうすぐ半年になるが、いつになったらタッチタイピングできるようになるんだ
- 977 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:57:47 ]
- >>976
英語配列に変えてみた、、がまだ慣れない。
- 978 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:53:51 ]
- >>976
プログラミングとタッチタイピングを同時に学ぼうと言うのがそもそも間違い。 プログラミングは、基本的にキー入力速度が速い必要はないからね。
- 979 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 18:11:08 ]
- どうせなら C でタイピング練習ゲーム作ったらどうか。
- 980 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:11:55 ]
- ビット演算について質問です
char aの上位4バイトに 64以下の整数char bを代入したい場合、 (a & 0b00001111) + (b << 4) でできるのはわかるのですが、 もっと単純な表記方法はあるでしょうか?
- 981 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:14:17 ]
- ゲームセンターにあるタイピングオブザデッドに憧れてタイピング練習しはじめて
ローマ字覚える前にタッチタイピングマスターしちまったなぁ 最近出た第二弾はわからんがタイピング覚える気ならゾンビ打マジおすすめ 本当の意味でゲーム感覚で覚えられるタイピングソフト 他にもいろいろタイピングソフトやってみたがまともなのはこれしかなかった スレチごめんね
- 982 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:17:20 ]
- 環境によっては
union {struct {unsigned ah:4; unsigned al:4} s; char c} a; として a.s.ah = b; と書ける。 或いは、 a = (a % 16) + (b * 16); とも書ける。 いずれの場合も、bが16以上の場合は破綻する。
- 983 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:18:43 ]
- >>980
>char aの上位4バイトに 64以下の整数char bを代入したい場合、 char aの上位4ビットに 15以下の整数char bを代入したい場合、 の書き間違いかな?
- 984 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:19:17 ]
- >>980
charの上位4バイトってなんだよpgr
- 985 名前:980 mailto:sage [2009/10/29(木) 20:19:56 ]
- >982
どうも 4ビットって64じゃなくて16でしたね… こんなんでビット演算とかやらない方が安全か
- 986 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 21:11:02 BE:284013465-DIA(352353)]
- 次スレ立てました
C言語なら俺に聞け(入門篇) Part 55 pc12.2ch.net/test/read.cgi/tech/1256818218/
- 987 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 22:10:01 ]
- >>985
「こんなんで・・・」はないと思うぞ。 1ビットでも必要な時はビット演算をする。 そもそも何のためにやるのかだよね。
- 988 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:37:27 ]
- >>957
プ
- 989 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:47:58 ]
- 屁こくな
- 990 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:52:11 ]
- 間違いの指摘するならちゃんと教えてやれよ。
まあ、うっかりミスだろうから指摘するまでもないが。
- 991 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:56:33 ]
- >>982
そのunionの使い方って厳密には保証されないんじゃないっけ?
- 992 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:58:54 ]
- 俺にはその間違い探し難しすぎるぜ
- 993 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 08:44:31 ]
- >>991
上下どちらのビットから割り付けるかは処理系定義なので 移植性はないけどもどっちかに決まっているはず。
- 994 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:46:08 ]
- ume
- 995 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:50:06 ]
- >>991
処理系によっては、妙な割り付け方をするかもしれないね。
- 996 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:02:19 ]
- ume
- 997 名前:デフォルトの名無しさん [2009/10/30(金) 10:04:35 ]
- age
- 998 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:18:54 ]
- >>992
>957のことなら、& str[5 - 1]だ。
- 999 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:18:59 ]
- ume
- 1000 名前:デフォルトの名無しさん [2009/10/30(金) 10:21:41 ]
- 03e8
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|