示例一:字符串字面量(字符串常量)
//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;
}
示例二:字符串数组和初始化
//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;
}