鸟语天空
C语言—表示字符串和字符串I/O
post by:追风剑情 2019-10-14 19:40

示例一:字符串字面量(字符串常量)

//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

#define MSG "I am a symbolic string constant."
#define MAXLENGTH 81

//argc: 参数个数 argv[]: 参数数组
int main(int argc, char *argv[])
{
	char words[MAXLENGTH] = "I am a string in an array.";
	const char * pt1 = "Somethong is pointing at me.";
	//puts()会自动在字符串末尾加换行符
	puts("Here are some strings:");
	puts(MSG);
	puts(words);
	puts(pt1);
	words[8] = 'p';
	puts(words);

	//下面两句等价
	//用双引号串联字符串,中间可以加空格。
	char greeting[50] = "Hello, and"" how are" "you"
		" today!";
	char greeting1[50] = "Hello, and how are you today!";
	puts(greeting);

	//用引号括起来的字符串称为字符串字面量(字符串常量)
	//上面的字符串变量指向的是一个地址,类似于数组变量。

	//%c打印首字符
	printf("%s, %p, %c\n", "We", "are", *"space farers");

	system("pause");
	return 0;
}

运行测试
11111.png

示例二:字符串数组和初始化

//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

//argc: 参数个数 argv[]: 参数数组
int main(int argc, char *argv[])
{
	/*定义字符串数组时,必须让编译器知道需要多少空间。
	一种方法是用足够空间的数组储存字符串。*/
	const char m1[40] = "Limit yourself to one line's worth.";

	/*标准的数组初始化形式
	注意最后的空字符。没有这个空字符,这就不是一个字符串,
	而是一个字符数组。在指定数组大小时,要确保数组的元素
	个数至少比字符串长度多1(为了容纳空字符)。所有未被
	使用的元素都被自动初始化为0(这里的0指的是char形式的空字符,
	不是数字字符0)*/
	const char m2[40] = {'L', 'i', 'm', 'i', 't', '\0'};

	/*让编译器确定数据的大小,让编译器计算数组的大小只能用在初始化数组时。*/
	const char m3[] = "If you can't think of anything, fake it.";

	/*声明数组时,数组大小必须是可求值的整数。在C99新增变长数组之前,
	数组的大小必须是整型常量,包括由整型常量组成的表达式。*/
	int n = 8;
	char cookies[1]; //有效
	char cakes[2 + 5];//有效,数组大小是整型常量表达式
	char pies[2 * sizeof(long double) + 1];//有效
	//char crumbs[n]; //在C99标准之前无效,C99标准之后这种数组是变长数组

	/*字符数组名和其他数组名一样,是该数组首元素的地址。*/
	char car[10] = "Tata";
	if (car == &car[0] && *car == 'T' && *(car + 1) == car[1])
	{
		printf("True True True\n");
	}

	/*还可以使用指针表示法创建字符串。*/
	//下面两句等价
	const char * pt1 = "Something is pointing at me.";
	const char ar1[] = "Something is pointing at me.";

	puts(pt1);
	puts(ar1);

	system("pause");
	return 0;
}

运行测试
1111.png

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容