Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 杭电OJ 1020为什么错啊

回复:
user: user-1
content: 引用 8 楼 zxh707wk 的回复:引用 7 楼 Falleyes 的回复:[quote=引用 6 楼 u012509810 的回复:] [quote=引用 5 楼 Falleyes 的回复:]这题目好像在哪见过ACM都很像的

user: user-2
content: 引用 7 楼 Falleyes 的回复:[quote=引用 6 楼 u012509810 的回复:] [quote=引用 5 楼 Falleyes 的回复:] 这道题目的意思是要你把相同的字母序列变为数字加字母，比如AABAA，你应该输出2AB2A，而不是4AB。 按你说的我修改了代码通过了，话说题目里哪里说是这样的输出的呀？[/quote]  看这句： Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string. 每一个截取的字符串包含k个一样的字符，把他替换成kX，而这里X是这段截取字符串中唯一一种字符。 所以要求2A，就必须是AA，4A就一定是AAAA。[/quote]这题目好像在哪见过

user: user-1
content: 引用 6 楼 u012509810 的回复:[quote=引用 5 楼 Falleyes 的回复:] 这道题目的意思是要你把相同的字母序列变为数字加字母，比如AABAA，你应该输出2AB2A，而不是4AB。 按你说的我修改了代码通过了，话说题目里哪里说是这样的输出的呀？[/quote]  看这句： Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string. 每一个截取的字符串包含k个一样的字符，把他替换成kX，而这里X是这段截取字符串中唯一一种字符。 所以要求2A，就必须是AA，4A就一定是AAAA。

user: user-0
content: 引用 5 楼 Falleyes 的回复:这道题目的意思是要你把相同的字母序列变为数字加字母，比如AABAA，你应该输出2AB2A，而不是4AB。 按你说的我修改了代码通过了，话说题目里哪里说是这样的输出的呀？

user: user-1
content: 这道题目的意思是要你把相同的字母序列变为数字加字母，比如AABAA，你应该输出2AB2A，而不是4AB。

user: user-3
content: 引用 2 楼 lovesmiles 的回复: int find;     scanf("%d", &line);     getchar();  这里为什么还要getchar? 回收回车和空格

user: user-1
content: 这是我当年的代码： #include<iostream> #include<string>  using namespace std;  void main() { 	int N; 	cin >> N; 	while (N--) 	{ 		string str; 		cin >> str;  		char a = str[0]; 		int num = 1;  		for (int i = 1; i<str.size(); i++) 		{ 			if (str[i] == str[i - 1])    //打印该元素之前的字母 				num++; 			else 			{ 				if (num == 1) 					cout << str[i - 1]; 				else 					cout << num << str[i - 1]; 				a = str[i]; 				num = 1; 			} 			if (i == str.size() - 1)    //最后一个元素 			{ 				if (num == 1) 					cout << str[i] << endl; 				else 					cout << num << str[i] << endl; 			} 		} 	} 	return; }

user: user-4
content: int find;     scanf("%d", &line);     getchar();  这里为什么还要getchar?

user: user-3
content: 边界数据过不了或者其他数据过不去，编译通过只能说明你的代码在语法上没有错误，不代表在逻辑上也没有错误
user-0 提问: 如何能扫描局域网内的IP

回复:
user: user-0
content: 引用 2 楼 mrlgy 的回复:用套接字一个个的ping 不知道网上有没有用C编写的代码？想学习一下；

user: user-1
content: 用套接字一个个的ping

user: user-2
content: 首先得知道有哪些网段， 逐个ping这些网段，有回应就记下来。无回应就扔掉。

user: user-3
content: 既然都提到文本框了，那么你肯定是用MFC框架了。 MFC里面有现成的类和函数可以使用，不用自己造了

user: user-4
content: 你是用纯C还是MFC开发啊？如果是MFC有现成的。C语言就有点麻烦。

user: user-5
content: 百度。。。
user-0 提问:  wsprintf用法有疑惑?

回复:
user: user-1
content: 这跟你工程选的字符集有关多字符或者是unicode下的有关

user: user-2
content: 1、字符串前面加一个L表明是UNICODE字符 一般使用_T("")，在VC下  2、不加L，是在strTime为非宽字符，工程设置也为非UNICODE的情况下才能编译通过
user-0 提问: 求大神帮助如何合并两个c语言代码

回复:
user: user-1
content: C语言没有函数重载 有同名函数，把其中一些，重新命名。  没有同名函数，直接拷贝到一起就可以了。  其实，既然是不同的文件，只要函数命名无重复，完全没有必要合并。 需要使用哪些函数，就直接把对应的头文件，实现文件复制过去，就可以了  再不然，把这些文件， 放在一起链接生成动态库或者静态库，即可。  动态库：把动态库，和它的导入库，以及头文件交给用户，就可以用了。 静态库： 把静态库，和头文件交给用户，就可以用了。  另外，如果直接把算法写在main函数中， 基本上main改成一个有意义的名字就行了。  如果需要编译成可执行文件，并有多个main 保留一个就行了，其他main改名  在保留的那个main中按照需要， 调用其他已经改名的main函数即可。

user: user-2
content: 引用 5 楼 liupeiran734562257 的回复:那大概是个什么方法？因为对c语言了解的不多，对于这种情况该如何处理？ 直接往一起粘贴就行了。

user: user-0
content: 那大概是个什么方法？因为对c语言了解的不多，对于这种情况该如何处理？

user: user-2
content: 引用 3 楼 liupeiran734562257 的回复:是有5个.h头文件，两个代码用的头文件都是相同的 直接动手做，遇到问题，看，修改就好了。

user: user-0
content: 是有5个.h头文件，两个代码用的头文件都是相同的

user: user-3
content: 头文件相同？一个头文件，两个实现文件？直接copy粘贴。

user: user-2
content: 都有主函数？ 还书名有没有相同的？ 头文件都有防止重复包含的宏定义吧？ 如果基本上可以直接合并。
user-0 提问: 菜鸟请教一个问题

回复:
user: user-1
content: 点击“生成”->清空项目->全部重新生成。然后按F5运行！！！！

user: user-1
content: 引用 楼主 LarryKeNn 的回复:请教 在VS2010中编写C语言程序，出现这种情况是什么原因？求大神帮忙解决下！  看你这张图片，debug状态都没有进入，一看就知道 是直接拖exe文件入cmd窗口，然后回车运行。你这样直接拖文件入cmd窗口，它会自动加双引号，你这样是没有办法运行它的。

user: user-1
content: 是设置的问题，你没看到路径的提示里有个双引号？和中文不中文无关

user: user-2
content: 引用 9 楼 lovesmiles 的回复:[quote=引用 楼主 LarryKeNn 的回复:] 请教 在VS2010中编写C语言程序，出现这种情况是什么原因？求大神帮忙解决下！  看你这张图片，debug状态都没有进入，一看就知道 是直接拖exe文件入cmd窗口，然后回车运行。你这样直接拖文件入cmd窗口，它会自动加双引号，你这样是没有办法运行它的。[/quote]+1

user: user-2
content: 引用 8 楼 lovesmiles 的回复:是设置的问题，你没看到路径的提示里有个双引号？和中文不中文无关+1

user: user-3
content: 1、永远不使用中文路径； 2、代码风格需要修炼。

user: user-4
content: 个人建议：不要出现中文路径

user: user-5
content: 你这可能是格式问题！

user: user-6
content: 拿分来吧。  你的VS2010可能不支持中文路径。

user: user-7
content: 补充一点,scanf();  %d%d之间的逗号最好去掉, 不知道是不是问题所在, 但是这是一个不好的习惯..................我也是新手~

user: user-7
content: 帮顶. 不是高手. 但是. 楼主的代码风格需要改..

user: user-0
content: 问题补充

user: user-0
content: 顺便说一下我的系统是64位的win7
user-0 提问: 进程检测问题

回复:
user: user-0
content: 引用 1 楼 Oringe_new 的回复:申请共享内存  新进程创建了就往那里注册信息  父进程去那里爱干啥就干啥把 本人新手 ,不明白怎么获得后续的进程句柄 可能我没说清楚啊 ,是这样的B进程是另外一个应用程序的 ,我不清楚它是怎么工作的 ,但是A程序必须在其结束后进行某些工作 ,所以必须要知道B进程(包括其创建的进程)在什么时候停止的 显然B进程一停止A就要做出反应 ,要不B进程刚停下 ,这个程序又被打开了而且还使用如同刚才进程的PID会引发我不想见到的结果

user: user-1
content: 申请共享内存  新进程创建了就往那里注册信息  父进程去那里爱干啥就干啥把
user-0 提问: 有没有谁有安装后不出问题的vc6.0 啊、、

回复:
user: user-0
content: 引用 7 楼 Yuiliet 的回复:VC6.0++没有32和64位之分  一般win8不兼容VC6.0  win7使用VC6.0会有兼容性问题，忽略掉就行了。 如果是win7的问题，就详细点，可以帮你解决  XP不会有问题的 找个好点的资源点下载吧 引用 2 楼 TopBand 的回复:VS2010 比VC6好用多吧?  你出问题的是VC6的中文版吧?  英文版不会出问题的.我试试。。

user: user-1
content: 引用 楼主 u014201928 的回复:初学者，，用vc2010感觉还是难了点，但网上下的vc6.0安装后都出问题，安在64位和32位上都有问题。。。哪个大神给我发个初学者试用的开发环境把 初学者更不应该选VC6了，太老，15年前的东西，而且与当前的C/C++标准格格不入。

user: user-2
content: 如果是学生用的话足以： http://download.csdn.net/detail/zidane_2014/7689689

user: user-3
content: http://download.csdn.net/detail/sagittarius_520/7687323中文版的，我自己就是用的这个。如果说出错的话应该是你环境配置的路径出现了问题。环境路径与你安装VC的路径不一致。

user: user-4
content: VC6.0++没有32和64位之分  一般win8不兼容VC6.0  win7使用VC6.0会有兼容性问题，忽略掉就行了。 如果是win7的问题，就详细点，可以帮你解决  XP不会有问题的 找个好点的资源点下载吧

user: user-5
content: 小一些的话用codeblocks就可以。

user: user-6
content: 我写小程序一般用在线编译器： http://codepad.org/ 和http://ideone.com/

user: user-7
content: VS2010 比VC6好用多吧?  你出问题的是VC6的中文版吧?  英文版不会出问题的.

user: user-8
content: 用 Code::Blocks 吧。。。
user-0 提问: 请教

