静态数组和动态数组

1 c arrays pointers

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'?编译器的?

Set*_*gie 7

你忘了取消引用你得到的指针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.