Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请教fopen打开CSV文件输出时遇汉字乱码

回复:
user: user-1
content: FILE *pf = fopen(str, "r, ccs=UTF-8");  In Visual C++ 2005, fopen supports Unicode file streams. A flag specifying the desired encoding may be passed to fopen when opening a new file or overwriting an existing file, like this:  fopen("newfile.txt", "rw, ccs=<encoding>");  Allowed values of the encoding include UNICODE, UTF-8, and UTF16-LE. If the file is already in existence and is opened for reading or appending, the Byte Order Mark (BOM) is used to determine the correct encoding. It is not necessary to specify the encoding with a flag. In fact, the flag will be ignored if it conflicts with the type of the file as indicated by the BOM. The flag is only used when no BOM is present or if the file is a new file. The following table summarizes the modes used in for various flags given to fopen and Byte Order Marks used in the file.  Flag  No BOM (or new file)  BOM: UTF-8  BOM: UTF-16   UNICODE  ANSI  UTF-8  UTF-16LE   UTF-8  UTF-8  UTF-8  UTF-16LE   UTF-16LE  UTF-16LE  UTF-8  UTF-16LE    If mode is "a, ccs=<encoding>", fopen will first try to open the file with both read and write access. If it succeeds, it will read the BOM to determine the encoding for this file; however, if it fails, it will use the default encoding for the file. In either case, fopen will then re-open the file with write-only access. (This applies to mode a only, not a+.)

user: user-2
content: 应该是格式的问题 .csv文件的格式，要不就用unicode去读，或者是有一个下划线什么open的一个函数也可以 哈哈
user-0 提问: 怎么按字节读取报文？

回复:
user: user-1
content: memcpy Copies characters between buffers.  void *memcpy( void *dest, const void *src, size_t count );  Routine Required Header Compatibility  memcpy <memory.h> or <string.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  memcpy returns the value of dest.  Parameters  dest  New buffer  src  Buffer to copy from  count  Number of characters to copy  Remarks  The memcpy function copies count bytes of src to dest. If the source and destination overlap, this function does not ensure that the original source bytes in the overlapping region are copied before being overwritten. Use memmove to handle overlapping regions.  Example  /* MEMCPY.C: Illustrate overlapping copy: memmove  * handles it correctly; memcpy does not.  */  #include <memory.h> #include <string.h> #include <stdio.h>  char string1[60] = "The quick brown dog jumps over the lazy fox"; char string2[60] = "The quick brown fox jumps over the lazy dog"; /*                           1         2         3         4         5  *                  12345678901234567890123456789012345678901234567890  */  void main( void ) {    printf( "Function:\tmemcpy without overlap\n" );    printf( "Source:\t\t%s\n", string1 + 40 );    printf( "Destination:\t%s\n", string1 + 16 );    memcpy( string1 + 16, string1 + 40, 3 );    printf( "Result:\t\t%s\n", string1 );    printf( "Length:\t\t%d characters\n\n", strlen( string1 ) );     /* Restore string1 to original contents */    memcpy( string1 + 16, string2 + 40, 3 );     printf( "Function:\tmemmove with overlap\n" );    printf( "Source:\t\t%s\n", string2 + 4 );    printf( "Destination:\t%s\n", string2 + 10 );    memmove( string2 + 10, string2 + 4, 40 );    printf( "Result:\t\t%s\n", string2 );    printf( "Length:\t\t%d characters\n\n", strlen( string2 ) );     printf( "Function:\tmemcpy with overlap\n" );    printf( "Source:\t\t%s\n", string1 + 4 );    printf( "Destination:\t%s\n", string1 + 10 );    memcpy( string1 + 10, string1 + 4, 40 );    printf( "Result:\t\t%s\n", string1 );    printf( "Length:\t\t%d characters\n\n", strlen( string1 ) ); }   Output  Function:   memcpy without overlap Source:      fox Destination:   dog jumps over the lazy fox Result:      The quick brown fox jumps over the lazy fox Length:      43 characters  Function:   memmove with overlap Source:      quick brown fox jumps over the lazy dog Destination:   brown fox jumps over the lazy dog Result:      The quick quick brown fox jumps over the lazy dog Length:      49 characters  Function:   memcpy with overlap Source:      quick brown dog jumps over the lazy fox Destination:   brown dog jumps over the lazy fox Result:      The quick quick brown dog jumps over the lazy fox Length:      49 characters   Buffer Manipulation Routines  See Also   _memccpy, memchr, memcmp, memmove, memset, strcpy, strncpy
user-0 提问: 关于ffmpeg编码效率问题

回复:
user: user-1
content: 请问，解决了吗？ 我的问题是，解码4k视频时，ffmpeg3.x 很慢，大约一帧30Ms，但2.8版本就很快，一帧1Ms

user: user-2
content: 我的4320*2160的分辨率编码要70ms, 太慢了, 咋破?

user: user-3
content: 您好，我想请问一下，如何把编码速率、编码后图像的信噪比打印在屏幕上呢

user: user-4
content: ffmpeg编码应该不会如此慢? 你是4K屏幕? 1920x1080, 25FPS我觉得应该没问题,你再查查, 另外你测试逻辑是否正确呢?

user: user-5
content: 桌面录制似乎不太适合用mpeg编码。 搜一搜这方面的开源项目。
user-0 提问: linux下连接math.h出错求解

回复:
user: user-0
content: 引用 2 楼 ben040502 的回复:引用 1 楼 zhao4zhong1 的回复:return (int)floor(log((double)i));我试了，可还是不行啊。。。 引用 3 楼 zhao4zhong1 的回复:gcc -o -lm a test.o fun.o 试试看。恩，编译通过了，生成目标文件和连接时都需要加-lm，谢谢

user: user-1
content: gcc -o -lm a test.o fun.o 试试看。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:return (int)floor(log((double)i));我试了，可还是不行啊。。。

user: user-1
content: return (int)floor(log((double)i));
user-0 提问: c语言期末考试（江湖救急）

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:题目有错。 对于不是数值类型的行或列，有可能无法求出所谓的最大、最小值，也无法排序。+1,算法啥的去这里找找吧 https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c

user: user-2
content: 题目有错。 对于不是数值类型的行或列，有可能无法求出所谓的最大、最小值，也无法排序。
user-0 提问: 大神们，能给我一个c语言的俄罗斯方块的程序吗，tc下的，感激不尽啊！！！

回复:
user: user-1
content: 百度没有吗？

user: user-2
content: http://blog.csdn.net/zilaishuichina/article/details/37811257

user: user-3
content: 百度上都是，可以去下载

user: user-0
content: 没找到。。。
user-0 提问: 关于自绘窗的问题

回复:
user: user-0
content: 引用 5 楼 user-2 的回复:[quote=引用 4 楼 qq_18599547 的回复:] [quote=引用 1 楼 user-2 的回复:] The WM_PAINT Message 这个消息,我把自绘代码写进去 好像就自动的无限重绘![/quote] 你是不没加BeginPaint和EndPaint。给你个例子：Drawing in the Client Area[/quote] 这个是拷贝DC么? 我确实没加

user: user-0
content: 引用 1 楼 user-2 的回复:The WM_PAINT Message 这个消息,我把自绘代码写进去 好像就自动的无限重绘!

user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:画标题栏是响应的NCPAINT吗 是呀 我响应的是这个消息 然后超出边界后 就自绘. 但是移动速度快了 会闪速. 而且有的部分还没有绘制好.

user: user-1
content: 画标题栏是响应的NCPAINT吗

user: user-2
content: The WM_PAINT Message

user: user-2
content: 引用 4 楼 qq_18599547 的回复:[quote=引用 1 楼 user-2 的回复:] The WM_PAINT Message 这个消息,我把自绘代码写进去 好像就自动的无限重绘![/quote] 你是不没加BeginPaint和EndPaint。给你个例子：Drawing in the Client Area
user-0 提问: 各位大神帮帮忙看我哪里错了啊

回复:
user: user-1
content: 还有个小问题，main里面的循环怎么结束呀？如果必须按Ctrl+C那就有点太暴力了 一般是给个选择比如输入0就跳出循环结束程序

user: user-1
content: 代码没什么大问题。 你选择2选项之前，有没有先选择1来建立这个文件呢？必须先用1来建立这个文件，然后才能用2读呀。 选择了1之后，选择2之前先看看这个文件有没有创建成功、内容是否正确，这样可以定位是1的问题还是2的问题。  这里有个小错误，出错没有处理，不过暂时不是大问题。     if((fp=fopen("e:\\student.txt","w"))==NULL)     printf("请输入添加运动员的数量");
user-0 提问: c错误local variable 'string' used without having been initializ，运行不了

回复:
user: user-1
content: 区分 字符和字符串