回复:
user: user-0
content: 嗯，是少了%，真为犯这样愚蠢的错误难过。。。 谢谢哈

user: user-1
content: 少了% 改成这样： fscanf(fp1,"%f",&n);  或者这样： fscanf(fp1,"%lf",&n);
user-0 提问: 我不想要这个程序的某些功能，怎么改？

回复:
user: user-1
content: 删代码

user: user-0
content: [quote=引用 3 楼 fanyue1989 的回复:] 在while(1)里面删除  Key_num=Read_Key();          //读出数据  同时把Key_arrange(Key_num,i); 的Key_num换成你想显示的数字。  没有用哦，还是一样的

user: user-2
content: 在while(1)里面删除  Key_num=Read_Key();          //读出数据  同时把Key_arrange(Key_num,i); 的Key_num换成你想显示的数字。

user: user-3
content: 看懂了就好改了，没看懂就是瞎改。

user: user-4
content: 这个似乎较容易改，只要看懂了就可以。 一段段注释，一段段改。 看不懂的地方说出来，可以帮你说明。
user-0 提问: 新手求帮忙

回复:
user: user-1
content: 输入的要用逗号隔开，因为你的scanf里面是用逗号

user: user-2
content: 输入格式和定义的格式不一致

user: user-3
content: 输入 1,45,5 而不是1 45 5再试试

user: user-4
content: #include <stdio.h> int main() { 	int a,b,c,t; 	printf("intput a,b,c:"); 	scanf("%d,%d,%d",&a,&b,&c); 	if(a<b) 	{ 		t=a; 		a=b; 		b=t; 	} 	if(a<c) 	{ 		t=a; 		a=c; 		c=t; 	} 	if(b<c) 	{ 		t=b; 		b=c; 		c=t; 	} 	printf("%d,%d,%d\n",a,b,c); 	return 0; }   输出：  intput a,b,c:1,45,5 45,5,1   输入需要用逗号隔开，而不是空格。

user: user-5
content: 程序很简单，学会自己分析很重要。 可以跟踪一下，看看在哪里出的问题。 最简单的方法是，在每一步后面加上输出语句，看那一步变的不正常了。 还有就是，如果是VC的环境，F9设置断点，F5调试运行，F10单步跟踪。必须掌握的基本技能。 肯定可以查出问题的所在的。
user-0 提问: C初学者，请问什么前提下可以用递归啊？麻烦说得通俗点，谢谢了

回复:
user: user-1
content: ...这问题问的，实现某算法时不知不觉就考虑了递归的时候用！什么前提用？没具体应用哪来的前提？ 并不是刻意去用的。

user: user-2
content: 引用 楼主 lankun1234 的回复:第一次发帖，我看过有邀请回复，我随便点的，如果打扰到你了，不好意思啊 个人建议是，任何情况下都不应该首先考虑递归  写的时候不容易保证递归的逻辑完整性，出了bug查bug又不好查，而且运行中可能会遭遇内存不足的问题，比如内核空间。并且cpu的执行逻辑是先后顺序的，代码表现上并不贴合这一特性，导致阅读代码费事，反正linux内核代码我是没见过递归

user: user-3
content: 打印二叉树，文件夹中所有文件都可以

user: user-4
content: 引用 4 楼 mujiok2003 的回复:[quote=引用 2 楼 lisong694767315 的回复:] 递归一般具有很好的可读性和可维护性，但是大部分情况下效率都很低。所以如果用非递归不是很复杂的话，就尽量不要用递归。 尾递归一搬于迭代同样高效。 非尾递归都可以改写成尾递归。 非尾递归函数， 注意避免栈溢出就好。 [/quote]+1,没特别要求就别用递归

user: user-5
content: 引用 2 楼 lisong694767315 的回复:递归一般具有很好的可读性和可维护性，但是大部分情况下效率都很低。所以如果用非递归不是很复杂的话，就尽量不要用递归。 尾递归一搬于迭代同样高效。 非尾递归都可以改写成尾递归。 非尾递归函数， 注意避免栈溢出就好。

user: user-6
content: 支持2楼，能写成迭代形式就写成迭代。 递归效率低，甚至会出现栈溢出的情况

user: user-7
content: 引用 15 楼 cfvmario 的回复:[quote=引用 12 楼 zjq9931 的回复:] [quote=引用 11 楼 zjq9931 的回复:] 感觉这种情况下要用。递归。 遍历文件夹下的所有子文件夹。 补充一下，除了递归其他的方法似乎都不太好。[/quote] 用队列不就行了。一开始队列就放一个根目录，每次都是访问队列头指向的目录，然后把所有子目录压进队列[/quote] 队列是可以，但这里是C语言区，所以，我就说这个要递归了^_^ 队列是模拟了递归压栈出栈的操作^_^，而且更节省资源消耗。 换成循环的资源消耗就少了。

user: user-8
content: 应该这么说，比如上面说的子目录问题，是“思想上”使用递归。 递归应该尽量只在思想中用。很多算法思想是递归的，但在具体实现的时候尽量使用其非递归方式。 当然，个别问题确实不容易转换成非递归，比如汉诺塔。。汉诺塔有循环算法，但是那循环算法和递归的思想基本可以说没关系，而且一般人极难想到。。那另当别论

user: user-8
content: 引用 12 楼 zjq9931 的回复:[quote=引用 11 楼 zjq9931 的回复:] 感觉这种情况下要用。递归。 遍历文件夹下的所有子文件夹。 补充一下，除了递归其他的方法似乎都不太好。[/quote] 用队列不就行了。一开始队列就放一个根目录，每次都是访问队列头指向的目录，然后把所有子目录压进队列

user: user-9
content: 在一个文件目录下面搜索一个文件，基本上会想到用递归去遍历这些目录

user: user-10
content: 搞算法研究的时候可以用递归 对性能无要求，内存无限大可以用递归 一般少用递归，出了问题你都不知道找谁哭去

user: user-7
content: 引用 11 楼 zjq9931 的回复:感觉这种情况下要用。递归。 遍历文件夹下的所有子文件夹。 补充一下，除了递归其他的方法似乎都不太好。

user: user-7
content: 感觉这种情况下要用。递归。 遍历文件夹下的所有子文件夹。

user: user-11
content: 数据结构在心中，看到要实现的功能时，就会想到用什么来实现~我觉得一般是特别清晰特别了解才会用吧。

user: user-12
content: 递归一般具有很好的可读性和可维护性，但是大部分情况下效率都很低。所以如果用非递归不是很复杂的话，就尽量不要用递归。

user: user-13
content: 不熟悉的情况下完全不用

user: user-14
content: 能使用数学归纳法的，可以用递归
user-0 提问: 文件指针使用问题

回复:
user: user-1
content: 你要往文件写东西，为什么以只读的方式打开文件呢？应该以w或w+模式打开：   fp=fopen("E:\\nihao.txt","w");

user: user-0
content: 改好了，但变量窗口中fp指针中ptr，cnt会显示错误指针
user-0 提问: 关于结构体的初始化问题

回复:
user: user-0
content: 引用 2 楼 whw_sirius 的回复:GPIO_Pin_3 和 GPIO_Pin_6应该是定义的宏吧， 全局变量没有初始化，自动初始化为零，这句就是个 位操作，应该是将3位和6位设为1的赋值操作。  的确，经过上面那位的讲解明白了 是将第三引脚和第六引脚的地址值进行或运算后作为初始化参数代入初始化函数。  但还是没搞懂为什么或一下就可以把这两个引脚都初始化了。。。感谢！我再看看底层

user: user-1
content: GPIO_Pin_3 和 GPIO_Pin_6应该是定义的宏吧， 全局变量没有初始化，自动初始化为零，这句就是个 位操作，应该是将3位和6位设为1的赋值操作。

user: user-2
content: GPIO_Pin_3 | GPIO_Pin_6应该是按位或吧
user-0 提问: 关于内存池感觉网上资料好乱，内存分配和释放的问题，求大神指教（分不多了）

回复:
user: user-1
content: 这是一个内存池，仅供参考

user: user-0

user: user-0
content: 引用 4 楼 truexf 的回复:个人认为，内存池不存在通用解决方案，他只适用于特定的应用环境。这些环境都有对内存频繁申请和释放的情况。 而且用malloc处理做内存池也不一定靠谱，因为malloc分配的是虚拟内存，操作系统啥时候把他交换到磁盘你不能控制。 而应该用操作系统本身提供的api函数，来管理内存池，以便你可以控制内存不被交换出去。  各方实现c运行库的malloc和free函数本身就支持了一定的内存池功能。我个人倾向于直接增加内存条简单有效低成本来解决问题。这类情况一般多是64位的服务器系统。  不合理的内存池方案，导致物理内存块长期锁定，反而可能造成更大的内存碎片。操作系统一定比ring3层的应用程序更懂硬件，更懂内存管理。谢谢啊，想练练手，可能是好高骛远了。。。。基础有待加强

user: user-2
content: 个人认为，内存池不存在通用解决方案，他只适用于特定的应用环境。这些环境都有对内存频繁申请和释放的情况。 而且用malloc处理做内存池也不一定靠谱，因为malloc分配的是虚拟内存，操作系统啥时候把他交换到磁盘你不能控制。 而应该用操作系统本身提供的api函数，来管理内存池，以便你可以控制内存不被交换出去。  各方实现c运行库的malloc和free函数本身就支持了一定的内存池功能。我个人倾向于直接增加内存条简单有效低成本来解决问题。这类情况一般多是64位的服务器系统。  不合理的内存池方案，导致物理内存块长期锁定，反而可能造成更大的内存碎片。操作系统一定比ring3层的应用程序更懂硬件，更懂内存管理。

user: user-0
content: 人真少啊，自己顶

user: user-3
content: 预分配大内存给程序使用 降低在运行的时候频繁跟系统申请内存造成的碎片 影响效能
user-0 提问: 求更快的算法～

回复:
user: user-1
content: 引用 12 楼 lin5161678 的回复:[quote=引用 8 楼 lovesmiles 的回复:] 你这样是不行的，abc不符合，不代表abd不符合，abd如果符合，一定比bcd长。你的算法根本求不到最优解。 abc不符合就是说条件  b+c > a 不成立  而 c比d 大的情况下  b+d >a 绝对不会成立  所以 c后面的任何数字 和ab组合都绝对不可能完成三角形  我这么说你能理解吗?[/quote]  有道理，是我没有考虑清楚。

