Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 指针内存分配！！求高手现身。

回复:
user: user-0
content: 哥我信你，结贴！

user: user-1
content: //1 没有别人的语法错误！稍微修改                                                                                                                                                  struct blocked_ip *bip; bip = (struct blocked_ip *)malloc(sizeof(struct blocked_ip)); memset(bip, 0 ,sizeof(struct blocked_ip)); bzero(bip->ip, 16); bip->next = NULL;  //2 calloc和malloc不同点就是会对分配的内存初始化而已！ //你先分配了内存没有释放，然后对它取值，然后在分配内存直接是错误的做法！不合语法 //如果是要双指针的话，可以如下操作 struct blocked_ip **bip=(struct blocked_ip **)calloc(1,sizeof(struct blocked_ip *)); *bip = (struct blocked_ip *)malloc(sizeof(struct blocked_ip)); //这里只是分配一个结构体内存空间而已 memset(bip, 0 ,sizeof(struct blocked_ip)); bzero(bip->ip, 16); bip->next = NULL;  //3 ip已经是数组，当你给bip分配内存空件的时候，就已经给它分配了的！ //所以不需要再额外分配内存空间 //如果是 char *p ,则需要再额外分配

user: user-2
content: 写法1：少了指针的强制(struct blocked_ip *)转换 写法2：重复分配会造成内存泄露 写法3：ip是数组，已经分配空间，不需要再动态分配  引用 楼主 u011742078 的回复:针对： struct blocked_ip { 	char ip[16]; 	struct blocked_ip* next; };  以下三种方法，分别错误在什么地方： 写法1： struct blocked_ip *bip; bip = malloc(sizeof(struct blocked_ip)); bzero(bip->ip, 16); bip->next = NULL;  写法2： struct blocked_ip *bip=(struct blocked_ip *)calloc(1,sizeof(struct blocked_ip *)); *bip = malloc(sizeof(struct blocked_ip)); bzero(bip->ip, 16); bip->next = NULL;  写法3： struct blocked_ip* bip = (struct blocked_ip*) malloc(sizeof(struct blocked_ip*)); bip->ip = (char *) calloc(1,16); bip->next = NULL;
user-0 提问: strlen和sizeof的区别

回复:
user: user-1
content: strlen是一个C函数，sizeof是一个操作符.

user: user-2
content: strlen是一个C函数，用来计算一个字符串的长度，不包含‘\0’； sizeof是一个操作符，返回一个目标所占得字节。而且目标必须是已知大小的！  性质完全不一样~~~~！

user: user-3
content: sizeof是关键字，就像int，long一样的，支持c语言的平台都可以用这个关键字， strlen是测量字符串长度的函数，使用时包含string.h，作为补充

user: user-4
content: 很明显一个是给字符串的， 另一个不是， 是计算各个类型的字节数

user: user-5
content: strlen用于计算一个字符串中的字符个数,计算方法是从起始字符开始直到遇到结束符'\0'结束。sizeof操作符用于返回目标所占字节数

user: user-6
content: gggggggggggggggggggggg

user: user-7
content: sizeof 是操作符，用于计算类型或对象所占用的空间，以 byte 为单位，在编译期完成  strlen 是函数，计算字符串的长度，遇到 '\0'结束，返回值以 byte 为单位，不含'\0'；在运行期完成

user: user-8
content: http://www.cplusplus.com/reference/cstring/strlen/ http://en.cppreference.com/w/cpp/language/sizeof  sizeof是操作符，必须作用于大小已知的对象或类型，返回编译期常量； strlen是C标准库中<string.h>(<cstring>)的字符串操作函数，在运行期返回一个C字符串的长度，即从指定位置开始到值为\0之前的所有字节数；

user: user-9
content: sizeof 是一个物理层面的操作符， 通常在编译期间确定，得到的是一个对象/类型在栈上的投影大小。 strlen 是一个逻辑层面的函数， 运行时求值，得到的是一个 char[] 中第一个 '\0' 之前所有字符的数量。
user-0 提问: main函数参数问题

回复:
user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390469280 赞！非常感谢！

user: user-1
content: http://bbs.csdn.net/topics/390469280

user: user-2
content: 你这里的情况是  char* p = NULL; char** argv = &p; 这时候 你argv 得到的是指向 p的指针 &p 需要你做 *argv 才能得到 NULL

user: user-0
content: 引用 2 楼 shanwu1985 的回复:可以执行啊…  ./smltest　xxxx(档名)　  就行了～ 执行是没有问题的，疑问是为啥不会core，引用了空地址，为啥不core呢？

user: user-0
content: 引用 1 楼 user-6 的回复:都是空了 为什么还要取值呢？地址都是为空的！ 地址是空的话，取*应该会core，非法地址引用吧，但是实际情况是没core。

user: user-3
content: 完全看不懂啊，你这是C语言吗？

user: user-4
content: 至于会不会报段错误，都要看编译器了，说不定编译器实现的时候有预留什么的。

user: user-4
content: nil 表示无值的意思，程序没有问题。不过这不是C/C++的标准的关键字，Objective-C, Ruby之类的有这个关键字，估计编译器实现的时候借鉴了下吧。

user: user-5
content: 可以执行啊…  ./smltest　xxxx(档名)　  就行了～

user: user-6
content: 都是空了 为什么还要取值呢？地址都是为空的！
user-0 提问: 你们好

回复:
user: user-1
content: 大概这样既可： char a[100]; fread(a, sizeof(char), 100, fp);  引用 楼主 C372285925 的回复:大家好，我想请问文件中的字符如何一次性全部导入到新定义的数组里？谢谢

user: user-2
content: fread

user: user-3
content: if（！feof（fp）） { fcanf(fp,"%c",&a[i]); }  大概就这样。。。你看看行不

user: user-4
content: 这个需要先解析出来的，然后赋值呗

user: user-5
content: 你知道你的文件内容有多大，这样就可以一次性导入了。
user-0 提问: 小数减大数和0比较，居然是大于0

回复:
user: user-1
content: 引用 楼主 wangjun403 的回复:  y3和y2都是long型的  这是怎么回事呢，我实在不知道为什么 其他地方的问题。

user: user-2
content: 问题可能在其它代码段。  引用 4 楼 wangjun403 的回复:[quote=引用 3 楼 turingo 的回复:] 这比较诡异了，查查其它地方是否有访问越界或者是堆栈溢出的情况。  [quote=引用 2 楼 wangjun403 的回复:] [quote=引用 1 楼 turingo 的回复:] y3-y2不是明明等于-14772么？  [quote=引用 楼主 wangjun403 的回复:]   y3和y2都是long型的  这是怎么回事呢，我实在不知道为什么[/quote] 是的啊，但却进入了if的条件[/quote][/quote]  本人菜鸟一个，几个普通的局部变量应该会是越界的问题 堆栈溢出，我不知道怎么去查  蛋疼[/quote]

user: user-0
content: 引用 3 楼 turingo 的回复:这比较诡异了，查查其它地方是否有访问越界或者是堆栈溢出的情况。  [quote=引用 2 楼 wangjun403 的回复:] [quote=引用 1 楼 turingo 的回复:] y3-y2不是明明等于-14772么？  [quote=引用 楼主 wangjun403 的回复:]   y3和y2都是long型的  这是怎么回事呢，我实在不知道为什么[/quote] 是的啊，但却进入了if的条件[/quote][/quote]  本人菜鸟一个，几个普通的局部变量应该会是越界的问题 堆栈溢出，我不知道怎么去查  蛋疼

user: user-2
content: 这比较诡异了，查查其它地方是否有访问越界或者是堆栈溢出的情况。  引用 2 楼 wangjun403 的回复:[quote=引用 1 楼 turingo 的回复:] y3-y2不是明明等于-14772么？  [quote=引用 楼主 wangjun403 的回复:]   y3和y2都是long型的  这是怎么回事呢，我实在不知道为什么[/quote] 是的啊，但却进入了if的条件[/quote]

user: user-0
content: 引用 1 楼 turingo 的回复:y3-y2不是明明等于-14772么？  [quote=引用 楼主 wangjun403 的回复:]   y3和y2都是long型的  这是怎么回事呢，我实在不知道为什么[/quote] 是的啊，但却进入了if的条件

user: user-2
content: y3-y2不是明明等于-14772么？  引用 楼主 wangjun403 的回复:  y3和y2都是long型的  这是怎么回事呢，我实在不知道为什么

user: user-3
content: 看所有的代码，起码是这几个变量所在的函数定义。 除了堆栈溢出的可能之外，怀疑是类型隐式提升（无符号long类型）。

user: user-4
content: 很诡异的当然要重构，确保源文件跟执行文件匹配...

user: user-5
content: 引用 10 楼 wangjun403 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] 重建所有  难道赵老师遇到问题就重构？[/quote] 帖主的问题十有八九是源代码和可执行目标代码不对应造成的。 解决这种问题不重建所有还有其它更好的办法？ 愿听高手指教。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:重建所有  难道赵老师遇到问题就重构？

user: user-0
content: 引用 8 楼 user-6 的回复:赵老师又来坑爹了。  LZ使用的IDE默认long型是有符号还是无符号的？建议把全部代码贴出来  IDE是eclipse long默认肯定是有符号的  代码是不可能全部贴出来的，也没有人会看那么长的东西

