Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于hash 处理海量数据  查找数据问题（内存不够的情况）

回复:
user: user-0
content: 引用 1 楼 u010297428 的回复:我是这样理解的： 用哈希值作为文件名，然后直接读取哈希到的文件就可以了 如果一次哈希后 文件还是大  可以分两次哈希 第一次为文件夹名，第二次为文件名 哈希值1\哈希值2.文件   我也是这样想，但是 你第一次将文件分割的时候，也需要把原始的大文件打开啊。。   还是会存在问题的呢。。。

user: user-1
content: 我是这样理解的： 用哈希值作为文件名，然后直接读取哈希到的文件就可以了 如果一次哈希后 文件还是大  可以分两次哈希 第一次为文件夹名，第二次为文件名 哈希值1\哈希值2.文件
user-0 提问: 【！！！】高分求OSSIM server模块的流程级指南等资料

回复:
user: user-1
content: 《开源安全运维平台-OSSIM最佳实践》

user: user-1
content: 我们OSSIM团队也在开发相关应用，可以共同交流。

user: user-2
content: 我也正在搞OSSIM这个开源项目，有问题大家一起交流吧，我q 1078285863

user: user-3
content: 我的qq，1611863615

user: user-3
content: 我也正在搞，交流下吧

user: user-0

user: user-0
content: 再顶下

user: user-0
content: 就是搞得人少，这个开源项目才有市场价值。 帖子先别沉了。 引用 1 楼 user-6 的回复:好像很少有人有这方面资料呢！ 帮顶下

user: user-4

user: user-5
content: 做得好的项目应该有很多文档才对。

user: user-6
content: 好像很少有人有这方面资料呢！ 帮顶下
user-0 提问: 如何实现。。。通过查找指定开头 然后通过指定结束符提取内容

回复:
user: user-1
content: //GET /intf.php?method=Download.getMetaInfo&qid=18007838&devtype=UI&v=3.3.0.2061&devid=f28ef391b6ee760bcce7238e05c4c033&devname=&rtick=10646088&sign=e72fdc62c1f2767572bbba5e243f3388&ofmt=xml&pid=home& HTTP/1.1 //Accept: */* //User-Agent: UI/3.3.0.2061 //Cookie: fhash=85d8540c0d259eeebedfa7db25f64af21c046543; nid=13541871622909506; dt=5_5.4cc06440e545e4f488afdec9efdbd23f; token=3738278795.5.0c58a7fc.18007838.1382078555; //Accept-Encoding: gzip //Host: dl5.yunpan.360.cn //Connection: Keep-Alive //Cache-Control: no-cache // //比如上面的数据，我想查找 Cookie:  找到这个的时候 根据 \r\n 作为结束来提取内容，比如提取出来的就是： //fhash=85d8540c0d259eeebedfa7db25f64af21c046543; nid=13541871622909506; dt=5_5.4cc06440e545e4f488afdec9efdbd23f; token=3738278795.5.0c58a7fc.18007838.1382078555; #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLEN 1000 char s[]= "GET /intf.php?method=Download.getMetaInfo&qid=18007838&devtype=UI&v=3.3.0.2061&devid=f28ef391b6ee760bcce7238e05c4c033&devname=&rtick=10646088&sign=e72fdc62c1f2767572bbba5e243f3388&ofmt=xml&pid=home& HTTP/1.1\r\n" "Accept: */*\r\n" "User-Agent: UI/3.3.0.2061\r\n" "Cookie: fhash=85d8540c0d259eeebedfa7db25f64af21c046543; nid=13541871622909506; dt=5_5.4cc06440e545e4f488afdec9efdbd23f; token=3738278795.5.0c58a7fc.18007838.1382078555;\r\n" "Accept-Encoding: gzip\r\n" "Host: dl5.yunpan.360.cn\r\n" "Connection: Keep-Alive\r\n" "Cache-Control: no-cache\r\n" "\r\n"; char *p,*q; char t[MAXLEN]; int main() {     p=strstr(s,"Cookie: ");     if (NULL==p) return 1;     q=strstr(p,"\r\n");     if (NULL==q) return 2;     strncpy(t,p+8,__min(MAXLEN-1,q-(p+8)));t[MAXLEN-1]=0;     printf("[%s]\n",t);     return 0; } //[fhash=85d8540c0d259eeebedfa7db25f64af21c046543; nid=13541871622909506; dt=5_5.4cc06440e545e4f488afdec9efdbd23f; token=3738278795.5.0c58a7fc.18007838.1382078555;] //

user: user-2
content: 解析这些xml文件！没办法了就这样解析吧！如果你只是要那么一段数据的话， 也可以通过关键字 Cookies来操作也是可以的！

user: user-0
content: 由于要多次操作，最好是不要修改原始指针。

user: user-1
content: 引用 5 楼 aaadddzxc 的回复:__min  是什么？ #define __min(a,b)  (((a) < (b)) ? (a) : (b))

user: user-0
content: 哦 WINDOWS下的哦，明白了 THANK YOU

user: user-0
content: __min  是什么？
user-0 提问: c语言%e输入问题

回复:
user: user-1
content: 请检查scanf的返回值!

user: user-2
content: 引用 楼主 u011700488 的回复:float x; scanf("%e",&x);  我在cmd窗口输入字母，是对的。输入数字是错的，程序崩溃了。  例：输入a，则调试显示x的值为：-1.07374e+008  求大神讲明缘由，不胜感激！  I did a test, the result shows correct:  (input) 3.5 x = 3.5

user: user-3
content: 引用 1 楼 user-6 的回复:LZ如何判断“输入字母是对的”，“输入数字是错的”？ 仅仅是程序有没有崩溃？那么LZ的判断方法可能是错的，正确的判断是检查scanf的返回值。  还有如何“调试显示”的？ printf？ 那么LZ的调试方法可能也不太正确，这取决于LZ的printf怎么写的。  建议贴上完整程序。 ++

user: user-4
content: 输入按照这种格式输入试一试 -1.07374e+008

user: user-5
content: 光看这句语句，感觉没什么错误。

user: user-6
content: LZ如何判断“输入字母是对的”，“输入数字是错的”？ 仅仅是程序有没有崩溃？那么LZ的判断方法可能是错的，正确的判断是检查scanf的返回值。  还有如何“调试显示”的？ printf？ 那么LZ的调试方法可能也不太正确，这取决于LZ的printf怎么写的。  建议贴上完整程序。
user-0 提问: 一个关于结构体和字符数组的问题

回复:
user: user-1
content: 第一个 INT N占用4字节，char类型占用1个字节 所以打招呼依照顺序，S会得到Ø  第二个 一样，INT N，占用4字节， 但是char s[1]是阵列，再结构中所放的是指标，所以是4字节 依照顺序，S[1]的内容是“o,wo”转成十六进制的值所指向的位置的内容

user: user-1
content: 第一个 INT N占用4字节，char类型占用1个字节 所以打招呼依照顺序，S会得到Ø  第二个 一样，INT N，占用4字节， 但是char类型[1]是阵列，再结构中所放的是指标，所以是4字节 依照顺序，S[1]的内容是“邻，窝”转成十六进制的值所指向的位置

user: user-2
content: 1. 邪恶的类型转换,后果自负!! char *str={"hello,world"}; struct A *a=(struct A*)str;  2. struct A { int n; char s; };  A a; //a.s是对象a的成员s.的值，类型是char printf("%c", a.s);//这里相当于int t = a.s; char c = (char)t; 最后输出c    3. struct A { int n; char s[1]; };  A a; //a.s是对象a的成员s的地址，类型是char* printf("%c", a.s);//这里相当于int t = (int)a.s; char c = (char)t; 最后输出c

user: user-2
content: 1. 邪恶的类型转换,后果自负!! char *str={"hello,world"}; struct A *a=(struct A*)str;  2. struct A { int n; char s; };  A a; //a.s是对象a的成员s.的值，类型是char printf("%c", a.s);//这里相当于int t = a.s; char c = (char)t; 最后输出c    3. struct A { int n; char s[1]; };  A a; //a.s是对象a的成员s的地址，类型是char* printf("%c", a.s);//这里相当于int t = (int)a.s; char c = (char)t; 最后输出c,

user: user-3
content: 第二个 char s[1]; s是地址了，所以输出了一个字符，内容是地址s的一个字节

user: user-4
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对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495
user-0 提问: 求解！

回复:
user: user-1
content: 数组a[M]的元素个数M必须为常量，不能是变量，如果你想运行时才确定数组元素的个数，楼上的方法就好。

user: user-2
content: 修改了下：  #include<stdio.h> #include<stdlib.h>  int main() { 	int M, i, j, t, *a;    	printf("请输入数组个数："); 	scanf("%d",&M); 	a = malloc(sizeof(int) * M); 	if( a == NULL) 		return -1; 	 	for(i=0;i<M;i++) 		a[i]=rand()%100; 	printf("你获得的数组是："); 	for(i=0;i<M;i++) 		printf("%d  ",a[i]); 	printf("\n"); 	for(i=0;i<M;i++) 		for(j=0;j<M-1-i;j++) 			if(a[j]>a[j+1]) 			{ 				t=a[j]; 				a[j]=a[j+1]; 				a[j+1]=t; 			} 	printf("经升序排列后的数组："); 	for(i=0;i<M;i++) 		printf("%d  ",a[i]); 	printf("\n"); 	 	free(a); 	 	return 0; }   运行结果： D:\profile\Desktop\test\c>a.exe 请输入数组个数：5 你获得的数组是：41  67  34  0  69 经升序排列后的数组：0  34  41  67  69

