!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
C言語なら俺に聞け 151
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cf8f-fy95)
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0498デフォルトの名無しさん (ワッチョイ 9f79-ScLU)
2019/05/12(日) 15:34:15.26ID:SbCKIsfP0 質問です
テキストファイルから文字を1文字ずつ読み込んでchar型の2次元配列matrixに入れていきたい。
この時改行は配列に入れたくないときどうすれば良いですか?
うまくいかないコード
for (i=0;i<10;i++) {
for (j=0;j<10;j++) {
if (fgetc(fp) == ‘\n’) {
continue;
}
matrix[i][j] = fgetc(fp);
}
}
テキストファイルは行数と列数があらかじめ分かってるとして
例えば
AAAAAAAAAA
BBBBBBBBBB
…
のようなファイルです
テキストファイルから文字を1文字ずつ読み込んでchar型の2次元配列matrixに入れていきたい。
この時改行は配列に入れたくないときどうすれば良いですか?
うまくいかないコード
for (i=0;i<10;i++) {
for (j=0;j<10;j++) {
if (fgetc(fp) == ‘\n’) {
continue;
}
matrix[i][j] = fgetc(fp);
}
}
テキストファイルは行数と列数があらかじめ分かってるとして
例えば
AAAAAAAAAA
BBBBBBBBBB
…
のようなファイルです
499デフォルトの名無しさん (アウアウカー Saeb-NBbm)
2019/05/12(日) 15:51:11.62ID:L7lYUohVa fgetc二回呼びたいの?
500デフォルトの名無しさん (ワッチョイ d77f-hzJM)
2019/05/12(日) 16:10:46.32ID:7kDDqNbD0 >>498
continueだと内ループ先頭に戻るから違うんじゃないの
continueだと内ループ先頭に戻るから違うんじゃないの
501デフォルトの名無しさん (ワッチョイ ff12-f8ez)
2019/05/12(日) 16:24:47.11ID:R31sKZyy0 >>498
.for ... {
. for ... {
. char c = fgetc(fp);
. if (c != '\r' && c != '\n') {
. matrix[i][j] = c;
. }
. }
.}
.for ... {
. for ... {
. char c = fgetc(fp);
. if (c != '\r' && c != '\n') {
. matrix[i][j] = c;
. }
. }
.}
502デフォルトの名無しさん (ワッチョイ 9f79-ScLU)
2019/05/12(日) 17:12:05.74ID:SbCKIsfP0503経団連 ◆T6xkBnTXz7B0 (ワッチョイ 1701-PJeF)
2019/05/12(日) 17:22:08.08ID:uLUIsoqa0 for (i=0;i<10;i++) {
for (j=0;j<10;j++) {
matrix[i][j] = fgetc(fp);
}
fgetc(fp); //読み捨て
}
for (j=0;j<10;j++) {
matrix[i][j] = fgetc(fp);
}
fgetc(fp); //読み捨て
}
504デフォルトの名無しさん (ワッチョイ b77c-NBbm)
2019/05/12(日) 17:29:14.22ID:CrklWm7I0 変な例出すなよ…
505デフォルトの名無しさん (ワッチョイ 9f1e-bWAY)
2019/05/12(日) 17:29:29.19ID:gzai7Rgq0 サイズが固定なら fread でよくない?
そうすべきというほどのものでもないだろうが。
そうすべきというほどのものでもないだろうが。
506デフォルトの名無しさん (ワッチョイ 577b-djxj)
2019/05/12(日) 17:35:10.27ID:x4ccFx6b0 >>498
「うまくいかない」症状を見れば、もう少し見当がつくんだけど…。
格納先の配列を char matrix[LINES][CHRS]; とか定義して、
printf("%s\n", matrix[n]); で表示してるの違うかな。
各行の文字列の末尾にあるべき '\0' が格納されてない、みたいな。
「うまくいかない」症状を見れば、もう少し見当がつくんだけど…。
格納先の配列を char matrix[LINES][CHRS]; とか定義して、
printf("%s\n", matrix[n]); で表示してるの違うかな。
各行の文字列の末尾にあるべき '\0' が格納されてない、みたいな。
507デフォルトの名無しさん (ワッチョイ ff63-gMth)
2019/05/12(日) 17:36:33.22ID:JjryTeWM0 2重ループやめても良いか?
while (1) {
int c = fgetc(fp);
if (c == EOF) {
break;
}
if (c == '\n') {
continue;
}
matrix[i][j] = c;
j++;
if (j == 10) {
i++; j = 0;
}
}
while (1) {
int c = fgetc(fp);
if (c == EOF) {
break;
}
if (c == '\n') {
continue;
}
matrix[i][j] = c;
j++;
if (j == 10) {
i++; j = 0;
}
}
508デフォルトの名無しさん (ワッチョイ ff63-gMth)
2019/05/12(日) 17:38:28.80ID:JjryTeWM0 501の方法だと'\n'読んだ時に、スキップしているけど
ループ変数の方は ++1 してるからズレてくる
ループ変数の方は ++1 してるからズレてくる
509デフォルトの名無しさん (ワッチョイ 9f79-ScLU)
2019/05/12(日) 18:35:08.99ID:SbCKIsfP0510デフォルトの名無しさん (ワッチョイ ff63-gMth)
2019/05/12(日) 18:43:30.54ID:JjryTeWM0 >>509
10個読んで1個捨てる
10個読んで1個捨てる
511デフォルトの名無しさん (ワッチョイ 3702-vVMj)
2019/05/13(月) 20:38:42.19ID:WOFscy660 バッファにつめるところを簡単にしてみた。
https://ideone.com/fJ91BI
https://ideone.com/fJ91BI
512デフォルトの名無しさん (オッペケ Sr8b-lJiK)
2019/05/14(火) 06:41:01.67ID:7SLYc+Rqr OSSで構造体を公開しようとおもってる
そのサイズをバージョンアップしても固定にしたいんだけどいいアイデアないかな?
struct foo {
int a;
double b; // ここをバージョンアップで追加
}
char[100] buffer;
上記を予め含めておいて、追加サイズ分だけ減らすってのがよくある手段だと思うけど、intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
パディングでサイズも変わっちゃうしね
C++ならテンプレートでいけるけど、OSSだから利用者が多いC言語で書いておく必要がある
構造体を公開しないで、ハンドラとセッタで扱えばいけるだろうけど、今回は構造体でいきたい
そのサイズをバージョンアップしても固定にしたいんだけどいいアイデアないかな?
struct foo {
int a;
double b; // ここをバージョンアップで追加
}
char[100] buffer;
上記を予め含めておいて、追加サイズ分だけ減らすってのがよくある手段だと思うけど、intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
パディングでサイズも変わっちゃうしね
C++ならテンプレートでいけるけど、OSSだから利用者が多いC言語で書いておく必要がある
構造体を公開しないで、ハンドラとセッタで扱えばいけるだろうけど、今回は構造体でいきたい
513デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
2019/05/14(火) 08:01:00.18ID:YNmKUGxB0 「sizeof(int)が環境依存」を前提にするなら
バージョンアップ以前のint a;だけでもう既にサイズ固定じゃないじゃん
int32_tですら必ずある保証はないよ
「汎用な記述で全ての環境に対応したい」ってのが、土台無理な注文なのよ
低レベルなことやるなら、サポートする環境を列挙限定しなければならない
素直に「よくある手段」でやりなさいってことだ
バージョンアップ以前のint a;だけでもう既にサイズ固定じゃないじゃん
int32_tですら必ずある保証はないよ
「汎用な記述で全ての環境に対応したい」ってのが、土台無理な注文なのよ
低レベルなことやるなら、サポートする環境を列挙限定しなければならない
素直に「よくある手段」でやりなさいってことだ
514デフォルトの名無しさん (アークセー Sx8b-Vhni)
2019/05/14(火) 08:07:10.74ID:0o/9QF7Tx >>512
処理系によるパディングとかの問題を別にしたら、bufferをunionにしといたらわざわざ減らさなくても良いのでは?
処理系によるパディングとかの問題を別にしたら、bufferをunionにしといたらわざわざ減らさなくても良いのでは?
515デフォルトの名無しさん (オッペケ Sr8b-lJiK)
2019/05/14(火) 08:25:38.55ID:7SLYc+Rqr >>513
たしかにint aですでに違うね
ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
そのときにセグメンテーションフォールトがでないようにしたい
だから、すべての処理系で同じサイズにしたいってわけじゃなくて、同じ処理系の中ではバージョンにかかわらずサイズを保ちたいってことなんだよね
説明不足ですまん
たしかにint aですでに違うね
ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
そのときにセグメンテーションフォールトがでないようにしたい
だから、すべての処理系で同じサイズにしたいってわけじゃなくて、同じ処理系の中ではバージョンにかかわらずサイズを保ちたいってことなんだよね
説明不足ですまん
516デフォルトの名無しさん (アウアウエー Sadf-NBbm)
2019/05/14(火) 08:36:30.40ID:2RiYyx1fa あらゆる環境だったらシリアライズしないとだし。
同じ処理系だったら同じ構造体でいいだろうし。
同じ処理系だったら同じ構造体でいいだろうし。
517デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/14(火) 13:41:09.36ID:d9/Wmgv60 >>514 のはこんな感じですかの
union foo {
struct {
int a;
double b; // ここをバージョンアップで追加
};
char dummyBuffer[100];
};
union foo {
struct {
int a;
double b; // ここをバージョンアップで追加
};
char dummyBuffer[100];
};
518デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/14(火) 13:59:44.65ID:d9/Wmgv60 構造体の大きさが char[100] に収まってる範囲での話
>>512 のように末尾に用意したギャップを引き算していくにしても、引ききれなくなった段階で破綻するよね
※ 突破したことをチェックするには sizoef(union foo) と sizeof(char[100]) とを比較すんのかなぁ…
>>512 のように末尾に用意したギャップを引き算していくにしても、引ききれなくなった段階で破綻するよね
※ 突破したことをチェックするには sizoef(union foo) と sizeof(char[100]) とを比較すんのかなぁ…
519経団連 ◆T6xkBnTXz7B0 (ワッチョイ 1701-PJeF)
2019/05/14(火) 14:09:24.00ID:4po1tQ0w0 C99 <stdint.h>のuint*_t型を使った方がいいと思う。
520デフォルトの名無しさん (アウアウエー Sadf-NBbm)
2019/05/14(火) 14:39:04.31ID:2RiYyx1fa 普通符号付きでしょ
521デフォルトの名無しさん (ワッチョイ 7f7c-gMth)
2019/05/14(火) 14:51:20.14ID:5nOlmwWa0 符号プログラミングか
522デフォルトの名無しさん (アウアウエー Sadf-NBbm)
2019/05/14(火) 15:42:40.54ID:2RiYyx1fa 今はstatic_assertとかいうものがあるらしいぞ
これでコンパイル時にチェックすればよい
これでコンパイル時にチェックすればよい
523デフォルトの名無しさん (ワッチョイ bf54-vVMj)
2019/05/14(火) 21:12:50.85ID:8soz04JH0 >>512
不格好だけどこれでいけるよ
全部プリプロセッサで処理できて、構造体サイズは100バイト固定になる。
予想を超えてサイズを突き破った場合は別構造体作るしかないね。
#include <stddef.h>
struct inner_foo {
int a;
char buf[];
};
#define MAX_STRUCT_SIZE 100
#define BUF_SIZE (MAX_STRUCT_SIZE - offsetof(struct inner_foo, buf))
struct foo {
int a;
double b;
char buf[BUF_SIZE];
};
不格好だけどこれでいけるよ
全部プリプロセッサで処理できて、構造体サイズは100バイト固定になる。
予想を超えてサイズを突き破った場合は別構造体作るしかないね。
#include <stddef.h>
struct inner_foo {
int a;
char buf[];
};
#define MAX_STRUCT_SIZE 100
#define BUF_SIZE (MAX_STRUCT_SIZE - offsetof(struct inner_foo, buf))
struct foo {
int a;
double b;
char buf[BUF_SIZE];
};
524デフォルトの名無しさん (ワッチョイ 577b-djxj)
2019/05/15(水) 07:47:15.99ID:FPbZusNo0 >>523 ちょっと間違ってるみたい。
struct foo には struct inner_foo に double b; が追加されてるせいで
sizeof(struct foo) == MAX_STRUCT_SIZE にならない。
sizeof(struct foo) == MAX_STRUCT_SIZE + sizeof(double) になっちゃう。
inner_foo と foo とで char buf[] より前のメンバを一致させる必要がある。
struct foo には struct inner_foo に double b; が追加されてるせいで
sizeof(struct foo) == MAX_STRUCT_SIZE にならない。
sizeof(struct foo) == MAX_STRUCT_SIZE + sizeof(double) になっちゃう。
inner_foo と foo とで char buf[] より前のメンバを一致させる必要がある。
525デフォルトの名無しさん (ドコグロ MMdf-vyow)
2019/05/15(水) 08:35:12.84ID:0TljqresM526デフォルトの名無しさん (ワッチョイ 57f2-y0Vo)
2019/05/15(水) 08:56:22.39ID:nK0I7Knm0 データファイルの話なら分かるが、intのサイズが違う環境の共有ライブラリってそもそも使えるのか?
527デフォルトの名無しさん (アウアウウー Sa1b-NBbm)
2019/05/15(水) 09:12:43.64ID:e9I3VVqQa コンパイルは自分でしろって話だと思うよ。
そうすると単にメモリ配置を意識したプログラムだな。
当然、バイトオーダーも気にしろよっていう話に
そうすると単にメモリ配置を意識したプログラムだな。
当然、バイトオーダーも気にしろよっていう話に
528デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
2019/05/15(水) 09:32:21.44ID:k0yjAgrYa やっぱ int32_t みたいな環境に関係なく同じビット数になるやつにしといた方が良いんじゃないかな。
529デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/15(水) 09:45:02.94ID:25auY+1H0 515の
>ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
>そのときにセグメンテーションフォールトがでないようにしたい
構造体のパラメータを追加し共有ライブラリを差し替えつつ
呼び出し側のコンパイルは行わないって無理ないか?
旧ソースで追加されたパラメータ部分は不定値であって
その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…
>ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
>そのときにセグメンテーションフォールトがでないようにしたい
構造体のパラメータを追加し共有ライブラリを差し替えつつ
呼び出し側のコンパイルは行わないって無理ないか?
旧ソースで追加されたパラメータ部分は不定値であって
その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…
530デフォルトの名無しさん (ワッチョイ 9f2c-NS0m)
2019/05/15(水) 11:40:27.07ID:AfKgri370 構造体には、サイズの変わらない、ポインタだけを置いておいて、
実際の領域は、ライブラリ内で確保して使って、解放すれば?
実際の領域は、ライブラリ内で確保して使って、解放すれば?
531デフォルトの名無しさん (アウアウウー Sa1b-NBbm)
2019/05/15(水) 12:19:01.09ID:e9I3VVqQa さすがに実体を共有するという目的がないとこういう発想にはならんでしょ。
共有メモリとか、ファイルとか、通信とか。
共有メモリとか、ファイルとか、通信とか。
532デフォルトの名無しさん (オッペケ Sr8b-lJiK)
2019/05/15(水) 12:31:29.02ID:dMKqDPXvr >>529
呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね
#define version 2
void func (const struct* foo) {
func_impl(foo, version);
}
void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}
呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね
#define version 2
void func (const struct* foo) {
func_impl(foo, version);
}
void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}
533デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/15(水) 12:43:05.74ID:25auY+1H0534デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
2019/05/15(水) 12:53:24.07ID:k0yjAgrYa 構造体の中身を公開しないでポインタだけ使わせて読み書きする関数を別途用意するって方法もあると思う。オブジェクト指向の言語でのプロパティのようなものね。
内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。
内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。
535デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
2019/05/15(水) 12:59:51.65ID:Wbf0zcGJ0 exeがnew(malloc)するけど中をいじるのは全てdllの関数ってのはままある
dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに…
ってことだろう
>512の
>intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
>パディングでサイズも変わっちゃうしね
は全く関係ない話だったということだ
素直に「よくある手段」でやればいい
>514,517のunionもいいと思うけど
foo.aでアクセスできないよね?foo.body.aとかしないと
dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに…
ってことだろう
>512の
>intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
>パディングでサイズも変わっちゃうしね
は全く関係ない話だったということだ
素直に「よくある手段」でやればいい
>514,517のunionもいいと思うけど
foo.aでアクセスできないよね?foo.body.aとかしないと
536デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/15(水) 13:12:20.84ID:25auY+1H0 >>517 の foo.a でいきなりアクセスできる union が記述できるのは C11 からみたい
無名構造体/無名共用体
無名構造体/無名共用体
537デフォルトの名無しさん (オッペケ Sr8b-lJiK)
2019/05/15(水) 14:41:00.06ID:dMKqDPXvr >>535
intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで
dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで
dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
538デフォルトの名無しさん (アウアウウー Sa1b-NBbm)
2019/05/15(水) 14:56:07.34ID:e9I3VVqQa 数字付かないintのでかい方に合わせるなら、それこそunion使って明示的にオフセット決めるとか。
本当にそんなことしたいのか?という話は置いといて。
もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定せずにシリアライズ用のライブラリ使うのが正しいよ。
本当にそんなことしたいのか?という話は置いといて。
もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定せずにシリアライズ用のライブラリ使うのが正しいよ。
539デフォルトの名無しさん (ドコグロ MMdf-vyow)
2019/05/15(水) 19:35:47.81ID:0TljqresM540デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
2019/05/15(水) 20:46:54.27ID:Wbf0zcGJ0541デフォルトの名無しさん (ワッチョイ d7ab-xJZP)
2019/05/15(水) 21:55:29.06ID:ZaVTFrP70 win32apiはバージョンによって構造体の変数が追加になるから構造体のサイズを構造体の先頭にセットする
542デフォルトの名無しさん (ワッチョイ baa5-bDB9)
2019/05/16(木) 08:13:26.18ID:eEplP63Q0 windows.hのsmallで一時間潰した
543デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
2019/05/16(木) 19:38:59.34ID:GXqxfUU20 文字配列列sを逆順に文字配列tに格納して出力したいのですが、
以下のコードでは実行してもt=[]と出力されてしまいます
#include <stdio.h>
#define MAXLINE 1000
main()
{
char s[MAXLINE],t[MAXLINE];
int c,i,I;
for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i)
{
s[i]=c;
}
if(c=='¥n'){
s[i]=c;
++i;
}
s[i]='\0';
I=i;
for(i=i; 0<=i; i=i-1)
{
t[I-i]=s[i];
}
printf("t=[%s]",t);
}
どこがおかしいのでしょうか…
以下のコードでは実行してもt=[]と出力されてしまいます
#include <stdio.h>
#define MAXLINE 1000
main()
{
char s[MAXLINE],t[MAXLINE];
int c,i,I;
for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i)
{
s[i]=c;
}
if(c=='¥n'){
s[i]=c;
++i;
}
s[i]='\0';
I=i;
for(i=i; 0<=i; i=i-1)
{
t[I-i]=s[i];
}
printf("t=[%s]",t);
}
どこがおかしいのでしょうか…
544デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/16(木) 19:48:10.73ID:q0J7kB7g0 後のループの一発目は
s[i]='\0';
I=i;
/* ここのforを削って */
t[I-i]=s[i];
こういうことになるから
t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる
上記のは
1 2 3 4 \0 → \0 4 3 2 1 のコード
実装すべきなのは
1 2 3 4 \0 → 4 3 2 1 \0 となるコード
s[i]='\0';
I=i;
/* ここのforを削って */
t[I-i]=s[i];
こういうことになるから
t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる
上記のは
1 2 3 4 \0 → \0 4 3 2 1 のコード
実装すべきなのは
1 2 3 4 \0 → 4 3 2 1 \0 となるコード
545デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/16(木) 20:27:22.18ID:m1+/MMjMa 惜しいねえ。綺麗に逆に入ってはいるんだよな。
546デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
2019/05/16(木) 20:38:11.53ID:GXqxfUU20 おっしゃる通りでした…今度は上手くいきました
ありがとうございます
ありがとうございます
547デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
2019/05/16(木) 20:38:46.73ID:GXqxfUU20 おっしゃる通りでした…今度は上手くいきました
ありがとうございます
ありがとうございます
548デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/16(木) 21:09:34.65ID:q0J7kB7g0 自己解決できたようでなにより
整数の配列を逆に整列させるなら正解だったんだけどねー
「文字列」操作の落とし穴ですな
整数の配列を逆に整列させるなら正解だったんだけどねー
「文字列」操作の落とし穴ですな
549デフォルトの名無しさん (ワッチョイ 2c5f-N32O)
2019/05/18(土) 22:03:40.11ID:e0Mh58zT0 今C言語教室でSQLとGUIやってる初心者なんだがCでDB弄る仕事ってあるのか
JavaとかC#に取られそうだけど
JavaとかC#に取られそうだけど
550デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/18(土) 22:06:44.17ID:8rj7/ih6a sqliteは使うよ
552デフォルトの名無しさん (ワッチョイ 2c5f-N32O)
2019/05/18(土) 22:19:48.67ID:e0Mh58zT0 SQL使うのか慣れてないからあんまやりたくないんだよなあ
頑張るか
頑張るか
553デフォルトの名無しさん (ワッチョイ aa01-A+mh)
2019/05/18(土) 22:37:47.44ID:D3aJPSyb0554デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 22:53:12.41ID:RWbfx4gX0 むかーし、Pro*C って使った事がある
Cのソース内にSQLを埋め込み
プリコンパイルする感じ
今は流行らないかもしれない
Cのソース内にSQLを埋め込み
プリコンパイルする感じ
今は流行らないかもしれない
555デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/18(土) 22:58:45.45ID:8rj7/ih6a SQL使いこなしてる人ってすごいけど、正直ああはなりたくないという感じだよな。
556デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 23:01:53.11ID:RWbfx4gX0 賢いファイルシステムとして利用すると超便利だぞ
557デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 23:02:38.45ID:RWbfx4gX0 同じ事をCのロジックで組むとなると、アタマおかしくなるかも
558デフォルトの名無しさん (ワッチョイ 73c3-AU7T)
2019/05/18(土) 23:08:58.89ID:Y/SMFmS40 普通にアプリケーションの規模が大きくなるとsql使いたくなるだろ
そういう場合はsqlite使う
そういう場合はsqlite使う
559デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 23:10:30.33ID:RWbfx4gX0 5ちゃんねる専用ブラウザもsqlite使っているそうですね?
プログラムコードはCではないですが
プログラムコードはCではないですが
560デフォルトの名無しさん (ワッチョイ 8654-2aw6)
2019/05/19(日) 10:01:29.20ID:EV8D9m9A0 IoTのデバイス開発やってるけど、C言語でDBのクライアントライブラリ使ってるよ
561デフォルトの名無しさん (ワッチョイ 9ff6-EL+e)
2019/05/19(日) 16:30:57.06ID:b6d7Y/CF0 リーナスさんはC++嫌いつーてるしな
トレードマークのfuck口調で
トレードマークのfuck口調で
562デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/19(日) 17:49:51.40ID:V/GPYpFPa この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?
563デフォルトの名無しさん (ワッチョイ 4edc-EL+e)
2019/05/19(日) 19:08:51.80ID:SqCxdnVY0 大学の情報科の人たちってどのレベルでC言語使えるんですかね?
Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
564デフォルトの名無しさん (ワッチョイ 4652-EL+e)
2019/05/19(日) 19:17:39.10ID:Ic55MIMX0 人によるだろ
そもそも好きなやつは大学入る前からやってるからな
そもそも好きなやつは大学入る前からやってるからな
565デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/19(日) 19:22:28.74ID:qBoKnLB7a >>563
別に使えなくてもいいよ
別に使えなくてもいいよ
566デフォルトの名無しさん (ワッチョイ 9ff6-EL+e)
2019/05/19(日) 21:05:03.54ID:b6d7Y/CF0567デフォルトの名無しさん (アウアウカー Sa0a-ZkGz)
2019/05/19(日) 21:14:52.17ID:Y3pJ4vrOa >>566
お前が入ったの専門学校だろ?
お前が入ったの専門学校だろ?
568デフォルトの名無しさん (ワッチョイ 9ff6-EL+e)
2019/05/19(日) 21:19:32.43ID:b6d7Y/CF0 >>567
化学科だけど
化学科だけど
569デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/19(日) 21:24:37.32ID:RJz4Ejb00 学校だとアルゴリズムやシステム設計手法は学べるだろうが
練度が上がるのはやはり仕事を始めてからだと思う
練度が上がるのはやはり仕事を始めてからだと思う
570デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/20(月) 12:44:26.31ID:PSRVLRmYr コンピュータサイカヨウの基本は一通りやるんじゃない?
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
571デフォルトの名無しさん (ワッチョイ 328c-TfzP)
2019/05/20(月) 14:12:04.87ID:0d3wAWyu0 業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。
572デフォルトの名無しさん (ワッチョイ 462d-EL+e)
2019/05/20(月) 18:18:34.53ID:IJBxlZ980 仕事で出会った、いろいろな人を思い出すに、ガチに使える人材って凄いからなあ。
学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
573デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/20(月) 19:49:19.18ID:Nbm/sW0Oa おまえが使ってるんだったらおまえが偉いよ
574デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 00:42:18.33ID:jVHVO/YL0 setbuf関数っていつなんの為に使うんや?
バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
575デフォルトの名無しさん (ワッチョイ 1c79-N32O)
2019/05/21(火) 00:44:38.83ID:Hcv2vO/e0 ちまちま出力するより溜めてからまとめて出力した方が高速
576デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 01:29:10.75ID:jVHVO/YL0 1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
577デフォルトの名無しさん (ワッチョイ 73c3-AU7T)
2019/05/21(火) 01:34:19.46ID:XM845/F70 10kbって小さくね
578デフォルトの名無しさん (アウアウカー Sa0a-ZkGz)
2019/05/21(火) 01:46:59.05ID:+xvLcOVEa というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。
基本変わらんよたぶん。
基本変わらんよたぶん。
579デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 01:47:43.41ID:jVHVO/YL0 確かに少ないな
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
580デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 02:21:13.21ID:Y+BS98b80 >>574
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
581デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 02:26:07.71ID:Y+BS98b80 >>576
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
582デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 03:47:59.45ID:jVHVO/YL0 >>581
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
583デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 03:58:34.93ID:Y+BS98b80 >>582
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
584デフォルトの名無しさん (ワッチョイ a601-uGxO)
2019/05/21(火) 04:24:32.31ID:zmxtmgNI0 既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です
585デフォルトの名無しさん (ワッチョイ 4101-MvwS)
2019/05/21(火) 05:39:22.97ID:SRv5ILQj0 >>576
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
586デフォルトの名無しさん (ワッチョイ 462d-EL+e)
2019/05/21(火) 06:44:08.98ID:UPiNM42a0 >>584
20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。
変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。
もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば
final int i;
System.out.println("test");
i=4;
System.out.println(i);
i=5;
System.out.println(i);
の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。
それに対して、(C89の頃のだけど)Cのconst変数は・・・
const int i;
printf("test\n");
i=0;
printf("%d\n",i);
1回目の代入(i=0)であっても怒られる。
みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。
変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。
もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば
final int i;
System.out.println("test");
i=4;
System.out.println(i);
i=5;
System.out.println(i);
の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。
それに対して、(C89の頃のだけど)Cのconst変数は・・・
const int i;
printf("test\n");
i=0;
printf("%d\n",i);
1回目の代入(i=0)であっても怒られる。
みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
587デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 06:49:56.40ID:tdstqwiHM >>585
そっちもあるけどAPI呼出し回数の削減もあるから
そっちもあるけどAPI呼出し回数の削減もあるから
588デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/21(火) 07:08:29.24ID:6muVxYSDr >>585
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
589デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/21(火) 09:19:53.31ID:BVi2WQ22a >>584
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。
ま、ちょっと試してみな。
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。
ま、ちょっと試してみな。
590デフォルトの名無しさん (ワッチョイ f6d2-cXFR)
2019/05/21(火) 10:05:33.15ID:DLRGb2lZ0 LTOのオプション
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?
591デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/21(火) 10:21:18.62ID:BVi2WQ22a >>590
それコンパイラ依存なのでは?
それコンパイラ依存なのでは?
592デフォルトの名無しさん (ササクッテロル Sp88-uMtI)
2019/05/21(火) 12:55:43.68ID:PZq+OQZ5p593デフォルトの名無しさん (ワッチョイ ae2c-rckI)
2019/05/21(火) 15:23:18.72ID:ZAINLMmO0 Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
594デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/21(火) 18:23:31.31ID:6muVxYSDr595デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
2019/05/21(火) 18:37:21.97ID:G/IUf+gXp C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか?
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
596デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/21(火) 18:40:11.67ID:UdJL+OJH0 ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…
597デフォルトの名無しさん (ワッチョイ 1c79-N32O)
2019/05/21(火) 18:54:48.20ID:Hcv2vO/e0 ファイルポインタは巻き戻せる
標準出力ならエスケープシーケンスで右上に行けばいい
標準出力ならエスケープシーケンスで右上に行けばいい
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
