C语言函数大全-- u 开头的函数

news2024/9/22 19:24:03

C语言函数大全

本篇介绍C语言函数大全-- u 开头的函数

1. ultoa

1.1 函数说明

函数声明函数功能
char *ultoa(unsigned long value, char *str, int base);用于将无符号长整型数转换成指定基数下的字符串表示

参数:

  • value : 要转换的无符号长整型数
  • str : 用于存储转换后的字符串
  • base : 要使用的进制数,可以为 2、8、10 或 16

函数 ultoa() 将参数 value 转换为以 base 进制表示的形式,并将结果存储在缓冲区 str 中。如果转换成功,则返回指向 str 的指针。

注意: 函数 ultoa() 不会检查缓冲区是否足够大,因此调用者需要确保缓冲区足够大以避免发生缓冲区溢出。

1.2 演示示例

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

int main() 
{
    unsigned long num = 0xDEADBEEF;
    char str[20];

    _ultoa(num, str, 16); 

    printf("The hexadecimal representation of %lu is %s\n", num, str);

    return 0;
}

1.3 运行结果

在这里插入图片描述

2. ungetc

2.1 函数说明

函数声明函数功能
int ungetc(int c, FILE *stream);用于将字符推回输入流中

参数:

  • c : 要推回的字符
  • stream : 要推回字符的文件指针

2.2 演示示例

#include <stdio.h>

//int ungetc(int c, FILE *stream);

int main() 
{
    int c;
    FILE *fp = fopen("test.txt", "r");

    if (fp == NULL) 
    {
        printf("Failed to open file\n");
        return 1;
    }

    // 读取一个字符
    c = fgetc(fp);

    if (c == EOF) 
    {
        printf("Failed to read character\n");
        return 1;
    }

    printf("Read character: %c\n", c);

    // 推回字符到输入流中
    if (ungetc(c, fp) == EOF) 
    {
        printf("Failed to unget character\n");
        return 1;
    }

    // 再次读取字符
    c = fgetc(fp);

    if (c == EOF) 
    {
        printf("Failed to read character\n");
        return 1;
    }

    printf("Read character again: %c\n", c);

    fclose(fp);
    return 0;
}

在上面的示例代码中,

  • 我们首先打开了一个名为 test.txt 的文本文件;
  • 接着,使用 fgetc() 函数从中读取一个字符;
  • 然后,我们使用 ungetc() 函数将该字符推回输入流中;
  • 再接着使用 fgetc() 函数从输入流中读取字符;
  • 最后,我们使用 printf() 函数将两次读取的字符打印到标准输出流中。

注意: 在使用 ungetc() 函数推回字符之前,必须先读取一个字符并检查其是否成功读取。否则,ungetc() 函数将无法确定将字符推回哪个位置。

2.3 运行结果

在这里插入图片描述

3. ungetch

3.1 函数说明

函数声明函数功能
int ungetch(int c);用于将字符推回输入流中

参数:

  • c : 要推回的字符

3.2 演示示例

#include <stdio.h>
#include <ctype.h>
#include <conio.h>

int main()
{
    int i=0;
    char ch;

    puts("Input an integer followed by a char:");

    while((ch = getche()) != EOF && isdigit(ch))
        i = 10 * i + ch - 48; 

    if (ch != EOF)
        ungetch(ch);

    printf("\n\ni = %d, next char in buffer = %c\n", i, getch());
    return 0;
}

在上述的示例代码中,

  • 我们首先输出一条提示信息 "Input an integer followed by a char:"
  • 接着,通过循环调用 getche() 函数从输入流中逐个读取字符,并检查它是否是数字字符。如果是数字字符,则将其转换为整数并存储在变量 i 中。
  • 然后,在读取到非数字字符时,使用 ungetch() 函数将该字符推回输入流中,以保留它供后续使用。
  • 最后,使用 getch() 函数从输入流中读取一个字符,并打印出读取到的下一个字符和此时 i 的值。