user: user-2
content: 最好能说明下开发环境。 你的代码，我在gcc下竟然编译通过了，但是运行出错。 在vc6上直接编译不过，因为M是变量，值未知，所以a[M]的大小就未知！

user: user-3
content: 编译器不同吧, 编译出来的结果是运行在手机平台上的, 要在电脑上运行需要使用别的编译器吧

user: user-2
content: 引用 楼主 u012635989 的回复:#include<stdio.h> #include<stdlib.h> void main() { 	int M,i,j,t,a[M];	 	printf("请输入数组个数："); 	scanf("%d",&M); 	for(i=0;i<M;i++) 		a[i]=rand()%100; 	printf("你获得的数组是："); 	for(i=0;i<M;i++) 		printf("%d  ",a[i]); 	printf("\n"); 	for(i=0;i<M;i++) 		for(j=0;j<M-1-i;j++) 			if(a[j]>a[j+1]) 			{ 				t=a[j]; 				a[j]=a[j+1]; 				a[j+1]=t; 			} 			printf("经升序排列后的数组："); 			for(i=0;i<M;i++) 				printf("%d  ",a[i]); 				printf("\n"); } 为什么在手机上能运行，在电脑上就不行？？？？  怎么个“不行”啊，是编译出错，还是运行出错？有错误就说明白！

user: user-4
content: 什么编译器？应该是main写的不规范吧，新的编译器不允许写void main 改成这样试试看:int main(){ …… return 0;}
user-0 提问: 请问怎么把我输入的GB2312编码 （如A1B2）以16进制的形式(0xA1 0xB2)赋给a[0] a[1]

回复:
user: user-1
content: //输入GBK编码XXXX输出对应汉字 #include <stdio.h> #include <locale.h> int main() {     char hz[3],ln[5];     int h0,h1;      hz[2]=0;     setlocale(LC_ALL,"chs");     while (1) {         printf("请输入四位十六进制GBK编码(直接回车退出):");fflush(stdout);         rewind(stdin);         fgets(ln,5,stdin);         if ('\n'==ln[0]) break;         if (2==sscanf(ln,"%2x%2x",&h0,&h1)) {             hz[0]=(unsigned char)h0;             hz[1]=(unsigned char)h1;             printf("%02X%02X [%s]\n",(unsigned char)hz[0],(unsigned char)hz[1],hz);         }     }     return 0; } //请输入四位十六进制GBK编码(直接回车退出):a1b2 //A1B2 [〔] //请输入四位十六进制GBK编码(直接回车退出):b2a1 //B2A1 [病] //请输入四位十六进制GBK编码(直接回车退出):b0a1 //B0A1 [啊] //请输入四位十六进制GBK编码(直接回车退出): //

user: user-2
content: 什么叫以16进制的形式赋值？？？无论10进制还是16进制，他们描述的量是相同的，只是描述方式不同。同一个数，你输出的时候用%x和%d区别描述方式。

user: user-0
content: 我是想要输入 A0A1  然后以0xA0 0XA1 。也就是让程序内部把这个0x加上再赋值给char

user: user-0
content: 引用 4 楼 sdhexu 的回复:typedef union _MulitByteChar {     _MulitByteChar()     {         ZeroMemory( szChar, sizeof( szChar ));     }     char szChar[ 3 ];     WORD wCode; } MulitByteChar;   // ............. MuliteByteChar mbc; mbc.code = 0xa0a1;  printf( "%s", mbc.szChar );  不好意思 刚才没刷新到。我看下

user: user-0
content: 引用 3 楼 sdhexu 的回复:typedef union _MulitByteChar {     char szChar[ 2 ];     WORD wCode; } MulitByteChar;  // ............. MuliteByteChar mbc; mbc.code = 0xa0a1; char a[2];  a[ 0 ] = mbc.szChar[ 0 ]; a[ 1 ] = mbc.szChar[ 1 ];  我是想要让用户输入、

user: user-2
content: typedef union _MulitByteChar {     _MulitByteChar()     {         ZeroMemory( szChar, sizeof( szChar ));     }     char szChar[ 3 ];     WORD wCode; } MulitByteChar;   // ............. MuliteByteChar mbc; mbc.code = 0xa0a1;  printf( "%s", mbc.szChar );

user: user-2
content: typedef union _MulitByteChar {     char szChar[ 2 ];     WORD wCode; } MulitByteChar;  // ............. MuliteByteChar mbc; mbc.code = 0xa0a1; char a[2];  a[ 0 ] = mbc.szChar[ 0 ]; a[ 1 ] = mbc.szChar[ 1 ];

user: user-3
content: gb2312 是双字节吧。  又考虑到是little-endian存储。

user: user-0
content: 就是我想输入编码  让它输出汉字、、scanf("%x",b)不用这个方法
user-0 提问: VS2012 fopen_s的问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:要转义//fopen_s(&fp,"F:\data\1023良渚\拖揽\1.sgy","rb"); fopen_s(&fp,"F:\\data\\1023良渚\\拖揽\\1.sgy","rb");  原来如此 多谢大神

user: user-1
content: 要转义//fopen_s(&fp,"F:\data\1023良渚\拖揽\1.sgy","rb"); fopen_s(&fp,"F:\\data\\1023良渚\\拖揽\\1.sgy","rb");
user-0 提问: 刚写的几篇关于scanf()的用法，欢迎拍砖

回复:
user: user-1
content: #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-0
content: 引用 1 楼 user-2 的回复:  好快啊

user: user-2
user-0 提问: 文件输出出现错误，如何修改？

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

user: user-2
content: Segmentation fault非法读写内存，多由指针未初始化或数组越界导致

user: user-3
content: 引用 2 楼 user-4 的回复:那个判断字符串结束不是用while (string[i] != '\0')么， 为什么用EOF呢？  是的！想错了！多谢

user: user-4
content: 那个判断字符串结束不是用while (string[i] != '\0')么， 为什么用EOF呢？

user: user-3
content: 部分错误修改，楼主参考下！  #include <stdio.h> #include <stdlib.h>   int main() {     int i;     FILE* fout = NULL;     fout = fopen("inpfile.txt","w");     if( fout == NULL)         exit(-1);     const char string[]={"This\r\n is a test\r\n file.\r\n\0"};      i = 0;     while(string[i] != '\0')     {            fputc(string[i],fout); // 这里你是一个字符的输入文件所以fputc 而不是fputs         i++;     }         fclose(fout);      return 0; }
user-0 提问: 提问：在LINUX终端中打印二叉树图形间距不足

回复:
user: user-1
content: 引用 4 楼 lxmuyu 的回复:[quote=引用 3 楼 user-2 的回复:] [quote=引用 2 楼 lxmuyu 的回复:] [quote=引用 1 楼 user-2 的回复:] 固定间距， 需要得到树的高度（深度）和宽度。   需要处理宽度超过终端可见宽度的情况。 固定间距，随着节点增加，左树的右节点会与右树的左节点冲突？[/quote] 左树和右树之间也要有间距。 [/quote] 找到了一个这方面的资料，解决了我的问题！ 谢谢你的回复～结帖[/quote] 我也在找这方面的资料，能把你找的资料链接发一下吗？

user: user-0
content: 引用 3 楼 user-2 的回复:[quote=引用 2 楼 lxmuyu 的回复:] [quote=引用 1 楼 user-2 的回复:] 固定间距， 需要得到树的高度（深度）和宽度。   需要处理宽度超过终端可见宽度的情况。 固定间距，随着节点增加，左树的右节点会与右树的左节点冲突？[/quote] 左树和右树之间也要有间距。 [/quote] 找到了一个这方面的资料，解决了我的问题！ 谢谢你的回复～结帖

user: user-2
content: 引用 2 楼 lxmuyu 的回复:[quote=引用 1 楼 user-2 的回复:] 固定间距， 需要得到树的高度（深度）和宽度。   需要处理宽度超过终端可见宽度的情况。 固定间距，随着节点增加，左树的右节点会与右树的左节点冲突？[/quote] 左树和右树之间也要有间距。

user: user-0
content: 引用 1 楼 user-2 的回复:固定间距， 需要得到树的高度（深度）和宽度。   需要处理宽度超过终端可见宽度的情况。 固定间距，随着节点增加，左树的右节点会与右树的左节点冲突？

user: user-2
content: 固定间距， 需要得到树的高度（深度）和宽度。   需要处理宽度超过终端可见宽度的情况。
user-0 提问: C 语言，链表，读取内存失败，实在修改不好了

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

user: user-2
content: 贴主 我大概看了一下 没仔细看你的实现 看我下面的代码  int main() { 	PLinkList  list = NULL;  	CreateListEnd(&list,10); 	ClearList(&list); 	return 0; }

user: user-3
content: 这么长的代码我就不给你调试了。 去年做数据结构实验的时候也出现过这样的问题，原因就是三楼说的那样。我的做法是设断点调试，调试的时候注意指针是否初始化了，数组是否越界了，很快就可以找出错误了。

user: user-4
content: 0xC0000005 涉及范围很广，但大多都是非法读写内存所致，一般由于指针的初始化和数组越界较为常见

