C语言函数学习积累及C语言遇到的坑

一、语法

  1. 不可定义char *c 来接收一个未知大小的字符串,只能用字符数组。想实现可变长,可申请堆内存。
  2. scanf之后最好加一个getchar(),否则如果scanf之后还有一个scanf且其接收的时字符类,会出错。

二、函数

(一)自定义函数

  • 在自定义的函数的时候,如果函数没有形式参数,定义时,形参的括号里要写void,不要什么都不写
  • 隐式声明: 函数写到了main后边,隐式声明认为返回值为int, 参数位未知个数个int 或 double,如果与真实的格式不符,编译就会出错。

(二)字符串

  1. char *strncpy(char *destinin, char *source, int maxlen)    :从source开始,复制到dest,复制n个字节或如果source不够,则以NULL填充直至n个字节。注意:maxlen是字节数
  • 利用该函数可以实现类似java中subString的功能对字符串进行裁剪:灵活使用source指针,调用函数时实参可以写成source+数字来控制复制的起点
  • source和dest必须是字符串即以\0字符结尾,但该函数不会在复制结束后给dest补上一个’\0’,如source为abcde,dest为xyz, maxlen为2,复制之后结果为abz,所以,应该在用完该函数之后执行:dest[maxlen] = '\0'
  1. strlen,类似1.中所说的灵活运用source指针,strlen也可以,str=“abc”,strlen(str)为3, strlen(str+1)为2

  2. 字符数字转换

    功能
    int atoi(const char *nptr) 字符串转换为整型数,stdlib.h
    ng atol(const char *nptr) 字符串转换为长整型 stdlib.h
    ng long atoll(const char *nptr) 转换为long long stdlib.h
    uble atof(const char *nptr) 转换为double,经测试只保留了6位小数stdlib.h
    --------------------- --------------------------------------------------------
    int snprintf(char *p, size_t,"%d", int i) 将整型i转成字符串,strlen()=size_t-1,即size_t包括\0
    printf()的占位符可以更改 若是浮点数,小数点也要算作字符串长度且size_t包括\0
    printf()的返回值位字符串长度,不含\0 返回值类型位size_t
    转字符串也可以用itoa()系列函数 但该系列函数在linux中需要额外的库
  3. malloc,在使用中,申请完空间要判断是否为空,为空则申请失败。尤其小心对于申请到的空间,使用strncpy,memcpy等函数时,不要越界,否则free失败。 详情请查看https://blog.csdn.net/yupei881027/article/details/42673343

  4. free 之前要判断指针是否为空,为空不可free,free之后要将指针置位NULL

(三)随机数

  1. rand()返回一个随机数,头文件为stdlib.h
  2. srand(time(0));使rand()返回的随机数每次运行都不一样(在同一秒内多次运行,结果是一样的)。time()函数在time.h中在任何程序中,只要使用srand()一次就可以了,多次使用可能会得到相同的随机数

你可能感兴趣的:(C语言函数)