Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问:  求助source insight的注释是这样看不清怎么办？

回复:
user: user-1
content: View -> Draft View (Alt + F12)  Nice. This is the answer. Who can tell me why?

user: user-2
content: 引用 8 楼 ForestDB 的回复:另外可以试试View -> Draft View (Alt + F12) 这个是对的

user: user-3
content: 谢谢

user: user-4
content: 注意观察细节。

user: user-4
content: 引用 7 楼 stormier 的回复:[quote=引用 6 楼 ForestDB 的回复:] 为什么改“Comment Heading1”而不是改“Comment”？ 因为comment是这样[/quote] 注意图片上的sample，说明没有Verdana字体，sample显示很怪异，而前一张图Comment Heading1的字体是Arial，显示的sample就很正常，说明有Arial字体。

user: user-0
content: 引用 8 楼 ForestDB 的回复:另外可以试试View -> Draft View (Alt + F12) 这个成功了，多谢呀！

user: user-4
content: 另外可以试试View -> Draft View (Alt + F12)

user: user-0
content: 引用 6 楼 ForestDB 的回复:为什么改“Comment Heading1”而不是改“Comment”？ 因为comment是这样

user: user-4
content: 为什么改“Comment Heading1”而不是改“Comment”？

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:手动设置一下选项中注释文字的字体 同上

user: user-0
content: 引用 2 楼 derekrose 的回复:1楼...  在setting里面修改font 没找到setting 在这里点done没用

user: user-5
content: 手动设置一下选项中注释文字的字体

user: user-6
content: 1楼...  在setting里面修改font

user: user-7
content: 英文的，好的老外都这种风格的注释
user-0 提问: 新手编程出现关于fork（）的小问题

回复:
user: user-1
content: 1 因为这个时候套接字进入的是半关闭状态，也就是主动关闭的一方进去了TIME_WAIT状态，   中间有2MSL时间的，可以通过setsockopt函数设置下REUSEADDR 地址服用！ 2 没看到你S端怎么发送消息的！

user: user-0
content: 求解答啊求解答

user: user-2
content: 1 因为这个时候套接字进入的是半关闭状态，也就是主动关闭的一方进去了TIME_WAIT状态，   中间有2MSL时间的，可以通过setsockopt函数设置下REUSEADDR 地址服用！ 2 没看到你S端怎么发送消息的！  -------------主动关闭的那一方，换个端口也可以

user: user-3
content: int setsockopt(int s,int level,int optname,const void * optval,,socklen_toptlen); 函数说明  setsockopt()用来设置参数s所指定的socket状态。参数level代表欲设置的网络层，一般设成SOL_SOCKET以存取socket层。参数optname代表欲设置的选项，有下列几种数值: SO_DEBUG 打开或关闭排错模式 SO_REUSEADDR 允许在bind（）过程中本地地址可重复使用 SO_TYPE 返回socket形态。 SO_ERROR 返回socket已发生的错误原因 SO_DONTROUTE 送出的数据包不要利用路由设备来传输。 SO_BROADCAST 使用广播方式传送 SO_SNDBUF 设置送出的暂存区大小 SO_RCVBUF 设置接收的暂存区大小 SO_KEEPALIVE 定期确定连线是否已终止。 SO_OOBINLINE 当接收到OOB 数据时会马上送至标准输入设备 SO_LINGER 确保数据安全且可靠的传送出去。 参数  optval代表欲设置的值，参数optlen则为optval的长度。 返回值  成功则返回0，若有错误则返回-1，错误原因存于errno。 附加说明  EBADF 参数s并非合法的socket处理代码 ENOTSOCK 参数s为一文件描述词，非socket ENOPROTOOPT 参数optname指定的选项不正确。 EFAULT 参数optval指针指向无法存取的内存空间
user-0 提问: 求助：linux进程中调用system函数启动另外一个程序的问题

回复:
user: user-1
content: 怎么用了fork还用system

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:不要企图优雅的结束（因为这是不可能办到的） 而要在烂的不能再烂的摊子上也能重整河山！ Elegant finish is impossible while we should build a new world on rubbish

user: user-3
content: 引用 5 楼 u013286150 的回复:[quote=引用 2 楼 max_min_ 的回复:] system是开启新的进程的！不会继承远进程里的任何东西！ 两个进程没有关系。只是当前进程会阻塞而已！ 从实际测试来看，确实是占用了。[/quote]  难道你不知道你的代码至少启动了4个进程？？？

user: user-4
content: system是开启新的进程的！不会继承远进程里的任何东西！ 两个进程没有关系。只是当前进程会阻塞而已！

user: user-5
content: system打开另外的程序，是阻塞式的吧。不会继承原进程的所有资源吧，fork会把原来复制一份出来。

user: user-6
content: 上原始代码。

user: user-7
content: 线程！！？？

user: user-0
content: 引用 2 楼 max_min_ 的回复:system是开启新的进程的！不会继承远进程里的任何东西！ 两个进程没有关系。只是当前进程会阻塞而已！ 从实际测试来看，确实是占用了。

user: user-8
content: 不要企图优雅的结束（因为这是不可能办到的） 而要在烂的不能再烂的摊子上也能重整河山！

user: user-3
content: 都fork了 还用啥system啊 fork后想执行个新程序 用exec啊。 exec那一族函数参数可以控制各种继承的东西。 你这个资源释放问题 不是system()造成的。
user-0 提问: 关于数据溢出问题

回复:
user: user-1
content: 004119AD  mov         byte ptr [ebp-11h],7Fh  004119B1  movsx       eax,byte ptr [ebp-11h]  004119B5  mov         esi,esp  004119B7  push        eax   004119B8  push        offset string "a = %d\n" (417724h)  004119BD  call        dword ptr [__imp__printf (41A310h)]  004119C3  add         esp,8   看编译器汇编，直接取了低地址一个BYTE

user: user-2
content: 溢出了，肯定就先转化，然后再截取了

user: user-3
content: 引用 1 楼 u012997273 的回复:恩，的确是，int -129  = 0FFFFFF7F 赋值给char a 的时候，截断为0x7F 0x7F就是127了 0xFFFFFF7F

user: user-3
content: 恩，的确是，int -129  = 0FFFFFF7F 赋值给char a 的时候，截断为0x7F 0x7F就是127了

user: user-4
content: %d输出，那么它会把a的值隐式提升为int类型；首先，char类型的a变量标识不了-129即会截断！然后，截断后数据在隐式提升为int类型！

user: user-5
content: -129就是int类型。

user: user-6
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-0 提问: C语言fseek函数,返回值总是-1,继续执行结果正确.求解...

回复:
user: user-0
content: 我错了 是代码逻辑有问题.

user: user-1
content: 引用 7 楼 luoyihu 的回复:[quote=引用 6 楼 zmlovelx 的回复:] fp有问题，可能文件没有被打开成功， fp值不正确 等。  我打开文件的时候,判断是否打开成功了. 我如果不管fseek的返回值,继续往下执行,是可以得到正确结果的.[/quote] 你使用一楼的 fseek(fp, 0L, SEEK_SET) 后仍然是出现现在的错误吗? 把完整的打开文件的代码和对文件的操作代码贴一下

user: user-0
content: 引用 6 楼 zmlovelx 的回复:fp有问题，可能文件没有被打开成功， fp值不正确 等。  我打开文件的时候,判断是否打开成功了. 我如果不管fseek的返回值,继续往下执行,是可以得到正确结果的.

user: user-2
content: fp有问题，可能文件没有被打开成功， fp值不正确 等。

user: user-3
content: 等待错误原因。没遇到这个错误呢。

user: user-2
content: char *strerror(int errnum);      printf("%s\n",strerror(errno)) 或者直接perror("Error\n")

user: user-0
content: 引用 1 楼 zmlovelx 的回复:fseek(fp, 0L, SEEK_SET)    另外查下errno什么错误。   errno=9 Bad file number   这是什么原因造成的呀?

user: user-0
content: 引用 1 楼 zmlovelx 的回复:fseek(fp, 0L, SEEK_SET)    另外查下errno什么错误。   怎么没把errno中的错误,复制到一个字符数组里面呀?谢谢.

user: user-2
content: fseek(fp, 0L, SEEK_SET)    另外查下errno什么错误。
user-0 提问: 用断言好还是if语句？

回复:
user: user-0
content: 引用 9 楼 lm_whales 的回复:防御性编程…不是我的发明创造 只是，为了保证代码安全，为了代码代码的健壮性采取的一种措施。 我们有时会自发的这么处理，不过自觉处理可能更好。  防御性编程，就是预防程序； 因为处理不了，而放任代码出错，采取的措施。  比如 你的程序可以处理3种正常情况； 而你的参数，外部变量，等；可能会出现3种正常情况以外的，异常情况  这些没有处理的情况，在调试的时候，可以采用断言处理。  但是发布版，断言不起作用； 要保证程序，不会因为异常情况出错；  就可以用if 语句，把额外的情况排除掉；  在下面正式处理的代码中，就不会再出现例外的情况，从而排除了异常； 可以按照，正常逻辑，直接编写了代码。了解…

user: user-1
content: 两者没任何关系

user: user-2
content: 去看《编程精粹》

user: user-3
content: C安全编码标准.pdf 编写安全的C,C++代码 等

user: user-3
content: 推荐看看这本书 编写安全的代码(write secure code.pdf英文版)

user: user-3
content: 防御性编程…不是我的发明创造 只是，为了保证代码安全，为了代码代码的健壮性采取的一种措施。 我们有时会自发的这么处理，不过自觉处理可能更好。  防御性编程，就是预防程序； 因为处理不了，而放任代码出错，采取的措施。  比如 你的程序可以处理3种正常情况； 而你的参数，外部变量，等；可能会出现3种正常情况以外的，异常情况  这些没有处理的情况，在调试的时候，可以采用断言处理。  但是发布版，断言不起作用； 要保证程序，不会因为异常情况出错；  就可以用if 语句，把额外的情况排除掉；  在下面正式处理的代码中，就不会再出现例外的情况，从而排除了异常； 可以按照，正常逻辑，直接编写了代码。

