C言語なら俺に聞け 159

■ このスレッドは過去ログ倉庫に格納されています
2022/08/04(木) 23:32:27.83ID:yWVViPyIM
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C2x ドラフト
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.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/

※前スレ
C言語なら俺に聞け 158
https://mevius.5ch.net/test/read.cgi/tech/1640401906/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/09/06(火) 20:15:43.73ID:TAdoM7Dg0
>>122
C23 に static_assert は入る。
C11 から _Static_assert が有ったけどこれも Alternative Spelling として残る。
124デフォルトの名無しさん (ワッチョイ c710-CzlZ)
垢版 |
2022/09/07(水) 01:40:32.73ID:nFqp2Ghc0
構造体の一括初期化の仕組みがよくわかりません。
#include<stdio.h>
enum Flag { First = 1, Second = 2, Third = 3, Finish = 4 };
typedef struct _FSM {
size_t eof;
size_t bytes;
size_t flags;
} FSM;
static FSM initState = { 0, 0, First};

void FSM_init(FSM *self) {
self = &initState;
}

int main(void) {
FSM fsm;
FSM_init(&fsm);
printf("%zu", fsm.flags);
return 0;
}
とFSM_initでFSM構造体のメンバの初期化を行おうとしたのですが、fsm.flagsにはゴミの値が入ってしまいます。
&self = initState;ではなく一つ一つ所属物を初期化すればちゃんと初期化できるのですが、
できればこの一括で初期化する方法のどこがまずいのか教えてほしいです。
125デフォルトの名無しさん (ワッチョイ c710-CzlZ)
垢版 |
2022/09/07(水) 01:42:03.54ID:nFqp2Ghc0
肝は
static FSM initState = { 0, 0, First};
でここの初期化がまずいみたいですがよくわかりません。
2022/09/07(水) 01:45:22.24ID:n6FjKa3l0
*self = initState;
127デフォルトの名無しさん (ワッチョイ c710-CzlZ)
垢版 |
2022/09/07(水) 02:03:29.87ID:nFqp2Ghc0
>>126
うまくいきましたが、すいません。
*self=initState;

self = &initState;
の違いがわかりません。
ポインタに対してなんでアドレスを渡す形だとまずいことが理解できません。
2022/09/07(水) 02:27:51.81ID:FvUlSDCrd
>>127
>self = &initState;
selfはアドレスをコピーした仮引数
2022/09/07(水) 03:14:26.39ID:7wpEGaL10
*selfはselfの実体の参照
&initStateはアドレスの参照
2022/09/07(水) 07:32:36.16ID:UR0dF6Y90
>>127
self = &initState;
これはポインタ変数selfにinitStateのアドレスを代入するが
このままFSM_init関数から戻っているので、代入結果が即座に破棄され
何もしていないに等しい

*self = initState;
これはポインタ変数selfが指し示す先つまり構造体変数fsmに
構造体変数initStateの内容を転記する
FSM_init関数から戻ってもmainの変数fsmは残っているので
後続のprintf関数の実行結果に反映される
2022/09/07(水) 09:54:43.70ID:S6Oj2ikO0
void func(int a) { a = 10; }

int b = 50;
func(a);

とやっても a は 10 にならず a は 50 のまま
関数引数の型のままの書き戻しは 呼び出し元に反映されない
これを int → int * に読み替えた場合が質問のケース
2022/09/07(水) 10:01:21.59ID:S6Oj2ikO0
訂正
 int b = 50;
 func(b);
 とやっても b は 10 にならず b は 50 のまま
2022/09/07(水) 10:16:34.68ID:S6Oj2ikO0
・ポインタを渡して関数内ではその指し先を利用して内容を書き換える (scanf みたいな感じ)
・戻り値で内容をどかっと戻す (=呼び出し元で代入してね)

Cの文法ではこの2パターン
2022/09/07(水) 20:35:02.84ID:DxyXj8J8H
>>127
参照 & は「ポインタで書くやりかた」の見せ方を変えただけ、と考えるのがいい
すなわち、ポインタを使った書き方に習熟しないかぎり、参照の意味はわからない
参照をポインタから切り離して理解するのは不可能

参照がわからなければ、まず、ポインタを使った書き方ばかりで書きまくり、ポインタなら自信がある、くらいになるのがいい
参照はポインタを理解してからはじめて使い始めるべきもの
135デフォルトの名無しさん (ワッチョイ c710-CzlZ)
垢版 |
2022/09/07(水) 21:11:00.47ID:nFqp2Ghc0
>>134
いやさすがにそこはわかるんで・・・。

ポインタ変数を格納している仮引数に新しいアドレス値を代入しても
関数から出たら破棄されるので意味ないってことやね。
ポインタ変数宣言してたんで勝手に実体参照されるものかと思ってた。

当初fsm構造体のメンバにstateという構造体の変数をおいてそれを初期化していたので、
fsm->state = &initState;
だとうまくいくのになんでだろうと思って聞いた。
この場合、fsm->stateで実体参照しているわけやね。
136デフォルトの名無しさん (ワッチョイ c710-CzlZ)
垢版 |
2022/09/07(水) 22:08:19.73ID:nFqp2Ghc0
FILE *fp;
errno_t err;
err = fopen_s(&fp, "file.txt", "rb");
でfopen_s関数の場合、第一引数はFILE構造体のポインタのアドレス参照したものを
渡さないといけないですが、これなんでポインタじゃまずいんですか。
2022/09/07(水) 22:22:19.78ID:gjYyI5to0
ポインタに入ってる数値を書き換えるからそうじゃなきゃ変えられないでしょ
fopenの中でメモリ確保しててそのポインタの数値を確保したアドレスに書き換えてるの
2022/09/07(水) 22:26:00.67ID:9LeLCbkKH
もっとも、私は pascal から入ったから、ポインタなくして参照を理解していた人なのではありますが‥‥うーむ
2022/09/07(水) 22:31:50.29ID:gjYyI5to0
ポインタのアドレス取ったときとかポインタのポインタでごちゃごちゃになる人は
とりあえずポインタは整数を保存してるだけって考えればいいよ
整数を関数内で書き換えるためにはそれをポインタ渡しする必要があるので参照演算子つけて渡すの
140デフォルトの名無しさん (ワッチョイ c710-CzlZ)
垢版 |
2022/09/07(水) 23:04:25.54ID:nFqp2Ghc0
>>137
なるほど。
FILE *fp の中身が0というアドレスで、
fopen_sの中で例えば123456というアドレスに変更したいんだったらポインタ自体渡しても
変更できないことですね。*つけてポインタにならないと変更できないと。
2022/09/07(水) 23:32:06.28ID:zeO2o007M
int hoge(int *a) { *a = 1; }
int hoge(int &a) { a = 1; }
これが全く同じアセンブリ言語にコンパイルされるのを見て、参照を理解した
2022/09/07(水) 23:35:11.50ID:nFqp2Ghc0
>>141
int hoge(int &a) { a = 1; }
関数定義でアドレス演算子使えるんですか?
2022/09/07(水) 23:39:24.34ID:nFqp2Ghc0
何回も質問しているものです。
base64エンコーディングのプログラムを作っていました。
エンコード部分は作れた、と思ったのですが、certutil -f -encode の結果と
突き合わせると後半合いません。
1行目もなぜか幅が合いません。
状態マシンを初めて作って実装したのでどこが問題かわからないのでだれか見ていただけませんか。

https://ideone.com/rPlXWX
2022/09/07(水) 23:39:37.84ID:51dNe1to0
>>142
それは C++ の機能の話ね。
機械語にされたときの実体としては参照はポインタと同じことをしている。
2022/09/07(水) 23:41:02.70ID:nFqp2Ghc0
最初の付近はうまくエンコードされているんですが、途中でごみの値が入ってくる
ようでずれてきます。どこにゴミが入っているのかわかりません。
2022/09/08(木) 00:50:34.87ID:0dKPxAYF0
tmpfile()で作られる作業ファイルはどこに作られますか?
/tmpですか?
なんかそれらしきファイル無いんですが