user: user-2
content: 对于已经逆序的序列 abcdef 你可以测试 abc  可以组成三角形就输出 a+b+c 不行就测试 bcd  可以输出三角形就输出 b+c+d ........ 一直测到def  这是On 复杂度

user: user-3
content: 我理解错了，忘记两边长和不能小于第三边

user: user-1
content: 引用 2 楼 lnetant 的回复:出这题目的是不是脑袋被驴踢了？ 三角形周长=三边之和吧？ 你的输入已经是逆序了吧？ 直接取前三位最大的数字不就可以了？干吗还去计算？  小学数学是体育老师教的？随便三条边就能组成三角形吗？

user: user-4
content: 唉。。2楼小学数学老师。。

user: user-3
content: 排序法 	最差时间分析 	平均时间复杂度 	稳定度 	空间复杂度 冒泡排序 	O(n2) 	O(n2) 	稳定 	O(1) 快速排序 	O(n2) 	O(n*log2n) 	不稳定 	O(log2n)~O(n) 选择排序 	O(n2) 	O(n2) 	稳定 	O(1) 二叉树排序 	O(n2) 	O(n*log2n) 	不一顶 	O(n)  插入排序 	O(n2) 	O(n2) 	稳定 	O(1) 堆排序 	O(n*log2n) 	O(n*log2n) 	不稳定 	O(1) 希尔排序 	O 	O 	不稳定 	O(1)

user: user-3
content: 出这题目的是不是脑袋被驴踢了？ 三角形周长=三边之和吧？ 你的输入已经是逆序了吧？ 直接取前三位最大的数字不就可以了？干吗还去计算？

user: user-5
content: 贪心嘛，可以这样，先排序 假设顺序排序后的数组为array[N] 那么 1. 从数组最后一个元素开始(下标为tail = N - 1) 2. 比较 array[tail - 2] + array[tail - 1] 与 array[tail]  3. 如果前者小于或等于后者，tail--; 重复步骤2 4. 如果前者大于后者，算法完成，array[tail - 2], array[tail - 1], array[tail] 就是结果  排序的复杂度可以做到O(nlogn)，后面这些步骤的复杂度是O(n)

user: user-0
content: 引用 13 楼 lin5161678 的回复:[quote=引用 11 楼 benma378 的回复:] 麻烦看一下第二种算法，貌似有点类似。但时间复杂度不是O（n）这样的算法是O(n)的   其实就是扫描了数组元素个数-2  不管数组规模如何  这个算法都是 N-2 次循环 [/quote]  好像还真是，我这里没有细想了。。。。  加上数组排序需要nlogn  那我就找到了合适的算法了  谢谢！

user: user-2
content: 引用 11 楼 benma378 的回复:麻烦看一下第二种算法，貌似有点类似。但时间复杂度不是O（n）这样的算法是O(n)的   其实就是扫描了数组元素个数-2  不管数组规模如何  这个算法都是 N-2 次循环

user: user-2
content: 引用 8 楼 lovesmiles 的回复:你这样是不行的，abc不符合，不代表abd不符合，abd如果符合，一定比bcd长。你的算法根本求不到最优解。 abc不符合就是说条件  b+c > a 不成立  而 c比d 大的情况下  b+d >a 绝对不会成立  所以 c后面的任何数字 和ab组合都绝对不可能完成三角形  我这么说你能理解吗?

user: user-0
content: 引用 7 楼 lin5161678 的回复:对于已经逆序的序列 abcdef 你可以测试 abc  可以组成三角形就输出 a+b+c 不行就测试 bcd  可以输出三角形就输出 b+c+d ........ 一直测到def  这是On 复杂度   麻烦看一下第二种算法，貌似有点类似。但时间复杂度不是O（n）

user: user-0
content: 引用 1 楼 shucheng36 的回复:贪心嘛，可以这样，先排序 假设顺序排序后的数组为array[N] 那么 1. 从数组最后一个元素开始(下标为tail = N - 1) 2. 比较 array[tail - 2] + array[tail - 1] 与 array[tail]  3. 如果前者小于或等于后者，tail--; 重复步骤2 4. 如果前者大于后者，算法完成，array[tail - 2], array[tail - 1], array[tail] 就是结果  排序的复杂度可以做到O(nlogn)，后面这些步骤的复杂度是O(n)  你的思路感觉跟我的一样，这样的算法复杂度不是O（n）吧。。。。

user: user-6
content: 引用 1 楼 shucheng36 的回复:贪心嘛，可以这样，先排序 假设顺序排序后的数组为array[N] 那么 1. 从数组最后一个元素开始(下标为tail = N - 1) 2. 比较 array[tail - 2] + array[tail - 1] 与 array[tail]  3. 如果前者小于或等于后者，tail--; 重复步骤2 4. 如果前者大于后者，算法完成，array[tail - 2], array[tail - 1], array[tail] 就是结果  排序的复杂度可以做到O(nlogn)，后面这些步骤的复杂度是O(n)二楼的数学老师。。。

user: user-1
content: 引用 7 楼 lin5161678 的回复:对于已经逆序的序列 abcdef 你可以测试 abc  可以组成三角形就输出 a+b+c 不行就测试 bcd  可以输出三角形就输出 b+c+d ........ 一直测到def  这是On 复杂度 你这样是不行的，abc不符合，不代表abd不符合，abd如果符合，一定比bcd长。你的算法根本求不到最优解。
user-0 提问: 算数运算符

回复:
user: user-1
content: 后半句不用管  前半句，你把除数和被除数正负号都试试，就4种情况，很容易的  具体机子具体说，你也不用管，在你机子上正常就行，一般问题不大

user: user-2
content: 不管是取决于机器架构还是编译器，总之一句话，结果不确定。 理论上讲，这个可以和机器架构有关，比如不同CPU的div指令在有负数的时候行为可以不同。实际应该主要是取决于编译器。 不过纠结这个没什么意义吧。总之结果不确定，编程的时候不要依赖于它的结果就行了

user: user-3
content: 路过。。。

user: user-4
content: 引用 楼主 moyac 的回复:　　“在有负操作数的情况下,整数除法截取的方向及取模运算结果的符号取决于具体机器的，这和处理上溢和下溢的情况是一样的。”——取自《The C programming Language》。 　　能详细地解释一下这段话吗，不太明白。 取决于具体机器，这个感觉有点不合适的，个人感觉应当是区别于具体的操作系统，编译器。 因为64位的机器也可以运行32位的编译器。当然我说的是应用级别的软件。不是系统级别的软件。 完全个人感觉，请高手指正。
user-0 提问: 小白求助啊 为什么结果一直是1..

回复:
user: user-1
content: 输入double变量时，必须使用%lf，输出时倒是可以用%f，不过在这里最好不要让输入变量是浮点数（因为存储不精确），可以改用int变量，示例如下 # include <stdio.h>  int main(void) { 	int n, i; 	double sum = 0.0, sign = 1.0; 	printf("please enter a number:\n"); 	scanf("%d", &n);   	for (i=1; i<=n; i++) 	{ 		sum += sign/i; 		sign = -sign; 	} 	printf("the sum=%f\n",sum); 	 	return 0; }

user: user-2
content: 引用 2 楼 shayne000 的回复:想输入n，得出1-1/2+1/3-1/4+1/5........1/n #include<iostream> #include<math.h> using namespace std;  int main() {     int n;     cout << "input n = " ;     cin >> n;     cout << endl;     int i = 1;     double sum = 0.0;     while (i <= n)     {           sum = sum + pow(-1, i + 1)/i;           i++;     }     cout << "The sum is:" << sum << endl;     system("pause");     return 0; }

user: user-3
content: #include<stdio.h> int main() { 	double a,b,c,d,sum; 	printf("please enter a number:\n"); 	scanf("%lf",&c);        //此处改为%lf 	a=1.0;b=1.0;sum=1.0; 	while(a<c) 	{ 		a=a+1; 		b=-b; 		d=b/a; 		sum=sum+d; 	} 	printf("the sum=%f\n",sum); 	return 0; }

user: user-4
content: 引用 5 楼 Falleyes 的回复:好吧，现在图片能看了，改scanf语句： scanf("%lf",&c); 如果你使用float精度，用%f没问题，double的话，要用lf%  ++

user: user-5
content: scanf的格式问题,使用%lf

user: user-6
content: 好吧，现在图片能看了，改scanf语句： scanf("%lf",&c); 如果你使用float精度，用%f没问题，double的话，要用lf%

user: user-7
content: int main() { 	double sum = 0; 	int i,n; 	scanf("%d",&n); 	for(i=1; i<=n; ++i) 	{ 		if(i%2 == 0) 			sum -= (double)1/i; 		else 			sum += (double)1/i; 	} 	printf("The sum is: %f\n", sum); 	return 0; }

user: user-6
content: 图片看不了，估计问题在数据类型。 两个整形相除的结果是把小数点后全部去掉啊，比如1/2是0. 你应该这么写，比如n是分母，依次递增，那你应该改成1.0/n，或者1/(double)n.

user: user-0
content: 谢谢各位啦

user: user-0
content: 想输入n，得出1-1/2+1/3-1/4+1/5........1/n

user: user-0
content: 为什么结果一直是1 啊
user-0 提问: 如何清空标准输入流？

回复:
user: user-1
content: #include <stdio.h> #include <windows.h> #include <conio.h> int main() {   	Sleep(5000); 	while(_kbhit()) 	{ 		_getch(); 	}  	_getch();     return 0; }   kbhit和getch的下划线是否添加，取决于你的编译器。

user: user-2
content: getch不是标准输出入函数，不想按回车的，system("pause")吧...

user: user-3
content: 引用 3 楼 user-4 的回复:cin.clear(); cin.sync(); 可以结贴了。c的好不好。。。

user: user-4
content: cin.clear(); cin.sync(); 可以结贴了。

user: user-0
content: 引用 1 楼 zxh707wk 的回复:第三个注释是这个while((ch=getchar())!='\n'&&ch!=EOF);  不要纠结这个 我调试代码的时候也是写的\n 为了发这个帖子 我在网上现粘贴的！

user: user-3
content: 第三个注释是这个while((ch=getchar())!='\n'&&ch!=EOF);
user-0 提问: 堆排序 比 快排 快很多？

