Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: Win32(非MFC)下创建的非模式窗口，如何销毁

回复:
user: user-1
content: 引用 3 楼 user-3 的回复:SendMessage WM_CLOSE    如果你是非模态对话框那就可以这么做，如果登陆界面做成模态对话框,在响应确定或取消的时候 EndDialog。

user: user-0
content: 引用 2 楼 hlx_beat 的回复:WM_DESTROY：PostQuitMessage(...);  非常感谢，那想问问，关闭窗口时，不调用PostQuitMessage能否作为隐藏窗口的一种方法呢？ 就比如说我有一个登录窗口，输入帐号密码后，如果把这个窗口销毁，登录后显示的主界面就出 不来了，所以能否用这种方法实现这类效果？

user: user-2
content: 还要用PostQuitMessage才能退出。

user: user-3
content: SendMessage WM_CLOSE

user: user-1
content: WM_DESTROY：PostQuitMessage(...);
user-0 提问: scanf连续输入字符串的问题

回复:
user: user-1
content: // crt_scanf_s.c // This program uses the scanf_s and wscanf_s functions // to read formatted input.    #include <stdio.h>  int main( void ) {    int      i,             result;    float    fp;    char     c,             s[81];    wchar_t  wc,             ws[81];     result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,                      &wc, 1, s, 80, ws, 80 );    printf( "The number of fields input is %d\n", result );    printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c,            wc, s, ws);    result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,                       &wc, 1, s, 80, ws, 80 );    wprintf( L"The number of fields input is %d\n", result );    wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp,             c, wc, s, ws); }

user: user-1
content: char str[10] = "ccccc"; printf("%s\n", str); scanf_s("%s", str,10-1); printf("%s\n", str); system("pause"); return 0;

user: user-0
content: 引用 5 楼 lin5161678 的回复:引用 4 楼 sozenvN 的回复:我用的scanf是在VS2012下的scanf_s,难道是因为这个函数的原因？你什么代码出问题 就贴什么代码 别随便改 浪费别人时间 不好意思啊，我是担心编译器不一样，不知道是scanf_s的问题

user: user-2
content: 引用 4 楼 sozenvN 的回复:我用的scanf是在VS2012下的scanf_s,难道是因为这个函数的原因？你什么代码出问题 就贴什么代码 别随便改 浪费别人时间

user: user-0
content: 引用 3 楼 zxhuser-3 的回复: 哪有问题了？ 我用的scanf是在VS2012下的scanf_s,难道是因为这个函数的原因？

user: user-3
content: 哪有问题了？

user: user-0
content: 引用 1 楼 lin5161678 的回复:你说清楚你是怎么操作的 程序输出 ccccc 之后 你干了些什么 而程序是怎么反应的? 输入"sad" 回车 就是想修改str里面的值

user: user-2
content: 你说清楚你是怎么操作的 程序输出 ccccc 之后 你干了些什么 而程序是怎么反应的?

user: user-3
content: 引用 4 楼 sozenvN 的回复:[quote=引用 3 楼 zxhuser-3 的回复:]  哪有问题了？ 我用的scanf是在VS2012下的scanf_s,难道是因为这个函数的原因？[/quote] 对你不知说啥好。。。
user-0 提问: 程序0x77f92373指令引用的内存“0x00000010”内存,该内存不能为written

回复:
user: user-0
content: 谢谢各位大牛！！！

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

user: user-0
content: CRITICAL_SECTION g_cs; 全局定义

user: user-2
content: 调过 InitializeCriticalSection 没？

user: user-3
content: 最好贴   g_cs   的定义、初始化代码
user-0 提问: apache接受到数据如何转发给c写的服务器

回复:
user: user-1
content: 应该都是buf数据，转发就好可以吧！ 对方解析就好

user: user-2
content: WebSevice

user: user-0
content: 顶一个。没人知道？？？？？？
user-0 提问: 成绩打印及绩点计算操作excel

回复:
user: user-1
content: 楼主的问题解决了嘛，同求啊~

user: user-2
content: 本人是菜鸟， 过来逛逛

user: user-3
content: 引用 1 楼 zxhuser-4 的回复:lz你是不是发错版块了？？？ 同上，另外问一下，楼主想干什么

user: user-4
content: lz你是不是发错版块了？？？
user-0 提问: c语言 自增运算 自右向左结合性如何理解，源码如下，求高人分析

回复:
user: user-1
content: 世上本无事，庸人自扰之。

user: user-2
content: 1.自增运算与加减混合的时候怎么结合？ 如 y = ++i +i+++i 到底是y = (++i)+i+(++i)  还是 y = (++i)+(i++)+i？怎么来？  你可以将其称之为 贪婪法则  最大限度的读取合法的标记 对于 i+++i 这样的表达式  +后面是+ 可以组成 ++ 那么就按照++理解  ++后面有一个+ 但是没有一个运算符是 +++ 所以就拆开  (++i)+(i++)+i  2.自右向左结合到底怎么运算？ 为什么 y = (++i)+(i++)+i中先计算 ++i 而不是 （i++) ，从汇编上看就是从++i计算到（i++）的过程，这不是自左向右了？ 自右向左到底是啥？ 这个如果按照你所谓的 你有看置顶帖 那么你就根本不会有这个疑问 另外 结合性也好 优先级也好 和怎么运算是毫无关系的 结合性和优先级只是用于确认 运算符和哪些子表达式结合 仅此而已  3.为什么语句：y = ++i+i+++++i;要报错：error C2105: '++' needs l-value， 为什么 +++++i可以正常运算？ i++++ 这个表达式解析为 ((i++)++) 第二个++的操作数是 i++  这里的问题是 ++的操作数要求是左值  而 i++ 这个表达式不是左值 所以就Error 而对于 ++++i 这个解析为(++(++i)) ++i 这个表达式在C++中是返回一个左值引用 所以可以继续 ++ 而对于C语言 ++i 结果不是左值 所以 ++++i 在C语言里面是Error 另外在说一点  ++自增运算符只能操作于变量，不能用于常量和表达式， 这个说法是扯淡  ++运算符[不考虑重载] 是只能用于表达式 [可修改左值表达式] 变量其实也是一个简单表达式!

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

user: user-0
content: 引用 1 楼 buyong 的回复: 看置顶贴。++这种运算符给生活带来不少乐趣 引用 2 楼 u012421456 的回复:总之不要这么用了，看置顶帖——http://bbs.csdn.net/topics/370153775  谢谢，提供的置顶帖我看了， 通篇看下来就看到这一句：实际应该说的是：这种东西根本不该写，讨论其效果没有意义。  不过人家编译器能给出相应的报错提示，证明有其依据可言，别人能断定这是error ，而不是某些人所说的 没有意义。  不过第三问我已经参与相关书籍知道了， 那就是：increment/decrement操作符-前置返回reference,后置返回const obj  而自增自减运算只对变量  其它两问 不知道还有没有人可以解答一下的？

user: user-0
content: 谢谢，提供的置顶帖我看了， 通篇看下来就看到这一句：实际应该说的是：这种东西根本不该写，讨论其效果没有意义。  不过人家编译器能给出相应的报错提示，证明尤其依据可言，就人家能断定这是error ，而不是某些人所说的 没有意义。  不过第三问我已经参与相关书籍知道了， 那就是：increment/decrement操作符-前置返回reference,后置返回const obj  而自增自减运算只对变量  其它两问 不知道还有没有人可以解答一下的？

user: user-3
content: 总之不要这么用了，看置顶帖——http://bbs.csdn.net/topics/370153775

user: user-4
content: 看置顶贴。++这种运算符给生活带来不少乐趣

user: user-5

user: user-0
content: 引用 1 楼 buyong 的回复: 看置顶贴。++这种运算符给生活带来不少乐趣 引用 2 楼 u012421456 的回复:总之不要这么用了，看置顶帖——http://bbs.csdn.net/topics/370153775 引用 5 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/370153775 引用 6 楼 lin5161678 的回复:1.自增运算与加减混合的时候怎么结合？ 如 y = ++i +i+++i 到底是y = (++i)+i+(++i)  还是 y = (++i)+(i++)+i？怎么来？  你可以将其称之为 贪婪法则  最大限度的读取合法的标记 对于 i+++i 这样的表达式  +后面是+ 可以组成 ++ 那么就按照++理解  ++后面有一个+ 但是没有一个运算符是 +++ 所以就拆开  (++i)+(i++)+i  2.自右向左结合到底怎么运算？ 为什么 y = (++i)+(i++)+i中先计算 ++i 而不是 （i++) ，从汇编上看就是从++i计算到（i++）的过程，这不是自左向右了？ 自右向左到底是啥？ 这个如果按照你所谓的 你有看置顶帖 那么你就根本不会有这个疑问 另外 结合性也好 优先级也好 和怎么运算是毫无关系的 结合性和优先级只是用于确认 运算符和哪些子表达式结合 仅此而已  3.为什么语句：y = ++i+i+++++i;要报错：error C2105: '++' needs l-value， 为什么 +++++i可以正常运算？ i++++ 这个表达式解析为 ((i++)++) 第二个++的操作数是 i++  这里的问题是 ++的操作数要求是左值  而 i++ 这个表达式不是左值 所以就Error 而对于 ++++i 这个解析为(++(++i)) ++i 这个表达式在C++中是返回一个左值引用 所以可以继续 ++ 而对于C语言 ++i 结果不是左值 所以 ++++i 在C语言里面是Error 另外在说一点  ++自增运算符只能操作于变量，不能用于常量和表达式， 这个说法是扯淡  ++运算符[不考虑重载] 是只能用于表达式 [可修改左值表达式] 变量其实也是一个简单表达式! 引用 7 楼 zhao4zhong1 的回复:世上本无事，庸人自扰之。   谢谢各位贡献出来的答案， 本贴可以正式结贴了  我也想分享一下，自己的想法：  解决问题的速度和准确度，取决于TA构建的知识网络有多大，有多完善；一个点的盲区，可能是连接或激活一个新大陆的枢纽，就如"垃圾"只是放错了位置的宝贝一样。  就像这个问题的提出， 或许我从来没有写出 這样++++-----的代码，或许以后也不会写，通过综合回帖内容，发现了还有一些其它不一样的看法，盲区以及已经存在的误区  为了构筑更加强大的网络体系，当一回庸人又何妨？ ^_^
user-0 提问: 关于bland c的问题

