C语言常用函数

1、snprintf

char a='a';
char str[3];
snprintf(str,sizeof(str),"%02x",a);

解释如下:
size是限定最终生成的dest的字符数,最多拷贝size-1个字符; 一般情况下size会取sizeof(dest),这是为了dst不溢出.

在snprintf(dest, size, "str: %s\n", src)中如果size-1大于等于"str: %s\n"的长度,则把"str: %s\n"都拷贝到dst; 如果size-1小于"str: %s\n"的长度,则从"str: %s\n"拷贝size-1长度的字符串到dst,并且末尾置\0.

就是说,拷贝的长度是size-1和源字符串长度的最小值;

对于返回值,需要注意的是snprintf的返回值是欲写入的字符串(即源字符串)长度,而不是实际写入的字符串度。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    char a[5];
    char *s = "asdadereg";
    int ret = snprintf(a, sizeof a, "%s",s);

    printf("%d, %s\n",ret, a);
    return 0;
}

输出:

9, asda

2、fread与fwrite

size_t    fread(void *buffer, size_t size, size_t count, FILE *stream);

buffer : 数据存储的地址

size : 要读取的字节的大小

count : 要读取多少个size大小

stream : 等待被读取的数据源,它是一个指向FILE结构的文件指针

fread 如果读取成功,则返回count的大小,如果还没有读取count个size大小的数据时,就以及读取完了整个文件,到了文件结尾的地方了,此时返回的值就要必count小,或者在读取的过程出错的话,返回的值也必count小,所以如果返回的值比count小时,可以通过feof()函数或ferror函数来判断到底是读取过程中出错了还是已经读取到了文件结尾的部分了。 如果size 或count 本身被设置为0, 则fread不做任何操作。

注:fread 函数的功能是从输入流(input stream)中读取count个size大小的字节数存储到buffer中,关联输入流的文件指针的位置会随着字节数的读取而向前移动。如果输入流是以文本模式打开的,那么单个换行符将会被替换成回车换行符,换行符的替换,不会影响到文件指针和返回值。如果遇到了错误,那么文件指针的当前位置和已读取的不部分值都是不确定的。

size_t    fwrite(const void *buffer, size_t  size,  size_t count , FILE *stream)

buffer: 指向被写入的数据源指针

size: 每次写入的字节数大小

count : 执行一次fwrite函数,最大可写入 count个size大小的字节数

stream 指向等待写入数据的文件指针,即文件被写入的地址

如果写入成功则返回count值。

fwrite的功能是将文件从buffer中写入到output stream中去,每次写入的字节数为size, 最多可写入count次。

猜你喜欢

转载自blog.csdn.net/EMH1899/article/details/84878140