zl程序教程

您现在的位置是:首页 >  其他

当前栏目

C ------ 标准函数介绍

标准 函数 介绍 ------
2023-09-11 14:19:53 时间

sprintf()

函数原型:int sprintf( char *buffer, const char *format [, argument] ... )

 

功能介绍:

1、把一个字符串赋值(拷贝)给另一个字符串,如:

sprintf(str1, str2);//把字符串str2拷贝给str1

 2、把其他类型的数据按某些要求(比如补零)转化为字符串

sprintf(str1,"%04X",str.mid(0,4).toInt(&is_ok,10));

 

snprintf()

与sprintf()的区别在于,snprintf()多一个参数,即需要制定要把多少数据存入buffer,一般填sizeof(buffer)

函数原型:int snprintf(char *str, size_t size, const char *format, ...)

 

vsnprintf()

可能会由于需要打印未知个数的变量参数,那么vsnprintf函数就排上用场了。

函数原型:int vsnprintf(char *str, size_t size, const char *format, va_list ap)

通过vsnprintf()实现snprintf()功能:

#include <stdio.h>
#include <stdarg.h>
int my_snprintf(char *s, int size, const char *fmt, ...) //该自定义函数,与系统提供的snprintf()函数相同。
{
    va_list args;
    int n=0;
    va_start(args, fmt); //获得可变参数列表
    n=vsnprintf (s, size, fmt, args); //写入字符串s
    va_end(args); //释放资源
    return n; //返回写入的字符个数
}
int main() {
    char str[1024];
    my_snprintf( str, sizeof(str), "%d,%d,%d,%d",5,6,7,8);
    printf("%s\n",str);
    return 0;
}

 

memset()

函数原型:void *memset(void *s, int ch, size_t n);

 

功能介绍:

将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,memset是以字节为单位,初始化内存块

1. 当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值,比如,

  char data[10];  

  memset(data, 1, sizeof(data));    // right  

  memset(data, 0, sizeof(data));    // right 

而在初始化其他基础类型时,则需要注意,比如

  int data[10];  

  memset(data, 0, sizeof(data));    // right  

  memset(data, -1, sizeof(data));    // right  

  memset(data, 1, sizeof(data));    // wrong, data[x] would be 0x0101 instead of 1  

2. 当结构体类型中包含指针时,在使用memset初始化时需要小心。

比如如下代码中:
  struct Parameters {  
    int x;  
     int* p_x;  
  };  

  Parameters par;  

  par.p_x = new int[10];  

  memset(&par, 0, sizeof(par));  

当memset初始化时,并不会初始化p_x指向的int数组单元的值,而会把已经分配过内存的p_x指针本身设置为0,造成内存泄漏。同理,对std::vector等数据类型,显而易见也是不应该使用memset来初始化的。
 

 

memcmp()

C 库函数 int memcmp(const void *str1, const void *str2, size_t n)) 把存储区 str1 和存储区 str2 的前 n 个字节进行比较

 

 

malloc、realloc、calloc 和 free

malloc、realloc 和 calloc 用于申请内存,free 用于释放内存
 
 
void* malloc (size_t size);

 malloc:分配一块 size bytes 大小的内存,返回一个指向该内存开始的指针,该内存的值不确定,未被初始化

void* calloc (size_t num, size_t size);

 calloc:分配一块 num*size bytes 大小的内存,返回一个指向该内存开始的指针,该内存的值被初始化为0

void* realloc (void* ptr, size_t size);

 realloc:申请一个 size bytes 大小的内存,指针 p 指向该内存,把 ptr 指向的内存前 size 个字节数据拷贝到 p 指向的内存,释放 ptr 指向的内存,返回指针 p

void free (void* ptr);

 

释放内存