6.C语言字符串篇
字符串的两种定义形式
字符数组双引号
-
char str[n] = "abc";
- n=字符串长度+1 / 不写
-
注意点:
- 在存储时,会把字符串转换成字符数组进行保存,并且末尾会添加'\0'
- 内容可变(实际上就是一个数组)
指针双引号
-
char* str = "abc";
-
注意点:
-
在存储时,会把字符串转换成字符数组进行保存,并且末尾会添加'\0'
-
这种方式定义的字符数组会被存储在“只读常量区”
-
只读常量区:
-
内容不可修改
-
字符串可复用(类似Java(倒反天罡了属于是))
如果常量池中已经定义了“abcd”,那么下次在此定义“abcd”字符串时会直接使用常量池中已经定义过的“abcd”字符数组
-
-
-
实例
#include<stdio.h>
int main()
{
char str1[] = "abc";
printf("%s\n", str1); // abc
//修改
str1[0] = 'A';
printf("%s\n", str1); // Abc
char* str2 = "abcd";
char* str3 = "abcd";
printf("%s\n", str2); // abcd
printf("str2内存地址:%p\n", &str2); // str2内存地址:0000006A56BBFB48
printf("str3内存地址:%p\n", &str3); // str3内存地址:0000006A56BBFB68
return 0;
}
键盘录入字符串并遍历字符串
#include<stdio.h>
int main()
{
char str[100];
printf("请输入字符串:");
scanf("%s", str);
printf("输入的字符串是:%s\n", str);
char* p = str;
while (1)
{
//char c = *p;
if (*p == '\0')
{
break;
}
printf("%c\n", *p);
p++;
}
}
字符串储存多个数据
- printf()库函数中“%s”接收的类型就是内存地址(故而不需要解引用)
- 而这个库中的“%c”就需要解引用了
#include<stdio.h>
int main()
{
//第一种定义方式
char str1[5][100] =
{
"张三",
"李四",
"王五",
"赵六",
"钱七"
};
//遍历字符串数组
for (int i = 0; i < 5; i++)
{
printf("%s\n", str1[i]);
}
printf("--------------\n");
//第二种定义方式
char* str2[] =
{
"张三",
"李四",
"王五",
"赵六",
"钱七"
};
//遍历字符串数组
for (int i = 0; i < 5; i++)
{
printf("%s\n", str2[i]);
}
return 0;
}

浙公网安备 33010602011771号