回复:
user: user-1
content: 引用 6 楼 lisong694767315 的回复:[quote=引用 4 楼 Falleyes 的回复:] 二楼的表就很说明问题，快排是不稳定排序，而堆排序是稳定排序。   堆排序是不稳定的[/quote]  哦，没有表述清楚，是性能稳定。

user: user-2
content: 堆排序 比 快排 快很多？ 如果单单说那个更快一些这个 不能直接比较的。  堆排序性能稳定，但是操作指令跟排序处理时间开消要比快速排序高， 虽然 时间复杂度 堆排序 nlogn  快排 n*n  所以一般数据量小 建议用快排， 数据量大了  用堆排， 楼主可以了解下 stl sort 函数的机制，  或者是看看 算法导论线性排序。

user: user-3
content: 引用 4 楼 Falleyes 的回复:二楼的表就很说明问题，快排是不稳定排序，而堆排序是稳定排序。   堆排序是不稳定的

user: user-4
content: 楼上说了这么多，不解释了。。。

user: user-1
content: 二楼的表就很说明问题，快排是不稳定排序，而堆排序是稳定排序。

user: user-5
content: T(N) =O(f(n)) 的含义是 T(N) <= c * f(n);  快排 ,常数项c比较小。  相对的，堆排序常数项c比较大。 所以，实用上，块排比堆排序要快。  理论上：  引用 1 楼 lisong694767315 的回复:堆排序 最好情况、平均情况、最坏情况都是nlogn； 快排 最好情况、平均情况为nlogn，最坏情况为n^2； ++

user: user-6

user: user-3
content: 堆排序 最好情况、平均情况、最坏情况都是nlogn； 快排 最好情况、平均情况为nlogn，最坏情况为n^2；
user-0 提问: //1、输入10个整数，将其中最小的数与第一个数对换，把最大的数和最后一个数对换，写三个函数:1.输入10个数,2.进行处理.3输出10个数 //输入10个数

回复:
user: user-0
content: 谢谢楼上回答

user: user-1
content: void solveArr(int *p, int count){     for (int i = 0; i< count; i++) {         int min = *p;         int temp = 0,index = 0;         if (min > *(p + i)) {             min = *(p + i);  //这里并不是最小值，而是比min小的值             index = i;             temp = *p;      //存储第一个元素             *p = min;       //将最小数赋予第一位上             *(p + index) = temp;//将第一个数赋予最小值所在的位置.         }     }     for (int j = 0; j < count; j++) {         int max = *p;         int temp1 = 0,index1 = 0;         if (max < *(p + j)) {             max = *(p + j);//这里也不是最大值，而是比max大的值             index1 = j;  //存储最大值所在的下标             temp1 = *(p + 9);  //存储最后一个元素             *(p + count - 1) = max;//将最大数赋予最后一个位置             *(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置         }     } }  所谓最小值最大值，是你循环完整个数组得到的结果。你在循环中只要找到比暂时的结果（max，min）就认为是最小值或者最大值进行交换，这是不对的。你的顺序应该这样调： void solveArr(int *p, int count){ 	int min = *p; 	int temp = 0, index = 0; 	for (int i = 0; i< count; i++) { 		 		if (min > *(p + i)) { 			min = *(p + i);  //找出最小值 			index = i;			 		} 	} 	temp = *p;      //存储第一个元素 	*p = min;       //将最小数赋予第一位上 	*(p + index) = temp;//将第一个数赋予最小值所在的位置.  	int max = *p; 	int temp1 = 0, index1 = 0; 	for (int j = 0; j < count; j++) {		 		if (max < *(p + j)) { 			max = *(p + j);//找出最大值 			index1 = j;  //存储最大值所在的下标 		} 	} 	temp1 = *(p + 9);  //存储最后一个元素 	*(p + count - 1) = max;//将最大数赋予最后一个位置 	*(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置 }  顺便给你一个选择排序的代码，其实就是这个题目要求的拓展： #include<stdio.h> #include<limits.h>  int* find_max(int* start, int sum){ 	int max = 0, *p = start; 	for (int i = 0; i < sum; ++i){ 		p = (max < *(start + i) ? start + i : p); 		max = (max < *(start + i) ? *(start + i) : max); 	} 	return p; }  int* find_min(int* start, int sum){ 	int min = INT_MAX, *p = start; 	for (int i = 0; i < sum; ++i){ 		p = (min > *(start + i) ? start + i : p); 		min = (min>*(start + i) ? *(start + i) : min); 	} 	return p; }  void exchange(int* a, int* b){ 	int temp = *a; 	*a = *b; 	*b = temp; }  void sort(int* a, int count){ 	for (int i = 0, j = count - 1; i < j; ++i, --j){ 		exchange(find_min(a + i, count - i * 2), a + i); 		exchange(find_max(a + i, count - i * 2), a + j); 	} }  int main(){ 	int a[] = { 2, 1, 3, 4, 5, 6, 7, 8, 10, 9 }; 	sort(a, 10); 	for (int i = 0; i < 10; ++i) 		printf("%d ", a[i]); }

user: user-2
content: 把事情分开做  第一找出最小值 第二交换最小值到第一个位置  最大值同样分开做即可  不过，如果最大最小值位置有重叠，交换的结果哦，，不能确定是否正确
user-0 提问: 关于nginx内存池实现的一个疑惑(可能真是bug)

回复:
user: user-1
content: 考虑到nginx不是给别人用的库， 如果nginx本身没有泄露的话， 不算问题吧。

user: user-0
content: 昨天想了下，这里加这个偏移量是因为后续的pool只需要pool_data_t中信息，后续的管理信息是不需要的，只有第一块pool是需要整个pool_t的。
user-0 提问: C语言问题  变量声明在函数名和大括号（“{”）间，能编译通过，求解释

回复:
user: user-1
content: C 语言，还支持这种形式的函数定义。 C++ 就不一定支持了 如果需要编译这种函数 把他放在 .c文件里，参与编译。

user: user-2
content: 引用 9 楼 shenmafuyunnan 的回复:我想知道我的第二个问题，就是变量的定义必须定义在函数体的开头，也是因为这个代码比较早的原因吗?  这是你所用编译器不支持C99的原因

user: user-3
content: 涨姿势...

user: user-4
content: 确实是很老了。最新的编译器应该都支持的。

user: user-1
content: 叫做 K&R  式样的函数定义

user: user-0
content: 谢谢大神的回答，这是一个10年前开始的项目了，一直升级沿用到现在，而且是日本一线厂商的智能蓝光播放器里的代码，不过貌似这一段没用了，但是没有删。 我想知道我的第二个问题，就是变量的定义必须定义在函数体的开头，也是因为这个代码比较早的原因吗?

user: user-5
content: 涨知识了。。。。。。。。。

user: user-6
content: C程序设计语言 K&R C

user: user-7

user: user-8
content: 这得多老的代码了

user: user-1
content: 这是老式函数定义  叫做 K&C 式样的函数定义 具体做法是 函数参数表里只写参数名 参数在参数表的小括号后面定义（声明） ； 参数声明语句(若干个)，有语句结束符分号； 然后才是函数体 static//函数存储类型 int     //函数（返回值）类型  mem_write(b , in , inl) //函数头 参数表的小括号里，只有参数名字。 BIO *b;   //一个结构体指针  //参数 b的声明 char *in;//参数 in的声明 int inl;//参数 inl的声明 {//函数体开始的大括号    ...   //具体就不写了，用到了上面的变量 }//函数体结束的大括号
user-0 提问: 帮分析一下，这个程序的结果是怎么来的

回复:
user: user-1
content: 其实这个和你编译时变量内存分配有关，  很有可能是 n[2] 数组空间后紧接着分配了 i 或 j 的空间，所以循环完成后， i，j 都为2， 所以输出的其实是 i 或 j 如果编译器编译规则不一样，或者说你把 i和j 定义放在数组之前， 结果应该就不一样了。

user: user-2
content: 数组输出明显越界

user: user-3
content: 由此可见，结果必须是一个随机数，但是由于在当时你的n[1]的下一个内存单元存的数恰好是2，所以打出来是2

user: user-4
content: “不确定”去看置顶帖；随机 是一个“确定”的规律。 引用 4 楼 lovesmiles 的回复:[quote=引用 2 楼 taodm 的回复:] 谁跟你说的是随机数，离那货远点。 是不确定值。   抛开内存访问错误这种可能， 不确定值和随机数有什么区别？[/quote]

user: user-5
content: 引用 2 楼 taodm 的回复:谁跟你说的是随机数，离那货远点。 是不确定值。   抛开内存访问错误这种可能， 不确定值和随机数有什么区别？

user: user-6
content: int main() {  	int n[2]={0},i,j,k=2; 	for(i=0;i<k;i++) 		for(j=0;j<k;j++) 			n[j]=n[i]+1; 	printf("%d\n",n[k]); 	return 0; }   我的输出是4195392，是越界了啊

user: user-4
content: 谁跟你说的是随机数，离那货远点。 是不确定值。

user: user-7
content: 是随机数，gcc编译表示为0
user-0 提问: fopen()打开文件失败

回复:
user: user-1
content: 引用 5 楼 user-10 的回复:[quote=引用 3 楼 user-10 的回复:] fgets会在读入的字符串最后加上一个\n，它也包括到文件名里面了。从你的输出就能看出来，两个引号不在同一行 更正一下，这个\n也不能说是fgets加上的，其实就是你输入一行之后敲的那个回车，他也被fgets读到字符串里面了。[/quote]  这就是问题了

user: user-2
content: 引用 14 楼 myclass242 的回复: if((fp=fopen("nuhv","rb"))==NULL) {        fprintf(stderr,"打开文件\"%s\"错误\n","nulv");        exit(1); }  我这样改还是错误 你这样改的话，你的当前目录下有nuhv这个文件么。。。。要打开成功，要保证你fopen的第一个参数是正确的路径+文件名

user: user-3
content: 你自己看看输出的语句 打开xxx 失败。  输出总是分成二行，你难道没有觉得奇怪？这个换行符是怎么来的？

user: user-4
content: 引用 12 楼 zxh707wk 的回复:引用 9 楼 u011728480 的回复:很乐意看到你在Linux下工作，。。。。。。。。简单的文件名称，为啥你要使用的输入方式那么复杂。。。。。。。。。就一个char 数组，加上普通的输入就可以额。。。。。。。。如果输入的文件名太长，可能会越界       这个完全有办法判断的。。。。。。对于越界行为。。。。。。。

user: user-0
content: 不是我想这么写，这是《c primer plus》第十三章程序清单13.5里的例题程序。

user: user-5
content: 楼主估计是闲着蛋疼才这么写。。。。

user: user-0
content: if((fp=fopen("nuhv","rb"))==NULL) {        fprintf(stderr,"打开文件\"%s\"错误\n","nulv");        exit(1); }  我这样改还是错误

user: user-6
content: 引用 8 楼 blueroger07 的回复:可以这样改,在第12行后面加上 file[strlen(file)-1] = 0;+1

user: user-6
content: 引用 9 楼 u011728480 的回复:很乐意看到你在Linux下工作，。。。。。。。。简单的文件名称，为啥你要使用的输入方式那么复杂。。。。。。。。。就一个char 数组，加上普通的输入就可以额。。。。。。。。如果输入的文件名太长，可能会越界

user: user-6
content: 引用 4 楼 lisong694767315 的回复:因为用fgets读取字符串，会自动在字符串后添加'\0'结束符，假设文件名为test.h，则读取后的字符串为“test.h\0”，所以打开文件会失败！  而用scanf读取就是“test.h”。是'\n'，不是'\0'

user: user-4
content: 很乐意看到你在Linux下工作，。。。。。。。。简单的文件名称，为啥你要使用的输入方式那么复杂。。。。。。。。。就一个char 数组，加上普通的输入就可以额。。。。。。。。

user: user-7
content: 可以这样改,在第12行后面加上 file[strlen(file)-1] = 0;

user: user-8
content: 在当前目录下打开文件要用./

user: user-9
content: 哦，3楼说的是对的，最后自动加的是‘\n’换行符。

user: user-10
content: 引用 3 楼 user-10 的回复:fgets会在读入的字符串最后加上一个\n，它也包括到文件名里面了。从你的输出就能看出来，两个引号不在同一行 更正一下，这个\n也不能说是fgets加上的，其实就是你输入一行之后敲的那个回车，他也被fgets读到字符串里面了。

user: user-9
content: 因为用fgets读取字符串，会自动在字符串后添加'\0'结束符，假设文件名为test.h，则读取后的字符串为“test.h\0”，所以打开文件会失败！  而用scanf读取就是“test.h”。

user: user-10
content: fgets会在读入的字符串最后加上一个\n，它也包括到文件名里面了。从你的输出就能看出来，两个引号不在同一行

user: user-0
content: 能说说这样修改的理由吗？还有我的string.h头文件里好像没有bezero()函数

user: user-9
content: 用scanf代替fgets：  scanf("%s", file);  文件名字符数组最好先置0：  char file[SLEN]; bzero(file,SLEN);  // 头文件#include<string.h>
user-0 提问: c知识

回复:
user: user-1
content: 强烈支持新手VC++6.0，这个可是经典中的经典

user: user-2
content: 有个c语言编译器就行了，如vc6.0

user: user-3
content: 支持楼上的。。

user: user-4
content: 直接下载一个较新商业化的新的编译器玩玩吧， 不要总是从0开始。   visual studio express 2013很不错。

user: user-5
content: 为什么我觉得C FREE这么好呐

user: user-6
content: 如果只是初学的话在windows（32位系统）上可以用wintc学算法 linux上用gcc，不过有IDE可以下载的（32位/64位）

user: user-7
content: 引用 3 楼 lisong694767315 的回复:Windows下，建议楼主安装Dev-C++或者Code::Blocks，这两个集成开发环境比较小巧，适合初学； Linux下，建议使用vim编辑器编写代码，然后用gcc编译。 顶！

user: user-8
content: 楼上都说完了！！！

user: user-9
content: Windows下，建议楼主安装Dev-C++或者Code::Blocks，这两个集成开发环境比较小巧，适合初学； Linux下，建议使用vim编辑器编写代码，然后用gcc编译。

user: user-10
content: 建议楼主下载一个winTC的软件来玩

user: user-11
content: 只要有一个编译器就可以，学习的话，使用gcc就可以了。
user-0 提问: 求助

回复:
user: user-1
content: 宏定义时多了一个分号 #define Stack_Init_Size1 100; 改为 #define Stack_Init_Size1 100

user: user-2
content: 宏定义的问题，解决办法同楼上， 其实也可以用定义常变量替代宏定义，还有就是最好不要用void main了
user-0 提问: 如何将char[]数组中的数据放进shor int[]的数组中

回复:
user: user-0
content: 引用 6 楼 user-4 的回复:照lz后来补充的意思， 不考虑大小端不同的话4楼ok啊 或者 for (int i=0;i<bytes;i++) s[i]=(short int)pkt_data[i]);  改成 for (int i=0;i<bytes;i+=2) s[i/2]=(short int)pkt_data[i]); 恩恩，的确有大小端的问题，当时我试了一下就发现了，现已解决。不过是memcpy之后解决的，而且只能一个一个的解决，阁下有什么高招？？

user: user-1
content: 直接指针转一下好了啊 short int* psht = (short int*)p; 这样就可以用了啊，而且效率高，就是需要注意，操作的时候这块内存确保不要释放了 等操作完成了后释放

user: user-2
content: short int s[MAXBYTES]; int bytes; bytes=100; for (int i=0;i<bytes;i++) s[i]=(short int)pkt_data[i]);

user: user-2
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-3
content: 直接memcpy进入short int的数组中就可以，如果不是网络接收的数据的话，可以直接拷贝过去的

user: user-4
content: 照lz后来补充的意思， 不考虑大小端不同的话4楼ok啊 或者 for (int i=0;i<bytes;i++) s[i]=(short int)pkt_data[i]);  改成 for (int i=0;i<bytes;i+=2) s[i/2]=(short int)pkt_data[i]);

