no_name33のプロフィール

@no_name33 no_name33
ありがとう数3
質問数0
回答数8
ベストアンサー数
0
ベストアンサー率
0%
お礼率
0%

  • 登録日2008/05/31
  • 文字列、ポインタを使用したプログラムで分からないところがあります

    1 #include <stdio.h> 2 3 void setstr(char *str){ 4   str = "abc"; 5   return; 6 } 7 8 int main(){ 9 10   char *str; 11 12   setstr(str); 13 14   str[1] = 'E'; 15 16   printf("str = %s\n", str); 17 18   return 0; 19 } 20 上記のプログラムの動きがいまいち理解できません。 (メモリの状態など) 16行目でprintfすると、結果は「str = 、E・」となります。 ---まず、4行目でabcに対してメモリが確保されて、その先頭アドレスが strに設定されます。 しかし、setstr関数を抜けた時点で、先ほど確保されたメモリは開放されて しまう。(? ここは想像です。確証がありません) main関数に戻ってきて、14行目で変更しているメモリは、abcがかつてあった 場所の"b"の部分。(str自体は何も変更されていないから) 16行目でprintfしているのだけど、なぜこの結果になるのかが分かりません。。 分かる方いましたら教えて下さい。上の文章では何を言っているのか分かりづらいとは 思いますが。。 説明には適宜行番号を使って頂いて構いません。 よろしくお願いします。

    • upanepa
    • 回答数13
  • 文字列、ポインタを使用したプログラムで分からないところがあります

    1 #include <stdio.h> 2 3 void setstr(char *str){ 4   str = "abc"; 5   return; 6 } 7 8 int main(){ 9 10   char *str; 11 12   setstr(str); 13 14   str[1] = 'E'; 15 16   printf("str = %s\n", str); 17 18   return 0; 19 } 20 上記のプログラムの動きがいまいち理解できません。 (メモリの状態など) 16行目でprintfすると、結果は「str = 、E・」となります。 ---まず、4行目でabcに対してメモリが確保されて、その先頭アドレスが strに設定されます。 しかし、setstr関数を抜けた時点で、先ほど確保されたメモリは開放されて しまう。(? ここは想像です。確証がありません) main関数に戻ってきて、14行目で変更しているメモリは、abcがかつてあった 場所の"b"の部分。(str自体は何も変更されていないから) 16行目でprintfしているのだけど、なぜこの結果になるのかが分かりません。。 分かる方いましたら教えて下さい。上の文章では何を言っているのか分かりづらいとは 思いますが。。 説明には適宜行番号を使って頂いて構いません。 よろしくお願いします。

    • upanepa
    • 回答数13
  • 文字列、ポインタを使用したプログラムで分からないところがあります

    1 #include <stdio.h> 2 3 void setstr(char *str){ 4   str = "abc"; 5   return; 6 } 7 8 int main(){ 9 10   char *str; 11 12   setstr(str); 13 14   str[1] = 'E'; 15 16   printf("str = %s\n", str); 17 18   return 0; 19 } 20 上記のプログラムの動きがいまいち理解できません。 (メモリの状態など) 16行目でprintfすると、結果は「str = 、E・」となります。 ---まず、4行目でabcに対してメモリが確保されて、その先頭アドレスが strに設定されます。 しかし、setstr関数を抜けた時点で、先ほど確保されたメモリは開放されて しまう。(? ここは想像です。確証がありません) main関数に戻ってきて、14行目で変更しているメモリは、abcがかつてあった 場所の"b"の部分。(str自体は何も変更されていないから) 16行目でprintfしているのだけど、なぜこの結果になるのかが分かりません。。 分かる方いましたら教えて下さい。上の文章では何を言っているのか分かりづらいとは 思いますが。。 説明には適宜行番号を使って頂いて構いません。 よろしくお願いします。

    • upanepa
    • 回答数13
  • 参照型変数で受け取らないnew

    ふつうは A a; a=new A(); というふうにnew A();を参照型変数aで受け取りますよね? しかしこの前見たのは メインメソッドにいきなり new A(); とだけ書いてあるのです。 参照型変数で受け取ってないんです。 こんなことゆるされるんでしょうか? これですと、Aというオブジェクトはnewされて生成されたわけですが、 どこからも参照されていないのでガーベッジコレクションの対象に なってしまうのではないのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 極力安全な買い方は?

    被害妄想なのですが、ネットショッピングの際、id等の個人データが流出して第三者が私のIDを使用して、高額な商品を勝手に私の代わりに私の名で買う手続きをして、我が家に届かせるという嫌がらせは、ありえるかなと、不安です。 上記に書いた不安妄想も込みで、ネットでのショッピングは何かと不安がついてくるとおもうのですが、一番と良いと言いますか、極力安全な買い方はどのような支払い方法だと思われますか? 私の考えは、コンビニ払いか代引きの二つなのですがどうでしょうか?

    • noname#65771
    • 回答数6