OS:Linux Mint
2022/09/08(木) 01:00:19.58ID:MG9wnc1h0
>>146
glibc だと P_tmpdir が使われた上で失敗したら /tmp に作る。
musl だと /tmp に決め打ち。
作ったファイルはクローズするかプロセスが終了したら削除される。
2022/09/08(木) 02:30:52.24ID:MgWIrRAL0
コードの構造が自分でもわかり難かったので、フルスクラッチで書き直しました。
https://ideone.com/ddQPJy

でも相変わらずどこかにゴミデータが入り込んでいるようです。
C言語特有の問題に由来していると思うのですが。。
2022/09/08(木) 02:56:32.93ID:m+If4M0FM
>>148
上から下までスクロールしたら一瞬で分かったw
2022/09/08(木) 08:55:08.15ID:0dKPxAYF0
>>147
サンクス
読み書きは出来るので作業ファイルは作られているんだろうけど・・・
getchar()でプロセスが終了しないようにしててもP_tmpdirの場所(/tmp)に作業ファイルは作られてないわ

なんかモヤモヤするな
2022/09/08(木) 09:15:06.66ID:MG9wnc1h0
>>150
3.11 以降の Linux カーネル、かつファイルシステムのサポートがあれば名前のないファイルを作るということらしい。
他のプロセスからは観測することが出来ない。
152デフォルトの名無しさん (アウアウウー Sa8b-Ro21)
垢版 |
2022/09/08(木) 09:25:12.09ID:JEMfdspaa
>>143
3の倍数と4の倍数でずれるから
穴埋め方法の仕様嫁
2022/09/08(木) 09:54:46.94ID:NWgtv/6U0
8bit目が立ってるデータだと char を size_t にキャストするとよろしくない可能性
あと末尾のパディング処理

最新は rfc4648 か
2022/09/08(木) 10:12:47.05ID:dSUuwrfW0
>>148
わざわざenum定義してるのに使うための変数をsize_tで宣言するとか意味わからんw
2022/09/08(木) 10:22:53.70ID:dSUuwrfW0
>>150
作った直後にunlinkすれば他のプロセスからは見えなくなるしプロセスが異常終了したら勝手に削除されるからunixの時代からテンポラリファイルのtipsとして有名だよ
https://sonic
64.com/2004-12-07.html
2022/09/08(木) 10:30:42.77ID:MG9wnc1h0
>>148
主旨とはずれるが……

下線で始まる識別子はファイルスコープで予約されている。
下線で始まって大文字が続く識別子は常に予約されている。
予約されている識別子についてなんらかの宣言・定義した結果は未定義。
入門用の解説でやってることもよくあるけど真似しちゃ駄目。

構造体タグは使わないなら省略してしまったほうがよいと思う。
2022/09/08(木) 10:34:35.91ID:0dKPxAYF0
>>150
>>155

ありがとう!すっきりした
2022/09/08(木) 10:35:11.25ID:0dKPxAYF0
>>150>>151
2022/09/08(木) 23:34:00.51ID:QimgDhZ1M
>>148
解決したのか知らんけど、freadが必ずBUFSIZE分読み込むとは限らんぞ
なので、直後のforループはnreadまでにしないとゴミを処理してしまう
2022/09/09(金) 00:38:56.32ID:eFldOldK0
>>159
ありがとう。まだ未解決。格闘中。
なんとかそこには気づいたんですが、どうすればeofまでの分読み込ませればいいかわからず、
結局1バイトづつ読み込ませるしかないのかと思ってましたが、nread分読み込ませればいいのか。
ただ、最終行以外もゴミデータが紛れ込んでいるようなのでそこの原因がなんなのか。
2022/09/09(金) 01:45:37.54ID:eFldOldK0
読み込むデータによってゴミデータが入ったり入らなかったりすることがわかった。
すごい厄介なバグだわ。某所から2進数表示する関数パクッて全部表示させてみると
ある特定の箇所でスタックデータが0b11111....に初期化されているみたい。

https://ideone.com/HRogms
読み込みデータはこのプログラム”base64s.c”だとこの現象がでる。
何がまずいのかな。
2022/09/09(金) 01:56:18.41ID:eFldOldK0
わかった。日本語部分が処理できてなかったことが原因だ。

