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;
}
posted @ 2026-03-14 15:45  Shadow001  阅读(0)  评论(0)    收藏  举报