字符串
字符数组
#include <stdio.h>
int main(void)
{
char word[]={'H','e','l','l','o',' ','w','o','r','l','d',};
int i=0;
int n=sizeof(word)/sizeof(word[0]);
for (i=0;i<n;i++){
printf("%c",word[i]);
}
printf("\n");
return 0;
}
输出
字符串定义
1、以’\0’结束的一串字符;
2、 0标准字符串的结束,但他不是字符串的一部分;
3、字符串以数组的形式存在,以数组或指针(更多)的形式访问;
4、string.h头文件有很多处理字符串的函数。
字符串变量
char* str = “Hello”;
char word[] =“Hello”;
char word[10] = “Hello”; //加上结尾的’\0’,字符数组的长度是6
字符串常量
“Hello”
两个相邻的字符串常量会被自动连接起来
"hello "“world” =“hello world”
不同的定义方法用的地址不一样:
char* str = “Hello”;相当是const char* str = “Hello”;
str是一个指向字符串常量的指针(这段地址比较特殊,而且相同字符串的地址相同)
试图对str所指的字符串做写入会导致严重后果
如果需要修改字符串,应该用字符数组进行定义
char str2[] = “Hello”;
#include <stdio.h>
int main(void)
{
int i=0;
char* str = "Hello";
char* str1 = "Hello";
char str2[] = "Hello";
printf("&i =%p\n",&i);
printf("str =%p\n",str);
printf("str1=%p\n",str1);
printf("str2=%p\n",str2);
return 0;
}
运行结果
字符串特点
以字符数组的形式存在
不能用±*/运算符进行运算
通过数组的方式可以遍历字符串
使用指针还是数组定义字符串?
char* str = “Hello”
char word[] = “Hello”
指针:要处理一个字符串(对字符串只读)
1、处理参数
2、malloc动态分配空间
数组:要构造一个字符串(对字符串读写)
1、作为本地变量空间,自动被回收
字符串输入输出scanf&printf
#include <stdio.h>
int main(void)
{
char* str = "Hello";
char str2[] = "Hello";
printf("str =%s\n",str);
printf("str2=%s\n",str2);
char str3[3];
char str4[3];
scanf("%s%s",str3,str4);
printf("%s##%s\n",str3,str4);
return 0;
}
1、scanf输入一个单词(空格、tab或回车为止)
2、scanf不知道字符大小,上述截图字符超过定义的长度依然正常输入。
字符串输入应该单独使用一个scanf函数,而且能够设置输入的大小
#include <stdio.h>
int main(void)
{
char str3[3];
char str4[3];
scanf("%2s",str3);
scanf("%s",str4);
printf("%s##%s\n",str3,str4);
return 0;
}
常见错误
1、定义了指针变量误以为定义了字符串变量直接使用(运行的时候不一定出错)
char* str;
scanf("%s",str);
2、空字符串
char str[] = “”; //空字符串,无法存放字符
char str[10] = “”; //长度是10,str[0] = ‘\0’
字符串数组
char **a;
char a[][];
二位字符串数组第二维要有固定的大小
#include <stdio.h>
int main(void)
{
char a[][10] = {
"hello",
"1234567890",
};
printf("%s##\n",a);
printf("%s##\n",a[1]);
return 0;
}
上面的char a[][10]可以替换为char* a[]输出结果不同,以下是改成char* a输出结果的
main函数参数
int main(int argc,char const *argv[])
argc是参数个数,argv是参数组成的字符串数组
参考代码
#include <stdio.h>
int main(int argc,char const *argv[])
{
int i;
for (i=0;i<argc;i++){
printf("main参数%d:%s\n",i,argv[i]);
}
return 0;
}