vscodeでWindows、clangでコンパイルしているんだけど、freadで単純に読み込んで
出力すると日本語部分が文字化けしてしまうのはなぜ?
2022/09/09(金) 01:57:45.15ID:eFldOldK0
1バイトで読み込んでるから2バイト文字がうまく読み込めないということかな?
2022/09/09(金) 02:04:19.38ID:eFldOldK0
1バイトづつバイナリデータを読み込みしたかったので、fread(buf,...)の
bufは
char buf[BUFSIZE];
で宣言したのですがここが2バイト文字のバイナリ読み込むときにまずいんでしょうか。

単純に自分自身のコードを読み込んで標準出力に書き込むと文字化けする。
https://ideone.com/GvpcAm

010111....のビット列を単純に書き込んでいるという理解だったのですが、
そういうわけではないんですかね?
165デフォルトの名無しさん (ワッチョイ 7f46-bBdM)
垢版 |
2022/09/09(金) 02:19:22.29ID:V/M3y8c30
>>153が正しい
size_t stack = (size_t)(unsigned char)c;
2022/09/09(金) 02:52:44.78ID:eFldOldK0
>>165
スタックデータが11111・・・に初期化されるという問題は直りました。
charだと11111111の取り扱いまずいんですね。
char 0~255 の値を格納できるという素朴な理解で使ってたんですが、
unsigned char と char ってどう違うのか、ざっと調べたんですけどよくわかんないですね・・・。
2022/09/09(金) 02:53:47.99ID:eFldOldK0
>>153
読み返してみると鮮やかですね。昨日の段階では何のことやら?って感じでしたが。
ありがとうございます。
2022/09/09(金) 03:37:48.54ID:JkEyHRIQ0
>>166
>unsigned char と char ってどう違うのか

unsigned charは符号なしで値域は 0 ~ 255
signed charは符号ありで値域は -128 ~ 127

charは処理系依存でsignedかもしれないしunsignedかもしれない
他の整数型にキャストしたり比較したりする時は特に注意が必要
2022/09/09(金) 06:49:36.79ID:Cx7xgzBv0
>>168
char は 8bit とは限らん、というのは置いといて
> charは処理系依存でsignedかもしれないしunsignedかもしれない
charはsigned charやunsigned charとは違う型だよ
https://www.jpcert.or.jp/sc-rules/c-str04-c.html
170デフォルトの名無しさん (ワッチョイ bfad-Am0N)
垢版 |
2022/09/09(金) 10:32:00.65ID:PQbAFFlG0
数値と文字コードの認識の違いはどこらへんに出てくるのでしょうか?
171デフォルトの名無しさん (ワッチョイ c701-tE3/)
垢版 |
2022/09/09(金) 16:58:25.15ID:ZqL3j+SP0
環境依存によるとこが多すぎて、その都度環境に応じて調べるしかない
プログラム全般に言える事
2022/09/09(金) 20:26:03.68ID:wh55t5+tM
文字はutf-8でも一文字が数バイト必要な事があるので、charはもはや要らない子と言える
バイト列を使いたければuint8_tを使って、ちゃんと文字として扱うなら、wchar_tとかchar32_tを使うべきだろうね
2022/09/09(金) 20:34:47.77ID:AfgZ2PrAM
なお中国や日本、韓国などに限る
2022/09/09(金) 21:21:58.31ID:CwUslwUl0
wchar_tこそ要らない子やん
お前一体何バイトなんだよ
2022/09/09(金) 23:02:27.43ID:JkEyHRIQ0
>>169
>char は 8bit とは限らん、
うん、その指摘はされると思ってた。
>charはsigned charやunsigned charとは違う型だよ
なるほど、その認識はなかったは。
2022/09/09(金) 23:22:11.84ID:qKP12tcq0
自分はvb→C言語→機械語だけど
機械語知らないとダメだよなって思ったわ
大体CPUの仕様と合わせるんだよな
8bitも昔のCPUの慣習出しさ
だからプレステのCPU大好きとかライゼンサイコー、いやいややはりインテルだろう
なんて言う自作オタがやり始めるとかなり速いんだよな
自作PCの構造はCPUの中身に似てるから
2022/09/10(土) 00:37:03.60ID:d6i83HiwM
>>174
Windowsだと2byteでLinuxだと4byteだな
しかしバイト数を気にしてはいけない
気にしなければ可搬性のあるコードを書ける
2022/09/10(土) 02:16:33.70ID:bSy2C3T30
文字化けのところは手に負えないですが、おかげさまでbase64エンコーディングプログラムが完成しました。
ここで言われたことは全部含めてみました。
構造体のタグ、enum型、charじゃなくてuint8_t、終端処理など。