user: user-6
content: 赵老师又来坑爹了。  LZ使用的IDE默认long型是有符号还是无符号的？建议把全部代码贴出来

user: user-5
content: 重建所有
user-0 提问: 分治法与递归区别

回复:
user: user-0
content: 非常感谢大神们的解答。

user: user-1
content: 引用 2 楼 caozhy 的回复:分治法也可以不用递归实现，比如自己用一个堆栈去模拟。  总之前者是思路，后者是做法。 我们做家务，也可以用分治法，我们管理一个组织，也可以用分治法，但是这就和编程完全无关了。

user: user-2
content: 分治法也可以不用递归实现，比如自己用一个堆栈去模拟。  总之前者是思路，后者是做法。 我们做家务，也可以用分治法，我们管理一个组织，也可以用分治法，但是这就和编程完全无关了。

user: user-2
content: 分治法是指一种算法（分而治之，逐步细化地处理） 递归是指一种实现（函数中调用自身）  好比穷举法和循环的关系。
user-0 提问: linux c 写文件问题

回复:
user: user-0
content: 哦，找到问题了。吧文件名当作数据传递过去了，写错了 哈哈后！

user: user-1
content: 乱码并不代表一定是错的，也可能是编码方式的问题，直接看二进制数据最准确。  引用 5 楼 aaadddzxc 的回复:我看 write 的返回值的确是我传进去的大小，但是我打开写好的文件一堆乱码

user: user-0
content: 我没看到有地方出错

user: user-0
content: 我看 write 的返回值的确是我传进去的大小，但是我打开写好的文件一堆乱码

user: user-2
content: 在哪里出错，打印一下errno  这样写肯定数据不对，前面一部分会被文件名./123.txt替换掉的。

user: user-1
content: 先单步调试。  引用 2 楼 aaadddzxc 的回复:我直接这样调用写数据都不行  const char *lpszCookie = "的挖挖的那我的那我你的哦啊温暖的哦啊温暖的哦啊温暖的哦安稳的哦那我的哦你啊";      clouddisk_WriteFile("./123.txt",lpszCookie,strlen(lpszCookie));

user: user-0
content: 我直接这样调用写数据都不行  const char *lpszCookie = "的挖挖的那我的那我你的哦啊温暖的哦啊温暖的哦啊温暖的哦安稳的哦那我的哦你啊";      clouddisk_WriteFile("./123.txt",lpszCookie,strlen(lpszCookie));

user: user-1
content: 1、单步调试看看数据是到哪里不对了； 2、一般更常用fopen/fclose/fread/fwrite等函数。  引用 楼主 aaadddzxc 的回复:从缓冲区接受的数据，要保存到文件怎么弄的。。下面代码哪儿有问题，咋写出来不对呢    int clouddisk_WriteFile(const char *lpszFileName,const char *lpszSource,int nLen) {     int hFile = 0;      if (-1 == (hFile = open(lpszFileName,O_RDWR | O_CREAT,S_IRUSR | S_IWUSR | S_IXUSR)))     {         return 0;     }      size_t nWriteCount = 0;     size_t nCount = nLen;     size_t nSize = write(hFile,lpszFileName,nLen);     nWriteCount = nSize;     while (nWriteCount < nCount)     {         nSize = write(hFile,lpszSource + nWriteCount,nLen - nWriteCount);         nWriteCount += nSize;     }      close(hFile);     return 1; }

user: user-3
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
user-0 提问: 大家好，请问一下看书的顺序。

回复:
user: user-0
content: 感谢的大家的建议，我突然就想通了。 个人觉得最好的方法是，大致的过一下某些具体重要的书，粗略的看过。 之后结合实际项目和代码，那些书就当作是参考资料，哪里不会看哪里。 谢谢大家！可否推荐一些关键词，让我搜索一些开源项目来研究呢？

user: user-0
content: 引用 7 楼 Adol1111 的回复:W.Rchard Stevens的书本本都是经典啊。看书的顺序的话还是和1楼说的差不多。TCP/IP主要讲报文、协议什么的比较枯燥，最好能自己组个小型的局域网络进行测试下，更能加深理解。（至于环境的话，现在应该很难找到了吧，多多少少会有些小差异，不过FreeBSD和linux还是很不错的代替品） 确实，stevens先生的书每本都是巨作！

user: user-0
content: 引用 6 楼 zmlovelx 的回复:嵌入式不一定要懂硬件 会看datasheet会与硬件工程师沟通就差不多了。 虽然是这么说，但感觉还是要懂一点的。主要也是由于嵌入式学习的东西太多太广。我又急于写一些小项目。。

user: user-1
content: W.Rchard Stevens的书本本都是经典啊。看书的顺序的话还是和1楼说的差不多。TCP/IP主要讲报文、协议什么的比较枯燥，最好能自己组个小型的局域网络进行测试下，更能加深理解。（至于环境的话，现在应该很难找到了吧，多多少少会有些小差异，不过FreeBSD和linux还是很不错的代替品）

user: user-2
content: 嵌入式不一定要懂硬件 会看datasheet会与硬件工程师沟通就差不多了。

user: user-0
content: 引用 2 楼 nice_cxf 的回复:《UNIX环境高级编程》    《TCP/IP协议详解》必读，UNIX网络编程可以放到后边，有时间再读 谢谢！主要是想尽快利用知识做一个小项目。

user: user-0
content: 引用 1 楼 JiMoKuangXiangQu 的回复:建议顺序： 《UNIX环境高级编程》 《UNIX网络编程》结合 《TCP/IP协议详解》读：看前一本的同时翻翻后一本。 之后是边实践，遇到不熟悉的，边回过头翻阅相应篇章，不要指望看一遍就全部理解了。  个人建议，仅供参考。 谢谢！！

user: user-3
content: 看书，先看目录，之后翻到想看的页。

user: user-4
content: 《UNIX环境高级编程》    《TCP/IP协议详解》必读，UNIX网络编程可以放到后边，有时间再读

user: user-5
content: 建议顺序： 《UNIX环境高级编程》 《UNIX网络编程》结合 《TCP/IP协议详解》读：看前一本的同时翻翻后一本。 之后是边实践，遇到不熟悉的，边回过头翻阅相应篇章，不要指望看一遍就全部理解了。  个人建议，仅供参考。

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:个人意见：网络编程首先要学会使用抓包软件比如wireshark.  不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html  这个建议很中肯！！

user: user-6
content: 个人意见：网络编程首先要学会使用抓包软件比如wireshark.  不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:《Linux C编程一站式学习》  赵老师，您不能这样啊。

user: user-6
content: 《Linux C编程一站式学习》
user-0 提问: 请教多个for语句的执行顺序是怎样的？

回复:
user: user-1
content: 外-》里-》外

user: user-2
content: 分号结束是简单循环模块，要是有大括号，就说明循环模块不止一句话。其实都一样的，知道循环的模块，执行完就是i++

user: user-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-4
content: 初始化，执行中间判断条件满足则执行下面的语句，执行完语句，再执行后面的循环递进！ 再判断中间的条件，满足继续，不满足退出 每个for循环最好都用一对大括号包括起来！

user: user-5
content: 不用非有括号啊

user: user-5
content: 执行完下面3条for再i++， 最里面的先执行完， 再执行完上一级，直到最上级加一

user: user-6
content: #include <stdio.h>  int main(void) { 	int i, j, k; 	char letter; 	 	printf("Please input a capital:"); 	scanf("%c",&letter); 	 	k = letter - 'A' + 1; 	 	for (i = 0; i < k; i++) 	{ 		for (j = 0; j < k - i; j++) 		{ 			printf(" "); 		} 		 		for (j = 0; j <= i; j++) 		{ 			printf("%c", 'A' + j); 		} 		 		for (j = i - 1; j >= 0; j--) 		{ 			printf("%c",'A' + j); 		} 		 		printf("\n"); 	} 	 	return 0; }

user: user-7
content: 何不单步运行一下
user-0 提问: 菜鸟问题

回复:
user: user-1
content: C++用vector，插入不定个数元素，然后sum累加，除以vector.size()？ 或者自己用变量统计元素个数？ 方法应该很多吧

user: user-2
content: 第1个数的平均值＝第1个数 第n个数的平均值＝((n-1)*前n-1个数的平均值+第n个数)/n，n=2...

user: user-3

user: user-4
content: 引用 6 楼 zhao4zhong1 的回复:第1个数的平均值＝第1个数 第n个数的平均值＝((n-1)*前n-1个数的平均值+第n个数)/n，n=2...  ++

user: user-5
content: 这个是老师留的作业吧。。。你还是自己动动脑筋吧。。。

user: user-6
content: 引用 2 楼 jk19941122 的回复:模版动态数组求和 补充一下，模版动态数组求和之后除以数组的实际长度就是所求的平均值

user: user-6
content: 模版动态数组求和

user: user-7
content: 记录每次输入的个数就好了！搞个sum 加所有输入的值的和！
user-0 提问: linux内核中的module_init()同级别的驱动加载顺序？？？？

回复:
user: user-1
content: 同一级别的init，看makefile 加载顺序，obj -y += xxx.o在前面的就先启动

user: user-2
content: 我也碰到这样一个问题。 比如我在加载alsps时，驱动同时兼容了几颗alsps ic的，我想让某特定的一颗最后加载，以便于在其他alsps加载失败(未贴片)时，再来加载此特定的一颗。我有尝试将此特定alsps的module_init改用late_initcall，但不满足平台设定(具体原因不用理会)。如果各alsps都用module_init来加载，如何来控制加载的顺序？ 有没有真懂这一块的？求真神~~

