入力ができません。


以下のプログラムを実行したところ、二つの配列を入力したいのですが、二つ目の配列が入力できず、そのままif文が実行されてしまいます。  
どこか足りていないのでしょうか？  
教えてください。よろしくお願いします。

[code]

    #include <stdio.h>
    #include <string.h>
    
    #define N 128
    int main( void )
    {
        char str_input[ N ];
        char str_new[ N ];
        
        printf( "Key in a letter>> ");
        str_input[ N ] = getchar();
        printf( "%d\n", strlen( str_input ) );
        
        printf( "Key in a letter>> ");
        str_new[ N ] = getchar();
        
        if ( strcmp( str_input, str_new ) == 0 )
        {
            printf( "文字列 str_input と str_new は一致しています\n" );
        }
        else
        {
            printf( "文字列 str_input と str_new は一致していません\n" );
        }
        
        strcpy( str_input, str_new );
        
        if( strcmp( str_input, str_new ) == 0 )
        {
            printf( "文字列 str_input と str_new は一致しています\n" );
        }
        else
        {
            printf( "文字列 str_input と str_new は一致していません\n" );
        }
        return 0;
    }
    
[/code]




質問された方のコードは、配列の有効範囲を超えて代入しています。

[code]

     #define N 128
     int main( void )
     {
         char str_input[ N ];
    
[/code]

char str_input[ N ];は要素数が128個のchar型の配列を宣言していますが、

[code]

         str_input[ N ] = getchar();
    
[/code]

この文ではgetchar()で標準入力から読み込んだ1文字をstr_input[N]つまりstr_input[128]に代入しています。  
C言語の配列の添え字は0から始まりますので、129番目の要素に代入していることになります。  
これは配列の範囲外に代入しているのでバグです。

str_newも同じ問題があります。

* * *
[code]

        if ( strcmp( str_input, str_new ) == 0 )
        {
            printf( "文字列 str_input と str_new は一致しています\n" );
    
[/code]

このコードをみるとstr_inputとstr_newを文字列比較していますので、str_inputには文字列を入力したいのだと思います。  
今のコードは入力した1文字をstr_inputに格納しているだけなので、「文字列」を入力するように変更するか、1文字入力を繰り返す必要があると思います。

