char函数

sprintf函数的用法

久未见 提交于 2020-01-18 04:24:19
自《CSDN 社区电子杂志——C/C++杂志》 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123,

为Linux 操作系统建立兼容的 Windows命令接口

匆匆过客 提交于 2020-01-18 00:46:07
简单实现的dos命令 CLS, DATE,TIME,FIND,FINDSTR,COMP,FC,EXIT,HELP,MORE 说明 由于自己能力和时间有限,程序依旧存在不少bug,并且不是原模原样的实现dos命令,有的简单实现,有的命令参数众多,只实现了几个 这个程序写的并不优雅,违反了很多大忌,只是简单能跑 写完后我再也不想见到“段错误”这三个字,心酸,这个可能在出现段错误时为你提供点解决思路 https://www.cnblogs.com/zl-graduate/p/5735288.html 使用的环境 gcc 9.2.1 20190909 GNU gdb (Debian 8.3-1) 8.3 Kali-Linux-2018.2-vm-amd64 参考的Linux api文档 Linux c api 参考手册 https://legacy.gitbook.com/book/wizardforcel/linux-c-api-ref/details https://github.com/guodongxiaren/LinuxAPI/wiki 结构 为了演示,所用到的两个文档1.txt 2.txt CLS 功能 cls命令的功能是清屏 设计流程 其实就是简单地 fputs("\x1b[2J\x1b[H", stdout);其中的不明所以的字符串是VT100的控制码,部分定义如下 "

字符流中第一个不重复的字符

孤街醉人 提交于 2020-01-17 21:40:43
# 题目:字符流中第一个不重复的字符 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 # 思路: 用一个哈希map存储字母出现次数(unordered_map),如果map[ch]==1,就是只出现一次,如果dev报错则参考 https://blog.csdn.net/weixin_38603360/article/details/104001869 #include<iostream> #include<unordered_map> #include <algorithm> using namespace std; class Solution { public: unordered_map<char, int> map; string s; //Insert one char from stringstream void Insert(char ch) { s = s + ch; map[ch]++; } //return the first appearence once char in current stringstream char

为什么 StringBuilder 不是线程安全的?

此生再无相见时 提交于 2020-01-17 11:54:12
面试官:StringBuilder和StringBuffer的区别在哪? 我:StringBuilder不是线程安全的,StringBuffer是线程安全的 面试官:那StringBuilder不安全的点在哪儿? 我:。。。(哑巴了) 在这之前我只记住了StringBuilder不是线程安全的,StringBuffer是线程安全的这个结论,至于StringBuilder为什么不安全从来没有去想过。 分析 在分析这个问题之前我们要知道StringBuilder和StringBuffer的内部实现跟String类一样,都是通过一个char数组存储字符串的,不同的是String类里面的char数组是final修饰的,是不可变的,而StringBuilder和StringBuffer的char数组是可变的。 首先通过一段代码去看一下多线程操作StringBuilder对象会出现什么问题。StringBuffer 和 StringBuilder 的 3 个区别!这篇也要看下。 public class StringBuilderDemo { public static void main(String[] args) throws InterruptedException { StringBuilder stringBuilder = new StringBuilder(); for

【C语言】字符串处理

落爺英雄遲暮 提交于 2020-01-17 07:44:08
文章目录 1、memchr 2、memcmp 3、memcpy 4、memmove 5、memset 6、strcat 7、strncat 8、strchr 9、strcmp 10、strncmp 11、strcoll 12、strcpy 13、strncpy 14、strcspn 15、strerror 16、strlen 17、strpbrk 18、strrchr 19、strspn 20、strstr 21、strtok 22、strxfrm 1、memchr void * memchr ( const void * str , int c , size_t n ) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 2、memcmp int memcmp ( const void * str1 , const void * str2 , size_t n ) 3、memcpy void * memcpy ( void * dest , const void * src , size_t n ) 4、memmove void * memmove ( void * dest , const void * src , size_t n ) 另一个用于从 src 复制 n 个字符到 dest 的函数。 从 src 复制 n 个字符到

String类源码阅读

£可爱£侵袭症+ 提交于 2020-01-17 07:34:58
一、简介 String类实现了 java.io.Serializable序列化接口, Comparable<String>比较接口, CharSequence 三个接口,String类是final的,因此不能被其他类继承。 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //.... } String底层是通过 char[]数组 实现的,所有对字符串的操作都是通过字符数组来进行 /** The value is used for character storage. */ //value[]用于存储字符串内容,被final修饰,说明一旦创建就不可被修改 private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 序列化相关 /** use serialVersionUID from JDK 1.0.2 for interoperability */ //serialVersionUID是记录序列化的版本号 private static final long serialVersionUID =

typedef 的用法

ぃ、小莉子 提交于 2020-01-17 05:21:48
typedef 的用法 转贴:此部分参考自: http://blog.sina.com.cn/u/572f7666010008dm 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; PCHAR pa, pb; 用途二: 用在旧的 C 代码中,帮助 struct 。以前的代码中,声明 struct 新对象时,必须要带上 struct ,即形式为: struct 结构名对象名,如: struct tagPOINT1 { int x; int y; }; struct tagPOINT1 p1; 而在 C++ 中,则可以直接写:结构名对象名,即: tagPOINT1 p1; typedef struct tagPOINT { int x; int y; }POINT; POINT p1; // 这样就比原来的方式少写了一个 struct ,比较省事,尤其在大量使用的时候 或许,在 C++ 中, typedef 的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。 用途三: 用 typedef

学习SQLite之路(五) C/C++ SQLite开发实例

亡梦爱人 提交于 2020-01-17 03:27:38
  介绍一种乌班图中使用sqlite的用法,非常简单,下面的例子是在乌班图12.04中实现的: 1,先安装两个东西 : sudo apt-get install sqlite sqlite3 sudo apt-get install libsqlite3-dev // 不然可能会报 没有头文件 sqlite3.h 2,C/C++接口: 一般用到下面这三个,详情请参考sqlite官方文档。 (1) sqlite3_open(const char *filename, sqlite3 **ppDb) :     打开一个数据库连接, 返回sqlite3对象。 (2) sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) :      解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。 (3) sqlite3_close(sqlite3*) :     关闭之前打开的数据库。 3、打开数据库并创建表 #include<stdio.h> #include<sqlite3.h> // 暂时先不管 static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int

进程间通信(IPC)

流过昼夜 提交于 2020-01-17 01:03:50
进程间通信(Interprocess communication) 一、概述: 进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。进程间通信是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。 二、目的: (1)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 (2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 (3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 (4)资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。 (5)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。 进程通过与内核及其它进程之间的互相通信来协调它们的行为。Linux支持多种进程间通信(IPC)机制

转:Visual C++ sprintf()函数用法

旧巷老猫 提交于 2020-01-16 23:16:47
将字串格式化命令。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访 问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通 常用眼睛再把出错的代码多看几眼就看出来了。   sprintf 将字串格式化。   在头文件 #include<stdio.h   >中   语法: int sprintf(string format, mixed [args]...);   返回值:字符串长度(strlen)   sprintf格式的规格如下所示。[]中的部分是可选的。   %[指定参数$][标识符][宽度][.精度]指示符   若想输出`%'本身时, 请这样`%%'处理。   1. 处理字符方向。负号时表示从后向前处理。   2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。   3. 字符总宽度。为最小宽度。   4. 精确度。指在小数点后的浮点数位数。   =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-   转换字符   =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-   %% 印出百分比符号,不转换。   %c 整数转成对应的 ASCII 字元。   %d 整数转成十进位。   %f 倍精确度数字转成浮点数。   %o 整数转成八进位。   %s