#include <stdio.h>
int main() {
char ch = 'A';
printf("%lu %lu\n",sizeof (ch), sizeof ('A'));
//字符字面量是整形的
int val = '1234';
printf("%#x\n",val);
return 0;
}
/*
定义字面量时通常会将其分配在字面量池中,这个内存区域保存了组成字符串的字符序列。
多次用到同一个字面量时,字面量池中通常只有一份副本。
这样会减少应用程序占用的内存。
通常认为字面量是不可变的,因此只有一份副本不会有什么问题。
不过,认定只有一份副本或者字面量不可变不是一种好做法,大部分编译器有关闭字面量池的选项,一旦关闭,字面量可能生成多个副本,每个副本拥有自己的地址。
注意 GCC用-fwritable-strings选项来关闭字符串池
*/
const char* str = "hello";
/*
* 定义一个指向 字符串常量"hello" 首元素地址的指针,所以不能通过指针修改内容
**/
const char* str[] = {"hello","world","\0"};
/*
* 三个const char*类型组成的字符串
**/
char str[] = "hello";
char str[] = {'h','e','l','l','o','\0'};
/*
* 定义字符数组str,使用"hello"字符串初始化,包含字符串'\0',所以有6个元素
* 相当于执行了
* char str[6];
* char *strcpy(char *dest, const char *src);
**/
gets():
头文件:#include <stdio.h>
原型:char *gets(char *s);
作用:从stdin获取一行数据,送入s指向的缓冲区中,一行数据结束标志是'\n'或者EOF,存入到s缓冲区时会在数据末尾添加'\0'
返回值:成功返回s的地址,失败返回NULL,
缺陷:无法判断s缓冲是否溢出,增加版本fgets()
puts
strcat
strcpy(strncpy)
strcmp(strncmp)
strlen
strlwr
strupr
strstr