示例一:字符串字面量(字符串常量)
//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; }