https://ideone.com/7wolLZ

コードが汚いなど直すところありましたらどしどしご意見ください。
とりあえず、最初に使ってみる言語はbase64エンコーディングプログラムを組んでみて
なれてみようという方針なので。
次はVBAで組んでみるか、sha256プログラムをC言語で組んでみようか考えてます。
2022/09/11(日) 09:33:54.88ID:LP1WepGR0
struct tmって、冗長な設計になってるよね
たとえば tm_mon == 1 && tm_mday == 1 なら tm_yday == 0 のはずだけど tm_yday >= 1 にもなれる
こういう矛盾がある場合の扱いって規格票のどっかに書いてあったっけ?
2022/09/11(日) 14:26:36.00ID:Y1sYJFelM
たとえば規格書のmktimeにはカレンダー時間で表現できなければ-1を返すって書いてあるかそう実装するのが正しそうだけども
2022/09/11(日) 14:31:15.93ID:D/VbhUuk0
>>180
tm_yday は無視するとも書いてあるぞ。
2022/09/11(日) 14:32:58.51ID:LP1WepGR0
レス㌧x

カレンダー時間で表現できるか否かということは
tm_year, tm_mon, tm_mdayのことで、tm_ydayには該当しない議論だよね
逆にtm_ydayに合わせるように補正はしないとなると
ここに優先順位があるのかな
2022/09/11(日) 14:34:54.92ID:LP1WepGR0
すまん、ちょっと外出する
夜には戻る
2022/09/11(日) 14:37:22.22ID:Y1sYJFelM
あらほんとだ。戻り値の説明しか見てなかったわ
2022/09/11(日) 15:00:19.15ID:hGIJSvzu0
>>182
そもそもtm_wdayとtm_ydayは更新されるって書いてあるし
関係ないけど
・tm_mday: 1 から 31 の範囲の日付。
・tm_mon: 1 月からの月数 (0 から 11 の範囲)。
なのは毎回もやるわ、なぜ両方0スタートじゃないのか...
2022/09/11(日) 15:04:45.97ID:D/VbhUuk0
>>185
月は (英語では) 月の名前に置き換える (配列から名前を引く) という都合から自然にそうなったという説は聞いたことがあるな。
日は番号をそのまま表示するもんだから最初から番号通りのほうが都合がいいし。
2022/09/15(木) 17:53:22.84ID:gNCVLuZy0
ローカル変数の宣言で、宣言しようとしているポインタの初期化子に、同じ文で
宣言された変数を参照するのは規格上OKですか?

/* test1.c */
1 | int main(int argc, char **argv)
2 | {
3 | char s[100] = {'A'}, *p = s;
4 | int i = 10, *a[10] = {&i};
5 | return 0;
6 | }

最新の gcc で試したところ、-std=c89 -pedantic の場合に下記の警告が出ます。
特に3行目が OK で、4行目が駄目な理由がよく分からないです。
どちらもスタック上の相対位置はコンパイル時に決まると思うのですが。
Cの文法について詳しい方、教えてください。

gcc --version
gcc (GCC) 12.2.1 20220819 (Red Hat 12.2.1-1)

gcc -O0 -std=c89 -pedantic -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -c test1.c
test1.c: In function ‘main’:
test1.c:4:27: warning: initializer element is not computable at load time [-Wpedantic]
4 | int i = 10, *a[10] = {&i};
|            ^