回复:
user: user-1
content: Borland C++ 3.1，Borland C++ 4.5 到处都是

user: user-2
content: http://download.csdn.net/source/2805028

user: user-3
content: borland的C开发编译器

user: user-4
content: 是一个很老的IDE吧，是指borland c

user: user-5
content: Borland C++ 3.1 ?
user-0 提问: 动态数组堆栈问题

回复:
user: user-1
content: assert的意思就是"断言" 即程序执行到这里我断定它是这个条件,或者必需要满足这个条件.  所以assert(stack_size > 0);  的意思就是:   程序执行到这里,stack_size必需大于0, 否则就报错.

user: user-2
content: 为什么不直接使用_alloca呢？ _alloca Allocates memory on the stack.  void *_alloca( size_t size );  Routine Required Header Compatibility  _alloca <malloc.h> Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  The _alloca routine returns a void pointer to the allocated space, which is guaranteed to be suitably aligned for storage of any type of object. To get a pointer to a type other than char, use a type cast on the return value. A stack overflow exception is generated if the space cannot be allocated.  Parameter  size  Bytes to be allocated from stack  Remarks  _alloca allocates size bytes from the program stack. The allocated space is automatically freed when the calling function exits. Therefore, do not pass the pointer value returned by _alloca as an argument to free.  There are restrictions to explicitly calling _alloca in an exception handler (EH). EH routines that run on x86-class processors operate in their own memory “frame”: They perform their tasks in memory space that is not based on the current location of the stack pointer of the enclosing function. The most common implementations include Windows NT structured exception handling (SEH) and C++ catch clause expressions. Therefore, explicitly calling _alloca in any of the following scenarios results in program failure during the return to the calling EH routine:   Windows NT SEH exception filter expression:  __except ( alloca() )   Windows NT SEH final exception handler:  __finally { alloca() }   C++ EH catch clause expression  However, _alloca can be called directly from within an EH routine or from an application-supplied callback that gets invoked by one of the EH scenarios listed above.   Memory Allocation Routines  See Also   calloc, malloc, realloc

user: user-3
content: 断言assert里边的表达式是你希望或者断定他为真，如果为假说明验证失败。所以很正常

user: user-4
content: 引用 3 楼 qjedward 的回复:[quote=引用 2 楼 heronism 的回复:] 请问第68行为什么是stack_size > 0，而不是stack_size <= 0  ？ ——有什么问题，stack_size > 0表示这个栈是有实际内容的，assert里的表达式是要求为真程序才继续往下跑的。  那第61行的assert(stack_size > 0);  为什么不是stack_size = 0？它不是is_empty 函数吗？堆栈为空，不是stack_size = 0 吗？[/quote] 拜托好好看看你的代码吧，别人看一眼就能明白，你自己压根就没好好看。好好想想你说的“堆栈为空，不是stack_size = 0 吗？”有什么依据

user: user-5
content: assert(stack_size > 0]);  这是一条断言，是在调试阶段比较常用的方式。如果参数为假则直接退出，对于查找问题效率较高。

user: user-0
content: 引用 2 楼 heronism 的回复:请问第68行为什么是stack_size > 0，而不是stack_size <= 0  ？ ——有什么问题，stack_size > 0表示这个栈是有实际内容的，assert里的表达式是要求为真程序才继续往下跑的。  那第61行的assert(stack_size > 0);  为什么不是stack_size = 0？它不是is_empty 函数吗？堆栈为空，不是stack_size = 0 吗？

user: user-4
content: 请问第68行为什么是stack_size > 0，而不是stack_size <= 0  ？ ——有什么问题，stack_size > 0表示这个栈是有实际内容的，assert里的表达式是要求为真程序才继续往下跑的。

user: user-6
content: 自己查一下 assert的用法就明白了。
user-0 提问: 大神们，有关步进电机和直流电机的问题，在线等？？

回复:
user: user-1
content: 引用 1 楼 user-5 的回复:lz确定这是属于c、c++板块的问题？  这位姑娘  我看了你11年的帖子跟踪到这里来的， 近况怎么样？

user: user-2
content: 引用 楼主 Happy_5201314 的回复:这里不懂，为什么PWM_TEME_H会等于80，PWM_TEME_L会等于20？？我计算的结果是PWM_TEME_H = 20，PWM_TEME_L = 80？？ 占空比是指高电平在一个周期之内所占的时间比率。  底下那几个问题 第一，两个if的判断条件实际上是等价的，估计程序写错了，注释也写反了 第二，估计加速键和减速键分别对应着PWM_TEME_H的++和--，所以如果在操作之后发现结果超出了允许范围，就要--和++恢复成操作前的数值 第三，高电平时间+低电平时间=总时间，所以低电平时间=总时间-高电平时间，如果连这你要问，那我觉得你不是新手，你是不想动手

user: user-2
content: 你在电脑上写了一个程序，跑起来很顺畅 然后我跟你说，请你把这个程序移植到电视机上 你觉得此时露出什么表情比较好？  步进电机和直流电机的原理不同，硬件不同，所以软件也完全不同 步进电机每一个脉冲都会使内部磁场旋转一个步距角，所以脉冲数决定了角度，发脉冲的频率也就决定了速度 直流电机的输入功率对应其转速，调节电压和占空比都会改变实际输入的功率，至于脉冲频率不重要 你要是有能力让你家电视机运行你的电脑程序，你就可以用控制直流电机的程序来控制步进电机

user: user-0
content: 小弟，是新手啊？跪求大神帮忙解决？？

user: user-3
content: 步进电机和一般直流电机的驱动方式是完全不同的，PWM不适用于步进电机。

user: user-4
content: 提醒：小心“空回误差”。

user: user-5
content: lz确定这是属于c、c++板块的问题？
user-0 提问: DES加密的C语言实现过程中，最后一步居然出错，数组有关！！

回复:
user: user-1
content: static void RotateL(const int input[28],int output[28], int loop)//秘钥循环左移 { 	int i; 	if(loop==1) 	{ 		int temp=input[0]; 		for(i=0;i<27;i++) 			output[i]=input[i+1]; 		output[27]=temp; 	} 	else 	{ 		int temp=input[0]; 		int temp_1=input[1]; 		for(i=0;i<26;i++) 			output[i]=input[i+2]; 		output[26]=temp; 		output[27]=temp_1; 	} }; 你的错误在这里。。。好难查找的错误！！！

user: user-0
content: 引用 3 楼 shen_wei 的回复:input[i+1]*8+input[i+2]*4+input[i+3]*2+input[i+4] 数组越界了！！！ i = 12  i + 4 = 16  但是input[16]不越界啊 input[]是48的。

user: user-1
content: input[i+1]*8+input[i+2]*4+input[i+3]*2+input[i+4] 数组越界了！！！ i = 12  i + 4 = 16

user: user-2
content: 《算法精解（C语言描述）》随书代码中似乎有现成的des代码。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。  重点检查函数参数传递

user: user-3
user-0 提问: 怎么扫描指定的点

回复:
user: user-1
content: 引用 8 楼 u010095851 的回复:引用 7 楼 zjq9931 的回复:[quote=引用 6 楼 u010095851 的回复:] [quote=引用 5 楼 zjq9931 的回复:] [quote=引用 3 楼 u010095851 的回复:] 我再问一下，那怎么弄可以使上面这些点按顺序五个五个都遍历到呢  [quote=引用 1 楼 zjq9931 的回复:] for(i=1, j=0; i<ix,j<iy; i++,j++) 不太明白5个5个遍历是什么意思，能否细说？[/quote]  就是（1,0），（2,1），（3,2），（4,3），（5,4）一组，（2,1），（3,2），（4,3），（5,4），（6,5）一组，每五个一组以此类推得到这些点的值[/quote]   int ix; for(ix=1; ix<18-4; ix++)  //看你前面写的最后是18 {      scanxy(ix,ix-1);      scanxy(ix+1,ix);      scanxy(ix+2,ix+1);      scanxy(ix+3,ix+2);      scanxy(ix+4,ix+3); }  或者  int check(x, y) {     for(i=0; i<5; i++)     {         scanxy(x+i, y+i);     } } int ix; for(ix=1; ix<18-4; ix++)  //看你前面写的最后是18 {      check(ix,ix-1); } [/quote]  scanxy是自己写的函数吗？[/quote] 是的。