user: user-2
content: 引用 1 楼 mewiteor 的回复:char string; 改成 char string[256/*或其它值*/]; 然后 pstr=&string; 改成 pstr=string;

user: user-3
content: string没有初始化

user: user-2
content: char string; 改成 char string[256/*或其它值*/];
user-0 提问: 关于自建窗口的移动问题

回复:
user: user-0
content: 引用 3 楼 mewiteor 的回复:WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。 这个消息可以这样判断么?  我在WM_LBUTTONDOWN消息下 判断鼠标所在坐标,条件成立后发送WM_NCHITTEST 消息,进入拖拽状态.

user: user-1
content: WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。

user: user-0
content: 引用 1 楼 zxhuser-2 的回复:没明白你说的是啥 一般的窗口 可以 实现 鼠标在窗口上按下 然后移动鼠标 实现 改变窗口的位置么. 我就要实现这功能 可是我创建的是无标题 无边框的弹出式窗口.如何实现?

user: user-0
content: 引用 8 楼 mewiteor 的回复:[quote=引用 5 楼 qq_18599547 的回复:] [quote=引用 3 楼 mewiteor 的回复:] WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。 我成功一般了,但是有个小问题,我在WM_NCHITTEST 消息下 判断 鼠标指针位置y<=20 返回 HTCAPTION 消息,否则返回HTCLIENT. 但是这个判断好像无效啊 不管在什么位置都可以拖拽 子窗口除外[/quote]用GetWindowRect function获得窗口坐标，lParam是鼠标相对于整个屏幕的坐标，需要自己换算一下。[/quote] 谢谢了 我搞定了  之前是判断条件有问题. 现在好了 万分感谢!

user: user-1
content: 引用 5 楼 qq_18599547 的回复:[quote=引用 3 楼 mewiteor 的回复:] WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。 我成功一般了,但是有个小问题,我在WM_NCHITTEST 消息下 判断 鼠标指针位置y<=20 返回 HTCAPTION 消息,否则返回HTCLIENT. 但是这个判断好像无效啊 不管在什么位置都可以拖拽 子窗口除外[/quote]用GetWindowRect function获得窗口坐标，lParam是鼠标相对于整个屏幕的坐标，需要自己换算一下。

user: user-1
content: 引用 6 楼 mewiteor 的回复:[quote=引用 4 楼 qq_18599547 的回复:] [quote=引用 3 楼 mewiteor 的回复:] WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。 这个消息可以这样判断么?  我在WM_LBUTTONDOWN消息下 判断鼠标所在坐标,条件成立后发送WM_NCHITTEST 消息,进入拖拽状态.[/quote] 不用WM_LBUTTONDOWN,用GetCursorPos function和ScreenToClient function就可以得到鼠标相对于窗口的坐标了。 并且WM_NCHITTEST是按下鼠标时触发的。[/quote] 可以不用GetCursorPos,lParam就是鼠标相对于屏幕的坐标。

user: user-1
content: 引用 4 楼 qq_18599547 的回复:[quote=引用 3 楼 mewiteor 的回复:] WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。 这个消息可以这样判断么?  我在WM_LBUTTONDOWN消息下 判断鼠标所在坐标,条件成立后发送WM_NCHITTEST 消息,进入拖拽状态.[/quote] 不用WM_LBUTTONDOWN,用GetCursorPos function和ScreenToClient function就可以得到鼠标相对于窗口的坐标了。 并且WM_NCHITTEST是按下鼠标时触发的。

user: user-0
content: 引用 3 楼 mewiteor 的回复:WM_NCHITTEST message 返回 HTCAPTION 的时候，系统会认为你点了窗口的标题栏，窗口会跟随鼠标移动。如果不想让鼠标点哪都跟随，可以根据鼠标相对于窗口的坐标，来判断何时返回 HTCAPTION ，何时返回 HTCLIENT 。 我成功一般了,但是有个小问题,我在WM_NCHITTEST 消息下 判断 鼠标指针位置y<=20 返回 HTCAPTION 消息,否则返回HTCLIENT. 但是这个判断好像无效啊 不管在什么位置都可以拖拽 子窗口除外

user: user-2
content: 没明白你说的是啥
user-0 提问: 帮我看看下面程序哪里错了？messaga为当前路径下创建的文件

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 怎么在一个函数中调用另一个函数中输入的的数据，新手求教

回复:
user: user-1
content: 把函数1里数据的地址传给函数2，就可以在函数2里用函数1里的对应数据

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:没有搞明白你说的啥] 就是比如我定义了一个函数sort1，在这个sort1 函数中输入了一个数组a[3]，然后我又定义了一个数组sort2，想在这个sort2函数中将sort1中输入的数据a[3]拿过来用在sort2中使用做一些其他事情比如排序，这个该怎么办

user: user-2
content: 没有搞明白你说的啥
user-0 提问: 大神请看过来，如何在c语言中打开视频文件

回复:
user: user-1
content: system("d:\\mv\\abc.avi");

user: user-2
content: 用SDL就可以了，不难

user: user-3
content: VC播放视频的方法有： MCI activex dShow 如果机器上有播放器，可以直接运行播放。（从注册表里面读取播放器的参数，然后命令行就可以开始播放了。）

user: user-0
content: 就是把视频保存为外部文件（不插入程序文件中），然后调用  这种的
user-0 提问: 请教C语言中局部变量的问题

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:return a; 返回的是数组地址，也就是指针，局部变量是放在调用堆栈里的，函数退出了，堆栈释放了，但数据还在。看下编译后的汇编就明白了。不过也跟编译器有关系。你可以做个实验，main里调用try两次，对a的赋值两次不同，看第一次数据的还在不在？ 引用 3 楼 gzwgyfgpf 的回复:你这不是局部变量的问题，而是数据在内存中的存储问题，你的代码中try（）函数传递的是数组的地址，所以主函数中仍可以操作数组  谢谢两位的解答

user: user-1
content: 你这不是局部变量的问题，而是数据在内存中的存储问题，你的代码中try（）函数传递的是数组的地址，所以主函数中仍可以操作数组

user: user-2
content: 补充一下，C不是严格意义的高级语言，应该算中级语言，对语言的安全性并不进行过多检查，所有C可以干一些很低级的事情，同样也可以做一些别的高级语言做不到的技巧。

user: user-2
content: return a; 返回的是数组地址，也就是指针，局部变量是放在调用堆栈里的，函数退出了，堆栈释放了，但数据还在。看下编译后的汇编就明白了。不过也跟编译器有关系。你可以做个实验，main里调用try两次，对a的赋值两次不同，看第一次数据的还在不在？
user-0 提问: 为什么Release版本无法运行？

回复:
user: user-0
content: 解决问题了，是小红伞的事情...

user: user-1
content: 只有杀软自己才知道了，先把杀毒软件关了试试呗

user: user-0
content: 引用 19 楼 falloutmx 的回复:只有杀软自己才知道了，先把杀毒软件关了试试呗试过了，还是不行（小红伞与360都关了.）

user: user-0
content: 引用 16 楼 falloutmx 的回复:这么看应该是杀毒软件阻止了这个程序的运行为毛只管release版本，而放纵debug版本呢...

user: user-2
content: 楼上正解，要是自己确认电脑和程序没毒，关闭杀毒软件再运行，看能不能成功

user: user-1
content: 这么看应该是杀毒软件阻止了这个程序的运行

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:引用 12 楼 idiot_fox 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 用depends.exe查看exe依赖的dlldebug可以加载进去，但是release版本的出现错误-“Access to F:\Temporary Folder\First\bin\Release\First.exe was denied” 很可能你的电脑染毒了，用杀毒软件杀杀。 或者 以管理员身份运行 以XP兼容模式运行[/quote]我用360查杀那个文件结果是TR.Drooper.Gen（释放木马病毒）

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:引用 12 楼 idiot_fox 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 用depends.exe查看exe依赖的dlldebug可以加载进去，但是release版本的出现错误-“Access to F:\Temporary Folder\First\bin\Release\First.exe was denied” 很可能你的电脑染毒了，用杀毒软件杀杀。 或者 以管理员身份运行 以XP兼容模式运行[/quote]我用小红伞扫描release版本的exe是病毒，然后再用管理员身份运行得到这个错误：

user: user-3
content: 引用 6 楼 idiot_fox 的回复:引用 5 楼 zhao4zhong1 的回复:程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。我的那个文件是在F盘，只是在桌面创建了快捷方式而已....这也会被杀软严格监控？ 带汉字的目录属于复杂目录，弄不好和全英文开发环境或操作系统的文件管理子系统不兼容。

user: user-3
content: 用depends.exe查看exe依赖的dll

user: user-0
content: 引用 6 楼 idiot_fox 的回复:引用 5 楼 zhao4zhong1 的回复:程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。我的那个文件是在F盘，只是在桌面创建了快捷方式而已....这也会被杀软严格监控？我将快捷方式去掉之后还是一样的结果。