gcc -O0 -std=c99 -pedantic -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -c test1.c
警告なし
2022/09/15(木) 20:06:58.44ID:C6syfEgyd
C99より前は集成体(配列、構造体)に対する初期化子定数式(アドレス定数式)でスタックは認められていないっぽい
3行目の初期化対象は配列じゃないでしょ
2022/09/16(金) 06:50:50.62ID:jyhWPRLZ0
int main(void)
{
int a = a;
}
これもOKなんだが
2022/09/16(金) 19:26:37.47ID:alBs0lLWd
>>189
スタック上のアドレスを使ってポインタを初期化できるかって話だろ
2022/09/16(金) 19:31:34.25ID:alBs0lLWd
>>187
{&i}だけだったら初期化は簡単だけど
その書き方だと本来{&i,&グローバル変数,NULL...}などと書けるのでそうなると特殊な初期化が必要になるんじゃないかな
2022/09/16(金) 19:59:25.14ID:u2ZYVkG20
一見
スタックに実体をもつ配列の先頭はセーフで (3行目)
スタックに実体をもつ変数のポインタはアウトというふうに見えるけど (4行目)
{ } の中か否かの差もあるんやね
2022/09/17(土) 00:57:57.08ID:GfZyyjDu0
>>190
そんなん言い出したら自動変数をポインタで指せるのかさえ怪しくなってくるな
2022/09/17(土) 12:49:57.03ID:fh691Hyrd
スコープ内でアドレスが参照されたならば
自動変数はレジスタ変数にはならなくなる
「自動」の意味
2022/09/17(土) 19:52:14.52ID:fgoWI+8da
win10(以下win)
strawberry perl入れた時一緒にいれたgcc

wsl
ubuntu22.04 gcc

どっかでみた配列関係のサンプルで
(間違えるとnull見つかるまで一生探し続けるよ的なコード)
で試したら

winで値がおかしい
linuxで正しい

とりあえずwin側でgdbで見ると
winで格納アドレスが逆順になってました
例えばコード上で

array1うんたら
array2かんたら

とあって
array2がアドレス100番台
array がアドレス200番台
みたいになってました
この挙動は環境依存なのかバグなのか知りたいです

まぁ結局両方windowsなんですが
2022/09/17(土) 19:56:51.12ID:ZRyqS0700
ネットワークオーダーとかエンディアンとかが絡んでる可能性はあるけど、コードを見ないとなんとも
2022/09/17(土) 20:03:08.34ID:PxOaZq6Kd
>>195
抽象的すぎて全然わからんw
2022/09/17(土) 20:04:45.56ID:fgoWI+8da
コードは
https://www.delftstack.com/ja/howto/c/length-of-char-array-in-c/
手入力でミスってたらごめんなさい
2022/09/17(土) 20:08:18.29ID:fgoWI+8da
因みにこっちのwin環境だと
上サイトで24byteになるはずの所が10byteになります
2022/09/17(土) 20:22:45.77ID:ZRyqS0700
strlenのことか?
文字列と違ってchar配列の末尾には自動的にnull挿入されたりしないから、nullまで数え上げるstrlenが何を返すかわからないし、環境によってはメモリアクセス違反で落ちるかも
2022/09/17(土) 20:26:08.77ID:fgoWI+8da
いや多分違います

アドレスが逆

多分ここが重要なんですがその原因が
と言うところです
2022/09/17(土) 20:44:25.86ID:LY5v/fLv0
環境依存です
ゼロで終端されていないものにstrlenを呼んではいけません
そのコードが誤り
2022/09/17(土) 20:51:16.94ID:I+4Vfslra
うーん
そう言うことじゃなくて・・・
なんでメモリアドレスの格納が逆になるの?
と言うところです
cの規格的な話じゃなくてですね・・・
2022/09/17(土) 20:58:26.77ID:LY5v/fLv0
そのページを作った人の環境(コンパイラとバージョン)ではarr,arr2の順で
あなたの環境ではarr2,arrの順なんでしょ
たまたまそうなっただけです
2022/09/17(土) 21:10:35.35ID:I+4Vfslra
文系脳で行き着く先っていつもそうなんですよね
でも残念ながら「それ」がないんですよ
この世界

たまたま
なんかわかんないけど
偶然
楽しけりゃいいじゃん

なんで生きてるのお前?

馬鹿は嫌い 回線で首でも吊ってろカスが

