逐个字符地打印字符串

时间:2013-07-01 13:05:25

标签: c

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

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

4 个答案:

答案 0 :(得分: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中的操作可以修改数组本身(只有个人   元素可以修改。)

答案 1 :(得分:2)

在您的代码中,a是数组的名称,您无法像a++那样对其进行修改。使用这样的指针:

char *p = "Hello";
while(*p++)
{
     printf("%c",*p);
}

答案 2 :(得分:1)

三个问题:

  1. char a[]={"Hello"};是非法的。 {"Hello"}只能初始化char* a[]。您可能想要char a[]="Hello";
  2. while(a!='\0') - 你可能意味着*a != '\0'a是数组本身。
  3. a++; - 数组无法递增。你应该增加指向它的指针。

答案 3 :(得分:0)

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

#include <stdio.h>

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

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

   return 0;
}