代码改变世界

随笔分类 -  C

c语言实现atoi和itoa函数。

2013-08-04 00:04 by youxin, 3253 阅读, 收藏, 编辑
摘要: 首先看atoi函数:C语言库函数名: atoi功 能: 把字符串转换成整型数。名字来源:ASCII to integer 的缩写。原型: int atoi(const char *nptr);函数说明: 参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字... 阅读全文

转:c语言EOF是什么?(及getchar()和putchar用法)

2013-08-03 13:50 by youxin, 8356 阅读, 收藏, 编辑
摘要: 我学习C语言的时候,遇到的一个问题就是EOF。它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。 int c; while ((c = fgetc(fp)) != EOF) { putchar (c); }很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。但是,后来我发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量 阅读全文

printf格式控制详解

2013-08-03 12:03 by youxin, 2297 阅读, 收藏, 编辑
摘要: format 参数输出的格式,定义格式为%[flags][width][.precision][length]specifierspecifier在最后面。定义了数据类型。Where thespecifier characterat the end is the most significant component, since it defines the type and the interpretation of its corresponding argument:specifierOutputExampledoriSigned decimal integer392uUnsigned 阅读全文

c 中关于int,unsigned int , short 各种类型总结

2013-08-03 00:52 by youxin, 12789 阅读, 收藏, 编辑
摘要: int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧__int16、__int32这种数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达... 阅读全文

Integral Promotions整数提升和符号扩展(char,unsigned char,signed char)

2013-08-03 00:38 by youxin, 1430 阅读, 收藏, 编辑
摘要: 以下来自msdn:Objects of an integral type can be converted to another wider integral type (that is, a type that can represent a larger set of values). This widening type of conversion is called "integral promotion." With integral promotion, you can use the following in an expression wherever an 阅读全文

stack around the variable “ ” was corrupted

2013-08-02 23:28 by youxin, 272 阅读, 收藏, 编辑
摘要: 用scanf格式控制不当经常发生此错误。如short int a=10; scanf("%d",&a);应该是%hd;一般是越界引起的。参看:http://blog.sciencenet.cn/blog-436197-549687.html 阅读全文

char、signed char 和 unsigned char 的区别

2013-08-02 23:12 by youxin, 2162 阅读, 收藏, 编辑
摘要: ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char.而不是像short、int一样只有两种(int默认就是signed int).三者都占1个字节(1 byte),因此:signed char取值范围是 -128 到 127(有符号位)unsigned char 取值范围是 0 到 255这个大家都很清楚!!但是char 呢?范围是多少?答案是:不一定!!!我们先看一下大师们怎么说的:(Thinking in C++ 2nd):signed is the default and is only necessary with char; char 阅读全文

c语言string.h和memory.h某些函数重复问题

2013-08-02 16:06 by youxin, 1658 阅读, 收藏, 编辑
摘要: 在C语言中,为了使用memset()函数,你是选择#include 还是?两个都可以,如何选择?,标准里面这么写的,全平台通用, 这个 大部分编译器都实现了。http://pubs.opengroup.org/onlinepubs/7908799/xsh/string.h.htmlhttp://www.cplusplus.com/reference/clibrary/cstring/VC10里面,memory.h定义了string.h里面的部分函数,包括memset、memchr、memcmp以及相关的安全操作,定义的部分是和string.h里面一模一样的。而gcc(4.4.5)里面,memo 阅读全文

c语言利用指针计算字符串的长度

2013-08-02 14:20 by youxin, 6401 阅读, 收藏, 编辑
摘要: 可以用strlen函数,这里我们自己写一个。注意:不能用scanf,scanf一遇到空格就认为输入结束。应该用gets(),遇到换行符或EOF结束。说明可以接受空格。#includeint main(){ char s[20]; char *p; printf("please input a string(less than 20 character):\n"); //scanf("%s",s);不能读入空格 gets(s); p = s; while(*p!='\0') p++; printf("The string lent 阅读全文

转:一道笔试题-将int型数组强制转换为char*,再求strlen,涉及大小端

2013-08-02 01:34 by youxin, 456 阅读, 收藏, 编辑
摘要: 写出如下程序运行结果:#include#includeintmain(){inta[2000];char*p=(char*)a;for(inti=0;i int check() { union check { int i; char ch;... 阅读全文

C/C++ qsort()快速排序用法

2013-07-31 00:57 by youxin, 1715 阅读, 收藏, 编辑
摘要: void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));头文件stdlib.hbase Pointer to the first object of the array to be sorted, converted to a void*.num Number of elements in the array pointed by base. size_t is an unsigned integral type.size Size in by... 阅读全文

char s[]字串和char *s字串有什麼区别?

