c语言字符指针与字符串

c语言中使用char型数组处理字符串。数组中的数据可以使用相同数据类型的指针来处理。
根据以上结论,我们可以采用char型指针来处理字符串,通常char型指针称之为字符指针。
在字符串的处理中,使用字符指针比使用字符型数组有更大的优点。
1 使用字符指针初始化时,可以直接用字符串常量作为初始值。
例: char *maomao365=”linux c初学者”;
2 在程序中也可以直接把一个字符串常量赋值给指针。
例: char *maomao365;
maomao365 =”linux c 初学者”;

注意事项:
maomao365 =”linux c初学者”; 与scanf(“%s”,maomao365)的区别:
maomao365 =”linux c初学者”;是由系统开辟一块内存区域存储这个字符串,然后将首地址赋值给指针;
scanf是将用户输入的字符串放入maomao365这个指针所指向的地址中。
故在maomao365未进行赋值之前,执行scanf系统将会报错。


在初始化或程序中向指针赋值字符串,并不是把字符串复制到指针指向的地址中,而是由系统开辟一块区域存储这个字符串,然后再将首地址赋予给指针,从而使指针指向这个字符串的首字符位置。
在程序中给字符指针赋值,应避免字符串长度过长,导致程序死机。
例:

  #include "stdio.h"
#include "stdlib.h"
int main(){
   char *a1 ="linux c初学者";
   char *a2;
   while(*a1 !='\0')
     printf("%c",*a1++);  //采用指针的方式输出单个字符
   printf("\n");
 
   a2 ="Linux c爱好者";
  while(*a2 !='\0')
   printf("%c",*a2++);
    
   printf("\n"); 
   printf("%s\n",a1);
   printf("%s\n",a2);
    a1= malloc(5);
   scanf("%s\n",a1); //输入字符串
   printf("%s\n",a1);  //输出字符串
    free(a1);
   return 1;
}

[root@localhost ~]#./t
linux c初学者
Linux c爱好者

linux c爱好者
linux