Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: [问题]makefile的必要性何在？有替代品吗？

回复:
user: user-0
content: 一并谢过各位！

user: user-1
content: 有替代品，cmake

user: user-2
content: Makefile是要结合shell工作的。  二者各司其职。   不写Makefile也能编译，手动一个个去处理，如果再自动化起来就是shell了，所以shell也是可以的。 不过Makefile更专而已。

user: user-3
content: 搜“跟我一起写makefile”
user-0 提问: TC伪随机数加密

回复:
user: user-0
content: K1,K2,K3,K4,K5有什么用？

user: user-0
content: OH MY GOD！

user: user-1
content: gets, _getws Get a line from the stdin stream.  char *gets( char *buffer );  wchar_t *_getws( wchar_t *buffer );  Routine Required Header Compatibility  gets <stdio.h> ANSI, Win 95, Win NT  _getws <stdio.h> or <wchar.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  Each of these functions returns its argument if successful. A NULL pointer indicates an error or end-of-file condition. Use ferror or feof to determine which one has occurred.  Parameter  buffer  Storage location for input string  Remarks  The gets function reads a line from the standard input stream stdin and stores it in buffer. The line consists of all characters up to and including the first newline character ('\n'). gets then replaces the newline character with a null character ('\0') before returning the line. In contrast, the fgets function retains the newline character. _getws is a wide-character version of gets; its argument and return value are wide-character strings.  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _getts gets gets _getws    Example  /* GETS.C */  #include <stdio.h>  void main( void ) {    char line[81];     printf( "Input a string: " );    gets( line );    printf( "The line entered was: %s\n", line ); }   Output  Input a string: Hello! The line entered was: Hello!   Stream I/O Routines  See Also   fgets, fputs, puts
user-0 提问: 数组大小不能用宏吗

回复:
user: user-1
content: hi mao  一般来说是可以使用宏的啊。 不过，你定义的宏是不是后面多了;符号?这样就会存在问题的 -_-

user: user-2
content: 引用 6 楼 maosharen 的回复:我是在模块里面定义的，不过不是主文件，并且是全局数组变量，编译不通过  建议贴错误信息，估计不是宏的问题

user: user-3
content: malloc,realloc,free

user: user-4
content: 你的错误 和 是不是宏没关系

user: user-5
content: 可以吧 你代码是怎么写的

user: user-0
content: 我是在模块里面定义的，不过不是主文件，并且是全局数组变量，编译不通过

user: user-6
content: 把代码贴出来看看就知道了。。。

user: user-4
content: 引用 3 楼 book_ShiHaipeng 的回复:可以，绝对可以！不是绝对的

user: user-7
content: 可以，绝对可以！
user-0 提问: C语言习题，求1000以内的完数，编程如下，运行中报错，请各位高手指点指点，谢谢！

回复:
user: user-1
content: int a,i,j,sum,s[15]; 这一句里，用来存储的s[15]定义的太小了，判断的时候会越界的，定义成s[100]应该就行了。

user: user-2
content: #include<stdio.h> /*完数 数字等于其所有因数之和*/  int main() { 	int a,i,j,sum,s[40]; 	for(a=2;a<=1000;a++) 	{ 		for(i=0;i<40; i++) 			s[i]=0; 		sum=0;j=0; 		for(i=1;i<a;i++) 		{ 			if(a%i==0){ 			s[j]=i; 			sum=sum+i; 			j++; 		} 		} 		if(sum==a) 		{ 			printf("完数 %d 的因子有： ",a); 			for(i=0;i<j;i++) printf("%4d",s[i]); 			printf("\n"); 		} 	}  	return 0; }  ////   应将S[]数组清零， 佛则有脏值； 另外S[15]， 尽可能的大些， VC下通过。。 560 的因数大于15个了。。。

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-0
content: 确实是这样，改了就好了，看来书上给的答案也有问题啊，多谢多谢！

user: user-4
content: s[j]=i; j明显会超过15
user-0 提问: C语言格式化输入小问

回复:
user: user-1
content: scanf_s里边少了个k没有输入。

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

user: user-3
content: 切换到英文键盘输入状态试试

user: user-4
content: 输入数据是什么啊
user-0 提问: c语言二维数组指针传入被调函数怎么写啊！我自己写的行列式计算器  交换两行的被调函数swaph好像没作用...求指教

回复:
user: user-1
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //
user-0 提问: 谁会做这试卷？

回复:
user: user-1
content: fuck.fuck。

user: user-2
content: 我会........

user: user-3
content: 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！

user: user-4
content: 这个应该是考试题吧

user: user-5
content: 会又怎样？！

user: user-6
content: 在开发环境中运行就有结果的，粘贴复制就行，用不了多久！！

user: user-7
content: 自己动手写吧。。。老师出这题目也不容易。。。

user: user-8
content: 有时间发帖子，我觉得直接动手更好一点
user-0 提问: 用C语言如何编写这个算法？

回复:
user: user-1
content: 深度优先搜索＋回溯  #include<stdio.h>  static int money[] = { 100, 50, 20, 10, 1 }; static int stack[110]; static int index = 0;  static void dfs(int sum, int max) { 	int i; 	if (sum > 100) 		return; 	else if (sum == 100) 	{ 		for (i = 0; i < index; i++) 			printf("%d ", stack[i]); 		putchar('\n'); 		return; 	} 	for (i = 0; i < 5; i++) 		if (money[i] <= max) 		{ 			stack[index++] = money[i]; 			dfs(sum + money[i], money[i]); 			index--; 		} }  int main() { 	dfs(0, 100); 	return 0; }

user: user-2
content: 仅供参考 /*  * 100元的具体划分方案，可选面值有1元、10元、20元、50元、100元   */ #include <stdio.h>  #define MONEY 100  int money[]={1,10,20,50,100};  int check_money(int num[],int n) { 	int i; 	int sum=0; 	 	for(i=0;i<n;i++) 	{ 		sum=sum+num[i]*money[i]; 	} 	if(sum<100)return 1; 	if(sum==100)return 2; 	return 0; }  void putmoney(int num[]) { 	int i; 	printf("100="); 	for(i=0;i<5;i++) 	{ 		if(num[i])printf("%d*%d+",money[i],num[i]); 	} 	printf("\b \n"); }  int main() { 	int num[5]; 	for(num[0]=100;num[0]>=0;num[0]--) 		if(check_money(num,1)) 		for(num[1]=10;num[1]>=0;num[1]--) 				if(check_money(num,2)) 				for(num[2]=5;num[2]>=0;num[2]--) 					if(check_money(num,3)) 					for(num[3]=2;num[3]>=0;num[3]--) 						if(check_money(num,4)) 						for(num[4]=1;num[4]>=0;num[4]--) 							if(check_money(num,5)==2)putmoney(num); 	return 0; }

user: user-3
content: #include<stdio.h> int a[5]={100,50,20,10,1}; int q(int n,int i){ 	if(n<0)return 0; 	if(i==4||n==0) 		return 1; 	return q(n,i+1)+q(n-a[i],i); } int main(){ 	printf("%d\n",q(100,0)); 	return 0; }  不知道对不对...
user-0 提问: C语言专题  编程题目寻找

回复:
user: user-1
content: http://pan.baidu.com/s/1eQiofPw这个可以试试

user: user-2
content: 直接搜"c 练习题"即可，加上你想要的专题比如“指针”。面试题也可以，其中有很多关于算法的你可以暂时不看，看基础练习就行 http://www.baidu.com/s?wd=c%20%E7%BB%83%E4%B9%A0%E9%A2%98%20%E6%8C%87%E9%92%88%20site%3Acsdn.net&rsv_bp=0&tn=baidu&rsv_spt=3&ie=utf-8&rsv_n=2&rsv_sug3=1&rsv_sug4=396&rsv_sug2=0&inputT=1363
user-0 提问: C语言问题

回复:
user: user-0
content: 百度复合文字 ，我是新手，讲不太清楚。

user: user-1
content: Cfree有问题

user: user-2
content: 引用 6 楼 call_from_dream 的回复:问题同上，lz给我们解释一下int *p=(int [2]){1,2};。 谢谢了！ 这是C99语法 int *p=(int [2]){1,2};意思是p指向一个一维匿名数组，该数组有两个成员1和2