user: user-3
content: 引用 4 楼 xingtian19880101 的回复:那个优先级我知道，主要是想知道同级别的到底是依据什么，不知道是我看错了还是怎么，两个驱动加载顺序改变了但是设备结点的创建还是没变了 这我还还真没听说有啥依据,或者说无所谓从哪里说起.  同类型的设备,比如都是标准的通用输入设备:键盘,鼠标,ts,写字板,从内核的角度来说他们的工作都是独立开来的,驱动也应该是不相互干扰或者说具有互斥或依赖部分。所以他们加载驱动的先后不会有什么影响，既然没影响干嘛要分先后。 至于你说的设备节点号 没变动，这还真只能去看对应部分的源码慢慢找。

user: user-0
content: 那个优先级我知道，主要是想知道同级别的到底是依据什么，不知道是我看错了还是怎么，两个驱动加载顺序改变了但是设备结点的创建还是没变了

user: user-0
content: 引用 2 楼 user-3123 的回复:[quote=引用 1 楼 xingtian19880101 的回复:] 各位大神，知道的说下啊，一直没搞太清楚。。。。  该按一定顺序的就要按一定顺序，没有为什么。 或者init中注册的函数本身有优先级参数，那么内核会按优先级去管理。  至于你说的键盘和TS的问题这2个颠倒过来也不会有影响，想换个顺序自己在源码找呗。[/quote]  引用 2 楼 user-3123 的回复:[quote=引用 1 楼 xingtian19880101 的回复:] 各位大神，知道的说下啊，一直没搞太清楚。。。。  该按一定顺序的就要按一定顺序，没有为什么。 或者init中注册的函数本身有优先级参数，那么内核会按优先级去管理。  至于你说的键盘和TS的问题这2个颠倒过来也不会有影响，想换个顺序自己在源码找呗。[/quote]      ......

user: user-3
content: 引用 1 楼 xingtian19880101 的回复:各位大神，知道的说下啊，一直没搞太清楚。。。。  该按一定顺序的就要按一定顺序，没有为什么。 或者init中注册的函数本身有优先级参数，那么内核会按优先级去管理。  至于你说的键盘和TS的问题这2个颠倒过来也不会有影响，想换个顺序自己在源码找呗。

user: user-0
content: 各位大神，知道的说下啊，一直没搞太清楚。。。。
user-0 提问: vs2013颜色设置

回复:
user: user-1
content: 感久 zxs123451 就是 工具 -> 选项 ->环境->字体和颜色->突出显示的引用 如果是英文版就是 highlighted reference 我找了好久

user: user-2
content: 工具 -> 选项 ->环境->字体和颜色->突出显示的引用 设置项背景颜色

user: user-2
content: 工具 -> 选项 ->环境->字体和颜色->突出显示的引用

user: user-3
content: 很多人一开始想用工具解决问题，但后来终其一生都在研究如何改进工具，到死也没解决当初的问题。  推荐阅读《你的灯还亮着吗？》

user: user-4
content: 5楼说的对。

user: user-5
content: google下吧！还没用过这么新的

user: user-0
content: 我知道在字体和颜色哪里改，但是不知道该哪一项，有这么多啊：

user: user-6
content: 你去这个网站挑一个颜色配置来 http://studiostyl.es/

user: user-7
content: 工具 -> 选项 ->环境->字体和颜色

user: user-8
content: 没用过，一般在tool->option-》文本编辑->c/c++中修改

user: user-9
content: vs2013没用过，一般在 options 中，看看 help
user-0 提问: 『IMP』求教！！！！about fork child&parent pipe

回复:
user: user-0
content: 引用 楼主 wunan0423 的回复:Please write a program, in C language, with 5 child process writing data into the same file.  After each child process complete its job , it will notify the parent process through IPC.  Finally ,when the parent process receive all child messages, it will print the file data in console.   写了很久还是不会，最后把程序改的一团乱麻！今天就要交了，求各位大神指教！！！！   #include<unistd.h> #include<stdio.h> #include<sys/types.h>   int main() { 	int fd[2]; 	pipe(fd); 	 	 pid_t child[5]; 	//so that we can have five childprocess that produces fork  	child[0] = fork(); 	//set self as the variable that fork send back  	FILE *fp; 	FILE *fpp; 	  	if(child[0] !=0) 	child[1]=fork();  	if(child[0] !=0 && child[1] !=0) 	child[2]=fork();  	if(child[0] !=0 && child[1] !=0 && child[2] !=0) 	child[3]=fork();  	if(child[0] !=0 && child[1] !=0 && child[2] !=0 && child[3] !=0) 	child[4]=fork();  	if(child[0] !=0 && child[1] !=0 && child[2] !=0 && child[3] !=0 && child[4] !=0) 	 	{ 	fpp=fopen("homework2-h34028028.txt","r+"); 	 	fprintf(fpp,"%s");  	fclose(fpp); 	//Parentprocess needs to print the content that child process has writen into the txt file 		 	} 	 	  	else{ 	//ChildProcess will start this txt file and write something into this file 	fp=fopen("homework2-h34028028.txt","a"); 	fprintf(fp,"Operating System Homework is really difficult\n"); 	fclose(fp); 	} 	     } 引用 2 楼 user-1 的回复:[quote=引用 1 楼 wunan0423 的回复:] 不好意思想问一下大家，就是pipe的话是不是只能子程序写父程序读，我有看到一个关于子父程序转换角色的帖子 http://blog.csdn.net/yake25/article/details/7447086 但是根据这个调了很久之后逻辑愈发不对！！！ 各位大神求教！小妹在此拜谢大家！！  不是的！一个读一个写！这里不太合适用管道！用socket或者消息队列吧！ [/quote]thanks!

user: user-0
content: 但是当时讲解这个程序的时候是说要用pipe写 子进程五个child process自己往txt里面写东西，然后再父进程在console中打印txt中的东西。。 鼓捣了半天都没有鼓捣出来到论坛上求救ing～求问说pipe在多个子进程的时候应该怎么用啊

user: user-1
content: 引用 1 楼 wunan0423 的回复:不好意思想问一下大家，就是pipe的话是不是只能子程序写父程序读，我有看到一个关于子父程序转换角色的帖子 http://blog.csdn.net/yake25/article/details/7447086 但是根据这个调了很久之后逻辑愈发不对！！！ 各位大神求教！小妹在此拜谢大家！！  不是的！一个读一个写！这里不太合适用管道！用socket或者消息队列吧！

user: user-0
content: 不好意思想问一下大家，就是pipe的话是不是只能子程序写父程序读，我有看到一个关于子父程序转换角色的帖子 http://blog.csdn.net/yake25/article/details/7447086 但是根据这个调了很久之后逻辑愈发不对！！！ 各位大神求教！小妹在此拜谢大家！！
user-0 提问: 这是为什么？这样答案还对？

回复:
user: user-1
content: 新手同学习了

user: user-2
content: i < a.Length-4？为什么要减4？外层只循环了一次当然是2 3 7 5 8了。。。

user: user-2
content: 引用 4 楼 xiaoyongaihua 的回复:我正在给以前的帖子结贴 ，太二笔了 对不起各位了 结帖率低也就算了，楼主竟然跑到C\C++专区问C#的代码。。

user: user-0
content: 我正在给以前的帖子结贴 ，太二笔了 对不起各位了

user: user-3
content: 2 3 7 5 8

user: user-0
content: 怎么结贴啊  我已经知道错了  我看错了

user: user-4
content: 这结贴率
user-0 提问: 谁有gif解码算法?

回复:
user: user-1
content: 绘制下一帧前： 无移出方法 保持原样 还原背景 还原上一帧 四选一

user: user-0
content: 引用 2 楼 max_min_ 的回复:mark下！没有区分帧类型么？每一次都是一个完整的I帧？ 引用 3 楼 LargeSkyMensk 的回复:那是因为，gif在显示的时候，每一帧都是叠加在前面帧上的。  你可以下载这个，我自己使用wic写的。源代码，希望有用 http://download.csdn.net/detail/largeskymensk/5995581   第一帧是帧,第二帧开始只有那个小人的区域,我是直接叠上去的,但有些位置还是不对.

user: user-2
content: 那是因为，gif在显示的时候，每一帧都是叠加在前面帧上的。  你可以下载这个，我自己使用wic写的。源代码，希望有用 http://download.csdn.net/detail/largeskymensk/5995581

user: user-1
content: GIF文件格式约定中应该有详细说明。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:绘制下一帧前： 无移出方法 保持原样 还原背景 还原上一帧 四选一  原来是这样,在 图象标识符(Image Descriptor) 里面并没有说明,这个是在哪里定义的?

user: user-0
content: 引用 6 楼 LargeSkyMensk 的回复:[quote=引用 3 楼 LargeSkyMensk 的回复:] 那是因为，gif在显示的时候，每一帧都是叠加在前面帧上的。  你可以下载这个，我自己使用wic写的。源代码，希望有用 http://download.csdn.net/detail/largeskymensk/5995581  一个GIF文件，由背景与若干个帧图片组成。 GIF文件，有总的长宽，而每一帧可能有不同的位置，与长宽。 在绘制的时候，首先绘制背景，然后逐帧叠加（注意位置与长宽）。  其实我提供的下载连接里面，是我使用WIC写的，是一个Win32小程序，功能就是提取GIF中的每帧图片。 而且其中包含一个功能：在提取每一帧的时候，是否采用叠加的方法。 WIC是微软系统提供的一个组件。用于处理图片的。[/quote]  我要的是c源码,不是在windows上面用的.