2013-07-31 00:16 by youxin, 471 阅读, 收藏, 编辑
摘要: C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢?Introductionchars[]="HelloWorld"; (只是用字符串常量初始化)char*s="HelloWorld";皆宣告了s字串,在C-style string的函數皆可使用,但兩者背後意義卻不相同。chars[]="HelloWorld";的s是個char array,含12個byte(包含結尾\0),"Hello World"對s來說是initializer,將字元一個一個地copy進s陣列。char*s=" 阅读全文

c语言‘\0’ ,‘0’, “0” ,0之间的区别

2013-07-31 00:00 by youxin, 5054 阅读, 收藏, 编辑
摘要: 首先比较一下‘\0’和‘0’的区别。有一个共同点就是它们都是字符,在c语言中,字符是按其所对应的ASCII码来存储的,一个字符占一个字节。请翻开你的ASCII字符集表吧,一般在你的C语言教材的附录上,没有的话网上查查哦。请看第一个ASCII码,对是0,对应的字符是(Null),其实就是‘\0’,即空字符。判断一个字符串是否结束的标志就是看是否遇到‘\0’,如果遇到‘\0’,则表示字符串结束。而字符‘0’对应的ASCII码是48,48对应的十六进制数就是0x30,通常我们在编程的时候,用字符转化为数字的时候经常要用到,比如要将‘8’转换为数字8,在语句中这样写就可以了, 8+‘0’”。这里的8就 阅读全文

带符号的char类型取值范围为什么是-128——127

2013-07-30 23:54 by youxin, 3982 阅读, 收藏, 编辑
摘要: 以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的?127好理解,char类型是8位,最高位是符号位,0正1负,所以01111111是127。但是-128是怎么来的呢?11111111不是-127吗?后来想起来计算机里面所有数都是用补码表示的,正数补码是其本身,负数补码是原码的反码加1。所以-127是10000001,而10000000换算过来就是-128。所以, 8位有符号的整数取值范围的补码表示1000 0000 到 0000 0000, 再到 0111 1111即 -128 到 0, 再到 127最终 -128 ~ + 阅读全文

c语言memset详解

2013-07-30 23:40 by youxin, 14111 阅读, 收藏, 编辑
摘要: void *memset(void *s, int ch,size_tn);(int ch可以是char或int)将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。memset按字节赋值。需要的头文件在C中 在C++中 void *memset(void *s, int ch,size_tn);函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或 阅读全文

表驱动法编程(数据驱动)

2013-07-20 10:03 by youxin, 3286 阅读, 收藏, 编辑
摘要: 所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值。我们平时查字典以及念初中时查《数学用表》找立方根就是典型的表驱动法。在数值不多的时候我们可以用逻辑语句(if 或case)的方法来获取值,但随着数值的增多逻辑语句就会越来越长,此时表驱动法的优势就显现出来了。... 阅读全文

结构体struct和联合体union以及enum枚举体5的区别

2013-07-02 19:32 by youxin, 1033 阅读, 收藏, 编辑
摘要: 下面来自wikipedia:Incomputer science, aunionis avaluethat may have any of several representations or formats; or it is adata structurethat consists of avariablewhich may hold such a value. Someprogramming languagessupport specialdata types, calledunion types, to describe such values and variables. In ot 阅读全文

原码,补码,反码相互转化

2012-07-03 23:49 by youxin, 8851 阅读, 收藏, 编辑
摘要: 已知补码,求原码。分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。补码的设计目的是:⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计1、原码、反码和补码的表示方法(1)原码: 在数值前直接加一符号位的表示法。 例如: 符号位数值位 [+7]原= 0 0000111B [-7]原= 1 0000111B(3)补码的表示方法1)模的概念:把一个计量单位称之为模或模数。例 如,时钟是以12进制进行计数循环的,即以12为模。 阅读全文

转: 匈牙利标记法

2012-06-01 15:39 by youxin, 497 阅读, 收藏, 编辑
摘要: 原文来自:http://www.learncpp.com/cpp-tutorial/29-hungarian-notation/匈牙利标记法是在命名变量是在变量名的前面加上表示变量类型或是作用域的前缀。 1: int value; // non-Hungarian 2: int nValue; // the n prefix denotes an integer 3: 4: double width; // non-Hungarian 5: double dWidth; // the d prefix denotes a double关于匈牙利标记法在现代程序语言与现代... 阅读全文

C/C++ 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突

2012-05-27 23:57 by youxin, 3588 阅读, 收藏, 编辑
摘要: 看下面的一段代码。复制字符串#include<stdio.h>void str_cpy( char *s,char *t){ while((*s=*t)!='\0') { s++; t++; } *s='\0';}void main(){ char *a="I am a teachar."; char *b="you are a student."; str_cpy(a,b); printf("%s\n",a);}但是一运行就会报错,访问内存错误。为什么?因为:char *a="I 阅读全文