user: user-0
content: 引用 8 楼 u013470052 的回复:Cfree有问题 好吧

user: user-0
content: 楼主是小白      这是C Primer Plus(第五版)的内容，我下了个VS2013   上面2段代码都不能通过编译，应该是编译器不支持 可是用C-FREE，第一段代码不能通过编译，第二段能。就不太理解了。 这2段代码差别不就是指针的定义赋值（地址）么？ 求解释。。。！！！！！！！！！！

user: user-3
content: 问题同上，lz给我们解释一下int *p=(int [2]){1,2};。 谢谢了！

user: user-4
content: 引用 4 楼 u013697891 的回复:int *p=(int [2]){1,2};楼主可以解释一下吗，以前没见过 无法理解，请楼主科普，而且我用VC两个都不能编译提示nt *p=(int [2]){1,2};在这段，missing ';' before '{'。

user: user-5
content: int *p=(int [2]){1,2};楼主可以解释一下吗，以前没见过

user: user-6
content: --------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------  检查文件依赖性... 正在编译 C:\Win-TC\projects\noname.c... 正在连接...  完成构建 noname: 0 个错误, 0 个警告 生成 C:\Win-TC\projects\noname.exe   没问题啊   引用 2 楼 u014678550 的回复:[quote=引用 1 楼 zxhuser-6 的回复:] 可以啊，哪有问题了？反正我是编译通过了 c free通不过[/quote]

user: user-0
content: 引用 1 楼 zxhuser-6 的回复:可以啊，哪有问题了？反正我是编译通过了 c free通不过

user: user-6
content: 可以啊，哪有问题了？反正我是编译通过了
user-0 提问: c语言导入txt文本乱码

回复:
user: user-1
content: up

user: user-2
content: 引用 6 楼 baidu_16916719 的回复:引用 1 楼 u013171165 的回复:统一文件编码，IDE console编码，没其他选择。在哪修改呀  能指出吗 你的IDE你自己改，另外，我是建议所有都用utf-8编码，这样中文注释跨平台才不会消失。

user: user-0
content: 引用 1 楼 u013171165 的回复:统一文件编码，IDE console编码，没其他选择。在哪修改呀  能指出吗

user: user-0
content: 引用 3 楼 zxh707wk 的回复:这种事。。。 当我把在linux下写的代码放到windows上打开时中文会乱码。。。环境实在win 的呀  怎么修改呢

user: user-0
content: 怎么修改呢  在哪部分修改？

user: user-3
content: 这种事。。。 当我把在linux下写的代码放到windows上打开时中文会乱码。。。

user: user-4
content: 编码不一样吧，比如说txt文件中有的符号编码在你运行条件下没有对应的符号，于是对应的是乱码。换个条件试试。

user: user-2
content: 统一文件编码，IDE console编码，没其他选择。

user: user-3
content: 引用 7 楼 u013171165 的回复:引用 6 楼 baidu_16916719 的回复:[quote=引用 1 楼 u013171165 的回复:] 统一文件编码，IDE console编码，没其他选择。在哪修改呀  能指出吗 你的IDE你自己改，另外，我是建议所有都用utf-8编码，这样中文注释跨平台才不会消失。[/quote]+1
user-0 提问: 多个c文件包含相同的头文件

回复:
user: user-1
content: 引用 14 楼 u013171165 的回复:[quote=引用 7 楼 u013171165 的回复:] [quote=引用 6 楼 u013171165 的回复:] #ifndef PERSON_H_//（写你的头文件名） #define PERSON_H_ /*****************************BEGIN***********************************/ //你的类代码块 /******************************END************************************/ #endif /* PERSON_H_ */ 养成这样的习惯，永远不会出错。省时省力的是配置你的IDE模板，如果IDE这样的模板都没有，抛弃他吧！我用的是eclipse，详细配置我的Blog里面有。[/quote] 再次说明：楼主问题为多个c文件包含相同的头文件。 首先这个习惯是要养成的，其次你这种问题可以用我说的方法解决，用static肯定不是楼主你所想要的。 方法： 头文件.h里只存在申明，把实现放到另一个.c的源文件里（名字可以一致）！实测通过！ [/quote] 再详细点就是 #ifndef PERSON_H_//（写你的头文件名） #define PERSON_H_ /*****************************BEGIN***********************************/ //你的类代码块 /******************************END************************************/ #endif /* PERSON_H_ */ 这段代码保证你头文件互相include不会重新编码，也就不会报多次定义的错误；而【头文件.h里只存在申明，把实现放到另一个.c的源文件里（名字可以一致）！实测通过！】保证你多个cpp文件中include同一个头文件不会报重复定义的错误。总结完毕。实测通过了的。明天记录到微博，感谢楼主的问题，我又进步了！哈哈

user: user-1
content: 引用 7 楼 u013171165 的回复:[quote=引用 6 楼 u013171165 的回复:] #ifndef PERSON_H_//（写你的头文件名） #define PERSON_H_ /*****************************BEGIN***********************************/ //你的类代码块 /******************************END************************************/ #endif /* PERSON_H_ */ 养成这样的习惯，永远不会出错。省时省力的是配置你的IDE模板，如果IDE这样的模板都没有，抛弃他吧！我用的是eclipse，详细配置我的Blog里面有。[/quote] 再次说明：楼主问题为多个c文件包含相同的头文件。 首先这个习惯是要养成的，其次你这种问题可以用我说的方法解决，用static肯定不是楼主你所想要的。 方法： 头文件.h里只存在申明，把实现放到另一个.c的源文件里（名字可以一致）！实测通过！

user: user-2
content: 全局变量多了不好维护。

user: user-3
content: 总结下楼上的： 1）用这么多全局变量说明你的设计不是很合理，考虑下使用其它方式，比如使用一个全局的结构体，包含所有的全局变量。 2）如果非要这么使用全局变量，应该在一个源文件中定义，在头文件中逐个extern声明，其它的文件可以包含此头文件，来使用全局变量，注意这个头文件需要用ifdef的方式防止重复包含。

user: user-4
content: 1. 看一下声明与定义的区别。 2. 为什么会有这么多的全局变量，是否可以改善设计。如果的确需要，加extern也没什么麻烦的。

user: user-5
content: 设计问题，换思路吧！ 用接口或者结构体这些，或者c++都可以的

user: user-6
content: 根本方法是修改你的设计。 为何需要那么多的全局变量？到底是不得不如此，还是你懒得动脑分析每个变量具体的生存期和作用范围？

user: user-7
content: 用static修饰

user: user-1
content: 引用 6 楼 u013171165 的回复:#ifndef PERSON_H_//（写你的头文件名） #define PERSON_H_ /*****************************BEGIN***********************************/ //你的类代码块 /******************************END************************************/ #endif /* PERSON_H_ */ 养成这样的习惯，永远不会出错。省时省力的是配置你的IDE模板，如果IDE这样的模板都没有，抛弃他吧！我用的是eclipse，详细配置我的Blog里面有。

user: user-1
content: #ifndef PERSON_H_//（写你的头文件名） #define PERSON_H_ /*****************************BEGIN***********************************/ //你的类代码块 /******************************END************************************/ #endif /* PERSON_H_ */

user: user-8
content: 或者用vim加也很方便

user: user-8
content: 如果你想单纯的加extern 写个脚本加就行了

user: user-9
content: 例子给出来啊

user: user-10
content: 头文件中不建议定义函数和变量 只声明函数和变量

user: user-11
content: 头文件是否用了#ifdef这样的语句？  全局变量。不过不推荐，因为可维护性不高。
user-0 提问: C语言数据类型的取值范围，这本书是不是错了？

回复:
user: user-1
content: 请楼主亲自打开include\limits.h和include\float.h这两个文件查看之。

user: user-2
content: 引用 2 楼 czarten 的回复:上面说的不对，float和double是IEEE754规定的格式，跟系统位数无关 ---------------------------------------------------- 以float为例 首先，你给的这两种范围都是错的 其次，确实有两种取值范围，一种是-3.4E38---3.4E38，一种是1.4E-45～3.4E38 这两种说法都是正确的 注意看两个范围的最小值，第一个是负的，第二个是正的 -3.4E38是真正的最小值，1.4E-45是最小的正数值 也就是说，float完整的取值范围是：[ -3.4E38 , -1.4E-45 ] , [ +1.4E-45 , +3.4E38 ]常见实现是这样 但是 C没要求一定要用IEEE754  你误会IEEE754的意义了