user: user-2
content: 引用 3 楼 LargeSkyMensk 的回复:那是因为，gif在显示的时候，每一帧都是叠加在前面帧上的。  你可以下载这个，我自己使用wic写的。源代码，希望有用 http://download.csdn.net/detail/largeskymensk/5995581  一个GIF文件，由背景与若干个帧图片组成。 GIF文件，有总的长宽，而每一帧可能有不同的位置，与长宽。 在绘制的时候，首先绘制背景，然后逐帧叠加（注意位置与长宽）。  其实我提供的下载连接里面，是我使用WIC写的，是一个Win32小程序，功能就是提取GIF中的每帧图片。 而且其中包含一个功能：在提取每一帧的时候，是否采用叠加的方法。 WIC是微软系统提供的一个组件。用于处理图片的。

user: user-3
content: mark下！没有区分帧类型么？每一次都是一个完整的I帧？

user: user-4
content: 试试http://sourceforge.net/projects/giflib/  引用 楼主 hyz_cs 的回复:找了一个算法( http://download.csdn.net/detail/dugujin263/1426312 ) 挺简洁的,但是用的时候发现有个问题,像这种第二帧以上是局部更新的gif图片,第二帧以上不正常.  gif图片    解码后的第1帧:   解码后的第2帧:   解码后的第3帧:    gif文件格式中,局部更新的帧,是把区域直接叠加到前一帧上面吗?
user-0 提问: Linux32位下如何给64位无符号整型变量赋值遇到的一个奇怪的问题

回复:
user: user-1
content: 万一   。。。 里面修改了ret的值呢？

user: user-2
content: 自己看内存吧， 调试器(gdb)的print有时候不可靠

user: user-3
content: get_int的定义在另一个文件里

user: user-3
content: 是不是get_int 的声明在另一个程序文件里，而在调用的程序文件里又没有声明。
user-0 提问: 程序中一个函数的输出结果有误！！！~~

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: 就是楼上所说的：leaf居然不把LeafCount返回，连个2都不返回，就返回1和0，那肯定只能打印出1和0

user: user-3
content: int leaf 的递归设计有问题！首先是没有把值做统计，其次是在里面printf始终不会是最终结果的
user-0 提问: 两道面试题

回复:
user: user-1
content: 少一个括号，否则在32位机器上是16，64位机器上32；

user: user-2
content: 学习了，大家都是高手啊，第一题我都不会。

user: user-3
content: 1.  783 #define container_of(ptr, type, member) ({                      \ 784         const typeof( ((type *)0)->member ) *__mptr = (ptr);    \ 785         (type *)( (char *)__mptr - offsetof(type,member) );}) 786   linux核心的类似用法。 int指针占用4B，加上4，就是偏移4*4=16B,取其整数

user: user-4
content: 引用 3 楼 gigglesun 的回复:[quote=引用 2 楼 user-5 的回复:] 第一个是偏移4个int的地址吧，16 第二个用not exist可以解决吧，select * from t1 where not exist(select * from t2,t3 where t2.key=t3.key and t1.key=t2.key)  第一题我是这样理解的，(（int*)0+4)表示将0转换为地址，在这个基础上偏移4个int的地址，然后在偏移后地址上取一个int值，因而值是未知的，看上去应该是这样呀？[/quote] 不是 4个int类型的字节大小么？依赖于系统，但也算是已知的吧！

user: user-0
content: 引用 2 楼 user-5 的回复:第一个是偏移4个int的地址吧，16 第二个用not exist可以解决吧，select * from t1 where not exist(select * from t2,t3 where t2.key=t3.key and t1.key=t2.key)  第一题我是这样理解的，(（int*)0+4)表示将0转换为地址，在这个基础上偏移4个int的地址，然后在偏移后地址上取一个int值，因而值是未知的，看上去应该是这样呀？

user: user-5
content: 第一个是偏移4个int的地址吧，16 第二个用not exist可以解决吧，select * from t1 where not exist(select * from t2,t3 where t2.key=t3.key and t1.key=t2.key)
user-0 提问: C语言问题

回复:
user: user-1
content: C语言应该比英语简单吧

user: user-2
content: C不难，是编程的基础，楼上已经说的很详细了，主要是楼主的信心和兴趣，建议楼主从小的程序编起，坚持下来，就会找到成就感。这样学起来就不会太累。

user: user-3
content: 受教

user: user-4
content: 继续坚持！！当你学习阶段最痛苦的时候，也就是你真正学到东西的时候，以后回过头想想你会想回到那个时候的，加油

user: user-5
content: 先找个c基础了解，在看人家代码，不多自己多写提高才有实质性

user: user-6
content: 多看，多学，多写，多练一定会好的，嘻嘻。。

user: user-7
content: 多敲敲吧~这样对学习有帮助

user: user-8
content: 多看书，多写代码，就能学好了

user: user-9
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！

user: user-10
content: 引用 5 楼 zhao4zhong1 的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”顶赵老师的

user: user-11
content: 围棋与象棋。  围棋是我所知规则最为简单的棋，但是同时也是我所知，最难的棋。  象棋是一种相对围棋规则比较多的棋，但是从很多方面而言，象棋在难度上不如围棋。灵活性上更不用说。  你是喜欢象棋还是喜欢围棋？

user: user-12
content: 多敲敲吧~这样对学习有帮助

user: user-13
content: 引用 5 楼 zhao4zhong1 的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习” 同意

user: user-9
content: 引用 6 楼 N_sev7 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习” 我想从B->C  咋办呢？[/quote] 学习Word和VBA for Word ?

user: user-14
content: 那应该放弃编程，转其它领域比较明智。  引用 楼主 u012436723 的回复:C语言程序好复杂，感觉越学越没有头绪，越学越难，编的程序有时都不懂什么意思，我想知道怎样才能真正学好、学懂C语言？

user: user-15
content: 静下心 先把理论知识过关了，多敲书上例程！

user: user-16
content: 循循渐进学。

user: user-17
content: 看不懂,可以别管,继续看后面的,然后再回头看之前的内容,不懂就多看几次,很多东西还是要自己理解才是真. 现在看的书,准备看第三次了,没办法.

user: user-18
content: 多写代码，多调试，水平才能提高。慢慢来，一步一个脚印。

user: user-19
content: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）
user-0 提问: mingw gcc 编译出错

回复:
user: user-0
content: OK，清楚了，应先#include <windows.h>

user: user-0
content: 这个是mingw自带的在iprtrmib.h定义的，

user: user-1
content: 已经提示错误了，为什么不按提示检查一下，再说你贴的内容也太精简了吧！
user-0 提问: 字节序的问题

回复:
user: user-1
content: 引用 5 楼 xiaohuh421 的回复:写出来就是给人看的了, 而内存中是不一样的.  对于0x04FF. 如果是小端, 你在内存中查看数据会看到.  0xXXXXXX:  FF 04  如果是大端, 你会看到:  0xXXXXXXX: 04 FF 支持！ 离开了字节，就没有所谓大小端问题。

user: user-2
content: 写出来就是给人看的了, 而内存中是不一样的.  对于0x04FF. 如果是小端, 你在内存中查看数据会看到.  0xXXXXXX:  FF 04  如果是大端, 你会看到:  0xXXXXXXX: 04 FF

user: user-3
content: 00x04ff的大端是04 FF， 小端是FF 40

user: user-4
content: 引用 4 楼 wangdahu888 的回复:[quote=引用 2 楼 booirror 的回复:] 麻烦各位把2进制存储形式写出来。谢谢 小端 低地址-------------------------->高地址          1111 1111 0000 0010  注意了,大小端是针对多字节存储而言的,是存储地址的高低位与逻辑高低位的对应关系. 对于单字节来说,不存在什么大小端[/quote]++

user: user-5
content: 大端是：高对低，低对高。即内存的高地址存放（数据）低字节，内存的低字节存放（数据）的高字节。 小端是：高对高，低对低。

user: user-6
content: 引用 2 楼 booirror 的回复:麻烦各位把2进制存储形式写出来。谢谢 小端 低地址-------------------------->高地址          1111 1111 0000 0010  注意了,大小端是针对多字节存储而言的,是存储地址的高低位与逻辑高低位的对应关系. 对于单字节来说,不存在什么大小端

user: user-7
content: 引用 2 楼 booirror 的回复:麻烦各位把2进制存储形式写出来。谢谢  详解介绍，图解 例程分析！看看 http://blog.csdn.net/ce123_zhouwei/article/details/6971544

user: user-0
content: 麻烦各位把2进制存储形式写出来。谢谢

user: user-8
content: 大端是高地址存0xff，低地址存0x04 小端是低地址存0xff，高地址存0x04  引用 楼主 booirror 的回复:我老是犯晕，请问大家，0x04ff的大端，小端究竟是怎么存储的。说清楚内存的高低地址
user-0 提问: 位操作问题

回复:
user: user-1
content: 引用 1 楼 user-10 的回复:num = num | (1<<3)OK

