字符串
- 以0(整数0)结尾的⼀串字符
- 0或’\0’是⼀样的,但是和’0’不同
- 0标志字符串的结束,但它不是字符串的⼀部分
- 计算字符串⻓度的时候不包含这个0
- 字符串以数组的形式存在,以数组或指针的形式访问,更多的是以指针的形式
- string.h ⾥有很多处理字符串的函数
字符串变量
• char *str = “Hello”;
• char word[] = “Hello”;
• char line[10] = “Hello”;
字符串常量
• “Hello”
• ″Hello″ 会被编译器变成⼀个字符数组放在某处,这
个数组的⻓度是6,结尾还有表⽰结束的0
• 两个相邻的字符串常量会被⾃动连接起来
• ⾏末的\表⽰下⼀⾏还是这个字符串
字符串
• C语⾔的字符串是以字符数组的形态存在的
• 不能⽤运算符对字符串做运算
• 通过数组的⽅式可以遍历字符串
• 唯⼀特殊的地⽅是字符串字⾯量可以⽤来初始化字符
数组
• 以及标准库提供了⼀系列字符串
#include<stdio.h>
#include<stdlib.h>
int main(){
char *s="Hello World";
printf("s[0]=%c\n",s[0]);//H
s[0]='B';
printf("s[0]=%c\n",s[0]);//错误,指向的位置是只读代码段,不能修改
return 0;
}
char*是字符串?No!
• 字符串可以表达为char*的形式
• char*不⼀定是字符串
• 本意是指向字符的指针,可能指向的是字符的数组(就像int*⼀样)
• 只有它所指的字符数组有结尾的0,才能说它所指的是字符串
字符串赋值
字符串输入输出
#include<stdio.h>
#include<stdlib.h>
int main(){
char word[8];
char word2[8];
scanf("%7s",word);
scanf("%7s",word2);
printf("%s# %s#\n",word,word2);
/*
123 12345678
123# 1234567#
*/
/*
123456789 11
1234567# 89#
*/
return 0;
}
利用汇编小知识:为什么如果字符串输入超过8个字符,就什么东西也没有输出呢?
字符串数组
程序参数