user: user-3
content: 引用 5 楼 zhao4zhong1 的回复:请楼主亲自打开include\limits.h和include\float.h这两个文件查看之。  赵老师这个回答给力啊

user: user-4
content: 引用 3 楼 li_laoshi 的回复:能给一个完整的数据类型的取值表吗？去百科看了一下，没有找到具体的取值。  搜“IEEE754”，你会看到浮点数的具体格式，32个bit分别用来存放什么 大致上说，浮点数是用类似于科学计数法的格式存放的，其中8位存放指数部分，23位存放尾数部分，还有一位表示正负 所以如果一个非常接近0的数，例如2的 -1000次，这个1000就没法用8位存放，所以这个数无法表示

user: user-5
content: 没有对与错，你要自己试下自己机器，机器不同，系统不同，这些都可能不一样。你建立个float或者double型的变量，sizeof()下他的字节数，自己计算吧

user: user-0
content: 能给一个完整的数据类型的取值表吗？去百科看了一下，没有找到具体的取值。

user: user-4
content: 上面说的不对，float和double是IEEE754规定的格式，跟系统位数无关 ---------------------------------------------------- 以float为例 首先，你给的这两种范围都是错的 其次，确实有两种取值范围，一种是-3.4E38---3.4E38，一种是1.4E-45～3.4E38 这两种说法都是正确的 注意看两个范围的最小值，第一个是负的，第二个是正的 -3.4E38是真正的最小值，1.4E-45是最小的正数值 也就是说，float完整的取值范围是：[ -3.4E38 , -1.4E-45 ] , [ +1.4E-45 , +3.4E38 ]
user-0 提问: 新手疑問 (C)