user: user-2
content: 引用 10 楼 qq523176585 的回复:[quote=引用 9 楼 derekrose 的回复:] 孤陋寡闻了，还有第0位？ 那不是数组独有的吗   先把基础打牢吧[/quote]  有一个位串 左数第一位 其实是第二位？

user: user-2
content: 孤陋寡闻了，还有第0位？ 那不是数组独有的吗

user: user-3
content: 是你的表达不专业，C语言一般说到第几位，是从0开始的，而不是从1开始。  引用 6 楼 booirror 的回复:[quote=引用 5 楼 user-10 的回复:] [quote=引用 3 楼 booirror 的回复:] [quote=引用 2 楼 sdhexu 的回复:] num |= 0x00000004; 也就是num |= 0x4，对吗[/quote] 也可以！ 但是 用 移位作比较常见 (1<<3), 0x4也只是运算的结果而已[/quote] 非常抱歉，你回答错误了，1<<3 = 0x8[/quote]

user: user-4
content: 确定是二进制位？

user: user-5
content: 引用 9 楼 derekrose 的回复:孤陋寡闻了，还有第0位？ 那不是数组独有的吗   先把基础打牢吧

user: user-6
content: 用逻辑与操作  应该可以吧

user: user-7
content: 那如果是第3位为1其他位全为0呢？

user: user-8
content: 最后问题就归结在“位是从0开始索引还是从1开始索引”的问题了。这种问题没有任何意义，知道到底是哪一位就行了。

user: user-9
content: 引用 4 楼 turingo 的回复:用 n |= (1 << 3) 这样的写法最好，可以明确的看出是第3位。   引用 楼主 booirror 的回复:将一个数的第三位设置成1，其他位不变，用位操作如何完成？ Ok

user: user-10
content: 引用 6 楼 booirror 的回复:[quote=引用 5 楼 user-10 的回复:] [quote=引用 3 楼 booirror 的回复:] [quote=引用 2 楼 sdhexu 的回复:] num |= 0x00000004; 也就是num |= 0x4，对吗[/quote] 也可以！ 但是 用 移位作比较常见 (1<<3), 0x4也只是运算的结果而已[/quote] 非常抱歉，你回答错误了，1<<3 = 0x8[/quote] sorry，第三位 应该是 1<<2

user: user-0
content: 引用 5 楼 user-10 的回复:[quote=引用 3 楼 booirror 的回复:] [quote=引用 2 楼 sdhexu 的回复:] num |= 0x00000004; 也就是num |= 0x4，对吗[/quote] 也可以！ 但是 用 移位作比较常见 (1<<3), 0x4也只是运算的结果而已[/quote] 非常抱歉，你回答错误了，1<<3 = 0x8

user: user-10
content: 引用 3 楼 booirror 的回复:[quote=引用 2 楼 sdhexu 的回复:] num |= 0x00000004; 也就是num |= 0x4，对吗[/quote] 也可以！ 但是 用 移位作比较常见 (1<<3), 0x4也只是运算的结果而已

user: user-3
content: 用 n |= (1 << 3) 这样的写法最好，可以明确的看出是第3位。   引用 楼主 booirror 的回复:将一个数的第三位设置成1，其他位不变，用位操作如何完成？

user: user-0
content: 引用 2 楼 sdhexu 的回复:num |= 0x00000004; 也就是num |= 0x4，对吗

user: user-8
content: num |= 0x00000004;

user: user-10
content: num = num | (1<<3)
user-0 提问: png iDAT解码

回复:
user: user-1
content: 楼主是否已经弄明白？请赐教！我也在这里卡住了

user: user-2
content: 我也卡到这地方了，png-24的IDAT用zlib库中uncompress解压后，查看内存块始终不对！楼主你现在搞定了没，分享下经验呗！

user: user-0
content: user-4,有ZLIB源码吗？

user: user-0
content: jxchuan ,这是一种方法，只是我做的是程序解码，我要的不单单是解码结果

user: user-3
content: 用现成的芯片厂商提供的比较好吧。

user: user-4
content: zlib开源的阿，你可以看看源码了解算法...

user: user-0
content: 自己写解压缩算法，就可以得到各种位数RGB值数据了，并且可以进行各种处理。现在在网上都找不到对pNGIDAT块详细的说明，只知道其中可以选用LZ77和huffman算法，但是具体怎么压缩的，简直没方法理解了，望哪位高人指点一二（有这方面的资料也行）呀？像BMP，GIF，JPEG，我都解出来了，唯独这个PNG简直让我无从下手。

user: user-4
content: 应该是可用zlib函数直接解压，自己写解压算法嘛这个我就不懂了...
user-0 提问: 帮帮忙。基于c语言的socker简单客户端，服务器端聊天程序代码。

回复:
user: user-1
content: 网上自己百度下啊！  很多这些源码的！

user: user-2
content: 伸手党么

user: user-3
content: 客户端 #include <stdlib.h> #include <stdio.h> #include <WinSock2.h> #pragma comment (lib,"WS2_32.lib") int main() { 	WORD wVersionRequested; 	WSADATA wsaData; 	int err;  	wVersionRequested = MAKEWORD( 2, 2 );  	err = WSAStartup( wVersionRequested, &wsaData ); 	if ( err != 0 )  	{ 		return -1; 	} 	if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 )  	{ 		WSACleanup( ); 		return -1;  	} 	SOCKET Clicent_sock=socket(AF_INET,SOCK_STREAM,0); 	SOCKADDR_IN  AddrSer; 	AddrSer.sin_family=AF_INET; 	AddrSer.sin_port=htons(5206); 	AddrSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  	int ret=connect(Clicent_sock,(SOCKADDR*)&AddrSer,sizeof(AddrSer)); 	 	if (ret!=0) 	{ 		return -1; 	} 	int i=0; 	char buf[100]; 	while (i<100) 	{   		Sleep(500);  		memset(buf,0,100);  		scanf("%s",buf);  		send(Clicent_sock,buf,strlen(buf)+1,0); 		memset(buf,0,50); 		recv(Clicent_sock,buf,50,0); 		printf("Recv Clicent:%s\n",buf); 		 		i++; 	} 	closesocket(Clicent_sock); 	return 0; }  #include <stdlib.h> #include <stdio.h> #include <WinSock2.h> #pragma comment (lib,"WS2_32.lib") int main() { 	WORD wVersionRequested; 	WSADATA wsaData; 	int err;  	wVersionRequested = MAKEWORD( 2, 2 );  	err = WSAStartup( wVersionRequested, &wsaData ); 	if ( err != 0 )  	{ 		return -1; 	} 	if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 )  	{ 			WSACleanup( ); 			return -1;  	} 	SOCKET Server_sock=socket(AF_INET,SOCK_STREAM,0); 	SOCKADDR_IN  AddrSer; 	AddrSer.sin_family=AF_INET; 	AddrSer.sin_port=htons(5206); 	AddrSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  	int ret=bind(Server_sock,(SOCKADDR*)&AddrSer,sizeof(SOCKADDR_IN)); 	if (ret!=0) 	{ 		return -1; 	} 	listen(Server_sock,5); 	SOCKADDR_IN AddrClient; 	int len=sizeof(SOCKADDR_IN); 	SOCKET scokLink=accept(Server_sock,(SOCKADDR*)&AddrClient,&len); 	int i=0; 	char buf[50]; 	while (1) 	{ 		 		recv(scokLink,buf,50,0); 		printf("Recv Clicent:%s\n",buf); 		Sleep(500); 		memset(buf,0,50); 		scanf("%s",buf); 		send(scokLink,buf,strlen(buf)+1,0); 		memset(buf,0,50); 		 	} 	closesocket(Server_sock); 	closesocket(scokLink); 	return 0; }  服务器端

user: user-4
content: 引用 3 楼 max_min_ 的回复:网上自己百度下啊！  很多这些源码的！ 关于socket编程的案例确实很多
user-0 提问: 请大家帮帮忙！如何将将262144*4的二维数组转换为1024*1024的二维数组，附代码，先谢谢啦！

回复:
user: user-1
content: 强制转换好！

user: user-2
content: 对于计算机来说, 不管是几维的数组, 都是连续的内存, 只是访问试工不同而以.  只要容量相同, 就可以直接按任意维度访问,或者直接复制.  int val1[1024][1024]; int val2[26144][4];  memcpy(val1, val2, 26144*4*sizeof(int)); //直接复制  int (*pVal)[1024][1024] = (int(*)[1024][1024])val2;//强制转换. (*pVal)[0][0] = 100; //访问.

user: user-3
content: 地址偏移呗！  int new[1024][1024]; int old[26144][4]; int *p = &old[0][0]; static int flag = 0; for(int i = 0; i< 1024; i++) for(int j = 0; j< 1024; j++) {   new[i][j] = *(p+flag);    flag ++; }
user-0 提问: 输入2个数，按数值大小排列 为什么输出的数字前面一个都是0呢

回复:
user: user-0
content: 谢谢各位大大们，我刚刚开始学习还有很多的不懂，请多多指教

user: user-0
content: 5.2的意思不是显示显示整数5位，小数点后2位么

user: user-1
content: google printf() 函数，看看printf("%5.2f,%5.2f",a,b); 中5.2表示什么意思   A number specifying a minimum field width. The converted argument will be printed in a field at least this wide, and wider if necessary. If the converted argument has fewer characters than the field width it will be padded on the left (or right, if left adjustment has been requested) to make up the field width. The padding character is normally space, but is 0 if the zero padding flag is present.