user: user-0
content: 引用 7 楼 zjq9931 的回复:引用 6 楼 u010095851 的回复:[quote=引用 5 楼 zjq9931 的回复:] [quote=引用 3 楼 u010095851 的回复:] 我再问一下，那怎么弄可以使上面这些点按顺序五个五个都遍历到呢  [quote=引用 1 楼 zjq9931 的回复:] for(i=1, j=0; i<ix,j<iy; i++,j++) 不太明白5个5个遍历是什么意思，能否细说？[/quote]  就是（1,0），（2,1），（3,2），（4,3），（5,4）一组，（2,1），（3,2），（4,3），（5,4），（6,5）一组，每五个一组以此类推得到这些点的值[/quote]   int ix; for(ix=1; ix<18-4; ix++)  //看你前面写的最后是18 {      scanxy(ix,ix-1);      scanxy(ix+1,ix);      scanxy(ix+2,ix+1);      scanxy(ix+3,ix+2);      scanxy(ix+4,ix+3); }  或者  int check(x, y) {     for(i=0; i<5; i++)     {         scanxy(x+i, y+i);     } } int ix; for(ix=1; ix<18-4; ix++)  //看你前面写的最后是18 {      check(ix,ix-1); } [/quote]  scanxy是自己写的函数吗？

user: user-1
content: 引用 6 楼 u010095851 的回复:引用 5 楼 zjq9931 的回复:[quote=引用 3 楼 u010095851 的回复:] 我再问一下，那怎么弄可以使上面这些点按顺序五个五个都遍历到呢  [quote=引用 1 楼 zjq9931 的回复:] for(i=1, j=0; i<ix,j<iy; i++,j++) 不太明白5个5个遍历是什么意思，能否细说？[/quote]  就是（1,0），（2,1），（3,2），（4,3），（5,4）一组，（2,1），（3,2），（4,3），（5,4），（6,5）一组，每五个一组以此类推得到这些点的值[/quote]   int ix; for(ix=1; ix<18-4; ix++)  //看你前面写的最后是18 {      scanxy(ix,ix-1);      scanxy(ix+1,ix);      scanxy(ix+2,ix+1);      scanxy(ix+3,ix+2);      scanxy(ix+4,ix+3); }  或者  int check(x, y) {     for(i=0; i<5; i++)     {         scanxy(x+i, y+i);     } } int ix; for(ix=1; ix<18-4; ix++)  //看你前面写的最后是18 {      check(ix,ix-1); }

user: user-0
content: 引用 5 楼 zjq9931 的回复:引用 3 楼 u010095851 的回复:我再问一下，那怎么弄可以使上面这些点按顺序五个五个都遍历到呢  [quote=引用 1 楼 zjq9931 的回复:] for(i=1, j=0; i<ix,j<iy; i++,j++) 不太明白5个5个遍历是什么意思，能否细说？[/quote]  就是（1,0），（2,1），（3,2），（4,3），（5,4）一组，（2,1），（3,2），（4,3），（5,4），（6,5）一组，每五个一组以此类推得到这些点的值

user: user-1
content: 引用 3 楼 u010095851 的回复:我再问一下，那怎么弄可以使上面这些点按顺序五个五个都遍历到呢  引用 1 楼 zjq9931 的回复:for(i=1, j=0; i<ix,j<iy; i++,j++) 不太明白5个5个遍历是什么意思，能否细说？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:for (int x=1; x<=18;x++) scanxy(x,x-1); 赵老师 谢谢您的回答  我楼上还有一个问题

user: user-0
content: 我再问一下，那怎么弄可以使上面这些点按顺序五个五个都遍历到呢  引用 1 楼 zjq9931 的回复:for(i=1, j=0; i<ix,j<iy; i++,j++)

user: user-2
content: for (int x=1; x<=18;x++) scanxy(x,x-1);

user: user-1
content: for(i=1, j=0; i<ix,j<iy; i++,j++)
user-0 提问: 如何学习算法

回复:
user: user-1
content: 为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

user: user-0
content: 《算法导论》好像太深奥了，，不太适合入门啊············

user: user-2
content: 可以按照上图，一步步学，至于书籍，我觉得楼上的说的可以

user: user-2
content: 以前看到的一张图片

user: user-3
content: 比如算1+2+...+10000 你写个循环真的加，就是暴力 如果你会公式，就是算法

user: user-4
content: 有问题多到csdn论坛来问吧

user: user-1
content: 《算法精解（C语言描述）》

user: user-5
content: 《算法导论》 《The Algorithm Design Manual 2Ed》

user: user-6
content: 一张A4白纸，一支笔足以

user: user-7
content: google v_july_v博客
user-0 提问: 新手求助，显示“Judge”: 重定义；不同的基类型

回复:
user: user-1
content: 你是不是把这个函数现在头文件里。然后被2个源文件引用了

user: user-2
content: 你所贴的代码段没有Judge重定义的问题，请仔细检查其它代码段。

user: user-3
content: 怎样使用它的？
user-0 提问: 关于C语言return语句的一些疑问

回复:
user: user-1
content: char s1[]="123"; char s2[]="456"; my_strcpy_end(s1,s2); 但是我发现我这么调用的话好像那个return语句没起到什么作用啊，所以我想问下大家，return语句到底有什么作用？它返回的值究竟去了哪里？   返回值一般放入EAX寄存器。 因为你的例子中，你没有“接收”返回值，所以被丢弃了。

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: 引用 6 楼 mujiok2003 的回复:char s1[]="123"; char s2[]="456"; my_strcpy_end(s1,s2); 但是我发现我这么调用的话好像那个return语句没起到什么作用啊，所以我想问下大家，return语句到底有什么作用？它返回的值究竟去了哪里？   返回值一般放入EAX寄存器。 因为你的例子中，你没有“接收”返回值，所以被丢弃了。 ++  引用 2 楼 u013697891 的回复:返回至不是应该这么用吗 int  a(){ ........... return b;} main(){ int c; c=a();} ++  函数调用是个表达式，称为函数调用表达式。 任何表达式，加上一个分号，就成为一个表达式语句。  单独的函数调用语句是个表达式，这个表达式的值，没有使用，所以被忽略。 任何其他表达式也是如此 例如： int a=10; a; // 表达式语句，值为 a（也就是10，如果赋值给别的表达式），该值没使用，被忽略。 a= 20;// 赋值表达式 哲理有3个表达式  a,20 ,a=20  //1） a 20   a是左值表达式。20是右值表达式 //2） a=20  是个赋值表达式 ，值为a(也就是20，如果赋值给别的表达式) 被忽略 //3）副作用是a 的值变成20，完成赋值。

user: user-4
content: 返回至不是应该这么用吗 int  a(){ ........... return b;} main(){ int c; c=a();}

user: user-5
content: 1. 你的函数中f1未使用，不需要这个变量 2. 函数的逻辑有问题，你这是要覆盖原来的字符 3. 你未测试函数参数的有效性 4. 你的return goal-1;逻辑上不准确，至少是return f1; 5. 你my_strcpy_end(s1,s2);调用是有问题的，s1的长度是在编译后确定了的，如果s2很长，会造成s1溢出 6. 你调用函数时不使用变量接收函数的返回值，它的返回值就被抛弃了，相当于(void *)my_strcpy_end(s1,s2);

user: user-6
content: 记得书上说return值返回到Main函数

user: user-7
content: 这里二楼说的很详细——http://bbs.bccn.net/thread-308356-1-1.html
user-0 提问: 百度的c语言写的2048代码，求大神看看那里错误了不能运行呢

回复:
user: user-0
content: 恩恩  好的 这是个好方法，但是我都不知道错在那里呢。谢谢lz

user: user-0
content: 那为啥只报了有2个错误呢，求大神帮帮忙改一下下呢~~o(>_<)o ~~

user: user-1
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-2
content: 错误一大堆。。。。 最开始的错误是：int add(int n); 后面多了分号，但改完这个之后，又有一大堆。
user-0 提问: win7下，malloc失败！求高手解决！

回复:
user: user-1
content: 内存碎片吧，可能。

user: user-2
content: 应该是没有连续的200M的内存空间，或者腾不出这么大的空间吧。楼主这是要做什么一下子需要申请这么多空间，不可以分批多次申请吗？

user: user-3
content: 最好的破解方法是： 在程序初始化时分配程序主循环中将要用到的所有内存 在程序主循环中不再释放和动态分配内存 在程序退出时释放所有分配的内存（也可不释放而让操作系统自动释放）  内存如果不够大，可改用： 内存映射文件 或 用文件读写模拟内存读写（参考_lseeki64函数）

user: user-4
content: 使用范例： TMymems  Pubmems ; //全局变量 内存池 申请： char *p = (char *)Pubmems.Getmem(newsize); 释放  Pubmems.freemem(p);  当系统内存紧张时   Pubmems.freememNoUse(),释放空闲的内存块 当系统退出时   Pubmems.freememAll(),释放全部内存块

