C言語なら俺に聞け 143
レス数が900を超えています。1000を超えると表示できなくなるよ。
>>824
putsは知らんヤツ多いし、教育上、発展的ではない。 古典だし、コピペでもいいとしてるし
それなら printf にしときたい所存 putsは使ってないな一行読み込みだしその後の文字加工がめんどくさいからprintfで済ましちゃうな 初心者にprintfを教えると、信頼の出来ない文字列を第一引数として渡す事故が
起きかねないので教育上よろしくないのは常識
[MQ]Z はアホの代名詞 >>805
高橋まな?の
やさしいC
って本がおすすめ プログラミング初心者です
struct hoge *tmp = NULL;
以下うろ覚え
tmp->hage = xxxxx;
最近上記のようなコードに出会いました
明らかにNULLなのにアロー演算子で参照してもぬるぽしないことってあるんでしょうか? tmp->hage = xxxxx は、0番地にアクセスしてるわけじゃなくて
0 + hageのオフセット番地にアクセスしてるわけだから、
hageのオフセット番地が有効なメモリまでズレてれば
ヌルぽしないんじゃない? 組み込みならゼロ番地付近をアクセスするためにありうるかもな。
あるいは単にそのコード部分が動いていないか。 0番地に値を書くのと、ヌルポインタアクセスは見分けが付かないからなぁ なので、NULLの値を全く違う値にしてる処理系もあるんだよ。 >>837>>838>>839
皆さん凄いですね
確かにその可能性あるかもしれません
しばらくそのコードを確認できないので
確認できたら結果報告します >>810
HAL9000?
処理系あるんだっけ? >>838
> 組み込みならゼロ番地付近をアクセスするためにありうるかもな。
これで当たりだと思うけど、
そもそも組み込み(≒MMU無し)ならどこアクセスしてもヌルポしないがな。 >>835
そもそも何が起きてもおかしくない = なにも起きないかもしれない
から
コンパイラによってはコード生成すらしないことだってあり得るし >>843
> そもそも組み込み(≒MMU無し)ならどこアクセスしてもヌルポしないがな。
そんなもん機器による
ROM領域に書き込んだりなにも割り当てられてない領域を読み出したら例外を発生させるとか普通にある >>845
その例外を発生させるものがMMUなんだが 固定のアドレス範囲で例外出だけならMMUほどの複雑な機能いらないっしょ >>846
知ったか乙
アクセス対象がなかったらタイムアウトでバスエラーにするとかにMMUなんてものは要らん >>847-848
ゆとり死ね
つか組み込みの0番地なら普通にアクセスできるほうが多いと思うが。
ARMだとベクタのようだし。 ARMだと未割り当てエリアのアクセスは例外発生する >>849
> ゆとり死ね
指摘されたら逆ギレとかどっちがゆとりだよ w
> つか組み込みの0番地なら普通にアクセスできるほうが多いと思うが。
組み込みなんてピンきりだから普通にとか言っても意味ない
そもそも
> 組み込み(≒MMU無し)
の認識がおかしい
> ARMだとベクタのようだし。
ARMもピンきりでMMU持ってる奴も多いからARMだから0番地アクセスできるとか無知すぎる >>848
セグメントフォルト、バスエラーは同期例外だ
非同期(タイムアウト)でバスエラーなんか起きたら困る
知ったか乙 C言語じゃないけど聞いて良いですか(´;ω;`)
バッチ利用して設定ファイル書き換えたい
1. ユーザーに入力してもらう
2. iniの値をそれで上書き
x.ini
AAA=1
BBB=2
CCC=3
↓
AAA=1
BBB=192.168.0.1
CCC=3
キーはBBBで固定
設定値が少ないから一度全部読み込んで一行ずつtmpに書き込んで〜ってのも問題ない
一行ずつ読み込んで別ファイルに出力とかはできたんだけど
BBBなら〜って判別ができないです >>854
>C言語じゃないけど聞いて良いですか(´;ω;`)
ダメ >>855
そそそそんなぁ(´;ω;`)
まあそうだよね
すみませんでした >>853
恥の上塗り乙
68Kだと普通の設計だぞ
https://www.slac.stanford.edu/BFROOT/www/Detector/DAQ/Infrastructure/Maint/177aih.pdf
あとバスエラーの定義はプロセッサによって異なるからプロセッサも限定せずに
> セグメントフォルト、バスエラーは同期例外だ
とか書くと知ったかがばれるので注意しろよ w >>854
C言語でやりたいならここでいいけど、バッチでやりたいならこっち
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1489207631/
あとバッチはその手の文字列操作があまり得意でないので個人的にははPowerShellとか使った方が楽だと思う
【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1480109402/ 68kでのバスエラーとは/BERRがアサートされることで
何をセンスして/BERRをぶっ叩くかは基板次第だな PC-9801
0x000000 - 0x0003FF IVT(割り込みベクターテーブル)
まぁ弄るなら割禁とか保険かけるんで専用ライブラリ使うかアセンブラコード書くな。 割り込みと例外は違う
まあバスエラー相当が割り込みであがるアーキもあるけど longjmpやC++のthrowのような例外と割り込みは違うが
ソフトウエア割り込みだの記憶保護例外だのは割り込みと同列なもので
CPUのマニュアルでも同じ章に書いてある >>857
この文脈ではメモリアクセスに伴って発生バスエラーであり、それが非同期って事はアスセスして読めた後で、やっぱさっきのなし、ノーカン、ノーカン
って事だぞ お前は班長か? >>865
理解してない奴は、混乱の元だから割り込んで来ないように C言語のヌルポとハード0番地って同じである必要は無いんだよね 0xffffffff番地でもいいはずだね
要は、Cで合法的に定義されたオブジェクトが決して含まないアドレスを
1つ決めごと作っておいてそれを空ポインタということにしようということと
規格合致処理系はそれを必ず決めておかなければならないということ
C以外のたとえばアセンブラで定義されたオブジェクトまでがその規則に従うとは限らないし
そういうオブジェクトをCで扱えてはならないとまでは言ってない
あくまで自己責任でやる限り余計な邪魔立てはしない ポインタはポインタであってアドレスではない
けど中途半端に知ってるとポインタとアドレスがイコールと思い込んでしまう
ヌルポインタはアドレスで説明できないポインタの例だね バスエラーってのは、あらかじめ決めた領域以外をアクセスしょうとしたら発生するのであって、読んだ後にここ読めないからなんて動作はしない。
むしろ決めて無い場合は幾らでも読み書き出来てしまう。例えそれが嘘でも虚構でもな。
後からノーカンなんてならない。 >>871
>例だね
ヌルポインタ以外に特異点はないのでは? >>872
奇数アドレスからのワードアクセスでもでるぞ
なんとかしてくれる方が少数派かと >>874
それは命令アドレスのLSB見りゃ即出せる罠 >>872
わかってない奴は割り込むなって言っただろ
痛々しいぞ >>876
お前がわかってないだけだろ w
68K の話ならデータが読めると言うのは DTACK のアサートで示される
その後に BERR をアサートしても受け付けなかったと思う
(そんなアホな設計はしたことないから本当にそうかどうかは試してないけど)
そもそも BERR は非同期じゃないからお前が初めから頓珍漢なだけ >>874
68000 の時代はデータでもダメだったけど今時はプロセッサ側で何とかするアーキも多いと思う intelの石はワードやロングワードのアクセスでも奇数アドレスからだろうとマシン側で何とかしてくれるから生き残ってるんだと思うわ プログラミング歴1年になったけどみんなの言ってることがわからなさすぎて辛い
アセンブリもやった方がいいんか? >>879
普通に組んでてあまりありがたみを感じたことはないけど... >>835
hogeがでかい配列で、オフセットの位置に確かに値が書かれているのを確認したことがある。
0番地付近のメモリを参照する人はいい迷惑だなと思った >>852
ゆとりマジで死ね
韓国人も死ね
お前らはそういう所がいけない。俺は逆ギレしているのではなく、単にキレてるだけだ。
お前らはそうやって常に話をすり替え、被害者ポジションを確保する癖があるが、それは根本的に間違ってる。
そもそも、ここにはお前らより知識のある奴が沢山居るんだから、お前らの聞きかじりで回答する必要はない。
話が余計におかしくなってるだろ。
話を>>841に対する回答に戻すと、841の話しぶりからして、
俺は以下を補足した方がいいと思ったから>>843を投稿したんだよ。
1. 841の言う「ヌルポ」はOSがMMUで捕まえるヌルポである。
2. >>838の言う「組み込み」はMMUがない場合を指している。
3. 838の言う「ゼロ番地付近をアクセス」はOS+MMUがない場合を想定している。
4. 従って838のケースでは841の想定するヌルポは発生しない。
というのを伝えるために書いたんだ。
それをお前は知ったかをしたくて、「MMUなら俺も知ってる!」と勝手に食いついてきただけ。
読む限り、お前は例外がどう動くのか理解できてないと分かるが、無知なままでいろ。
俺は841を助けようとしたのであって、韓国人とゆとりは死ねとしか思ってないから。
VBRを変更する場合、確かに0番地付近を構造体アクセスして転記するんだよ。
838はこれに気づいた、そしてそれを伝えた。
俺は841が「0番地アクセス=ヌルポ」と思っているっぽいので、(これは通常のOS+MMUならそうだが)
それとは違うぞと分かるように補足した。
それに知ったかゆとりが食いついてきただけ。
> プログラミング初心者です (>>835)
という点からしても、838で当たりだろう。
VBRを変更するならかなり初期で対応するので、初心者でも目に付く場所に記述される。 >>835
それをコンパイルするコンパイラの仕様とそれを実行するマシンアーキテクチャによって変わる。 OSによっても変わるかな。
まあしかしOSそのもののソースコードならそう書いて正常動作したとしても特におかしくないかな。 >>882
うん普通は何も考えない。
だから他の石を同じ感覚で使ってポインタ渡しした構造体のメンバーにアクセスして焦るんだわ。
intelの石ならこんな事起きないのにってな。 >>888
ゆとり死ね
てかマジな話、知らないのならちょっと様子見する余裕を持てよ。 >>891
ゆとり死ね
俺はその理由も既に書いてる 過去レスまでちゃんと読んで欲しいならコテ付けること☆ 1点、気になるのがNULLと書いていたことだ
0番地にアクセスすることを意図しているコードは
struct hoge *tmp = NULL; ではなく
struct hoge *tmp = (struct hoge *)0; と書くだろう
思うに、単にtmpへの代入を忘れただけではないか?
そういうポカミスを多発するどんくさいやつほど
「変数は必ず初期化」に固執する >>894
まあ、ゆとりとか韓国人とか言い出す時点でお察しって奴やね w >>893
ゆとり死ね
韓国人死ね
俺が読めといっているのは>>884のことだ馬鹿タレ
どうせお前らは日本語が不自由で3行以上は読めないから意味が分からないのだろうが
お前らが迷惑行為を働くことに対して俺はキレてるんだよ
>>895
環境によってはwarningが出る。VC++とか。
個人的には意味ないとも思うが。 MMU とか VBR とか知ってる言葉を必死に使ってるって感じが出てて微笑ましいな >>895
初期化してなきゃ警告が出るのにね
>>897
お前は的外れなことしか言わねーな C言語に関する話題で意味のある文脈で韓国人なりゆとりなりが出てくることはまず無いだろうから、NGしとけばいいな。 >>898
その程度の用語で威張れると思える時点で終わってる
ゆとりは本当に馬鹿だな
ゆとり死ね
韓国人死ね > その程度の用語で威張れると思える時点で終わってる
>>884に言ってやれよ w >>903
ガチアスペか?
韓国人か?
それじゃ論理が通らんだろ
ID:KXDpqAfSM = ID:FCwL/bM6M = ID:wOa8xeUW0 = ID:tW10X6gZ0 = ID:JlwKPeYd0
お前だけがぶっちぎりの馬鹿だな
韓国人死ね NULLが(void *)0になったのっていつからだっけ
C89には無かったよね? おっぱいおっぱいぽよんぽよん
おっぱいおっぱいぽよんぽよん
仲良くしようぜ >>906
つまりこうであると。
#include <stdio.h>
int main(int argc, char *argv[])
{
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
fputs("おっぱい", stdout);
for (j = 0; j < 2; j++)
fputs("ぽよん", stdout);
putchar('\n');
}
return 0;
} そういや古いソースには char *p なのに if (*p == NULL) みたいに書いてあるのがあって、今時のコンパイラだと警告出しまくりになるんだよなあ。 >>908
こう書いてもいいね。
#include <stdio.h>
int main(void) {
int i;
for (i = 0; i < 8; i++) {
if (i % 4 < 2) fputs("おっぱい", stdout);
else fputs("ぽよん", stdout);
if (i % 4 == 3) putchar('\n');
}
return 0;
} NULLの値が、0xDEADC0DEになってる環境なら知ってる。 >>904
頓珍漢な奴に論理とか言われてもなあ w >>910
なるほど。
ちょっと変形してビット演算でも行けるな。
#include <stdio.h>
int main(void) {
int i;
for (i = 0; i < 8; i++) {
fputs(i & 2 ? "ぽよん" : "おっぱい", stdout);
if ((i & 3) == 3) putchar('\n');
}
return 0;
} #include <stdio.h>
#include <stdlib.h>
void o(){ fputs("おっぱい", stdout); }
void p(){ fputs("ぽよん", stdout); }
void r(){ puts(""); }
void e(){ exit(0); }
void (*a[])() = { o,o,p,p,r,o,o,p,p,r,e };
int main(){ void (**x)()=a; while(1) (*x++)(); } >>877
>struct hoge *tmp = (struct hoge *)0; と書くだろう
このように書いても*正しく*NULLポインタが代入される
char zero[(struct hoge *)] = {0};
memcpy(tmp, zero, sizeof zero);
としないとダメ
逆によく見かけるポインタを含む構造体をmemcpyで0に初期化するのも正しく無い >>915
それがわからんやつが、ここに、いや世界にいると思っているのか?
俺のはコードに意図を残すという論旨だったが、それがわからんやつがおまえさんか
ア ホ か 意図を残すために間違ったコードを書くとは理解に苦しむ
コメントで残した方が数百倍マシ >>915
いったいそれと BERR になんの関係があるんだ?
ますます頓珍漢過ぎる w >>912
連呼リアン死ね
>>919
アスペ通り越してキチガイか?
まあどっちにしても死ね >>919
>>895と間違えてたな
>>921
memcpy(&tmp, zero, sizeof zero);
こうだね >>920
> アスペ通り越してキチガイか?
基地害はお前だろ w
>>915のアンカー先見ろよ レス数が900を超えています。1000を超えると表示できなくなるよ。