char函数

c语言主函数为什么要return

假如想象 提交于 2019-12-19 23:39:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文来源于网络 说到 return, 有必要提及主函数的定义。很多人甚至市面上的一些书籍,都使用了 void main( ) 这一形式 ,其实这是错误的。 C/C++ 中从来没有定义过 void main( ) 。 C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着: The definition void main( ) { /* ... */ } is not and never has been in C++, nor has it been in C. ( void main( ) 从来就不存在于 C++ 或者 C )。 下面分别说一下 C 和 C++ 标准中对 main 函数的定义。 1. C   在 C89 中, main( ) 是可以接受的。 Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e (《 C 程序设计语言第二版》)用的就是 main( ) 。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:    int main( void )    int main( int argc, char *argv[] )   (参考资料: ISO/IEC

图解c/c++多级指针与“多维”数组

北城余情 提交于 2019-12-19 23:22:28
声明: 本文为原创博文,如有转载,请注明出处。若本文有编辑错误、概念错误或者逻辑错误,请予以指正,谢谢。 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的。其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法,理解多级指针和“多维”数组完全可以像理解一级指针和一维数组那样简单。 首先,先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识: 1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。 2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。 3、数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) 。 4、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4。 5、指针可以进行加减算术运算,加减的基本单位是sizeof(指针所指向的数据类型)。 6、对数组的数组名进行取地址(&)操作,其类型为整个数组类型。 7、对数组的数组名进行sizeof运算符操作,其值为整个数组的大小(以字节为单位)。 8、数组作为函数形参时会退化为指针。 一、一维数组与数组指针 假如有一维数组如下: char a[3]; 该数组一共有3个元素,元素的类型为char,如果想定义一个指针指向该数组

字符串、字符串数组、命令行参数

旧巷老猫 提交于 2019-12-19 21:12:47
转自https://www.cnblogs.com/bossren/p/6406910.html 字符串 1. 概念     用双引号引起来的就是字符串 "a string" // C语言编译器会将两个并列的字符串自动拼接成一个字符串 "a string""another a string" // 折行符'\'是代码换行连接的标记(一行不够写) "a looooooooooong \ string"   常见ASCII编码:   'A' == 65 'a' == 97 '0' == 48 '\0' == 0 int a[10]; //表示在栈中分配了40Bytes的内存空间,空间的首地址是a char a[10]; //表示在栈中分配了10Bytes的内存空间,空间的首地址是a      如何表示和保存字符串: C语言中没有字符串类型,用一片内存空间保存一串字符,约定用整数0(或字符'\0')来表示一个字符串的结束。 使用字符串时只需要记录字符串的开始位置。   C语言中的字符串用字符数组表示: char a[ 6 ] = { 'h' , 'e' , 'l' , 'l' , 'o' , '\0' }; // 特殊的字符数组 ( 字符串 ) char a[ 6 ] = "hello" ; // 简化版 写法(这种写法 \0 省略) char *a = "hello" ; //

C++模板编程中只特化模板类的一个成员函数