ジパング馬鹿しかいないからもう寝る
2022/09/17(土) 21:15:00.75ID:W7nqA9Zmd
オタクくん怒って寝ちゃったw
207デフォルトの名無しさん (アウアウウー Sa5b-zcFf)
垢版 |
2022/09/17(土) 21:44:56.47ID:njcq0eeLa
スタックはアドレス高位から低位の方向に積まれることが多いから、arr2のアドレスがarrのそれより小さくなるとかですかね
2022/09/17(土) 21:46:48.25ID:aOSn8JHC0
そういう人を落とし込める記述はやめよう
2022/09/17(土) 23:27:39.41ID:eA0eWCp60
スタックの方向などは環境依存だろ

環境依存は他にも、little/big endian とか、
char が、0〜255, -128〜127 のどちらなのかとか

文字コードが、BOM 無しUTF-8 以外とか
2022/09/18(日) 01:46:10.06ID:3xNGEVex0
gdbの使い方、ここで質問してもいいですか?
2022/09/18(日) 02:19:18.49ID:OVhdQ/fk0
>>210
大きく言語自体から脱線するようだとあまりよくないかなと思うけど、
ささいなことなら多少は良かろうと思うし、程度次第じゃね。
2022/09/18(日) 02:40:43.36ID:3nFqfKLUH
>>209
UTF-8 に BOM は本質的に不要です
なぜならば BOM = Byte Order Mark ですが、UTF にバイトオーダーなど存在しません
BOM なし、と断ること自体、頭が悪い証拠を如実に表出していると愚考させていただきます

馬鹿は死ね
2022/09/18(日) 02:43:34.57ID:Z+lYrLLqa
はじめてのC言語完全入門!【Hello World〜ポインタまで徹底解説】
91,121 回視聴
freeCodeチャンネル
2022/09/18(日) 03:28:52.56ID:OVhdQ/fk0
>>212
BOM はエンコード方式の識別に使われる場合もあると公式 (unicode consortium) の資料に書かれている。
BOM が BOM という名前である以上は本来の用途からの転用ではあるが、
バイトオーダーだけを根拠にして不要と断じるのはエンジニアリング的に良い姿勢ではないな。
2022/09/18(日) 04:26:41.31ID:GkyrVNWr0
>>212
いい大人がバカとか4ねとか言ってるの見ると悲しくなってくるわ
人付き合いをろくにしてこなかった精神的にガキのおっさん痛すぎる
2022/09/18(日) 05:15:19.35ID:fdsnSmbGd
>>205
めちゃくちゃだよアンタw
文系ポエムは他でやんなさい
2022/09/18(日) 05:26:48.38ID:fdsnSmbGd
>>205
よく見るとそのページ内容がむちゃくちゃだなw
データが格納される順番はコンパイラ依存なのでそんなサンプルコードは作ってはいけない

「まず、arr のオブジェクトサイズは 24 バイトと表示されますが、」じゃねえよw
「内部の詳細を無視してしまうと恐ろしいエラーが発生する可能性があります。」もう起こっているw

以上
2022/09/18(日) 10:38:22.56ID:kY5VkQwD0
>>198
そもそも上のコード
size = 24 bytes
size = 17 bytes
この2つはどこから出てきたんだ?
printCharArray のあとの printf("size = %lu bytes \n", ... ); はひとつしかないのに

>>195
array1とarray2がそれぞれスタックに積まれるなら array2、array1の順は正しいし
array1とarray2がリテラルとしてコード上に存在するならarray1、array2の順は正しい
ただの最適化の問題じゃないのか
219デフォルトの名無しさん (アウアウウー Sa5b-8eP5)
垢版 |
2022/09/18(日) 13:53:49.44ID:KpBP36NGa
文系は全称と単称の区別が出来ない
大抵の馬鹿はこれで判別出来る
2022/09/18(日) 14:04:23.72ID:CIgAfYZs0
そういう表現も、大体根拠が希薄
血液型占いと同程度
2022/09/18(日) 14:12:29.01ID:Rev08jtKa
>>203
規格では一切順序の保証はないので
同じ結果が欲しければそのぺーじと同じ環境を用意してください
2022/09/18(日) 18:22:49.00ID:JcdidFMxd
機械翻訳まるだしだし
Pythonのおまけで載ってるだけだから
そんなページあてにするなとしか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況