0

こんにちは、私は C が初めてで、理解しようとしています。

これらの 2 つの char 配列があり、1 つは初期化され、もう 1 つは宣言されたばかりです。配列の状態から arr に要素をコピーして出力したかっただけです。コンパイルされますが、ガベージ値が出力されます....

私を助けてください

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
     int i = 0;
     char *arr[3];
     char *state[3] = {"California", "Oregon", "Washington", "Texas"};

     for(i=0; i<3; i++)
     {
         arr[i] = state[i];
         printf("%s\n",arr+i);             
     }

     arr[0] = state[0];

     printf("%s\n",arr[0]);
     system("pause");

     return 0;    
}
4

3 に答える 3

7

印刷arr+iはおそらくあなたが望むものではありません。arr[i]代わりに、 1 つ深い間接化レベルが必要です。

具体的にa[b]は と全く同じ*(a+b)です。

于 2013-03-27T10:46:57.253 に答える
1

まず、初期化の仕方stateが間違っていると思います。最大で 3 つのアイテムを持つ必要がありますが、4 つのアイテム ("Texas") を指定しています。次のように変更します。

char *state[3] = {"California", "Oregon", "Washington"};

それに加えて、arr+iの i 番目のポインターのアドレスを指定しますarr。の i 番目のポインターが指している文字列を出力するには、 と同様に、次のようarrに使用します。**(arr+i)arr[i]

また、使用しないでくださいsystem("pause");getchar()はるかに優れています。

于 2013-03-27T11:00:28.683 に答える