user: user-5
content: #include "stdlib.h" #include <time.h>  typedef struct Node { 	int data; 	struct Node *next; }* PLinkList;  /* //the link delete the element //before the i insert the n; bool LinkInsert(PLinkList *L,int i,int n) { 	PLinkList p,q; 	int j = 1; 	p = *L; 	while(p->next&&j<i) 	{ 		p = p->next; 		j++; 	} 	if(p==NULL||j>i) 	{ 		return false; 	} 	q = (PLinkList)malloc(sizeof(struct Node)); 	q->data = n; 	q->next = p->next; 	p->next = q; 	return true;	 } bool DeletList(PLinkList *L,int i) { 	int j=1; 	PLinkList p = *L,q; 	while(p->next&&j<i) 	{ 		p = p->next; 		j++; 	} 	if(p->next==NULL||j>i) 	{ 		return false; 	} 	q = p->next; 	p->next = q->next; 	free(q); 	return true; } void findList(PLinkList *L,int i,int *e) { 	PLinkList p = *L; 	int j = 1; 	for(;p->next&&j<i;p = p->next,j++) 		; 	p = p->next; 	//if(j>i||p->next ==NULL); 	*e =  p->data; } //从表头插入数据元素 void CreateListHead(PLinkList *L,int n) { 	*L = (PLinkList)malloc(sizeof(struct Node)); 	srand(time(0)); 	PLinkList p; 	(*L)->next = NULL; // 创建一个头结点 	int i ; 	for(i = 0;i<n;i++) 	{ 		p = (PLinkList)malloc(sizeof(struct Node)); 		p->data = rand()%10+1; 		p->next = (*L)->next; 		(*L)->next = p; 	} } */ //from the end of the List table insert  void  CreateListEnd(PLinkList *L,int n) { 	int i; 	*L = (PLinkList)malloc(sizeof(struct Node)); 	PLinkList _ed = *L; 	PLinkList p; 	_ed->next = NULL; 	srand(time(0)); 	for(i = 0;i < n; i++) 	{ 		p = (PLinkList)malloc(sizeof(struct Node)); 		p->data = rand()%10+1; 		_ed->next = p; 		_ed = p; 	} 	p->next = NULL; } //Clear the list is null void ClearList(PLinkList *L) { 	PLinkList p,q; 	p = *L; 	while(p->next) 	{         q = p; 		p = p->next; 		free(q); 	} }  int main() { 	PLinkList  list = NULL; 	         CreateListEnd(&list,10); 	ClearList(&list); 	return 0; }  没有细看代码

