C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.89144 の関連記事表示

<< 0 >>
■89144  Re[1]: 引数 配列をポインタで
□投稿者/ Jitta -(2018/11/01(Thu) 23:03:25)
    No89142 (しー さん) に返信
    > 以下のプログラム、
    > a.output(hoge)の部分で
    > 
    > 0x00C11258 で例外がスローされました (プログラム名.exe 内): 0xC0000005: 場所 0x00D10000 への書き込み中にアクセス違反が発生しました
    > 
    > というエラーが出ます。
    > どういったことが原因で生じているのでしょうか?
    > 
    > また解決方法はどのようになりますか?
    > 
    > =======================
    > 
    > class A{
    >  public: void output(char *hoge){
    >   cout << hoge;
    >  }
    > }
    > 
    > int main(){
    >  char hoge[10];
    >  cout<<"10文字入力";
    >  cin>>hoge;
    >  A a;
    >  a.output(hoge);
    > }
    
    
    「10文字入力」で、10文字入力したんですか?
    10文字って、どういう文字を入れました?
    
    char hoge[10] ですが、「10って書いたから10文字」ではありません。
    これは「10個分の容器を用意した」で、容器の1つを「終端子」に使います。よって、実際に使えるのは9個分です。
    また、「文字」って、何を入れました?
    あるいは、char hoge[10] は、「10文字分」ではありません。「文字10個分(内1つは終端子)」でもありません。
    「10バイト分(内1バイトは終端子)」です。
    1文字を表現するためには、1バイト以上を使います。
    よって、2バイト以上使う文字を含んでいれば、10バイト分の領域をオーバーしてしまいます。
    
    解決方法は、あなたの開発環境に依存します。
    
記事No.89142 のレス /過去ログ153より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -