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"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 回答