user: user-4
content: //一个内存块 TMymemBlock {  char *fmem ;   unsigned int fsize;  bool Use ;  friend class TMymems;    public :     void *Getmem(int newsize)     {          if(fsize < newsize)           {             fsize = newsize ;              if(fmem) delete fmem ;              fmem = new char[newsize];        }        Use = true ;         return fmem ;       }      void freemem()     {         if(fmem) delete fmem ;         fmem = NULL ;          fsize = 0 ;          Use = false ;      }    TMymemBlock() fmem(NULL) , fsize(0),Use(false) {} }; //TMymems 管理多个不连续的内存块，形成内存池。 TMymems {   std::vector<TMymemBlock>  mems ;  typedef   std::vector<TMymemBlock>::iterator TMymemItem ;  TMymemItem  Findmem(int size) //查找最适合的空闲内存块供使用   {     TMymemItem  pItem = mems.end() ;     unsigned int dt = -1 ;       for(TMymemItem  p =mems .begin() ; p != mems.end() ; ++p )      {           if( ! p->Use )           {              unsigned int tmp = (p->fsize > size) ?  (p->fsize - size)  : -1;               if(tmp  == 0  )                  return p;              else if(tmp < dt )                 {dt = tmp ;  pItem = p ;}              else if( pItem == mems.end() )                 pItem = p ;           }        }     if( pItem  == mems.end() || (mems.size() < 100 ) ) //预留100个内存块,这个可以依据自己的项目来设定，以得到最好性能         {mems.push_back(TMymemBlock());   pItem =  mems.end();}     return pItem ;   } public :     void *Getmem(int newsize)     {         TMymemItem p =  Findmem(newsize)         return p->Getmem(newsize);       }      void freemem(void *p)     {         for(TMymemItem  p =mems .begin() ; p != mems.end() ; ++p )           if(p->fmem == char(*)p )              {p->Use = false ; break ; }     }      void freememNoUse(); //这里不写了      void freememAll(); //这里不写了 } (上面是随手写的) 类似这样的一个简单的机制，就可以应付简单频繁申请释放内存的问题。当然，这个简单的机制，只是适合才用。 小项目，用这样小的定制内存池机制，性能会更好。

user: user-0
content: 有什么好用的内存池么？求大神给推荐一下。。

user: user-5
content: 用内存池撒 ，或者简单点：自己先申请好所有要用的内存

user: user-6
content: 引用 3 楼 pz239 的回复:我估计也是内存碎片问题 ，因为程序在运行中需要频繁的分配、释放大块的内存。。  不知 有何破解方法。。？ 像你这样的频繁的分配释放，需要使用内存池。不能这样一直申请释放 简单讲，就是申请几个内存块，放在那儿拿着用，而不要真正释放掉。

user: user-0
content: 我估计也是内存碎片问题 ，因为程序在运行中需要频繁的分配、释放大块的内存。。  不知 有何破解方法。。？

user: user-7
content: 内存碎片问题。 说明现在虚拟地址空间中没有连续的200M可以申请了 和你剩余空间大小无关。而严重的依赖于内存分配的算法。这个算法是运行时库做的。估计设计的不太好吧。。

user: user-0
content: 有图有真相：  最下面显示无法分配内存   可用内存几乎用完，存在大量的备用内存，却无法使用。。。
user-0 提问: 关于while 和switch 混合型问题求详解

回复:
user: user-1
content: 你可以这样 #include <stdio.h> int main() { 	char c; 	while (1) 	{ 		printf("h\n"); 		switch (c=getchar()); 		printf("%d\n",c); 	} 	return 0; } 看输出的数值是多少，再参照ASCII码去看就知道了

user: user-2
content: 单步调试一下，看看两次都是什么字符

user: user-1
content: getchar会在你按回车之后把输入的字符接收，你按下的回车也会当做一个字符接收的

user: user-0
content: 引用 1 楼 zxh707wk 的回复:getchar()会把回车也当做输入来接收的关键是不知道为啥会有输出h那

user: user-1
content: getchar()会把回车也当做输入来接收的
user-0 提问: 包含了头文件stdio.h，还是报错显示printf未声明，怎么回事啊，求助！！！

回复:
user: user-1
content: #pragma comment(lib, "Ws2_32.lib") 是加载静态库的意思。

user: user-2
content: #include <winsock.h>     WORD wVersionRequested;     WSADATA wsaData;     wVersionRequested=MAKEWORD(2,2);     WSAStartup(wVersionRequested,&wsaData); //...     WSACleanup();

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

user: user-0
content: 引用 8 楼 mujiok2003 的回复:来搞笑的吗？  - =， 没注意，但我改过来以后还是不行，不能建立套接字 这是怎么回事啊

user: user-3
content: 初学者都这样啦。我当初也是这种错误找了好久。拼写错误而已。

user: user-4
content: 哈哈，这个有点意思

user: user-5
content: 来搞笑的吗？

user: user-6
content: 如果是VC的话，装个visual assist 一般这种函数都不会打错的。

user: user-7
content: error: 'pritnf' was not declared in this scope

user: user-8
content: printf 打错了。。。

user: user-9
content: 三个printf，t和n的顺序反了

user: user-9
content: 26行，printf

user: user-9
content: close函数加上# include <unistd.h>

user: user-0
content: 在补充说一句，这段代码在cygwin上可以运行，但是我放到vc里面就出了这bug了， windows下socket编程难道有什么不一样的地方？？
user-0 提问: C语言画简单的心电图；

回复:
user: user-1
content: 如果是我，直接用一个数组记录每个点的坐标。

user: user-2
content: 我也没画过，给个思路。  你要知道这个“心”的图形函数，然后再画出来。最好用现成的库，否则得自己处理选择点和反走样。问问你身边用MATLAB的同学

user: user-3
content: 牛人啊！
user-0 提问: C语言写的俄罗斯方块，附源码

回复:
user: user-1
content: 我下载为什么是404？

user: user-2
content: 楼主，能否发一份源码，我想学习一下，谢谢！

user: user-3
content: 《Visual C++ 游戏开发经典案例详解》 第12章 俄罗斯方块游戏项目开发

user: user-4
content: 学习了，谢谢分享

user: user-3
content: 《Visual C++ 游戏开发经典案例详解》

user: user-5

user: user-6
content: 大神在你的源码中怎样修改才能使得在运行图中显示名字

user: user-7
content: 刘xx，你暴露了

user: user-8
content: 我也写了一个，界面比楼主的好看一点

user: user-9
content: 考虑做一个AI不？

user: user-10
content: 支持一下，我一直想自己写，但还没有写过。 这次要写一下。

user: user-11
content: 学习了，谢谢分享

user: user-12
content: 什么情况呢

user: user-13
content: 支持一下。支持一下。

user: user-14
content: 我也没办法运行 在错误中修正了一下可以了 以下提供projact VS2012  http://pan.baidu.com/s/1qW9DPhy

user: user-15
content: 厉害

user: user-16
content: hao de  好的

user: user-17
content: 学习了，谢谢分享

user: user-18
content: 好，等待2.0版升级彩色啊。 我好多年没玩了，以前DOS的年代是双手同时操作键盘玩超高速，后来手机什么的没意思，太慢

user: user-19
content: 有适当的说明就好了，有助于大家的理解
user-0 提问: 项目如何寻找

回复:
user: user-1

user: user-2
content: 感觉java的项目比较容易找，c和c++的比较难找。。

user: user-3
content: 写OS　写编译器

user: user-4
content: 如果要做项目的话，那就比较大了，不如做一些小的功能实现，虽然小，但也能练习基础知识，同时也比较容易完成，占用的时间比较少一些。再说了，大学里还有其他的学科需要学习。 建议：比较小的功能比如：简单的学生管理系统；字符串查找解析等等；

user: user-5
content: 直接在论坛找啊，谁要做什么就帮他做，最实际最有价值的了

user: user-6
content: 参与开源社区吧

user: user-7
content: 搜网络教程“学OpenGL编3D游戏”。

user: user-8
content: 去找一些开源项目跟，又有价值又有锻炼。

user: user-9
content: 去实验室找 去找兼职，实习
user-0 提问: gcc 编译 .c 文件出错

回复:
user: user-1
content: gcc -I include/ -fno-builtin -o kernel/start.o kernel/start.c

user: user-2
content: 自己装一个呗，别说不会装

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:limpc.so，这个链接库在我的电脑上都找不到，我用的Linux内核是3.13，gcc版本4.8.2，看楼主编译的文件名字应该是内核文件，楼主的编译器是不是不适合编译内核？我看这个链接库应该是编译器用的 我的是 gcc4.8.2   内核好像是3.10.17    我估计是linux发行版太古老 好多软件版本没更新

user: user-3
content: 引用 2 楼 u013776377 的回复:[quote=引用 1 楼 hnwyllmm 的回复:] limpc.so，这个链接库在我的电脑上都找不到，我用的Linux内核是3.13，gcc版本4.8.2，看楼主编译的文件名字应该是内核文件，楼主的编译器是不是不适合编译内核？我看这个链接库应该是编译器用的 我的是 gcc4.8.2   内核好像是3.10.17    我估计是linux发行版太古老 好多软件版本没更新 [/quote] 好吧，楼主请教内核模块的人吧