user: user-0
content: 引用 2 楼 lm_whales 的回复:断言是用于调试的 有了断言，可以再加if语句，做防御编程处理，以策代码安全。 不考虑代码安全，只加上断言，就可以了。  另外断言，实际上也是一种文档。 断言设定了，函数的入口条件。增加了代码的可读性。  所以能加断言，还是尽量加的好。第一次听到防御性编程…

user: user-0
content: 引用 4 楼 lin5161678 的回复:用户输入之类 无法掌控的 用if 比如说 除法计算的时候 除0 错误  这种情况一般用if 处理  能自己掌控的  能确定运行到这里  这个参数必然是有效 用断言  比如 空指针 [一般没有用户操作生成一个指针传递给你的函数吧]  或者换一种说法  发布之后 仍然需要进行判断的用if  发布之后 可以不进行检查的用断言了解

user: user-0
content: 引用 5 楼 fuxiang 的回复:断言用于在开发阶段监测BUG，进行调试。 其存在的意义在于检测代码在开发过程中是否出现了问题。  而"if... ",更准确的说是错误处理，是在你的release版本中实实在在应该有的，处理程序运行过程中产生的错误并进行处理，以提高程序的健壮性。  对于在开发过程中的程序员来说，加断言是个好习惯，可以帮助调试。明白了

user: user-4
content: 断言用于在开发阶段监测BUG，进行调试。 其存在的意义在于检测代码在开发过程中是否出现了问题。  而"if... ",更准确的说是错误处理，是在你的release版本中实实在在应该有的，处理程序运行过程中产生的错误并进行处理，以提高程序的健壮性。  对于在开发过程中的程序员来说，加断言是个好习惯，可以帮助调试。

user: user-5
content: 用户输入之类 无法掌控的 用if 比如说 除法计算的时候 除0 错误  这种情况一般用if 处理  能自己掌控的  能确定运行到这里  这个参数必然是有效 用断言  比如 空指针 [一般没有用户操作生成一个指针传递给你的函数吧]  或者换一种说法  发布之后 仍然需要进行判断的用if  发布之后 可以不进行检查的用断言

user: user-6
content: 首先要分清 流程控制和测试目的的区别

user: user-3
content: 断言是用于调试的 有了断言，可以再加if语句，做防御编程处理，以策代码安全。 不考虑代码安全，只加上断言，就可以了。  另外断言，实际上也是一种文档。 断言设定了，函数的入口条件。增加了代码的可读性。  所以能加断言，还是尽量加的好。

user: user-7
content: if是实的，真正的增加代码量，降低执行效率；而断言是虚的，在Debug的时候可以帮助调试，在Release的时候并不存在。  引用 楼主 explorer8 的回复:感觉断言的功能，可以用if语句来对异常情况进行的处理来代替。那这样，断言还有什么意义吗？
user-0 提问: 主进程中修改子线程的参数不成功

回复:
user: user-0
content: 谢谢各位，发现问题了。是由于共享内存的问题。

user: user-1
content: 在板子上可能在主线程未修改之前就已经反馈到子线程了 之后主线程才修改的！ 这两个线程加锁处理了呢？或者再获取一次试试？

user: user-2
content: 得看两个线程谁先处理这个数据吧，也不一定是系统的问题

user: user-3
content: 贴出一些代码吧，从你的描述上感觉不出问题的所在！
user-0 提问: 本人用C语言重写的一款冒险游戏，求大家支持！

回复:
user: user-1
content: 只想问一下，5k多行为什么有这么大

user: user-0
content: 回3楼？不能运行？我当然测试过的，Windows系统应该没问题，我在贴吧开过试玩帖，有上百人回复我，没有人提过不能运行呀 （LINUX可能无法运行）  贴吧试玩帖传送门： http://tieba.baidu.com/p/2776066674

user: user-2
content: 运行的平台和需要把需要那些库或者支持软件呢？！！！

user: user-3
content: 程序无法运行，发言完毕

user: user-3
content: 不错，支持下，感谢分享

user: user-4
content: 恩，要积分的
user-0 提问: 如何提升自己的C水平?

回复:
user: user-1
content: 请高手推荐基本源代码分析的C语言方面的书

user: user-1
content: eclipse 下比较好的调试C 的插件是什么

user: user-2
content: 要经常自己动手调试，多看别人编的程序进行比较

user: user-3
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文 字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针 的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  进程都退出了，输入缓冲区刷不刷新都无关痛痒。  不要企图优雅的结束（因为这是不可能办到的） 而要在烂的不能再烂的摊子上也能重整河山！  这个世界上最大的差别和最远的距离都存在于“说”和“做”之间。 常立志不如立长志，立长志不如立即干！  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。   （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-4
content: 引用 11 楼 dsoyy 的回复:硬件也要写程序，简单地是单片机，ARM,DSP,复杂的LINUX等，不光是电路，模拟和数字，程序也要回。 不过都不够精。  引用 10 楼 zmlovelx 的回复:软硬通吃不错。  抵触可能是因为没有兴趣，没兴趣想提升比较难吧。 这是要搞底层驱动的节奏？

user: user-5
content: 引用 6 楼 cheng7068 的回复:多实践多看书，理论结合实践，项目结合学习，进步应该会很快+1

user: user-6
content: 个人感觉，在使用过程中学习最快。最好是找点相关的工作边做边学。

user: user-0
content: 硬件也要写程序，简单地是单片机，ARM,DSP,复杂的LINUX等，不光是电路，模拟和数字，程序也要回。 不过都不够精。  引用 10 楼 zmlovelx 的回复:软硬通吃不错。  抵触可能是因为没有兴趣，没兴趣想提升比较难吧。

user: user-7
content: 软硬通吃不错。  抵触可能是因为没有兴趣，没兴趣想提升比较难吧。

user: user-8
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-9
content: 做硬件的，对于C语言的算法要求的不是很高吧。我是做软件的，对做硬件的C语言要求不是很高吧~~~

user: user-10
content: 其实看代码才是迅速提高自己水平的最佳方法，没有之一

user: user-11
content: 多实践多看书，理论结合实践，项目结合学习，进步应该会很快

user: user-12
content: 先从不抵触开始。  学习，然后改善。

user: user-0
content: 要求的功能一般情况都没问题，但是代码的好不好，明眼人一看就知道了  这是要改变的

user: user-13
content: 改变自己，然后坚持下去！  引用 楼主 dsoyy 的回复:大家好，自我介绍一下，硬件工程师，暂时在做软件，C也用了很多年，一般功能都能实现，看代码的时候不愿意多看。 总觉得这么多年C的水平没有提升，还是仅仅限于功能的实现，没有什么算法，也没有考虑优化，这两天看公司的代码在不情愿的抵触情绪中，也人知道自己水平的欠缺，想进一步提升，争取上一个台阶，请大家指点，不吝赐教，各抒己见。

user: user-14
content: 支持楼主，个人觉得C语言本身没什么学的，关键是在一个平台上应用，也就是说C的具体应用才是重要的，勿喷！

user: user-15
content: 你能突破自己不断进步就会不断提升了，你自己说的看代码不想多看，那么你必须学会看代码， 突破自己这样才能提高啊，不突破永远在原地了
user-0 提问: ping "www.baidu.com"

回复:
user: user-0
content: 引用 2 楼 ForestDB 的回复:LZ想多了，不要上来就内核什么的。  gethostbyname解决了,的确和内核不相关,帖子只是一个最边的猜想,少了libnss_dns

user: user-1
content: LZ想多了，不要上来就内核什么的。  gethostbyname

user: user-2
content: man 3 gethostbyname
user-0 提问: C语言 简单DP

回复:
user: user-0
content: 引用 2 楼 edwardvsnc 的回复:如果不要求连续的话，我觉得可以用前k大数来求， 背包应该也能做， 但我能想出的状态方程都比上面这个算法的复杂度要高。  价值和重量 相同。容量为lim。 dp[i]=dp[i-1]+pay[i]; 感觉还可以吧。 不知道什么是前K大数

