字符串与字符数组

来源:互联网 发布:免费淘宝代理童装 编辑:程序博客网 时间:2024/05/13 01:23

一 . 使用带%s格式符的scanf函数读入字符串时,不需要再参数前加取地址符&。
原因:编译器会自动将数组名作为数组首地址来处理。
如:scanf("%s", str);
二 . 字符数组与字符串
(这两个概念其实现在我也不是很清楚),但看到的一句话可以帮助理解:在C语言中,将字符串当作字符数组处理。

字符数组的初始化:

              char str[3] = {'a', 'b', 'c'};              char str[3] = {'a', 'b'};       ——剩余的元素值自动设为空字符'\0'。              怎样证明剩余的元素值自动设为了空字符呢?              我们可以输出它的ASCⅡ值:              #include <stdio.h>              int main()              {                int str[3] = {'a', 'b'};                printf("%d", str[2]);                       //因为数组是从str[0]开始记的                printf("\n");                return 0;              }              由于刚开始在上面的那段代码中我输出用的,但运行时仍是0,这是不是说明了一个问题呢:              当C编译器在程序中遇到长度为n的字符串常量时,他会为这个字符串常量分配长度为n+1的字符数组空间,最后一个空间用于存储空字符'\0',用来标志字符串的结束。              但问题是,这并不是字符串啊,这是使用逐个字符列举的方式对字符数组进行初始化的!!!!![这是我分别改为输出str[3],str[4],str[5]的结果,每次改后执行了两次](http://img.blog.csdn.net/20171114163211919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDExMzgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)![但如果我定义为char类型后,分别输出str[2]和str[3]又是这种情况](http://img.blog.csdn.net/20171114163603216?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDExMzgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)不清楚为什么会这样,现在还找不到答案!!

字符串(用字符串常量初始化字符数组):

              char str[] = {"hello"};              char str[] = "hello";

强调:字符串用双引号”“,字符常量用单引号’ ’ 。

原创粉丝点击