回复:
user: user-1
content: 引用 5 楼 bcisag777 的回复:[quote=引用 4 楼 zilaishuichina 的回复:]  do statement A;  clock_t start, finish; float times; start = clock(); while(true) {     finish = clock();     times = (finish * 1.0f - start) / CLOCKS_PER_SEC;     if (times > 1.0f) //超过1秒则跳出循环，否则在下次循环中继续判断     {         break;     }      if(condition A) //这里每次循环都会判断A并执行C，如果lz希望C只执行1次，可以再加个标志。         do statement C; }  do statement B;  非常感謝!!!!!  若要改變1秒為時間變數應怎麼寫? 代碼中的1.0f是甚麼意思?[/quote]  times = (finish * 1.0f - start) / CLOCKS_PER_SEC;  算出来的就是从start = clock();开始 到finish = clock();为止的耗时，单位是秒

user: user-0
content: 引用 4 楼 zilaishuichina 的回复: do statement A;  clock_t start, finish; float times; start = clock(); while(true) {     finish = clock();     times = (finish * 1.0f - start) / CLOCKS_PER_SEC;     if (times > 1.0f) //超过1秒则跳出循环，否则在下次循环中继续判断     {         break;     }      if(condition A) //这里每次循环都会判断A并执行C，如果lz希望C只执行1次，可以再加个标志。         do statement C; }  do statement B;  非常感謝!!!!!  若要改變1秒為時間變數應怎麼寫? 代碼中的1.0f是甚麼意思?

user: user-1
content: do statement A;  clock_t start, finish; float times; start = clock(); while(true) {     finish = clock();     times = (finish * 1.0f - start) / CLOCKS_PER_SEC;     if (times > 1.0f) //超过1秒则跳出循环，否则在下次循环中继续判断     {         break;     }      if(condition A) //这里每次循环都会判断A并执行C，如果lz希望C只执行1次，可以再加个标志。         do statement C; }  do statement B;

user: user-0
content: 所以我的問題其實是 : 如何判斷一條件是否在一段時間內為真?

user: user-0
content: 引用 1 楼 user-2 的回复:这个是伪代码实现呀。你的变量是啥，条件是啥，这些都是具体情况而定的吧。 把你的变量、语句按照这个思路去实现不就行了么  我的意思是 "happened in a second" 要讓系統等一秒, 又要在這一秒裡進行判斷, 所以不行直接用sleep之類的函式. 我的問題是有沒有在這種狀況下可用的函式或是這種狀況下的寫法?

user: user-2
content: 这个是伪代码实现呀。你的变量是啥，条件是啥，这些都是具体情况而定的吧。 把你的变量、语句按照这个思路去实现不就行了么
user-0 提问: 请教 不考虑重复 输出一个字符串的所有字符组合

回复:
user: user-0
content: 引用 4 楼 Intel0011 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h>  typedef  enum { false, true } bool;  //从n个元素的数组a中，取m个元素的组合 bool zuhe(char a[],int n,int m) {    //p[x]=y 取到的第x个元素，是a中的第y个元素     int index,i,*p;         p=(int*)malloc(sizeof(int)*m);     if(p==NULL)     {         return false;     }     index=0;     p[index]=0;//取第一个元素     while(true)     {         if(p[index]>=n)         {//取到底了，回退             if(index==0)             {//各种情况取完了，不能再回退了                 break;             }             index--;//回退到前一个             p[index]++;//替换元素         }         else if(index==m-1)         {//取够了，输出             for(i=0;i<m;i++)             {                 printf("%c",a[p[i]]);             }             printf("\n");             p[index]++; //替换元素         }         else         {//多取一个元素             index++;             p[index]=p[index-1]+1;         }             }     free(p);     return true; }  int main(void) {     char a[]="ABCDE";         zuhe(a,strlen(a),1);//组合     zuhe(a,strlen(a),2);//组合     zuhe(a,strlen(a),3);//组合     zuhe(a,strlen(a),4);//组合     zuhe(a,strlen(a),5);//组合      return 0; } 谢谢，我在Xcode里详细看看

user: user-0
content: 引用 3 楼 czarten 的回复:二进制map 000 ——  “” 001 —— “c” 010 —— "b" 011 —— "bc" 100 —— "a" 101 —— "ac" 110 —— "ab" 111 —— "abc"这个map的概念还没接触过，而且不知道怎么用

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  typedef  enum { false, true } bool;  //从n个元素的数组a中，取m个元素的组合 bool zuhe(char a[],int n,int m) {    //p[x]=y 取到的第x个元素，是a中的第y个元素     int index,i,*p;         p=(int*)malloc(sizeof(int)*m);     if(p==NULL)     {         return false;     }     index=0;     p[index]=0;//取第一个元素     while(true)     {         if(p[index]>=n)         {//取到底了，回退             if(index==0)             {//各种情况取完了，不能再回退了                 break;             }             index--;//回退到前一个             p[index]++;//替换元素         }         else if(index==m-1)         {//取够了，输出             for(i=0;i<m;i++)             {                 printf("%c",a[p[i]]);             }             printf("\n");             p[index]++; //替换元素         }         else         {//多取一个元素             index++;             p[index]=p[index-1]+1;         }             }     free(p);     return true; }  int main(void) {     char a[]="ABCDE";         zuhe(a,strlen(a),1);//组合     zuhe(a,strlen(a),2);//组合     zuhe(a,strlen(a),3);//组合     zuhe(a,strlen(a),4);//组合     zuhe(a,strlen(a),5);//组合      return 0; }

user: user-2
content: 二进制map 000 ——  “” 001 —— “c” 010 —— "b" 011 —— "bc" 100 —— "a" 101 —— "ac" 110 —— "ab" 111 —— "abc"

user: user-0
content: 引用 1 楼 user-3 的回复:这。。。  有什么本质的区别吗 最近在学习c，抱着学习的态度，不是为了完成任务

user: user-3
content: 这。。。  有什么本质的区别吗
user-0 提问: 求大神帮忙解决一下这个 万分感谢

回复:
user: user-1
content: http://pan.baidu.com/s/17yIcQ在这堆代码中找吧。。。有你想要的

user: user-2
content: 画图，然后根据思路把流程用伪代码写出来就好

user: user-0
content: 我没有思路，不知道该怎么去整

user: user-3
content: 额。。。自己不动手怎么帮你弄？
user-0 提问: 关于"使用了非标准扩展: 不支持在此结构上使用“__asm”关键字"的问题

回复:
user: user-0
content: 不行的 而且网上说 直接在...\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults这个文件夹里找到 masm.rules这个文件，将他重新复制并命名为masm64.rules就可以刷新出新的规则文件， 我找到VCprojectDefaults目录下只有一个文件，根本没有啥.rules，全盘搜索也没有的。。。。。。。    还有您说的在CMD编译时咋回事儿 谢谢

user: user-1
content: 这是将混合汇编转成纯汇编后，再link到c++里面去。 VC2008的界面就是和你搜到的一样的。2010没有用过，应该差不多的吧。你点击“查找现在的”不行吗？  这个东西的作用就是编译asm汇编代码时换一个工具而已。如果工程很简单，直接在cmd用命令编译也可以的。

user: user-0
content: 不好意思，网上找的解决方法少传了一张图，主要就是新建一个规则文件，（具体新建方法就不写了），然后选择新的规则文件再编译就能解决了，可是我的根本没有新建修改这个选项。
user-0 提问: switch case 问题

回复:
user: user-1
content: 楼主 case后面不能接变量的 建议重新写一下再发上来让大家挑错吧！

user: user-2
content: http://pan.baidu.com/s/17yIcQ在这堆代码中找吧。。。有你想要的

user: user-3
content: 最后出现次数由高到低输出字母和出现次数。这个不需要在for循环中用switch语句，最常见的是if。而且楼上几位都说了，case后面不要加变量，直接导致你变量数值相同时输出错误，指明了这段代码明显的缺陷，这时候你就该换个思路了。既然排序已经结束，以后的输出不需要筛选，直接交给循环语句顺次输出这个数组就可以了，如7楼用for

user: user-0
content: 引用 10 楼 Claude_Ray 的回复:最后出现次数由高到低输出字母和出现次数。这个不需要在for循环中用switch语句，最常见的是if。而且楼上几位都说了，case后面不要加变量，直接导致你变量数值相同时输出错误，指明了这段代码明显的缺陷，这时候你就该换个思路了。既然排序已经结束，以后的输出不需要筛选，直接交给循环语句顺次输出这个数组就可以了，如7楼用for 好的~已经解决了~就是用了那个方法~

user: user-0
content: 引用 11 楼 zxh707wk 的回复:http://pan.baidu.com/s/17yIcQ在这堆代码中找吧。。。有你想要的好~

user: user-0
content: 引用 7 楼 zilaishuichina 的回复:加一个   char order[4] = {'A', 'B', 'C', 'D'}; int count[4] = {j, k, l ,m};  for (int t=3; t>=0; t--)  {     printf("%c的个数：%d", order[t], count[t]); }  恩对！我后来也想到这样了然后就成功了~~谢谢…~~~

user: user-4
content: 楼主可以看看这个——http://blog.csdn.net/u012421456/article/details/18908559

user: user-5
content: 加一个   char order[4] = {'A', 'B', 'C', 'D'}; int count[4] = {j, k, l ,m};  for (int t=3; t>=0; t--)  {     printf("%c的个数：%d", order[t], count[t]); }

user: user-0
content: 引用 3 楼 lin5161678 的回复:case 后面跟的是 整型常量表达式  这是常识   你这情况 用if 用if 的话 如果数值相同 会重复输出耶 要怎么解决啊

user: user-0
content: 引用 1 楼 czarten 的回复:你这程序看着好奇怪，看不懂是想干什么，你的说明也很乱 我发了整个程序  从键盘输入一大堆字符串，统计A、B、C、D的出现次数，最后出现次数由高到低输出字母和出现次数。 这是题目  上面jklm是存了ABCD的个数并且排序了 就像对号入座输出文字啊。。 难道要用结构体吗

user: user-0
content: #include <stdio.h> #include<string.h> int main() {     char ch[100];     int i,n,j=0,k=0,l=0,m=0;     printf("请输入字符串：\n");     gets(ch);     n=strlen(ch);     for(i=0;i<n;i++)     {         switch (ch[i]) {             case 65:                 j++;                 break;             case 66:                 k++;                 break;             case 67:                 l++;                 break;             case 68:                 m++;                 break;         }              }//计算A,B,C,D的个数           int temp,z,q;     int count[]={j,k,l,m};      for (z=4; z>=0; z--) {         for(q=0;q<=z;q++)         {             if(count[q+1]<count[q])             {                 temp=count[q];                 count[q]=count[q+1];                 count[q+1]=temp;             }         }              }//排序     int t;     for (t=3; t>=0; t--) {         switch (count[t]) {             case j:                 printf("A的个数：%d",j);                                  break;             case k:                 printf("A的个数：%d",k);                                  break;             case l:                 printf("A的个数：%d",l);                                  break;             case m:                 printf("A的个数：%d",m);                                  break;          }     }          return 0;      }

user: user-6
content: case 后面跟的是 整型常量表达式  这是常识   你这情况 用if

user: user-7
content: 为什么count[t]里面的值是多少决定了count[t]里面的值是A的个数还是B的个数

user: user-7
content: 你这程序看着好奇怪，看不懂是想干什么，你的说明也很乱
user-0 提问: 一段c代码，Runtime Error (SIGSEGV)

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

user: user-2
content: 这是玩动态数组的节奏吗？为啥如此不对味啊。

user: user-3
content: 段错误吧，进行了非法的内存操作。 内存申请：     p = (long*)calloc(upper,sizeof(long));        upper个long元素  赋值操作         for(j = i; i*j <= upper; j++)                 p[i*j] = 1;         p[upper]  是p的第upper+1 个元素了

user: user-0
content: 不管用啊？？

user: user-0
content: 不对，改了还是一样的错。 我申请了upper+1个long,仍然是这样的提示。 Runtime Error (SIGSEGV)

user: user-4
content: 嗯嗯,,是的,upper越界了,,,我试过了,,,除了这个错误以外,,其他的没问题 ;;;;;  for(j = i; i*j <= upper; j++)                 p[i*j] = 1;     for(n = lower; n <= upper; n++)      {         i = n;         flag1 = 1;         flag2 = 0; ....................
user-0 提问: 用float就出现warning，换成double就没事

回复:
user: user-0
content: 引用 6 楼 zmlovelx 的回复:类型提升了。。。。抱歉啊！结贴的时候，电脑页面上还没显示你回复的帖子。没给你分配到分数。

user: user-1
content: 类型提升了。。。。

user: user-0
content: 引用 1 楼 brookmill 的回复:2.3这个常数对编译器来说是作为double的2.3就一位小数，为什么float都表示不了呢？

user: user-2
content: 浮点数 默认的是  double的， 如2.3. 若想指定为 float，请加后缀 f 或F，如  2.3f

user: user-3
content: 编译器认为把一个double赋值给float损失了精度

user: user-4
content: float f=2.3f;

user: user-3
content: 2.3这个常数对编译器来说是作为double的

user: user-3
content: 引用 5 楼 call_from_dream 的回复:2.3就一位小数，为什么float都表示不了呢？ 1. 这不是够不够表示的问题。对于浮点数常数，编译器默认的就是double，即使是2.0，除非后面加f  2. 就一位小数那是十进制，不要忘了计算机用的是二进制。0.5、0.25、0.125这样的才能精确表示，2.3好像是不行。浮点数我也不懂，做了这么多项目从来没用过。楼主要是有兴趣可以自己google，或者直接看IEEE754，不过我觉得没必要，除非有大把时间而且一定要刨根问底
user-0 提问: 求助！

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:# include <stdio.h> int main(void) { int i; int a[5]={1,2,3,4,5};  for(i=0;i<5;++i) printf("a[%d]=%d\n",i, a[i]);  return 0; }  是我输错了，不好意思，你的代码是正确的，输出结果也没错。

user: user-0
content: 谢谢，虽然输出结果不完全符合，但还是提示了我问题出在哪里。

user: user-1
content: # include <stdio.h> int main(void) { int i; int a[5]={1,2,3,4,5};  for(i=0;i<5;++i) printf("a[%d]=%d\n",i, a[i]);  return 0; }
user-0 提问: 都过来看看！

回复:
user: user-1
content: float  输出时的精准度问题。 printf("sn=%.Nlf\n",sn);    // N为你需要的精准度

user: user-2
content: 引用 7 楼 u012611445 的回复: 这样的精度也不够，有木有其他的办法自动获取它的精度！ sn=1+1/1!+1/2+1/3! +1/4!+1/5!+.```````+1/n!这个式子本身n越大结果改变量也就越小，到n=33时15位有效数字就和n=32时的一样了，而double型也只能显示16位有效数字所以就只能到此了。要是想得到n>32的精确值，用string方法处理。你可以在网上了解下。

user: user-0
content: 这样的精度也不够，有木有其他的办法自动获取它的精度！

user: user-0
content: 这样的输出格式会报错！

user: user-2
content: int  n=0;      float  sn=1;       int  X;        printf("请输入阶成的次数:");       scanf("%d",&X);       for(n=1;n<=X;n++)      {                   sn=sn+1/fun(n);       }       printf("sn=%.15f\n",sn);               return 0;    } double fun(int n)   {      if(n==1)            return 1;        else            return n*fun(n-1);    } vc6.0通过

user: user-2
content: 是输出格式的问题，%f不指定字段宽度，只输出6位小数 %.n  加.n后输出n位小数

user: user-3
content: #include <stdio.h>   double fun(int n)  {      if(n==1)            return 1;        else            return n*fun(n-1);  }  int main(void) {       int  n=0;      double  sn=1.000000000000000;       int  X;        printf("请输入阶成的次数:");       scanf("%d",&X);       for(n=1;n<=X;n++)      {                  sn=sn+1/fun(n);       }       printf("sn=%.15lf\n",sn);              return 0; }

user: user-3
content: 低手发个言：你那个sn精度不够啊，默认就是六位。
user-0 提问: 关于C开源WebCrawler如何使用

回复:
user: user-0
content: 自己解决了，其实运行后好好看usage 然后按照usage分别写入参数即可。不用去文件里面加log。

user: user-0
content: 谢谢楼上的提醒，今晚回家尝试。

user: user-0
content: 引用 2 楼 user-1 的回复:自己往代码中加log信息。  不会用。先放一下了

user: user-1
content: 自己往代码中加log信息。

user: user-0
content: 来个人看看吧， 谢谢！
user-0 提问: 未初始化字符数组字符内容为“FFFFCC”？

回复:
user: user-1
content: 看写编译器的人当时怎么想的。。。。

user: user-0
content: 引用 6 楼 taodm 的回复:1你再认真数数几个F 2 把什么东西按16进制输出？ [quote=引用 4 楼 u013491662 的回复:] [quote=引用 1 楼 taodm 的回复:] 那个，难道需要建议你去先看下眼科？ 你知道那个%X是干什么的么？ 难道不是"按16进制输出"的意思吗？[/quote][/quote]

user: user-2
content: 1你再认真数数几个F 2 把什么东西按16进制输出？ 引用 4 楼 u013491662 的回复:[quote=引用 1 楼 taodm 的回复:] 那个，难道需要建议你去先看下眼科？ 你知道那个%X是干什么的么？ 难道不是"按16进制输出"的意思吗？[/quote]

user: user-3
content: printf("%X\n", c[0]);   -->   printf("%hhX\n", c[0]);

user: user-0
content: 引用 1 楼 taodm 的回复:那个，难道需要建议你去先看下眼科？ 你知道那个%X是干什么的么？ 难道不是"按16进制输出"的意思吗？

user: user-4
content: 编译器的原因。。。 用gcc编译输出0

user: user-5
content: 你是使用VC的吧 VC将未初始化的内存在debug状态下设置成0xCC,

user: user-2
content: 那个，难道需要建议你去先看下眼科？ 你知道那个%X是干什么的么？
user-0 提问: c 的strlen问题

回复:
user: user-1
content: scanf("%s",a); 用这个函数实施fgets函数， stdin 代表键盘

user: user-2
content: 引用 6 楼 YakultBenZuo 的回复:引用 3 楼 zdl1995 的回复:i, j,k,n,m都没有初始化为0不是默认为零的嘛  你单步调试下，不进行初始化查看i等值是多少。  这些值在栈中给他们分配一段内存。 这段内存有可能已经被操作或者写入了一些数据，在初始化的时候并不会把他们清为0

user: user-0
content: 引用 3 楼 zdl1995 的回复:i, j,k,n,m都没有初始化为0不是默认为零的嘛

user: user-0
content: 引用 2 楼 zxh707wk 的回复: for (int i=0; i<l; i++) 哪儿错了啊？

user: user-3
content: 你在用这些变量的时候没有让他们的初值为0

user: user-4
content: 没有结束符～

user: user-5
content: i, j,k,n,m都没有初始化为0

user: user-3
content: for (int i=0; i<l; i++)

user: user-0
content: 求解释啊，，，，黑马训练营的题目- -不会做
user-0 提问: 调用xmlparsefile（）函数出现段错误

回复:
user: user-1
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-2
content: 看文档 说明

user: user-3
content: 调用函数出问题了，先检查自己的参数是否有问题

user: user-4
content: 与xmlparsefile自身无关，检查你自己的逻辑。

user: user-5
content: xmlrpc?
user-0 提问: 两句代码没明白作用

回复:
user: user-0
content: 有道理！  引用 1 楼 user-1 的回复:保证out_buf是在16字节对齐的边界上。 猜测这代码与特定的硬件有关，某些DMA引擎、收发数据引擎有类似的对齐要求。

user: user-1
content: 保证out_buf是在16字节对齐的边界上。 猜测这代码与特定的硬件有关，某些DMA引擎、收发数据引擎有类似的对齐要求。
user-0 提问: STM8S怎么像51单片机一样对寄存器的位操作？

回复:
user: user-1
content: _Bool CS	@PB_ODR:3;		// PB.3	lcd/cs output, active low _Bool DC	@PB_ODR:2;		// PB.2	lcd/dc output, data/command _Bool SDIN	@PB_ODR:1;		// PB.1	lcd/sdin output _Bool SCLK	@PB_ODR:0;		// PB.0	lcd/sclk output   void zLED_WrCmd(u8 dat) { 	u8 i;  	DC = 0;						// Dat1Cmd0	= 0 	CS = 0; 	for(i=0; i<8; i++)			// loop	8 bits 	{ 		dat	<<=	1;				// c << shift left 		if(carry())				// speed up 			SDIN = 1; 		else 			SDIN = 0; 		SCLK = 1;				// sclk	out 		SCLK = 0;				// 	} 	CS = 1; }

user: user-1
content: 使用_Bool:  _Bool CS	@PB_ODR:3;		// PB.3	lcd/cs output, active low _Bool DC	@PB_ODR:2;		// PB.2	lcd/dc output, data/command _Bool SDIN	@PB_ODR:1;		// PB.1	lcd/sdin output _Bool SCLK	@PB_ODR:0;		// PB.0	lcd/sclk output   void zLED_WrCmd(u8 dat) { 	u8 i;  	DC = 0;						// Dat1Cmd0	= 0 	CS = 0; 	for(i=0; i<8; i++)			// loop	8 bits 	{ 		dat	<<=	1;				// c << shift left 		if(carry())				// speed up 			SDIN = 1; 		else 			SDIN = 0; 		SCLK = 1;				// sclk	out 		SCLK = 0;				// 	} 	CS = 1; }

user: user-2
content: IE|=0x84;
user-0 提问: 跨平台C语言开发

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:认为跨平台一定比不跨平台好，就象认为双性恋一定比异性恋好一样！看需求吧，合适就是最好的

user: user-2
content: 引用 4 楼 yangyunzhao 的回复:lua、zlib……，本身不是跨平台的吗？  个人觉得跨平台在开发阶段很方便，我习惯在vs下面调逻辑，不过运行的时候就没有多大用处了，因为基本都是运行在linux下面的 lua能在Apple II或DOS 6.22或CP/M或任天堂红白机上运行吗？

user: user-3
content: 引用 1 楼 zhao4zhong1 的回复:认为跨平台一定比不跨平台好，就象认为双性恋一定比异性恋好一样！ 现在平台多啊，难道给每个平台都写一份？

user: user-4
content: 怎么说比较好呢！！！跨平台的话，就是在一个情况下：公司人力不足或者公司不愿意投入。。。那么你使用跨平台好点。。 如果你公司人够得话，建议还是不要跨平台，因为编译器的问题，在不同平台上编译出来的代码的执行效率会有很大的不同。。。。。。。。。。。

user: user-5
content: 1楼好比喻。。。

user: user-6
content: 觉得跨平台 还是牛逼一些 有点高大上的感觉

user: user-7
content: 额，对跨平台无爱。

user: user-8
content: lua、zlib……，本身不是跨平台的吗？  个人觉得跨平台在开发阶段很方便，我习惯在vs下面调逻辑，不过运行的时候就没有多大用处了，因为基本都是运行在linux下面的

user: user-9
content: 直接写个web应用不就行了吗

user: user-2
content: 认为跨平台一定比不跨平台好，就象认为双性恋一定比异性恋好一样！
user-0 提问: VS2010比codeblocks慢太多啊~ 求帮助啦！

回复:
user: user-1
content: istringstream在vc++和g++性能差挺多的。

user: user-2
content: 引用 6 楼 lotus0713 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 试试每处理比如1000行输出当前行号   你的意思是为了查看处理到什么阶段了是吧？[/quote] 不然你怎么知道是死循环了还是处理速度奇慢？

user: user-3
content: 引用 5 楼 lotus0713 的回复:[quote=引用 4 楼 zxhuser-3 的回复:] 你用的是哪种编译模式？   可以加断点的是debug模式吧？ [/quote]用release模式试试

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:试试每处理比如1000行输出当前行号   你的意思是为了查看处理到什么阶段了是吧？

user: user-0
content: 引用 4 楼 zxhuser-3 的回复:你用的是哪种编译模式？   可以加断点的是debug模式吧？

user: user-3
content: 你用的是哪种编译模式？

user: user-2
content: 试试每处理比如1000行输出当前行号

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:Excel或SQL Server更适合用来干这种事。  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  单步调试和设断点调试我会啊     我在想vs运行这个代码怎么需要这么久   还没有出结果？

user: user-2
content: Excel或SQL Server更适合用来干这种事。  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: fopen遇到的问题

回复:
user: user-1
content: sourceFile.GetBuffer()可能返回wchar_t const*，而不是char const*, 对于Unicode字符集来说

user: user-2
content: 引用 楼主 a13728843352 的回复:看看下面这个代码  	CString strFilter = _T("ALL File (*.*) | *.*|"); 	CFileDialog dlg(FALSE, NULL, NULL, OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this);  	if (dlg.DoModal() == IDOK) 	{ 		CString sourceFile = dlg.GetPathName(); 		//若没有 则添加一个文件后缀。 		if(sourceFile.Find(_T(".ini"))==-1) 			sourceFile += _T(".ini"); 		 		FILE *fp = NULL; 		//打开文件 写数据 		fp = fopen(sourceFile.GetBuffer(),"w+");  		if (NULL == fp) 		{ 			_cprintf("The file doesn't exist!\n"); 			return ; 		} } 	  我想做的是，存到数据到自己实时创建的文件中，现在这个fopen里面，编译通不过，怎么搞啊？ 整体的工程使用Unicode的原因 其他地方的文本你都是_T("xxxxx");，fopen这里也要改，但fopen似乎不支持Unicode，所以fopen这个函数换成_wfopen，或者是用CFile这个类，来读取文件吧。或者把工程设置成不用Unicode的也可以。

user: user-0
content: 第二条问题，我查到了。是因为使用了unicode, 所以存储的时候 是CString.Getlength().的两倍。

user: user-0
content: 整个模块的带按摩如如下  	CString strFilter = _T("ALL File (*.*) | *.*|"); 	CFileDialog dlg(FALSE, NULL, NULL, OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this);  	if (dlg.DoModal() == IDOK) 	{ 		CString sourceFile = dlg.GetPathName(); 		//若没有 则添加一个文件后缀。 		if(sourceFile.Find(_T(".bin")) == -1) 			sourceFile += _T(".bin");  		AfxMessageBox(sourceFile);  		char fileName[128];  		memcpy(fileName,sourceFile,sourceFile.GetLength()); 		 		FILE *fp = NULL; 		//写入数据 		fp = fopen(fileName,"w+");//w+ 是假如重名了。直接覆盖。  		if (NULL == fp) 		{ 			_cprintf("The file doesn't exist!\n"); 			return ; 		} 		//先fwrite 进去宽高  		CString strWideAndHeight; 		strWideAndHeight.Format(_T("%d,%d"),m_HoleWide * 2,m_HoleHeight * 2); 		AfxMessageBox(strWideAndHeight);  		fwrite(strWideAndHeight,strWideAndHeight.GetLength(),1,fp);  		fprintf(fp,"\r\n");  		CString strRectArgument;  		for (int i = 0 ;  i < 4 ; i++) 		{ 			strRectArgument.Format(_T("%d,%d,%d,%d"),m_IntLeft[i],m_IntTop[i],m_IntWidth[i],m_IntHeight[i]); 			AfxMessageBox(strRectArgument); 			fwrite(strRectArgument,strRectArgument.GetLength(),1,fp); 			if(i != 3) 				fprintf(fp,"\r\n"); 		}  		CString strSucceed; 		strSucceed.Format(_T("保存成功！")); 		AfxMessageBox(strSucceed);  		fclose(fp); 		fp = NULL; 	}   但是结果： 1，得到的文件名和输入的不一样 2，我原有数据，按照我的格式应该是这样的       1280,720       0,80,320,260       320,80,640,260       0,0,0,0       0,0,0,0  但是上面的代码跑完整个部分，得到结果如下   帮忙看看。。
user-0 提问: 如图提示我未定义，怎么解决比较好？

回复:
user: user-1
content: 看样子我也疏忽了~~~ 你看看你的宏用法存在问题哦~~~ 你的用法中  #ifdef xxx ... #elif  ... #endif  你其中"#elif"没有设置条件....那么即使MAX_PORTS 不等于12时，也不会走进这个逻辑的。  根据你的需求去进行改变： (1) 添加 elif条件 (2) 将elif 改为else #ifdef xxx ... #else  ... #endif

user: user-0
content: 其实我就是想实现，当cfgTotalport（）这个函数的返回值为13时初始化portindex为12个，返回值为其他时portindex为24个。

user: user-0
content: 引用 2 楼 CJF_iceKing 的回复:第一你这局部信息，谁也不知道你的调用方式，在另一个cpp调用，又或者说谁知道你这个文件上面是否还有条件宏呢？  信息再多一点.....  没有了，MAX_PORTS 这个宏调用的函数是库里的，这里没有问题，可以调用。  portindex就是在这个文件下面的函数里调用的，编译的时候提示portindex未定义。

user: user-1
content: 第一你这局部信息，谁也不知道你的调用方式，在另一个cpp调用，又或者说谁知道你这个文件上面是否还有条件宏呢？  信息再多一点.....

user: user-0
content: 调用portINdex的时候提示未定义，怎么解决好一点，我估计是因为宏是预编译阶段就解释了的，而我的宏又有函数调用，所以提示未定义。
user-0 提问: 杨氏矩阵

回复:
user: user-1
content: 仅供参考//定义一个m行n列的数组，比如3行4列 // 1  2  4  7 // 3  5  8 10 // 6  9 11 12 #include <stdio.h> #include <conio.h> int a[20][20]; int m,n; int x,y; int d; void find_first_0(int *fx,int *fy) {     int i,j;      *fx=0;     *fy=0;     for (i=0;i<m;i++) {         for (j=0;j<n;j++) {             if (0==a[i][j]) {                 *fx=j;                 *fy=i;                 return;             }         }     } } void main() {     printf("Input m(1..20),n(1..20):");     scanf("%d,%d",&m,&n);     if (m<1 || 20<m || n<1 || 20<n) return;     for (y=0;y<m;y++) for (x=0;x<n;x++) a[y][x]=0;     d=1;     x=0;     y=0;     while (1) {         a[y][x]=d;         d++;         while (1) {             x--;             if (x<0) break;             y++;             if (y>=m) break;             a[y][x]=d;             d++;         }         find_first_0(&x,&y);         if (0==x && 0==y) break;     }     for (y=0;y<m;y++) {         for (x=0;x<n;x++) {             printf("%2d ",a[y][x]);         }         printf("\n");     }     getch(); }

user: user-2
content: 自己网上找哈资料  应该有  很多笔试面试的资料书上也都讲过这样的例子 随便参考下  就能搞出来的http://blog.csdn.net/huangxy10/article/details/8017765
user-0 提问: 路由功能开发

回复:
user: user-1
content: 有wifidog实现。

user: user-2
content: 如果想深入研究 可以看一下 openwrt

user: user-3
content: 一般是重定向功能，指定http get的时候重定向一下。对于其他的数据请求不能重定向

user: user-2
content: 想要做 portal 认证？   现在很多手机在连接上 wlan 后能够跳转自定页面是应该 有的手机连接上无线后有 dns 请求去访问某些网站， 被 ap 或者无线路由器 重定向回来了， 具体处理比较复杂， 可以自己做， 也可以参考开源的 wifidog  , 也可以了解一下 http 的 301
user-0 提问: 程序跑着弹出Killed 异常退出

回复:
user: user-1
content: 被系统或者别人kill掉了?

user: user-1
content: ooM ? 内存不足?

user: user-0
content: 客户端放到另一台机器上。 对于  IPv4    //addr.sin_addr.s_addr = INADDR_ANY;   addr.sin_addr.s_addr = inet_addr("10.8.1.83"); 两种都可以通。  但对于IPv6  上面三种都不通了。。。。

user: user-0
content: IPv6客户端。。。。 addr.sin6=in6addr_any;  可以通！！  inet_pton(AF_INET6, "fe80::20c:29ff:fec4:8be0", &addr.sin6_addr);    就是connect 失败  inet_pton(AF_INET6, "::1", &addr.sin6_addr);   这个也可以通。  服务端和客户端在通一台机器上！        //addr.sin6_addr = in6addr_any;            //-------------------------1     inet_pton(AF_INET6, "fe80::20c:29ff:fec4:8be0", &addr.sin6_addr);  //--------------------------------2     //inet_pton(AF_INET6, "::1", &addr.sin6_addr);   //------------------------------------3       char ip6[128] = {0};     inet_ntop(AF_INET6, &addr.sin6_addr, ip6, 128);     printf("%s\n", ip6);      if(connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1)     {         printf("connect fail!\n");     }

user: user-2
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令
user-0 提问: c语言：对于给定的 n * n 个随机数，从中找出 n 个最小的数，且这 n 个数来自不同的行和列

回复:
user: user-1
content: 引用 9 楼 zhou09039051698 的回复:这是最小费用最大流最水的题了吧。。。。。 正解

user: user-2
content: 既要不同行，又要不同列，这是一个方阵，要是两个相对较小的数在同一行或同一列剧矛盾了

user: user-3
content: 这是最小费用最大流最水的题了吧。。。。。

user: user-4
content: 说个朴素的方法： 定义个结构体  struct ValueInfo { 	int value;  //值 	int row;     //行 	int col;      //列 };  分配n*n的数组，ValueInfo* pValueInfo = new ValueInfo[n * n]; 把n * n 的数添充到pValueInfo中 对pValueInfo按值大小，由小到大排序 遍历pValueInfo找到前n个数，其中列值和行值均不相等

user: user-1
content: 试着写了一下 大概20行代码 搜索的时候剪枝就可以了 release运行n=20的情况 全是10000以内的随机数需要12s  代码是C++的 就不发了  我还留着这个当面试题用呢

user: user-5
content: 找出最小的n个数和要求在不同列和行，有可能出现矛盾，不如第一个行有最小的2个数，怎么办？ 题目有问题。。。。。 而且你这个是你自己的论文吧，论文最好自己写，不行就花钱请大神吧

user: user-6
content: 再加上一篇答辩的PPT就更好了

user: user-7
content: n*n的方阵 （1）找出最小的n个数（2）要求是不同行不同列； 这两个要求有想违背的意思，需求不明确

user: user-8
content: 再让人给你写篇论文吧

user: user-9
content: 你的意思是将n*n数排序，取最小的前n个数？
user-0 提问: 如何在这种情况下判断是浮点数还是整数？

回复:
user: user-0
content: 谢谢大家

user: user-1
content: if (fabs(floor((double)a)-(double)a)<0.000001)

user: user-2
content: 引用 2 楼 zilaishuichina 的回复:再写一个 fun(int a);  lz你是c 还是 c++  C++有重载  C的话没有重载， 你只能把类型一起传进去 enum TYPE {     enum_int = 1,     enum_float,     enum_others, }; void fun(TYPE valuetype, void *valuebuf) {     switch (valuetype)     {     case enum_int:         int value = *(int *)valuebuf;         break;     case enum_float:         float value = *(float *)valuebuf;         break;     } }

user: user-2
content: 再写一个 fun(int a);

user: user-3
content: 没看懂你意思 函数参数类型是浮点，你怎么传整型进去？ 还是说你传进去的都是浮点，只不过想判断这个浮点是不是刚好是整数？

user: user-4
content: fun(float a);传的本来是原参数的一份拷贝，能从拷贝判断出原数据的类型？真高端大气

user: user-5
content: 不过我还是建议你去www.clang.cc 进行学习    C语言学习、进阶和训练比赛的综合性平台。提供C语言入门教程，题库和在线评测等等功能。非常适合ACM入门训练，C语言新人进阶等等。

user: user-6
content: fun(float a); if((int)(a) != a)     {         。。。     }    通过上述代码是无法判断 a的类型，a 就是单精度浮点型。在使用整型数据调用 fun 将被转换为浮点型。  解决方法，楼上的已经提到了。

user: user-7
content: 给定一段内存，是无法判断他的数据类型的，你可以当做任何数据类型来解析  类型是编译期间的概念，利用函数重载、模板都可以做到。

user: user-8
content: 引用 8 楼 czarten 的回复:我看了半天， 为什么0x00,0x00,0x00,0x41是8.0？ 搜 IEEE 754

user: user-3
content: 我看了半天， 为什么0x00,0x00,0x00,0x41是8.0？

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:if (fabs(floor((double)a)-(double)a)<0.000001) 对 unsigned char data[4]={0x00,0x00,0x00,0x41}; f = *(float *)data; 没效果。我之前也是这个思路。不过今天碰到这个数据，发现有bug。

user: user-0
content: 引用 3 楼 zilaishuichina 的回复:[quote=引用 2 楼 zilaishuichina 的回复:] 再写一个 fun(int a);  lz你是c 还是 c++  C++有重载  C的话没有重载， 你只能把类型一起传进去 enum TYPE {     enum_int = 1,     enum_float,     enum_others, }; void fun(TYPE valuetype, void *valuebuf) {     switch (valuetype)     {     case enum_int:         int value = *(int *)valuebuf;         break;     case enum_float:         float value = *(float *)valuebuf;         break;     } }[/quote] 我就是这样解决的。

user: user-0
content: 引用 1 楼 czarten 的回复:没看懂你意思 函数参数类型是浮点，你怎么传整型进去？ 还是说你传进去的都是浮点，只不过想判断这个浮点是不是刚好是整数？ 是的，我是参数设置的是浮点。不过传输前实参可能是浮点或者整形。我就想判断。
user-0 提问: 求助，First-chance exception in bitcount2.exe: 0xC0000005: Access Violation.

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:首先，"success"被编译器保存在常量区，不允许修改。 char *str = "success"; 这里的str是个指针，直接指向了常量区，所以企图用*str++ =修改的时候就挂了 char str[] = "success";  这里的str，编译器在栈上建立一个数组，然后把常量区的字符串复制进去，所以修改*str的时候就是修改栈上的局部变量，是允许的。  十分感谢，这下会牢牢记住了。 “ANSI C 不允许修改字符串常量，或者提供编译时选项。在实践中，请尽量避免这样做。如果你需要修改字符串，请把它存储在数组中“ 再次感谢user-1，终于明白了。

user: user-1
content: 首先，"success"被编译器保存在常量区，不允许修改。 char *str = "success"; 这里的str是个指针，直接指向了常量区，所以企图用*str++ =修改的时候就挂了 char str[] = "success";  这里的str，编译器在栈上建立一个数组，然后把常量区的字符串复制进去，所以修改*str的时候就是修改栈上的局部变量，是允许的。

user: user-1
content: main里面的这一行 char *str = "success"; 改成 char str[] = "success";

user: user-0
content: 自己顶，求大神帮助！
user-0 提问: 问个基础问题

回复:
user: user-0
content: 刚刚看了传值和传址  这下好像懂了。 在总结下是不是 使用了&之后传递的是原件，可以拿来修改变量，比如插入 而*传递的是附件，就拿来输出，不改变原件就行。 谢谢啊

user: user-1
content: 引用 5 楼 u011131596 的回复:感谢你的解释  那void Arrayinput(int* &p,int n)为什么就对了  加了这个&，传递的就是引用了，也就是传进函数里的p是原件不是副本了，自然也就没有上面的问题

user: user-0
content: 感谢你的解释  那void Arrayinput(int* &p,int n)为什么就对了

user: user-1
content: 引用 3 楼 u011131596 的回复:你说的p的副本我知道 我想知道 用这句话void Arrayinput(int* p,int n) 程序为什么会error  正因为p是副本，所以 p=new int[n];这句话并不影响main里面的p，也就是说，main里面的p一直是一个野指针，没有被赋值指向任何东西过，所以后面Arraydisp(int p[],int n)要去显示p指向的内容，当然会出错

user: user-0
content: 你说的p的副本我知道 我想知道 用这句话void Arrayinput(int* p,int n) 程序为什么会error

user: user-2
content: 引用Arrayinput(p,n); Arrayinput修改的是p的副本， 对于main内的p没有影响。   参数传递是值传递。

user: user-0
content: 我第一次问问题求解答
user-0 提问: 图像的四叉树分割C语言实现

回复:
user: user-1
content: 引用 2 楼 u011643312 的回复:已经写出来了 建议在此贴出关键代码或上传到自己的资源提供下载以提携后辈。

user: user-0
content: 已经写出来了

user: user-1
content: http://image.baidu.com/i?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%9B%9B%E5%8F%89%E6%A0%91
user-0 提问: C中按字节读文件读不出数据

回复:
user: user-0
content: 试一下去  用C++把这个解决了  谢谢

user: user-1
content: 试改如下:   FILE *fp,*fw;    int i = 0,j=0;    char id[32+1]; //改 char id[32];   unsigned int pid;    short type;    long tm;    char ip[257+1]; //改 char ip[257];    fp = fopen("wtmpx","rb");    fw = fopen("my","wb");     if (fp==NULL || fw==NULL)    {      cout<<"打开文件失败"<<endl;      exit(-1);    }     id[32] = 0; //加 字符串结尾   ip[257] = 0; //加 字符串结尾   while(1)    {      memset(id,0,sizeof(char)*32);       i=fread(id,32,1,fp);      if(i<=0)      {        break;      }      fseek(fp,36,SEEK_CUR);      memset(&pid,0,sizeof(unsigned int));      fread(&pid,4,1,fp);      memset(&type,0,sizeof(short));      fread(&type,2,1,fp);      fseek(fp,6,SEEK_CUR);      memset(&tm,0,sizeof(long));      fread(&tm,4,1,fp);      fseek(fp,30,SEEK_CUR);      memset(ip,0,sizeof(char)*257);      fread(ip,257,1,fp);        fseek(fp,1,SEEK_CUR);      printf("%s %d %d %ld %s\n",id,pid,type,tm,ip);        fprintf(fw,"%s %d %d %ld %s\n",id,pid,type,tm,ip);      cout<<"文件读取保存成功"<<endl;        //移出循环 fclose(fw);      //移出循环 fclose(fp);   }   fclose(fw);    fclose(fp);

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:[quote=引用 2 楼 peaktravel 的回复:] 为什么需要改SEEK_SET，SEEK_CUR就是当前位置，我没必要去增加偏移量吧？ 你SEEK_CUR后调用ftell看看返回值指出你当前偏移量到底是多少。[/quote]  把那段代码放在while外面可以读欸     试试  谢谢

user: user-2
content: 引用 2 楼 peaktravel 的回复:为什么需要改SEEK_SET，SEEK_CUR就是当前位置，我没必要去增加偏移量吧？ 你SEEK_CUR后调用ftell看看返回值指出你当前偏移量到底是多少。

user: user-0
content: 为什么需要改SEEK_SET，SEEK_CUR就是当前位置，我没必要去增加偏移量吧？

user: user-2
content: 请将所有的SEEK_CUR改为SEEK_SET并相应修改偏移量的值。 判断每次调用fseek的返回值。
user-0 提问: 小弟C语言课程设计遇阻，求大神给力助攻，跪谢！！！！！！！ 

回复:
user: user-1
content: 哈哈，图书管理系统。之前也写过。工程实践来着

user: user-2
content: 不知道你哪里遇到阻碍，你先得把你哪不会，或者哪出问题说清楚。

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-4
content: 我给你提供一个思路，你就自定义一个数据库文件Student.dat,用文件形式对其进行操作，
user-0 提问: C 语言中 #define CODE_P 用法

回复:
user: user-0
content: 还不是太懂啊！呵呵 太菜了

user: user-1
content: 问题不够清楚啊

user: user-2
content: 就是在特定#if条件下让CODE_P变为空。  编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E
user-0 提问: 2+2=5？

回复:
user: user-1
content: 画画内存图就知道为什么了

user: user-2
content: printf("%d + %s = %s\n", a, b, a+b); 输出的是__func_version__

user: user-3
content: 这个就是去除b加2地址的值，就看数据在寄存器中怎么存储的了 如下： 我的64位下面是： (gdb) p &b $3 = (char (*)[2]) 0x7fffffffe470             b的地址是这个 (gdb) p &__func_version__ $4 = (char (*)[2]) 0x7fffffffe480               数据5的地址是这个 (gdb) p b+a $5 = 0x7fffffffe472 " 14"                           b+a的地址是这个，现在这个地址中存储的数据是14。 所以b+a就是14了。

user: user-4
content: 理解和讨论之前请先学会如何观察！

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对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-5
content: 引用 7 楼 u013163178 的回复:理解了，原来是是利用栈的生长方向和函数压栈来实现的。又学习了 理解了就OK^_^

user: user-5
content: 16位编译器时代的东西，在32、64位时代玩会有些问题的。这么落伍的东西来了也不知道改一下。。。 这是原理分析图：

user: user-0
content: 引用 6 楼 starytx 的回复:这个问题有意思的很啊，闲的蛋疼了可以研究一下你在嘲讽我，我已经知道是怎么实现的了，又长姿势了

user: user-0
content: 理解了，原来是是利用栈的生长方向和函数压栈来实现的。又学习了

user: user-6
content: 这个问题有意思的很啊，闲的蛋疼了可以研究一下

user: user-7
content: 这个得编译器的，VC6就显示的不行。 VC6显示的是    烫5

user: user-8
content: 我觉得，没准在某些系统或编译器有可能不是5，看栈内存怎么分配了

user: user-8
content: 引用 1 楼 longburulin 的回复:有意思么 一个是指针 一个是数值，加起来也就是地址的值偏移了几位了 确实没什么意思，还不如直接这样更爽快 printf("%s", "2+2=5");

user: user-8
content: 这里的b和a+b都是用%s作为字符串打出来的。b的内容是2，而a+b也就是b+2这个指针想必是指向了之前的__func_version__，所以就是5了

user: user-9
content: 有意思么 一个是指针 一个是数值，加起来也就是地址的值偏移了几位了

user: user-10
content: 加油吧，楼主~~~  推荐一本书：《程序员的自我修养----链接装载与库》

user: user-11
content: printf("%d + %s = %s\n", a, b, a+b);  想到了大学时一个C语言老师出的考题

user: user-12
content: 好吧你们都没看到我的帖子啊： http://blog.csdn.net/mydo/article/details/34422733

user: user-13
content: 玩的好高级~，不过对一般做项目的人来说，不能写这种代码

user: user-14
content: 研究一般都有两个以上的方向， 大致上： 一个是顺的，研究事情如何做，如何做正确，如何做更好。 一个逆的，研究如何做会错误，会有什么样的错误，事情怎么能够做不出来。 有时候，需要二者结合，才能够把事情做好。。