user: user-2
content: scanf()函数。 格式化输入函数，调用的时候什么样格式，输入的时候一同样的格式输入！

user: user-3
content: 引用 1 楼 turingo 的回复:scanf的时候，你用"%f,%f"的格式，那么在输入的时候需要加一个逗号，例如：  1.2,3.45   [quote=引用 楼主 u012733137 的回复:] #include "stdio.h" void main() {     float a,b,t;     scanf("%f,%f",&a,&b);     if(a>b){t=a;a=b;b=t;}     printf("%5.2f,%5.2f",a,b); }[/quote]  +1

user: user-4
content: scanf的时候，你用"%f,%f"的格式，那么在输入的时候需要加一个逗号，例如：  1.2,3.45  引用 楼主 u012733137 的回复:#include "stdio.h" void main() {     float a,b,t;     scanf("%f,%f",&a,&b);     if(a>b){t=a;a=b;b=t;}     printf("%5.2f,%5.2f",a,b); }
user-0 提问: 讨论原始问题：到底是 a/2 快还是 a>>1 快

回复:
user: user-1
content: 一样快，都是执行的移位指令，除法指令也是执行的移位指令，多了个相减的过程，不过执行时间都是一样的。

user: user-2
content: 引用 1 楼 user-8 的回复:如果是无符号整数，一般编译器优化过之后的汇编都是一样的  ++

user: user-3
content: a>>1快就是因为底层CPU执行位移指令比执行除法指令快吧。

user: user-4
content: 80%的程序员，不会去真正考虑这些问题。即使考虑了，80%的程序员也用不上这些东西。

user: user-4
content: a>>1快，。

user: user-5
content: 看生成的汇编语句的数量

user: user-6
content: 肯定是 a>>1快

user: user-7
content: 不优化的话，那么当然是a>>1移位快，但是a如果是有符号数的话，那么结果会有问题。  引用 楼主 theworldsong 的回复:不要扯上计算机原理，因为从代码到硬件执行这个过程可能经过了多次中转。 现在感兴趣的问题在于： a/2 和 a>>1，编译器编译过后，他们的工作原理是否一致了？ 不仅限于C，大家说说看，满足我的好奇心吧

user: user-8
content: 如果是无符号整数，一般编译器优化过之后的汇编都是一样的
user-0 提问: 【急！！！求助！！！】编写一个10个数的成绩表。（用C）

回复:
user: user-1
content: 网上应该有大量的资料和可用代码， google

user: user-2
content: 这个还真需要设计一下，如果是自己完成，我想应该能学到不少的知识。 建议楼主自己先想一想，然后找出不理解的问题，最后让大家帮助你吧；

user: user-3
content: 参考下，学生的信息链表，可以额外添加些你需要的成绩信息！ http://www.cnblogs.com/Alex-bg/archive/2012/08/05/2623946.html

user: user-4
content: 找本数据结构
user-0 提问: 请教大家一个指针问题

回复:
user: user-1
content: 1  void npd_check_must() {  2    char *p = getSomeValue();  3    if (p != NULL) { }  4    if (p != NULL) p[0] = 0;  5  }

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:http://translate.google.cn/?hl=zh-cn&tab=wT#en/zh-CN/Although%20*p%20is%20checked%20for%20null%20at%20line%203%2C%20it's%20explicitly%20dereferenced%20at%20line%204%20without%20being%20checked%20for%20null.%20(This%20example%20makes%20the%20defect%20obvious%2C%20but%20in%20more%20typical%20application%20code%2C%20the%20dereference%20would%20be%20harder%20to%20spot.)%20This%20type%20of%20vulnerability%20can%20produce%20unexpected%20and%20unintended%20results.%0D%0A%0D%0A%20Fixed%20code%20example%0D%0A%201%20%20void%20npd_check_must()%20%7B%0D%0A%202%20%20%20%20char%20*p%20%3D%20getSomeValue()%3B%0D%0A%203%20%20%20%20if%20(p%20!%3D%20NULL)%20%7Bp%5B0%5D%20%3D%200%3B%7D%0D%0A%204%20%20%7D%0D%0A%20In%20the%20fixed%20version%2C%20the%20dereference%20is%20dependent%20on%20the%20check%20for%20null.  那这种问题该怎样改呢？

user: user-1
content: http://translate.google.cn/?hl=zh-cn&tab=wT#en/zh-CN/Although%20*p%20is%20checked%20for%20null%20at%20line%203%2C%20it's%20explicitly%20dereferenced%20at%20line%204%20without%20being%20checked%20for%20null.%20(This%20example%20makes%20the%20defect%20obvious%2C%20but%20in%20more%20typical%20application%20code%2C%20the%20dereference%20would%20be%20harder%20to%20spot.)%20This%20type%20of%20vulnerability%20can%20produce%20unexpected%20and%20unintended%20results.%0D%0A%0D%0A%20Fixed%20code%20example%0D%0A%201%20%20void%20npd_check_must()%20%7B%0D%0A%202%20%20%20%20char%20*p%20%3D%20getSomeValue()%3B%0D%0A%203%20%20%20%20if%20(p%20!%3D%20NULL)%20%7Bp%5B0%5D%20%3D%200%3B%7D%0D%0A%204%20%20%7D%0D%0A%20In%20the%20fixed%20version%2C%20the%20dereference%20is%20dependent%20on%20the%20check%20for%20null.

user: user-2
content: 即使已经检查指针是否为空，但没有马上用的情况，也不能保证指针是否依然为空？ 怎么上面的代码和下面的描述联系不起来？

user: user-3
content: E文。 。。。是硬伤
user-0 提问: c语言中数组名和对数组名取地址一样吗？

回复:
user: user-1
content: 引用 6 楼 max_min_ 的回复:[quote=引用 3 楼 qdlgdx_lsy 的回复:] [quote=引用 2 楼 shn521 的回复:] 这种问题完全可以自己写个测试代码就知道了 我测试的结果是一样的。不知道为什么？[/quote]   int a[5] = {0}; printf(" a = %p\n", a); printf("&a = %p\n", &a)  // 自己打印试试，不可能一样的！[/quote]  一样啊。。应该项一样  引用 4 楼 farmliver 的回复:地址值是一样，在内存中位置也一样，但是意思不一样。数组名代表数组中第一个元素的地址，数组名取地址代表整个数组的地址。如果对前者加1则是数组中第二个元素的地址，如果对后者加1则是整个数组之后位置的地址。

user: user-2
content: 数组名含义根据不同的场景是变化的，楼主应当灵活掌握： 比如对 char s[4] = "chi"; 除了以下这二种例外情况，数组名一律退化为"指向数组首元素的指针". (1) sizeof(s) (2) &s;  到于&s,虽然他的值和s一样，但类型不一样。  char s[4] = "chi"  char (*p)=&s;  //注意&s的类型。  char *ps=s;  //注意除了上面讲的那两种情况，数组名一律退化为"指向数组首元素的指针"

user: user-3
content: 一个是首地址（第一个元素的地址）。 一个是数组地址，类型不同，值相同。  一维数组，取地址，得到一维数组指针。 指针长度（指针加一后，移动的距离）是整个数组长度。  一维数组，数组名做值参以及参与运算， 甚至单独出现，代表数组第一个元素的地址---首地址 ，是一级指针。 指针长度（指针加一后，移动的距离）是数组的一个元素的长度。   二维数组，取地址，得到二维数组指针。 指针长度（指针加一后，移动的距离）是二维数组的长度。  二维数组，数组名做值参以及参与运算，甚至单独出现，代表数组第一个元素的地址---第一个一维数组元素的地址 ，是一维数组指针。 指针长度（指针加一后，移动的距离）是一维数组的长度。

user: user-4
content: 地址值是一样，在内存中位置也一样，但是意思不一样。数组名代表数组中第一个元素的地址，数组名取地址代表整个数组的地址。如果对前者加1则是数组中第二个元素的地址，如果对后者加1则是整个数组之后位置的地址。

user: user-0
content: 引用 2 楼 shn521 的回复:这种问题完全可以自己写个测试代码就知道了 我测试的结果是一样的。不知道为什么？

user: user-5
content: 这种问题完全可以自己写个测试代码就知道了

user: user-6
content: 完全不一样！  楼主可以试试把地址打印出来看看! 一个是本身的地址，一个是存储数组的地址！

user: user-7
content: 一样的。详见《C和指针》

user: user-8
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-3
content: 不一样，类型不同！

user: user-9
content: 结果一样，但是性质不一样。

user: user-10
content: 作为地址打印出来的值是一样的，但是含义是不一样的

user: user-0
content: 引用 6 楼 max_min_ 的回复:[quote=引用 3 楼 qdlgdx_lsy 的回复:] [quote=引用 2 楼 shn521 的回复:] 这种问题完全可以自己写个测试代码就知道了 我测试的结果是一样的。不知道为什么？[/quote]   int a[5] = {0}; printf(" a = %p\n", a); printf("&a = %p\n", &a); // 自己打印试试，不可能一样的！[/quote] 一样的。在ubuntu下gcc编译测试。