user: user-3
content: limpc.so，这个链接库在我的电脑上都找不到，我用的Linux内核是3.13，gcc版本4.8.2，看楼主编译的文件名字应该是内核文件，楼主的编译器是不是不适合编译内核？我看这个链接库应该是编译器用的
user-0 提问: void *fun和  (void *)fun 的区别

回复:
user: user-1
content: 一楼正解啊。

user: user-0
content: 引用 1 楼 oYinGui1 的回复:后者是强制转换。前者没看太明白，如果是void *fun();那就是返回值为void *类型的函数。。  大大看看这个帖子http://bbs.csdn.net/topics/390811403

user: user-2
content: 后者是强制转换。前者没看太明白，如果是void *fun();那就是返回值为void *类型的函数。。
user-0 提问: 急求指教，C语言编程出错（ Cannot open include file: 'head.h': ）

回复:
user: user-1
content: head.h 是自己写的，就在头文件中指明路径，比如 #include ‘/home/desktop/……/head.h’

user: user-2
content: 还是放同一目录吧

user: user-3
content: 要放在同一目录下 find.c 和 head.h

user: user-4
content: 吧head.h和c放一个目录下

user: user-5
content: /*head.h*/ #ifndef FIRST #include<stdlib.h> #include<stdio.h> #include<string.h> struct patient { char id[10]; char name[10]; char sex[10]; char casehist[200]; int callnum[12]; struct patient *next; }; int flag; void search(struct patient *temp); void listall(struct patient *temp); struct patient *insert(struct patient *head,struct patient *rear); void modify(struct patient *temp); struct patient *load(struct patient *head); void save(struct patient *head); #define FIRST #endif  这段另存为 head.h 文件
user-0 提问: 零基础学C语言先看哪本书好啊？

回复:
user: user-1
content: 谭浩强的C语言，另外自己上网找教学视频，多敲代码才是真的

user: user-2
content: 看书可以看谭浩强的，也可以看《C primer》 网上视频有小甲鱼和郝斌都讲得挺好的！

user: user-3
content: 0基础学C语言还是看视频比较好

user: user-4
content: 0基础就别选C语言作为入门语言了。 python、lua 》》 java 、C#

user: user-5
content: 《C primer》

user: user-6
content: 百度 C语言教程， 有简版的
user-0 提问: 请问windows怎么用exec()和fork(),如果不能那用什么函数可以达到同样的效果

回复:
user: user-1
content: 引用 2 楼 Intel0011 的回复:推荐《Windows核心编程》这本书，里面有详细讲解 于我心有戚戚焉。

user: user-2
content: 你不需要fork

user: user-3
content: 推荐《Windows核心编程》这本书，里面有详细讲解

user: user-4
content: CRT有_exec。对应的API是CreateProcess。  windows没有fork对应的API。 参考Porting from UNIX to Win32
user-0 提问: 零基础学C语言先看哪本书好啊？

回复:
user: user-1
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm

user: user-2
content: 引用 16 楼 lin5161678 的回复:[quote=引用 12 楼 u013697891 的回复:] [quote=引用 6 楼 xiaobai_dream 的回复:] 新手推荐《C Primer Plus》 谭浩强的那本书说实话，不推荐。 我就是看的谭书[/quote]那就快停下 [/quote] 完了，八个月前就看完了

user: user-3
content: 引用 12 楼 u013697891 的回复:[quote=引用 6 楼 xiaobai_dream 的回复:] 新手推荐《C Primer Plus》 谭浩强的那本书说实话，不推荐。 我就是看的谭书[/quote]那就快停下

user: user-4
content: the c programming language!!

user: user-5
content: 我推荐你去看 郝斌老师的 视屏， 他讲的真心不错， 如果需要可以密我：245913495

user: user-2
content: 引用 6 楼 xiaobai_dream 的回复:新手推荐《C Primer Plus》 谭浩强的那本书说实话，不推荐。 我就是看的谭书

user: user-6
content: 《C Primer Plus》

user: user-7
content: 1.《C Primer Plus》 2.《C语言程序设计现代方法 》-->这个相当好

user: user-8
content: 《C语言程序设计现代方法 》 如果穿越时光，我就给自己学这本

user: user-9
content: 《C Primer Plus》

user: user-10
content: C程序设计 学校一般都用这个吧

user: user-11
content: 新手推荐《C Primer Plus》 谭浩强的那本书说实话，不推荐。

user: user-12
content: c程序设计语言

user: user-13
content: 这个好像不少人都问过了啊  http://www.baidu.com/baidu?word=零基础学C语言先看哪本书好&ie=utf-8

user: user-14
content: C primer plus 不错， 基本编程还是靠实践，多敲代码。

user: user-0
content: 听很多老鸟说谭浩强的看多了不好
user-0 提问: 一个申请的国外老师出的题目，关于用C模拟排队系统的

回复:
user: user-1
content: 引用 4 楼 buyong 的回复:编程实现这个公式把？能用数学库么？能用的话找找开源库，直接搞定 应该不行的吧，这玩意看起来好像信号与系统里面的东西，好像要用傅里叶展开的吧……高数忘得差不多了。

user: user-2
content: 编程实现这个公式把？能用数学库么？能用的话找找开源库，直接搞定

user: user-0

user: user-0
content: 看不到图吗，我发一下原题

user: user-3
content: 说的太少了，不明白题目是干啥的？楼主的问题是什么
user-0 提问: 新手求教。谭浩强C程序语言软件下载win8

回复:
user: user-1
content: 不同的计算机操作系统有不同的编译器，Unix，Linux，windows，都是不同的。  我以一个高一C新手，被谭浩强的书折磨俩月，的苦逼学生党的身份告诉lz，零基础学C看那本书，真心不明智！我估计你也是看的云里雾里。还是看看我在一楼说的那本书吧。那本书考二级证或许看看。太误导新人了。

user: user-1
content: 如果零基础，看谭浩强的c程序设计，这不是明智的选择。建议lz看C Primer Plus 第五版（人民电邮出版社）谭浩强的C程序设计写的太过笼统，不适合新人看，我一开始看了一段时间，没有学到什么。他的书比较注重算法。  你从书本厚度上，就大致应该知道，哪个对C介绍的详细。
user-0 提问: 求各路高手来看看！linux下的readline问题

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

user: user-2
content: prompt初始化或改成NULL
user-0 提问: u8*指针赋值出错

回复:
user: user-0
content: 问题是：指针使用前未初始化。使用malloc即可。