注意: getch()ungetch() 函数通常只在 Windows 平台上可用,因此这段代码可能不可移植到其他操作系统或编译器中。

3.3 运行结果

在这里插入图片描述

4. unix2dos

4.1 函数说明

函数声明函数功能
int unix2dos(const char *src_file, const char *dst_file);用于将文本文件的行末标志符从 Unix 风格的 \n 转换为 Windows/DOS 风格的 \r\n
int dos2unix(const char *src_file, const char *dst_file);用于将将文本文件的行末标志符从 Windows/DOS 风格的 \r\n 转换为 Unix 风格的 \n

参数:

  • src_file : 要转换的源文件名
  • dst_file : 转换后保存到的目标文件名

返回值:

  • 如果转换成功,则返回 0
  • 否则返回一个 非零值, 表示错误代码。

4.2 演示示例

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

int unix2dos(const char *src_file, const char *dst_file);
int dos2unix(const char *src_file, const char *dst_file);

int main() 
{
    int status;

    // 将 Unix 格式的文件转换为 DOS 格式
    status = unix2dos("input_unix.txt", "output_dos.txt");
    if (status != 0) 
    {
        printf("Failed to convert file: %d\n", status);
        return 1;
    }

    // 将 DOS 格式的文件转换为 Unix 格式
    status = dos2unix("input_dos.txt", "output_unix.txt");
    if (status != 0) 
    {
        printf("Failed to convert file: %d\n", status);
        return 1;
    }

    printf("File conversion successful\n");
    return 0;
}

int unix2dos(const char *src_file, const char *dst_file) 
{
    FILE *in = fopen(src_file, "r");
    FILE *out = fopen(dst_file, "w");

    if (in == NULL || out == NULL)
        return -1;

    int c;

    while ((c = fgetc(in)) != EOF) 
    {
        if (c == '\n')
            fputc('\r', out);
        fputc(c, out);
    }

    fclose(in);
    fclose(out);

    return 0;
}

int dos2unix(const char *src_file, const char *dst_file) 
{
    FILE *in = fopen(src_file, "r");
    FILE *out = fopen(dst_file, "w");

    if (in == NULL || out == NULL) 
        return -1;

    int c;
    int prev = -1;

    while ((c = fgetc(in)) != EOF) 
    {
        if (prev == '\r' && c == '\n') 
        {
            // skip CR character
            prev = c;
            continue;
        }
        fputc(c, out);
        prev = c;
    }

    fclose(in);
    fclose(out);

    return 0;
}

5. unlink

5.1 函数说明

函数声明函数功能
int unlink(const char *pathname);用于删除指定文件

参数:

  • pathname : 要删除的文件路径名

5.2 演示示例

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

int main() 
{
    int status;

    // 删除指定文件
    status = unlink("huazie.txt");
    if (status != 0) 
    {
        printf("Failed to delete file: %d\n", status);
        return 1;
    }

    printf("File deletion successful\n");
    return 0;
}

在上面的示例代码中,我们使用 unlink() 函数删除了当前目录下名为 huazie.txt 的文件。如果 unlink() 函数返回值不为 0,则说明删除操作失败,可能是由于权限不足、文件不存在或其他原因导致的。如果删除操作成功,则会输出一条简短的提示信息 "File deletion successful"

注意: 由于删除操作无法撤销,并且被删除的文件内容将无法恢复,因此在使用 unlink() 函数删除文件时需要小心谨慎,建议在执行此类敏感操作之前进行备份或确认。

5.3 运行结果

在这里插入图片描述

6. unlock

6.1 函数说明

函数声明函数功能
int unlock(int handle, long offset, long length);它不是标准 C 库中的函数,而是 Linux/Unix 系统下用于文件锁定和解锁的函数

参数:

  • handle : 要解锁的文件句柄
  • offset: 解锁操作的起始偏移量(以字节为单位)。通常情况下,偏移量应该为正整数,代表从文件开头开始的偏移量。如果 offset 参数小于零,则将从文件末尾开始向前计算偏移量。
  • length: 要解锁的字节数

