0

多次元配列を見たばかりで、練習として、最初にこのコードで文字列を出力したいと思いました。残念ながら、それは機能しませんでした。

#include <stdio.h>
main()
{
 char a[][20] = {"Hello"};
 printf("%s" , a [1]);
 getchar();
}

私がこれを行うことができた唯一の方法は、ループで各文字を追加することでした:

#include <stdio.h> 
main()
{
char a[] = {"Hello"};
int i=0
while(a[i]!='\0')
 {
  printf("%c" , a[i]);
   i++;
  }
getchar();
}

文字列を初期化するときに何が欠けていますか?

4

2 に答える 2

2

最初のフラグメントでは、範囲外のメモリにアクセスしています。動作するコードは次のとおりです。

#include <stdio.h>
int main(void)
{
    char a[][20] = {"Hello"};
    printf("%s\n", a[0]);
    getchar();
}

C配列はゼロからインデックス付けされます。定義して初期化しただけa[0]です; したがって、アクセスa[1]は未定義の動作です。

"%s"2番目の例では、 OKを使用できます。

#include <stdio.h> 
int main(void)
{
    char a[] = {"Hello"};
    printf("%s\n", a);
    getchar();
}

または、次を使用できます。

    printf("%s\n", &a[0]);

もちろん、これは一次元配列です。

于 2012-11-09T00:51:37.903 に答える
0

または、ポインタ表記を使用することもできます。

#include <stdio.h>
int main(void)
{
    char a[][20] = {"Hello"};
    printf("%s\n", *( a + 0 ) );
    getchar();
}
于 2012-11-09T00:54:48.550 に答える