user: user-6
content: 引用 3 楼 qdlgdx_lsy 的回复:[quote=引用 2 楼 shn521 的回复:] 这种问题完全可以自己写个测试代码就知道了 我测试的结果是一样的。不知道为什么？[/quote]   int a[5] = {0}; printf(" a = %p\n", a); printf("&a = %p\n", &a); // 自己打印试试，不可能一样的！

user: user-5
content: 引用 3 楼 qdlgdx_lsy 的回复:[quote=引用 2 楼 shn521 的回复:] 这种问题完全可以自己写个测试代码就知道了 我测试的结果是一样的。不知道为什么？[/quote] 那就是一样的吧，有些东西是规定，约定好的。
user-0 提问: 循环链表段错误

回复:
user: user-0
content: 理解了,结贴

user: user-0
content: 谢谢, 我找来看看.

user: user-1
content: 楼主 貌似还不是很太理解函数传参的意义呢！ 找个基础的书籍看看函数这章的内容吧！补补基础！

user: user-2
content: 引用 楼主 u011748522 的回复:我这有一个初始化循环链表的函数，在空表的情况下插入新结点出现段错误，用GDB调试时发现初始化空表后next指针指向的地址不对, 一直想不明白原因, 故发贴向各大侠求教,谢谢.  有问题代码如下:  typedef char data_type;  // 单链表start typedef struct node { 	data_type data; 	struct node *next; }link_node;  typedef link_node *link_list;   void init_link_list(link_list L) { 	link_list L = (link_node *)malloc(sizeof(link_node));  	L->data = '0'; 	L->next = L; }  int main(void) { 	link_list head2;         head2 = Init_link_list();	 	insert_node(head2, 'm', 1); 	insert_node(head2, 'a', 2); }   把init_link_list函数修改后测试就正常了, 正常的代码如下: link_list  Init_link_list(void) { 	link_list L = (link_node *)malloc(sizeof(link_node));  	L->data = '0'; 	L->next = L; 	return L; }  link_list head2;          head2 = Init_link_list(); 请问 你这个Init的定义是什么 void init_link_list(link_list L)  你的返回值都是空了 你还要用head2接收 并没有返回真正开辟的空间 内存泄露了

user: user-3
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-4
content: 引用 3 楼 max_min_ 的回复:楼主 貌似还不是很太理解函数传参的意义呢！ 找个基础的书籍看看函数这章的内容吧！补补基础！  林锐 高质量 C++& C 编程指南

user: user-0
content: 好的, 谢谢.

user: user-3
content: 参考三楼。

user: user-0
content: 因为不仔细, 把代码贴错了, 浪费了大家的时间,非常抱歉.  另我用GDB调试发现,用init_link_list建立一个空的循环链表head2后, head2->data和head2->next的值都跟设想的不一样. 我在init_link_list函数里是把head2->data设置为0, head2->next为指向它自己. 但是GDB调试里显示head2->data=1, head2->next= 0x0. 而要印head2变量的地址是:0x28febc. 所以我想head2->next的值应该是0x28febc才对. 不知道理解是否有问题. 望指教.