6.2 演示示例

#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
#include <sys\locking.h>

int main(void)
{
    int handle, status;
    long length;
	// 打开名为 test.txt 的文件
    handle = sopen("test.txt",O_RDONLY,SH_DENYNO,S_IREAD);

    if (handle < 0)
    {
        printf("sopen failed\n");
        exit(1);
    }
	// 获取文件长度
    length = filelength(handle);
    // 锁定上面打开的文件
    status = lock(handle,0L,length/2);
	// 检查锁定操作是否成功,返回0,表示成功,返回非0,则加锁失败
    if (status == 0)
        printf("lock succeeded\n");
    else
        printf("lock failed\n");
	// 对上面锁定的文件进行解除锁定
    status = unlock(handle,0L,length/2);
	// 检查解除锁定操作是否成功,返回0,表示成功,返回非0,则解锁失败
    if (status == 0)
        printf("unlock succeeded\n");
    else
        printf("unlock failed\n");
	// 关闭文件句柄
    close(handle);
    return 0;
}

7. UnlockFile

7.1 函数说明

函数声明函数功能
BOOL UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh);用于对文件进行解锁操作

参数:

  • hFile : 要解锁的文件句柄
  • dwFileOffsetLow 和 dwFileOffsetHigh: 解锁操作的起始偏移量(以字节为单位)。由于文件大小可能超过 4GB,因此需要使用两个参数表示完整的偏移量
  • nNumberOfBytesToUnlockLow 和 nNumberOfBytesToUnlockHigh: 要解锁的字节数。同样地,这些参数也需要使用两个参数表示完整的字节数

7.2 演示示例

#include <windows.h>
#include <stdio.h>

int main() {
    HANDLE file_handle;
    DWORD bytes_written;
    OVERLAPPED overlapped = {0};
    DWORD offset = 0;
    DWORD length = 0;
    BOOL status;

    // 打开指定文件并获取文件句柄
    file_handle = CreateFile("test.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
                             FILE_ATTRIBUTE_NORMAL, NULL);
    if (file_handle == INVALID_HANDLE_VALUE) 
    {
        printf("Failed to open file\n");
        return 1;
    }

    // 将字符串写入文件
    const char *data = "Hello, world!";
    status = WriteFile(file_handle, data, strlen(data), &bytes_written, &overlapped);
    if (!status) 
    {
        printf("Failed to write to file\n");
        CloseHandle(file_handle);
        return 1;
    }

    // 锁定文件的前半部分
    length = GetFileSize(file_handle, NULL) / 2;
    status = LockFile(file_handle, offset, 0, length, 0);
    if (!status) 
    {
        printf("Failed to lock file\n");
        CloseHandle(file_handle);
        return 1;
    }

    printf("File locked successfully\n");

    // 解锁文件的前半部分
    status = UnlockFile(file_handle, offset, 0, length, 0);
    if (!status) 
        printf("Failed to unlock file\n");
    else 
        printf("File unlocked successfully\n");

    // 关闭文件句柄并返回
    CloseHandle(file_handle);
    return 0;
}

在上面的示例代码中,

  • 我们首先使用 Windows API 中的 CreateFile() 函数打开名为 test.txt 的文件,并获取其文件句柄;
  • 然后,我们使用 WriteFile() 函数将字符串写入文件;
  • 接着,我们使用 LockFile() 函数对文件进行锁定操作,并使用 UnlockFile() 函数进行解锁操作;
  • 最后,我们关闭文件句柄并退出程序。

注意:在使用 UnlockFile() 函数时,需要确保已经使用 CreateFile() 或其他文件打开函数打开了文件,并获得了有效的文件句柄。

7.3 运行结果

在这里插入图片描述

参考

  1. [API Reference Document]
  2. [LockFile function]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/511055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker容器无法执行vim【已解决】