user: user-0
content: 引用 4 楼 zjq9931 的回复:[quote=引用 3 楼 idiot_fox 的回复:] [quote=引用 1 楼 zjq9931 的回复:] 能否贴上源码？ 个人觉得是系统问题。#include <stdio.h>  main() {     printf("Hello world!\n");     getchar(); } [/quote] 改成这样试试，没有装你的那个编译器：  int main() {     printf("Hello world!\n");     getchar();     return 0; } [/quote]我试过了，还是不行。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。我的那个文件是在F盘，只是在桌面创建了快捷方式而已....这也会被杀软严格监控？

user: user-3
content: 引用 12 楼 idiot_fox 的回复:引用 9 楼 zhao4zhong1 的回复:用depends.exe查看exe依赖的dlldebug可以加载进去，但是release版本的出现错误-“Access to F:\Temporary Folder\First\bin\Release\First.exe was denied” 很可能你的电脑染毒了，用杀毒软件杀杀。 或者 以管理员身份运行 以XP兼容模式运行

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:用depends.exe查看exe依赖的dlldebug可以加载进去，但是release版本的出现错误-“Access to F:\Temporary Folder\First\bin\Release\First.exe was denied”

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:引用 6 楼 idiot_fox 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。我的那个文件是在F盘，只是在桌面创建了快捷方式而已....这也会被杀软严格监控？ 带汉字的目录属于复杂目录，弄不好和全英文开发环境或操作系统的文件管理子系统不兼容。[/quote]我试了一下全英文目录，也是不行。

user: user-3
content: 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。

user: user-4
content: 引用 3 楼 idiot_fox 的回复:[quote=引用 1 楼 zjq9931 的回复:] 能否贴上源码？ 个人觉得是系统问题。#include <stdio.h>  main() {     printf("Hello world!\n");     getchar(); } [/quote] 改成这样试试，没有装你的那个编译器：  int main() {     printf("Hello world!\n");     getchar();     return 0; }

user: user-0
content: 引用 1 楼 zjq9931 的回复:能否贴上源码？ 个人觉得是系统问题。#include <stdio.h>  main() {     printf("Hello world!\n");     getchar(); }

user: user-5
content: http://blog.csdn.net/a597926661/article/details/7871788
user-0 提问: 关于字符的排序问题，大神们来看下,应该不至于使用链表吧

回复:
user: user-1
content: loop 3 loop 7 loop 8 loop 9 tunnel 3 tunnel 4 tunnel 1000

user: user-1
content: 这样可好：  #include <stdio.h> #include <string.h> int mycmp(char *s1, char *s2) { 	char name1[20], name2[20]; 	long num1, num2; 	char *c; 	sscanf(s1, "%s%d", name1, &num1); 	sscanf(s2, "%s%d", name2, &num2); 	int res; 	res = strcmp(name1, name2); 	if (0 == res) 	{ 		return num1 - num2; 	} 	else return res; } void mysort(char **p, int n) { 	int i, j; 	for (i = 1; i < n; i++) 		for (j = 0; j < n - i; j++) 		{ 			if (mycmp(p[j], p[j + 1]) > 0) 			{ 				char *tmp; 				tmp = p[j]; 				p[j] = p[j+1]; 				p[j + 1] = tmp; 			} 		} } int main(void) { 	char *p[] = { "loop 7", "loop 9", "tunnel 1000", "loop 8", "tunnel 3", "loop 3", "tunnel 4" }; 	int n = sizeof(p) / sizeof(char*); 	mysort(p, n); 	int i; 	for (i = 0; i < n; i++) printf("%s\n", p[i]); 	return 0; }

user: user-2
content: 用字符串比较函数和快速排序算法应该不复杂

user: user-3
content: 典型的快速排序嘛

user: user-4
content: 不用链表，用冒泡排序即可
user-0 提问: 大神 我C语言看书看了无数遍了 可是还是掌握不好 求助啊

回复:
user: user-1
content: 嘛,努力学吧, 天才%1,  高手学的快的9%, 30%中等的, 50%中等的, 9%学的很慢,基本上会不了的, 1%自伤有问题, 你可以对号1下, 理论上编写程序时高中生可以干得,如果你入门慢点,可能是30%或50%里面的,学得慢也不是学不会, 慢慢努力就好!有3,5年时间,就可大成了

user: user-2
content: 多上机,敲代码

user: user-3
content: 只看不做是不行的

user: user-4
content: 估计C/C++老师如果是这个形象，学C/C++的人就会多10倍吧。

user: user-5
content: 引用 17 楼 zhao4zhong1 的回复:这个够清晰吧：  强烈推荐换上

user: user-6
content: 目测你看的书太烂  c primer plus 看过么

user: user-4
content: 就算你能将百度上能搜到的如何游泳相关的文字全部倒背如流，但你没真正下过水，你照样不会游泳。

user: user-4
content: 引用 15 楼 q364367207 的回复:[quote=引用 14 楼 zhao4zhong1 的回复:] 就算你能将百度上能搜到的如何游泳相关的文字全部倒背如流，但你没真正下过水，你照样不会游泳。  每次上论坛看到赵老师的头像 都会被吓到~~ 老师 您用个清晰点的头像呗[/quote] 这个够清晰吧：

user: user-4
content: 像素化的头像说明本ID是老人。

user: user-7
content: 引用 14 楼 zhao4zhong1 的回复:就算你能将百度上能搜到的如何游泳相关的文字全部倒背如流，但你没真正下过水，你照样不会游泳。  每次上论坛看到赵老师的头像 都会被吓到~~ 老师 您用个清晰点的头像呗

user: user-8
content: 我只记得  我的第一本c++书是  c++从入门到精通      特别棒还有视频  推荐

user: user-8
content: 要不自学  跟项目  要不找比自己厉害的人 跟人家学习

user: user-9
content: 引用 4 楼 user-16 的回复:[quote=引用 1 楼 qwqwqw408的回复:]想看书就成为高手是不可能的，只有实际写代码，天天写，才能成为大神。等你参与到项目开发中的时候，成长会很快的。想当年，我从java转入嵌入式C++开发，wince系统。那时候只懂C++基础，还不是半年就开发出来一套可视对讲系统。后面还开发了自己的UI框架，让C++做界面比其他语言都快，不用写代码，分分钟就能配置N个华丽的界面出来。 前辈，嵌入式就业前景好吗？我17年毕业[/quote]  嵌入式，看你做什么了。如果是做上位应用的话，没什么太大的前景。搞单片机开发，更是不行。。搞驱动开发，貌似还可以，比前两者强很多。。

user: user-10
content: 我也在学。以前也是只看书。现在找了几个好的题目自己研究，学的速度挺快的。多动手就行了

user: user-11
content: 我吃了这么多年饭,菜还是炒不好,求助

user: user-12
content: 各种  oj

user: user-13
content: 赞同楼上的话，先好好打基础。

user: user-14
content: 只看书很枯燥的，可以上自己写点感兴趣的东西，提升成就感，同时可以在遇到的困难中不断进步

user: user-15
content: 不要浮躁，在学校静下心来打好基础，当然有机会接触项目的话更好，等工作了都会有用武之地的

user: user-16
content: 引用 1 楼 qwqwqw408的回复:想看书就成为高手是不可能的，只有实际写代码，天天写，才能成为大神。等你参与到项目开发中的时候，成长会很快的。想当年，我从java转入嵌入式C++开发，wince系统。那时候只懂C++基础，还不是半年就开发出来一套可视对讲系统。后面还开发了自己的UI框架，让C++做界面比其他语言都快，不用写代码，分分钟就能配置N个华丽的界面出来。 前辈，嵌入式就业前景好吗？我17年毕业
user-0 提问: Visual 6.0C++软件不能生成可执行文件问题

回复:
user: user-1
content: 总是发现Path环境变量被某些软件安装时错误修改。比如带空格的目录名未加引号、带汉字的目录引起目录查找混乱等问题，严重影响系统查找可执行文件和dll。 编译此源代码，生成PathShortener.exe，然后在cmd窗口里面运行PathShortener.exe>path.txt，打开path.txt，手动将其内容拷贝粘贴覆盖修改‘我的电脑、属性、高级、环境变量、系统变量、Path、编辑、变量值’即可纠正设置错误的Path http://download.csdn.net/detail/zhao4zhong1/2652343
user-0 提问: C语言，这个程序是什么意思？

回复:
user: user-1
content: 蒙人玩的，没别的用途

user: user-2
content: for循环结果按次数 0112 2334 4556 6778 8,9,9,10 10,11,11,12 12,13,13,14 14,15,15,16 16,0,0,1 1,2,2,3 3,4,4,5, 5,6,6,7 7,8,8,9 9,10,10,11 11,12,12,13 13,14,14,15, 15,16,16,0 0,1,1,2 又回到第一次循环的状态，出不来