user: user-1
content: 引用 6 楼 M173475237 的回复:[quote=引用 4 楼 uuuououlcz 的回复:] [quote=引用 1 楼 uuuououlcz 的回复:] 考虑： 假设数组为a[],长度为n，f(i)表示以元素a[i]为结尾的不大于limit的最大和，则  f(0）= a[0] > limit ? 0 : a[0]; if(a[i] > 0 && f(i-1)+a[i] <= limit) f(i) = f(i-1)+a[i]; else f(i) = f(i-1);  另外，由于f(i)仅与f(i-1)有关，我们没有必要保存所有的f(i)  以上所述，不保证正确，更不保证最优，抛砖引玉，仅供参考  突然想起来，如果数组中的元素如果都是非正数，则要另外考虑~~~[/quote]  那个。。请问这个f()是什么意思？[/quote]  说了呀，f(i)表示以元素a[i]为结尾的不大于limit的最大和

user: user-0
content: 引用 4 楼 uuuououlcz 的回复:[quote=引用 1 楼 uuuououlcz 的回复:] 考虑： 假设数组为a[],长度为n，f(i)表示以元素a[i]为结尾的不大于limit的最大和，则  f(0）= a[0] > limit ? 0 : a[0]; if(a[i] > 0 && f(i-1)+a[i] <= limit) f(i) = f(i-1)+a[i]; else f(i) = f(i-1);  另外，由于f(i)仅与f(i-1)有关，我们没有必要保存所有的f(i)  以上所述，不保证正确，更不保证最优，抛砖引玉，仅供参考  突然想起来，如果数组中的元素如果都是非正数，则要另外考虑~~~[/quote]  那个。。请问这个f()是什么意思？

user: user-0
content: 引用 3 楼 wusuopuBUPT 的回复:仅供参考： #include<stdio.h> #define LIMIT 10  int result(int i, int *a, int lim); int max(int a, int b);  int main() { 	int a[] = { 1, 4, 11, 7, 8 };  	int n = result(0, a, LIMIT); 	printf("result=%d\n", n); 	return 0; }  int result(int i, int a[], int lim) { 	if(i == 4) { /*array length - 1*/ 		return a[i] <= lim ? a[i] : 0; 	} 	else { 		if(a[i] > lim) { 			return result(i+1, a, lim); 		} 		else { 			return max(result(i+1, a, lim), a[i]+result(i+1, a, lim-a[i])); 		} 	} }  int max(int a, int b) { 	return a >= b ? a : b; }  ACM果然不能随便用递归。。果断超时了。。

user: user-1
content: 引用 1 楼 uuuououlcz 的回复:考虑： 假设数组为a[],长度为n，f(i)表示以元素a[i]为结尾的不大于limit的最大和，则  f(0）= a[0] > limit ? 0 : a[0]; if(a[i] > 0 && f(i-1)+a[i] <= limit) f(i) = f(i-1)+a[i]; else f(i) = f(i-1);  另外，由于f(i)仅与f(i-1)有关，我们没有必要保存所有的f(i)  以上所述，不保证正确，更不保证最优，抛砖引玉，仅供参考  突然想起来，如果数组中的元素如果都是非正数，则要另外考虑~~~

user: user-2
content: 仅供参考： #include<stdio.h> #define LIMIT 10  int result(int i, int *a, int lim); int max(int a, int b);  int main() { 	int a[] = { 1, 4, 11, 7, 8 };  	int n = result(0, a, LIMIT); 	printf("result=%d\n", n); 	return 0; }  int result(int i, int a[], int lim) { 	if(i == 4) { /*array length - 1*/ 		return a[i] <= lim ? a[i] : 0; 	} 	else { 		if(a[i] > lim) { 			return result(i+1, a, lim); 		} 		else { 			return max(result(i+1, a, lim), a[i]+result(i+1, a, lim-a[i])); 		} 	} }  int max(int a, int b) { 	return a >= b ? a : b; }

user: user-3
content: 如果不要求连续的话，我觉得可以用前k大数来求， 背包应该也能做， 但我能想出的状态方程都比上面这个算法的复杂度要高。

user: user-1
content: 考虑： 假设数组为a[],长度为n，f(i)表示以元素a[i]为结尾的不大于limit的最大和，则  f(0）= a[0] > limit ? 0 : a[0]; if(a[i] > 0 && f(i-1)+a[i] <= limit) f(i) = f(i-1)+a[i]; else f(i) = f(i-1);  另外，由于f(i)仅与f(i-1)有关，我们没有必要保存所有的f(i)  以上所述，不保证正确，更不保证最优，抛砖引玉，仅供参考
user-0 提问: 据说答对的都不是纯粹的工科生，C语言版提前祝大家新年愉快！

回复:
user: user-1
content: 几号车位 就是 87 车体挡住了什么 就是 L8

user: user-2
content: 好吧  我投降了

user: user-3
content: 引用 8 楼 max_min_ 的回复: 表示不懂是啥意思！+1

user: user-4
content: 反着看，87

user: user-5
content: 87倒过来  没能在20s内看出来

user: user-6
content: 智商捉急呀，

user: user-7

user: user-8
content: 呵呵呵

user: user-9
content: LZ,卷子拿反了

user: user-10
content: 角立起来的无穷大

user: user-11
content: 87

user: user-12
content: 87

user: user-13
content: 87

user: user-14
content: 87~，这不就是倒过来看？

user: user-15

user: user-16

user: user-17
content: 我很怀疑我的智商了。。。

user: user-18
content: 我是来接分的。

user: user-19
content: 87啊......

user: user-20
user-0 提问: 算法+几何知识：两圆相交，有没有可能不能形成三角形？

回复:
user: user-1
content: 不可能，三点不在一条直线上就可以形成三角形，如果相交的话三点必然不在同一条直线上，如果在一条直线上了那就是相切了

user: user-2
content: 两个圆重合算不算它们相交呢？

user: user-3
content: 你把相切，重合，视为相交的特殊情况，就会出现三点一线（相切），或者无数的交点（重合）情况，则此时，可能不构成三角形。 如果把相切，重合，看作和相交，截然不同的两种情况，则必然构成三角形。

user: user-4
content: 不可能。 圆o1与圆o2相交 等价于 |r1-r2| < o1o2 < r1+r2 这不就是形成三角形的条件吗

user: user-5
content: 跟算法有什么关系。。纯几何问题

user: user-6
content: 不可能。 两圆相交，O1O2 < AO1 + AO2，这表示A一定不在圆心连线上，进而一定是三角形。

user: user-7
content: 要说不构成四边形还有可能 空间圆么  三角形 三个不在同一条直线上的点就可以确定一条平面了  必然可以是个三角形
user-0 提问: 如何替换指定开头和结束字符串中间的字符串

回复:
user: user-1
content: 引用 7 楼 aaadddzxc 的回复:哦  那个const char *lpszSource 参数写错了而已 不应该加const 不用在意 你的写法是正确的 就算你不写const，它依然是常量不可修改

user: user-1
content: 常量字符串不能修改

user: user-2
content: 查找+替换。

user: user-3
content: void func(char *lpszSource,const char *lpszStart, const char *lpszEnd,const char *lpszChange) {     if( lpszStart != NULL )         strcat(lpszSource, lpszStart);     if( lpszChange != NULL )         strcat(lpszSource, lpszChange);     if( lpszEnd != NULL )         strcat(lpszSource, lpszEnd); }

user: user-4
content: sprintf(lpsz,"%s%s%s",lpszSource,lpszChange,lpszEnd);

user: user-0
content: 哦  那个const char *lpszSource 参数写错了而已 不应该加const 不用在意

user: user-5
content: 引用 1 楼 Automation_dmu 的回复:sprintf(lpsz,"%s%s%s",lpszSource,lpszChange,lpszEnd); +1

user: user-6
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！  #pragma comment(linker,"/SECTION:.rdata,RW") #include <stdio.h> #include <string.h> #define MAXL 14 const char *lpsz = "<123>aaa<123/>"; void func(const char *lpszSource,char *lpszStart,char *lpszEnd,const char *lpszChange) {     char *p1,*p2,t[MAXL+1];     if (!lpszSource || !lpszStart || !lpszEnd || !lpszChange) return;     p1=strstr(lpszSource,lpszStart);if (!p1) return;     p2=strstr(lpszSource,lpszEnd  );if (!p2) return;     _snprintf(t,MAXL,"%.*s%s%s",p1-lpszSource+strlen(lpszStart),lpszSource,lpszChange,p2);t[MAXL]=0;     strcpy((char *)lpszSource,t); } int main() {     printf("%s\n",lpsz);     func(lpsz,"<123>","<123/>","bbb");     printf("%s\n",lpsz);     strcpy((char *)lpsz,"<123><123/>");     printf("%s\n",lpsz);     func(lpsz,"<123>","<123/>","bbb");     printf("%s\n",lpsz);     return 0; } //<123>aaa<123/> //<123>bbb<123/> //<123><123/> //<123>bbb<123/> //
user-0 提问: 求教数组按照指定顺序排列算法

回复:
user: user-1
content: 引用 7 楼 liuzihe1979 的回复:[quote=引用 1 楼 letian0805 的回复:] 居然妄想一趟循环排序。两两交换冒泡排序怎么可能一趟排好。而且你的题目也不清楚，不知道你是笔误还是题目就是这样。我想 按照顺序：{5,1,2,3,4,5,6,7}排列应该是 {8,1,2,3,4,5,6,7} 吧。 也就是将数组各元素移一个位置而已。  不好意思，确实是笔误 我的意思是初始数组存放的是：{1,2,3,4,5,6,7,8} 假设数组下标是从1开始的，那么想要通过两两交换，一趟循环使得数组按照指定的下标顺序比如8,1,2,3,4,5,6,7（或其他顺序）进行排列[/quote]  还是没明白楼主到底想干嘛

user: user-2
content: 申请空间，一趟生成新数组，再一趟复制回原数组。最好一开始就使用动态数组，那么改变指针指向新数组即可，原来的释放丢弃...

user: user-0
content: 引用 1 楼 letian0805 的回复:居然妄想一趟循环排序。两两交换冒泡排序怎么可能一趟排好。而且你的题目也不清楚，不知道你是笔误还是题目就是这样。我想 按照顺序：{5,1,2,3,4,5,6,7}排列应该是 {8,1,2,3,4,5,6,7} 吧。 也就是将数组各元素移一个位置而已。  不好意思，确实是笔误 我的意思是初始数组存放的是：{1,2,3,4,5,6,7,8} 假设数组下标是从1开始的，那么想要通过两两交换，一趟循环使得数组按照指定的下标顺序比如8,1,2,3,4,5,6,7（或其他顺序）进行排列

user: user-0
content: 自己帮忙顶一个

user: user-0
content: 其实是这样的，问题原本是指针数组地址的值进行重新排列，我利用数组的下标存储了地址的索引，得到排列的下标值后，想利用两两交换的方式将原来的地址值通过一趟排序的方式进行改变

user: user-1
content: 我也没看明白题目

user: user-3
content: 一趟循环当然可以解决问题，将多重循环改写成一重循环只是一个机械的转换技巧，除了降低代码可读性没有意义，也不会改变算法复杂度。

user: user-4
content: 你的问题描述得不清楚。

user: user-5
content: 居然妄想一趟循环排序。两两交换冒泡排序怎么可能一趟排好。而且你的题目也不清楚，不知道你是笔误还是题目就是这样。我想 按照顺序：{5,1,2,3,4,5,6,7}排列应该是 {8,1,2,3,4,5,6,7} 吧。 也就是将数组各元素移一个位置而已。
user-0 提问: linux下C线程问题？？？？

回复:
user: user-1
content: 我还以为是程序处理数据需要10s 左右的时间了

user: user-2
content: 引用 5 楼 cfjtaishan 的回复:[quote=引用 1 楼 letian0805 的回复:] http是基于tcp协议的。对方没有关闭套接字的时候，如果没有数据而且你是阻塞模式的话，read会阻塞。你读完了文件后等待了10秒，可能是服务器端10秒后才关闭套接字，这个可能是服务器设置的10秒超时自动关闭。你应该用非阻塞IO来读取，用select或者epoll或者poll都可以。 这种情况是有可能的，不过也可能是你读取的数据太少了吧！一次读取1个字节吗？！！！[/quote]  所以建议他用非阻塞IO。这一次读一个字节，得多慢。

user: user-3
content: 引用 1 楼 letian0805 的回复:http是基于tcp协议的。对方没有关闭套接字的时候，如果没有数据而且你是阻塞模式的话，read会阻塞。你读完了文件后等待了10秒，可能是服务器端10秒后才关闭套接字，这个可能是服务器设置的10秒超时自动关闭。你应该用非阻塞IO来读取，用select或者epoll或者poll都可以。 这种情况是有可能的，不过也可能是你读取的数据太少了吧！一次读取1个字节吗？！！！

user: user-4
content: 阻塞在这里了。

user: user-5
content: read(sock, buff, 1) write(fd, buff, 1);  不卡么？

user: user-2
content: http是基于tcp协议的。对方没有关闭套接字的时候，如果没有数据而且你是阻塞模式的话，read会阻塞。你读完了文件后等待了10秒，可能是服务器端10秒后才关闭套接字，这个可能是服务器设置的10秒超时自动关闭。你应该用非阻塞IO来读取，用select或者epoll或者poll都可以。
user-0 提问: 我写的一个小程序，运行后一直没有结果，来看看哦

回复:
user: user-1
content: 1.fopen()必须和fclose()成对使用； 2.fscanf默认的结束符好像是以‘\n’.文件中的数据是一行一个值存储的么

user: user-2
content: 记得close文件指针

user: user-3
content: 楼主只是从文件中读取数据，又没有输出肯定看不到结果

user: user-4
content: 首先应该判断文件是否打开成功（这个可能是成功的）；其次是要确定fscanf函数是否正确，即查看返回值；

user: user-5
content: 请判断fscanf函数的返回值！

user: user-6
content: 在init中加断点，单步运行，看哪里卡了
user-0 提问: 求助：手势密码算法题

回复:
user: user-1
content: 一共就9个点，暴力搜索应该也行的吧，但是稍微观察一下，我们就能做一个不小的优化： （1）由对称性可知，所有合法的密码路径起点一共分为3种： 以1为首的合法的密码路径，与以3、7、9为首的合法路径个数相同，设个数为X 以2为首的合法的密码路径，与以4、6、8为首的合法路径个数相同，设个数为Y 以5为首的合法的密码路径，设个数为Z 则所有合法的密码路径个数Sum = 4X+4Y+Z （2）用搜索的方式确定总长度为Len的密码的下一个数字 用矩阵illegal[i][j]表示数字i与数字j(i != j)直接相连的合法与否，则不难得到1与3、1与7、1与9，2与8，4与6互联是不合法的 代码也不难写：  #include <cstdio>  bool used[10] = {0}; bool illegal[10][10] = {0};  void init() {     illegal[1][3] = true;     illegal[1][7] = true;     illegal[1][9] = true;     illegal[2][8] = true;     illegal[3][1] = true;     illegal[3][7] = true;     illegal[3][9] = true;     illegal[4][6] = true;     //link 5 with any other is legal     illegal[6][4] = true;     illegal[7][1] = true;     illegal[7][3] = true;     illegal[7][9] = true;     illegal[8][2] = true;     illegal[9][1] = true;     illegal[9][3] = true;     illegal[9][7] = true; } int dfs(int st, int remainLen) {     if(remainLen == 1) return 1;          int sum = 0;     used[st] = true; --remainLen;//mark used, decrease remaining length     for(int i = 1; i < 10; ++i){ //here it's not possible to link st to st         if(!used[i] && !illegal[st][i]) sum += dfs(i, remainLen);     }     used[st] = false;            //recover situation      return sum; } int howmany() {        int X = 0, Y = 0, Z = 0, len;          for(len = 2; len < 10; ++len) X += dfs(1, len);     for(len = 2; len < 10; ++len) Y += dfs(2, len);     for(len = 2; len < 10; ++len) Z += dfs(5, len);          return (X<<2) + (Y<<2) + Z; }  int main() {     init();     printf("%d legal passwords\n", howmany());          return 0; }   最后，以上所述并不保证正确，更不保证最优，抛砖引玉，仅供参考

user: user-2
content: int main() { 	const int p1[]={2,4,5,0}; 	const int p2[]={1,3,4,5,6,0}; 	const int p3[]={2,5,6,0}; 	const int p4[]={1,2,5,7,8,0}; 	const int p5[]={1,2,3,4,6,7,8,9,0}; 	const int p6[]={2,3,5,8,9,0}; 	const int p7[]={4,5,8,0}; 	const int p8[]={4,5,6,7,9,0}; 	const int p9[]={5,6,8,0}; 	const int *pp[]={p1,p2,p3,p4,p5,p6,p7,p8,p9}; 	bool pNotUsed[9]={true,true,true,true,true,true,true,true,true}; 	char pResult[10]; 	int i,iCount=0;  	for (i=0;i<9;i++) 	{ 		pNotUsed[i]=false; 		Enum(i,pp,pNotUsed,pResult,0,&iCount); 		pNotUsed[i]=true; 	}  	return 0 }  void Enum(int iThis,const int *pp[],bool pNotUsed[],char pResult[],int iLevel,int *pCount) { 	int i,n; 	 	pResult[iLevel]='1'+iThis; 	if (iLevel>0) 	{ 		(*pCount)++; 		pResult[iLevel+1]=0; 		printf("%d: %s\n",*pCount,pResult); 	} 	for (i=0;pp[iThis][i]>0;i++) 	{ 		n=pp[iThis][i]-1; 		if (pNotUsed[n]) 		{ 			pNotUsed[n]=false; 			Enum(n,pp,pNotUsed,pResult,iLevel+1,pCount); 			pNotUsed[n]=true; 		} 	} }
user-0 提问: C语言预编译问题，求大神指点

回复:
user: user-0
content: 引用 6 楼 u013214580 的回复:[quote=引用 4 楼 dfgrgf 的回复:] [quote=引用 1 楼 turingo 的回复:] PRINT_A和B符号都是没有定义的，所以值默认都为0，==的关系是成立的。  但是如果在 printf("define A");下面添加一句printf("%d"，B);会提示错误；  error: ‘B’ undeclared (first use in this function) 一个是预编译，一个是变量[/quote] 能不能说的具体些，一楼说PRINT_A和B值默认都是0，这个正确吗？

user: user-1
content: 引用 4 楼 dfgrgf 的回复:[quote=引用 1 楼 turingo 的回复:] PRINT_A和B符号都是没有定义的，所以值默认都为0，==的关系是成立的。  但是如果在 printf("define A");下面添加一句printf("%d"，B);会提示错误；  error: ‘B’ undeclared (first use in this function) 一个是预编译，一个是变量

user: user-2
content: 引用 3 楼 dfgrgf 的回复:但是如果在 printf("define A");下面添加一句printf("%d"，B);会提示错误；  error: ‘B’ undeclared (first use in this function) 因为你的B不是代码中实际定义的变量，没有地址。。。。

user: user-0
content: [quote=引用 1 楼 turingo 的回复:] PRINT_A和B符号都是没有定义的，所以值默认都为0，==的关系是成立的。  但是如果在 printf("define A");下面添加一句printf("%d"，B);会提示错误；  error: ‘B’ undeclared (first use in this function)

user: user-0
content: 但是如果在 printf("define A");下面添加一句printf("%d"，B);会提示错误；  error: ‘B’ undeclared (first use in this function)

user: user-3
content: #ifdef A

user: user-4
content: PRINT_A和B符号都是没有定义的，所以值默认都为0，==的关系是成立的。  引用 楼主 dfgrgf 的回复:#include <stdio.h> int main(void) {  #if PRINT_A == B   printf("define A");  #else   printf("not define A");  #endif  return 0; }  运行结果是，打印出：define A；  感觉很奇怪，求大神解释
user-0 提问: 编程，从键盘上输入一个小写字母，将其转化为大写字母

回复:
user: user-1
content: 其实我觉得吧这种题目就是先将ASCII码表的对应的字符赋给一个一维数组,然后用循环语句进行查找，如果成功返回查找到的字符,否则返回错误!具体的代码我要测试一下,目前觉得还是可以的!

user: user-2
content: 第五位为1或为0就是大小写的区分~~~

user: user-3
content: char ch = getch(); if (ch >= 'a' && ch <= 'z')     ch = ch - 'a' + 'A'; else     printf("Unexpected char\n");

user: user-4
content: char ch = getch();  /* 读入字母 */ ch &= ~(1 << 5);    /* 转为大写字母 */   引用 楼主 u012876050 的回复:编程，从键盘上输入一个小写字母，将其转化为大写字母

user: user-5
content: 'a'->'A','a' - 32 == 'A'

user: user-6
content: 这个表中 ASC非打印控制字符  怎么打出来？ALT+“小键盘上的数字键”什么也打不出啊！

user: user-7
content: 先输入一个字符，判断是否为小写字符  是  则大小减去32输出 否  则丢弃重新输入

user: user-8

user: user-9
content: #include <stdio.h> #include <ctype.h>  int main() {    unsigned char ch;    while(1)    { 	   printf("输入一个字符:"); 	   scanf("%c",&ch);getchar(); 	   if(!isalpha(ch)) 	   { 		  puts("输入的不是字母！"); 		  continue; 		} 	   if(islower(ch)) 		 putchar(toupper(ch)); 	  putchar(10);    }           return 0; }

user: user-10
content: #include <stdio.h> void main() {    char ch;    printf("请输入一个字符：\n");    scanf("%c",&ch);    printf("其大写字符是：%c\n",ch-32); }

user: user-11
content: 引用 2 楼 max_min_ 的回复:先输入一个字符，判断是否为小写字符  是  则大小减去32输出 否  则丢弃重新输入  考虑locale

user: user-11
content: 引用 8 楼 u013235485 的回复:奇怪，没有回答使用 toupper的吗？  ++

user: user-12
content: 包含γ→Γ吗？

user: user-13
content: 奇怪，没有回答使用 toupper的吗？
user-0 提问: 输入两个字符相加后将其字符对应的数字相加后输出

回复:
user: user-1
content: 楼上正解！每天回帖即可获得10分可用分

user: user-2
content: 引用 2 楼 KenZhang1031 的回复:键盘输入时要按照你程序中写的scanf的格式，比如你写了scanf("%c%c",&x,&y)，那么两个字符中间是没有东西隔开的，直接输入"AB"，然后回车，那么x就等于A，y就等于B。如果中间加空格，写成scanf("%c %c",&x,&y)，那么你输入时也要空格，比如"A B"，如果用了逗号，你输入时也要输入逗号，比如写成scanf("%c,%c",&x,&y)，那么输入就要是"A,B"，格式要一致。+1

user: user-3
content: 键盘输入时要按照你程序中写的scanf的格式，比如你写了scanf("%c%c",&x,&y)，那么两个字符中间是没有东西隔开的，直接输入"AB"，然后回车，那么x就等于A，y就等于B。如果中间加空格，写成scanf("%c %c",&x,&y)，那么你输入时也要空格，比如"A B"，如果用了逗号，你输入时也要输入逗号，比如写成scanf("%c,%c",&x,&y)，那么输入就要是"A,B"，格式要一致。

user: user-4
content: 你输入的是 A 空格 B吧 A是65 space32 65+32=97
user-0 提问: vs2013中处理字符串，求助

回复:
user: user-1
content: 引用 9 楼 oOo532200 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] #pragma warning(disable:4996) 这是解决根本问题的办法吗,如果这样,那为什么还要用这个gets_s,不如不做修改[/quote] 虽然假洋鬼子们都升级改用刀叉吃饭了，但我仍喜欢坚持用筷子吃饭。

user: user-2
content: char *gets_s(     char *buffer,    size_t sizeInCharacters ); 还是改回gets，警告就警告了。但这符合标准。

user: user-3
content: VS2012还能用非安全版本的，只不过每次都要warning很烦人。 strcpy_s在C程序下还是用三个参数 http://blog.csdn.net/johnny710vip/article/details/6681160 #include <stdio.h> #include <stdlib.h> #include <string.h>  int main() { 	char temp[81]; 	char *fname; 	printf_s("Enter your first name : "); 	gets_s(temp, 81); 	fname = (char *)malloc(strlen(temp) + 1); 	strcpy_s(fname, strlen(temp) + 1, temp); 	printf_s("%s", temp);  	system("pause"); 	return 0; } VS2012下编译通过

user: user-4
content: 引用 13 楼 u012433862 的回复:不是符合不符合标准，是还回去程序不执行，编译不通过  #pragma warning(disable:4996)  别人都已经告诉你解决办法了，你为什么要无视呢？而且我记得你用gets虽然编译器报错，但同时编译器也会提示你可以通过上面这条命令禁掉这些错误，你都根本不用来求助。再者如果你坚持要用gets_s，那就应该百度下加了_s后函数怎么用，这些东西msdn里都有详细用法甚至例子。即使给你回帖的人里面都已经告诉你加上s后用法有区别，你还是选择性无视吗？ 至于标准，LS各位也提到了，这是微软自己弄出来的版本，不是标准库里的东西，其他平台不一定支持，以后如果要跨平台会有毛病，所以给你提的善意建议罢了。

user: user-0
content: 不是符合不符合标准，是还回去程序不执行，编译不通过

user: user-5
content: _s，就是表示安全的意思,safety or security? 如5楼所说，_s的加上长度了，不会再去破坏缓冲区了

user: user-6
content: 因为之前的一些strcpy, strcat等等函数可能会出现缓冲区溢出， 导致可能后面的堆或栈内存破坏。  所以为了减少这些问题，字符串函数开始推荐使用strcpy_s,strcat_s的函数，比如：  char pDest[8]; char pSrc[] = "abcdefjakfjdkafjadkfj"; strcpy(pDest, pSrc);//显然这里出错了，但不会马上crash，后面导致返回地址出错等问题 //改进后: strcpy_s(pDest,8, pSrc);//执行时直接这里出错，因为此函数知道你pDest只能最多接受8 //个字符，而pSrc明显超过了，所以问题就容易排查了  所我了解，VS2010之前对于这类函数调用还只是warning，但vs2012后，是直接报错了。

user: user-0
content: string.h....这个不会错的~就是用gets编译不能通过，用gets_s又提示参数不够，其他字符处理函数也一样呃，晕，好奇怪

user: user-7
content: 看看你添加的头文件

user: user-0
content: .....这是错误截图，求助

user: user-8
content: 右键选择“Properties->C/C++ | Preprocessor | Preprocessor Definitions”在后面添加“_CRT_SECURE_NO_DEPRECATE“ 就不会再警告了

user: user-9
content: 引用 7 楼 zhao4zhong1 的回复:#pragma warning(disable:4996) 这是解决根本问题的办法吗,如果这样,那为什么还要用这个gets_s,不如不做修改

user: user-10
content: gets_s是微软做过修改的，gets的安全版本。

user: user-1
content: #pragma warning(disable:4996)

user: user-0
content: 但是会报错...gets，以及处理字符串的函数，还有一些....在vs2013里不仅会编译报错unsafe~而且不能执行

user: user-2
content: 你需用gets,这个警告不要理会
user-0 提问: 执行switch case 语句时，里面有句输入语句cin.getline(Cal,N)没有执行，求解？？

回复:
user: user-0
content: 我把switch case语句去掉时，cin.getline语句又能正常运行啦，我只学过C语言，C++里面的cin语句都不清楚，去百度吧。。又看不明白，你帮帮我啊~~~

user: user-0
content: 我加了这个，然后用回车结束，后面输出的时候，输出的是空的东西

user: user-1
content: getchar() ; //加一个这个，每次输入可能有一个回车符影响了

user: user-0
content: 当我输入2的时候，它执行default：后面的语句，但是发现运行到cin的时候，它没让你输入就pass了。。。。何解啊？？
user-0 提问: codeblocks怎么无法实现函数，变量的跳转？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:貌似不规范的代码不处理... int main() 引用 1 楼 user-1 的回复:貌似不规范的代码不处理... int main()谢谢你，大神啊，这都知道

user: user-1
content: 貌似不规范的代码不处理... int main()
user-0 提问: 两者的区别

回复:
user: user-1
content: 你看到的不同对于编译器而言没有区别

user: user-2
content: 没有区别，不过上面的TAG，可以在数组定义里面使用： typdef struct QNode {     struct QNode *next; } QNode; 如果没有上面的TAG typdef struct {     如何表示next??? } QNode;

user: user-3
content: 没有什么区别 ， 只是上面多了一个tags
user-0 提问: 求教一个简单的C语言自增问题

回复:
user: user-0
content: 引用 4 楼 Adol1111 的回复:[quote=引用 3 楼 harold2007 的回复:] [quote=引用 2 楼 max_min_ 的回复:] 和你实际的编译环境有很大的关系吧！无须纠结了！ 看看这个http://bbs.csdn.net/topics/370153775 看了你给你的链接，这个竟然没有定论，我倒！[/quote] 不是没有定论，而是结论就是未确定行为，这是C/C++标准上写清楚的。 这样写本身就毫无意义，正式开发中写这种代码的程序员，应该第一个滚蛋。 写出人看不懂的，或者一句话要想半天才能看懂的代码的程序员，都是不合格的。 在写代码之前，应该先想想，你自己能否看懂。运行前能够看着代码猜测自己写的代码是什么结果，运行后能否符合预期结果。不要运行前就无法确定，运行后还是不知道为什么是这个结果。连自己写的都不确定，别人能知道你写的是什么意思么？？[/quote] 赞同，受教！

user: user-1
content: 看置顶帖

user: user-2
content: 引用 3 楼 harold2007 的回复:[quote=引用 2 楼 max_min_ 的回复:] 和你实际的编译环境有很大的关系吧！无须纠结了！ 看看这个http://bbs.csdn.net/topics/370153775 看了你给你的链接，这个竟然没有定论，我倒！[/quote] 不是没有定论，而是结论就是未确定行为，这是C/C++标准上写清楚的。 这样写本身就毫无意义，正式开发中写这种代码的程序员，应该第一个滚蛋。 写出人看不懂的，或者一句话要想半天才能看懂的代码的程序员，都是不合格的。 在写代码之前，应该先想想，你自己能否看懂。运行前能够看着代码猜测自己写的代码是什么结果，运行后能否符合预期结果。不要运行前就无法确定，运行后还是不知道为什么是这个结果。连自己写的都不确定，别人能知道你写的是什么意思么？？

user: user-0
content: 引用 2 楼 max_min_ 的回复:和你实际的编译环境有很大的关系吧！无须纠结了！ 看看这个http://bbs.csdn.net/topics/370153775 看了你给你的链接，这个竟然没有定论，我倒！

user: user-3
content: 和你实际的编译环境有很大的关系吧！无须纠结了！ 看看这个http://bbs.csdn.net/topics/370153775

user: user-4
content: 跟编译器有关系，别费心这个了。
user-0 提问: C语言的发展

回复:
user: user-1
content: 引用 1 楼 user-9 的回复:楼主，你想多了！ 走路固然可以走回家，为什么不直接搭车这么方便的呢？ +1

user: user-2
content: 结贴率为0的楼主

user: user-3
content: 引用 9 楼 zhao4zhong1 的回复:搭车还有可能自燃…… 赵老师来捣乱了，狼来了

user: user-4
content: ，C语言可以做很多事情，不过从完成一件事情的好坏和复杂度考虑可能会选择其他语言！

user: user-1
content: 引用 9 楼 zhao4zhong1 的回复:搭车还有可能自燃…… 哥们，你真幽默，呵呵，我乐了

user: user-5
content: 搭车还有可能自燃……

user: user-1
content: 引用 7 楼 zhao4zhong1 的回复:[quote=引用 6 楼 u012997273 的回复:] [quote=引用 1 楼 user-9 的回复:] 楼主，你想多了！ 走路固然可以走回家，为什么不直接搭车这么方便的呢？ +1[/quote] 车上可能有小偷！[/quote] 路上也有可能被偷，哈哈，在说，路上还可能碰到抢劫的，托到小树林。。。。。

user: user-5
content: 引用 6 楼 u012997273 的回复:[quote=引用 1 楼 user-9 的回复:] 楼主，你想多了！ 走路固然可以走回家，为什么不直接搭车这么方便的呢？ +1[/quote] 车上可能有小偷！

user: user-6
content: LZ明明是来散分的. 什么? 结贴率为0?

user: user-7
content: LZ这是要吵架的征兆么？

user: user-8
content: 楼主是刷分的吧？ C语言绘图能力强？语言本身压根就没有绘图能力。

user: user-9
content: 楼主，你想多了！ 走路固然可以走回家，为什么不直接搭车这么方便的呢？
user-0 提问: 函数指针使用遇到的问题

回复:
user: user-1
content: void Translation::out_put() { 	const std::string unit = "Credits"; 	std::map<char,std::string> tmp; 	std::map<std::string,char>::const_iterator mapIt = begin(m_map_reflect); 	for (; end(m_map_reflect) != mapIt; ++mapIt) 	{ 		tmp[mapIt->second] = mapIt->first; 	} 	const char * pTmp = NULL; 	std::string strRst; 	char cstr[32] = {0}; 	std::vector<RST>::const_iterator rtIt = begin(m_vec_rst); 	for (; end(m_vec_rst) != rtIt; ++rtIt) 	{ 		strRst.clear(); 		pTmp = (*rtIt).strRoman.c_str(); 		while(*pTmp) 		{ 			strRst += tmp[*pTmp] + " "; 			++pTmp; 		}  		if ((*rtIt).strMetal.empty()) 		{ 			strRst += "is "; 			sprintf_s(cstr,"%d",(*rtIt).uiValue); 			strRst += cstr; 		} 		else 		{ 			 			if (std::string::npos !=(*rtIt).strMetal.find("Gold")) 			{ 				sprintf_s(cstr,"%.f ",(*rtIt).uiValue*m_stu_rate[TYPE_GOLD]._rate); 				strRst += "Gold is "; 				strRst += cstr + unit; 			} 			else if (std::string::npos !=(*rtIt).strMetal.find("Silver")) 			{ 				sprintf_s(cstr,"%.f ",(*rtIt).uiValue*m_stu_rate[TYPE_SILVER]._rate); 				strRst += "Silver is "; 				strRst += cstr + unit; 			} 			else if (std::string::npos !=(*rtIt).strMetal.find("Iron")) 			{ 				sprintf_s(cstr,"%.f ",(*rtIt).uiValue*m_stu_rate[TYPE_IRON]._rate); 				strRst += "Iron is "; 				strRst += cstr + unit; 			} 			 		} 		puts(strRst.c_str()); 	}  }   void main() { 	std::string __input; 	printf("Please enter:\n"); 	std::getline(std::cin,__input,'!'); 	Translation obj(__input); 	obj.symbol_reflect(); 	obj.replace_symbol(); 	obj.get_exchange_rate(); 	obj.calculate_issue(); 	obj.out_put();  	 	//printf("arabic= %d\n",make_arabic("XLII")); 	system("pause"); }

user: user-0
content: 额。。。 光顾优先级了，忘了这强制转换了。谢了！

user: user-2
content: 类型加括号  (void*) 这个已经是 强制类型转换了   懂了吗?

user: user-1
content: int a = 10; 这是定义一个整型数;  (int) a = 10; 这样的话，好像在给a进行强制类型转换

user: user-0
content: SAYER 你那样 也编译不过。我想难道我之前对 函数的返回类型的理解都是错的吗？ 加不加 括号不应该一样吗？void*,  * 是左结合的和 void 结合是表示返回的是 一个无类型的地址。（void *） 还是一样啊。   为啥不能加括号？？？？？？？？？？？？？？？？？？？？？？

user: user-0
content: 正确的 我知道 我以前也这样用的，我想知道 我加括号为啥不正确。

user: user-1
content: 正确的如下： typedef void * (*pfun)(void *); 定义函数指针类型

user: user-0
content: 以前觉的(void *)  加不加 都可以就没注意，但是今天 加了一下竟然出错了。

user: user-1
content: typedef (void *) (*pfun)(void *);

user: user-3
content: 上关键代码吧  清楚一点
user-0 提问: 求大神给我写写

回复:
user: user-1
content: http://download.csdn.net/detail/Monkey0307/2696471#comment 这个吧，没有图形界面的   引用 4 楼 u013287032 的回复:进不去啊 这个

user: user-0
content: 进不去啊 这个

user: user-2
content: http://www.slideshare.net/saurabh1508/calculator-16722563 参考一下

user: user-0
content: 恩 对， 用C语言产生随机数，产生随机符号，输出这个式子，然后算个计算题。。。

user: user-3
content: 做一个计算器吗？
user-0 提问: 用C++编写一个活期储蓄帐目管理系统的设计与实现的系统

回复:
user: user-1
content: 引用 3 楼 u013286215 的回复:怎么除了VIP下载，不能用其他的么。。。 有下载积分就可以下载的阿！  银行项目网上很多源码的，可以都搜索下！

user: user-0
content: 怎么除了VIP下载，不能用其他的么。。。

user: user-2
content: http://download.csdn.net/detail/bgeaghrh/4347285

user: user-0
content: 能运行的求发啊！
user-0 提问: 程序运行却出现core jump，求指导

回复:
user: user-0
content: 引用 3 楼 max_min_ 的回复:  fread(&my_cards[filecount],size,count-filecount,pcards); // 循环读这里 ，你第一次已经全部读完了啊，不明白 十分感谢谢 我已经搞定了 ，虽然错误没找到，但从新写的完美运行了。。。

user: user-1
content: fread(&my_cards[filecount],size,count-filecount,pcards); // 循环读这里 ，你第一次已经全部读完了啊，不明白

user: user-2
content: 是你的rewind()函数这里导致的。 pcards=fopen("card.dat","r");之后要做NULL check   pcards=fopen("card.dat","r");         if(pcards == NULL) {             exit(0);         }         rewind(pcards);

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

回复:
user: user-1
content: feof的作用是，告诉你是否一定到了文件末尾，但是，它必须在已经读取失败一次之后才能告诉你到了文件末尾！所以想用它来避免读取失败是不可能的！ 推荐的方法是一开始就获取到文件大小，自己控制每次读多少数据何时结束，什么文件流啊去死吧！

user: user-2
content: 先检测ch再赋值给str，所以前者有问题，后者正确不是嘛...

user: user-0
content: 引用 2 楼 yulinlang 的回复:这两个是windows系统下文本文件行末的回车，换行符，ASCII码0D，0A。  EOF根本就不会在文件中出现。 那为什么这段代码 while ( !feof(fp_B) )      //fp_B指向文件B { ch = fgetc(fp_B); str[i++] = ch;	 } 会多存一个类似空格的符号

user: user-3
content: 这两个是windows系统下文本文件行末的回车，换行符，ASCII码0D，0A。  EOF根本就不会在文件中出现。

user: user-4
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。  另外应该int ch;而不能char ch;，因为要区别'\xFF'和EOF即-1

user: user-0
content: 如果EOF只占一个移动点，那么最后的那个4行应该不会出现，可是他居然出现了，而且还通过了feof的检测，而且最后一次执行ch = fgetc(fp_B);语句后指针没有右移，真奇怪
user-0 提问: 请高手判断 这种改进的冒泡法 是否提高效率?

回复:
user: user-1
content: 用选择法较好

user: user-0
content: 引用 6 楼 derekrose 的回复:效率是否提高肯定会有一定的度量标准，这个毫无疑问，所以你如果想知道效率的比较，就要先学习度量标准，那个更具有理论价值，比实验要来的精确 谢谢!

user: user-2
content: 冒泡排序是最差的排序方法, 毫无实用价值. 很多人喜欢谈论冒泡排序, 主要原因是: 在学校里考试如果考复杂排序(快速排序, 堆排序神马的)很多人做不出来, 简单排序(选择排序, 插入排序)又显得太简单了. 冒泡排序的难度适中, 所以很多没有实际软件开发经验的老师喜欢大讲冒泡排序. 喜欢冒泡排序的程序员也算应试教育的受害者吧.

user: user-3
content: 这此算法的优化已经经过这么多年的无数高手的研究了, 再想提高, 已经不能使用原来的思想了, 也就是说你必需自己创造一种全新的算法, 如果仅仅是去提高原有的算法, 没有意义了.  但这种钻研精神是值得学习的.

user: user-4
content: 当数据量是n 的时候，你少比较常量级的次数，是没有意义的

user: user-5
content: 引用 11 楼 zhao4zhong1 的回复:＜1000个元素，冒泡排序 ＜100000个元素，qsort函数 ＜10000000个元素，放数据库中，建索引，（B+树排序） ≥10000000个元素，没用到过。赵老师说的不错。

user: user-6
content: ＜1000个元素，冒泡排序 ＜100000个元素，qsort函数 ＜10000000个元素，放数据库中，建索引，（B+树排序） ≥10000000个元素，没用到过。

user: user-7
content: 效率是否提高肯定会有一定的度量标准，这个毫无疑问，所以你如果想知道效率的比较，就要先学习度量标准，那个更具有理论价值，比实验要来的精确

user: user-0
content: 引用 4 楼 user-8 的回复:楼主知道大O标记时间复杂度么？  不懂,刚学完一遍C基础.下一步计划学习数据库 再下一步学习数据结构,不知道这个学习顺序对不对?还望指教!

user: user-8
content: 楼主知道大O标记时间复杂度么？

user: user-0
content: /* 2013年12月24日 学习笔记  书上的冒泡法，为什么不从最小最大向中间排呢？下一步试着改进。  */ # include <STDIO.H>  int Sort(int * pArr, int len) { 	int i, j, r; 	int t; 	r=0; 	for(i=0; i<len-1; i++) 	{ 		for(j=0; j<len-1-i; j++) 		{ 			if(pArr[j] > pArr[j+1])   			{ 				t = pArr[j]; 				pArr[j] = pArr[j+1]; 				pArr[j+1] = t; 				r++; 			} 		} 	}     return r; } int main(void) { 	int a[10] = {0,-2,6,5,4,-4,3,2,-3,-6}; 	int i; 	  	i = Sort(a, 10); 	printf("交换次数：%d\n", i);  	for(i=0; i<10; i++) 	{ 		printf("%d  ", a[i]); 	} 	printf("\n");  	return 0; }   /* ---------------------------------- 课本上的冒泡排序法执行结果是：  交换次数：32 -6  -4  -3  -2  0  2  3  4  5  6  ----------------------------------  */

user: user-0
content: 在进行双向(最小,最大)排序时,并没有降低交换次数.原码如下: /*  2013年12月25日圣诞节 改进冒泡法排序,虽然降低了循环次数,但交换次数没有下降(还是32次),效率应该不会提高.   */ # include <STDIO.H>  int Sort(int * pArr, int len) { 	int i, j, k, r; 	int min, max; 	r = 0; 	for(i=0; i<len/2; i++) 	{ 		k=0; 		printf("外循环次数：%d \n", i+1); 		for(j=i; j<len-1-i; j++) 		{ 			printf("内循环次数：k = %d \n", ++k); 			if(pArr[j] > pArr[j+1])   			{ 				max = pArr[j]; 				pArr[j] = pArr[j+1]; 				pArr[j+1] = max; 				r++; 			} 			if(pArr[i]>pArr[j]) 			{ 				min = pArr[j]; 				pArr[j] = pArr[i]; 				pArr[i] = min; 				r++; 			}  		} 		printf("\n"); 	} 	return r; } int main(void) { 	int a[10] = {0,-2,6,5,4,-4,3,2,-3,-6}; 	int i; 	int j = 0;  	printf("排序前："); 	for(i=0; i<10; i++) 	{ 		printf("%d  ", a[i]); 	}  	printf("\n");  	j = Sort(a, 10); 	printf("交换次数：%d", j);  	printf("排序后："); 	for(i=0; i<10; i++) 	{ 		printf("%d  ", a[i]); 	} 	printf("\n"); 	 	return 0; }  /* ---------------------------- 排序前：0  -2  6  5  4  -4  3  2  -3  -6 外循环次数：1 内循环次数：k = 1 内循环次数：k = 2 内循环次数：k = 3 内循环次数：k = 4 内循环次数：k = 5 内循环次数：k = 6 内循环次数：k = 7 内循环次数：k = 8 内循环次数：k = 9  外循环次数：2 内循环次数：k = 1 内循环次数：k = 2 内循环次数：k = 3 内循环次数：k = 4 内循环次数：k = 5 内循环次数：k = 6 内循环次数：k = 7    外循环次数：3 内循环次数：k = 1 内循环次数：k = 2 内循环次数：k = 3 内循环次数：k = 4 内循环次数：k = 5  外循环次数：4 内循环次数：k = 1 内循环次数：k = 2 内循环次数：k = 3  外循环次数：5 内循环次数：k = 1  交换次数：32排序后：-6  -4  -3  -2  0  2  3  4  5  6 ----------------------------   */

user: user-0
content: 冒泡法 排序需要 32次交换, 这种方法降低到24次交换,应该可以提高效率吧!
user-0 提问: 帮忙指点下看什么书

回复:
user: user-1
content: 我是大一的 现在把C程序设计的书看完了  哪位大神指点一下 适合继续学C#？ 如果还学要继续巩固C语言的话 我该看那些书？怎么做比较好呢？

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-0
content: 引用 2 楼 max_min_ 的回复:王爽的那本8086可以看看！ 正在看啊，写的很好。

user: user-3
content: 为什么非要看他的书

user: user-4
content: 王爽的那本8086可以看看！

user: user-5
content: 就用大学教材行了

user: user-6
content: 先问自己两个问题： 1、为什么要学汇编？ 2、为什么要学Win32平台？

user: user-7
content: 先把 16位汇编看完 ，有本书叫 <<汇编语言>> 作者 王爽，特别有名 再看 <<windows程序设计>> 一个老外好像叫 charles petzold ,也特别有名  前提是有 c语言基础，然后就可以看<<win32环境下汇编语言程序设计>>了， 我就是这个路线看的.

user: user-8
content: <<Intel汇编语言程序设计>>,不要太好

user: user-9
content: 想学汇编，直接王爽
user-0 提问: fflush的问题

回复:
user: user-1
content: 可能是以文本方式打开，这样写入'\n'时会多一个'\r'字节。  引用 楼主 rabbitjerry 的回复:使用fwrite频繁写文件，每次写固定的几十个字节，写完之后都用fflush函数刷新缓冲区。 这样会造成文件错误吗？ 我在具体实行的时候，查看文件的二进制数据，发现每次写的数据包多了一个字节。 请问是fflush造成的结果吗？

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复:推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了 “多一少一”问题占程序员常犯错误的10%以上！ 赵老师总结的到位。

user: user-3
content: 引用 2 楼 KenZhang1031 的回复:fflush是把缓存写到硬盘的，不会引起你说的错误。要查查程序。你的这个说法是不正确的，fflush只是将c的文件缓存刷新到系统层，而真正将系统层的文件缓存刷新到磁盘的是其他函数的功能_commit(Windows)/fsync(linux)

user: user-4
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  “多一少一”问题占程序员常犯错误的10%以上！

user: user-5
content: 引用 3 楼 turingo 的回复:可能是以文本方式打开，这样写入'\n'时会多一个'\r'字节。  [quote=引用 楼主 rabbitjerry 的回复:] 使用fwrite频繁写文件，每次写固定的几十个字节，写完之后都用fflush函数刷新缓冲区。 这样会造成文件错误吗？ 我在具体实行的时候，查看文件的二进制数据，发现每次写的数据包多了一个字节。 请问是fflush造成的结果吗？[/quote]  ++  试试二进制方式。

user: user-6
content: fflush是把缓存写到硬盘的，不会引起你说的错误。要查查程序。

user: user-7
content: 不会。 不是。  你的fwrite怎么调的？（代码呢？） 你的几十个字节怎么来的？（代码呢？）
user-0 提问: 在自定义标识符时,不能使用____关键字______和特定字.

回复:
user: user-1
content: 楼主是个好人啊

user: user-2
content: 看到答案我就来了

user: user-3
content: 不明就觉个厉

user: user-4
content: 特殊符号和GPU哭了！

user: user-5
content: 谢谢                   .

user: user-6
content: 直接带答案？ 接分接分

user: user-7
content: 楼主，你懂的。

user: user-8
content: LZ这是散分的节奏？
user-0 提问: 怎么做一个界面软件？

回复:
user: user-0
content: 各说各不同，唉 怎么我用CodeBlocks和GTK编译时提示少个DLL文件？

user: user-1
content: qt 不需要犹豫。

user: user-2
content: GTK+  引用 楼主 wshong2005 的回复:如果我想做一个界面的学生的管理成绩软件或其它界面软件时，请问用C还是C++？用什么库好点而且是跨平台的？qt？wxwidgets？(MFS不跨平台吧？) 如果是选那个界面库时是不是除了标准库外的还要学选的界面库里的库函数？ 有点无知，望详解！谢谢了呵呵。

user: user-3
content: 就LZ的关心点来说，Qt是比较好的选择，它是C++描述的。

user: user-4
content: 建议用xml写界面，移植xml解析的程序模块解析界面的xml生成界面，如此不但可以跨平台，还可实现界面和功能分开。

user: user-5
content: 是啊，要学库函数的，可以用那个Qt。不过我从来没写过界面软件，只用openGL写过图形！
user-0 提问: 字符串排序 冒泡法 memcpy内存报错 高手指点。。。

回复:
user: user-1
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-2
content: 引用 2 楼 user-5 的回复:in = "3122...改变指针指向常量区不可以改写其内容，不管memcpy或memmove都会报错吧。原申请100个内存地址也丢失。排序字串跑去搬动字符没啥效率，改用指针数组对指针进行排序吧... 正解。楼主可以把常量字符串拷贝到你分配的内存中。

user: user-3
content: 2楼说的也在理！竟然你已经分配了内存就不要再给它赋地址值了！ in = "3122…… 这句的意思是把后面常量字符串的地址赋值给in的 这里最好换成strcpy/memcpy/等函数

user: user-4
content: printf("%s\n", *in);这个地方出错了吧！！！

user: user-5
content: in = "3122...改变指针指向常量区不可以改写其内容，不管memcpy或memmove都会报错吧。原申请100个内存地址也丢失。排序字串跑去搬动字符没啥效率，改用指针数组对指针进行排序吧...

user: user-3
content: 换成memmove函数！ memcpy不支持内存重叠的！
user-0 提问: vs2010产生随机数时的一个问题

回复:
user: user-0
content: 已经解决了，谢谢！

user: user-1
content: 参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c  /*** *rand.c - random number generator * *       Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: *       defines rand(), srand() - random number generator * *******************************************************************************/  #include <cruntime.h> #include <mtdll.h> #include <stddef.h> #include <stdlib.h>  /*** *void srand(seed) - seed the random number generator * *Purpose: *       Seeds the random number generator with the int given.  Adapted from the *       BASIC random number generator. * *Entry: *       unsigned seed - seed to seed rand # generator with * *Exit: *       None. * *Exceptions: * *******************************************************************************/  void __cdecl srand (         unsigned int seed         ) {         _getptd()->_holdrand = (unsigned long)seed; }   /*** *int rand() - returns a random number * *Purpose: *       returns a pseudo-random number 0 through 32767. * *Entry: *       None. * *Exit: *       Returns a pseudo-random number 0 through 32767. * *Exceptions: * *******************************************************************************/  int __cdecl rand (         void         ) {         _ptiddata ptd = _getptd();          return( ((ptd->_holdrand = ptd->_holdrand * 214013L             + 2531011L) >> 16) & 0x7fff ); }

user: user-2
content: srand(time(0));只需要一次就可以了，不用每次都srand(time(0)); 不然每次都产生同一个数#include <stdio.h> #include <stdlib.h>    unsigned suijishu(int n) {     unsigned int i;      // srand(time(0));// 不需要每次都初始化        i = rand()%n;       return i; }  #include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "bx_suiji.h"   void main() {       srand(time(0));// 在这里初始化，就可以了。     char s[4] = {0};     int i=0,n=0;     for(n =0;n<2;n++)     {         for(i=0;i<4;i++)         {             s[i] = 'a'+suijishu(26);         }         for(i = 0;i<4;i++)         {             printf("%c",s[i]);         }         printf("\n");     }     printf("done!\n");       exit(0); }
user-0 提问: opencv图像处理代码优化

回复:
user: user-0
content: 引用 10 楼 baipv008 的回复:我觉得这段代码用查表法，起码快100倍。图像处理一般不在内层循环做复杂数值运算 嗯，是呀！正在做查表法，应该快很多的，thank you

user: user-0
content: 引用 8 楼 vipcxj 的回复:[quote=引用 7 楼 u011513563 的回复:] [quote=引用 5 楼 vipcxj 的回复:] 从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍 试过了并行思考，通过指令#pragma omp parallel for并行执行，可以使程序提高好几倍，[/quote]  其实还有HSFL之类的给GPU编程的语言，其实GPU的并行能力远强于CPU，你弄的图像处理程序，更是要时时和GPU打交道了[/quote] 其实之前对于这个GPU不太了解，因为接触时间也不是很长，多谢指点，又学到了点东西

user: user-0
content: 引用 9 楼 vipcxj 的回复:[quote=引用 8 楼 vipcxj 的回复:] [quote=引用 7 楼 u011513563 的回复:] [quote=引用 5 楼 vipcxj 的回复:] 从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍 试过了并行思考，通过指令#pragma omp parallel for并行执行，可以使程序提高好几倍，[/quote]  其实还有HSFL之类的给GPU编程的语言，其实GPU的并行能力远强于CPU，你弄的图像处理程序，更是要时时和GPU打交道了[/quote] 其实你pow(A,2)直接用A*A我估计可以快好多倍，你平方都用pow真是闲得蛋疼啊~[/quote]  是啊！没注意

user: user-1
content: 引用 7 楼 u011513563 的回复:[quote=引用 5 楼 vipcxj 的回复:] 从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍 试过了并行思考，通过指令#pragma omp parallel for并行执行，可以使程序提高好几倍，[/quote]  其实还有HSFL之类的给GPU编程的语言，其实GPU的并行能力远强于CPU，你弄的图像处理程序，更是要时时和GPU打交道了

user: user-2
content: 我觉得这段代码用查表法，起码快100倍。图像处理一般不在内层循环做复杂数值运算

user: user-1
content: 引用 8 楼 vipcxj 的回复:[quote=引用 7 楼 u011513563 的回复:] [quote=引用 5 楼 vipcxj 的回复:] 从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍 试过了并行思考，通过指令#pragma omp parallel for并行执行，可以使程序提高好几倍，[/quote]  其实还有HSFL之类的给GPU编程的语言，其实GPU的并行能力远强于CPU，你弄的图像处理程序，更是要时时和GPU打交道了[/quote] 其实你pow(A,2)直接用A*A我估计可以快好多倍，你平方都用pow真是闲得蛋疼啊~

user: user-3
content: 引用 5 楼 vipcxj 的回复:从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍 这个不错，图像可以分成上下两部分，起两个线程处理，分配到两个cpu。 速度再提升一倍应该问题不大。  分子部分的计算，完全可以移动到图像循环外部做预处理。  再加上 一些运算 * 和 / 再做一下简化，减少运算量。  再把汇编码 根据不同平台用一些快速的CPU指令优化一下会又有一些提升。  不过无论这种代码上优化的技巧有多高，最终仍然是比不上算法的改进提升的幅度大。  当然算法的改进是最难的。

user: user-0
content: 引用 5 楼 vipcxj 的回复:从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍 试过了并行思考，通过指令#pragma omp parallel for并行执行，可以使程序提高好几倍，

user: user-1
content: 从并行上思考吧，这种东西让GPU来算，速度会提高成百上千倍

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:搜"查表法"?  我也看了一些查表法的东西，的确可以提高速度很多，但是我这里好像不太适用，我利用指针对其进行处理，速度可以提高3、4倍，你也提供了一种很好的思路，多谢，

user: user-0
content: 引用 2 楼 gqjjqg 的回复:[quote=引用 楼主 u011513563 的回复:]  求各位大神指导，开发环境是opencv，代码执行速度大概是0.7秒左右，这只是对于一帧图片的处理，我处理的是视频流，2秒钟3帧图片，根本就达不到实时性要求，求各位大神指导下，3层for循环的优化，谢谢！！  row = 480, col = 640, Histbin = 16  不知道你是要做什么，光从代码上看，把最里面的那重循环优化一下应该就会好了吧。[/quote] 我是做图像处理的，内层函数是一个算法的实现表达式，我对立面的代码进行又花了下，利用指针对图像进行像素点提取，速度可以提高3、4倍以上，不过还是没有达到我的要求，不过我们思路一致，谢谢

user: user-3
content: 引用 楼主 u011513563 的回复:求各位大神指导，开发环境是opencv，代码执行速度大概是0.7秒左右，这只是对于一帧图片的处理，我处理的是视频流，2秒钟3帧图片，根本就达不到实时性要求，求各位大神指导下，3层for循环的优化，谢谢！！  row = 480, col = 640, Histbin = 16  不知道你是要做什么，光从代码上看，把最里面的那重循环优化一下应该就会好了吧。

user: user-4
content: 搜"查表法"?
user-0 提问: 下面函数，只要被调用就会导致单片机死机，请大家帮忙分析

回复:
user: user-0
content: 之前是定时去更新显示，调用上述函数，改成数值发生变化在调该函数，暂时没有发现问题。jieti

user: user-0
content: 感谢大家回复，暂时汇报一下情况。 1、dispbuf2[2] = '\0';这个是漏掉的代码，补上。 2、“char dispbuf1[6],dispbuf2[6] ;”尝试着增加过buf的长度，不过问题依旧存在，不是这个内存溢出导致的。 3，目前做法，之前是定时去更新显示，调用上述函数，改成数值发生变化在调该函数，暂时没有发现问题。    进一步测试中，感谢大家回复。

user: user-1
content: char dispbuf1[6],dispbuf2[6] ; 试试

user: user-2
content: 在单片机上遇到过中断处理函数中输出串口Log(printf)导致死机的问题。 当时的开发环境是Keil

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:将               //  dispbuf2[2] = '\0'; 改为                 dispbuf2[2] = '\0'; 试试看。  暂时调整上面函数被调用的频次，以前是定时调用刷新，现在改成判断数值变化，连续工作了9个小时了。 在观察24小时，汇报结果。

user: user-0
content: 引用 3 楼 zhaocanxing 的回复:你的putstr是怎么写的？可不可以贴出来看看？  暂时调整上面函数被调用的频次，以前是定时调用刷新，现在改成判断数值变化，连续工作了9个小时了。 如果这个问题还会发生，我再贴这段代码，谢谢关注。

user: user-3
content: 你的putstr是怎么写的？可不可以贴出来看看？

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:将               //  dispbuf2[2] = '\0'; 改为                 dispbuf2[2] = '\0'; 试试看。   晚上反馈结果，测试过程慢。 谢谢支持。

user: user-4
content: 将               //  dispbuf2[2] = '\0'; 改为                 dispbuf2[2] = '\0'; 试试看。
user-0 提问: 求大侠帮助，计算两个年份直接的闰年数，不用循环

回复:
user: user-0
content: 感谢大家，找了一个最简单的算法，分别求a年和b年与公元0年1月1日的闰年书，a/4-a/100+a/400，看到这个公式我就窒息了。

user: user-1
content: 2000年到2004年之间到底有几个闰年？

user: user-2
content: 一个数学问题： 给定x，y（x < y） 求x，y之间4的倍数的个数a，100的倍数的个数b，400的倍数的个数c 闰年的个数为a - b + c  至于求a的方法： if (x % 4 != 0)   x = x + 4 - x % 4; // 把x变成不小于x的能被4整除的数 if (y % 4 != 0)   y = y - y % 4; // 把y变成不大于y的能被4整除的数 if (x <= y)   a = (y - x) / 4 + 1; else   a = 0; 求b、c类似了

user: user-3
content: 1楼的思路正确

user: user-4
content: 我觉得大概是这个思路：先算超过400年，再算超过100年，再算100年内的。 设两年分别是整数a和b（b>a），则 闰年数=(（b - a）/400）*97 +(（b - a）% 400) / 100 * 24 + (((b - a) % 400) % 100) / 4。 结果不一定对，可能要再考虑a和b是闰年的情况。

user: user-5
content: 个人想法: 什么是闰年,每隔四年一次? 不对, 应该是每隔400年有400/4 - 3 = 97个,3个不是闰年的是,100,200,300,这3个能被100整除,却不能被400整除.所以每100年内, [n, n+100)有25或者24个, 当n%400==0就有25,其他24. 这样应该就能马上算出f(n)是从0,到n这年有多少个闰年,要求两个年份a,b中间的闰年数 f(b)-f(a)即可,b >= a

user: user-6
content: 先找到下一个闰年，然后再找到最后一个闰年 相减后除以4加1 就是 4的倍数的年份的个数  另其为S  然后对经过的百年进行逐一辨别 找出非闰年 令其为D  ans：S - D