[解決済み] strtolによるセグメンテーションの不具合
2022-02-07 15:14:09
質問
ポインターで遊んでいます。
char a[]=" 0xa this is a343 good";
char* *endptr=NULL;
long int b=0;
b=strtol(a,endptr,0);
b=strtol(*endptr,endptr,0);
なぜ最後の行でセグメンテーションフォールトが発生するのでしょうか?
*endptr
は
char *
または?
の挙動をよく理解していれば
strtol
ここでは、最初の整数を読み取ります。
10
で、次に
*endptr
の次のスペースへのポインタになります。
0xa
. 私は正しいですか?
解決方法は?
あなたのクラッシュは
strtol
. 問題なのは、その値を持つポインタをデリファレンスしたことです。
NULL
. これは不正で、クラッシュ(seg fault)を引き起こします。
あなたの問題はここです。
b=strtol(*endptr,endptr,0);
^^^^^^^
Dereference a NULL leads to a crash
あなたの問題は、このコードと同じです。
char** endptr=NULL;
char* p = *endptr; // Crash!!
だから、あなたの問題は、本当に何の関係もない
strtol
.
について
strtol
:
もし、あなたが
strtol
を更新するために
*endptr
である値を渡す必要があります。
ない
NULL
.
その方法とは、以下のようなものです。
char*
変数(注。
ではなく
a
char**
のアドレス**を渡します。
char*
を
strtol
.
のように。
char a[]=" 0xa this is a343 good";
char* p; // Notice: just one * as you need a pointer to char
long int b=0;
b=strtol(a, &p,0);
^^
Notice: & (aka address of). So you pass the address of
a pointer to char. Equivalent to char** as expected
by strtol
関連
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] セグメンテーションフォールトとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み] テスト
-
[解決済み] struct has no member named
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC