char a[10];
scanf("%s",a);
int i=0;
while(a[i]!='\0')
printf("\n%c",a[i++]); //similar to printf("%s",a);
char *b;
b=malloc(10*sizeof(char));
scanf("%s",b);
i=0;
while((b+i)!='\0')
printf("\n%c",*(b+i++)); //not similar to printf("%s",a);
Run Code Online (Sandbox Code Playgroud)
对于输入"abcd",第一个循环打印a []是否与printf().但对于*b,情况并非如此.
第二个循环持续太多,直到遇到'\ 0'.
那么,这是否意味着'\ 0'会自动附加在字符串的末尾,而不是在char类型指针的末尾?
它的工作是附加这个'\ 0'?编译器的?
你忘了取消引用你得到的指针b+i.它应该是:
while (*(b + i) != '\0') // or while (b[i] != '\0') or while(b[i])
Run Code Online (Sandbox Code Playgroud)
b + i只是给你一个地址,你必须取消引用它来实际查看内存指向的内容并查看它是否是NUL终止符.该x[y]符号相当于*(x + y).
另外不要忘记free你分配的内存malloc.