トップページ⇒tech
1001コメント273KB

C言語なら、俺に聞け! <31>

■ このスレッドは過去ログ倉庫に格納されています
0001SHOW-A息子NGNG
漏れは32才。22年間、父SHOW-Aにプログラムを叩き込まれてきた。
いろいろな言語を極めたが、一番漏れになじんだのはCだった。
Cのことなら父をも超えた。疑問な点があったら漏れに聞け。

便所とメシ食ってる時以外は暇だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。あと、至急父に仕事を与えてやってください。

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0446デフォルトの名無しさんNGNG
formatでないものをprintfのformat部分に
渡すのは問題あるな。
0447デフォルトの名無しさんNGNG
>>446
おいおいなにいってんだ
0448デフォルトの名無しさんNGNG
printf関数は、char型ポインタを取ります。
>>446が正しい。
>>445を正しく動かしたければフォーマットをしていする。

printf("%c", h[i]);

ネタにマジレスですか?(w
0449448NGNG
いや、ちょっと待て。
ポインタで定義してるじゃん・・・
漏れが悪かった。
0450プログラム歴2ヵ月NGNG
最初に、VisualC++入門を買って意味解らずすてますた
探しまくって現在、初めてのC言語って本をなんとか読んでます
他に超簡単な入門書おしえて(ρ_;)
0451デフォルトの名無しさんNGNG
単に"%s", h[i]にしる、ってことでわ。
0452デフォルトの名無しさんNGNG
ポインタで定義?format?いったい何の話なんだよ
漏まえらなんかきらいだー。・゚(≧Д⊂;゚・。
0453436NGNG
配列を一気に全部書き込まずに、ループで一個ずつfwriteしても
同じでした。書き込みは正常に行われているみたいですが、
feofを使って調べてみた結果、26回目以降のfreadは
ファイル終端に達したと判断されて読み込んでいないみたいです。
なぜだ・・・
0454デフォルトの名無しさんNGNG
>>447

自分の参加しているプロジェクトのチームリーダー(30代後半)のプログラムをこの間覗いたんです。

そしたら・・

function(CString l_cstr)
{
CString cstr;
cstr.Format("%s", l_cstr);

何とか言ってやってください。
0455デフォルトの名無しさんNGNG
>>453
じれったい。
ネタはいいから早くタネを明かしてくれよ。
ネタじゃないなら該当のソースを見せろ。
0456デフォルトの名無しさんNGNG
教えて下さい
以下のように宣言した場合

#define MAX 100
struct field{ int data;
struct field *pt;
}node[MAX],*head;

上記において、node[MAX]という変数はstruct fieldという型だとわかるんですが、
では *head はどういう型を持つ事になるんでしょう?これも同じ型ですか?
0457デフォルトの名無しさんNGNG
>>454
なにがだめなの?
constの参照私じゃないから?
ちょく代入しないから?
たいした問題じゃないよ
0458デフォルトの名無しさんNGNG
>>456
*headはただのポインタ。
char *pStr
と同じ。
0459デフォルトの名無しさんNGNG
>>456
char c, *p;
というふうに続けて書くと、
char c;
char *p;
と同じ意味になる。
struct field {...} node[MAX], *head;
の場合は、
struct field {...};
struct field node[MAX];
struct field *head;
と同じ。こういう省略はC言語特有のスタイルなのだが、嫌う人も多いと思う。
0460デフォルトの名無しさんNGNG
>>457
Cで言えば、strcpyを使うべき所で、
わざわざsprintf("%s", ...)してるという事ではないか
0461デフォルトの名無しさんNGNG
おっとsprintfの引数が。まいっか
0462 NGNG
>>453
バイナリモードって知ってる?
0463424=435NGNG
>>441
ありがとです。
0464デフォルトの名無しさんNGNG
typedef struct{
char a1[3][3];
int a2;
int a3;
}A;

という構造体のサイズをsizeofを使って調べると20になってしまう。
本来なら17になると思うのですが。。(私の環境ではintは4バイト)
どなたかよきアドバイスを!
0465デフォルトの名無しさんNGNG
>>464
構造体のアライメント、で検索するよろし
0466デフォルトの名無しさんNGNG
>>464
パディングやアラインメント
をキーワードに今すぐgo!
0467デフォルトの名無しさんNGNG
>>464
俺の環境だとsizeof(A)は256になるね(sizeof(int)は4)
0468デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c2.html#13
2.13:
構造体にsizeof演算子を使ったら、私が思っていたよりも大きな大きさを返して
きた。まるで、おしりに詰め物がしてあるようだ。
0469デフォルトの名無しさんNGNG
>>465,466
産休!気になってしょうがなかった
0470デフォルトの名無しさんNGNG
>>468
末尾に詰め物がされることはあっても、メンバー間に詰め物がされることはないんだっけ?
0471デフォルトの名無しさんNGNG
>>470
んなことはない。ネタだったらごめんよ。
0472デフォルトの名無しさんNGNG
>>471
いや、マジ質問・・・
どこに詰め物がされても実際にプログラミングするうえでは困らないんだけど、ちょっと興味あるから。
0473デフォルトの名無しさんNGNG
たぶん、ビットフィールドにすればキッチリ詰まるのかな?
0474デフォルトの名無しさんNGNG
ビットフィールドか・・・
なんか構造体みたいな形だったような・・・それとマルチバイト文字のところは全然勉強していないな-_-;
0475471NGNG
>>472
たとえば、464 の構造体の場合、
コンパイラのデフォルト設定では
char a1[3][3];
の直後に3バイトとか7バイトの隙間ができる方が
俺的な世界においては一般的だと思う。(もちろん処理系にもよる)
0476473NGNG
なんか配列はビットフィールドにならないぽ
0477デフォルトの名無しさんNGNG
詰めたいと思う動機がサパーリわからんのですが
0478デフォルトの名無しさんNGNG
>>477
バイナリファイルに保存する時とか。
0479デフォルトの名無しさんNGNG
>464
(char)(char)(char)(----)
(char)(char)(char)(----)
(char)(char)(char)(----)
(    int      )
(    int      )
char : 1バイト
int : 4バイト
(----)の部分が埋められカウントされて20になるのでしょ。
(int)の長さに合わせる為になる。
というか、一番長い部分に合わせなかったっけ?(char,int longのレベルで)
構造体の大きさの計算はこんな感じになるはずだと思ったけれどね。
charのサイズを[2][4],[5][5],[4],[8],[9]とか替えてみれば
大体の法則性と言うものが見えてくると思うけれどね。
結果はsizeof(A)/sizeof(char)で出しているかな?
今回は悩むことも無いけれど、sizeof(int)で
割った数値を使ったりすることもあるからね。
0480デフォルトの名無しさんNGNG
>>479
> (----)の部分が埋められカウントされて20になるのでしょ。
ネ、ネタだと言ってくれ。頼む。
0481デフォルトの名無しさんNGNG
> 結果はsizeof(A)/sizeof(char)で出しているかな?
ネ、ネ 以下略。
0482デフォルトの名無しさんNGNG
>>479
配列の内部は断片にならないと思うぞ。マジレス
参考までに、MinGWのgccでchar a1[3][3]をsizeofしたら9と出た。
0483456NGNG
464さん、激サンクス
0484デフォルトの名無しさんNGNG
gcc で x86 なら4バイトアラインメントだから、

(char)(char)(char)(char)
(char)(char)(char)(char)
(char)(--------------)
(------- int --------)
(------- int --------)

こうでしょ。
で、構造体を直接操る必要があって、かつプラットフォーム非依存にしたいときは、

typedef struct {
char a1[3][3];
char padding[3]; /* unused */
int a2;
int a3;
} A;

とかしておく。
............で、あってる?
0485デフォルトの名無しさんNGNG
>............で、あってる?
AAの部分だけは合ってるよ。他は×。
0486484NGNG
>485
>AAの部分だけは合ってるよ。他は×。
まじ?......(´・ω・`)ショボ-ン
0487デフォルトの名無しさんNGNG
ファイルからgetcで一文字ずつ読み込んで,読んだ文字によってifで処理を変更させる
プログラムを書いているんですけど,改行文字の直前に謎の文字が入っており,
処理がうまくいきません.printf等で表示させても何も見えません.
この謎の文字の正体は一体何なのですか??
0488デフォルトの名無しさんNGNG
>>487
シラネーヨ
ソース出せ。
0489485NGNG
>>486
あ、ごめん。
>gcc で
の箇所を見落としてたので謹んで訂正する。

前半は合ってるよ。
後半は×。
その方法ではプラットフォーム依存の解決にはならない。
0490488NGNG
ソースじゃなくて読み込むファイルの中身か。。。
0491デフォルトの名無しさんNGNG
\r\n
0492デフォルトの名無しさんNGNG
>>491
ということはあいつ、バイナリモードで開いているのか・・・
つりし?
0493デフォルトの名無しさんNGNG
printfで数字列にすれば分かると思う。>>487
0494デフォルトの名無しさんNGNG
> printf等で表示させても何も見えません.

書式指定して数値で確かめろよ。
そうすれば13って表示されるよ。
0495436=453NGNG
>>462
ありがとうございます!!!
8年越しの謎が解けました!!
大解決です!!
0496デフォルトの名無しさんNGNG
>>495
ま、まじで?
0497デフォルトの名無しさんNGNG
>>495
UNIX使え。
0498487NGNG
>>491-494
解決しました.マジで助かりました.
ありがとうございます!
0499デフォルトの名無しさんNGNG
srand()の種に、WindowsAPIのtimeGetTime()のようなミリ秒単位の値
をLinux上で使いたいのですが、代わりのようなものはあるでしょうか?
0500デフォルトの名無しさんNGNG
gettimeofday
0501デフォルトの名無しさんNGNG
>464
ttp://member.nifty.ne.jp/fgalel/kouza/entc/part2/entc23.html
0502デフォルトの名無しさんNGNG
Rubyは?
0503デフォルトの名無しさんNGNG
>>502 釣り禁止
0504デフォルトの名無しさんNGNG
MICROSOFTのVC++6.0のPROには、
最適化できる機能がありましたが、
VC++NETのStandard Editionには
最適化の機能がありますか?
0505デフォルトの名無しさんNGNG
そんな事知りませんよ。マイクロソフトに聞いて下さい。
0506デフォルトの名無しさんNGNG
Standardには常に無い
0507デフォルトの名無しさんNGNG
関数の戻りを無視する時、
(void)foo();
とvoidにキャストするのは正義ですか?悪ですか?好みの問題ですか?

コードレビュー時に、後輩にどうアドバイスするか決めかねているので
仕様ではこうなってるなど、なにか良い根拠があれば教えてくださいませ。
0508デフォルトの名無しさんNGNG
>>507
正当だが悪。
0509507NGNG
>>508
俺も嫌いな書き方なんだけど、例えばsplintは(void)つけないと警告出してくるので、
俺が悪なのかなぁと。

で、どうなの?
0510MusasiNGNG
仕事がんばって見つけてください
age
0511デフォルトの名無しさんNGNG
何日か目を離しただけで、もう500オーバーしとる…
0512デフォルトの名無しさんNGNG
lintにかけるのはやめようよ・・
0513デフォルトの名無しさんNGNG
>>507
memsetやstrcpyも戻り値は存在するけどその返り値を見てますか?
0514507NGNG
ふだんsplintなんて使ってられないけど、明日は指導するフリをしなきゃいけないんで………
0515デフォルトの名無しさんNGNG
>>509
社の方針に従え。
我が社では糞。
0516507NGNG
>>513
なんか煽られ気味だなぁ。じゃぁ(void)なんて書くなヴォケ、死ねDQNと言っておきます。
0517デフォルトの名無しさんNGNG
>>513
strcat(s1,strcat(s2,s3));ってのがあったらしいぞ w
素直にsprintf使えって w
0518指導する練習NGNG
>>517
snprintf (or equivalent) 使え
0519デフォルトの名無しさんNGNG
>>518
はい(´・ω・`)
0520デフォルトの名無しさんNGNG
lispっぽくていいじゃん。おれもそうやって書くことにします!
0521デフォルトの名無しさんNGNG
lispっぽいとイイのか。へえ
0522デフォルトの名無しさんNGNG
すみません、ちょっと教えて欲しいんですが。
0523デフォルトの名無しさんNGNG
>>522
ちょっと待ってね。
0524デフォルトの名無しさんNGNG
うんこがでません。どうしてですか?
0525デフォルトの名無しさんNGNG
>>524
知りません。

次の方ー
0526522NGNG
すみません。そろそろ質問してもいいでしょうか?
0527デフォルトの名無しさんNGNG
駄目
0528522NGNG
まんこって実在するの?
0529522NGNG
そろそろ質問してもいいでしょうか?
0530デフォルトの名無しさんNGNG
>>522
ん?全然面白くないぞ。
0531522NGNG
すみませ〜ん、誰かいますか?
0532デフォルトの名無しさんNGNG
(-1: 荒らし)
0533デフォルトの名無しさんNGNG
>>522
質問があればぜひこちらでどうぞ。

http://pc3.2ch.net/test/read.cgi/tech/1029763932/
0534デフォルトの名無しさんNGNG
>>522
http://pc3.2ch.net/test/read.cgi/tech/1031568119/
こっちもお勧めだ。
0535デフォルトの名無しさんNGNG
「質問してもいいか」という質問が再帰的に行われ、
その先には進めなくなると言ってみる。
0536デフォルトの名無しさんNGNG
main関数の戻りはexitとreturnで返すのでは何か違いがあるんでしょうか?
0537デフォルトの名無しさんNGNG
>>536
exitを使えばプログラムないのどこからでも強制的に終了できる。
return でexeを終了するにはmain関数からしかできない。
多田それだけ。
0538デフォルトの名無しさんNGNG
>>536
C-FAQでは基本的に違いは無いと言っている。
0539デフォルトの名無しさんNGNG
/bin/ladin
0540デフォルトの名無しさんNGNG
>>536
abortっつーのあるぞ。興味があれば調べれ。
0541デフォルトの名無しさんNGNG
raise()でSIGTERM送っても終了するんだったかな。
0542デフォルトの名無しさんNGNG
>>541
デフォルトの挙動では、な。
0543デフォルトの名無しさんNGNG
>>537-542
ありがとうございました。
0544デフォルトの名無しさんNGNG
オーバーロードってどうやるんですか?
0545デフォルトの名無しさんNGNG
>>544
オーバーロード自体を知って訊いてるのかと小一時間
■ このスレッドは過去ログ倉庫に格納されています