破站内陆的番是越来越没得看了……这季度除了STR感觉没什么能看的。反正我想看的全在墙外……
不得不说骨王还是那么好看,先把骨王补到跟上进度,其它的慢慢来了。
题外话:泡泡茶壶姐捏的两个暗精灵真的是戳中当代人的xp(图2),而且还挺超前。不过要我捏的话我倒是不会捏这种,我会捏个塞巴斯那种帅气又能打的老头子[doge]
不得不说骨王还是那么好看,先把骨王补到跟上进度,其它的慢慢来了。
题外话:泡泡茶壶姐捏的两个暗精灵真的是戳中当代人的xp(图2),而且还挺超前。不过要我捏的话我倒是不会捏这种,我会捏个塞巴斯那种帅气又能打的老头子[doge]
#夏说英文晨读[超话]##wujacob#
Day 1524 | 后续来了!FBI突袭搜查特朗普海湖庄园的原因是……
1. FBI(Federal Bureau of Investigation) 美国联邦调查局
2. seek to 试图
3. locate 找到(find out)
4. classified /ˈklæsəfaɪd/ adj. 机密的
· classified documents 机密文件
· classified information 机密信息
· classified material 机密材料
5. among other items/things/places 事实或原因的结果不止一个
6. revelation /ˌrevəˈleɪʃ(ə)n/ n. 被暴露的真相,被曝光的秘闻
· 构词:词根veil-面纱,前缀re-后
7. context /ˈkɑːntekst/ n. 事情的来龙去脉,背景
· add context to 补充了前后背景、事情的来龙去脉
8. extraordinary /ɪkˈstrɔːrd(ə)neri/ adj. 非凡的;不同寻常的(unusual)
Day 1524 | 后续来了!FBI突袭搜查特朗普海湖庄园的原因是……
1. FBI(Federal Bureau of Investigation) 美国联邦调查局
2. seek to 试图
3. locate 找到(find out)
4. classified /ˈklæsəfaɪd/ adj. 机密的
· classified documents 机密文件
· classified information 机密信息
· classified material 机密材料
5. among other items/things/places 事实或原因的结果不止一个
6. revelation /ˌrevəˈleɪʃ(ə)n/ n. 被暴露的真相,被曝光的秘闻
· 构词:词根veil-面纱,前缀re-后
7. context /ˈkɑːntekst/ n. 事情的来龙去脉,背景
· add context to 补充了前后背景、事情的来龙去脉
8. extraordinary /ɪkˈstrɔːrd(ə)neri/ adj. 非凡的;不同寻常的(unusual)
粤嵌星计划 粤嵌我来了
字符串的结束标志
在C语言中,字符串总是以'\0'作为结尾,所以'\0'也被称为字符串结束标志,或者字符串结束符。
'\0'是 ASCII 码表中的第 0 个字符,英文称为 NULL,中文称为“空字符”。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。
C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到'\0'就认为到达了字符串的末尾,就结束处理。'\0'至关重要,没有'\0'就意味着永远也到达不了字符串的结尾。
上面是 ABCDEFGHI在内存中存储的例子
char str[10] = "ABCDEFGHI"; //他们最少需要十个字节储存
需要注意的是,逐个字符地给数组赋值并不会自动添加'\0',例如:
char str[] = {'a', 'b', 'c'}
数组 str 的长度为 3,而不是 4,因为最后没有'\0'。
当用字符数组存储字符串时,要特别注意'\0',要为'\0'留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1
有些时候,程序的逻辑要求我们必须逐个字符地为数组赋值,这个时候就很容易遗忘字符串结束标志'\0'。下面的代码中,我们将 26 个大写英文字符存入字符数组,并以字符串的形式输出:
#include
int main(void)
{
char str[30]; //局部变量,未赋值,里面的值是任意值(未知)
char c = 0;
int i = 0;
//对数组进行赋值
for(i=0,c=65;c<=90; c++, i++)
//for循环在实现表达式一时,可以同时给多个变量进行初始化,中间用逗号分隔
{
str[i] = c;
}
//打印字符串方法
printf("%s", str);
printf("\n");
return 0;
}
在函数内部定义的变量、数组、结构体、共用体等都称为局部数据。在很多编译器下,局部数据的初始值都是随机的、无意义的,而不是我们通常认为的“零”值。
printf() 输出字符串时,会从第 0 个元素开始往后检索,直到遇见'\0'才停止,然后把'\0'前面的字符全部输出,这就是 printf() 输出字符串的原理。
本例中我们使用 printf() 输出 str,按理说到了第 26 个元素就能检索到'\0',就到达了字符串的末尾,然而事实却不是这样,由于我们并未对最后 4 个元素赋值,所以第 26 个元素不是'\0',第 27 个也不是,第 28 个也不是……可能到了第 n个元素才遇到'\0',printf() 把这 n个字符全部输出出来,就是上面的样子,多出来的字符毫无意义,甚至不能显示。数组总共才 30 个元素,到了第 50 个元素不早就超出数组范围了吗?是的,的确超出范围了!然而,数组后面依然有其它的数据,printf() 也会将这些数据作为字符串输出。不注意'\0'的后果有多严重,不但不能正确处理字符串,甚至还会毁坏其它数据。
要想避免这些问题也很容易,在字符串的最后手动添加'\0'即可。修改上面的代码,在循环结束后添加'\0':
字符串的结束标志
在C语言中,字符串总是以'\0'作为结尾,所以'\0'也被称为字符串结束标志,或者字符串结束符。
'\0'是 ASCII 码表中的第 0 个字符,英文称为 NULL,中文称为“空字符”。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。
C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到'\0'就认为到达了字符串的末尾,就结束处理。'\0'至关重要,没有'\0'就意味着永远也到达不了字符串的结尾。
上面是 ABCDEFGHI在内存中存储的例子
char str[10] = "ABCDEFGHI"; //他们最少需要十个字节储存
需要注意的是,逐个字符地给数组赋值并不会自动添加'\0',例如:
char str[] = {'a', 'b', 'c'}
数组 str 的长度为 3,而不是 4,因为最后没有'\0'。
当用字符数组存储字符串时,要特别注意'\0',要为'\0'留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1
有些时候,程序的逻辑要求我们必须逐个字符地为数组赋值,这个时候就很容易遗忘字符串结束标志'\0'。下面的代码中,我们将 26 个大写英文字符存入字符数组,并以字符串的形式输出:
#include
int main(void)
{
char str[30]; //局部变量,未赋值,里面的值是任意值(未知)
char c = 0;
int i = 0;
//对数组进行赋值
for(i=0,c=65;c<=90; c++, i++)
//for循环在实现表达式一时,可以同时给多个变量进行初始化,中间用逗号分隔
{
str[i] = c;
}
//打印字符串方法
printf("%s", str);
printf("\n");
return 0;
}
在函数内部定义的变量、数组、结构体、共用体等都称为局部数据。在很多编译器下,局部数据的初始值都是随机的、无意义的,而不是我们通常认为的“零”值。
printf() 输出字符串时,会从第 0 个元素开始往后检索,直到遇见'\0'才停止,然后把'\0'前面的字符全部输出,这就是 printf() 输出字符串的原理。
本例中我们使用 printf() 输出 str,按理说到了第 26 个元素就能检索到'\0',就到达了字符串的末尾,然而事实却不是这样,由于我们并未对最后 4 个元素赋值,所以第 26 个元素不是'\0',第 27 个也不是,第 28 个也不是……可能到了第 n个元素才遇到'\0',printf() 把这 n个字符全部输出出来,就是上面的样子,多出来的字符毫无意义,甚至不能显示。数组总共才 30 个元素,到了第 50 个元素不早就超出数组范围了吗?是的,的确超出范围了!然而,数组后面依然有其它的数据,printf() 也会将这些数据作为字符串输出。不注意'\0'的后果有多严重,不但不能正确处理字符串,甚至还会毁坏其它数据。
要想避免这些问题也很容易,在字符串的最后手动添加'\0'即可。修改上面的代码,在循环结束后添加'\0':
✋热门推荐