♀尐吖头ヾ 提交于 2019-12-19 20:36:41
模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数。类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1、2个成员函数即可。在这种情况下,如果全部重写该模板类的所有成员函数,不但会增加工作量,也不利于代码的维护。 例如下面的类模板A,只有在模板参数是char*时才需要特化成员函数func(),但其他的成员函数都不需要特化: 1 template <typename _Ty> 2 struct A 3 { 4 // 其他成员函数a 5 // 其他成员函数b 6 // ...... 7 void func() 8 { 9 std::cout << "common type." << std::endl; 10 } 11 }; 12 13 int main() 14 { 15 A<int> i; 16 i.func(); 17 18 A<char*> c; 19 c.func(); 20 21 return 0; 22 } 方法一:通过运行时类型识别,这个方法最简单 1 template <typename _Ty> 2 struct A 3 { 4 // 其他成员函数a 5 // 其他成员函数b 6 // ...... 7 void func() 8 { 9 if (typeid(_Ty) == typeid(char*)) 10

DBUS服务器端程序

有些话、适合烂在心里 提交于 2019-12-19 19:51:22
DBus 服务器端接收方式 DBus 服务器端用来接收signal和method调用。从收集的资料中发现,主要有三种接收方式。 一,采用while循环,监听dbus_connection_read_write()函数。有消息到来时在循环内部进行处理。优点是结构简单,处理方便。程序结构如下图。 /* test.signal.server(bus name) | ----test.signal.Type(interface1) | | | ----FunctionOne(method1) | | | ----FunctionTwo(method2) ----org.freedesktop.DBus.Introspectable(interface3) | | | ----Introspect(method3) response to interface(test.signal.Type) signal(Test) response to interface(test.signal.Type2) signal(TestString) response to interface(test.signal.Type) signal(MulType) */ #include <iostream> #include <stdlib.h> #include <dbus/dbus.h>

sql获取字符串长度函数

被刻印的时光 ゝ 提交于 2019-12-19 14:31:12
1、lenght返回以字节为单位的字符串的长度 lenght(string) -- 字符串 示例: SELECT classfyname,LENGHT(lassfyname) FROM f79_22_volume 运行结果: 2、char_lenght返回字符串长度 char_lenght(string) -- 字符串 示例: SELECT classfyname,CHAR_LENGHT(lassfyname) FROM f79_22_volume 运行结果: 来源: CSDN 作者: 不知12 链接: https://blog.csdn.net/qq_41356488/article/details/103585568

C++你最好不要做的

流过昼夜 提交于 2019-12-19 09:57:35
  大家可能对这个临时对象这个概念还不是很清楚,那么首先我们花一些时间来理解临时对象。首先看下面一端代码: 1 #include <iostream> 2 void swap( int &a,int &b) 3 { 4 int temp; 5 temp=a; 6 a=b; 7 b=temp; 8 } 9 10 int main(int argc,char** argv) 11 { 12 int a=1,b=2; 13 swap(a,b); 14 std::cout<<a<<"-----"<<b<<std::endl; 15 return 0; 16 } 17 结果为 18 2-----1 可能大多数园友,认为"int temp"是"临时对象",但是其实不然,"int temp"仅仅是swap函数的局部变量。 临时对象是代码中看不到的,但是实际程序中确实存在的对象。临时对象是可以被编译器感知的。 为什么研究临时对象? 主要是为了提高程序的性能以及效率,因为临时对象的构造与析构对系统开销也是不小的,所以我们应该去了解它们,知道它们如何造成,从而尽可能去避免它们。 临时对象建立一个没有命名的非堆对象会产生临时对象。(不了解什么是堆对象和非堆对象,可以参考 C++你最好不要做的 这一博文,这里面有介绍。)这种未命名的对象通常在三种条件下产生:为了使函数成功调用而进行隐式类型转换时候

Socket网络编程--FTP客户端(1)(Windows)

吃可爱长大的小学妹 提交于 2019-12-19 09:01:30
  已经好久没有写过博客进行分享了。具体原因,在以后说。   这几天在了解FTP协议,准备任务是写一个FTP客户端程序。直接上干货了。 0.了解FTP作用   就是一个提供一个文件的共享协议。 1.了解FTP协议   FTP有指令和响应码。FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。   像这种利用交换信息来进行简单的控制,这种协议,还真的很好玩的说。 命令与响应码部分信息如下       2. 安装一个FTP服务器   我们先安装一个FTP服务器,用于测试,这里是用FileZilla Server作为FTP服务器。   启动后,增加一个用户user/user 3.FTP客户端源代码讲解   下面这个是FTPAPI.h文件 1 #ifndef FTPAPI_H_INCLUDED 2 #define FTPAPI_H_INCLUDED 3 4 #include <stdio.h> 5 #include <winsock2.h> 6 7 SOCKET socket_connect(char *host, int port); 8 SOCKET connect_server(char

Socket网络编程--FTP客户端(1)(Windows)

风流意气都作罢 提交于 2019-12-19 09:00:54
Socket网络编程--FTP客户端(1)(Windows)   已经好久没有写过博客进行分享了。具体原因,在以后说。   这几天在了解FTP协议,准备任务是写一个FTP客户端程序。直接上干货了。 0.了解FTP作用   就是一个提供一个文件的共享协议。 1.了解FTP协议   FTP有指令和响应码。FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。   像这种利用交换信息来进行简单的控制,这种协议,还真的很好玩的说。 命令与响应码部分信息如下       2. 安装一个FTP服务器   我们先安装一个FTP服务器,用于测试,这里是用FileZilla Server作为FTP服务器。   启动后,增加一个用户user/user 3.FTP客户端源代码讲解   下面这个是FTPAPI.h文件 1 #ifndef FTPAPI_H_INCLUDED 2 #define FTPAPI_H_INCLUDED 3 4 #include <stdio.h> 5 #include <winsock2.h> 6 7 SOCKET socket_connect(char *host, int port); 8

Socket网络编程--小小网盘程序(5)

核能气质少年 提交于 2019-12-19 08:59:46
  各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中的文件列表,还有删除用户在服务器中的文件,最后的可以共享文件给好友。   列出用户在服务器中的文件列表   增加一个结构体 1 struct FileList 2 { 3 int cnt; 4 char list[16][128]; 5 };   为了方便我就假设服务器最多可以存16个单个用户的文件。如果想要支持更多的文件,这里可以增加一个int pages;用于分页作用,我们在服务器中获取文件时,可以根据分页进行发送。这样既方便又能支持多文件。   client.cpp这个客户端文件增加一个函数 1 int file_list(struct Addr addr,struct User user) 2 { 3 struct sockaddr_in servAddr; 4 struct hostent *host; 5 struct Control control; 6 struct FileList filelist; 7 int sockfd; 8 9 host=gethostbyname(addr.host); 10 servAddr.sin_family=AF_INET; 11 servAddr.sin_addr=*((struct in_addr *)host->h