docker容器无法执行vim【已解决】 docker容器中执行vim失败安装文件没更换之前&#xff0c;速度非常的慢【失败】这里我更换了163的但是报错【失败】这里我更换了阿里的第一种报错【成功】&#xff1a;&#xff1a;&#xff1a;&#xff1a;这里我更换了阿里的第二种成功 完整步…

struct模块进行数据打包

原理&#xff1a; 将一组简单数据进行打包&#xff0c;转换为bytes格式发送。或者将一组bytes格式数据&#xff0c;进行解析。 接口使用 Struct(fmt) 功能: 生成结构化对象 参数&#xff1a;fmt 定制的数据结构 st.pack(v1,v2,v3…) 功能: 将一组数据按照指定格式打包转换为by…

分子动力学基础知识

分子动力学基础知识 目前主要存在两种基本模型&#xff1a;其一为量子统计力学, 其二为经典统计力学。 量子统计力学 基于量子力学原理, 适用 于微观的, 小尺度, 短时 间的模拟&#xff0c;可以描述电子 的结构分布&#xff0c;原子间的成 键断键等化学性质。 经典纭计力学…

MySQL原理(七):内存管理和磁盘管理

前言 上一篇介绍了 MySQL 的日志&#xff0c;这一篇将介绍内存管理和磁盘管理相关的内容。 内存管理 MySQL 的数据都是存在磁盘中的&#xff0c;我们要更新一条记录的时候&#xff0c;得先要从磁盘读取该记录&#xff0c;然后在内存中修改这条记录。修改完这条记录后会缓存起…

15 KVM虚拟机配置-体系架构相关配置

文章目录 15 KVM虚拟机配置-体系架构相关配置15.1 概述15.2 元素介绍15.3 AArch64架构配置示例15.4 x86_64架构配置示例 15 KVM虚拟机配置-体系架构相关配置 15.1 概述 XML中还有一部分体系架构相关的配置&#xff0c;这部分配置包括主板&#xff0c;CPU&#xff0c;一些与体…

【2023/05/10】Mitchel Resnick

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第5天。 Share Her wistful face haunts my dreams like the rain at night. 译文&#xff1a; 她的热切的脸&#xff0c;如夜雨似的&#xff0c;搅扰着我的梦魂。 Once we dreamt that we were stra…

论文解读:DELPHI:用于蛋白质相互作用位点预测的精确深度集成模型

期刊&#xff1a; Briefings in Bioinformatics 出版日期 2022-11-22 websever:https://iasri-sg.icar.gov.in/pldbpred/ 网址&#xff1a; PlDBPred: a novel computational model for discovery of DNA binding proteins in plants | Briefings in Bioinformatics | Oxfo…

递归到动态规划- X-空间压缩技巧

空间压缩技巧的示例代码代码&#xff0c; LeetCode第64题 验证链接&#xff1a;力扣 package dataStructure.recurrence.practice;/*** https://leetcode.cn/problems/minimum-path-sum/* Leecode第64题* 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左…

C++好难(6):模板初阶

【本节目标】 1. 泛型编程2. 函数模板3. 类模板 目录 【本节目标】 1.泛型编程 2.函数模板 概念&#xff1a; 格式&#xff1a; 原理&#xff1a; 实例化&#xff1a; 1.隐式实例化&#xff1a; 2.显式实例化 原则一&#xff1a; 原则二&#xff1a; 原则三&#…

数组存储与指针学习笔记(三)指针与数组