user: user-2
content: 引用 4 楼 aaa763602742 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] short int s[MAXBYTES]; int bytes; bytes=100; for (int i=0;i<bytes;i++) s[i]=(short int)pkt_data[i]); 赵老师，忘了说了，pkt_data[]的大小为：1012，因为我们定义的一帧数据就是1012个字节。你看我这么做有问题没：short int s[506];memcpy(s, pkt_data, 1012);[/quote] 取决于后续怎样处理s

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:short int s[MAXBYTES]; int bytes; bytes=100; for (int i=0;i<bytes;i++) s[i]=(short int)pkt_data[i]); 赵老师，忘了说了，pkt_data[]的大小为：1012，因为我们定义的一帧数据就是1012个字节。你看我这么做有问题没：short int s[506];memcpy(s, pkt_data, 1012);

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:short int s[MAXBYTES]; int bytes; bytes=100; for (int i=0;i<bytes;i++) s[i]=(short int)pkt_data[i]); 这个貌似不对吧。你这样是吧pkt_data中的一个元素强转成short int 类型，我要的是把pkt_data中的两个元素当成short in[]中的一个元素，比如把pkt_data[i]和pkt_data[i+1]赋值给s[i],是这么个意思。
user-0 提问: 哪儿有破解版的Visual studio 2013下载？

回复:
user: user-1
content: 引用 5 楼 Intel0011 的回复:http://www.itopdog.cn/soft/visualstudio2013.html网页下方有Key http://blog.csdn.net/skykingf/article/details/12883655    真的 太感谢您了

user: user-2
content: http://www.itopdog.cn/soft/visualstudio2013.html网页下方有Key http://blog.csdn.net/skykingf/article/details/12883655

user: user-3
content: Visual studio 2013去官网下啊！

user: user-4
content: VS 系列都没见过破解版，网上随便搜点序列号试用版就变成正式版了。

user: user-5
content: http://pan.baidu.com/s/1qWydFwo 额，直接下载了输入key不就可以了，编程工具不是问题哟

user: user-6
content: 抱歉，还没用，所以不知道

user: user-7
content: 用express版也挺好的，学生用的好像高级版也免费。

user: user-8
content: http://www.itopdog.cn/soft/visualstudio2013.html Visual Studio 2013旗舰版KEY:BWG7X-J98B3-W34RT-33B3R-JVYW9
user-0 提问: C语言源代码分析器

回复:
user: user-1
content: 多点介绍不行么？已经我们老板让我们做过一种给C代码打分的分析器。

user: user-2
content: 自己开发的吗，　挺好的想法

user: user-0
content: 试用就知道了! 让你阅读或分析别人的C源代码更方便! 这是一个不完全的版本, 更多功能正在开发中...

user: user-3
content: 分析代码的什么的？

user: user-4
content: 自己写的编辑工具吗？

user: user-5
content: 分析源代码?没弄懂lz的意思
user-0 提问: Mayday！Mayday！！

回复:
user: user-0
content: [quote=引用 7 楼 zhao4zhong1 的回复:] 看这个帖子标题，我还以为又即将发生一起空难呢！ 那不敢呀，这个月够多了！！

user: user-1
content: 不要和五月天的歌迷吵架。。。。 楼上的 难道是程序员的女朋友来卖萌的？

user: user-2
content: 五月天、五月天

user: user-3
content: C primer plus这本书挺不错的，去网上下载看看，最好买一本

user: user-4
content: 看这个帖子标题，我还以为又即将发生一起空难呢！

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

user: user-0
content: 引用 3 楼 yangyangsnr 的回复:C语言关键字，具体意义，还是先去看下书吧，没记错的话，这些都是印一块的。 是的，但是他就说那是整数变量类型，那是无符号整数变量类型，那些是浮点数变量类型，具体是怎麽用？

user: user-5
content: 引用 2 楼 CCQ2014 的回复:[quote=引用 1 楼 modyaj 的回复:] 把这些字符放到百度中去！！ 是[/quote]

user: user-6
content: C语言关键字，具体意义，还是先去看下书吧，没记错的话，这些都是印一块的。

user: user-0
content: 引用 1 楼 modyaj 的回复:把这些字符放到百度中去！！ 是

user: user-5
content: 把这些字符放到百度中去！！

user: user-7
content: 标题党啊

user: user-8
content: 其实楼主是想表达“黑色星期五”吧。。。。。

user: user-9
content: lz故意的吧

user: user-10
content: 这帖子有点水啊

user: user-11
content: 引用 楼主 CCQ2014 的回复:各位大神如下符号（字母）都是干啥用的？（求详解）   char       short    int    long      long long        float    double    long double C语言的类型关键字 定义类型变量的时候需要用到 C语言中的变量都是需要定义相应的类型的

user: user-12
content: Mayday,这是要打飞机的节奏么？
user-0 提问: 怎么样写点亮一个LED的C程序

