字符串变量(String Variables) 字符串变量以字符数组形式声明,但需注意声明长度 n的字符串需要n+1个字符的空间(包括末尾空字符): #define STR LEN 80 char str[STR LEN+1]; ■建议尽量采用上述声明字符串的惯用法 切记为字符串末尾的0留出空间,否则运行时会产生 非预期的结果 长度STR LEN+1的字符数组能存储长度为O到STR LEN 之间的字符串 11
字符串变量(String Variables) 11 字符串变量以字符数组形式声明,但需注意声明长度 n的字符串需要n+1个字符的空间(包括末尾空字符): 建议尽量采用上述声明字符串的惯用法 切记为字符串末尾的0留出空间,否则运行时会产生 非预期的结果 长度STR_LEN + 1的字符数组能存储长度为0到STR_LEN 之间的字符串 #define STR_LEN 80 ... char str[STR_LEN+1];
初始化字符串变量 字符串变量可以声明时初始化: char date1[8]"June 14"; ■初始化后编译器会自动在最后加入空字符: datel n e 1 4 \0 此处的"une14"不是字符串字面量,而是数组初始化 子 如果初始化子过短,多余空间补0 char date2[9]"June 14"; date2 u n e 1 4 \0 \0
初始化字符串变量 12 字符串变量可以声明时初始化: 初始化后编译器会自动在最后加入空字符: 此处的"June 14"不是字符串字面量,而是数组初始化 子 如果初始化子过短,多余空间补0 char date1[8] = "June 14"; char date2[9] = "June 14";
初始化字符串变量(续) 初始化子不可以长于字符数组,但可以等长: char date3[7]"June 14"; 因为没有多余空间存储空字符,编译器在此情况下不 再放置空字符: date3 u n e 1 4 也可以不指定数组长度,由编译器自行决定,此时编 译器会留出末尾的空字符位置 char date4[]"June 14"; 13
13 初始化子不可以长于字符数组,但可以等长: 因为没有多余空间存储空字符,编译器在此情况下不 再放置空字符: 也可以不指定数组长度,由编译器自行决定,此时编 译器会留出末尾的空字符位置 char date3[7] = "June 14"; char date4[] = "June 14"; 初始化字符串变量(续)
字符数组Vs字符指针 如下两个字符串声明 char date[]="June 14";/ character array char *date "June 14";/character pointer 字符数组形式的声明中,date是可修改的 ■字符指针形式的声明中,data指向字符串字面量"une 14",而字符串字面量是不允许修改的 在数组形式声明中,date是一个数组名,不能换做他 用 指针形式声明中,date是一个指针,可以修改为指向 其它地方 14
14 字符数组 vs 字符指针 如下两个字符串声明 字符数组形式的声明中,date是可修改的 字符指针形式的声明中,data指向字符串字面量"June 14",而字符串字面量是不允许修改的 在数组形式声明中,date是一个数组名,不能换做他 用 指针形式声明中,date是一个指针,可以修改为指向 其它地方 char date[] = "June 14"; // character array char *date = "June 14"; // character pointer
字符数组Vs字符指针(续) 字符指针默认是未初始化的,没有分配空间: char *p; 此时p不持有任何空间 将p用作字符串之前,须令p指向某个字符串的内存, 可以是静态的字符串数组或者动态分配的字符串 char str[STR_LEN+1],*p; p str; 15
15 字符数组 vs 字符指针(续) 字符指针默认是未初始化的,没有分配空间: char *p; 此时p不持有任何空间 将p用作字符串之前,须令p指向某个字符串的内存, 可以是静态的字符串数组或者动态分配的字符串 char str[STR_LEN+1], *p; p = str;