C语言9-字符串

1.字符串的定义

在C语言中并不像JAVA中有字符串类型,C语言中通过字符数组和一个\0结束标志来表示一个字符串,这里注意字符数组和字符串的区别就在于最后这个\0标识符

 

2.字符串的初始化

字符串的初始化可以直接给出字符数组的每一个值和\0结束标志,也可以单独给出字符数组中每个元素的值,当然也可以直接在字符数组后面给字符串(这种情况系统会自动给\0结束标记,并且这种情况可以不给定字符数组元素的个数,或者可以给定超出字符串中字符个数的元素个数),总而言之,字符串的初始化有五种方式

#include <stdio.h>

int main(int argc, const char * argv[])
{

    char name[4]={'i','o','s','\0'};        //字符串初始化的第一种方式,直接给出所有的字符元素,并在结尾添加\0结尾标志
    
    char file[5];                           //第二种方式初始化字符串,单个单个的给出字符,最后一个元素的值为\0
    file[0]='f';
    file[1]='i';
    file[2]='l';
    file[3]='e';
    file[4]='\0';
    
    char a[4]="xxx";                        //第三方式初始化字符串,可以直接给出字符串,系统会自动加上\0结束标志
    char b[]="hehe";                        //当然我们也可以不指定字符数组的元素个数
    char c[100]="heihei";                   //当然我们也可以这样,字符数组的元素个数超出了字符串中元素的个数
    
    puts(file);
    puts(name);
    return 0;
}

 

 

3.字符串的输出

C语言中提供了两个函数来输出字符串,一个是printf函数,一个是puts函数,它们的区别是printf函数一次性可以输出多个字符串,而puts函数只能输出一个字符串,另外puts函数可以自动换行

这里我们要了解字符串的输出,我们还要明白,字符串在内存中存储是先进后出的,所以打印先定义的字符数组,如果这个数组没有加\0结束标记,那么它会打印到下一个带有\0结束标记的字符数组

#include <stdio.h>

int main(int argc, const char * argv[])
{

    char a[3]="cd";
    char b[2]={'a','b'};
    printf("%s\n",b);       //由于内存中存数数据是先进后出,所以当我打印变量b时,它会将变量a的数据也打印出来,因为在字符数组b中没有结束标志\0,注意这里b是一个地址
    return 0;
}

 

4.字符串的输入 

C语言中字符串的输入也提供了两个方法,一个是函数scanf,另外一个函数是gets,这个两个函数的区别在于,scanf函数可以一次性输入多个字符串,而gets一次性只能输出一个字符串

另外还有一个区别,scanf函数不能输入空格,tab,回车,而gets函数可以,还有一点,就是如果用gets函数输入字符串可能引起内存溢出问题,因为gets函数是从给定地址开始一个一个

字符输入,然后在最后加上一个\0结束标记,但是输入的字符个数超过给定的字符数组的元素个数,就会引起数据安全问题

#include <stdio.h>

int main(int argc, const char * argv[])
{
    //说明,由于C中存储变量是先进后出的,所以数组s2在s1的下面,当我们向s1输入字符串超过它的元素个数的时候,就会将数据写入到本该是s2的空间中去
    char s2[] = "hello";
    char s1[2];
    gets(s1);
    printf("s1的值为:%s\n",s1);            //结果为itcast
    printf("s1的值为:%s\n",s2);            //结果为cast,而不是hello了
    return 0;
}

 

5.字符串数组

在C语言中字符串数组用二维字符数组来表示,表示方式有三种

#include <stdio.h>

int main(int argc, const char * argv[])
{
    char name1[2][3] = {{'t','o','m','\0'},{'j','a','y','\0'}};
    char name2[2][3] = {{"tom"},{"jay"}};
    char name3[2][3] = {"tom","jay"};
    return 0;
}

 

总结:本节课主要讲解了5点

  1.C语言中的字符串是用字符数组加\0结束标记来表示的,C语言中并没有字符串类型

  2.C语言中字符串初始化有五种方式,可以直接给出字符数组的所有元素并加上\0,可以单个单个给出字符数组中的元素,最后一个元素为\0结束标记

   还可以直接给出字符串,当然这种情况系统会自动在字符数组末尾添加上\0结束标记,这种情况也可以不给出字符数组元素的个数,也可以给出字符数组元素个数,

   甚至给出的元素个数可以超过字符串中字符的个数

  3.C语言中字符串的输出提供了两个函数printf和puts,区别在于printf可以一次打印多个字符串,而puts只能打印一个,另外由于C语言中变量存储是先进后出,所以在

   打印字符数组时,如果这个字符数组没有结束标记\0,则会从给定的地址答应到有结束标记为止

  4.C语言中提供了scanf和gets两个函数用来输入字符串,这两个函数的区别在于scanf函数一次性输入多个字符串,而gets只能一次性输入一个字符串,另外scanf函数不能输入

     空格,tab,回车,gets可以,还有一点gets输入字符串有可能引起安全问题,导致内存溢出

  5.C语言中字符串是以二维字符数组形式表现的,我们用三种写法 

——————————————————————————————————————————————————————————————————————————————————————

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-02-23 15:22  ysfox  阅读(356)  评论(0)    收藏  举报