0

以下のこのコードの出力abcdef defabc def.

 main()
{
    char array1[3]="abc";
    array1[3]='\0';    

    char array2[3]="def";
    array2[3]='\0';

    printf("%s  %s", array1, array2);
}
4

4 に答える 4

1

あなたのコードで

 main()
{
    char array1[3]="abc"; //Undefined ,when you access this using printf() with %s

     array1[3]='\0';   //here you are storing value which is out of bound in nature  

    char array2[3]="def"; //same as above
    array2[3]='\0'; //same as above

    printf("%s  %s", array1, array2);
}

memory: 
       ---------------
      | a | b | c |\0|
      ----------------

最後の \0 は、割り当てたスペースを超えています。

解決:

 main()
{
    char array1[4]="abc"; 
     //array1[3]='\0';  //no need 

    char array2[4]="def";
   // array2[3]='\0'; //no need
 printf("%s  %s", array1, array2);
}

それは望ましい出力を与えるでしょう

于 2013-07-18T09:48:46.033 に答える
0

これはとても悪いコードです!何が起こっているかは次のとおりです。

コンパイラは 2x3 文字にスペースを割り当てました。

main()
{
    char array1[3]="abc"; //Will write "abc" in array 1 AND \0 in array2[0]
    array1[3]='\0';       //Out of array!!! (Re)writing \0 in array2[0]

    char array2[3]="def"; //Will write "def" in array2 AND \0 after array2 space, POTTENCIALLY corrupting code!
    array2[3]='\0';       //\0 (re)wrote after array2, POTTENCIALLY corrupting code!

メモリにあるのは 7 バイトです (割り当てられたのは 6 バイトだけです): "abcdef\0"。ポイントは問題ありません: array1 は "a" をポイントし、array2 は "d" をポイントします。C 標準ライブラリでは、文字列のサイズは末尾のゼロ ターミネータによって決まります。したがって、array1 を printf すると、\0 まで "abcdef" と表示されます。

于 2013-07-18T09:56:03.793 に答える