1
int main() {
    int i;
    char a[]={"Hello"};
    while(a!='\0') {
        printf("%c",*a);
        a++;
    }
    getch();
    return 0;
}

字符串存储在连续的内存位置中,并且在将地址传递给 printf() 时,它应该打印字符。我已经开始学习 C。我无法找到答案。请帮忙。

4

4 回答 4

5

那么a是你不能增加的数组的名称。更改数组的地址是非法的。

所以定义一个指针a然后递增

#include <stdio.h>
#include <conio.h>

 int main()
 {
     int i;
     char a[]="Hello";
     char *ptr = a;
     while(*ptr!='\0')
     {
         printf("%c",*ptr);
         // a++ here would be illegal
         ptr++;
     }
     getch();
     return 0;
 }

NOTE:

事实上,C 中的数组是不可修改的lvalues。C 中没有可以修改数组本身的操作(只能修改单个元素)。

于 2013-07-01T13:07:30.403 回答
2

在您的代码中,a是一个数组的名称,您不能像a++. 使用这样的指针:

char *p = "Hello";
while(*p++)
{
     printf("%c",*p);
}
于 2013-07-01T13:09:01.480 回答
1

三个问题:

  1. char a[]={"Hello"};是非法的。{"Hello"}只能初始化char* a[]。你可能想要char a[]="Hello";
  2. while(a!='\0')- 你可能是说*a != '\0'a是数组本身。
  3. a++;- 数组不能递增。你应该增加一个指向它的指针。
于 2013-07-01T13:17:42.870 回答
0

您也可以使用 for 循环尝试:

#include <stdio.h>

int main(void) {
   char a[] = "Hello";
   char *p;

   for(p = a; *p != '\0'; p++) {
      printf("%c", *p);
   }

   return 0;
}
于 2013-07-01T14:32:56.377 回答