user: user-2
content: 开始p[0]=1,p[1]=2,p[2]=3.......p[15]=16, 循环完后p[16]=0,test=0, while看走来是死循环， for循环两次 第一次，head=test既0 tezt=p[head]既上句赋值p[0]=1: 第二次循环 head=test这时test=1: test=p[head]既p[1]=2;  最后好像是死循环

user: user-2
content: 输出应该是2

user: user-3
content: 把他运行起来看结果

user: user-4
content: 这个程序错误的吧，死循环吧
user-0 提问: 最近在做数据结构的课程设计，求大神帮忙看一下为什么便道里车辆进入停车场所收取费用按进入便道开始计算呢，怎么修改呢

回复:
user: user-0
content: 题目要求 :设停车场是一个可停放n辆汽车的狭长通道，且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序，依次由北向南排列（大门在最南端，最先到达的第一辆车停放在停车场的最北端）,若停车场内已停满n辆汽车，则后来的汽车只能在门外的便道上等候，一旦有车开走，则排在便道上的第一辆车即可开入；当停车场内某辆车要离开时，在它之后进入的车辆必须先退出车场为它让路，待该辆车开出大门外，其他车辆再按原次序进入车场，每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。  以栈模拟停车场，以队列模拟车场外的便道，按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项：汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为：若是车辆到达，则输出汽车在停车场内或便道上的停车位置；若是车辆离去，则输出汽车在停车场内停留的时间和应交纳的费用（在便道上停留的时间不收费）。栈以顺序结构实现，队列以链表结构实现。

user: user-0
content: 希望帮忙修改一下，谢谢了
user-0 提问: 一个数据结构的问题，表示已经疯了

回复:
user: user-0
content: 引用 1 楼 hnwyllmm 的回复:buf每次应该重新申请内存，而不应该用同一段内存，也不应该用栈上的内存 恩恩，我已经解决了

user: user-1
content: fgets读取文件，文件要以回车结束就好了。 或者按字节读取。或者一次性读到内存里面。

user: user-2
content: buf每次应该重新申请内存，而不应该用同一段内存，也不应该用栈上的内存
user-0 提问: 求大神相助，我的课设找了好久都不知道哪里出错了

回复:
user: user-1
content: F10单步调试一下看看么，你这么长代码，都懒得看懒得分析

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 求教一个关于C语言字符串的问题，直接使用“string”不可以

回复:
user: user-1
content: 我觉得应该是const的缘故，你把字符指针的const去掉试试，前面的应该也可以

user: user-0
content: 引用 2 楼 u013790834 的回复:TXBUFF是什么？是个字符串吗？你在while循环的时候只有*str++？TXBUFF这个东西不加吗？   TXBUFF是单片机的数据发送寄存器，给他赋值，直接就在串口发送出去了。

user: user-0
content: 引用 1 楼 user-5 的回复:C语言静态字符串是存储在程序的静态存储区域，const  char *ptr = "..." 和 char ptr[] = "..." 的区别是左边的ptr是指针，指针放置在栈上，但是指向的区域则是静态存储空间中的字符串（应该是一个特殊的数据段里面），而右边的ptr是字符数组，全部内容保存在栈里面。难道你的单片机程序没有静态存储区域吗？  我也觉得奇怪，所以来问问，还没来得及在VC上试试。

user: user-0
content: 引用 4 楼 mymtom 的回复:在C语言层面，写法没有问题的啊！  你头像是DATA的TB吗，这是我喜欢的英雄，可惜早就削弱成渣了。  我也觉得这个写法没问题，可是我的单片机就是不认，没理由这个单片机的编译器会不支持静态存储区的存储啊。

user: user-2
content: const 与指针配合的时候有很多种 用法的 const char *p char const  *p  char * const p

user: user-0
content: 引用 8 楼 gzwgyfgpf 的回复:我觉得应该是const的缘故，你把字符指针的const去掉试试，前面的应该也可以  貌似无用

user: user-0
content: 引用 3 楼 mymtom 的回复:while(*str != '/0') ===> while(*str != '\0')   这是个我在写帖子时候的笔误

user: user-3
content: 在C语言层面，写法没有问题的啊！

user: user-3
content: while(*str != '/0') ===> while(*str != '\0')

user: user-4
content: TXBUFF是什么？是个字符串吗？你在while循环的时候只有*str++？TXBUFF这个东西不加吗？

user: user-5
content: C语言静态字符串是存储在程序的静态存储区域，const  char *ptr = "..." 和 char ptr[] = "..." 的区别是左边的ptr是指针，指针放置在栈上，但是指向的区域则是静态存储空间中的字符串（应该是一个特殊的数据段里面），而右边的ptr是字符数组，全部内容保存在栈里面。难道你的单片机程序没有静态存储区域吗？
user-0 提问: C语言编译报错（ACM上报错，但是三种编译器都通过）

回复:
user: user-1
content: 中文空格和英文空格有差距？？TAT我的天.....

user: user-0
content: 问题解决了。。是代码中有中文空格符号，非常隐蔽的问题，用notepad替换掉了中文空格，ACM上可以提交通过了，谢谢大神

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

user: user-3
content: 编译器不同，差异可能很大的 我在我的机器上编译，加了两个头文件，用gcc(gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) )编译通过，代码如下： #include<stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int WQD=0x3f3f3f3f; typedef struct { 	int data; 	int fu; }jgt; jgt d[100];//建立100个结点   void Huffman(int n) { 	int m1,m2,x1,x2,t,i,j; 	for(i=0;i<n;i++) 	{ 		m1=m2=WQD; 		for(j=0;j<n+i;j++)//找到两个较小值的根结点 		{ 			if(m1>d[j].data&&d[j].fu==-1&&d[j].data!=0) 			{ 				m2=m1; 				m1=d[j].data; 				x2=x1; 				x1=j; 			} 			else if(m2>d[j].data&&d[j].fu==-1&&d[j].data!=0) 			{ 				x2=j; 				m2=d[j].data; 			} 		} 		if(m2!=WQD) 		{ 			t=n+i; 			d[t].data=m1+m2;//加入结点 			d[x1].fu=t; 			d[x2].fu=t; 		} 	} } int main() { 	clock_t start,finish; //测试运行时间  	start=clock(); 	char s[2000]; 	int i,l,c,p,zjs; 	while(scanf("%s",s)) 	{ 		if(strcmp(s,"END")==0) 			break; 		for(i=0;i<80;i++)//初始化 		{ 			d[i].data=0; 			d[i].fu=-1; 		} 		l=strlen(s);//记录字符串扯? 		for(i=0;i<l;i++) 			if(s[i]=='_') 				d[26].data++; 			else 				d[s[i]-'A'].data++; 		Huffman(27);//建立哈弗曼树 		for(i=0;i<=26;i++) 		{ 			c=0; 			if(d[i].data!=0) 			{ 				p=i; 				while(d[p].fu!=-1) 				{ 					c++; 					p=d[p].fu; 				} 				if(c==0) 					c=1; 				d[i].data=c; 			} 		} 		zjs=0;//zjs记录所需总字节数 		for(i=0;i<l;i++) 		{ 			if(s[i]=='_') 				zjs+=d[26].data; 			else 				zjs+=d[s[i]-'A'].data; 		} 		printf("%d %d %.1f\n",8*l,zjs,8.0*l*1.0/zjs); 		finish=clock(); 		printf("共耗时%.3lf秒",((double)finish-start)/1000); 	}           	return 0;  }
user-0 提问: 为什么C语言能稳居计算机语言排行榜第二

回复:
user: user-1
content: 嗯，决定以后精通C语言和.net，哈哈。

user: user-2
content: 就算工作中 用的是c++  java python 等等， 依然建议把c学好学精。   对你以后学其他语言都事半功倍。  学好了c， 给你一门其他语言，你从没接触过的语言，你都可以很自信的1周开始开发工作。

user: user-3
content: 我学电气的，用c的话可以更有效率咯

user: user-4
content: 我的经验，学会用C和python，可以干你想干的任何与编程有关的事情。ps. python排第几？

user: user-5
content: 这个问题就和该学哪门编程语言好一样，其实没什么标准答案，关键在于你计划以后干什么工作，接触的是哪门语言，这是我个人结合老师的话的一点想法

user: user-6
content: 引用 8 楼 luoweifu 的回复:引用 6 楼 zhao4zhong1 的回复:为什么C语言不能稳居计算机语言排行榜第一？因为事实就是从10年到现在基本都是排名第二，我觉得这已经很牛逼了。 因为商业应用层业务逻辑和手机APP开发的份额被java抢走了。