回复:
user: user-1
content: 你百度下“ET6202 程序”，有个键盘的程序，可以参考下里面的写命令子程序和写数据子程序。接下来，我也帮不了你了。SORRY 16楼正解

user: user-2

user: user-3
content: 引用 11 楼 Dore_Woo 的回复:[quote=引用 9 楼 lovesmiles 的回复:] 你手上没有例子程序可以用吗？一般上会有一些简单的例子C代码。可以在上面改成你要的功能。或者你上网找一下这个型号的看看有没有例子代码。 就是没有例子程序啊，都不知道怎么搞了，我一个从来没有写过一个程序的新手叫我干这些...[/quote]  keil c 编译器之类的工具总会有吧？你们用什么编译工具？怎么烧板子？这些工具软件配套齐没有？

user: user-0
content: 引用 9 楼 lovesmiles 的回复:你手上没有例子程序可以用吗？一般上会有一些简单的例子C代码。可以在上面改成你要的功能。或者你上网找一下这个型号的看看有没有例子代码。 就是没有例子程序啊，都不知道怎么搞了，我一个从来没有写过一个程序的新手叫我干这些...

user: user-4
content: 共阴极led高电平有效

user: user-3
content: 你手上没有例子程序可以用吗？一般上会有一些简单的例子C代码。可以在上面改成你要的功能。或者你上网找一下这个型号的看看有没有例子代码。

user: user-0
content: 引用 4 楼 cyd54454 的回复:1.芯片手册里找到控制寄存器，数据寄存器的地址，看看怎么设置这些寄存器。2.原理图上找到led对应的引脚，看看点亮是需要高电平还是低电平。3.设置控制寄存器，往数据寄存器对应的位写1或0。完成了   它没有写寄存器的地址

user: user-5
content: 拿引脚控制就行了，你买板子的话应该有教程

user: user-6
content: 你百度下“ET6202 程序”，有个键盘的程序，可以参考下里面的写命令子程序和写数据子程序。接下来，我也帮不了你了。SORRY

user: user-0
content: 引用 14 楼 cyd54454 的回复:仔细看看给你的手册，工具书，我没弄过这个，但应该都是相通的。  它就是一个驱动ic吧，没有给头文件哦，我好像找到地址了，但是不知道怎么看，你知道怎么看吗？

user: user-6
content: 仔细看看给你的手册，工具书，我没弄过这个，但应该都是相通的。

user: user-6
content: 引用 8 楼 Dore_Woo 的回复:[quote=引用 4 楼 cyd54454 的回复:] 1.芯片手册里找到控制寄存器，数据寄存器的地址，看看怎么设置这些寄存器。2.原理图上找到led对应的引脚，看看点亮是需要高电平还是低电平。3.设置控制寄存器，往数据寄存器对应的位写1或0。完成了  它没有写寄存器的地址[/quote] 那板子供应商应该提供了一个头文件，在头文件里已经定义好了的，你找找看具体的名字，这名字应该就是管脚名。

user: user-7
content: 单片机吧。。。。。请把板子图贴出来。。。。。。

user: user-8
content: 这个一般要有实验板  是单片机吧？ 找芯片手册看下 对应高低电平 其实简单的程序汇编写也行

user: user-3
content: 引用 4 楼 cyd54454 的回复:1.芯片手册里找到控制寄存器，数据寄存器的地址，看看怎么设置这些寄存器。2.原理图上找到led对应的引脚，看看点亮是需要高电平还是低电平。3.设置控制寄存器，往数据寄存器对应的位写1或0。完成了  +10086找到led灯对应的引脚。找芯片手册，在这个引脚输出电平。led就亮了

user: user-6
content: 1.芯片手册里找到控制寄存器，数据寄存器的地址，看看怎么设置这些寄存器。2.原理图上找到led对应的引脚，看看点亮是需要高电平还是低电平。3.设置控制寄存器，往数据寄存器对应的位写1或0。完成了

user: user-9
content: 引用 楼主 Dore_Woo 的回复:目前手里有一个LED driver 电路板及电路图，怎么样去点亮这个LED，输出的线有led-cs；led-clk；led-dat；vdd；gnd； 该怎么下手写这个程序，求大神指点 嵌入式硬件方面不太懂。。。。

user: user-10
content: cs clk gnd 这些代表什么意思，先弄明白了   然后编程是很简单的  就是一个入口main 函数，里面控制这些输出信号就行了

user: user-10
content: 你需要烧写一个程序到这个板子上
user-0 提问: 文件读取

回复:
user: user-1
content: 给你写了一个现成的，拿去用吧 #include<stdio.h> #include<stdlib.h> #include<string.h> #define LEN 40 int main(int argc,char *argv[]) {         FILE *in,*out;         int ch;         char name[LEN];         int count=0;         if(argc<2)              //检查命令行参数         {                 fprintf(stderr,"Usage:%s Filename\n",argv[0]);                 getchar();                 exit(1);         }         if((in=fopen(argv[1],"r"))==NULL)         {                 fprintf(stderr,"打开文件\"%s\"失败\n",argv[1]);                 getchar();                 exit(2);         }         strcpy(name,argv[1]);         strcat(name,".B");            //生成一个后缀为.B的新文件名         if((out=fopen(name,"w+"))==NULL)         {                 fprintf(stderr,"打开文件\"%s\"失败\n",name);                 getchar();                 exit(3);         }         while((ch=getc(in))!=EOF)               //         {                 if(ch>=0 && ch<= 9)//提取数字输出                 {                         putc(ch,out);                 }         }                  if(fclose(in)!=0||fclose(out)!=0)         {                 fprintf(stderr,"关闭文件\"%s\"或\"%s\"失败\n",argv[1],name);                 getchar();                 exit(4);         }         return 0; }

user: user-2
content: 1.fopen打开A文件。 2.fgetc读取文件的一个字符 3.判断是否为数字，是则写入B文件，不是continue  4.循环2,直到读取到EOF。 gcc编译OK

user: user-3
content: 引用 1 楼 user-4 的回复:vim不会编译vim只会编辑

user: user-4
content: vim不会编译
user-0 提问: 用VC6.0调试c语言代码，碰到输入输出语句会弹出窗口，然后崩溃。。。

回复:
user: user-0
content: 因为如果用单步进入的话，就会进入到scanf函数的内部，所以崩溃了

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-2
content: 单步调试用f10 不要用f11  功能自己查。

user: user-3
content: 碰到过类似的，请楼主检查一下你的参数类型对不，比如scanf中的&

user: user-4
content: 引用 2 楼 Zidane_2014 的回复:个人建议：路径尽量不要使用中文。+1

user: user-5
content: 个人建议：路径尽量不要使用中文。

user: user-6
content: 路径设置问题  你在option里 env里找找，应该是有工程路径没设置对，导致这个文件没有找到
user-0 提问: 文件I/O函数

回复:
user: user-1
content: 指针到结尾了，除非你重新打开，或者使用fseek让指针再指向开始位置

user: user-2
content: 引用 1 楼 lovesmiles 的回复:你的in和out已经移到文件的末节了，要把它移到文件头，加上下面红色的二句  	fseek(out,0,SEEK_SET); 	while((ch=getc(out))!=EOF)              //打印文件内容 	{ 		putc(ch,stdout); 	} 	fseek(in,0,SEEK_SET); 	 while((ch=getc(in))!=EOF) 		 putc(ch,stdout); 指针到了末尾

user: user-3
content: 38行之前加 fseek(out,0L,0);  42行之前加 fseek(in,0L,0);  原因么，你自己琢磨一下，呵呵~~~

user: user-4
content: 你的in和out已经移到文件的末节了，要把它移到文件头，加上下面红色的二句  	fseek(out,0,SEEK_SET); 	while((ch=getc(out))!=EOF)              //打印文件内容 	{ 		putc(ch,stdout); 	} 	fseek(in,0,SEEK_SET); 	 while((ch=getc(in))!=EOF) 		 putc(ch,stdout);
user-0 提问: 【菜鸟贴】一个宏定义，在两个c文件都要用到。怎么办？

回复:
user: user-0
content: 引用 1 楼 Cabbage_c 的回复:你这样描述谁知道啊，理论上这样是可行的，肯定是你中间出了什么问题。果然，解决了，感谢！

user: user-1
content: 既然 是 宏定义 那么 只需要在 一个 C的头文件里面 定义 即可。  其他文件 只需要 引用 这个 头文件   而后 用 这个 宏即可

user: user-2
content: 你这样描述谁知道啊，理论上这样是可行的，肯定是你中间出了什么问题。
user-0 提问: keil

回复:
user: user-0
content: 你们都是大神好吗，我坑了

user: user-1
content: 做事做的脑袋快爆了，没事上来打打酱油，没想到碰到了倒霉的LZ

user: user-2
content: mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain  mian

user: user-3
content: 不是说你的程序为定义main函数么， 那就看main函数啊，是main main！！！

user: user-4
content: 引用 1 楼 JiMoKuangXiangQu 的回复:mian --> main  楼上正解，楼主键盘敲的太快！

user: user-1
content: mian --> main
user-0 提问: 标准库随机函数怎样使用？

回复:
user: user-1
content: 参考下这个

user: user-2
content: 用百度，google去搜索用法岂不是更快。。。 #include<stdlib.h>/*用到了srand函数，所以要有这个头文件*/ #include<stdio.h> #defineMAX10   intmain(void) {     intnumber[MAX]={0};     inti;     unsignedintseed;     scanf("%d",&seed);/*手动输入种子*/     srand(seed);     for(i=0;i<MAX;i++)     {         number[i]=rand()%100;/*产生100以内的随机整数*/         printf("%d",number[i]);     }     printf("\n");     return0; }

user: user-1
content: 好像是srand产生一个类似key的值，rand根据这个值然后产生随机数，而且每次都是随机的，一次srand，后面rand都可以用。不知道对不对

user: user-3
content: 我记得是直接用rand就行了吧
user-0 提问: 全局变量声明的问题

回复:
user: user-1
content: 学习一下。。。

user: user-2
content: C 和C++ const 全局变量有所不同. C const 全局变量（没有写 static）也是外部变量，不要在头文件里初始化. C++ 似乎没问题，因为缺省 const 是 内部链接，也就是 相当于static const classX x={.....}; 其实C，没有真正的 const 类型的常量， 只有常量表达式,enum 常量，以及#define 常量 ， 而#define 常量仅仅是个替换。 对于C, const变量，例如 const T x=10;仅仅表示不可能通过名字x,直接修改x的值。 const Type * cp=a; 仅仅表示指针cp,不可修改所指向的对象*cp的值;  而C++中 const int x=100; 可以一定程度的，把x 看作常量表达式100. 因此 C++中 const 全局变量，被定义为内部链接。 不同实现文件中，可以有多个const int x=100; 所以可以写在 .h中。

