vs下关闭安全警告#define _CRT_SECURE_NO_WARINGS
#pragma warning (disable : 4996)
math.h
double pow (double n,double m) 计算n的m次方
double sqrt(double n) 计算根号n
scanf()参数是地址是因为要修改参数的值,必须传进去地址
以数组定义的字符串可以修改其中的字符,以指针定义的字符串不能修改其中的字符。
除了初始化能对字符数组=字符串的形式(数组名代表的数组地址不能修改),其他地方用strcpy();字符指针则可以任意=字符串(相当于指向常量区的另一个字符常量)。
转义字符是因为有些字符无法用键盘上的字符来表示,如换行,因此用转义字符来代替表示。如终结符‘\0’代表内存中实际存储的0.
输入的数据实际上是保存在一个缓冲区中,按enter键,程序中的一个个输入函数才会来取数据
一个字符数组a[len],
最多只能存储len-1个字符信息,最后一个是‘\0’。
printf参数的不同本质上是对内存01序列的不同表达形式,字节数,编码方法
单字符:
getchar() ,
putchar()
多格式:scanf() ,
printf();
把空格和回车当作输入结束。
字符串:gets(),puts()(
会自动打印个换行);只把回车当输入结束,因此
可以接收带空格的字符串。
以上都不安全,当输入内容可能大于接收的长度。
即使
输入内容可能大于接收的长度,会根据缓冲长度截断(后面也就丢失了),因为缓冲长度告诉了程序数组的最大长度(缓存长度)
如果缓冲长度>字符数组长度,相当于告诉程序一个错误的信息,也会溢出。
fgets(缓存字符数组,
缓冲长度,文件指针或者stdin)
fputs( const char *str, FILE *stream );//
不会默认打印个换行
int fscanf( FILE *stream, const char *format, ... );//从文件中读取作为输入
int fprintf( FILE *stream, const char *format, ... ); //打印到文件中
char name[20] = "Mary";
FILE *out;
out = fopen( "output.txt", "w" );
if( out != NULL )
fprintf( out, "Hello %s\n", name );
得到格式化的字符串
int sprintf( char *buffer, const char *format, ... );不是输出到屏幕而是
输出到字符串。 可完成atoi的相反功能。
从格式化的字符串中提取数据
int sscanf( const char *buffer, const char *format, ... );
int =atoi(字符串)
float =atof
(字符串)
strcat(字符数组,字符串) 往字符数组后面追加字符串(也可能溢出)
strncat(
字符数组,字符串,
字符数组剩余量)
字符比较==即可
strcmp()字符串比较
int strncmp( const char *str1, const char *str2, size_t count ) 比较
前count个字符是否相同。
char *strcpy( char *to, const char *from );将前者的内容与后者相同
char *strncpy( char *to, const char *from, size_t count ) 将前者的
前count个字符的内容与后者相同,后面的不变。
char *strchr( const char *str,‘ch’ );查找字符,返回char的地址,否则返回null
char *strstr( const char *str1, “字符串”)查找字符串;返回字符串的第一个字符的地址
buf =strtok(s,’_’)
while(){
printf(“%s\n”,buf);
buf=strtok(null,”_”);
}