字符,字符串,字符数组,指针的混合运用

  时刻提醒自己。学习中,最难的不是技巧,而是对于概念的深入理解。深入理解概念是深入理解原理的基础。而原理是任何学习中最基础,最本质的内容。


一、字符与字符串

  在标准C中实际上是没有字符串这种基本数据类型的。只有字符基本数据类型。需要使用的关键字是char

  char ch = 'a';

  需要注意的点有:

  字符是单引号,字符串是双引号。

  char类型的数据结构,在机器上通常占用一个字节大小。

  char 类型可以参与整数运算,也可以以整数形式输出。【注意char的存储细节】

 在实际的编程过程中,将不可避免的需要使用到字符串。那么字符串的存储将必然要借用到字符数组。

  char a[5] = {'h','e','l','l','o'};

  上例是一个典型的字符型数组。严格的说,上述字符数组并不能表述一个字符串。因为没有“\0”作为字符串的结束符。

  对字符数组的输出只能采用:

  for (i = 0 ; i< 5;i++)

    printf("%c",a[i]);

  char str[] = "hello" ;

  对其输出可以直接采用:

    printf("%s",str);

  str是一个字符数串,借用一个字符数组存放。两者的存储示意图如下:

    wKiom1aoNM6Bm1ZjAABxnQtcXNk738.png 

二、字符串的初始化、赋值 【借助字符指针】

  char str[] = "hello"  //定义str字符串,并初始化为hello,是正确的

 

  char str[100];   //这两句话是错误的。str是一个地址常量。值是不能改变的。

  str = "hello";

   

  第二的修正方式可以是:

  char *p;

  p = "hello";   //可以成立,p是指针变量。产生的字符数组的初始地址赋值给了p。也就是p指向了hello这个字符数组。当然也就是一个字符串了。可以p++,指向下一个一个字符。

  

  第三种方式:

  char str[] = "hello";

  char *p ;

  p = str;   //注意,这种方式,p指向了hello这个字符串。str是一个地址值


三、从输入设备得到字符串

 获取标准输入得到字符串的工具有:scanf ;gets;fgets


 scanf 的用法举例:

 

 char str[10];

 scanf("%s",str);

 printf("%s",str);

 

 注意事项:可能导致数据越界,也就是字符串中的字符个数超过10个,就会产生数据越界。

 scanf判断数据的输入结束的标识是:空格,tab;如果:输入字符串是abc def 那么str只会获取到abc

 避免越界的方法:

 scanf("%9d",str); //可以限制字符串的输入个数


 gets 方法比较危险。文件强烈建议不要使用:

 

 char str[10];

 gets(str); //注意,没有任何校验


 fgets的方法是推荐使用的方法

 char str[10];

 fgets(str,10,stdin); //这样从标注输入的内容,超过9个字符就会自动截断。不会产生越界。


 利用指针接受标准输入

 char *p = malloc(100);

 scanf("%s",p);

 gets(p);

 fgets(p,99,stdin);


四、标准C库中提供字符处理函数

 strcat   strncat

 strcpy  strncpy

 strcmp  strncmp

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章