user: user-0
content: 我还发现一个问题，定义的时候用const， 在A.H声明的是也要加const的,但是在别的C文件声明就不需要了

user: user-3
content: A.h extern int g_test;  A.c #include "A.h" int  g_test = 0  B.c #include "A.h" printf("%d",g_test);

user: user-4

user: user-5
content: 类、结构体声明在.h文件中；inline函数声明与定义在.h文件中；一般函数的声明也在.h中，一般函数的定义在.c文件中；声明全局变量必须加extern关键字，在.h文件中  我的智能创意，请支持一下！

user: user-6
content: 加extern关键字就行了

user: user-7
content: 声明全局变量的时候要用extern 在B.h中声明，如果加了extern应该也能编译，但是这样不好，还是放到A.h里面声明更合理。

user: user-7
content: 在哪定义结构体 -- A.h 在哪定义结构体全局变量 -- A.c 在哪声明全局变量 -- A.h, 不要用B.h
user-0 提问: C用Direct Odbc连接Access，怎么存取二进制数据

回复:
user: user-0
content: 您好，谢谢你的回复！在VS上工具菜单下的 连接到数据库 连接到Access后，查看那个字段类型为ole对象，在这个上面显示它的数据类型为：DbType.Binary，这个都显示了二进制类型了。今天又查了点相关资料，可以存二进制数据，但就是不知道怎么存进去和读出来，         InitSqlConn()；         rc = SQLAllocStmt(hDbc,&hStmt); 	rc = SQLPrepare(hStmt, execSql, SQL_NTS);  	/* Run the query and create a record set */ 	rc = SQLExecute(hStmt);  	rc = SQLFreeStmt(hStmt, SQL_DROP);         FreeSqlConn()； execSql为SQLCHAR*类型，放的就是sql语句

user: user-1
content: 短的话直接当整数存，转化一下进制也行。长一点的话直接字符串存，再长一点直接当文件存。 基础不好可以多做一些语法算法题，简单的类似二级、蓝桥杯，会一点算法可以去ACM。 天天写代码写什么这个很难说，您可以去找一些小程序去做，例如:XX管理系统、俄罗斯方块、魂斗罗。 对窗口程序有兴趣可以学一下windows编程，到时候可以做一些界面比较华丽的东西。 对操作系统、驱动程序之类的感兴趣可以去看一下内核书，例如:windows内核原理与实现、linux内核详解，到时候可以试着写一下操作系统内核 对机器人之类的单片机编程有兴趣可以去学C51之类的 C语言内嵌汇编也是一个不错的工具 等等等等，当然您得先把基础打好
user-0 提问: 如何获得程序的返回值？

回复:
user: user-1
content: 命令行？ cmd里运行完了， echo %errorlevel%

user: user-2
content: exec 吧

user: user-3
content: CMD下执行你的程序，然后 echo %errorlevel% 显示的就是你的程序的返回值

user: user-4
content: 这个更明白了

user: user-4
content: 我滴是答案，这个我关注过，你看图片就明白了 编译器会给你出的

user: user-5
content: 如果要获得这个程序的返回值，请单步调试或者在最后设置断点。。。。。。。。。。

user: user-6
content: 另外 同步的 _spawnl 函数，返回值就是子进程的退出码。

user: user-6
content: WIndows GetExitCodeProcess  可以得到子进程的返回值

user: user-7
content: 这个返回值是返回给操作系统的 6L 的方法可行

user: user-8
content: 2楼的答案就很好,我是初学者,这两天正在学函数调用,就是第二种方法,不过如果函数代码多的话,可以分开,一个声明,一个定义,主函数只负责调用就好了.

user: user-9
content: 引用 6 楼 zxh707wk 的回复:把你的那份代码编译成exe文件，命名为temp.exe,然后将这段代码保存为一个新文件，编译运行 #include <stdio.h>  int main() { 	printf("%d\n",system("temp.exe")); 	return 0; } +10086

user: user-10
content: 把你的那份代码编译成exe文件，命名为temp.exe,然后将这段代码保存为一个新文件，编译运行 #include <stdio.h>  int main() { 	printf("%d\n",system("temp.exe")); 	return 0; }

user: user-11
content: 请学习批处理或者shell

user: user-12
content: dos可以用变量errorlevel http://blog.csdn.net/hudashi/article/details/7042237

user: user-0
content: 引用 3 楼 user-12 的回复:linux里面可以用变量$?获取上一个命令的返回值 $ ./a.out $ echo $? 0  额 抱歉 是我没有说明！ 感谢你的回答 我用的是win8,1 编译器是vs2013

user: user-12
content: linux里面可以用变量$?获取上一个命令的返回值 $ ./a.out $ echo $? 0

user: user-0
content: 额 我是想获得程序的返回值。 不是想获得函数的返回值。。。。  引用 1 楼 zxh707wk 的回复:#include <stdio.h> [/u] int fun(int n)[/u] { 	if (n % 2 == 0)         return 2;     else         return 1; }  int main() {     int n;     printf("请输入一个数：");     scanf("%d", &n);     printf("%d\n",fun(n));     return 0; }  这样吗？

user: user-10
content: #include <stdio.h>  int fun(int n) { 	if (n % 2 == 0)         return 2;     else         return 1; }  int main() {     int n;     printf("请输入一个数：");     scanf("%d", &n);     printf("%d\n",fun(n));     return 0; }  这样吗？
user-0 提问: 求两个有序链表序列的交集 运行超时怎么办

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你这个思路完全忽视了“有序”这个重要的条件。 我这个O(n+m)，我没测试，目测应该可以。 void find_inter(Node *pHead1, Node *pHead2) {   int found = 0;   while (pHead1 != NULL && pHead2 != NULL) {     if (pHead1->s < pHead2->s) {       pHead1 = pHead1->next;     } else if (pHead1->s > pHead2->s) {       pHead2 = pHead2->next;     } else {       found = 1;       printf("%d ", pHead1->s);       pHead1 = pHead1->next;       pHead2 = pHead2->next;     }   }   if (!found) {     printf("NULL");   }   printf("\n"); }  引用 1 楼 user-1 的回复:你这个思路完全忽视了“有序”这个重要的条件。 我这个O(n+m)，我没测试，目测应该可以。 void find_inter(Node *pHead1, Node *pHead2) {   int found = 0;   while (pHead1 != NULL && pHead2 != NULL) {     if (pHead1->s < pHead2->s) {       pHead1 = pHead1->next;     } else if (pHead1->s > pHead2->s) {       pHead2 = pHead2->next;     } else {       found = 1;       printf("%d ", pHead1->s);       pHead1 = pHead1->next;       pHead2 = pHead2->next;     }   }   if (!found) {     printf("NULL");   }   printf("\n"); }  引用 1 楼 user-1 的回复:你这个思路完全忽视了“有序”这个重要的条件。 我这个O(n+m)，我没测试，目测应该可以。 void find_inter(Node *pHead1, Node *pHead2) {   int found = 0;   while (pHead1 != NULL && pHead2 != NULL) {     if (pHead1->s < pHead2->s) {       pHead1 = pHead1->next;     } else if (pHead1->s > pHead2->s) {       pHead2 = pHead2->next;     } else {       found = 1;       printf("%d ", pHead1->s);       pHead1 = pHead1->next;       pHead2 = pHead2->next;     }   }   if (!found) {     printf("NULL");   }   printf("\n"); }  thx a lot，对对，想的太简单了，刚开始做算法题，开始以为是语言上面的问题

user: user-1
content: 你这个思路完全忽视了“有序”这个重要的条件。 我这个O(n+m)，我没测试，目测应该可以。 void find_inter(Node *pHead1, Node *pHead2) {   int found = 0;   while (pHead1 != NULL && pHead2 != NULL) {     if (pHead1->s < pHead2->s) {       pHead1 = pHead1->next;     } else if (pHead1->s > pHead2->s) {       pHead2 = pHead2->next;     } else {       found = 1;       printf("%d ", pHead1->s);       pHead1 = pHead1->next;       pHead2 = pHead2->next;     }   }   if (!found) {     printf("NULL");   }   printf("\n"); }
user-0 提问: C#替换路径的分隔符"\"为"|”

回复:
user: user-0
content: 谢谢“FENGQIYUNRAN”的回答，我已经对你的创意投了一票哦

user: user-0
content: 谢谢，你们的回答，非常感谢

user: user-1
content: 我的智能创意，请支持一下http://html5tv.csdn.net/m/product/tcl/works_detail?id=2521&action=creative&product_type=12！

