【从零开始的 C 语言笔记】第十四篇-Array介绍与应用(2)

不怎麽重要的前言

上一篇我们介绍了array的基本概念,这是一个非常好用也很常使用到的东西喔!

今天我们来介绍一下Array的延伸用法吧!


字串怎麽储存?

不晓得大家有没有这样的想法,在第七篇的格式指令字里、我们一直使用的printf都有使用到字串,而我们的资料型态虽然有整数、浮点数跟字元,但就是没有一种资料型态可以直接用来储存字串。

这就造成很尴尬的事情,如果我们今天要储存一个字串时要怎麽办?

不晓得大家还记不记得第八篇的printf里,我们很简略的提到字串(以「" "」包起来)与字元(以「' '」包起来),事实上字串就是由很多字元组成,而字元就是单一的符号,不管是a、b、c、d还是1、2、3、4,又或是「\n」、「\0」、「\t」等等的符号,它们都是字元。

不晓得大家还记不记得上一篇的array,array就是许多相同资料型态的资料汇聚,所以如果字串是很多字元组成,我们同样也可以使用字元阵列来储存它,就像以下这样:

#include <stdio.h>

int main(){
    char str[] = "Hello World!";

    printf("data: %s\n", str);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565YwnkNWSBYz.png

可以看到这时我们居然很神奇的可以在printf中使用「%s」,把设定好的字串列印出来了!


正式使用char array储存字串

  1. 宣告char array
    就跟一般的阵列宣告一样,char array也有下面三种宣告方式。

(1) 只给予阵列大小

char str[20];

(2) 不给阵列大小,但直接放入字串(赋值)

char str[] = "Hello World!";

(3) 给予阵列大小、放入字串

char str[20] = "Hello World!";
  1. 要记得字串的字尾会自动加入「\0」

看完以上的宣告方式,其实是跟一般的阵列差不多的,不过有一个重要的事情必须要说,如同"Hello World!"加上空格与「!」也才12个字元,但字串储存时最後其实还会插入一个看不见的符号「\0」,作为标示字串结尾,在列印时函式才会自动结束。

所以1-(2)的阵列大小会被自动分配为13,而不是12。

我们来看以下的例子就知道了:

#include <stdio.h>

int main(){
    char str[] = "Hello World!";

    printf("data: %s\n", str);
    printf("str size: %d\n", sizeof(str));

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565QGHAw8nChT.png

  1. 实际应用
#include <stdio.h>

int main(){
    char str[20];

    printf("plz input a str:");
    scanf("%s", str);

    printf("---\n");

    printf("data: %s\n", str);
    printf("str size: %d\n", sizeof(str));

    printf("---\n");

    str[10] = 'A';
    printf("data: %s\n", str);
    printf("str size: %d\n", sizeof(str));

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565CsVHaoPh11.png


char array小结

基本上就是一般阵列的规则,差别只在於scanf时可以一次读取整个字串,但因为scanf的遇到关系,只要包含空白字就会自动分割,所以使用scanf时不能读取包含空格的字串,除非特殊用法或是使用「gets();」、「fgets( )」。

(对於「gets();」使用方法有兴趣的朋友,可以点这里)
(对於「fgets();」使用方法有兴趣的朋友,可以点这里)


这次的内容差不多就到这里了,不晓得有没有解决大家的疑惑呢?

下一篇我们来介绍字串的相关应用--string函式库!


<<:  【从零开始的 C 语言笔记】第十三篇-Array介绍与应用(1)

>>:  安装程序开发工具(IDE) Visual Studio 2019

Ruby on Rails layout

预设版型? 前⾯提到说预设的版型是 app/views/layouts/application.ht...

LeetCode 双刀流: 236. Lowest Common Ancestor of a Binary Tree

236. Lowest Common Ancestor of a Binary Tree 今天一样...

Day28 ( 游戏设计 ) 吃角子老虎机

吃角子老虎机 教学原文参考:吃角子老虎机 这篇文章会介绍如何使用「函式」、「计次回圈」、「随机取数」...

乔叔教 Elastic - 28 - Elasticsearch 的优化技巧 (2/4) - Searching 搜寻效能优化

Elasticsearch 的优化技巧 系列文章索引 (1/4) - Indexing 索引效能优化...

[DAY18]Helm棒~~

Helm 常用command 以下指令应该是常常会操作到 helm create : 建立chart...