user: user-6
content: malloc(sizeof(struct Node) 分配成功了吗
user-0 提问: 找错误，比眼里

回复:
user: user-0
content: 引用 8 楼 z1179675084 的回复:楼主不好意思，看的着急了，原来你在批评一楼，误以为批评我呢，所以那会火很大！呵呵   没事  我跟你一样  同为学生，比较有缘的是  我也是嵌入式，呵呵   明白就好   别误会了 ，其实说实话，我一点都没有批评任何人的意思，包括一楼。我只是在陈述一个事实而已，或者说想表明一下自己的立场罢了。水贴就水贴，我依然很感谢他，不然我也不会考虑给他分，你说的很不错的！

user: user-1
content: 楼主不好意思，看的着急了，原来你在批评一楼，误以为批评我呢，所以那会火很大！

user: user-1
content: 引用 6 楼 siaswj 的回复:[quote=引用 5 楼 z1179675084 的回复:] 结果无误，真的无误？只是你看的无误罢了！按你的要求如果最小的数有相同的则按前面的交换，你如下程序里为啥要搞个=  for(int i=0;i<n;i++){                 if(s[i]<=min){                     min=s[i];                     p=&s[i];                 }             }  另外你这个不好，用下面的。  int index = 0   for(int i=0;i<n;i++)   {         if(s[i]<a[index]) 		{             index = i;         }   }   swap(s[0],s[index]);	//交换这两个数方法很多自己写 ，但你那个不推崇  	for(int j=0;j<n;j++) 	{         printf(" %d",s[j]);     }  你是对的 不过我在四楼已经说过了  i<=min 改为i<min，  另外在前面加上p=s；  就保证了当第一个数是最小值时候的情况，而之前之所以加i<=min就是考虑到了这种情况。 还有一点  交换那个 只是我感觉比较理解，因为是我想出来的吗，对吧 。  你的方法也很不错 不过就是有一点遗憾，帖子我已经结了，分页给完了，所以没法再给你分数了。不过还是谢谢，因为你真的去看这道题了，还贴出自己的代码，谢了！  本人的一贯原则是坚决反对水贴！所以对于水贴一般是1分，这一分是谢他顶贴。  [/quote] 首先我申明我不是为了得分的，要这个分有什么用，我自己是数学专业，现在搞了嵌入式，我知道一个人有问题时候的困难，也许别人一看就能解决，但是自己那一忽悠，愣是查不出来。再次你看看咱俩的时间差大不大，我回你贴的那会有别的事（大晚上的谁不会去干点别的），也就是在我打算回帖的时候你并没有回，只不过我拉的时间有点长，最后是你赶在了我的前面。再次我一直认为我是良心回帖的，你可以看看我在这个回帖中17楼的回复http://bbs.csdn.net/topics/390627029?page=1#post-395916655，画那个图需要多久，多麻烦我想你也应该明白，我是个学生，我回过的贴每一个我都认真思考，并调试过，模棱两可或是不会的我不会回一般情况下别人的回帖我会看，尽量做到不重复，如果有我觉得合理的答案，我会提醒楼主结贴。最后，你题是解决了，但我真心希望你再看一下我的回帖，个人感觉两个程序相比的话我那个更为合理！

user: user-0
content: 引用 5 楼 z1179675084 的回复:结果无误，真的无误？只是你看的无误罢了！按你的要求如果最小的数有相同的则按前面的交换，你如下程序里为啥要搞个=  for(int i=0;i<n;i++){                 if(s[i]<=min){                     min=s[i];                     p=&s[i];                 }             }  另外你这个不好，用下面的。  int index = 0   for(int i=0;i<n;i++)   {         if(s[i]<a[index]) 		{             index = i;         }   }   swap(s[0],s[index]);	//交换这两个数方法很多自己写 ，但你那个不推崇  	for(int j=0;j<n;j++) 	{         printf(" %d",s[j]);     }  你是对的 不过我在四楼已经说过了  i<=min 改为i<min，  另外在前面加上p=s；  就保证了当第一个数是最小值时候的情况，而之前之所以加i<=min就是考虑到了这种情况。 还有一点  交换那个 只是我感觉比较理解，因为是我想出来的吗，对吧 。  你的方法也很不错 不过就是有一点遗憾，帖子我已经结了，分页给完了，所以没法再给你分数了。不过还是谢谢，因为你真的去看这道题了，还贴出自己的代码，谢了！  本人的一贯原则是坚决反对水贴！所以对于水贴一般是1分，这一分是谢他顶贴。

user: user-1
content: 结果无误，真的无误？只是你看的无误罢了！按你的要求如果最小的数有相同的则按前面的交换，你如下程序里为啥要搞个=  for(int i=0;i<n;i++){                 if(s[i]<=min){                     min=s[i];                     p=&s[i];                 }             }  另外你这个不好，用下面的。  int index = 0   for(int i=0;i<n;i++)   {         if(s[i]<a[index]) 		{             index = i;         }   }   swap(s[0],s[index]);	//交换这两个数方法很多自己写 ，但你那个不推崇  	for(int j=0;j<n;j++) 	{         printf(" %d",s[j]);     }

user: user-0
content: 谢了  已经找到错误了    是漏掉了一种情况   如 5 6 5 1 1 5 改为：第二个for循环的if语句i<=min 改为 i<min 并在min=s[0]; 后加上p=s; 就好了

user: user-2
content: 处理下每次输入的回车符！

user: user-0
content: 啊？    再补充一点  第二个for循环 为i<=n

user: user-3
content: 哎 ，自己单步吧。
user-0 提问: Socket keep-alive

回复:
user: user-0
content: 引用 3 楼 AnYidan 的回复:先在网上找找有无相关的文章或代码 找不到啊= =  关键字查询也查询不到

user: user-1
content: 这描述太空旷了,就像在说"我要造一个能超音速巡航,具有隐身能力,能同时打击多个目标的战斗机,请各位给出方案"

user: user-2
content: 先在网上找找有无相关的文章或代码

user: user-0
content: 万事开头难啊- -现在是一点思路都没有 通过多个Socket并行连接还好写一点。最少对象是分开的。肯定要用非阻塞模式，单连接由于网络原因数据到的前后可能发生变化对象完整性都不知道如何保证。哎！不知道IE怎么实现的，求开个头啊！！！大神

user: user-3
content: 那就先按你的这个思路把框架代码写写吧！如果瓶颈了再来问问！
user-0 提问: 关于一个C语言编写列主元消元法的问题，求助高手

回复:
user: user-0
content: 引用 1 楼 uuuououlcz 的回复:少年，这里：float d,temp=0,a[n][n],b[n];有问题的哈，以输入n确定数组的维数需要用malloc动态申请数组少年，已经改过这个问题了，我用的是gcc编译的，我试过了，不是这个问题

user: user-1
content: 少年，这里：float d,temp=0,a[n][n],b[n];有问题的哈，以输入n确定数组的维数需要用malloc动态申请数组
user-0 提问: 各位走过的路过的看看错在哪，看看谁能找出来。运行正确，但是在oj上提交错误

回复:
user: user-0
content: 引用 2 楼 max_min_ 的回复:确实，这些个东西，题目的任何一句话都是很重要的要求或者限制条件的。不好意思了  第一次发帖  没注意  你看看  我已经发上去了

user: user-0
content: 呀  不好意思了    第一次发帖  没注意 。这是交换输出

user: user-1
content: 确实，这些个东西，题目的任何一句话都是很重要的要求或者限制条件的。

user: user-2
content: 题目都不写……
user-0 提问: [求思路] 在9x9的雷区中给定雷数如何判定地雷在哪里？

回复:
user: user-0
content: 我后来还是用递回式完成了 每次扫都会测该位置的左上方 左方 和 上方 最后 测到最右下角的时候测自己~~ 搞定~~~ 虽然感觉效率慢了一点~~~如果用数学方程也许也可以解~~ 多谢大家的思路~~    #include<stdio.h> int result_array[9][9];  int check_block(int a, int b, int scanf_array[9][9]){ 	int sum = result_array[a][b]; 	if (a != 0 && b != 0) 		sum += result_array[a-1][b-1]; 	if (a != 0) 		sum += result_array[a-1][b]; 	if (a != 0 && b != 8) 		sum += result_array[a-1][b+1]; 	if (b != 8) 		sum += result_array[a][b+1]; 	if (a != 8 && b != 8) 		sum += result_array[a+1][b+1]; 	if (a != 8) 		sum += result_array[a+1][b]; 	if (a != 8 && b != 0) 		sum += result_array[a+1][b-1]; 	if (b != 0) 		sum += result_array[a][b-1]; 	if( sum < 0 || sum == scanf_array[a][b]){ 		return 1; 	} 	else 		return 0; }  int check(int a, int b, int scanf_array[9][9]){ 	// left 	if(b != 0){ 		if (!check_block(a, b-1, scanf_array)) 			return 0; 	} 	// left up 	if(b != 0 && a != 0){ 		if (!check_block(a-1, b-1, scanf_array)) 			return 0; 	}  	// up 	if(a != 0){ 		if (!check_block(a-1, b, scanf_array)) 			return 0; 	}  	return 1; }  int place(int n, int scanf_array[9][9]){ 	int i, j, a, b; //result_array[a][b] 	if(n == 81){ 		for (i = 0; i < 9; i++){ 			for (j = 0; j < 9; j++) 				printf("%d ",result_array[i][j]); 			printf("\n"); 		} 		return 1; 	} 	a = n / 9; 	b = n % 9; 	for(i = 0; i <= 1; i++){  		result_array[a][b] = i; 		if(check(a, b, scanf_array)){ 			if (n == 80){ 				if(check_block(a, b, scanf_array) !=1 ) 					return 0; 			} 			if (place(n + 1, scanf_array)) 				return 1; 		} 	} 	result_array[a][b] = -10; 	return 0; }   int main(void) { 	int scanf_array[9][9]; 	int i, j; 	for(i = 0; i < 9; i++){ 		for(j = 0; j < 9; j++) 			result_array[i][j] = -10; 	} 	for(i = 0; i < 9; i++){ 		for(j = 0; j < 9; j++) 			scanf("%d",&scanf_array[i][j]); 	} 	if (! place(0, scanf_array)) 		printf("no solution\n"); 	return 0; }

user: user-1
content: 第一遍扫描，能完全确定的只有0和9的格子，把它们标记出来 第二遍扫描，由于有了上面的标记，现在有一部分非0和9的格子也能确定了，再标记出来 如此一遍一遍的扫，直到再也不能增加标记为止 然后剩下的就试猜？

user: user-2
content: 先找到是0的，把周围都标成0，然后找下中间是9，边是6，角是4的，把周围都标成1，然后再扫描看有没有可以确定的数，最后回搠＋剪枝

user: user-3
content: 楼主是想写个解扫雷的工具？
user-0 提问: c语言多文件编程  大家帮看看错在哪？？程序很短。。谢谢！

回复:
user: user-1
content: 引用 15 楼 ds_guteng 的回复:[quote=引用 13 楼 lipoor1234 的回复:] 用我上面的方法没有解决么 那你先确定你所有的文件都有保存 然后重新rebuild看看  什么是打几个空格？[/quote] 就是随便修改一下cpp然后保存,改一下时间戳,不然只改点h,cpp文件不会重新编译的,和重新编译是同一个意思

user: user-0
content: 引用 11 楼 fang098 的回复:哦，知道了，你把你的myfile1.cpp中的#include "myfile1.h"去掉试下。  重启可以了，谢谢！！！！

user: user-0
content: 引用 14 楼 cyz7758520 的回复:你试试全部重新编译 引用 14 楼 cyz7758520 的回复:你试试全部重新编译 重启可以了，谢谢！！！！

user: user-0
content: 引用 13 楼 lipoor1234 的回复:用我上面的方法没有解决么 那你先确定你所有的文件都有保存 然后重新rebuild看看  什么是打几个空格？

user: user-2
content: 你试试全部重新编译

user: user-1
content: 用我上面的方法没有解决么 那你先确定你所有的文件都有保存 然后重新rebuild看看

user: user-0
content: 引用 11 楼 fang098 的回复:哦，知道了，你把你的myfile1.cpp中的#include "myfile1.h"去掉试下。  不行啊。  是不是myfile1.h没有通过编译，担忧为什么呢？

user: user-3
content: 哦，知道了，你把你的myfile1.cpp中的#include "myfile1.h"去掉试下。

user: user-0
content: 引用 8 楼 fang098 的回复:你的myfile1.h贴出来看下。 该不会也是 #ifndef __MYFILE_H__  #define __MYFILE_H__ #endif  这样定义的吧。 上面有，没饭这错误。。。

user: user-1
content: 引用 7 楼 ds_guteng 的回复:[quote=引用 6 楼 lipoor1234 的回复:] 楼主 代码没有问题 vc下可以编译通过  怎么回事？？[/quote] 你把你的3个cpp文件,都打几个空格,保存了重新编译看看 或者你清理一下解决方案再编译看看 不知道能不能解决

user: user-3
content: 你的myfile1.h贴出来看下。 该不会也是 #ifndef __MYFILE_H__  #define __MYFILE_H__ #endif  这样定义的吧。

user: user-0
content: 引用 6 楼 lipoor1234 的回复:楼主 代码没有问题 vc下可以编译通过  怎么回事？？

user: user-1
content: 楼主 代码没有问题 vc下可以编译通过

user: user-0
content: 引用 2 楼 fang098 的回复://myfile.h #ifndef __MYFILE_H__  #define __MYFILE_H__ extern void fun1(); extern void fun2(); #endif 这样定义的话你的后面的宏不会执行。 //myfile1.h #ifndef __MYFILE1_H__ #define __MYFILE1_H__ extern void fun3(); extern void fun4(); #endif  改成下面的看看。  //myfile.h #ifndef __MYFILE_H__  #define __MYFILE_H__ extern void fun1(); extern void fun2(); extern void fun3(); extern void fun4(); #endif  这样该我知道肯定行. 为什么第二个头文件不能执行？？ 求大神解惑。谢谢！

user: user-4
content: 看上去代码没有问题 。。。

user: user-0
content: 引用 1 楼 user-5 的回复:没有问题，楼主再看看程序中的myfile1.h头文件包含是否正确!  没发现有什么问题！百思不解啊！！！！ 跟VC++6.0环境有关系吗？

user: user-3
content: //myfile.h #ifndef __MYFILE_H__  #define __MYFILE_H__ extern void fun1(); extern void fun2(); #endif 这样定义的话你的后面的宏不会执行。 //myfile1.h #ifndef __MYFILE1_H__ #define __MYFILE1_H__ extern void fun3(); extern void fun4(); #endif  改成下面的看看。  //myfile.h #ifndef __MYFILE_H__  #define __MYFILE_H__ extern void fun1(); extern void fun2(); extern void fun3(); extern void fun4(); #endif

user: user-5
content: 没有问题，楼主再看看程序中的myfile1.h头文件包含是否正确!
user-0 提问: c语言 进程名称

回复:
user: user-1
content: 把你生成的exe文件改个名字, 进程名自然就改变了撒, 不显示窗口, 在初始化的时候不要Show出来即可.

user: user-2
content: 引用 4 楼 lubyam 的回复:[quote=引用 2 楼 ftd2013 的回复:] 第一个:属性->连接器->常规->输出文件 第二个：#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )  第2个是什么意思啊[/quote]  改变连接器选项 ,可以设置工程属性，连接器->系统->子系统 window->winmain ,console->main。一样的

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！  这。。。。

user: user-0
content: 引用 2 楼 ftd2013 的回复:第一个:属性->连接器->常规->输出文件 第二个：#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )  第2个是什么意思啊

user: user-3
content: 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！

user: user-2
content: 第一个:属性->连接器->常规->输出文件 第二个：#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

user: user-4
content: 不想显示窗口 又改变进程名称 在后头偷摸做坏事 参考 http://wenku.baidu.com/view/93b26ce8e009581b6bd9ebf2.html 这里总有你需要的API
user-0 提问: 求高手解释一下这个程序

回复:
user: user-0
content: 引用 11 楼 ftd2013 的回复:这里有详解http://www.cnblogs.com/sdphome/archive/2011/09/14/2176624.html 多谢

user: user-0
content: 引用 10 楼 rocktyt2 的回复:[quote=引用 9 楼 qptimus 的回复:] [quote=引用 6 楼 rocktyt2 的回复:] {const typeof(((type *)0)->member) *__mptr = (ptr); //typeof(((type *)0)->member)获得结构体type内该member的类型  (type *)((char *)__mptr-offsetof(type,member));} //结构体成员指针的地址减去偏移值即为结构体首地址  #define offsetof(TYPE,MEMBER) ((int)&((TYPE *)0)->MEMBER) 请问这句为什么能得到偏移地址[/quote]将地址0当成TYPE类型的指针，用->获取成员变量（实际没有对该变量进行访问，所以没有问题）并取地址，得到的就是从0作为开始地址的TYPE结构体的MEMBER成员的地址，这个地址的值就是member的在type结构体里的相对偏移[/quote] 多谢大神讲解，获益匪浅

user: user-1
content: 这里有详解http://www.cnblogs.com/sdphome/archive/2011/09/14/2176624.html

user: user-2
content: 引用 9 楼 qptimus 的回复:[quote=引用 6 楼 rocktyt2 的回复:] {const typeof(((type *)0)->member) *__mptr = (ptr); //typeof(((type *)0)->member)获得结构体type内该member的类型  (type *)((char *)__mptr-offsetof(type,member));} //结构体成员指针的地址减去偏移值即为结构体首地址  #define offsetof(TYPE,MEMBER) ((int)&((TYPE *)0)->MEMBER) 请问这句为什么能得到偏移地址[/quote]将地址0当成TYPE类型的指针，用->获取成员变量（实际没有对该变量进行访问，所以没有问题）并取地址，得到的就是从0作为开始地址的TYPE结构体的MEMBER成员的地址，这个地址的值就是member的在type结构体里的相对偏移

user: user-0
content: 引用 6 楼 rocktyt2 的回复:{const typeof(((type *)0)->member) *__mptr = (ptr); //typeof(((type *)0)->member)获得结构体type内该member的类型  (type *)((char *)__mptr-offsetof(type,member));} //结构体成员指针的地址减去偏移值即为结构体首地址  #define offsetof(TYPE,MEMBER) ((int)&((TYPE *)0)->MEMBER) 请问这句为什么能得到偏移地址

user: user-1
content: int main() { 	test_t *a = (test_t *)0x88010020; 	test_t *p; //	p=gd_type_get(&(a->count),test_t,count); 	const int *ptr = &(a->count); 	p = (test_t*)((char *)ptr - ((int)&((test_t *)0)->count)); 	printf("%x\n",p); 	return 0; } //调试得到ptr = 0x88010024, p = 0x88010020

user: user-3
content: 获得结构体中成员相对结构体开始地址偏移

user: user-2
content: {const typeof(((type *)0)->member) *__mptr = (ptr); //typeof(((type *)0)->member)获得结构体type内该member的类型  (type *)((char *)__mptr-offsetof(type,member));} //结构体成员指针的地址减去偏移值即为结构体首地址

user: user-0
content: 引用 2 楼 rocktyt2 的回复:这个应该是用了gcc的扩展吧  作用是根据一个成员的指针，结构体类型名和成员名来获取该结构体的首地址  大哥能不详细解释一下

user: user-1
content: 请问const typeof是什么？

user: user-4
content: 这是个什么东东？

user: user-2
content: 这个应该是用了gcc的扩展吧  作用是根据一个成员的指针，结构体类型名和成员名来获取该结构体的首地址

user: user-5
content: 替换一下不就出来了吗。。。 别替换错了 注意括号  不难的
user-0 提问: 以下代码是链表排序代码，请问它们是根据什么信息进行排序的?

回复:
user: user-1
content: 引用 8 楼 huabinsir 的回复:[quote=引用 7 楼 AnYidan 的回复:] [quote=引用 3 楼 huabinsir 的回复:] [quote=引用 2 楼 user-6 的回复:] cmp是怎么实现的嘛，主要是看看这个函数！    1 double cmp(ListNode *p ,ListNode *q)  2 {return (p->keyVal - q->keyVal);}  这个主要是对数字进行排序的[/quote]  抓重点[/quote]  什么意思?[/quote] 要找排序的依据，自然看 cmp 函数了

user: user-2
content: 目测是对ListNode里的keyVal大小进行排序

user: user-0
content: 引用 7 楼 AnYidan 的回复:[quote=引用 3 楼 huabinsir 的回复:] [quote=引用 2 楼 user-6 的回复:] cmp是怎么实现的嘛，主要是看看这个函数！    1 double cmp(ListNode *p ,ListNode *q)  2 {return (p->keyVal - q->keyVal);}  这个主要是对数字进行排序的[/quote]  抓重点[/quote]  什么意思?

user: user-1
content: 引用 3 楼 huabinsir 的回复:[quote=引用 2 楼 user-6 的回复:] cmp是怎么实现的嘛，主要是看看这个函数！    1 double cmp(ListNode *p ,ListNode *q)  2 {return (p->keyVal - q->keyVal);}  这个主要是对数字进行排序的[/quote]  抓重点

user: user-3
content: 是通过节点的值域大小排序，不过感觉程序写的好啰嗦

user: user-4
content: 引用 1 楼 huabinsir 的回复:想对许多文件的文件名进行排序(文件名中有数字 中文 英文等字符)，如何操作呢? 字符串排序。 std::vector<std::string> v; v.push_back("avdvsa"); v.push_back("fdsg"); v.push_back("asdff"); std::sort(v.begin(),v.end());

user: user-5
content: 这是归并 排序吗？

user: user-0
content: 引用 2 楼 user-6 的回复:cmp是怎么实现的嘛，主要是看看这个函数！    1 double cmp(ListNode *p ,ListNode *q)  2 {return (p->keyVal - q->keyVal);}  这个主要是对数字进行排序的

user: user-6
content: cmp是怎么实现的嘛，主要是看看这个函数！

user: user-0
content: 想对许多文件的文件名进行排序(文件名中有数字 中文 英文等字符)，如何操作呢?
user-0 提问: 请教赶集网校招的一道笔试题

回复:
user: user-1
content: 前排占坐思考！

user: user-2
content: 典型dfs：  #include <stdio.h> #include <string.h> #define MAX 500 /×   a,b,...,z map to 1,2,...,26   num is a string composed by 1~9 ×/ char num[MAX], letter[MAX]; int lenOfNum;  void dfs(int nextOfLetter, int nextOfNum) {     int twoDigits;     if(nextOfNum == lenOfNum){ 	letter[nextOfLetter] = 0; 	puts(letter);         return;     }      //one digit definitely matches a letter     letter[nextOfLetter] = num[nextOfNum] - '1' + 'a';     dfs(nextOfLetter+1, nextOfNum+1);      //check if next two digits can match a letter     if(nextOfNum+1 < lenOfNum){ 	twoDigits = (num[nextOfNum] - '0') * 10 + (num[nextOfNum+1] - '0');         if(twoDigits < 27){ 	    letter[nextOfLetter] = twoDigits-1 + 'a'; 	    dfs(nextOfLetter+1, nextOfNum+2); 	}     } }  int main() {     while(gets(num)){ 	lenOfNum = strlen(num);         dfs(0, 0);     }     return 0; }  不知道dp能不能做， 用f(num, lenOfNum)表示num对应的字母串，则 f(num, lenOfNum) = f(num, i) + f(num+i, lenOfNum) 判重麻烦了就，记忆也是个问题

user: user-3
content: 递归，两个分支，分别处理1个字符和2个字符的情况。 回家再写个代码。

user: user-4
content: 大概写了下，不确定是否正确。 很笨的办法，用递归 假设输入n各字符，则将其划分成两份[0,1) [1, n) 设[0,1)中的数字为n0 将[1,n)所有的组合情况保存起来 然后将第一个数字插入上一步骤中的所有组合的第一位 如果n0*10+其中某一个组合的第一位<26，则将这个组合的第一位替换成这个<26的数字  int explainInput(string s, int* a[]) { 	if (s.length() == 0) 	{ 		return 0; 	} 	else if (s.length() == 1) 	{ 		a[0] = new int[2]; 		a[0][0] = 1; 		a[0][1] = s[0] - '0'; 		return 1; 	}  	int ret = explainInput(s.substr(1), a); 	int head = s[0] - '0'; 	int rise = 0; 	for (int n = 0; n < ret; ++n) 	{ 		if (a[n] != nullptr) 		{ 			a[ret+rise] = new int[a[n][0]+2]; 			a[ret+rise][0] = a[n][0] + 1; 			a[ret+rise][1] = s[0] - '0';  			for (int k = 1; k <= a[n][0]; ++k) 			{ 				a[ret+rise][k+1] = a[n][k]; 			} 			++rise;  			if ((a[n][1] <= 6 && head == 2) || (a[n][1] < 10 && head == 1)) 			{ 				a[ret+rise] = new int[a[n][0]+1]; 				a[ret+rise][0] = a[n][0]; 				a[ret+rise][1] = head * 10 + a[n][1]; 				for (int k = 2; k <= a[n][0]; ++k) 				{ 					a[ret+rise][k] = a[n][k]; 				} 				++rise; 			} 			delete[] a[n]; 			a[n] = nullptr; 		} 	}  	return ret+rise; }  int _tmain(int argc, _TCHAR* argv[]) { 	int* a[100];  	int ret = explainInput("11111", a); 	for (int j = 0; j < ret; ++j) 	{ 		int* arr = a[j]; 		if (arr == nullptr) 		{ 			continue; 		} 		for (int i = 1; i <= arr[0]; ++i) 		{ 			cout << arr[i] << " "; 		} 		delete[] arr; 		cout << endl; 	} }

user: user-5
content: 3楼说的对，分成两种情况

user: user-6
content: 用递归就很好做了

user: user-7
content: 用递归做，第一层用1位 和2位划分，然后两种情况分别做递归

user: user-8
content: 优点像台阶问题

user: user-8
content: 1 位或者两位 对应一个字母。

user: user-9
content: 估计得用递归
user-0 提问: qiu da shen jie da

回复:
user: user-1
content: char *str 改成      char str[10] 或者      char *str = (char *)malloc(sizeof(char) * 10)

user: user-2
content: 楼上正解 第一  #include <string.h> 头文件 你都不加的 报警告  第二  void main() 这是什么写法 这种写法是不规范的 也是不提倡的 int main()  第三 #define MAX_SIZE 1024 char str[MAX_SIZE];  第四   int IfHappyNum(int n) 这个函数没有返回值  第五程序代码风格有问题  第六    既然前五条与你提问的qiu da shen jie da都有问题  我不得不怀疑楼主的逻辑有问题 需要学计算机需要严谨的逻辑及超乎常人的发散能力

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

user: user-4
content: char *str;  //这个指针没初始化 sprintf(str,"%d",n);  //给没初始化的指针赋值，很危险

user: user-5
content: 内存错误···

user: user-6
content: str未分配空间，运行会报错，而且int型变量居然可以用strlen统计长度。。。。
user-0 提问: 数组、指针问题

回复:
user: user-1
content: 本文适用于机器为32位，编译器为VC6.0。  先来看下面一个例子： main() { int a[5]={0x11121314,0x21222324,0x31323334,0x41424344,0x51525354}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)(a+1); printf("%x,%x",ptr1[-1],*ptr2); getch(); } 打印输出的结果是多少？第4行&a是不是写错了？数组名怎么还取地址呢？ 你可以试着在软件中编译运行一下，结果是51525354，21222324，没错，就是它了。你可以试着写以下程序再在计算机中编译运行下：  main()  {  int a[5]={0x11121314,0x21222324,0x31323334,0x41424344,0x51525354};  printf("%p\n%p\n",a,&a);  printf("%d\n%d\n",sizeof(a),sizeof(&a));  printf("%p\n%p",&a+1,a+1);  getch();  }  你可以看到前两行a和&a打印的结果是一样的（比如0012FF6C），后两行的结果是都是20，而&a+1的结果是0012FF6C，即a的起始地址后移20字节。看到这里对于a和&a的区别是不是有些眉目了？不错，a和&a的值虽然一样，但是前者表示的是数组a的首地址，进阶为数组元素长度，而后者也是表示数组a的首地址（或许有些人不同意我这个观点，对地址取地址应该是指向指针的指针呀。不过你注意了没有，a和&a值是一样的，试想如果这里表示的是指向指针的指针，那么a的地址和指向a的指针的地址可能一样么？两个指针都指向数组首地址，怎么会是指向指针的指针？还有一点需要强调，对一个指针进行sizeof运算，32位系统下应该得到4，而对数组名进行sizeof运算得到的结果却是20，这说明了什么？很显然，数组名虽然能够拿出来代表一个地址，但是它和指针还是有区别的，对它进行sizeof运算也不会得到指针的大小。不信？你可以试试sizeof(&a[0])和sizeof(a)，看看结果是不是相同），但是是将整个数组作为一个对象来看待的，进阶为整个数组长度。也就是说，a和&a虽然值相同，但是a是将所有数组元素看成一个个不同的个体来对待的，而&a是将整个数组作为一个整体来对待的。这里要强调的是，a+1和&a[1]其实是一样的，都是代表a数组向后偏移一个元素的地址，你可以再用sizeof关键字打印一下两个的值。但是a和&a[0]的意义相同么？若打印地址的话，两者确实是一样的，但是你也用sizeof打印下两者，一样么？再试试a+0呢？很显然，a和a+0是有区别的，但是a+0和&a[0]是含义相同的。所以，你可以说a+i和&a[i]含义相同，但是绝不能说a和&a[0]或a+0含义相同。所以&a+1后移20位为&a+sizeof(&a)，而a+1却是a+sizeof(a[i])。（《C语言深度解剖》认为在32为系统下sizeof(&a)的值仍为4，我觉得是不对的。他觉得是VC6.0错了，其实不止VC，其他很多编译器得到的结果也不会是4，这说明a和&a在C中本来就不是作为指针来用的，只是具有指针的部分性质而已。）ptr1是将&a+1强转为int类型指针，此时打印ptr1[-1]即将ptr指针前移sizeof(int)个字节，故打印结果是5。这样一来后面的也明了了，a+1的值为在数组a的首地址上后移sizeof(int)个字节，然后强转为int类型指针（其实强转并没有改变什么，原来类型即为整型指针，可以去掉强转），最后输出结果为21222324。  再想一下，如果将第一例第五行改为int *ptr2=(int *)((int)a+1);打印结果会是什么？ 这里要考虑数据在计算机中的存储模式：大端模式和小端模式。解释一下： 大端模式（Big_endian）：字数据的高字节存储在低地址中，而字数据的低字节则存放在高地址中。 小端模式（Little_endian）：字数据的高字节存储在高地址中，而字数据的低字节则存放在低地址中。 在大端模式下，a在计算机中存储如下（从低地址到高地址，一个十六进制数代表内存的一个字节，下同）： 0x11 0x12 0x13 0x14 0x21 0x22 0x23 0x24 0x31 0x32 0x33 0x34 0x41 0x42 0x43 0x44 0x51 0x52 0x53 0x54 在小端模式下，a在计算机中存储如下： 0x14 0x13 0x12 0x11 0x24 0x23 0x22 0x21 0x34 0x33 0x32 0x31 0x44 0x43 0x42 0x41 0x54 0x53 0x52 0x51 (int)a表示将a的首地址强转为整型数据（若原来是0012FF6C，转换后仍为0012FF6C，但是这时已经不是表示地址而是一个十六进制整型数了），这时+1代表整型数(int)a加1（变为0012FF6D），再把结果强转为整形指针，故指向的数据地址为0012FF6D，即上述存储去的第二个字节开始处。此时输出*ptr2，即输出a数组存储区中第二到第五字节组成的一个整型数，若为大端模式则输出12131421，若为小端模式则输出24111213。  原文请见：http://blog.csdn.net/draw5230/article/details/6699431

user: user-0
content: 谢谢大家热心的回复～　 继续努力学～

user: user-2
content: sizeof(*&a) = sizeof(a) =5 *sizeof(int) ; 因为： a --->int[5]-->int *; &a ---> int (*)[5];  所以：&a+1， 指向数组a，后面的拥有5个元素的数组。 所以 (int *)(&a +1) == a + 5; a+1 第二个元素。 a + 5 第六个元素。

user: user-3
content: 是的！ &a +1 指向了a数组后面一位了！也就是 &a+1 的值是a数组后面的地址值！ 指针类型的步长是和它的数据类型息息相关的！ int *p = &a +1; //指向了数据的后一位 p -1 ; 相前移动p指针类型的步长，int长度， 所以 p -1 指向了 a数组最后一个元素！ 后面依次类推！
user-0 提问: C指针

回复:
user: user-1
content: 求值顺序是函数调用中应该注意的一个问题。所谓求值顺序是指对实参表中各量是自左至右使用还是自右至左使用。各版本编译系统对此规定不一。 回到楼主的问题。p = a + 3;//p指向a[3] printf("%d,%d＼n",*p,*p++); 楼主所使用的编译器采用自右向左的求值顺序，先计算*p++的值，再计算*p的值，计算*p++得到9后， p指向a[4],所以*p的值为11。 再举个例子： #include<stdio.h>  int main(int argc,char *argv[]) {     int i = 8;     printf("%d\n%d\n",i = i + 3; i = i - 2);     return 0; } 这段代码在楼主的编译器上运行得到的结果应该是： 9 6 而不是 11 9 原因同上，先计算i = i - 2得到6，再计算i = i + 3得到9。

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对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-3
content: printf函数是从后面往前输出。 a+3就是9了，*p++的值还是9， 再输出*p，由于*p++了，所以*p就为11了。

user: user-4
content: 引用 4 楼 zaixiankaifa 的回复:函数参数压栈顺序，是从右向左。 觉得这句话最有用  这个是相对编译器来说的！和语法没什么关系的， 现在只是记得Windows和Linux函数参数压栈的顺序是相反的，具体的不记得了！

user: user-5
content: 函数参数压栈顺序，是从右向左。 觉得这句话最有用

user: user-6
content: C,C++ 的缺省调用约定分别是cdecl,stdcall 函数参数压栈顺序，是从右向左。 所以一般来说，求值顺序，也可能是这样的，这是比较正常的做法。  但是也可能函数调用前，先求所有参数的值，然后按照从右向左压栈。 虽然这么做很别扭，但是不代表编译器，不会这么做。 那么，这么做的编译器，就可以任意选择，参数的求值顺序。  但是，这里和求值顺序有关，但是关系不大。  主要是 ++ 操作，是有副作用的，这里是这个副作用的，生效时机问题。 这个时机是未定义的。  那么编译器，可以选择，++ 何时生效。   int a[]={1,5,7,9,11,13};main(){int *p;p=a+3;printf("%d,%d＼n",*p,*p++) 为什么答案是11,9   这很好解释，这个编译器，比较正常， 按照参数入栈顺序，计算参数的值，并随着计算，让++的结果生效。  于是 *p++ =9 ,p=a+4      *p =*(a+4) = 11; 所以 结果就是 11，9；  虽然有点反直觉，却是最正常的结果。 别的编译器，未必这么正常，就会产生另外的结果。

user: user-7
content: undefined behaviour 编译器不同，结果可能是9，11或11，9或9，9或11，11
user-0 提问: 热烈庆祝本人受关注人数即将突破4000大关！散分！！＋征集各种语言实现“运行时修改代码”例子。

回复:
user: user-1
content: #pragma comment(linker,"/SECTION:.text,RW")  #include <stdio.h> int *p;  int p2()  {      	int a=87;  	a=a+15;      	return a;  }   int main()  {       	int o; 	p=(int *)((char *)p2+59);     *p=0xE883FC45; 	o=8; 	printf("p2()==%d\n",p2()); 	scanf("%d",p); 	return 0;  }  最后的输出结果是【p2()=72】，嘿嘿，坐等领分。。。

user: user-2
content: 已经关注赵老师

user: user-3
content: 不错……顶一个

user: user-4
content: 接分走人

user: user-5

user: user-6
content: 赵老师是我的偶像，生命不息，学习不止！

user: user-7
content: 这位 赵老师经常见到。

user: user-8
content: 送粉   这代码看不太懂...

user: user-9
content: 仔细看，赵老的话其实很有道理呢。。

user: user-10
content: 引用 83 楼 xiyuyan 的回复:首先祝贺，同时不知道4000关注群有啥好处？ 运行时修改代码不是好习惯，刚学指针的新手都会。 运行时能修改程序自身的可执行文件（修改硬盘文件）才叫本事。  习语言示例 〖 #包含 “习语言系统.接口”  无返回值  主函数(无参数) { 	整数  学员[50]，张三，修改标志=1;	 	格式输入（“%（整数）”，&张三）； 	学员[50] = 张三 + 100；   // 第一次修改程序； 	格式输出（“%（整数）”，张三）； }  〗  呵呵，来参观赵老师，呵呵，修改自身，可以的啊，不过麻烦很多，程序在运行，自身文件时无法写入的，不过可以强制写入(ring0下，强制去掉一些相关东东)，也可以用先寄托在其他进程内，然后结束进程，在其他进程内寄托的副本，来修改真实文件

user: user-11
content: 刚刚注意到赵老师的帖子啊 呵呵

user: user-12

user: user-13
content: 不明觉厉

user: user-14
content: 老赵，屌炸天呀。

user: user-15
content: 我晕，我明明看的是另外一个哥们的帖子，怎么突然跑赵老师这边来了

user: user-16
content: 我这里有用thunk封装的windows类，用到了运行时修改代码。使用的MFC一样的技术，thunk. http://blog.csdn.net/sdhexu

user: user-17
content: 新人表示看不明白！

user: user-0
content: 自顶！

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

user: user-18
content: 修改数据码段实现之 把数据当代码调用 数据段，改成代码段即可 Windows 加载程序就是这么干的。 你的程序，对他就是数据。 加载后，把你的程序当作代码启动。
user-0 提问: 求C语言对称函数程序

回复:
user: user-1
content: 你看到的东西，都是一笔一笔的画出来的。

user: user-0
content: [quote=引用 5 楼 zhao4zhong1 的回复:] ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/gdicpp/GDIPlus/usingGDIPlus/usingimagesbitmapsandmetafiles/rotatingreflectingandskewingimages.htm 这是什么啊？？网址打不开

user: user-0
content: 我想画象棋棋盘，线条，棋子能直接对称过去显示！

user: user-2
content: ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/gdicpp/GDIPlus/usingGDIPlus/usingimagesbitmapsandmetafiles/rotatingreflectingandskewingimages.htm Rotating, Reflecting, and Skewing Images   --------------------------------------------------------------------------------  You can rotate, reflect, and skew an image by specifying destination points for the upper-left, upper-right, and lower-left corners of the original image. The three destination points determine an affine transformation that maps the original rectangular image to a parallelogram. (The lower-right corner of the original image is mapped to the fourth corner of the parallelogram, which is calculated from the three specified destination points.)  For example, suppose the original image is a rectangle with upper-left corner at (0, 0), upper-right corner at (100, 0), and lower-left corner at (0, 50). Now suppose we map those three points to destination points as follows.  Original point Destination point  Upper-left (0, 0) (200, 20)  Upper-right (100, 0) (110, 100)  Lower-left (0, 50) (250, 30)   The following illustration shows the original image and the image mapped to the parallelogram. The original image has been skewed, reflected, rotated, and translated. The x-axis along the top edge of the original image is mapped to the line that runs through (200, 20) and (110, 100). The y-axis along the left edge of the original image is mapped to the line that runs through (200, 20) and (250, 30).    The following example produces the images shown in the preceding illustration.  Point destinationPoints[] = {    Point(200, 20),   // destination for upper-left point of original    Point(110, 100),  // destination for upper-right point of original    Point(250, 30)};  // destination for lower-left point of original Image image(L"Stripes.bmp"); // Draw the image unaltered with its upper-left corner at (0, 0). graphics.DrawImage(&image, 0, 0); // Draw the image mapped to the parallelogram. graphics.DrawImage(&image, destinationPoints, 3);  The following illustration shows a similar transformation applied to a photographic image.    The following illustration shows a similar transformation applied to a metafile.     --------------------------------------------------------------------------------  © 2005 Microsoft Corporation. All rights reserved.

user: user-3
content: TextOut

user: user-4
content: 首先： 你对称 要对汉字的中心区域进行。 然后考虑汉字本身是否对称显示。 其次：要考虑如何对称 1）中心对称 2）轴对称 3）处理好对称后如何显示。    立体感强的三维图像是透视图。    其他一般是二维平面图形；    最多是个投影图形。

user: user-5
content: 相对轴对称？相对远点对称？都是简单的数学吧....

user: user-6
content: 楼主，请把问题描述清楚，越清楚越好！
user-0 提问: 用什么软件可以画坐标系

回复:
user: user-1
content: win+R  mspaint

user: user-2
content: 几何画板

user: user-0
content: 引用 3 楼 JiMoKuangXiangQu 的回复:WORD, EXCEL, VISO, CAD都可以吧。 能具体说说怎么画布

user: user-3
content: WORD, EXCEL, VISO, CAD都可以吧。

user: user-0
content: 引用 1 楼 u011779875 的回复:什么叫用什么软件   MATLAB  我现在用VS C++开发 Unity 3d 可以  directX 3d  opencv貌似也可以  我就想画个图，不需要软件编程

user: user-4
content: 什么叫用什么软件   MATLAB  我现在用VS C++开发 Unity 3d 可以  directX 3d  opencv貌似也可以

user: user-5
content: PhotoShop, word , CAD

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复:几何画板 提醒：这是一个软件的名字。

user: user-6
content: 软件都有这个功能；

user: user-7
content: 铅笔一支 2B牌的 纸一张   非卫生用的
user-0 提问: 最近写一些C语言入门算法方面的文章，有兴趣可以来看看

回复:
user: user-1

user: user-2
content: 嗯嗯 看看

user: user-3

user: user-4
content: 赞一个！推荐一个！

user: user-5
content: 泪流满面

user: user-6
content: 看你博客，是什么都搞啊！C语言相关博客写的不好！乱

user: user-7

user: user-8
content: 支持啊，顶一个

user: user-9

user: user-10
content: 赞一个mark

user: user-11
content: 看不到主题！！！

user: user-12
content: mark

user: user-13
content: 赞一个。 最近，也打算开个C语言系列的博客，从硬件系统，汇编，编译，操作系统角度来理解C。

user: user-14
content: mark,支持

user: user-15
content: 这个必须mark一下

user: user-16
content: 还不错！就是感觉想一个广告！

user: user-17
content: mark

user: user-18
content: 干货什么的最有爱了

user: user-19
content: 必须的支持，顶

user: user-20
content: 学习一下
user-0 提问: 搜索文件并将文件按名称排序功能的问题 

回复:
user: user-1
content: 引用 17 楼 uuuououlcz 的回复:[quote=引用 14 楼 zhao4zhong1 的回复:] 用qsort函数。  qsort函数好像只能对连续存储的数组进行排序哦[/quote] 请先把文件列表保存到数组中。

user: user-2
content: 引用 18 楼 zhao4zhong1 的回复:[quote=引用 17 楼 uuuououlcz 的回复:] [quote=引用 14 楼 zhao4zhong1 的回复:] 用qsort函数。  qsort函数好像只能对连续存储的数组进行排序哦[/quote] 请先把文件列表保存到数组中。[/quote]  嗯，貌似STL list排序时，也建议先保存到vector，再sort, 再存回list

user: user-1
content: 用qsort函数。

user: user-3
content: 就是一个排序就好，对链表进行排序

user: user-4
content: 否则的话，在文件系统搜索结果的函数里面增加一个hook，然后再外面调用的时候把自己排序的函数hook进去，然后再返回结果。

user: user-4
content: 引用 2 楼 huabinsir 的回复:和文件系统有关系吗? 若是jffs2 如何处理呢? 没了解楼主的意图，以为是要在文件系统里面增加这个功能。 如果不是，那按照楼上那些兄弟方法就行了。

user: user-0
content: 引用 9 楼 buyong 的回复:std::list::sort  第三方的小系统，没有这些封装。 只能进行基础的排序.

user: user-5
content: std::list::sort

user: user-0
content: 这和文件系统无关吧

user: user-6
content: 搜索到文件之后，排列之前，进行一次排序操作！ 应该在链表中对文件名进行排序操作一次就好！

user: user-7
content: 引用 5 楼 huabinsir 的回复:是对链表进行排序? 恩，对链表 按 文件名排序就好了。

user: user-0
content: 是对链表进行排序?

user: user-0
content: 搜索到的结果放到 链表中.

user: user-7
content: 你搜索到的结果放到什么地方的呢？》  char* 数组？

user: user-0
content: 和文件系统有关系吗? 若是jffs2 如何处理呢?

user: user-4
content: 不知道楼主用的什么文件系统，jffs2吗？还是yaffs？

user: user-2
content: 引用 14 楼 zhao4zhong1 的回复:用qsort函数。  qsort函数好像只能对连续存储的数组进行排序哦

user: user-2
content: 写个了链表排序给你，可供参考：  typedef int (*pFun)(struct node* a, struct node* b); struct node* sortList(struct node* head, pFun cmp) {     struct node *p, *q, *pre;     if(head == NULL || head->next == NULL) return head;     //insertion sort     p = head->next;     head->next = NULL;     for(; p; ){				//p points to the node to be added into the ordered list         for(pre = NULL, q = head; q; pre = q, q = q->next){ 	    if(cmp(p, q) < 0) break;	//should put p in front of q 	}         if(pre == NULL){		//p should be the head 	    pre = p->next;             p->next = head; 	    head = p; 	    p = pre;			//p points to next node now 	}         else{				//p should be after pre and before q             pre->next = p; 	    pre->next->next = q;             p = p->next;		//p points to next node now 	}     }     return head; }

user: user-8
content: 库中没有排序函数吗？  你也可以把搜索结果截取出来，自己排序。采用链表或者顺序表。顺序表建议采用记录索引方式排序，避免数据的移动
user-0 提问: 关于做界面的问题

回复:
user: user-1
content: 引用 楼主 lilin_colin 的回复:这学期学的数据库，老师叫我们做一个学生管理系统，要结合数据库来做。  之前自己用纯C用链表和结构体做过相关系统，但是在是在DOS界面运行的，现在老师要求有界面。  数据库方面没有太大的问题，主要是做界面这个问题，用MFC做感觉好难，那些东西很多，而且感觉很难理解。  要求的功能也很简单，就是跟数据库相对应的增，删，改，查。网上没有具体项目的视频，全是 MFC教程。  不知道大神有没有好建议，真的要学习MFC吗？ 可以学习一下，了解一下思想，不要做过深的学习，毕竟这个框架现在使用面不是很广了。

user: user-2
content: 引用 2 楼 lilin_colin 的回复:[quote=引用 1 楼 user-2 的回复:] 推荐从零开始学习下Qt 可以先有目的性的完成手动上的任务！后期好好学习Qt！学好了，再美化， 也算是以后找工作的一个亮点！  QT在ubuntu里用过，感觉很好，很方便，还真不知windows上也能装QT，我去查下资料，谢谢！[/quote]  qt是跨平台的！不像MFC那么局限的！

user: user-0
content: 引用 1 楼 user-2 的回复:推荐从零开始学习下Qt 可以先有目的性的完成手动上的任务！后期好好学习Qt！学好了，再美化， 也算是以后找工作的一个亮点！  QT在ubuntu里用过，感觉很好，很方便，还真不知windows上也能装QT，我去查下资料，谢谢！

user: user-2
content: 推荐从零开始学习下Qt 可以先有目的性的完成手动上的任务！后期好好学习Qt！学好了，再美化， 也算是以后找工作的一个亮点！
user-0 提问: 请教一个问题

回复:
user: user-0
content: 引用 4 楼 max_min_ 的回复:[quote=引用 3 楼 u012207185 的回复:] [quote=引用 2 楼 max_min_ 的回复:] 直接用鼠标拖拽到里面就好了吧！ 试试 把代码拖到命令行里去？还是把什么拖到什么地方去？[/quote]  生成的可执行文件丢进去就好！ 如果还没生成repeat 则 项目   ----   属性   ----   链接器   ----   常规  ----   输出文件 （Release/xx.exe）  [/quote] 谢谢斑竹啊，成功了！

user: user-1
content: 引用 3 楼 u012207185 的回复:[quote=引用 2 楼 max_min_ 的回复:] 直接用鼠标拖拽到里面就好了吧！ 试试 把代码拖到命令行里去？还是把什么拖到什么地方去？[/quote]  生成的可执行文件丢进去就好！ 如果还没生成repeat 则 项目   ----   属性   ----   链接器   ----   常规  ----   输出文件 （Release/xx.exe）

user: user-0
content: 引用 2 楼 max_min_ 的回复:直接用鼠标拖拽到里面就好了吧！ 试试 把代码拖到命令行里去？还是把什么拖到什么地方去？

user: user-1
content: 直接用鼠标拖拽到里面就好了吧！ 试试

user: user-2
content: 搜 windows 命令行  编译c
user-0 提问: c语言向无参函数传参的困惑

回复:
user: user-1
content: 没有为啥，无参的时候本来就可以传递任意参数的，所以一般推介写为void fun（void），不过C++里面严格匹配了编译是不会通过的

user: user-2
content: 没有为啥啊 C语言本来就这么规定的。这就是cdecl的优势。

user: user-3
content: 不仅你说的可以，亲测了一下，连下面的代码在C里也可以运行的说  typedef int (*pFun)(); int fun(int a) {     return a; } int main() {     pFun intFun = &fun;     printf("%d\n", intFun(10));     return 0; }  帮你google了一下，http://blog.csdn.net/ylgrgyq/article/details/6940602，看了觉得有用
user-0 提问: 串口的发送与发送需要多线程互斥，那么发送和接收呢？

回复:
user: user-0
content: 现在2个线程去接收  OK,  一个线程接到了O,另一个线程接收到了K.     OK被分开了。

user: user-1
content: 引用 4 楼 nice_cxf 的回复:看是总线是422，232还是485了，485是半双工，不能同时收发，其他两种可以  485半双工是属于串口之外的事情，内部还是全双工的

user: user-0
content: 谢谢大家的答复，我现在发现串口怎么这么麻烦啊。。我现在用ANDROID开发板和串口设备进行通信，用开发板官方的API，只有4个API函数，open,  write ,read, select,  没有像windows上的那种异步事件通信。  现在发现串口互斥的太多了：  1.发送与发送互斥；2. 接收与接收互斥。   那我写代码就这样写吧：  只有1个线程 进行接收，其他线程发送间互斥就行了。  全双工，发送与接收不需要互斥。

user: user-2
content: 串口自带Buffer的， 好像还是循环的， 注意不要溢出就行了。

user: user-1
content: 引用 9 楼 gaoxiaoweiandy 的回复:全双工：  发送和接收  不需要互斥。   发送与发送 必须互斥。 接收与接收需要 互斥吗？我感觉还是对这点有点疑惑。  接收应该不是是不是要互斥的问题，应该是调度的问题，也就是接收的数据应该归谁处理，然后发送到对应的模块

user: user-3
content: 接收与接收需要互斥

user: user-4
content: 引用 2 楼 gaoxiaoweiandy 的回复:我现在也很疑惑，有的人说需要 串口  读写互斥，有的说不需要。 串口大部分都是半双工的，同一时间片要么发，要么收，不能即发又收的

user: user-3
content: 引用 4 楼 nice_cxf 的回复:看是总线是422，232还是485了，485是半双工，不能同时收发，其他两种可以 惊现串口达人！膜拜！

user: user-0
content: 全双工：  发送和接收  不需要互斥。   发送与发送 必须互斥。 接收与接收需要 互斥吗？我感觉还是对这点有点疑惑。

user: user-0
content: 全双工：  发送和接收  不需要互斥。   发送与发送 必须互斥。 接收与接收 实践证明 也应该互斥，但不知  道其原理， 我用2个线程 去接收 messageOk,结果 第一个线程接收到了messag,第二个线程接收到了eok.等于说  第二个线程将第一个线程该接收的数据抢过去了。   半双工：  发送 和  接收  必须互斥。  发送 与发送 必须互斥。 接收与接收 理论上 也应该互斥。

user: user-5
content: 看是总线是422，232还是485了，485是半双工，不能同时收发，其他两种可以

user: user-3
content: 串口相关硬件也有是否支持全双工的区别？

user: user-6
content: 引用 3 楼 zhao4zhong1 的回复:串口相关硬件也有是否支持全双工的区别？  硬件是基础，决定上层建筑

user: user-0
content: 我现在也很疑惑，有的人说需要 串口  读写互斥，有的说不需要。

user: user-7
content: 你想的是对的，没有共享资源的访问，也就不需要临界区！此外读但不修改，即使共享也不需要互斥，如果存在共享资源的写，那么有读写互斥问题。 你这里是发送-串口-接收地-读取，发到的地和接收的地不是一块地，也就不需要互斥了