user: user-1
content: 引用 1 楼 user-2 的回复:string path = @"G:\Files\Code\C#"; string path1 = path.Replace(@"\", "|");  正解，另一方法采用Regex正则的Replace替换方法也可 我的智能创意，请支持一下！

user: user-2
content: string path = @"G:\Files\Code\C#"; string path1 = path.Replace(@"\", "|");
user-0 提问: socket 调用connect 异常 Transport endpoint is not connected.

回复:
user: user-0
content: 引用 6 楼 hulongchuan 的回复:[quote=引用 1 楼 user-3 的回复:] 是不是地址没有写对。 地址没问题啊[/quote] 确实是IP地址的问题，IP地址是动态获取的，有时候IP前面带个空格， 做了一个过滤的处理，就好了，谢谢你啊！

user: user-1
content: 也许是对端要求不能同时连接太多，或者断开和重连之间至少要间隔一定时间。  或者网络连接不稳定，错包太多（用netstat -s命令查看错包统计信息）。

user: user-0
content: 引用 1 楼 user-3 的回复:是不是地址没有写对。 地址没问题啊

user: user-0
content: 引用 2 楼 zmlovelx 的回复:用tcp & udp 调试工具查看下，能否连上服务器， 再用调试工具模拟个服务器，让客户端 连，这样就知道是哪端出现问题了。 我把程序单独拿出来， 只连接可以连上，一直不报错，但整个程序就有时候卡在这报错， 大概6次左右才能有一次正确连接上

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:先得能ping或telnet通吧。 能ping通，也能telnet 那个端口

user: user-1
content: 先得能ping或telnet通吧。

user: user-2
content: 用tcp & udp 调试工具查看下，能否连上服务器， 再用调试工具模拟个服务器，让客户端 连，这样就知道是哪端出现问题了。

user: user-3
content: 是不是地址没有写对。
user-0 提问: 嵌入式 TCP链接断开问题

回复:
user: user-1
content: 网络不好的情况下服务器send失败后可能会主动断开连接 客户端需要做的就是收到-1后重连

user: user-2
content: 多线程并发，发现连接中断就重新连接

user: user-3
content: strerror看看error，，，建议发送帧的server发送延迟一下试试

user: user-4
content: 引用 楼主 zhujinghao09 的回复:在6467t板子上做视频存储，作为tcp\客户端接收相机的视频帧，但是正常接收个几分钟就会出现recv返回值为-1,或者0。相应的error值为11和2.。测试了很久都没有解决这个问题。请高手指点一二。。。。。  1.视频传输的时候,速率是多少,在高负载下,必须确定内存足够. 2.是否使用了多线程,如果是,多核cpu排除并发造成的问题.单核cpu排除抢占. 3.视频存储部分的问题,如果存储过程长时间占用cpu,的确会导致网络连接断掉.常见的情况比如存储部分没有较好的缓存机制,来一个就写一次的话的确可能会发生这样的问题.  4.网络设备硬件或者驱动bug,或者是配置问题.  祝好运.

user: user-0
content: 身边有高手指点说是网络环境造成的，单独搭建一个独立局域网，出现的频率大大减少，但还是会偶尔出现。这种问题的根本原因还是没想明白。

user: user-0
content: 是阻塞的，返回0，是立即返回的。返回-1，是超时返回。因为是做实时流接收的，就想如何避免或者快速解决这个这问题。

user: user-5
content: 发现断开就每隔比如10秒重连，连续比如10次重连失败，想办法通知维护人员。

user: user-6
content: 在阻塞情况下。

user: user-6
content: 返回为0,就是连接断开了。
user-0 提问: 求助！！求助！！求助！！求助！！

回复:
user: user-1
content: 引用 2 楼 u012928672 的回复:[quote=引用 1 楼 zxhuser-3 的回复:] #include <stdio.h>  int main() {     printf("main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,10);     return 0; }  这样能看懂吗？ 我知道这个程序是原样输出，但是不知道为啥会有那样的效果。[/quote] 楼主我给你解答下吧，首先，你应该明白printf（）的基本原理1，利用%*对输出的变量/常量进行格式控制；2，引号中的字符%*控制字符自然输出，那么开始讲解上面的程序： 自左向右； 第一：编译器首先打印出 main(){char*p=字符串因为不收%控制； 第二：寻找第一个%c的变量替换，34非字符常量，类型不符，所以没有输出；若位‘34’，则会相应输出一字符4，楼主可实验； 第三：寻找%s的变量替换，发现"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c"恰为字符串类型，所以输出字符串。 第四：与第二原因相同，没有输出； 第五：与第一原因相同，不收%控制，直接输出;(void)printf(p,34,p,34,10);}。 第六：本质与第二、第四相同，没有输出。 所以就出现了你所说的效果。  若楼主认为我说的有道理，请支持一下！

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-3
content: lz你这是根本没看书就来发帖问的吧

user: user-0
content: 引用 1 楼 zxhuser-3 的回复:#include <stdio.h>  int main() {     printf("main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,10);     return 0; }  这样能看懂吗？ 我知道这个程序是原样输出，但是不知道为啥会有那样的效果。

user: user-3
content: #include <stdio.h>  int main() {     printf("main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,10);     return 0; }  这样能看懂吗？
user-0 提问: 关于digit的解释

回复:
user: user-0
content: It works by sorting data in pieces called digits, 看到这句话我懂了

user: user-1
content: 首先，楼主不必纠结于，到底翻译成什么，配合基数排序去理解digit所指的本质，然后具体翻译成什么就是寓情于景的问题。 所以，楼主还是得把基数排序稿透，理解digit也就不是问题。 举例，排序： 22 38 46 51 98 34    2   8    6   1    8   4 就是低位（右边，个位上的数） 2   3   4     5    9  就是高位（左边，十位上的数） 楼主理解了么？ 我的智能创意，请支持一下！
user-0 提问: HDOJ的一道编程题 大数加法

回复:
user: user-0
content: 引用 4 楼 IAccepted 的回复: #include <cstdio> #include <cstdlib> #include <cstring>  const int MAX = 1002;  char sa[MAX],sb[MAX],res[MAX+1];  int Add(){     int pos,la,lb,ts,c;      la = strlen(sa)-1;     lb = strlen(sb)-1;     pos = MAX;     res[pos] = '\0';     c = 0;     while(la>=0 && lb>=0){         ts = (sa[la]-'0') + (sb[lb]-'0') +c;         res[--pos]=ts%10+'0';         --la,--lb;         c = ts/10;     }     while(la>=0){         ts = (sa[la]-'0')+c;         res[--pos]=ts%10+'0';         --la;         c = ts/10;     }     while(lb>=0){         ts = (sb[lb]-'0')+c;         res[--pos]=ts%10+'0';         --lb;         c = ts/10;     }     if(c!=0)res[--pos]='0'+c;     return pos; } int main(){     int pos,n,i;     scanf("%d",&n);     for(i=1;i<=n;++i){         scanf("%s %s",sa,sb);         pos = Add();         printf("Case %d:\n%s + %s = %s\n",i,sa,sb,res+pos);         if(i!=n)printf("\n");     }     return 0; }  这是我AC的代码，思路是一样的，你可以简单参考下 妙！整个字符串输出

user: user-1
content: #include <cstdio> #include <cstdlib> #include <cstring>  const int MAX = 1002;  char sa[MAX],sb[MAX],res[MAX+1];  int Add(){     int pos,la,lb,ts,c;      la = strlen(sa)-1;     lb = strlen(sb)-1;     pos = MAX;     res[pos] = '\0';     c = 0;     while(la>=0 && lb>=0){         ts = (sa[la]-'0') + (sb[lb]-'0') +c;         res[--pos]=ts%10+'0';         --la,--lb;         c = ts/10;     }     while(la>=0){         ts = (sa[la]-'0')+c;         res[--pos]=ts%10+'0';         --la;         c = ts/10;     }     while(lb>=0){         ts = (sb[lb]-'0')+c;         res[--pos]=ts%10+'0';         --lb;         c = ts/10;     }     if(c!=0)res[--pos]='0'+c;     return pos; } int main(){     int pos,n,i;     scanf("%d",&n);     for(i=1;i<=n;++i){         scanf("%s %s",sa,sb);         pos = Add();         printf("Case %d:\n%s + %s = %s\n",i,sa,sb,res+pos);         if(i!=n)printf("\n");     }     return 0; }  这是我AC的代码，思路是一样的，你可以简单参考下

user: user-0
content: 引用 2 楼 lovesmiles 的回复:确实写得非常之烂     for(i=1;i<=t;i++)//t没有定义        {        scanf("%s%s",A,B);//这种输入可能会有问题，你没法区分a什么时候结束  第六行、、int   t；定义了啊 scanf  输入的两个字符串是用空格隔开的 应该没问题

user: user-2
content: 确实写得非常之烂     for(i=1;i<=t;i++)//t没有定义        {        scanf("%s%s",A,B);//这种输入可能会有问题，你没法区分a什么时候结束

user: user-0
content: 我知道我代码写的烂、、、
user-0 提问: 求教，关于非系统分配的内存的使用权限问题

回复:
user: user-1
content: 从语言角度来讲， 访问无效内存属于未定义行为（可能会crash,也可能不会） 从OS内存管理角度来说， 这块内存可能属于进程空间内已经提交的内存，free一般只是放回到自由空间(free store)中。

user: user-2
content: 1你这不是内存泄漏，你是指向了一个未知的内存值，就是野指针。访问野指针通常会出错，但也不一定，假如你刚好有这个内存的访问权限的话。 2正如上面说的，内存是交还了。交还的意思是系统只是记录了这块内存是空闲内存。随时可以分配给其它线程。但它的访问权限是存在的，就是说你访问它是没有问题的。只是系统不保证它的值不会被改变。  你分配也好，收回也好，不管你free不free，内存的访问权限就在那里。你又没有将指针清为null。

user: user-3
content: malloc是上层函数，它底层由你进程中的内存管理器支持，你进程中的内存管理器事先从系统分配一批内存（系统内存是以内存页为单位分配的，最小分配一般是4096字节）。所以你即使free了，但是这部分内存只是交给了内存管理器，由内存管理器决定是否还给系统，特别是你malloc小块内存时，这部份内存不会交还给系统，此时对系统来说这块内存仍然是你process能够访问的。所以不会出错。
user-0 提问: 各位大神，请教如何让三角形能够居中输出

回复:
user: user-1
content: 先算空格，printf输出空格后在输出#个数 C++中可以用string串

user: user-2
content: 如果你想计算的话，可以使用坐标法输入。这样很简单

user: user-2
content: 输入空格是一种方法，每一行有多少个字符，没有星号的地方全部用空格代替。来给二维数组就解决了

user: user-3
content: 用递归，比较简单

user: user-4
content: 最后一行有n减几个空格没算，上面一次减一个，不就能计算出来了

user: user-5
content: #include <stdio.h> int main() { 	int n,i; 	scanf("%d", &n);  		for (int i=n;i>0;i--) 		{ 			for (int j=0;j<n+i-1;j++) 			{ 				if (j<n-i) 					printf(" "); 				 else 					 printf("#"); 			} 			printf("\n"); 		}  	return 0; } 拿去用吧，这是另外一个人问的问题。

user: user-6
content: 控制好空格和行数的关系，比如第一行 空格数为0；第二行空格数为 1；第三行空格数为2，依次类推，先输入空格再输入#

user: user-7
content: 每行前面输出事先计算好个数的空格。
user-0 提问: 这是一个键盘记录程序，我想把显示在控制台的内容显示保存到文件中，发现while循环中没法保存，该怎么办？

回复:
user: user-0
content: 引用在每个fprintf(...);的后面加fflush(fp); 加上之后确实是正确的，可是为什么有时候不加flush(fp)也可以写入到文件呢？

user: user-0
content: 加上之后确实是正确的，可是为什么有时候不加flush(fp)也可以写入到文件呢？

user: user-1
content: 在每个fprintf(...);的后面加fflush(fp);