user: user-0
content: 先谢谢各位了. 上面的代码贴错了, 更正如下:  int main(void) {     link_list head2;     init_link_list(head2); // 这是原来有问题的调用     // head2 = Init_link_list(); 这是修改后的调用          insert_node(head2, 'm', 1);     insert_node(head2, 'a', 2); }
user-0 提问: OH MY GOD！什么情况啊？

回复:
user: user-0
content: 谢了，知道了！

user: user-1
content: google scanf_s(), 看看别人如何使用

user: user-2
content: 引用 2 楼 yerssa 的回复:[quote=引用 1 楼 user-8 的回复:]  //也是要取地址符的，你这个是单个字符，不是字符串 scanf_s ("%d %c %c %c",&person[i].num, &person[i].name, &person[i].sex, &person[i].job);  还是不对啊！[/quote]函数用错了。。。scanf_s用于字符串，换scanf试试

user: user-3
content: scanf_s用于字符串?!

user: user-4
content: 引用 6 楼 yulitingfeng 的回复:[quote=引用 2 楼 yerssa 的回复:] [quote=引用 1 楼 user-8 的回复:]  //也是要取地址符的，你这个是单个字符，不是字符串 scanf_s ("%d %c %c %c",&person[i].num, &person[i].name, &person[i].sex, &person[i].job);  还是不对啊！[/quote]函数用错了。。。scanf_s用于字符串，换scanf试试[/quote] 同意

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  请检查scanf的返回值。

user: user-5
content: 同意楼上的说法

user: user-6
content: 换回scanf，关于scanf_s先看文档...

user: user-7
content: 输1 2 3 4看对不对

user: user-0
content: 引用 1 楼 user-8 的回复: //也是要取地址符的，你这个是单个字符，不是字符串 scanf_s ("%d %c %c %c",&person[i].num, &person[i].name, &person[i].sex, &person[i].job);  还是不对啊！

user: user-8
content: //也是要取地址符的，你这个是单个字符，不是字符串 scanf_s ("%d %c %c %c",&person[i].num, &person[i].name, &person[i].sex, &person[i].job);
user-0 提问: 为什么自己显示是对的，交上去会是这个样子（usaco里的）

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:wissqu.in 在哪里？ http://www.nocow.cn/index.php/Translate:USACO/wissqu 就是这个题，那个文件是自己建的，

user: user-1
content: wissqu.in 在哪里？

user: user-0
content: 引用 3 楼 user-1 的回复:你贴上来的代码有问题啊，为什么函数dfs()的变量 why 没有初始化？ 谢了，那个if是应该num的，太感谢了，不过我的编译器竟然结果是对的。谢了。

user: user-1
content: 你贴上来的代码有问题啊，为什么函数dfs()的变量 why 没有初始化？
user-0 提问: malloc申请内存失败

回复:
user: user-1
content: 引用 1 楼 jerry_dqh 的回复:是在Dll中，还是直接在exe中，200M比较大了，进程没有这么多的连续的线性空间了。虽然你的物理内存还够。 ++

user: user-2
content: 引用 21 楼 fengflyflyfly 的回复:[quote=引用 20 楼 jerry_dqh 的回复:] [quote=引用 楼主 fengflyflyfly 的回复:] 我的内存是4G的，系统和程序大概用了不到2.5G。现在我想申请一个200多M的内存，为什么申请不到啊？  说下你程序的情况，比如是否加载了dll,申请了几次内存 ，等等。[/quote]  没有加载dll  申请了20次左右内存。十多兆到几百兆不等。[/quote] 就是因为你申请次数太多了，线性空间没有连续的了。如果你一开始就申请200M，是可以成功的

user: user-3
content: 内存碎片整理工具MemTurbo http://www.yesky.com/447/113447.shtml

user: user-4
content: 引用 16 楼 fengflyflyfly 的回复:[quote=引用 15 楼 mujiok2003 的回复:] CPU多少位的？ 什么OS？ 用户进程空间多大？  CPU是64位的，但是我的程序用32位编译的。 win7系统。  进程空间我不知道。     可能是内存碎片的原因？ 我申请小一点的连续空间是可以的。     [/quote] 多半没有那么大连续空间了:200MB = 200*1024KB = 50*4096KB = 50页

user: user-0
content: 引用 20 楼 jerry_dqh 的回复:[quote=引用 楼主 fengflyflyfly 的回复:] 我的内存是4G的，系统和程序大概用了不到2.5G。现在我想申请一个200多M的内存，为什么申请不到啊？  说下你程序的情况，比如是否加载了dll,申请了几次内存 ，等等。[/quote]  没有加载dll  申请了20次左右内存。十多兆到几百兆不等。

user: user-0
content: 引用 15 楼 mujiok2003 的回复:CPU多少位的？ 什么OS？ 用户进程空间多大？  CPU是64位的，但是我的程序用32位编译的。 win7系统。  进程空间我不知道。     可能是内存碎片的原因？ 我申请小一点的连续空间是可以的。

user: user-2
content: 引用 楼主 fengflyflyfly 的回复:我的内存是4G的，系统和程序大概用了不到2.5G。现在我想申请一个200多M的内存，为什么申请不到啊？  说下你程序的情况，比如是否加载了dll,申请了几次内存 ，等等。

user: user-2
content: 引用 16 楼 fengflyflyfly 的回复:[quote=引用 15 楼 mujiok2003 的回复:] CPU多少位的？ 什么OS？ 用户进程空间多大？  CPU是64位的，但是我的程序用32位编译的。 win7系统。  进程空间我不知道。     可能是内存碎片的原因？ 我申请小一点的连续空间是可以的。     [/quote]  跟物理内存碎片没有关系的。

user: user-0
content: 引用 8 楼 xiaohuh421 的回复:1楼的已经说清了.  就是你电脑的内存碎片太多, 导致系统已经没办法再给你分配 200M连续的内存空间了.  随着电脑运行时间越长, 申请到很大连续空间的可能性就越低.  所以我们自己 写程序的时候, 特别是长期运行的程序的时候, 一定要注意这个问题.   内存碎片可不可以通过整理清理掉？ 谢谢指点。

user: user-4
content: CPU多少位的？ 什么OS？ 用户进程空间多大？

user: user-5
content: 是不是申请出了问题?写出看下.

user: user-6
content: 1楼的已经说清了.  就是你电脑的内存碎片太多, 导致系统已经没办法再给你分配 200M连续的内存空间了.  随着电脑运行时间越长, 申请到很大连续空间的可能性就越低.  所以我们自己 写程序的时候, 特别是长期运行的程序的时候, 一定要注意这个问题.

user: user-7
content: 每个进程会有4G的虚拟地址空间, malloc得到的的地址都是虚拟地址, 并且当malloc的时候, 操作系统并不会将实际的内存分配给进程的, 以malloc只会占用进程自身的虚拟地址空间。 问题应该 不是内存不够。。。 是不是申请方式不对？

user: user-8
content: 都别扯淡了，什么物力内存，系统碎片，咱们回炉一下吧，呵呵呵

user: user-9
content: 可以被申请的内存大小不等于可用的物理内存大小，因为有一部分物理内存是受保护的，不能被申请。

user: user-6
content: 引用 9 楼 fengflyflyfly 的回复:[quote=引用 8 楼 xiaohuh421 的回复:] 1楼的已经说清了.  就是你电脑的内存碎片太多, 导致系统已经没办法再给你分配 200M连续的内存空间了.  随着电脑运行时间越长, 申请到很大连续空间的可能性就越低.  所以我们自己 写程序的时候, 特别是长期运行的程序的时候, 一定要注意这个问题.   内存碎片可不可以通过整理清理掉？ 谢谢指点。[/quote]  这个我也不知道有还是没有,  因为我也没听说过有, 也没用使用过.

user: user-3
content: 内存不够用不会用CreateFileMapping吗？ 再不够用还可以用文件读写模拟内存读写啊！参考_lseeki64函数。

user: user-10
content: 引用 4 楼 ak47_wz 的回复:感觉没有理由申请不到。。。 不过操作系统在这一方面所有做限制的。会终止了这种贪婪进程。 但是个人感觉200M，好像也没到需要限制的时候。。。  嗯，也表示不解，曾经MFC的程序new过1G的内存呢

user: user-11
content: 1楼应该是正解。。。

user: user-12
content: 感觉没有理由申请不到。。。 不过操作系统在这一方面所有做限制的。会终止了这种贪婪进程。 但是个人感觉200M，好像也没到需要限制的时候。。。
user-0 提问: 赫夫曼树输出赫夫曼编码不知道运行总是中断？

回复:
user: user-0
content: 终于调好了，嘿嘿，谢谢大家了！

user: user-1
content: 引用 2 楼 u011251198 的回复:数组应该是没有越界啊！表示调程序真是不太会啊！  如果现在会不会调试没事, 可以慢慢学,   但是一定得学, 因为作为程序员, 这是一个很基础, 但是非常重要的能力.  就算是那些牛得掉渣的 大神们, 也同样要调试程序的.  VS系列中:  选中一条语句 按 F9 即可添加断点. 然后按F5调试运行, 到断点后,按F10单步执行(即一次执行一条语句). 如果遇到函数调用, 可以按F11进入函数内部. 每执行一句, 鼠标移动到相关变量上看其值, 是否符合你想像的结果.

user: user-2
content: 引用 9 楼 u011251198 的回复:调程序好重要啊 ，我要好好学啊 ！  调试程序是学习编程的基础

user: user-0
content: 调程序好重要啊 ，我要好好学啊 ！

user: user-0
content: 为什么在执行//HC=(HuffmanCode)malloc((n+1)*sizeof(char *));时会触发断点呢，不太懂了！

user: user-3
content: free(cd); cd是个数组，不用你free， 需要free的是申请的堆内存

user: user-4
content: 引用 2 楼 u011251198 的回复:数组应该是没有越界啊！表示调程序真是不太会啊！调试其实不难，最简单的就是断点跟踪，然后在下面的窗口中观察值的变化，和你的预期结果比较什么的。VS下还是很容易，有空多学一下。

user: user-5
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-5
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-0
content: 数组应该是没有越界啊！表示调程序真是不太会啊！

user: user-6
content: 重点检查数组越界没有，设置断点，单步调试
user-0 提问: 请前辈指点一下，构造二叉树的问题

回复:
user: user-1
content: 建议：main函数写成int main(int argc, char* argv[])嫌麻烦就写成int main()呀，两个都是标准的写法，main最后写个return 0也不费事吧，写代码一定要养成好的习惯哦 事实上，lz建树的过程根本没有体现出递归的思想呢，给lz个伪代码吧：  const ValueType in[]; const ValueType pre[]; int preIndex = first index in pre[]; struct node* buildTree(int s, int e) {     in[i] = Find the corresponding item of pre[preIndex] in in[];     struct node* root = new node;     root->value = in[i]     root->left = root->right = NULL;      ++preIndex;     if(preIndex is a legal index){         if(i > s) root->left = buildTree(s, i-1);         if(i < e)  root->right = buildTree(i+1, e);     }     return root; }

user: user-2
content: 递归要有出口，否则会使程序挂掉的

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  typedef struct Binarytree {     char data;     Binarytree *leftchild;     Binarytree *rightchild; } Btree;   void makebrianytree(Btree **root, char *preorder, char *midorder, int length) {     if (length < 0)     {         printf("tree is null!\n");         return;     }     (*root) = new Btree;     (*root)->data = *preorder;     char *rootplace = strchr(midorder, (*root)->data); 	if (rootplace == NULL) 		return;     int lefttreelength = length - strlen(rootplace);     int righttreelength = length - lefttreelength - 1;     makebrianytree(&(*root)->leftchild, 		preorder + 1, 		midorder, 		lefttreelength);     makebrianytree(&(*root)->rightchild, 		preorder + lefttreelength + 1, 		rootplace + 1, 		righttreelength);   }   void main() {     Btree *Btree;     char pre[] = "abdeijcfg";     char mid[] = "dbiejafcg"; //    int length;     int length=strlen(pre);     makebrianytree(&Btree, pre, mid, length); }
user-0 提问: Extended Results: xpppprpppr出现这个是怎么回事？才学c的新手，求帮助啊。。代码下面

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:1 每次输入数据的时候回车符没有处理  2 memset(d,-1,sizeof(d));memset函数是针对每个字节来处理的！所以不能这样初始化   老实点，新手就不要偷懒了！  重新初始化以后出现了这个怎么回事？Extended Results: x++++r+++r

user: user-0
content: 重新初始化以后出现了这个怎么回事？Extended Results: x++++r+++r

user: user-1
content: 1 每次输入数据的时候回车符没有处理  2 memset(d,-1,sizeof(d));memset函数是针对每个字节来处理的！所以不能这样初始化   老实点，新手就不要偷懒了！
user-0 提问: C语言新人求教

回复:
user: user-1
content: #include<stdio.h> void main() {  int ming,mama; ming=12; mama=ming+26; while(mama!=ming*2) {  ming++; mama++;  } printf("ming:%d\n",ming); printf("mama:%d\n",ming+26);     }

user: user-2
content: 引用 4 楼 AnYidan 的回复:学习编程，最好有编译器，单步运行理解程序好哎说这句话！

user: user-3
content: 你的程序仍然是有问题的，参考：  #include <stdio.h>  int main(int argc, char* argv[]) { 	int ming; 	int mama;  	/* 小明今年12岁 */ 	ming = 12; 	/* 他母亲比他大26岁 */ 	mama = ming + 26;  	/* 循环直到他母亲的年龄比他大一倍 */ 	while(mama != ming * 2) 	{ 		ming++; 		mama++; 	}  	/* 打印这时是多少年之后 */ 	printf("%dnian\n", ming - 12); 	/* 打印这时小明和他妈妈的年龄 */ 	printf("mama=%d, ming=%d\n", mama, ming);  	return 0; }   引用 楼主 u012495149 的回复:最近学习C语言，在学到循环语句的时候遇到了荆棘，在此向各位大虾请教，希望得到大虾们的不吝赐教，谢谢。   现在切入正题，我遇到一个问题：编写程序：小明今年12岁，他母亲比他大26岁，计算几年后她母亲的年龄比他大一倍时，他们的年龄分别是多少？   我在开始做这道题的时候不知道选择什么循环语句，用的“for循环”，开始错误很多，在老师指导后改正了，程序如下： #include<stdio.h> main() {    int  mama=28,ming=12;        for(;1;)         {if(mama==ming*2)break;         mama++;ming++;}         printf("%dnian\n",ming-12);         printf("mama=%d\n,ming=%d\n",mama,ming); }       现在有两个问题想请教大家：1、红体字“ming-12”是什么意思；2、在什么情况下分别应该选择哪种循环语句？

user: user-4
content: ming-12是变量ming减12的值。 至于用哪种循环，其实当你多运用多几次之后，慢慢就可以体会到for/while/do--while该怎么使用了。

user: user-5
content: 学习编程，最好有编译器，单步运行理解程序

user: user-6
content: ming是一个变量，通过上面的循环结束后，ming变量会有一个新的值，ming - 12就是新的值减去12后的值，然后打印到终端； 这个地方也可以使用while循环； 其实for/while/do--while循环都可以相互转换的。即能用do--while解决问题的，使用for循环或者使用while循环都可以。 只不过这三种循环也有一些差异，do--while是先执行循环体在判断，而for和while是先判断条件然后在执行循环体

user: user-7
content: ming-12就是那个多少年后吧。。

user: user-8
content: 1 就是 ming -12的值！   整条语句就是输出 ming的值 减去12之后大小！  2 看具体情况！可以用while 一般也可以用for！没有特别的限定！两个也是可以相互转化的！