1,C语言中字符串是字符数组:
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; 或者 char site[] = "RUNOOB"; 注意: \0是null字符,用于终止该字符数组,标记字符串结束。 写入空字符结束并不是必须,因为编译器初始化会自动加入。 数组的末尾存储了空字符, 所以字符数组的大小比单词 RUNOOB 的字符数多一个
实例:
#include <stdio.h> int main () { char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; printf("菜鸟教程: %s\n", site ); return 0; } 执行: 菜鸟教程: RUNOOB
可以看成数组名称就是字符串变量。
总结:字符串就是字符数组,但字符数组并不一定是字符串。
1,下面两个并不等价: char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'}; 不等于: char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'}; 字符串都有一个\0结尾。 但有时候并不需要手动写,编译器自动完成。 下面三种都是等价的: char[] = {"I love shiyanlou"}; 可以直接省去花括号: char[] = "I love shiyanlou"; 此时数组的长度是 17,而不是 16,因为字符串常量的最后系统自动加了一个 '\0'。 char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'};
1,下面两个并不等价: char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'}; 不等于: char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'}; 字符串都有一个\0结尾。 但有时候并不需要手动写,编译器自动完成。 下面三种都是等价的: char[] = {"I love shiyanlou"}; 可以直接省去花括号: char[] = "I love shiyanlou"; 此时数组的长度是 17,而不是 16,因为字符串常量的最后系统自动加了一个 '\0'。 char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'};
在C语言中,可以用两种方法表示和存放字符串: (1)用字符数组存放一个字符串 char str[ ]=”I love China”; (2)用字符指针指向一个字符串 char* str=”I love China”; 对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量”I love China”直接赋给该字符串变量,这是不对的。 C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。