user: user-7
content: 我感觉嵌入式做设备什么的，底层的硬件环境还是比较需要效率，仪表阿，电子设备啊，还都是在用c来推动吧，这是软件应用的一大块东西，当然越来越多的被android之类的替代了

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:为什么C语言不能稳居计算机语言排行榜第一？因为事实就是从10年到现在基本都是排名第二，我觉得这已经很牛逼了。

user: user-8
content: 随便举几例子，web服务器如：apache，nginx。数据库如:mysql。操作系统：linux,unix。java的jvm。windows的MSDN中API函数都是以C形式给出的。这些够了不？

user: user-9
content: 低层开发用C容易构建，C有历史了，共享库也多，但是应用上层的开发都是高级语言了，JAVA  啥的。

user: user-10
content: 因为抵制高级语言的人很多   毕竟老一批的程序员还健在啊 你不能指望快退休的人还来重新学语言啊

user: user-11
content: c大部分时间都在一二吧, 至于面向过程或者面向对象就难分了, 有些人用c++的class当做struct在用,还不就是在用c, 我觉得unix系多用c, 这一系很多呀象unix,linux(象苹果和安卓底层不都是嘛)

user: user-12
content: 网搜一下咯！

user: user-13
content: C的却是面向过程的语言，但是，面向对象C照样能实现啊（比如gobject）。C语言的代码怎么会越来越少，我就是用C开发流媒体服务器，要知道操作系统都是用C写的，你就能明白C的地位了。

user: user-6
content: 为什么C语言不能稳居计算机语言排行榜第一？
user-0 提问: 数学问题：让一个点画圆的同时向一个方向匀速运动，方程怎么写？

回复:
user: user-1
content: 圆{x0,y0,r}的方程,参数a x=rcos(a)+y0 y=rsin(a)+y0 均匀画圆，用时为T，参数t a=t/T*2π 直线匀速移动,用时为T,起终点为{x00,y00},{x01,y01} x0=t/T*(x01-x00)+x00 y0=t/T*(y01-y00)+y00 带入圆的方程,得到xy关于t的方程 其中T,r,x00,y00,x01,y01为控制常数

user: user-2
content: 高中数学 复习一下
user-0 提问: 新手请教如何读取指定行字符串

回复:
user: user-0
content: 引用 1 楼 user-4 的回复:没理解啥意思，如果是二维数组变量的话，不是直接写行数就可以跳转吗？ 不是二维数组是char *str

user: user-0
content: 引用 3 楼 dabanzhu111 的回复:这功能我以前做过好像 326技术交流综合平台 http://www.sanerliu.com 能说一下当时你怎么做的吗

user: user-1
content: 重新声明一个char*的数组，先写个循环，把每行分开放到里面，之后要第几行都只接调用  比如你声明的数组名叫s, 需要第一行，就s[0]，第二行s[1]....

user: user-2
content: 仅供参考： #include <stdio.h> #include <string.h> #include <conio.h> FILE *f,*fl; long lastoffset=0,linenum=0; char ln[256]; int n,k; int main() {     fl=fopen("lastoffset","r");     if (fl) {         fscanf(fl,"%d %d",&lastoffset,&linenum);         fclose(fl);     }     f=fopen("data.txt","rb");     fseek(f,lastoffset,SEEK_SET);     while (1) {         if (NULL==fgets(ln,255,f)) {             lastoffset=0;             linenum=0;             break;         }         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         if ('\r'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         lastoffset=ftell(f);         linenum++;         printf("%8d: %s\n",linenum,ln);         k=getch();         if (k==27) break;//按Esc键提前退出     }     fclose(f);     fl=fopen("lastoffset","w");     fprintf(fl,"%d %d",lastoffset,linenum);     fclose(fl);     return 0; }

user: user-3
content: 引用 6 楼 iam007008 的回复:[quote=引用 2 楼 mewiteor 的回复:] 除非每行的长度一样长 如果一样长怎么读取呢，另外在请教一下 一个字符串能不能从指定字节开始读取呢，比如先读取前面1000字节，然后下次再从1001字节开始读取。[/quote]那就从str[1001]开始

user: user-0
content: 引用 2 楼 mewiteor 的回复:除非每行的长度一样长 如果一样长怎么读取呢，另外在请教一下 一个字符串能不能从指定字节开始读取呢，比如先读取前面1000字节，然后下次再从1001字节开始读取。

user: user-3
content: 除非每行的长度一样长

user: user-4
content: 没理解啥意思，如果是二维数组变量的话，不是直接写行数就可以跳转吗？
user-0 提问: 判断buf中的数据

回复:
user: user-1
content: #include<iostream> #include<stdio.h>  using std::cout; using std::endl;   int main(int argc, char **argv) {     char tmp[3][1024] = { "EB905716165790EBsfsfsfasdaf", "xsffEB905716165790EBdogfd.gf;gdk", "\0" };      for( int i = 0; i < 3; i++ )     {         if( 0 != strncmp(tmp[i], "EB905716165790EB", 16) ) // 比较前16个字符         {             // 如果没什么强制要求和需求必须使用memset，你可以用tmp[0] = '\0'让字符串为空串             //memset(tmp[i], 0, sizeof(tmp[i]) );             tmp[i][0] = '\0';         }          cout << tmp[i] << endl;     } }

user: user-2
content: memcmp Compare characters in two buffers.  int memcmp( const void *buf1, const void *buf2, size_t count );  Routine Required Header Compatibility  memcmp <memory.h> or <string.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  The return value indicates the relationship between the buffers.  Return Value Relationship of First count Bytes of buf1 and buf2  < 0 buf1 less than buf2  0 buf1 identical to buf2  > 0 buf1 greater than buf2    Parameters  buf1  First buffer  buf2  Second buffer  count  Number of characters  Remarks  The memcmp function compares the first count bytes of buf1 and buf2 and returns a value indicating their relationship.  Example  /* MEMCMP.C: This program uses memcmp to compare  * the strings named first and second. If the first  * 19 bytes of the strings are equal, the program  * considers the strings to be equal.  */  #include <string.h> #include <stdio.h>  void main( void ) {    char first[]  = "12345678901234567890";    char second[] = "12345678901234567891";    int result;     printf( "Compare '%.19s' to '%.19s':\n", first, second );    result = memcmp( first, second, 19 );    if( result < 0 )       printf( "First is less than second.\n" );    else if( result == 0 )       printf( "First is equal to second.\n" );    else if( result > 0 )       printf( "First is greater than second.\n" );    printf( "Compare '%.20s' to '%.20s':\n", first, second );    result = memcmp( first, second, 20 );    if( result < 0 )       printf( "First is less than second.\n" );    else if( result == 0 )       printf( "First is equal to second.\n" );    else if( result > 0 )       printf( "First is greater than second.\n" ); }   Output  Compare '1234567890123456789' to '1234567890123456789': First is equal to second. Compare '12345678901234567890' to '12345678901234567891': First is less than second.   Buffer Manipulation Routines  See Also   _memccpy, memchr, memcpy, memset, strcmp, strncmp

user: user-3
content: 你这个EB905716165790EB表示是ascii码？还是16进制的字节？不管是哪种情况，都不能用strcmp,用memcmp就可以了。

user: user-4
content: memcmp 上面打错了

user: user-5
content: 一般控制数据协议，读取某一个字节就行了

user: user-6
content: 取buffer前面的字符出来进行比对？

user: user-4
content: memcpy strncmp 都可以
user-0 提问: [原创]一个大学生作业的地铁程序的源代码

回复:
user: user-1
content: 没看懂楼主想问什么

user: user-2
content: 引用 1 楼 wenpinglaoyao 的回复:没看懂楼主想问什么 LZ：马上就可以用手机查看地铁信息了
user-0 提问: 野指针问题，为什么这样不能释放