user: user-1
content: static void test(u8 *src)  {        u8 *tmp;        u8 buf[2];   tmp=(u8 *)buf;  *tmp= 0xFFu;//等价于buf[0]=0xFFu;  *tmp++ = 0xFDu;//等价于buf[1]=0xFDu;          tmp = src; ｝

user: user-2
content: 不知道你断到哪句了，函数一开始的tmp指针没有初始化，你调用 *tmp = 0xFF 程序没挂掉算是运气的。
user-0 提问: 求大神，谭浩强的c语言第四版第一章的练习题第6题怎么做。

回复:
user: user-0
content: 谢谢大家给我的回答

user: user-1
content: 这种问题不应该自己想么？这题都问别人，请问还有什么问题是lz能自己想出来的呢？

user: user-2
content: 方法一运行截图：  方法二运行截图：  方法三运行截图：

user: user-2
content: 引用 楼主 qq_16539597 的回复:求大神，谭浩强的c语言第四版第一章的练习题第6题怎么做。 方法一： #include<stdio.h> int main() { 	int max(int x,int y,int z);/*函数声明*/ 	int a,b,c,M;/*定义三个整型变量abc和存放最大值变量M*/ 	printf("请键盘输入三个整型数据：\n"); 	scanf("%d%d%d",&a,&b,&c);/*键盘输入三个整型数据*/ 	M=max(a,b,c);/*传递a，b，c三个参数到函数max里。*/ 	printf("%d,%d,%d的最大值为：\n%d\n",a,b,c,M);/*打印出最大值*/ 	return 0; } /*自定义名称为max的函数,函数返回值类型整型，参数传递三个整型数据*/ int max(int x,int y,int z)  { 	int w,t;/*定义局部变量w，t*/ 	if(x>y)w=x;/*如果x的值大于y，就把x的值赋值给w；*/ 	else w=y;/*否则x的值小于或者等于y，就把y的值赋值给w*/ 	if(w<z)/*如果前两个数的最大值w小于z的值，那么将执行下列代码*/ 	{  		/*下列代码便于你理解，这么给你解释*/ 		t=w;/* w中的水放到空杯子t中。*/ 		w=z;/*z中的水放到空杯子w中*/ 		z=t;/*t中的水放到z杯子中。*/ 	} 	return (w);//返回三个数的最大值*/ } 方法二： 上面代码也可以这么写 #include<stdio.h> /*自定义名称为max的函数,函数返回值类型整型，参数传递三个整型数据*/ int max(int x,int y,int z)  { 	int w,t;/*定义局部变量w，t*/ 	if(x>y)w=x;/*如果x的值大于y，就把x的值赋值给w；*/ 	else w=y;/*否则x的值小于或者等于y，就把y的值赋值给w*/ 	if(w<z)/*如果前两个数的最大值w小于z的值，那么将执行下列代码*/ 	{  		/*下列代码便于你理解，这么给你解释*/ 		t=w;/* w中的水放到空杯子t中。*/ 		w=z;/*z中的水放到空杯子w中*/ 		z=t;/*t中的水放到z杯子中。*/ 	} 	return (w);//返回三个数的最大值*/ } int main() { 	int a,b,c,M;/*定义三个整型变量abc和存放最大值变量M*/ 	printf("请键盘输入三个整型数据：\n"); 	scanf("%d%d%d",&a,&b,&c);/*键盘输入三个整型数据*/ 	M=max(a,b,c);/*传递a，b，c三个参数到函数max里。*/ 	printf("%d,%d,%d的最大值为：\n%d\n",a,b,c,M);/*打印出最大值*/ 	return 0; } 方法三： #include<stdio.h> int main() { 	int a,b,c,M,t;/*定义三个整型变量abc和存放最大值变量M*/ 	printf("请键盘输入三个整型数据：\n"); 	scanf("%d%d%d",&a,&b,&c);/*键盘输入三个整型数据*/ 	if(a>b) 		M=a; 	else  		M=b; 	if(M<c) 	{ 				/*下列代码便于你理解，这么给你解释*/ 		t=M;/* m中的水放到空杯子t中。*/ 		M=c;/*z中的水放到空杯子w中*/ 		c=t;/*t中的水放到z杯子中。*/ 	} 	printf("三个数的最大值为：\n%d\n",M);/*打印出最大值*/ 	return 0; }

user: user-3
content: 引用 1 楼 user-6 的回复:求最大值 a与b比较，找出大的 把大的赋给a， a再与c比较，输出大的

user: user-3
content: 不好意思！回复错了

user: user-3
content: 看书可以看谭浩强的，也可以看《C primer》 网上视频有小甲鱼和郝斌都讲得挺好的！

user: user-0
content: 这个程序怎么写：比较a,b,c的较大者，写出过程最好了

user: user-4
content: 引用 2 楼 fox_liucx 的回复:题目你都不贴出来，难道让大家去翻书找题？ 就是，而且还是直接伸手要答案  http://bbs.csdn.net/topics/390623576

user: user-5
content: 题目你都不贴出来，难道让大家去翻书找题？

user: user-6
content: 求最大值 a与b比较，找出大的 把大的赋给a， a再与c比较，输出大的
user-0 提问: opencv cvSaveImage保存图像问题！！急急急啊！！

回复:
user: user-1
content: 你的问题在于不知道怎么使文件名可变是吧？可以这么做：   int idx=0;    char adr[128]={0};   sprintf(adr, "E:/Notemp/%d_imgNo_temp.jpg", ++idx);   cvSaveImage(adr, imgNo );  文件名为%d_imgNo_temp.jpg,%d部分会被后面idx的值填充。当然前提是要E：/Notemp/ 这个文件夹是存在的，不然会出错。

user: user-2
content: 请问楼主的问题是怎么解决的？我也有类似的问题，总是报错

user: user-3
content: 定义一个 char imgname[80][100]用来存储文件名,不过这应该是一个二维数组，每一行代表一个路径，然后一个指针指向这个路径，执行完之后指针自加1指向下一行，不过要把库里面的*filename类型改成非常量（就是把const去掉），希望能帮到你。

user: user-4
content: 用imwrite()函数

user: user-5
content: lz问题解决了没，我遇到和你一样的问题。

user: user-6
content: 目测你的.太多了。

user: user-6
content: 引用 5 楼 user-7 的回复:[quote=引用 4 楼 wo252518553 的回复:] 我知道了，因为cvSaveImage不能创建不存在的文件夹。。。。。搞了一整天白忙活了。。。。 很少API会自动创建一个文件夹的。[/quote] 恰好今天看到了： MakeSureDirectoryPathExists The MakeSureDirectoryPathExists function creates all the directories in the specified DirPath, beginning with the root.  BOOL MakeSureDirectoryPathExists(   IN LPSTR DirPath   );   Parameters DirPath  Pointer to a null-terminated string that specifies a valid path name. If the final component of the path is a directory, not a filename, the string must end with a backslash (\) character.  Return Values If the function succeeds, the return value is TRUE.  If the function fails, the return value is FALSE. To retrieve extended error information, call GetLastError.  Remarks Each directory specified is created, if it does not already exist. If only some of the directories are created, the function will return FALSE.  QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later. Available as a redistributable for Windows 95.   Windows CE: Unsupported.   Header: Declared in imagehlp.h.   Import Library: Use imagehlp.lib.  See Also PE Image Helper (ImageHlp) Overview, ImageHlp General Functions

user: user-7
content: 引用 4 楼 wo252518553 的回复:我知道了，因为cvSaveImage不能创建不存在的文件夹。。。。。搞了一整天白忙活了。。。。 很少API会自动创建一个文件夹的。

user: user-0
content: 我知道了，因为cvSaveImage不能创建不存在的文件夹。。。。。搞了一整天白忙活了。。。。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:cvSaveImage("d:\\img\\a\\result1.jpg”,img);求大神指导啊……

user: user-0
content: 请问，如果我定义一个 char imgname[80]用来存储文件名，然后再用strcat（“路径A”，imgname） 最后cvSaveImage（“路径A”，Img）可以吗？  其实是这样的，这个imgname文件名是 file\img.jpg 所以strcat以后新的路径就是\.....\...\img.jpg  ，然后我再把最后的.jpg删掉就变成\.....\...\img 接下来strcat（“\.....\...\img”，“\imgggggg.jpg”） 这样我想要的路径基本就是\.....\...\img\imgggggg.jpg  最后用cvSaveImage（“\.....\...\img\imgggggg.jpg”，img） 这么做对吗？可是总是存不上呢？？？而且我想生成的img文件夹也没有生成，什么变化都没有，这是怎么回事？求指导！！

user: user-6
content: cvSaveImage("d:\\img\\a\\result1.jpg”,img);
user-0 提问: SWU 求助

回复:
user: user-1
content: long int ftell ( FILE * stream ); Get current position in stream Returns the current value of the position indicator of the stream.  For binary streams, this is the number of bytes from the beginning of the file.  For text streams, the numerical value may not be meaningful but can still be used to restore the position to the same position later using fseek (if there are characters put back using ungetc still pending of being read, the behavior is undefined).

user: user-2
content: 楼上说得不错。 不过我觉得没机会判断文件头吧？主要的问题还是文件尾。

user: user-3
content: 文件尾是 feof 可以判断 文件头可以试着用 ftell 看返回值是否为0
user-0 提问: win32 C RegisterClass失败

回复:
user: user-1
content: WNDCLASS wndcls;改成 WNDCLASS wndcls = {}; 不然你那样的代码，这wndcls里面好几个成员都是无效值。。。

user: user-0
content: 引用 1 楼 M173475237 的回复:问题解决了...WNDCLASS赋值有问题 40分,,,免费送出去

user: user-0
content: 问题解决了...WNDCLASS赋值有问题
user-0 提问: 题挺难，求助各位大神

回复:
user: user-1
content: 引用 5 楼 zhao4zhong1 的回复:两个或多个弹孔不完全重叠呢？ http://image.baidu.com/i?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1430276010019_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E9%9F%A6%E6%81%A9%E5%9B%BE

user: user-2
content: 参考步骤写的提示还不错，就按照指示搜索查阅资料解决

user: user-3
content: 这个题连个模型都没有，怎么写程序，感觉像是论述题

user: user-4
content: 你好，我想问一下这个问题得到解决了吗，我也想解决这个问题，急求啊！

user: user-5
content: 如果两个弹孔重叠了，怎么算？呵呵......

user: user-0
content: C语言可以调用函数，MATLAP不让。。求各位大神给点力

user: user-0
content: 。。。。。图片就是那两个图片。。。

user: user-1
content: http://image.baidu.com/i?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E6%9C%89%E5%BC%B9%E5%AD%94%E7%9A%84%E9%9D%B6

user: user-0
content: 跪求个程序，我们老师不让我们调用函数，跪求啊。

user: user-0
content: 这道题快折磨死小弟了。求救啊。。。

user: user-0
content: 不要这么说啊。

user: user-1
content: 我觉得出题的老师有点脑残。

user: user-0
content: 说实话你们说的大多数小弟都不懂。。。

user: user-0
content: 各位不好意思啊。下午上课了，只需要看B图，B图的单孔已经标注出来了啊

user: user-6
content: 参考步骤都出来了，就这么干吧，步骤1和步骤3可以确定弹孔位置，这个确定算法是重点，只要这个确定了，剩下的就都不是问题了。 （3）	检测出每个弹孔的圆心，作为鉴别打靶的环数，可采用质心算法 （1）	检测出b图中所有弹孔的位置，可采用背景建模的方法，或者霍夫变换。

user: user-7
content: lz这是要被调戏了的节奏

user: user-1
content: 两个或多个弹孔不完全重叠呢？

user: user-8
content: （1） 直接相减吧，b-a，然后二值化 （2） 参照opencv的cvFindContours()，或者MATLAB的bwlabel() （3） 每个弹孔区域用质心法...（搜一下公式） （4） hough变换（参照opencv 的cvHoughCircles）可以得到一系列同心圆，各质心到圆心的距离... （5） ......  如果是要求所有的算法自己实现，那你确实需要花点时间，如果可用现成的，那应该很好做

user: user-9
content: 引用 1 楼 91program 的回复:如果两个弹孔重叠了，怎么算？呵呵......算脱靶啊

user: user-1
content: 引用 1 楼 91program 的回复:如果两个弹孔重叠了，怎么算？呵呵...... 说到重点了！
user-0 提问: 二分法算法时间复杂度分析

回复:
user: user-1
content: 64, 32, 16, 8, 4, 2, 1, 0, -1            7，6， 5， 4， 3， 2，1 红色部分就是+2

user: user-0
content: 自己顶...................

user: user-0
content: 感谢！结贴!!

user: user-1
content: T(N) =O(f(N)) 的精确表示是 对于任意大的N，N是自然数。。。。           任意大的意思是，如果有机若干N不满足，并且此后所有都满足，忽略这些不满足的 有 T(N) <= c * f(N)  c是个常数 在这里用 T(N)=O(f(N))，表示分析的结果是忽略 c 的

user: user-1
content: 注意这里是算法分析，不是实际计算 算法分析，考虑的情况比实际计算（执行）复杂，不可能完全精确计数。 你这里一个具体的数据，把问题简单化，片面化了，所以不具有代表性。  如果这得需要精确检测，你需要所有合乎要求的数据都拿来测试，一一检测 此外，注意算法分析，不是精确计数。。它分析的是数量级。 一般来说,算法分析的结果多半是这样的： T(N) =O(f(N))  基本上是以下几种数据中的一个，有时候也会用O(n^(1/3)),O(n^(4/3)) 这样的 表示。  O(1)<O(log(n))<O(log*(n))<n<O (nlog(n))<O(n^2)<O(n^k) ; k>2

user: user-1
content: 这是考虑算法，还是实际统计，算法复杂度，本来就不可能绝对准确， 只是按照某种方式估计的大概复杂度 你的常数和例子中的并不一致，注意at most log(n - 1) + 2. at most 至多，就是说不会超过，你这里是 High - Low: 8   High - Low: 3 High - Low: 0 High - Low: -1 共4步 4  < log2(8)+2 =3+2 =5  满足 4<=5 的要求，所以这个思路没有错误

user: user-0
content: 自己定!!!!!!!!!!!!!!!!!!!

user: user-0
content: 引用 2 楼 user-1 的回复:64, 32, 16, 8, 4, 2, 1, 0, -1            7，6， 5， 4， 3， 2，1 红色部分就是+2          int result = binarySear(a, 0, 9); 	System.out.print("binarySear() result: "+result);  	public static int binarySear(int[] A, int X, int N){ 		int Low, Mid, High; 		Low = Mid = 0; 		High = N-1; 		while (Low <= High) { 			System.out.print("High - Low: "+(High - Low)); 			System.out.print("\n"); 			Mid = (Low + High)/2; 			if(A[Mid] < X) 				Low = Mid + 1; 			else if (A[Mid] > X)  				High = Mid - 1; 			else  				return Mid; 			 		} 		System.out.print("High - Low: "+(High - Low)); 		System.out.print("\n"); 		return -1; 	}   输出结果:  High - Low: 8 High - Low: 3 High - Low: 0 High - Low: -1 binarySear() result: -1   根据算法在计算器上的计算结果:  >>> math.log2(8)+2 5.0   这样测试来看的话，Log(n-1)+2是不准的
user-0 提问:  如何判断算法所消耗的时间。

回复:
user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！  VC6企业版：   Run the Profiler from the Development Environment Home |  Overview |  Details  Feature Only in Professional and Enterprise Editions   Profiling is supported only in Visual C++ Professional and Enterprise Editions. For more information, see Visual C++ Editions.  The development environment will profile the active project’s target. To profile more than one project, you should use custom batch files; see Profiling Multiple .DLL and .EXE Files for more information.  See Select Code to Profile for information on how to specify which code shall be profiled.  To run the profiler from the development environment  On the Build menu, choose Profile to display the Profile dialog box, as shown in the figure below.  In the Profile Type box, click one of the following option buttons:  Function Timing   Function Coverage   Line Coverage   Merge   Use Custom and the Custom Settings text box to run a batch file that contains profiler commands. See Run the Profiler from the Command Line for information on why you might want to batch and execute your own profiler commands. See Running a Custom Batch File for more information on specifying a batch file from the development environment.   Advanced settings is where you can specify PREP Phase I options.  Click OK.  Profile Dialog Box    Note   If you haven’t built your current project with profiling enabled, an error message lets you know that you need to rebuild your project. See Enable Profiling for more information.

user: user-2
content: 推荐使用boost::progress_timer，用来计算时间很好

user: user-3
content: 1. 算法复杂度分析: big O 2. 操作系统API，查看进程所花费的用户时间，系统时间等， linux time 就可以了。 3 自己计时，误差太大（跟运行环境有关）

user: user-4
content: 运行前取个time值，运行完成后再取一个值，两者时间差不就是了么?
user-0 提问: 我写了一c primer plus 第九章的一个旅馆收费系统的函数，编译时错误为：未定义函数pow(),请帮我看看

回复:
user: user-1
content: Ubuntu系统上怎么运行这个

user: user-2
content: 我没有在/lib/下找到libm.a文件，怎么安装

user: user-3
content: http://blog.csdn.net/alzy2011/article/details/17246189

user: user-3
content: 难道数学库丢了？ 楼主看看/usr/lib/libm.a这个文件在吗? 如果有这个文件，那很可能是链接路径的设置有问题

user: user-0
content: 我gcc版本4.8.2.我按你说的编译了，还是不行。

user: user-3
content: 楼主，gcc命令行里不要加头文件，应该是 gcc hotel.c hotel_fun.c 或者gcc -lm hotel.c hotel_fun.c 把hotel.h去掉

user: user-3
content: 奇怪，我刚在cygwin和ubuntu上都试了，都可以直接编译链接成功，不用-lm 可我明明记得以前需要加-lm的呀 难道是最近的gcc都自动链接数学库了？ 楼主的gcc什么版本？我的是4.8.2和4.6.3

user: user-3
content: gcc -lm hotel.c ......
user-0 提问: DLL 函数

回复:
user: user-1
content: 串口通讯可以直接发命令码。。。

user: user-2
content: 引用 楼主 wangmin_0522 的回复:在学习关于射频卡的读写操作。我这里有个厂家给的函数说明，看不懂，求解： void Wake_Up(unsigned char * PassWord) 功能      ： 唤醒休眠的卡片；  参数      ：*PassWORD  ： 四个字节的卡片数码；  命令码    ： 　　　　AA BB , len1 len2 , 00 00 , 03 20 , Pw1 Pw2 Pw3 Pw4 ,xor  　　　　Sample ：aa bb , 09 00 ,00 00 ,03 20 , 77 77 77 77 , 23 Respond : aa bb len1 len2 , 00 00 , 01 20 , Status ,xor (请参考返回数据格式  这个参数不是很理解。 还有命令码。有知道的 可以教下吗？  说的不够清楚,可以直接找厂家咨询下

user: user-3
content: 这类设备一般是用某种通信控制的，所谓通信，就是两边互发纯数据，根据数据的内容和格式来判断对方想干什么 从楼主给的例子中可以看出，【唤醒休眠的卡片】这个功能，需要电脑给读卡器发送“AA BB , len1 len2 , 00 00 , 03 20 , Pw1 Pw2 Pw3 Pw4 ,xor ”这么一串数据 结合Sample来看，前两个字节是0xAA和0xBB,第三第四个字节是后续数据的字节数，低位在前高位在后，第五第六个字节都是0，第七到第十个字节是密码（pw即password），第十一个字节是前面一部分字节的按位异或结果用来校验是否有数据错误 Wake_Up这个函数从函数说明来看，需要你输入一个指针，指针指向四个字节的密码，函数的功能就是直接把输入的这四个字节复制到上面这一串数据中然后把整串发送出去 如果只是单纯用厂家提供的控制函数，可以不必关心命令码的内容，但如果你想要理解设备具体是怎么工作的，甚至不用厂家提供的DLL自己开发一个控制模块，就需要你了解它的通信方式和通信协议，所谓通信协议，就是两边互发的那一串一串数据中每一个字节都用来代表什么意义
user-0 提问: 求助，新手求助，哪位大神可以帮我写一下这个程序，用c语言

回复:
user: user-1
content: http://zhidao.baidu.com/link?url=zi8wPDNqkary01B-rMgZOu0KMZh52nmiUYPSdWSHQF_a9croNLI3xDGgbOv_siWJ4F1vPbwJkeNuJ2jku1Kn4K http://www.baidu.com/baidu?word=给出三维空间中的n个点（不超过10个）%2C求出n个点两两之间的距离&ie=utf-8  自己如果实在是不会做，楼主可以先从网上搜搜，看有答案，没有，最好别，不会了不思考，也不想方法就直接找人要答案——http://bbs.csdn.net/topics/390623576

user: user-2
content: 引用 1 楼 qq_16514969 的回复:急急急！，求助啊 你急也没用啊 作业这种东西得靠自己啊 这会你得培养成一个习惯，就是想要得到必须付出。别人跟你又不熟，凭什么无缘无故帮你写作业？只因为你急？

user: user-0
content: 急急急！，求助啊
user-0 提问: 文件操作 fwrite

回复:
user: user-1
content: 引用 6 楼 wenbo228228 的回复:[quote=引用 1 楼 Automation_dmu 的回复:] "w"(只写) 为输出打开一个文本文件 Student的头4个字节是一个int， 小端机器的内存就是 0x17 0x00 0x00 0x00,  显然作为文本，这些是乱码。 那怎么做才不出现乱码？ [/quote]这个不是乱码，windows的记事本会将二进制数据按字符显示，你可以将这个int转化为字符串，然后再存储

user: user-0
content: 怎么最近老是弹出垃圾网页？管理员管一下诶！

user: user-0
content: 引用 1 楼 Automation_dmu 的回复:"w"(只写) 为输出打开一个文本文件 Student的头4个字节是一个int， 小端机器的内存就是 0x17 0x00 0x00 0x00,  显然作为文本，这些是乱码。 那怎么做才不出现乱码？

user: user-0
content: 我仅仅是想知道怎么做才可以把数据写入目标文件，而不是在文件中出现乱码，其他深层次的原因不深究了，实在没有这个精力

user: user-2
content: 我觉得这个设计的内容挺广泛的，楼主过度深究这个问题只是想弄明白其中的道理吗，我觉有些道理还是不要太明白的好

user: user-3
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-1
content: 你可以使用UltraEdit等工具查看文本的16进制数据，应该就明白了

user: user-1
content: "w"(只写) 为输出打开一个文本文件 Student的头4个字节是一个int， 小端机器的内存就是 0x17 0x00 0x00 0x00,  显然作为文本，这些是乱码。
user-0 提问: 一道 static 的题

回复:
user: user-1
content: C语言中static的作用 http://blog.csdn.net/xuzhouweihao/article/details/27534779  static的作用，讲的很透彻。

user: user-2
content: 引用 4 楼 pengxn 的回复:还是运算的顺序问题 ，  return(fact( )*(i+1));  return((i+1)*fact( )); 楼上正解，这个跟乘号操作符的左右操作数的计算顺序有关，标准并未规定乘号操作符左右操作数的计算顺序，编译器可以先计算左操作数，也可以先计算右操作数，程序中最好不要依赖这种编译器自定义行为。 乘号表达式只有一个序列点，在同一个序列点中多次写变量或者既写变量又读变量的值会导致未定义行为。 你的这个式子中先计算fact()这个操作数，然后一直计算到当i为0的时候开始回归，此时最里层fact()返回1，而（i+1)也是1，得到上一层的fact()为1；此时因为i是静态变量，回归的时候值仍旧为1，因此最后结果为1 如果修改成（i+1)*fact()可以得到想要的结果，因为先计算的是（i+1),但是最好不要依赖这种编译器特定行为。求阶乘的递归算法参考3楼。

user: user-3
content: 还是运算的顺序问题 ，  return(fact( )*(i+1));  return((i+1)*fact( ));

user: user-4
content: 递归有两个阶段，一个是递推阶段，一个是回归阶段。 递推阶段很好理解，就是在fact中再次使用fact，一直到终止条件。 回归阶段呢，就是从终止的函数开始，一层一层地回归，直到回到你主函数调用的那一层。 问题就在于你使用了函数内部的静态变量，当你递推到i为0，嗯，这时计算机知道递推到顶了，要开始回归，即求解。这时，i为0，回归又不会使他增加，那么每一层回归都执行了if(i==0)的语句，每一层都返回1，直到最后得到1的函数结果输出。 如果你要达成阶乘的递归函数目的，就应该把每一层的标志换为函数参数：#include "stdio.h"  int fact(int n) { 	if (n == 0) return 1; 	else 		return(fact(n - 1)*n); } int main() { 	printf("%d\n", fact(5)); 	return 0; }

user: user-5
content: 引用 楼主 u013985488 的回复:#include "stdio.h"  int fact( )  {  	static int i=5;  	if(i==0) return 1;      else  	{ 	i--; 	return(fact( )*(i+1));  	}  }  int main( )  {  	printf("%d\n",fact());      return 0; }   输出是1，我不理解了  搞清楚static关键字就知道为啥了

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

回复:
user: user-0
content: 谢谢大侠，就是这个问题困扰了我，按照你说的办法，解决了。谢谢你。

user: user-1
content: const uchar * const CD_ab1[ ]; const uchar * const * const WA_MAR[ ]; 单片机没用过，单从语法上讲，指针的值和指针的内容要分别const，一个const不能修饰两个不同的东西
user-0 提问: C中同名函数

回复:
user: user-0
content: 引用 楼主 luo15979039240 的回复:code1 //test.c #include <stdio.h> #include <stdlib.h>  int main() {  char *buf = NULL;   buf = (char *)malloc(10);  if(NULL == buf)  {   printf("failed.\n");  }  else  {   printf("%p.\n", buf);   free(buf);  }   return 0; }  在linux下编译 gcc test.c -o test ./test 0x12345678//地址乱写的   code2  code1 //test.c #include <stdio.h> #include <stdlib.h>  void *malloc(unsigned long size) {  printf("what a xxoo day.\n");  return NULL; }  int main() {  char *buf = NULL;   buf = (char *)malloc(10);  if(NULL == buf)  {   printf("failed.\n");  }  else  {   printf("%p.\n", buf);   free(buf);  }   return 0; }  在linux下编译 gcc test.c -o test ./test what a xxoo day. failed  问题。像这样存在几个同函数， 1 编译为什么能通过 2 怎么知道系统使用哪个  我在windows下试了，编译不过去

user: user-1
content: code1中， test.o这个编译单元，找不到符号malloc的定义，所以会在链接时，查找其定义，于是找到了c库中的malloc。 code2中，test.o这个编译单元，找到了符号malloc的定义，所以不会在链接时再去查找其定义，于是使用了本地malloc。 可以用readelf 或者 objdump查看目标文件的符号表，相信会有收获。

user: user-2
content: 代码里的函数优先于库中的函数
user-0 提问: fwprintf函数使用问题

回复:
user: user-1
content: mbstowcs Converts a sequence of multibyte characters to a corresponding sequence of wide characters.  size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );  Routine Required Header Compatibility  mbstowcs <stdlib.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  If mbstowcs successfully converts the source string, it returns the number of converted multibyte characters. If the wcstr argument is NULL, the function returns the required size of the destination string. If mbstowcs encounters an invalid multibyte character, it returns –1. If the return value is count, the wide-character string is not null-terminated.  Parameters  wcstr  The address of a sequence of wide characters  mbstr  The address of a sequence of multibyte characters  count  The number of multibyte characters to convert  Remarks  The mbstowcs function converts count or fewer multibyte characters pointed to by mbstr to a string of corresponding wide characters that are determined by the current locale. It stores the resulting wide-character string at the address represented by wcstr. The result is similiar to a series of calls to mbtowc. If mbstowcs encounters the single-byte null character ('\0') either before or when count occurs, it converts the null character to a wide-character null character (L'\0') and stops. Thus the wide-character string at wcstr is null-terminated only if a null character is encountered during conversion. If the sequences pointed to by wcstr and mbstr overlap, the behavior is undefined.  If the wcstr argument is NULL, mbstowcs returns the required size of the destination string.   Example  /* MBSTOWCS.CPP illustrates the behavior of the mbstowcs function  */  #include <stdlib.h> #include <stdio.h>  void main( void ) {     int i;     char    *pmbnull  = NULL;     char    *pmbhello = (char *)malloc( MB_CUR_MAX );     wchar_t *pwchello = L"Hi";     wchar_t *pwc      = (wchar_t *)malloc( sizeof( wchar_t ));      printf( "Convert to multibyte string:\n" );     i = wcstombs( pmbhello, pwchello, MB_CUR_MAX );     printf( "\tCharacters converted: %u\n", i );     printf( "\tHex value of first" );     printf( " multibyte character: %#.4x\n\n", pmbhello );      printf( "Convert back to wide-character string:\n" );     i = mbstowcs( pwc, pmbhello, MB_CUR_MAX );     printf( "\tCharacters converted: %u\n", i );     printf( "\tHex value of first" );     printf( " wide character: %#.4x\n\n", pwc ); }   Output  Convert to multibyte string:    Characters converted: 1    Hex value of first multibyte character: 0x0e1a  Convert back to wide-character string:    Characters converted: 1    Hex value of first wide character: 0x0e1e   Data Conversion Routines |  Locale Routines |  Interpretation of Multibyte-Character Sequences  See Also   mblen, mbtowc, wcstombs, wctomb, MultiByteToWideChar

user: user-2
content: 先搞清文件和字符串编码方式是否相同？
user-0 提问: C中 ReleaseByteArrayElements到底什么意思？起什么作用呢？

回复:
user: user-1
content: 决定是否对plbFeaTest释放，为0的时候  plbFeaTest  会被内存释放，你做下实验啊，运行完这个函数 plbFeaTest在delete就会报double free的错了

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-2
content: google

user: user-0
content: 有人帮忙吗？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:google google上不去，baidui 没有很好的解释。