嵌入式C语言学习进阶系列文章 GUN C编译器拓展语法学习笔记(一&#xff09;GNU C特殊语法部分详解 GUN C编译器拓展语法学习笔记(二&#xff09;属性声明 GUN C编译器拓展语法学习笔记(三&#xff09;内联函数、内建函数与可变参数宏 数组存储与指针学习笔记(一&#xff09;数…

OpenCv更改颜色空间以及图像阈值

本文主要讲解以下几个方面: 如何将图片从一个颜色空间转换到另一个&#xff0c;例如 BGR 到 Gray&#xff0c;BGR 到 HSV 等。简单阈值法另外&#xff0c;我们会创建一个从图片中提取彩色对象的应用。 1.改变颜色空间 cv.cvtColor(img, flag) 参数flag表示颜色空间转换的方…

Hive语言2(大数据的核心:窗口函数)

1、Common Table Expressions&#xff08;CTE&#xff09;> 重点 公用表达式(CTE)是一个临时结果集&#xff0c;该结果集是从WITH子句中指定的简单查询派生而来的&#xff0c;该查询紧接在SELECT或INSERT关键字之前。 2.inner join&#xff08;内连接&#xff09;、left joi…

网页源码加密JavaScript程序,有效压缩和加密JS、Html、Css页面数据

我们知道&#xff0c;基于Des或Aes对称加密时&#xff0c;当明文和密码相同&#xff0c;则密文相同。而我们此次发布是WJLSymmetricEncryption4.js&#xff08;点击链接跳转到下载页面&#xff09;加密程序&#xff0c;当明文和密码相同&#xff0c;每次加密后的密文不相同&…

20230510vmlinux编译过程

1.进入linux内核源码目录下&#xff0c;打开Makefile文件&#xff0c;搜索vmlinux cmd_link-vmlinux \ $(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)"; …

第10 CURD操作与RedisCache缓存的强制清理的实现

using System.Net; using Microsoft.Extensions.Caching.Distributed; using Core.Caching; using Core.Configuration; using StackExchange.Redis; namespace Services.Caching { /// <summary> /// 【Redis分布式缓存数据库软件管理器--类】 /// <remarks>…

索引 ---MySQL的总结(五)

索引 在mysql数据库之中&#xff0c;如果数据量过大&#xff0c;直接进行遍历会需要使用许多时间。这里使用空间换时间解决这一个问题。 目前就是从解决问题的这一个角度出发&#xff0c;需要增加搜索的速度&#xff0c;一定是要选择好用的数据结构进行搜索&#xff08;遍历的…

第十五届吉林省赛个人题解【中档题(不过可能对你来说是简单题)】(H、G、C)

文章目录 H. Visit the Park(STL)G. Matrix Repair(思维题)C.Random Number Generator(BSGS算法) H. Visit the Park(STL) 题意&#xff1a;给你一个无向图&#xff0c;每条边上都有一个数码&#xff0c;然后给你一个路径&#xff0c;每次你必须从Ai走到Ai1&#xff08;直接走…

【EHub_tx1_tx2_A200】Ubuntu18.04 + ROS_ Melodic + 锐驰LakiBeam 1L单线激光 雷达评测

大家好&#xff0c;我是虎哥&#xff0c;最近这段时间&#xff0c;又手欠入手了锐驰LakiBeam 1L激光雷达&#xff0c;实在是性价比太优秀&#xff0c;话说&#xff0c;最近激光雷达圈确实有点卷。锐驰官网的资料已经很丰富&#xff0c;我这里总结一下自己的简单测试经验&#x…

挑战14天学完Python---

抛弃了数学思维,引入了计算思维,计算思维是抽象和自动化相结合的结果 抽象:抽象问题的形式化逻辑 自动化:将抽象的结果通过程序自动实现 0.1在计算机内部转二进制 0.1转二进制 二进制的0.1与二进制0.2计算 结果再转十进制 在众多编程语言中 ,只有Python语言提供了复数类型.空间…

OpenCL编程指南-1.2OpenCL基本概念

OpenCL概念基础 面向异构平台的应用都必须完成以下步骤&#xff1a; 1&#xff09;发现构成异构系统的组件。 2&#xff09;探查这些组件的特征&#xff0c;使软件能够适应不同硬件单元的特定特性。 3&#xff09;创建将在平台上运行的指令块&#xff08;内核)。 4&#xff09…