回复:
user: user-1
content: 这个p的变量多余的吧，把char 转换为struct再释放，还不如直接释放    struct Ateacher* p = NULL;     if (myarray == NULL)     {         return;     }       for (int i = 0; i < count; i++)     {         p = myarray[i].a_name;         if (p != NULL)         {

user: user-2
content: 好像之前已经对结构体里的成员一个成员赋空了，已经释放了，在此释放好像就有问题吧，再此释放，对象不存在了啊

user: user-3
content: 我也觉得上楼上的原因，不是 tArray NULL的问题

user: user-0
content: 引用 1 楼 love1937 的回复:line:112 tArray->a_name = NULL; // tArray已被释放，此处故障 对对对对对，已经释放了

user: user-4
content: 引用 1 楼 love1937 的回复:line:112 tArray->a_name = NULL; // tArray已被释放，此处故障 ++

user: user-5
content: line:112 tArray->a_name = NULL; // tArray已被释放，此处故障
user-0 提问: 你好，菜鸟求指导

回复:
user: user-1
content: 看下这个： http://blog.csdn.net/zhangxiangdavaid/article/details/46606457

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:个人经验：当刚接触一个新概念有点模糊不清的时候，急着跟人讨论还不如硬着头皮再多看看书或百度百科或维基百科对应或相关词条的解释呢。 不是急着和别人讨论，我只是想学的清楚一些，同样谢谢你的回复，我只是个初学者，没什么人来知道只能在网上和书上查看一些资料，学历比较低，有的时候，网上书上看的似懂非懂，呵呵

user: user-0
content: 引用 10 楼 zhangxiangDavaid 的回复:[quote=引用 9 楼 a339299936 的回复:] [quote=引用 7 楼 zhangxiangDavaid 的回复:] [quote=引用 3 楼 a339299936 的回复:] 各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？ 了解下栈：http://blog.csdn.net/zhangxiangdavaid/article/details/26819603[/quote] 谢谢，我掌握了基本的栈操作和定义，但是我是想问，如果直接拿出来用栈内的值，不是更方便吗？为何还要一个一个的拿出来放进去，就算是有规律，但是这种规律不是更麻烦吗？[/quote]  引用 9 楼 a339299936 的回复:[quote=引用 7 楼 zhangxiangDavaid 的回复:] [quote=引用 3 楼 a339299936 的回复:] 各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？ 了解下栈：http://blog.csdn.net/zhangxiangdavaid/article/details/26819603[/quote] 谢谢，我掌握了基本的栈操作和定义，但是我是想问，如果直接拿出来用栈内的值，不是更方便吗？为何还要一个一个的拿出来放进去，就算是有规律，但是这种规律不是更麻烦吗？[/quote] 如果是数组存放的，当然可以随机存取；但如果是链表呢？此时显然不可随机存储[/quote] 谢谢解答，虽然还有一些不理解，但可以肯定，栈的实用性。

user: user-2
content: 个人经验：当刚接触一个新概念有点模糊不清的时候，急着跟人讨论还不如硬着头皮再多看看书或百度百科或维基百科对应或相关词条的解释呢。

user: user-1
content: 引用 9 楼 a339299936 的回复:[quote=引用 7 楼 zhangxiangDavaid 的回复:] [quote=引用 3 楼 a339299936 的回复:] 各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？ 了解下栈：http://blog.csdn.net/zhangxiangdavaid/article/details/26819603[/quote] 谢谢，我掌握了基本的栈操作和定义，但是我是想问，如果直接拿出来用栈内的值，不是更方便吗？为何还要一个一个的拿出来放进去，就算是有规律，但是这种规律不是更麻烦吗？[/quote]  引用 9 楼 a339299936 的回复:[quote=引用 7 楼 zhangxiangDavaid 的回复:] [quote=引用 3 楼 a339299936 的回复:] 各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？ 了解下栈：http://blog.csdn.net/zhangxiangdavaid/article/details/26819603[/quote] 谢谢，我掌握了基本的栈操作和定义，但是我是想问，如果直接拿出来用栈内的值，不是更方便吗？为何还要一个一个的拿出来放进去，就算是有规律，但是这种规律不是更麻烦吗？[/quote] 如果是数组存放的，当然可以随机存取；但如果是链表呢？此时显然不可随机存储

user: user-0
content: 引用 7 楼 zhangxiangDavaid 的回复:[quote=引用 3 楼 a339299936 的回复:] 各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？ 了解下栈：http://blog.csdn.net/zhangxiangdavaid/article/details/26819603[/quote] 谢谢，我掌握了基本的栈操作和定义，但是我是想问，如果直接拿出来用栈内的值，不是更方便吗？为何还要一个一个的拿出来放进去，就算是有规律，但是这种规律不是更麻烦吗？

user: user-2
content: http://baike.baidu.com/link?url=nSzypTRPzLS8DR6zuE0qDfcfxtwa3gDMgT1fUykVQsHhyI3whnYyxH9zrsu3WuTszHrtq0ZaWkPOHU2NJ2jnsa

user: user-1
content: 引用 3 楼 a339299936 的回复:各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？ 了解下栈：http://blog.csdn.net/zhangxiangdavaid/article/details/26819603

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:百度百科自己搜就那么费劲吗？ 能百度，也就不来论坛讨论了

user: user-2
content: 百度百科自己搜就那么费劲吗？

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:波兰表达式更易于解析 解析？能举个例子吗？

user: user-0
content: 各位好，刚刚了解到了逆波兰、“栈”的概念、请问栈不就是数组吗？取值存值都有局限性，直接拿出来你想用的值不就可以了吗？干嘛要用“栈”？它有什么好处？

user: user-1
content: 波兰表达式更易于解析

user: user-3
content: 请先尝试编写一个支持加、减、乘、除、()运算的计算器。看看不用逆波兰表达式，你的优先级是如何确定的。
user-0 提问: 一个排序程序，当数组长度超过10000时，程序报错。请大家来看看问题出在哪里。

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 我和你用的开发环境好像不一样，我建议你单步调试一下，应该就可以找出问题了

user: user-3
content: 对于递归算法，递归过深可能会导致线程的栈空间不足。

user: user-4
content: 超出在栈区大小吧 栈大小有限制的跟编译器有关，跟系统有关.  //一般都有 8K 以上...

user: user-5
content: 静态数组长度有限制吧，不能定义的太大吧
user-0 提问: 请教一个关于字符串交换的问题

回复:
user: user-1
content: 楼上各位已给出答案，我路过接个分好了。。。

user: user-2
content: char **tmp=NULL; *tmp=*NULL;      //出错

user: user-0
content: 引用 1 楼 user-3 的回复:tmp是NULL时，*tmp无效 其实，自己不知道tmp内容是什么的时候，*tmp都是无效的，什么都可能，系统不挂就很不错了 恩明白了，主要是由于tmp被初始化成NULL，*tmp是无效的。 经过测试，当tmp不为NULL时，也是OK的 void swap_string1(char **p1, char **p2) { 	char **tmp = NULL; 	char *p = ""; 	tmp = &p; 	*tmp = *p1; 	*p1 = *p2; 	*p2 = *tmp; }

user: user-3
content: tmp是NULL时，*tmp无效 其实，自己不知道tmp内容是什么的时候，*tmp都是无效的，什么都可能，系统不挂就很不错了
user-0 提问: C语言读取文本内容并分割到指定文本

回复:
user: user-1
content: 才50行不到的代码，很好理解的，加油！

user: user-0
content: 引用 7 楼 zhangxiangDavaid 的回复:这样可好：  #include <stdio.h> #include <string.h> FILE *f, *fset; char name[10]; char buf[256]; int i; int main(void) { 	if (NULL == (f = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Unable to open file!\n"); 		return 1; 	} 	i = 1; 	sprintf(name, "set%d.txt", i++); 	if (NULL == (fset = fopen(name, "w"))) 	{ 		fprintf(stderr, "Unable to open file!\n"); 		return 1; 	} 	while (1) 	{ 		if (NULL == fgets(buf, 255, f)) break; 		if (strstr(buf, "set")) 		{ 			fclose(fset); 			sprintf(name, "set%d.txt", i++); 			if (NULL == (fset = fopen(name, "w"))) 			{ 				fprintf(stderr, "Unable to open file!\n"); 				return 1; 			} 		} 		fprintf(fset, "%s", buf); 	} 	fclose(f); 	return 0; }  Perfect！谢谢！如果可以给我讲解下就好了，谢谢

user: user-1
content: 引用 10 楼 le0102 的回复:[quote=引用 9 楼 zhangxiangDavaid 的回复:] 才50行不到的代码，很好理解的，加油！ 再请教一个问题，如何获得指定的字符串呢？[/quote] 什么意思？具体点

user: user-0
content: 引用 9 楼 zhangxiangDavaid 的回复:才50行不到的代码，很好理解的，加油！ 再请教一个问题，如何获得指定的字符串呢？

user: user-1
content: 这样可好：  #include <stdio.h> #include <string.h> FILE *f, *fset; char name[10]; char buf[256]; int i; int main(void) { 	if (NULL == (f = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Unable to open file!\n"); 		return 1; 	} 	i = 1; 	sprintf(name, "set%d.txt", i++); 	if (NULL == (fset = fopen(name, "w"))) 	{ 		fprintf(stderr, "Unable to open file!\n"); 		return 1; 	} 	while (1) 	{ 		if (NULL == fgets(buf, 255, f)) break; 		if (strstr(buf, "set")) 		{ 			fclose(fset); 			sprintf(name, "set%d.txt", i++); 			if (NULL == (fset = fopen(name, "w"))) 			{ 				fprintf(stderr, "Unable to open file!\n"); 				return 1; 			} 		} 		fprintf(fset, "%s", buf); 	} 	fclose(f); 	return 0; }

user: user-2
content: 没读一行，看开头是不是set，等于是操作字符串

user: user-3
content: 引用 4 楼 le0102 的回复:[quote=引用 2 楼 henuyx 的回复:] 一口气全读出来到一个buffer中（也可以每次读固定字节，比如10M？5M？1M？） 然后再分析这个buffer中的数据，每个set分一段即可。   ------------------ 个人理解。 不能固定字节，因为两个set之间的长度是会变的[/quote]  假如我给你一段字符串，然后告诉你这段字符串中有一些字符@，然后让你将以@分隔的字串提取出来，你会怎么做？？ 你是不是会了？  然后，现在这段字符串在文件里，而且这个特殊的字符@换成set，然后你会怎么做？ 一样道理！ 你管它每个set段多长了，尽管读出来就是了！想读多少读多少！一口气读完也没人管你！（当然前提内存受得了！） 然后你 按照set再去分段就是了。  只要注意最后一个set段可能不完整，下次读取的时候 注意就是了。   ------------------ 我不会再解释了....

user: user-0
content: 引用 2 楼 henuyx 的回复:一口气全读出来到一个buffer中（也可以每次读固定字节，比如10M？5M？1M？） 然后再分析这个buffer中的数据，每个set分一段即可。   ------------------ 个人理解。 不能固定字节，因为两个set之间的长度是会变的

user: user-0
content: 引用 1 楼 user-4 的回复:文件不大就全部读到内存中,, 当一个字符串处理 实际编写呢，用什么函数

user: user-3
content: 一口气全读出来到一个buffer中（也可以每次读固定字节，比如10M？5M？1M？） 然后再分析这个buffer中的数据，每个set分一段即可。   ------------------ 个人理解。

user: user-4
content: 文件不大就全部读到内存中,, 当一个字符串处理
user-0 提问: C语言中的变量的内存地址是不是不变的？

回复:
user: user-0
content: 引用 3 楼 tangtangtangbaoli 的回复:计算机内存区分全局静态区,堆区,代码区,还有栈区,你的这段代码的二进制指令放在代码区,里面定义的这些变量,都在内存的栈区,可以直接对栈的内存的内容赋值谢谢大师，我懂了，谢谢

user: user-0
content: 引用 1 楼 blueln 的回复:在一次运行过程中，操作系统为变量分配好空间后，变量地址就不变了。恩恩，我懂了，谢谢大神哈

user: user-1
content: 计算机内存区分全局静态区,堆区,代码区,还有栈区,你的这段代码的二进制指令放在代码区,里面定义的这些变量,都在内存的栈区,可以直接对栈的内存的内容赋值

user: user-2
content: int a; int * p = &a;

user: user-3
content: &a   变量a的地址 &b   变量b的地址

user: user-4
content: 在一次运行过程中，操作系统为变量分配好空间后，变量地址就不变了。
user-0 提问: C语言中PlaySound的使用

回复:
user: user-1
content: 楼上正解，要包含额外的库文件。

user: user-2
content: 调用PlaySound函数需要加载头文件和库文件： #include <mmsystem.h>  #pragma comment(lib, "winmm.lib") 你不贴错误，让别人怎么看。另外playsound只能播放单个wav音频文件

user: user-3
content: 第一，用MSDN而不是xxxx
user-0 提问: 关于内存，malloc的一个问题，在很多地方调用了malloc，但是有，也只有一个地方报错了

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

user: user-0
content: 引用 6 楼 todo9351 的回复:malloc都是要判断返回值的，先在每次 malloc 之后检查一下返回值，可能是程序的堆栈设置过低，或者其他地方分配了巨大空间之类的，导致分配不出空间。  malloc返回的值不就是分配好的内存头地址吗？这个怎么检查？我都检查过了，有东西的

user: user-2
content: malloc都是要判断返回值的，先在每次 malloc 之后检查一下返回值，可能是程序的堆栈设置过低，或者其他地方分配了巨大空间之类的，导致分配不出空间。

user: user-0
content: 引用 4 楼 user-5 的回复:你不用强调新声明的 在你调用malloc之前，heap就已经被破坏了 要你跟的是这个，即对所有有操作的内存的跟踪  假如说，有一个地方的malloc造成了heap的破坏，那么我怎么看是否破坏了？  我的意思就是，调试的时候，我并不知道怎么才算是破坏了，你能给点建议吗？

user: user-3
content: 引用 12 楼 yingzijuntuan 的回复:[quote=引用 11 楼 wang0635 的回复:] [quote=引用 9 楼 yingzijuntuan 的回复:] [quote=引用 8 楼 wang0635 的回复:] 126行：申请了一个struct  node_weight大小空间 131行：使用了多个，i大于0时就越界了  对于这个问题，我感觉很奇怪呢，为什么当时不报错呢？  其实我当时看到这里的时候，感觉到了很奇怪，但是，运行过去后，发现没问题，而且每个指针都有东西，所以我就没管。  我当时也觉得它是有问题的，但是为什么不报错呢？没有报指针越界的那种错误？[/quote]  C语法上不管越界的。不光越界问题，像参数传递、类型转换等，正确性都由程序员自己保证[/quote]  是的，我刚刚试过了，下面这段代码都没问题。 但是，我记得以前经常遇到指针越界的问题呀？我记得会报错的吧？不一定是这种情况下，但是，我记得如果有野指针的话，会报错的呀，是哪种情况？  int *a = (int *)malloc(sizeof(int)); 	a[0]=1; 	a[1]=2; 	printf("%d\n%d\n",a[0],a[1]);[/quote]  C语言甚至允许程序操纵内存任何位置，编译器不会报错。如果动了不该动的，是操作系统要提意见了

user: user-0
content: 引用 11 楼 wang0635 的回复:[quote=引用 9 楼 yingzijuntuan 的回复:] [quote=引用 8 楼 wang0635 的回复:] 126行：申请了一个struct  node_weight大小空间 131行：使用了多个，i大于0时就越界了  对于这个问题，我感觉很奇怪呢，为什么当时不报错呢？  其实我当时看到这里的时候，感觉到了很奇怪，但是，运行过去后，发现没问题，而且每个指针都有东西，所以我就没管。  我当时也觉得它是有问题的，但是为什么不报错呢？没有报指针越界的那种错误？[/quote]  C语法上不管越界的。不光越界问题，像参数传递、类型转换等，正确性都由程序员自己保证[/quote]  是的，我刚刚试过了，下面这段代码都没问题。 但是，我记得以前经常遇到指针越界的问题呀？我记得会报错的吧？不一定是这种情况下，但是，我记得如果有野指针的话，会报错的呀，是哪种情况？  int *a = (int *)malloc(sizeof(int)); 	a[0]=1; 	a[1]=2; 	printf("%d\n%d\n",a[0],a[1]);

user: user-3
content: 引用 9 楼 yingzijuntuan 的回复:[quote=引用 8 楼 wang0635 的回复:] 126行：申请了一个struct  node_weight大小空间 131行：使用了多个，i大于0时就越界了  对于这个问题，我感觉很奇怪呢，为什么当时不报错呢？  其实我当时看到这里的时候，感觉到了很奇怪，但是，运行过去后，发现没问题，而且每个指针都有东西，所以我就没管。  我当时也觉得它是有问题的，但是为什么不报错呢？没有报指针越界的那种错误？[/quote]  C语法上不管越界的。不光越界问题，像参数传递、类型转换等，正确性都由程序员自己保证

user: user-4
content: C语言不管这个

user: user-0
content: 引用 8 楼 wang0635 的回复:126行：申请了一个struct  node_weight大小空间 131行：使用了多个，i大于0时就越界了  对于这个问题，我感觉很奇怪呢，为什么当时不报错呢？  其实我当时看到这里的时候，感觉到了很奇怪，但是，运行过去后，发现没问题，而且每个指针都有东西，所以我就没管。  我当时也觉得它是有问题的，但是为什么不报错呢？没有报指针越界的那种错误？

user: user-3
content: 126行：申请了一个struct  node_weight大小空间 131行：使用了多个，i大于0时就越界了

user: user-5
content: 你不用强调新声明的 在你调用malloc之前，heap就已经被破坏了 要你跟的是这个，即对所有有操作的内存的跟踪

user: user-0
content: 引用 2 楼 user-5 的回复:debugger加数据断点，多半哪里操作越界。  断点加过了，首先，这个变量是新申明的，然后给一个malloc的指针  不是加断点的问题，断点我加过了，就是malloc这里出问题，但是完全不知道怎么出的问题  你能帮忙看看吗？直接调试一下94行就行

user: user-5
content: debugger加数据断点，多半哪里操作越界。

user: user-0
content: 错了，sorry，错误代码在94行 temp=(struct node *)malloc(sizeof(struct node ))  都不用管逻辑之类的问题，就是这个赋值有问题
user-0 提问: C语言对txt文件中某一行的某几个字符修改  和  fgets（）在vs2013怎么用

回复:
user: user-1
content: 推荐一个博客可以参考一下http://blog.csdn.net/mg0832058/article/details/5890688

user: user-2
content: int main(void) { 	FILE *f1, *f2; 	f1 = fopen("1.txt", "r"); 	f2 = fopen("2.txt", "w"); 	char buf[256]; 	char *p; 	while (1) 	{ 		if (NULL == fgets(buf, 255, f1)) break; 		if (p = strstr(buf, "1234")) 		{ 			memmove(p + strlen("5678"), p + strlen("1234"), strlen(p + strlen("1234")) + 1); 			strncpy(p, "5678", strlen("5678")); 		} 		fprintf(f2, "%s", buf); 	} 	_fcloseall(); 	return 0; }

user: user-3
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。

user: user-4
content: 把文件读入内存 对内存进行操作 将操作结果写会文件  基本上以下函数应该要会用 fopen fread/fscanf fwrite/fprintf fclose  字符串相关的函数要会用 指针操作要会
user-0 提问: 大神帮帮忙，刚开始学的的c。老师布置的作业错了好多，大家帮忙找找

回复:
user: user-1
content: 引用 6 楼 leee7338 的回复:5L威武

user: user-2

user: user-3
content: 5L威武

user: user-1
content: 修改如下：  #include<stdio.h> #include<stdlib.h> #include<conio.h> #define N 3 #define M 3 typedef struct student { 	int num; 	char name[20]; 	int score[3]; 	float average; }STU; STU stu[N]; void input(); void select(); void statistics(); void menu(); void input() { 	int i, j; 	float temp;   //zx 	printf("\t\t成绩录入\n\n"); 	for (i = 0; i < N; i++); 	{ 		temp = 0;   //zx 		printf("请输入学号："); 		scanf("%d", &stu[i].num); 		printf("请输入姓名："); 		//scanf("%s", &stu[i].name); 		scanf("%s", stu[i].name);   //zx 		for (j = 0; j < M; j++); 		{ 			printf("第%d门成绩的分数为：", j + 1); 			scanf("%d", &stu[i].score[j]); 			temp += stu[i].score[j];    //zx 		} 		stu[i].average = temp / M;   //zx 		printf("\n\n"); 	} 	printf("\n\n"); 	printf("输入完毕！按任意键返回主菜单！"); 	getch(); } void select(int no) { 	int i; 	printf("学生%d号:\n", no); 	printf("学号:%d\n", stu[no - 1].num); 	printf("姓名:%s\n", stu[no - 1].name); 	for (i = 0; i < M; i++) 	{ 		printf("第%d门的课程的成绩为：", i + 1); 		printf("%d\n", stu[no - 1].score[i]); 	} 	printf("\n按任意键返回主菜单!"); 	getch(); } void statistics() { 	int i = 0; 	int j = 0; 	/*学生成绩平均分*/ 	printf("\t\t3成绩统计\n\n"); 	printf("\n学生成绩平均分:"); 	for (j = 0; j < N; j++) 	{ 		printf("\n学生%s的成绩平均成绩为:", stu[j].name); 		printf("%0.2f分", stu[j].average); 	} 	/*排序*/ 	for (j = 1; j < N; j++) 		for (i = 0; i < N - j; i++) 			if (stu[i].average < stu[i + 1].average) 			{ 				//不可能只交换平均成绩 				//temp = stu[i].average; 				//stu[i].average = stu[i + 1].average; 				//stu[i + 1].average = temp; 				STU temp; 				temp = stu[i]; 				stu[i] = stu[i + 1]; 				stu[i + 1] = temp; 			} 	printf("\n\n学生平均成绩前三名:"); 	for (i = 0; i < 3; i++) 	{ 		printf("\n第%d名:%0.2f分", i + 1, stu[i].average); 	} 	printf("\n\n按任意键返回主菜单!"); 	getch(); } void menu() { 	int num = 0; 	int n = 0; 	printf("\n\\t\t\t学生成绩管理系统\n\n"); 	printf("\t\t\t1成绩录入\n\t\t\t2成绩查询\n\t\t\t3成绩统计\n\t\t\t4退出系统\n"); 	printf("\t\t\tchoose:"); 	scanf("%d", &num); 	system("cls"); 	switch (num) 	{ 	case 1: input(); break; 	case 2: printf("\t\t2成绩查询\n\n"); printf("请输入要查询的学生号（1~3)："); scanf("%d", &n); select(n); break; 	case 3: statistics(); break; 	case 4: exit(0); 	} } void main() { 	while (1) 	{ 		system("cls"); /*清屏*/ 		menu(); 	} }

user: user-0
content: 加了这个结构体还是会出错

user: user-4
content: 引用 2 楼 ldplsj 的回复:需要给结构体一个对象。 struct student { int num; char name[20]; int score[3]; float average;	 }stu; stu stu[N];

user: user-4
content: 需要给结构体一个对象。

user: user-4
content: void input(); void select(); void statistics(); void menu(); void input() 这些函数没有传参，也没有相互调用，就算对了又怎样，有什么意义
user-0 提问: 调用fprintf函数，中文写入文件偶尔出错

回复:
user: user-1
content: fflush清空缓冲区，把缓冲区里的东西，写入目标。

user: user-2
content: fflush Flushes a stream.  int fflush( FILE *stream );  Function Required Header Compatibility  fflush <stdio.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  fflush returns 0 if the buffer was successfully flushed. The value 0 is also returned in cases in which the specified stream has no buffer or is open for reading only. A return value of EOF indicates an error.  Note   If fflush returns EOF, data may have been lost due to a write failure. When setting up a critical error handler, it is safest to turn buffering off with the setvbuf function or to use low-level I/O routines such as _open, _close, and _write instead of the stream I/O functions.  Parameter  stream  Pointer to FILE structure  Remarks  The fflush function flushes a stream. If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.  Buffers are normally maintained by the operating system, which determines the optimal time to write the data automatically to disk: when a buffer is full, when a stream is closed, or when a program terminates normally without closing the stream. The commit-to-disk feature of the run-time library lets you ensure that critical data is written directly to disk rather than to the operating-system buffers. Without rewriting an existing program, you can enable this feature by linking the program’s object files with COMMODE.OBJ. In the resulting executable file, calls to _flushall write the contents of all buffers to disk. Only _flushall and fflush are affected by COMMODE.OBJ.  For information about controlling the commit-to-disk feature, see Stream I/O, fopen, and _fdopen.  Example  /* FFLUSH.C */  #include <stdio.h> #include <conio.h>  void main( void ) {    int integer;    char string[81];     /* Read each word as a string. */    printf( "Enter a sentence of four words with scanf: " );    for( integer = 0; integer < 4; integer++ )    {       scanf( "%s", string );       printf( "%s\n", string );    }     /* You must flush the input buffer before using gets. */    fflush( stdin );    printf( "Enter the same sentence with gets: " );    gets( string );    printf( "%s\n", string ); }   Output  Enter a sentence of four words with scanf: This is a test This is a test Enter the same sentence with gets: This is a test This is a test   Stream I/O Routines  See Also   fclose, _flushall, setvbuf

user: user-0
content: 引用 1 楼 赵4老师的回复:请在每个fprintf函数后面紧接一句fflush 能具体解释一下吗？

user: user-2
content: 请在每个fprintf函数后面紧接一句fflush
user-0 提问: Libevent windows下没有event_set吗？

回复:
user: user-1
content: 引用 2 楼 fan20065 的回复:[quote=引用 楼主 fan20065 的回复:] Linux下面知道有，但是windows下没有 event_set 吗,？没有的话那要怎么用。。。 谢谢回答。  是直接把event_assign当event_set用吗，比如下面这个，event_assign完了还需要event_base_set吗， 新手，不要太介意。。。  event_set(&listen_ev, sock, EV_READ|EV_PERSIST, on_accept, NULL);  event_base_set(base, &listen_ev);[/quote]  旧的libevent接口是使用一个全局event_base，即全局变量。这是不好的。尽量放弃旧得都被抛弃的函数接口 对于event，建议使用event_new。不要使用栈上的event，尽量使用堆上的。 楼主可以看一下我之前写的一个libevent使用例子http://blog.csdn.net/user-1/article/details/39670221

user: user-0
content: 引用 楼主 fan20065 的回复:Linux下面知道有，但是windows下没有 event_set 吗,？没有的话那要怎么用。。。 谢谢回答。  是直接把event_assign当event_set用吗，比如下面这个，event_assign完了还需要event_base_set吗， 新手，不要太介意。。。  event_set(&listen_ev, sock, EV_READ|EV_PERSIST, on_accept, NULL);  event_base_set(base, &listen_ev);

user: user-1
content: 有。不过推荐使用event_assign
user-0 提问: 很明显的闪屏

回复:
user: user-1
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl  学习MSDN98中自带的GDI相关例子代码。

user: user-0
content: 做个图片显示， 放大缩小的时候会闪屏