Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 想用define来定义一个函数，该如何定义？

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:#define rt_WM_GetDialogItem return(WM_GetDialogItem(WM_HWIN hItem, int id))  感谢赵老师

user: user-0
content: 引用 4 楼 todo9351 的回复:[quote=引用 1 楼 biao1990 的回复:] #define  FUN(a,b)  return WM_GetDialogItem(a,b)   这样吗？  不能这样 define  #define FUNC(a, b)   WM_GetDialogItem(a,b)  这样就可以了[/quote]  感谢。有点不熟练

user: user-1
content: 不是你那样直接return的，需要在define的函数名后面加上函数内的操作啊……不然要这个函数宏做什么用呢？你说对不

user: user-2
content: 这不是把大炮当成鸟枪用了吗？

user: user-3
content: 引用 1 楼 biao1990 的回复:#define  FUN(a,b)  return WM_GetDialogItem(a,b)   这样吗？  不能这样 define  #define FUNC(a, b)   WM_GetDialogItem(a,b)  这样就可以了

user: user-4
content: #define rt_WM_GetDialogItem return(WM_GetDialogItem(WM_HWIN hItem, int id))

user: user-0
content: #define  FUN(a,b)  return WM_GetDialogItem(a,b)   这样吗？
user-0 提问: 新手问个很小白的问题~

回复:
user: user-1
content: 请判断每个函数的返回值。 请关闭防火墙、UAC、杀毒软件 请用Administrator用户登录 ……

user: user-2
content: 权限不够吧，根据编译环境 + UAC设置 到百度上去搜

user: user-3
content: 因为会被自动映射到另一个路径. 看完这个,你应该知道 http://blog.csdn.net/aastoneaa/article/details/7885634

user: user-0
content: 自己顶一下.....有知道的吗？拜托给新人讲讲........

user: user-0
content: 引用 1 楼 fly_dragon_fly 的回复:微软错了 Mircosoft  好吧，，，改过来以后为什么开机成功启动了而注册表里仍然没有？

user: user-2
content: 微软错了 Mircosoft
user-0 提问: linux  下用 C  修改IP配置文件 写的时候文件内容丢失

回复:
user: user-1
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。
user-0 提问: VS 2013 无法启动.dll

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

user: user-2
content: 连接库的路径设置错

user: user-3
content: 我也遇到这状况
user-0 提问: 求指导数组越界的问题

回复:
user: user-1
content: c/c++语言本身没有提供这种功能，但是你完全可以自己封装一个库

user: user-2
content: 判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #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-3
content: 用一个变量保存已经输入个数. 达到超过10个就报错.  注意.  系统是不会主动给你报错的, 这不同与Java等更高级的语言

user: user-4
content: C语言不行，　java倒是可以抛出异常。

user: user-5
content: C语言没有这种规范，除非编译器实现

user: user-6
content: 输入时只允许输入10个数字即可。

user: user-7
content: 要对输入得到的数组做一个长度统计,然后与你预期想输入的数组大小进行比较。

user: user-8
content: 没太理解楼主的意思. 如果知道数组的大小，用循环输入的话应该不会有越界的问题（除非代码写错了）。  如果要判断越界，可以数组的地址进行判断。

user: user-9
content: 个人感觉： 应该要对输入得到的数组做一个长度统计。 然后与你预期想输入的数组大小进行比较。  不知道其他大神有没有更好的想法。
user-0 提问: DWORD_PTR是什么类型?

回复:
user: user-0
content: DWORD_PTR是用于将指针类型强制转换为DWORD的类型来进行指针的算术

user: user-0
content: 引用 3 楼 zhangxiangDavaid 的回复:word是整型 一般情况下， word是两个字节大小 dword是double word的缩写，那就是4个字节的大小 DWORD_PTR指的是dword类型的指针 错,DWORD_PTR是unsigned long类型,不是什么指针

user: user-1
content: word是整型 一般情况下， word是两个字节大小 dword是double word的缩写，那就是4个字节的大小 DWORD_PTR指的是dword类型的指针

user: user-0
content: used for pointer precision怎么翻译?

user: user-2
content: 有啥不懂的啊。。认真看。用词典辅助
user-0 提问: 关于 基于身份的加密算法 stanford ibe-0.7.2调试问题 

回复:
user: user-1
content: 引用 2 楼 user-2 的回复: 注意体会上面的命令写法，这是在Windows下运行的命令拼写，<和>都是命令的组成部分，各字串之间有空格。 按照您这方法确实可以加密了，但怎么解密呢？而且它的私钥是否一定要通过邮件发送？

user: user-2
content: 注意体会上面的命令写法，这是在Windows下运行的命令拼写，<和>都是命令的组成部分，各字串之间有空格。

user: user-2
user-0 提问: 关于windows基指针类型的疑问

回复:
user: user-1
content: LPBYTE pX; TCHAR __based (pInFile) *pIn; //pIn是(TCHAR __based (pInFile)*)类型 pIn = (TCHAR __based (pInFile)*) *(DWORD *)pX;//将pX强转为(DWORD *)类型后在取其值，并将取得的值再强转为(TCHAR __based (pInFile)*)类型，最后赋值给pIn
user-0 提问: 信源编码怎么运用到实际

回复:
user: user-0
content: 有没有了解的大神指点一下。。。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 我的意思是霍夫曼编码实现过程中，比如A对应的编码是0010，一般编码实现时是分别将‘0’、‘0’、‘1’、‘0’作为占有八位二进制位的字符放进字符数组中；但是我们实际编码时应该是把它们分别当做一位二进制位来看。前一种编码后就占了4*8=32位二进制位了，而我们实际想要得到的应该是4位二进制位不是么？

user: user-0
content: 引用 1 楼 user-2 的回复:字符数组不就是二进制吗？还要转什么？ 计算机内部什么东西不是二进制呢？？？  估计楼主没有说清问题 我的意思是霍夫曼编码实现过程中，比如A对应的编码是0010，一般编码实现时是分别将‘0’、‘0’、‘1’、‘0’作为占有八位二进制位的字符放进字符数组中；但是我们实际编码时应该是把它们分别当做一位二进制位来看。前一种编码后就占了4*8=32位二进制位了，而我们实际想要得到的应该是4位二进制位不是么？

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

user: user-2
content: 字符数组不就是二进制吗？还要转什么？ 计算机内部什么东西不是二进制呢？？？  估计楼主没有说清问题
user-0 提问: 大家都是怎么设计网络通信的？是层层传递，结果再反向传回？还是走到哪里，想发就发出去？

回复:
user: user-1
content: socket

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:现在有很多已经设计好的应用层协议，基于TCP的DCC协议，短连接的HTTP协议，都可以参考 楼主说的层层传递是什么意思？ 一般都是接收数据--> 解码--> 业务逻辑 --> 编码--> 返回结果  是的，进口和出口在一处

user: user-2
content: 现在有很多已经设计好的应用层协议，基于TCP的DCC协议，短连接的HTTP协议，都可以参考 楼主说的层层传递是什么意思？ 一般都是接收数据--> 解码--> 业务逻辑 --> 编码--> 返回结果
user-0 提问: 控制台输出的内容输入到记事本中

回复:
user: user-1
content: 文件重定向  int main() { 	printf("Hello World"); 	return 0; }  一般情况下，这段代码会打印到控制台上：Hello World 当你在命令行下输入：test.exe > 1.txt       //程序名称可能不一样，你应该懂得相应修改  这个没有任何难度，动下小手，你一定会的

user: user-0
content: 我是初学者，能否给我一些代码实例呢

user: user-1
content: 1. 文件重定向 如有程序：test.exe 在命令行下：test.exe > 1.txt 程序test.exe的输出内容就会到1.txt，并且1.txt不用提前创建  2. 直接使用文件操作

user: user-0
content: 谢谢各位大神！

user: user-2
content: 话说用itoa把数字转换成字符串再fputs真的不累？直接用fprintf就行了，格式用%X，表示输出大写16进制数字

user: user-3
content: 习惯用fprintf输出到文件

user: user-4
content: 你可以学习学习 fputs,fprintf 这类f开头的函数。当然也可以使用输出重定向，就是上面zhangxiangDavaid说的那样。打开控制台，cd 到程序所在目录。然后 test.exe > 1.txt  就可以允许程序test.exe 并将结构输出到文件1.txt 里面了

user: user-0
content: #include<stdio.h> #include<ctype.h> #include<string.h> #pragma warning(disable:4996) int main() { 	char str[100] = { 0 }; 	int i = 0xA23456; 	itoa(i, str, 16);	 	printf("输入要创建文件的名字："); 	char s[100]; 	char s1[100] = ".txt"; 	scanf("%s", &s); 	strcat(s, s1); 	FILE *fp = fopen(s, "w"); 	fputs(str, fp); 	fclose(fp); 	system("pause"); 	return 0; } 上面的代码执行之后，在记事本中显示的字母为什么是小写的啊？
user-0 提问: 请问为什么这个数组定义编译不过了

回复:
user: user-1
content: 引用 8 楼 jiht594 的回复: 	int b = 2; 	int *a = NULL; 	if (b > 0) 		a = new int[5]{ 1,2,3,4,5 }; 	else 		a = new int[5]{ 1,2,3,4,5 };  	//do something 	if (a) 	{ 		delete[] a; 	}  这是个好方法！

user: user-2
content: 引用 12 楼 hanyue03 的回复:局部作用域问题和作用域无关  这里 定义数组 和 使用数组 都是在同一块作用域

user: user-3
content: 局部作用域问题

user: user-4
content: int a【】是局部变量作用与实在在if（）else{}之间。到了for循环就无法调用了

user: user-2
content: #include <stdio.h> int main(void) {         int i;         int b = 2;         int a[][5] ={ {2,3,4,5,6}, {1,2,3,4,5} };         for(i=0;i<sizeof(*a)/sizeof(**a);i++)                 printf("%d ",a[b>0][i]);         putchar('\n'); }

user: user-5
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-6
content: int b = 2; 	int *a = NULL; 	if (b > 0) 		a = new int[5]{ 1,2,3,4,5 }; 	else 		a = new int[5]{ 1,2,3,4,5 };  	//do something 	if (a) 	{ 		delete[] a; 	}

user: user-7
content: 应楼主邀请，我来说几句哈。 首先，if语句有它自己的语法。在if (/* …… */)的后面必须是语句，而不能是声明。楼主放的是声明，这不对哩； 其次，即便这是允许的，那也不行。标准说得明白，选择语句和循环语句本身就是一个块。在块内声明的数组自然具有块作用域，这是不行滴。

user: user-0
content: 引用 3 楼 lin5161678 的回复:if() 后面只能写语句 不能写声明 else 后面只能写语句 不能写声明 那假如我想根据条件的不同定义两个数组，并在后面的程序中使用，要怎么办了？

user: user-0
content: 引用 1 楼 jiht594 的回复:      if (b > 0)                 int a[] = { 1,2,3,4,5 };      else                 int a[] = { 2,3,4,5,6 };   if(){   }和else{   }之外是不能使用a的, 超出作用域 那假如我想根据条件的不同定义两个数组，并在后面的程序中使用，要怎么办了？

user: user-2
content: 引用 1 楼 jiht594 的回复:      if (b > 0)                 int a[] = { 1,2,3,4,5 };      else                 int a[] = { 2,3,4,5,6 };   if(){   }和else{   }之外是不能使用a的, 超出作用域没有复合语句什么事

user: user-1
content: 修改如下：  #include <stdio.h> int main(void) { 	int i;     int b = 2; 	if (b > 0) 	{ 		int a[] = { 1,2,3,4,5 }; 	} 	else 	{ 		int a[] = { 2,3,4,5,6 }; 	} 	//a的作用域被限定在{}内部，在其他地方无法使用，故以下语句有问题     for (i = 0; i<sizeof(a) / sizeof(a[0]); i++) printf("%d ", a[i]);        putchar('\n'); }

user: user-2
content: if() 后面只能写语句 不能写声明 else 后面只能写语句 不能写声明

user: user-8
content: 注意你的数组的作用域啊。它的作用域在if语句里面 在for语句里面肯定报无定义的错误了。  至于前面的两个错误，我不知道为什么。

user: user-6
content: if (b > 0)                 int a[] = { 1,2,3,4,5 };      else                 int a[] = { 2,3,4,5,6 };   if(){   }和else{   }之外是不能使用a的, 超出作用域
user-0 提问: 在C 中  输入包含标点的密文可最后得出的明文没有空格和标点，跪求完善，很急！！！

回复:
user: user-1
content: 稍作修改，问题原因在注释中  #include<stdio.h> char shift(char letter);                                  //字母大小写转变 void main() { 	char ciphertext[200], alphabet[26], password_list[26];  //密文，字母表，密码表 	int statistics[26] = { 0 };                               //字母数量统计 	char x; 	int d, j, q, k, l = 0; 	printf("Please enter the password list:\n"); 	//scanf("%s", &password_list); 	scanf("%s", password_list); 	printf("Please enter the ciphertext:\n"); 	//scanf("%s", &ciphertext);  //输入密文 	scanf("%s", ciphertext); 	for (j = 0; j<200; j++)                                    //将大写字母转换成小写字母 		ciphertext[j] = shift(ciphertext[j]); 	for (q = 0, x = 'a'; q<26; q++, x++)                           //统计每个字母的个数 	{ 		for (j = 0; j<200; j++) 			if (ciphertext[j] == x) 			{ 				statistics[q]++; 				l++;             //l用于统计字母的个数 			} 	} 	for (j = 0; j<26; j++)//将26个字母赋值给b 		alphabet[j] = 'a' + j; 	for (j = 0; j<25; j++)//比较字母个数多少，个数多的排在前面 		for (q = 25; q>j; q--) 			if (statistics[q]>statistics[q - 1])   //从后向前的冒泡排序 			{ 				k = statistics[q]; 				statistics[q] = statistics[q - 1]; 				statistics[q - 1] = k; 				x = alphabet[q]; 				alphabet[q] = alphabet[q - 1]; 				alphabet[q - 1] = x; 			} 	for (k = 0; k<26; k++) 		printf("字母:%c  频率:%f \n", alphabet[k], ((float)statistics[k] / l)); 	for (j = 0; j<l; j++) 	{ 		for (d = 0; d<26; d++) 		{ 			//alphabet里面是字母a-z，没有空格或标点，当然无法打印出空格或标点 			if (ciphertext[j] == alphabet[d]) 			{ 				ciphertext[j] = password_list[d]; 				printf("%c ", ciphertext[j]); 				break; 			} 		} 	}  } char shift(char letter) { 	if (letter >= 'A'&&letter <= 'Z') 		letter = letter + 32; 	return (letter); }   &password_list;与password_list;的数值是一样的，但类型不同，原因参看 http://blog.csdn.net/zhangxiangdavaid/article/details/38085743

user: user-2
content: scanf("%s",&password_list);向一维数组中输入字符串，不能对数组名取地址
user-0 提问: C语言中如何将一个字符串型转为一个enmu的类型

回复:
user: user-1
content: 引用 10 楼 bear234 的回复:用map------------这是唯一的方法 对12个元素map，没准需要的CPU指令条数比strcmp＋表格还多！

user: user-2
content: strcmp+表格

user: user-3
content: 引用 楼主 xinsuixiaofeiyu 的回复:在程序中使用到月份，并且需要对月份做一些四则运算。但输入是按照字符串的形式。，然后就想着把12各月份做成一个枚举类型。然后可以让January与整型1对应起来。但不知道如何将字符串型转为一个枚举类型。或者对于这种情况有什么比较好的解决办法？  enum month{January=1,February,March,April,May,June,July,August,September,October,November,December}; 这样january就是等于1，feb = 2依次类推

user: user-3
content: enum month{January=1,February,March,April,May,June,July,August,September,October,November,December}; 这样january就是等于1，feb = 2依次类推

user: user-1
content: 自己写一个函数，逐一strcmp比较。

user: user-4
content: 用map------------这是唯一的方法

user: user-5
content: 引用 2 楼 wy_ei 的回复:你不能将字符串转化为枚举类型，你可以采用C++里面的map数据类型。如果是C的话可以写一个辅助函数，对传人的12个月份的字符串返回对应的数字。+1，不能直接转换

user: user-0
content: 引用 2 楼 wy_ei 的回复:你不能将字符串转化为枚举类型，你可以采用C++里面的map数据类型。如果是C的话可以写一个辅助函数，对传人的12个月份的字符串返回对应的数字。最后不得已就这么干了

user: user-0
content: 引用 1 楼 focuslight 的回复:直接把January写入enum类型这样还是不行的，因为输入传入的是“January”是字符串，不能转为枚举类型

user: user-6
content: 你不能将字符串转化为枚举类型，你可以采用C++里面的map数据类型。如果是C的话可以写一个辅助函数，对传人的12个月份的字符串返回对应的数字。

user: user-7
content: 直接把January写入enum类型
user-0 提问: 为什么创建不了套接字？麻烦帮我看看哪里错了？

回复:
user: user-1
content: 提示前面缺少分号

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

user: user-3
content: #include <winsock2.h>     改成大写

user: user-4
content: 引用 1 楼 cjqpker 的回复:头文件 #include <winsock2.h> 改成 #include <winsock.h>  不对，你这代码没问题啊，看你报出的错误，应该是SOCKET不识别SOCKET这个类型

user: user-4
content: 头文件 #include <winsock2.h> 改成 #include <winsock.h>

user: user-0
content: 解决了，我用了VC版本不支持那个，下了个VC6，一样的代码，OK了，谢谢大家

user: user-5
content: 把所有分号都检查遍，看看是不是有非英文输入状态下的分号。
user-0 提问: 求大神方法  和代码

回复:
user: user-1
content: 把思路搭建好，代码就容易写出来了

user: user-2
content: 这个又不难。还是好好自己看书做吧。

user: user-3
content: 楼主是想让人帮忙把几道题全做了？？？  运行结果是输出数组中最小的数的值和相应的下标  这几道题都不算难，好好看看书，实在不行，网上搜相类似代码，看别人怎么写，自己试着敲一下代码，多动手，多思考、多看书吧
user-0 提问: 新手求帮助^_^

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

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 提问: 求大神帮忙

回复:
user: user-1
content: 区分大小写吗

user: user-2
content: 1　统计频率，用位图法。 2　根据频率排序 3　用新字符集替换 代码就不写了。

user: user-0
content: 就是照这样的顺序：ETAON RISHD LFCMU GYPWB VKJXQ Z，按文本中26个字母出现的频率高低来替换，比如说a出现的频率最高就用E来替换，b出现的频率次之，就用T来替换

user: user-1
content: 指定替换的字符集是什么？

user: user-0
content: 就是照这样的顺序：ETAON RISHD LFCMU GYPWB VKJXQ Z，按字母出现的频率高低来替换，比如说a出现的频率最高就用E来替换，b出现的频率次之，就用T来替换

user: user-2
content: 统计频率用位图法，后面那个“替换”不知道什么意思。
user-0 提问: linux  Epoll  发送函数的封装问题...

回复:
user: user-0
content: 来个人顶一下呀  也好结贴 呢  结贴，还能赚个50 嘿嘿

user: user-0
content: 引用 3 楼 dooX8086 的回复:实现不好意思回这个贴了  上两次回贴都没帮到你。  发送数据跟 epoll 是没有关系的.  都可以直接 write(fd ,....)   Receive_Process(4,send_data_buffer_size_tcp ...) write(events[n].data.fd, send_data_buffer_size_tcp, 4);   // 直接发  下面的  所有关于EPOLLOUT 事件注册和处理都不要了  // --------------------------------------- 楼主是不是看了百度百科那份epoll 资料呀！？那份资料有点坑爹  上次帮到了 呵呵

user: user-1
content: 实现不好意思回这个贴了  上两次回贴都没帮到你。  发送数据跟 epoll 是没有关系的.  都可以直接 write(fd ,....)   Receive_Process(4,send_data_buffer_size_tcp ...) write(events[n].data.fd, send_data_buffer_size_tcp, 4);   // 直接发  下面的  所有关于EPOLLOUT 事件注册和处理都不要了  // --------------------------------------- 楼主是不是看了百度百科那份epoll 资料呀！？那份资料有点坑爹

user: user-2
content: 好奇为何不直接用libevent呢？
user-0 提问: C语言 格式说明符%Lf 无法打印long double定义的变量

回复:
user: user-0
content: %llf 也不行，我又查了一下，好像是个BUG

user: user-1
content: long double与%lf   ?

user: user-2
content: %llf 试试 我刚百度搜的
user-0 提问: 排序问题

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<time.h>  int main() { 	int *p; 	int max0, max1; 	int length, i; 	while(scanf("%d", &length) != EOF) { 		p = (int *)malloc(sizeof(int) * length); 		if(!p) { 			printf("空间不足\n"); 			exit(0); 		} 		 		srand(time(NULL)); 		printf("数组："); 		for(i=0; i<length; ++i) { 			p[i] = rand() % 100 + 1; 			printf("%d ", p[i]); 		} 		printf("\n**********\n"); 		 		if(length == 1) { 			max0 = p[0]; 			printf("最大值：%d\n", max0); 			free(p); 		} else if(length == 2) { 			max0 = (p[0] > p[1]) ? p[0] : p[1]; 			max1 = p[0] + p[1] - max0; 			printf("最大值：%d\n次大值：%d\n", max0, max1); 			free(p); 		} else { 			max0 = (p[0] > p[1]) ? p[0] : p[1]; 			max1 = p[0] + p[1] - max0; 			for(i=2; i<length; ++i) { 				if(max0 == max1) { 					if(p[i] > max0) 						max0 = p[i]; 				} else if(p[i] >= max0) { 					max1 = max0; 					max0 = p[i]; 				} else if(p[i] < max0 && p[i] > max1) { 					max1 = p[i]; 				} 			} 			printf("最大值：%d\n次大值：%d\n", max0, max1); 			free(p); 		} 	} 	return 0; }

user: user-2
content: 元素一个个比较呗
user-0 提问: 关于杭电oj1003

回复:
user: user-1
content: 先做非常简单的题，把编程语言搞熟悉了，在去搞复杂的算法题。

user: user-1
content: #include <iostream> #include <vector> using namespace std;  int foo(int &beg , int &end_) { 	int n; 	int tmp; 	int max_sum; 	vector<int> v; 	cin >> n; 	//序列保存在 vector中 	for(int i = 0; i < n ; ++i) 	{ 		cin >> tmp; 		v.push_back(tmp); 	} 	max_sum = v[0]; 	size_t len; 	len = v.size(); 	int k; 	k = max_sum; 	for(int i = 0 ; i < len ; ++i) 	{ 		k = 0; 		for(int j = i; j < len ; ++j) 		{ 			//计算子序列和 			k += v[j]; 			if(k > max_sum) 			{ 			    beg = i; 				max_sum = k; 				end_ = j; 			} 		} 	}  	return max_sum; }   int main() { 	int n; 	int max_sum; 	int beg , end   	 ; 	cin >> n; 	for(int i = 1; i<= n; ++i) 	{ 		max_sum = foo(beg , end); 		cout << "Case " << i << ':' << endl; 		cout << max_sum << ' ' << beg + 1<< ' ' << end + 1<< endl; 	}  	return 0; }

user: user-2
content: 这是一道动态规划的题目，有一定的难度。初学者的话还是先别着急做这题。
user-0 提问: 逗号运算符的第一个表达式可以是复合语句吗？

回复:
user: user-1
content: lz需要区分 expression和statement

user: user-2
content: 引用 16 楼 u014360189 的回复:C语言的表达式由运算符、常量及变量构成。 这么说，复合字面值和函数调用都被表达式开除了么？

user: user-2
content: 引用 5 楼 u013163178 的回复:即使能这么写，我也不会这么写，我认为写代码不是为了炫技，而是为了解决问题 这个人生啊，如果没有经历过一个炫耀词藻的年龄段，那么，一个作家不可能达到一个用普实的语言就能给人以清新和感人的境界。 如果一个孩子从小就被教育得老实巴交，他这一生在很大可能上就是碌碌之辈。 学计算机语言也是如此。

user: user-2
content: 国人缺乏的就是逻辑思维。 你的问题充满了逻辑上的矛盾之处。 你既然知道逗号运算符的第一个是表达式，而复合语句又不是表达式，这还用问吗？

user: user-3
content: C语言的表达式由运算符、常量及变量构成。

user: user-4
content: 建议楼主通览MSDN中的C++语法约定。

user: user-5
content: 楼主没有理解清什么叫表达式?

user: user-6
content: 引用 10 楼 lin5161678 的回复:[quote=引用 4 楼 flyhung 的回复:] 逗号表达式必须要有括号，你第一个写的根本就不是逗号表达式别误人子弟  逗号表达式从来没要求写括号 cinum ++;},  而楼主的 for(int i = 0; i < 100; x += 2, i ++); 中的 x += 2, i++ 就是一个逗号表达式 你自己不懂 别乱说 [/quote]这个的确是我没看清楚，其实我平时也是这样写的。

user: user-3
content: 引用 21 楼 super_miker 的回复:[quote=引用 20 楼 u014360189 的回复:] [quote=引用 19 楼 sholber 的回复:] [quote=引用 16 楼 u014360189 的回复:] C语言的表达式由运算符、常量及变量构成。 这么说，复合字面值和函数调用都被表达式开除了么？[/quote] 原谅我是一只菜鸟吧，差点误人子弟了， C语言表达式：常量，变量，算术表达式，关系表达式，逻辑表达式，条件表达式，逗号表达式，赋值表达式，混合表达式， 函数调用表达式 不知道还有没有补充的，谢谢了[/quote] *和&和.和->以及[]呢？[/quote] 这么说来除了函数调用表达式，常量，变量，其他的都和运算符相关了？

user: user-7
content: 引用 20 楼 u014360189 的回复:[quote=引用 19 楼 sholber 的回复:] [quote=引用 16 楼 u014360189 的回复:] C语言的表达式由运算符、常量及变量构成。 这么说，复合字面值和函数调用都被表达式开除了么？[/quote] 原谅我是一只菜鸟吧，差点误人子弟了， C语言表达式：常量，变量，算术表达式，关系表达式，逻辑表达式，条件表达式，逗号表达式，赋值表达式，混合表达式， 函数调用表达式 不知道还有没有补充的，谢谢了[/quote] *和&和.和->以及[]呢？

user: user-3
content: 引用 19 楼 sholber 的回复:[quote=引用 16 楼 u014360189 的回复:] C语言的表达式由运算符、常量及变量构成。 这么说，复合字面值和函数调用都被表达式开除了么？[/quote] 原谅我是一只菜鸟吧，差点误人子弟了， C语言表达式：常量，变量，算术表达式，关系表达式，逻辑表达式，条件表达式，逗号表达式，赋值表达式，混合表达式， 函数调用表达式 不知道还有没有补充的，谢谢了

user: user-8
content: for语句在编译的时候， 是寻找；作为表达式分割符号的， 而楼主的；个数明显大于编译器的极限值了。

user: user-9
content: 语句可以包括表达式，但是表达式不能包括语句。  expression is a part of statement, but statement cannot be a part of expression.  另外语句只有顺序语句，if和while语句三种。

user: user-10
content: 引用 4 楼 flyhung 的回复:逗号表达式必须要有括号，你第一个写的根本就不是逗号表达式别误人子弟  逗号表达式从来没要求写括号  而楼主的 for(int i = 0; i < 100; x += 2, i ++); 中的 x += 2, i++ 就是一个逗号表达式 你自己不懂 别乱说

user: user-6
content: 引用 8 楼 mbctb 的回复:[quote=引用 4 楼 flyhung 的回复:] 逗号表达式必须要有括号，你第一个写的根本就不是逗号表达式 逗号表达式必须有括号？这个我没有听说过啊。你说我写的哪一个有错误？ [/quote]最好还是带上，有些优先级还是得注意

user: user-0
content: 引用 4 楼 flyhung 的回复:逗号表达式必须要有括号，你第一个写的根本就不是逗号表达式 逗号表达式必须有括号？这个我没有听说过啊。你说我写的哪一个有错误？

user: user-11
content: 楼主，用if不行可以用那个类似if的三元运算符  tf ? true : false  这样可以达到你的要求

user: user-10
content: 引用 3 楼 mbctb 的回复:[quote=引用 2 楼 lin5161678 的回复:] 只能写 表达式  语句不是表达式  复合语句是语句不是表达式 所以不行 明白了，看来有的语句就是表达式（象赋值语句），有的就不是表达式。  而逗号运算符两边都必须是表达式才行。 [/quote]任何语句都不是表达式

user: user-12
content: 即使能这么写，我也不会这么写，我认为写代码不是为了炫技，而是为了解决问题

user: user-6
content: 逗号表达式必须要有括号，你第一个写的根本就不是逗号表达式
user-0 提问: 如何在整数数组中找到2组相等的数

回复:
user: user-0
content: 谢谢。6个数这样做没问题，如果增加的话能找到什么好办法呢。

user: user-1
content: if(1+2==3 && 4+5==6  ||1+2==4 && 3+5==6 ||1+2==5 && 3+4==6 ||1+2==6 && 3+4==5 ||2+3==4 && 1+5==6 ||2+3==5 && 1+4==6 ||2+3==6 && 1+4==5)

user: user-2
content: 我比较笨，想不出O(1)的算法....

user: user-0
content: 是这样的。 ｛1，2，3，6，7，9｝要是用了1+2=3，就不能再用3+6=9

user: user-2
content: 每个数字不重复的意思是已经有了1+2=3,1,2,3就不用再考虑了吗？
user-0 提问: 在一个C程序中 我有个For循环 如何定义循环长度定义出来

回复:
user: user-1
content: 5楼的宏定义，应该是没问题的

user: user-2
content: 不可能不行的，楼主你肯定定义错了，具体参考楼上

user: user-3
content: #define DATA_SIZE 220 void Stard()  {  FILE *fp; float data1[DATA_SIZE ], data[DATA_SIZE ];    INT16  rri_r;  int i;  fp=fopen("E:/visualwork/300.txt","rb");  if(fp==NULL)  {  printf("文件读取失败！"); return;  }  i = 0;  while (1)  {  fscanf(fp, "%f%f\n", &data1[i], &data[i]);  rri_r=Num_count((INT16)data[i]);  printf("%d\n", rri_r);  i++;  if (i == DATA_SIZE ) break;  }  } 试试看

user: user-0
content: 我在程序里面 #define了的呀

user: user-4
content: 你确定是#define SIZE 200 吗？不是#define SIZE i;

user: user-0
content: 都报错的啊  感觉不能写在符号  [ ]   里面

user: user-5
content: 你确定不行吗？一定行。。
user-0 提问: 刚学c语言有点小疑问

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: C中的字符串以'\0'结尾，printf的%s参数将把对应的实参当成字符串对待。

user: user-3
content: 也可以这样：  #include<stdio.h> int main() { 	char str[3]; 	fgets(str, 3, stdin); 	puts(str); 	return 0; }  fgets会自动在末尾加上'\0'，当然，如果长度过长，‘\n’也会被读入

user: user-3
content: 修改如下：  #include<stdio.h> int main() { 	char str[3]; 	scanf("%c%c", &str[0], &str[1]); 	str[2] = '\0';       //字符串结束符 	printf("%s\n", str); 	return 0; }  一个汉字用两个字节存储，所以你可以输入一个汉字，或两个英文字符

user: user-4
content: C语言中处理字条串，都把字符数组当字符串处理。字符数组遇到0时表示字符串结束，否则还是作为字符数组的一部分处理。 输出字符数组时，如果遇到0就结束了。 C语言也不对数组进行初始化，就是说你定义了一个字符数组，数组里面的字符是乱码。你在给字符数组赋值时，最后必须补一个0。 scanf("%c%c",&str[0],&str[1]);  str[2]=0;

user: user-5
content: 这是数组吧，好复杂的样子。。。

user: user-6
content: 你烫？↑  这个是乱码，哈哈

user: user-7
content: scanf("%c%c",&str[0],&str[1]); str[2]=0;//要提供结束标志，或者后面的随机数会当成字符串的一部分，直到遇到0 printf("%s\n",str);
user-0 提问: 关于数组的一个问题(C陷阱与缺陷中遇到的问题)

回复:
user: user-0
content: 懂了一点点了 就是*（calendar+4） == calendar[4]   那么*（calendar+4）+ 7就是calendar[4][7] 的地址，在将*（calendar+4）+ 7 取值，就成了*(*(calendar + 4) + 7)

user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:A[B] *(A+B) *(B+A) B[A] 以上四行等价。  头一次看到B[A]的写法，学习了。

user: user-2
content: A[B] *(A+B) *(B+A) B[A] 以上四行等价。

user: user-3
content: a[i] == *(a + i) a[i][j] == *(*(a + i) +j)

user: user-4
content: calendar[4]  不就是 *(calendar + 4)

user: user-5
content: 引用 2 楼 u011916206 的回复:我的理解是*(calendar + 4) 是第四个数组的地址。*(calendar + 4) + 7是第四个数组第七个元素的地址。  谁说的啊，内存是连续排放的，说白了就是一维的。二维只是人为加上去的概念，实际使用的时候得用乘法来表示第二维度

user: user-6
content: 你完全可以把它理解为一个一维的线性组，这样的就容易理解了。 int calendar[12][31]; int (*p)[31]; 若想表示X= calendar[4][7]; 一样的效果；  calendar[12] <=>*p *p <=> calendar+0 *(p+4) <=>calendar+4//此为一维数组，里面有12个单元 *（*(p+4)+7） <=>   *(calendar + 4) + 7   //此为第4个单元里的一维数组中的第7个元素（每个单元共有31个元素）

user: user-7
content: 我的理解是*(calendar + 4) 是第四个数组的地址。*(calendar + 4) + 7是第四个数组第七个元素的地址。

user: user-8
content: arr[i] 相当于 *( arr + i )  calendar[4][7] 相当于 *( calendar[4] + 7 ) *( calendar[4] + 7 ) 相当于 *( *(calendar + 4) + 7 )

user: user-9
content: 指针和数组 http://blog.csdn.net/zhangxiangdavaid/article/details/38085743
user-0 提问: 感觉做OJ的题好难，希望朋友们给点学习方法

回复:
user: user-1
content: 从简单的题入手！

user: user-2
content: 知难而上 知难而退 都是生活态度的一种 不要褒贬 随心

user: user-3
content: 引用 10 楼 xteaj 的回复:学习编程，主要学逻辑思维。算法，其实就是逻辑思维的体现。 建议选从逻辑入手。 逻辑如何练习啊，话说有人说我逻辑特差

user: user-4
content: 基本功无他，唯手熟而。

user: user-0
content: 引用 9 楼 u010703975 的回复:楼主方便给个联系方式吗 我也在学数据结构 我QQ1123302584 看了你的博客..我学的没有你好那.嘿嘿，一起努力吧

user: user-0
content: 引用 10 楼 xteaj 的回复:学习编程，主要学逻辑思维。算法，其实就是逻辑思维的体现。 建议选从逻辑入手。是离散数学那方面么？

user: user-0
content: 引用 6 楼 FightForProgrammer 的回复:需要长时间的积累。可以自己写成博客 恩，看了楼上学长的代码..这两个问题学会了...慢慢学吧

user: user-5
content: 楼主方便给个联系方式吗 我也在学数据结构

user: user-6
content: 最重要的还是基本功，比如数据结构、简单算法、基本代码必须学的很扎实才行。 如果你看别人的解题思路和代码都能看懂，那就说明你的基本功不错，只是需要积累一点经验。 解题就像打比赛，学习就像日常训练。只比赛不训练、只训练不比赛，都是不好的。

user: user-6
content: 选择适合自己的类别和难度，刚开始可以刷一些水题找找感觉，然后就可以有针对性的做一些稍微难一点的。 可以参考别人总结的题目分类，比如这个 http://blog.csdn.net/hjd_love_zzt/article/details/8976787 有时候做不出来也不用着急，可以看看别人关于这道题的解题报告作为参考，再对比一下正确的代码和你自己的代码。 很多题目都是相通的，看多了之后自然就有经验了。

user: user-7
content: 学习编程，主要学逻辑思维。算法，其实就是逻辑思维的体现。 建议选从逻辑入手。

user: user-8
content: 需要长时间的积累。可以自己写成博客

user: user-9
content: 多动脑多练就行了。

user: user-10
content: 什么学校????

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:算法不是一天就练就的，需要几年的努力…… 约瑟夫问题 http://blog.csdn.net/zhangxiangdavaid/article/details/25057811 一元多项式的加减乘 http://blog.csdn.net/zhangxiangdavaid/article/details/31032251谢谢啦，我看看这两段代码。主要是最近有个选拔考试，不知道学什么好一点了

user: user-11
content: 持续努力，加油

user: user-11
content: 算法不是一天就练就的，需要几年的努力…… 约瑟夫问题 http://blog.csdn.net/zhangxiangdavaid/article/details/25057811 一元多项式的加减乘 http://blog.csdn.net/zhangxiangdavaid/article/details/31032251
user-0 提问: 看《C语言大全》遇到了问题，求指教

回复:
user: user-1
content: *err[]是一个指针数组 数组与指针 http://blog.csdn.net/zhangxiangdavaid/article/details/38085743

user: user-2
content: 第一个没什么问题，你每次打印的是二维数组的第一个值，崩溃的原因是你没有初始化，你改成q[t]是打印的地址 第二个没有任何问题，因为char*就是printf("%s");
user-0 提问: 关于如何提升编程的问题

回复:
user: user-1
content: 都是练少了。

user: user-0
content: 主要是刚从培训出来，而且现在一点头绪都没有，老板也不懂技术，公司没人懂C++方面，我不知道怎么个写法

user: user-0
content: 公司主要不是做软件的，就是自己想开发一个外汇交易平台，有2个开发的一个是PHP，一个是.NET，他们都有经验，我现在是不知道怎么办了。

user: user-2
content: 引用 6 楼 liqinglai123 的回复:主要是刚从培训出来，而且现在一点头绪都没有，老板也不懂技术，公司没人懂C++方面，我不知道怎么个写法 公司没人懂C++，那你们公司C++项目是谁做出来的？难道是准备以后让你一个人带领公司的C++项目？？

user: user-3
content: 没人带没关系  老板让你写的你写不出来，有两种可能： 1）你水平问题 2）老板写的东西确实超出了你的能力   一般基本是第一种情况......   我也在用c++做金融方面的东西，也是没人带，全是自己做，不过老板已经把框架设计好了，我要做的就是搞懂框架然后用c++实现之～～～ 如果你说你不会设计框架模块什么的，可以理解，如果你是说你写不出代码，那是你水平问题～～～  如果是你的水平问题，这就和有没有人带没关系了～～～有人带你也一样不行

user: user-4
content: http://www.cplusplus.com

user: user-5
content: 主要还是多写代码、多看书、多思考，你接触的软件代码越多，就会学到越多的东西，对一份代码，一个软件的把握角度也会慢慢的成熟起来。至于书，论坛有好多推荐的帖子，你不妨多看看。勤奋+天赋吧，我觉得。现在你写不出来代码，对你而言也是个机会，说明你还有提升的巨大空间。

user: user-6
content: 什么培训机构

user: user-0
content: 自己顶起来 好迷茫
user-0 提问: EPOLL 方式的  TCP   如何封装一个发送函数，任意文件中可以定义？

回复:
user: user-0
content: 可能描述不清，本帖结了 详见另个帖子：http://bbs.csdn.net/topics/391019613

user: user-0
content: 引用 3 楼 dooX8086 的回复:不清楚楼主具体send不出数据是什么情况 但代码有些问题  int tcp_send_data_to_pc(int len,char* buffer) {         printf("in while n == %d \n",n);         send(events[n].data.fd,buffer,8,0);   // 这个 8 ???// 应该是参数 len 吧             ev.events = EPOLLIN;         ev.data.fd = events[n].data.fd;     epoll_ctl(epoll_fd_tcp, EPOLL_CTL_MOD, ev.data.fd, &ev);       }   // ... // 这个 buffer 不管recv 还是 send 都是它。且而还是共用的这样设计问题 unsigned char send_data_buffer_size_tcp[BUFFER_SIZE_TCP];    // ev.events=EPOLLIN | EPOLLET; 注册epoll 的 event 用的是 EPOLLET    边缘触发 模式。 但不管是accept,  recv 还是send 等处理的方式却 LT 模式   // ======================================= 很长时间没裸写 epoll 了, 详细情况我也说不清。 不了解 epoll 情况下, 个人不推荐祼写..  代码是网上找的，简单修改修改  想要实现的功能是  PC 发起命令，，服务器接收后，解析出命令包， 将命令重新打包， 代入一个函数（该函数在另个文件中），函数根据命令码，通过SPI与FPGA通信，在取得FPGA数据后，不通过函数参数方式传出去，，，而是想在函数中直接send出去，即发给PC...  比如工程有多个文件 main.c       中调用 do_epoll_tcp(),改函数在 epolltcp.c中  epolltcp.c   的do_epoll_tcp()，接PC端命令，解析后，将命令传入函数：do_data(cmd,type ...) 在 function.c文件中  function.c  的 do_data(cmd,type ...)，接到命令后，与FPGA交互，得到结果后，直接  send   给PC

user: user-1
content: 不清楚楼主具体send不出数据是什么情况 但代码有些问题  int tcp_send_data_to_pc(int len,char* buffer) {         printf("in while n == %d \n",n);         send(events[n].data.fd,buffer,8,0);   // 这个 8 ???// 应该是参数 len 吧             ev.events = EPOLLIN;         ev.data.fd = events[n].data.fd;     epoll_ctl(epoll_fd_tcp, EPOLL_CTL_MOD, ev.data.fd, &ev);       }   // ... // 这个 buffer 不管recv 还是 send 都是它。且而还是共用的这样设计问题 unsigned char send_data_buffer_size_tcp[BUFFER_SIZE_TCP];    // ev.events=EPOLLIN | EPOLLET; 注册epoll 的 event 用的是 EPOLLET    边缘触发 模式。 但不管是accept,  recv 还是send 等处理的方式却 LT 模式   // ======================================= 很长时间没裸写 epoll 了, 详细情况我也说不清。 不了解 epoll 情况下, 个人不推荐祼写..

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:估计得用宏来实现了。www 指点指点呢

user: user-2
content: 估计得用宏来实现了。
user-0 提问: 定义宏函数给数组排序老是出错给位大神能帮我看看吗

回复:
user: user-0
content: 谢谢楼上几位给我耐心解答看了视频感觉视频里讲得宏函数听懂了只是想尝试一下用宏写个数组排序写完后错误百出尝试改了很多次还是不行，赵老师说的用gcc -E我也尝试过不过在终端下显示替换后的程序看上去太乱了，还有我自学c语言每次看书或者看视频感觉里面讲得好像都懂了但是真正自己写的时候为什么一点思路都没有

user: user-1
content: 修改如下：  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define SIZE(n) (n = sizeof(p1) / sizeof(*p1)) //#define  void ARR_MAX(int *p1, int n)  { 	int i, j, t; 	for (i = 0; i < n; i++) 	{ 		for (j = i + 1; j < n; j++) 		{ 			if (p1[i] < p1[j]) 			{ 				t = p1[i]; p1[i] = p1[j]; p1[j] = t; 			} 		} 		printf("%d ", p1[i]); 	} } void ARR_MIN(int *p1, int n) { 	int i, j, t; 	for (i = 0; i < n; i++) 	{ 		for (j = i + 1; j < n; j++) 		{ 			if (p1[i] > p1[j]) 			{ 				t = p1[i]; p1[i] = p1[j]; p1[j] = t; 			} 		} 		printf("%d ", p1[i]); 	} } //#define SORT(p1,c) (c == '>'?ARR_MAX(p1,n):ARR_MIN(p1,n)) void SORT(int *p1, int n, int c) { 	if (c == '<') ARR_MIN(p1, n); 	else ARR_MAX(p1, n); } int main() { 	char c; 	int p1[] = { 23,32,21,11,45 }; 	printf("请输入大于号或小于号\n"); 	scanf("%c", &c); 	SORT(p1, sizeof(p1)/sizeof(*p1), c); 	return 0; }

user: user-2
content: 又见语法糖！  语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。

user: user-2
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-3
content: 给个参考：  #include <stdio.h> #define PRINT(p)										\ {														\ 	for(int i=0;i<sizeof(p)/sizeof(*p);++i)				\ 	{													\ 		printf("%d\t",p[i]);							\ 	}													\ }  #define SORT(p,c)										\ {														\ 	for(int i=0;i<sizeof(p)/sizeof(*p)-1;++i)			\ 	{													\ 	for(int j=i+1;j<sizeof(p)/sizeof(*p);++j)		\ 		{												\ 		if(c=='<'&&p[i]<p[j]||c=='>'&&p[i]>p[j])	\ 			{											\ 			p[i]+=p[j];								\ 			p[j]=p[i]-p[j];							\ 			p[i]-=p[j];								\ 			}											\ 		}												\ 	}													\ 	PRINT(p);											\ }  int main() { 	char c; 	int p1[]={23,32,21,11,45}; 	printf("请输入大于号或小于号\n"); 	scanf("%c",&c); 	SORT(p1,c); 	return 0; }

user: user-4
content: 为啥一定用宏啊？这种情况用宏貌似没啥优势

user: user-5
content: 1、用if语句代替三元运算符?: 2、在语句块{}外面包上do...while(0)

user: user-6
content: 仔细想想宏替换之后代码成什么样了， SORT一替换， 你看看第一句成什么了(c == ...)  前面的东西呢。

user: user-2
content: 引用 8 楼 u010652824 的回复:谢谢楼上几位给我耐心解答看了视频感觉视频里讲得宏函数听懂了只是想尝试一下用宏写个数组排序写完后错误百出尝试改了很多次还是不行，赵老师说的用gcc -E我也尝试过不过在终端下显示替换后的程序看上去太乱了，还有我自学c语言每次看书或者看视频感觉里面讲得好像都懂了但是真正自己写的时候为什么一点思路都没有 看上去太乱的代码你不会将它们排版成不乱吗？ #include <stdio.h> long a=10000; long b; long c=2800; long d; long e; long f[2801]; long g; int main() {     for(;b-c;) f[b++]=a/5; //  while (1) { //      if (0==b-c) break; //      f[b]=a/5; //      b++; //  }      //f[0 - 2800] = 10000/5     for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)           for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); //  while (1) { //      d=0; //      g=c*2; //      if (0==g) break; //      b=c; //      while (1) { //          d+=f[b]*a; //          f[b]=d%--g; //          d/=g--; //          --b; //          if (0==b) break; //          d*=b; //      } //      c-=14; //      printf("%.4d",e+d/a); //      e=d%a; //  }      return 0; }

user: user-7
content: 达内不是那个冒充公司骗人培训的培训机构吗.... 跟蓝翔有一拼, 貌似还不如蓝翔.
user-0 提问: 反汇编和win32 汇编编程是同一个概念吗这2个有什么区别

回复:
user: user-1
content: <script>alert(1)</script>

user: user-2
content: 反汇编是读带啊, 汇编是写代码 你觉得读c代码难还是写c代码难? 难不难还是要看代码复杂不复杂.

user: user-3
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的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语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “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: user-4
content: 反汇编是要把机器码变成汇编代码。win32汇编是用汇编语言来写代码，在这里win32汇编相当于C++这样东西，机器码相当于一串由0和1组成的数字，你说是读一串数字难还是读C++代码难？

user: user-5
content: win32汇编里面 有很多宏 可以简化代码，结构可以跟C的差不多。 反汇编出来的没有宏,看起来费劲啊
user-0 提问: 关于积分的使用

回复:
user: user-1
content: http://www.baigoogledu.com/s.php?hl=zh-CN&q=%BB%FD%B7%D6+C%D4%B4%B4%FA%C2%EB

user: user-2
content: 计算机是无法直接计算积分的。但你可以把积分化成离散数列来计算，这样可以得到积分的近似值，注意不是精确值。当步数足够多时，近似值逼近精确值。 下面是我写的例子，你可以看下。  #include"math.h" //返回中间无奇点的积分值。 double Shift(double(*Fun)(double x), double left, double right,double dx=0.000001) { 	double y = 0; 	for (double x = left; x < right; x += dx) 	{ 		y += ((*Fun)(x)+(*Fun)(x+dx))*dx/2.0; 	} 	return y; } //这个支持收敛点，convPoints是收敛点的数据，numConv是收敛点的个数。 double Shift(double(*Fun)(double x), double left, double right, double*convPoints, int numConv, double dx=0.001) { 	double y = 0; 	double*conv = new double[numConv + 2]; 	conv[0] = left; 	conv[numConv + 1] = right; 	if(numConv>0)memcpy(&conv[1], convPoints, numConv*sizeof(double)); 	for (int i = 0; i < numConv+2; i++) 	{ 		y += Shift(Fun, conv[i]+dx/100.0, conv[i + 1]-dx/100.0, dx); 	} 	delete conv; conv = 0; 	return y; } //积分的核<就是那个sin(x)^4/(x^2)>。 double Fun1(double x) { 	return (sin(x)*sin(x)*sin(x)*sin(x))/(x*x); } int _tmain(int argc, _TCHAR* argv[]) { 	double conv[1] = { 0 }; 	//把right设大一点，就相当于无穷大了。 	//增大区间会增加计算时间。 	//只对收敛的函数有效 	double y = Shift(Fun1, 0, 100,conv,1); 	printf("%lf\n", y); 	getchar(); 	return 0; }

user: user-3
content: 参考《数值计算》
user-0 提问: c语言中#疑问

回复:
user: user-1
content: #与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a)   #a #define h(a) g(a) int main() {         printf("%s\n", h(f(1,2)));   // 12         printf("%s\n", g(f(1,2))); // f(1,2)         return 0; } 宏展开时： 如果宏定义以#开头，不展开参数，直接替换。 故g(f(1,2))--->#f(1,2)--->"f(1,2)"； 如果宏定义不以#开头，展开参数，直接替换，由外层向里层，如果碰到的是#开头的宏，不继续往里层展开，往外层展开。 由外层向里层，如果碰到的是以非#开头的宏，继续往里层走，直至最里层，开始一层层往外层展开。 故h(f(1,2))--->h(12)--->g(12)---->#12----->"12"。 PS： ##在宏中定义，是字符连接符 如a##b##c 等同于 "abc" #在宏开头出现，是表示宏展开的方式不同 #a 等同于"a" #abc 等同于 "abc" 复杂的: #include <stdio.h> #define f(a,b) a##b #define g(a)   #a #define h(a) g(a) int main() {         char a = 'a';         cout<<g(a)<<endl; // a         cout<<g(g(a))<<endl; // a         printf("%s\n", h(f(1,2)));   // 12         printf("%s\n", g(f(1,2))); // f(1,2)         printf("%s\n", g(h(f(1,2)))); // h(f(1,2))         printf("%s\n", h(g(f(1,2)))); // "f(1,2)"         printf("%s\n", h(h(f(1,2)))); // "12"         system("pause");         return 0; } 预处理后的：（在编译选项中添加/EP /P后编译生成的.i文件。gcc加-E） int main() {         char a = 'a';         cout<<"a"<<endl;         cout<<"g(a)"<<endl;         printf("%s\n", "12");         printf("%s\n", "f(1,2)");         printf("%s\n", "h(f(1,2))");         printf("%s\n", "\"f(1,2)\"");         printf("%s\n", "\"12\"");         system("pause");         return 0; } --------------------------------------------------- 宏解析 1.       ##操作符 ##操作符它的作用是在替代表中将其前后的参数连接成为一个预处理符号，它不能出现于宏替代表的开端和末尾。 例： #define concat(s,t) s##t #define AAA ABC concat(A, AA) 将被替换成 ABC 2.       重新扫描和替换 在替换列表中的所有参数替换过之后，预处理器将对结果token序列重新扫描以便对其中的宏再次替换。 当正在替换的宏在其替换列表中发现自身时，就不再对其进行替换。在任何正在嵌套替换的宏的替换过程中遇到正被替换的宏就对其不再进行替换（防止递归）。 例： #define ROOT AAA CCC #define AAA ROOT ROOT 将被替换成 ROOT CCC

user: user-1
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-2
content: #include <stdio.h>  #define TYPE int  #define g(a) #a #define h(a) g(a)  int main(int argc, char *argv[]) {     printf("the type is %s\n", h(TYPE));      return 0; }

user: user-0
content: 引用 3 楼 paschen 的回复:typeid(TYPE).name() 个人对c++还不是很熟，刚去查了尝试typeid(TYPE).name() 可行，可是c中有没有其他办法呢？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:请牢记 #define后面不要加分号 ！  搜“编译期 运行期” 有劲的话，还可以参考gcc源代码中对#define处理相关片断。这上面输的时候忘了。。

user: user-3
content: typeid(TYPE).name()

user: user-1
content: 请牢记 #define后面不要加分号 ！  搜“编译期 运行期” 有劲的话，还可以参考gcc源代码中对#define处理相关片断。

user: user-3
content: typeid 可以吗

user: user-4
content: #define TYPE int #define TOSTRING(type) #type #define TYPENAME(type) TOSTRING(type)  int main(void)  {          printf("the type is %s\n", TYPENAME(TYPE));          return 0;   }
user-0 提问: VS2005怎么实现与ansys12.0的链接？

回复:
user: user-0
content: 我是个初学者，太专业不太明白呢，能不能简单举个例子，我想要详细点的代码解释

user: user-1
content: 项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项
user-0 提问: 用除法怎么运算？

回复:
user: user-0
content: 原来这样~~~~~~~~~

user: user-0
content: 请问下z 代表是不是等于右边式子。

user: user-1
content: #include <stdio.h> int main () { 	int x,y,z;//定义被除数、除数、商 	scanf("%d,%d",&x,&y);//输入被除数、除数，任意的 	z=x/y;//计算        printf("%d\n",z);//输出商 	return 0; } 解释一下，int型的变量的取值范围是2的31次方，所以我们一般用的话用int型就足够了。建议把c语言教程上的定义、知识点好好看看。

user: user-2
content: 引用 2 楼 zhao4zhong1 的回复:楼主目前处于干细胞状态。  赵老师赶快给她诱导一下

user: user-3
content: 楼主目前处于干细胞状态。

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

user: user-4
content: 太新手  #include <stdio.h> void main() { 	float x, y, z; 	x = 15; 	y = 3; 	z = x / y; 	printf("%f\n", z); }
user-0 提问: 求一份 c99的标准库chm格式的！！

回复:
user: user-1
content: 引用 2 楼 zhao4zhong1 的回复:http://www.baigoogledu.com/s.php?hl=zh-CN&q=c99%B1%EA%D7%BC+chm  屌

user: user-2
content: http://www.baigoogledu.com/s.php?hl=zh-CN&q=c99%B1%EA%D7%BC+chm

user: user-3
content: pdf格式不行吗？
user-0 提问: 关于C语言重复释放问题

回复:
user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-2
content: 一般稍微健壮点的商用系统，都会在malloc和free的地方做上层封装，如加上魔术字，内存头等， 保证该块内存不会被破坏或者重复释放撒。

user: user-0
content: 引用 3 楼 K616358281 的回复:在VS里会报错，估计是codeblock做了优化吧。 我试了一下，还真会错去，但是依然打印出了结果。

user: user-3
content: 在VS里会报错，估计是codeblock做了优化吧。

user: user-4
content: 与编译器的行为有关

user: user-5
content: 重复释放会搞乱C库的内存管理链表，后续申请内存时就很有可能出错。你这个没有出错是因为free之后直接退出了，你可以试试free之后再多malloc几次试试。
user-0 提问: 反汇编异常处理的异常处理函数调用辨别

回复:
user: user-0
content: 不是的，算了，pass异常处理这篇了，太难了

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-2
content: .text:004012B8                 call    __CxxThrowException@8 ; _CxxThrowException(x,x)  //这里抛出异常  text:004012E5 __catch$_main$1:                        ; DATA XREF: .rdata:00403670o //catch到异常 .text:004012E5                 push    offset aBbbbb   ; "BBBBB" .text:004012EA                 call    ds:__imp__printf .text:004012F0                 add     esp, 4 .text:004012F3                 mov     eax, offset $LN10 .text:004012F8                 retn .text:004012F8 _main           endp                                   //异常处理完成，结束main函数

user: user-3
content: 名字中有catch的部分是要的结果吗
user-0 提问: 数据结构 插入排序  

回复:
user: user-1
content: 修改如下：  #include<stdio.h> typedef int keytype; typedef int infotype; typedef struct { 	keytype key; 	infotype data; }rectype; void insertsort(rectype r[], int n) { 	int i, j; 	rectype tmp; 	for (i = 1; i<n; i++) 	{ 		tmp = r[i]; 		j = i; 		while (j > 0 && tmp.data < r[j - 1].data)  //按data排序 		{ 			r[j] = r[j - 1]; 			j--; 		} 		r[j] = tmp; 	} } int main() { 	rectype a[5] = { {0,4}, {1,2}, {2,6}, {3,8}, {4,5} }; 	int i; 	insertsort(a, 5); 	for (i = 0; i < 5; i++) 	{ 		//cout << a[i] << endl; 		printf("%d\n", a[i].data); 	} 	return 0; } //2 //4 //5 //6 //8  插入排序：http://blog.csdn.net/zhangxiangdavaid/article/details/27373183

user: user-2
content: 排序的代码没错，但这不可能编译过去，cout的头文件没有，自定义类型，传入参数又是整型，改了就好了

user: user-3
content: 有点无厘头吧
user-0 提问: 这个函数最终的输出结果是多少？

回复:
user: user-1
content: # include <stdlib.h>  char * alloc_mem(void) {     return malloc (128); }

user: user-2
content: char *alloc_mem(char **p)         {                 *p = (char *) malloc(128);                 return *p;         }         int main()         {             char *p = NULL;             char tmp[] = "hello world";               alloc_mem(&p);             memcpy(p,tmp,strlen(tmp));                          printf("result: %s\n",p);             return 0;         }

user: user-3
content: p是野指针  代码是错的 结果毫无意义

user: user-4
content: 问题多多 其一char *tmp[]：tmp是一个指针数组，即数组的每个元素 是指向char类型的指针，而你给tmp初始化为“hello world” 其二char *alloc_mem(char *p)         {                 p = (char *) malloc(128);                 return p;         }你给形参p分配空间，而实参p依然未初始化

user: user-5
content: 运行异常.     char *alloc_mem()          {   	char *p;    	p = (char*)malloc(128);                  	return p;          }           int main()          {              	char* p; 	//p = (char*)malloc(128);  	char tmp[] = "hello world";                	p = alloc_mem();              	memcpy(p,tmp,strlen(tmp));                           	printf("result: %s\n",p);     	 	getchar(); 	return 0;          }   这样有输出, 不过分配空间要初始化 为0

user: user-6
content: 修改如下：   char *alloc_mem(char **p) { 	*p = (char *)malloc(128); 	return *p; } int main(void) { 	//char *tmp[] = "hello world"; //这么能编译过吗？  	char *p; 	char tmp[] = "hello world";  	alloc_mem(&p); 	memcpy(p, tmp, strlen(tmp)); 	p[strlen(tmp)] = '\0'; 	printf("result: %s\n", p);  	return 0; } //result: hello world

user: user-7
content: char *tmp[] = "hello world"; 这么能编译过吗？
user-0 提问: C++错误error LNK2019: 无法解析的外部符号 _main，该符号在函数 ___tmainCRTStartup 中被引用

回复:
user: user-1
content: 一般情况下应该是源函数里面没有创建main（）函数，在源.cpp里面加上int main（）{}就好了。

user: user-2
content: void main(void) 改为 int main() 试试看。

user: user-3
content: 你是不是打开过多个解决方案啊,可能是之前的解决方案没有彻底关闭导致的..

user: user-4
content: 函数实现要写在CPP源文件里

user: user-5
content: 这位同学，我用你贴出来的代码建了一个程序，编译通过，既然你的程序是控制台程序，这个问题的原因很有可能就是你的代码中没有main函数，所以报错，你再看看。
user-0 提问: asp.net想学C,能不能推荐点书之类的。

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

user: user-2
content: Windows平台就用vs。Linux下的话codeblocks不错

user: user-3
content: c语言程序设计， 随便哪本都行，谭浩强的也不是不可以。 编译器 vs， keil， gcc， 随意。
user-0 提问: POJ 1056 没用数据结构的东西 自己想了一个 但是runtime error

回复:
user: user-1
content: 建议把题目也贴出来

user: user-0
content: 调试了两天，整个代码的思想，运行结果应该没问题，问题出在我不知道如何来安排这个程序结构，while那个可能是runtime error的原因

user: user-2
content: 数组开大点放全局

user: user-3
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-4
content: char code[8][10];二维数组开大点吧，每个串的01个数不大于10个，如果刚好一个串有10个字符。数组越界了。另外 cnt=1;     while(1)     {         scanf("%s",code[cnt]);         if(code[cnt][0]=='9')             break;         cnt++; cnt为什么要从1开始，这样如果有8个字符串也会导致越界呀。
user-0 提问: C中类型的转换.unsigned char* 和 FILE *

回复:
user: user-1
content: 可以转啊，32位系统下，所有指针都是32位数字啊，没有任何区别。 需要注意的是，这种转换有没有意义而已。

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

user: user-2
content: File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\stdio.h"       63: struct _iobuf {      64:         char *_ptr;      65:         int   _cnt;      66:         char *_base;      67:         int   _flag;      68:         int   _file;      69:         int   _charbuf;      70:         int   _bufsiz;      71:         char *_tmpfname;      72:         };      73: typedef struct _iobuf FILE;

user: user-3
content: 这种转换没有意义

user: user-2
content: 为什么不能？ #include <stdio.h> FILE *f,*f1; unsigned char *p; int i; int main() {     f=fopen("test.txt","w");     if (NULL==f) return 1;     printf("f->_flag==%d,f->_file==%d\n",f->_flag,f->_file);     p=(unsigned char *)f;     printf("p[0..63]:\n");     for (i=0;i<64;i++) printf("%02x ",p[i]);     printf("\n");     f1=(FILE *)p;     printf("f1->_flag==%d,f1->_file==%d\n",f1->_flag,f1->_file);     fclose(f1);     return 0; } //f->_flag==2,f->_file==3 //p[0..63]: //00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //f1->_flag==2,f1->_file==3 //

user: user-4
content: 在标准里面不可以直接转换。 但有的编译器管的很松。  不可以的时候，可以先转换成void *指针，再转换为目标指针。

user: user-5
content: 引用 8 楼 yangyunzhao 的回复:[quote=引用 7 楼 my_live_123 的回复:] 这种转换怎么会没有意义呢？ 假设你从别处得到一段字节流，然后对方告诉你这是个FIFE结构的字节，这种转换肯定有意义的。只不过此种情况用途较少而已！ 底层就是一堆二进制，怎么解释它的数据含义，那是用户说的算！反之，任何结构体，数组，底层都是一堆连续的字节！  晕，我说的是要注意有没有意义，而不是说没有意义。 例如：多线程中传递一个void*，可能是有意义的。但是如果在局域网下，我把A电脑上打开的文件句柄，传递到B电脑上，自然就没有意义了啊。要用户自己判断有没有意义。[/quote]  我说三楼呢，忘了引用了

user: user-1
content: 引用 7 楼 my_live_123 的回复:这种转换怎么会没有意义呢？ 假设你从别处得到一段字节流，然后对方告诉你这是个FIFE结构的字节，这种转换肯定有意义的。只不过此种情况用途较少而已！ 底层就是一堆二进制，怎么解释它的数据含义，那是用户说的算！反之，任何结构体，数组，底层都是一堆连续的字节！  晕，我说的是要注意有没有意义，而不是说没有意义。 例如：多线程中传递一个void*，可能是有意义的。但是如果在局域网下，我把A电脑上打开的文件句柄，传递到B电脑上，自然就没有意义了啊。要用户自己判断有没有意义。

user: user-5
content: 这种转换怎么会没有意义呢？ 假设你从别处得到一段字节流，然后对方告诉你这是个FIFE结构的字节，这种转换肯定有意义的。只不过此种情况用途较少而已！ 底层就是一堆二进制，怎么解释它的数据含义，那是用户说的算！反之，任何结构体，数组，底层都是一堆连续的字节！
user-0 提问: C语言求助

回复:
user: user-0
content: 引用 2 楼 user-2 的回复:我用vs2010试验了一下，是pow函数的返回值问题，好像为double的。強转一下即可。浮点型的乘法 和预期的不一致。 			x=(a[i]-'0')*((int)pow((double)10,n-i-1))+x; 胡乱强转了一下，发现这个可以           x=(a[i]-'0')*(float)pow(10,n-i-1)+x; 百度了下，pow在不同软件的返回值类型不同，真是坑爹

user: user-0
content: 引用 2 楼 user-2 的回复:我用vs2010试验了一下，是pow函数的返回值问题，好像为double的。強转一下即可。浮点型的乘法 和预期的不一致。 			x=(a[i]-'0')*((int)pow((double)10,n-i-1))+x; 按你这样做的话输出来的数值减少幅度更大了……

user: user-1
content: 可能是pow返回浮点数的精度问题，建议x=x*10+a[i]-'0';

user: user-2
content: 我用vs2010试验了一下，是pow函数的返回值问题，好像为double的。強转一下即可。浮点型的乘法 和预期的不一致。 			x=(a[i]-'0')*((int)pow((double)10,n-i-1))+x;

user: user-0
content: 求解算法的错误在哪里
user-0 提问: c++编写的DLL出现一个warning

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:怎么觉得你在晒代码呢    dllimport 是调用者的声名方式 extern "C" _declspec(dllimport) int mytransfunc(char* exportpath,char* importpath);  改成 extern "C" _declspec(dllexport) int mytransfunc(char* exportpath,char* importpath);   最改好成头文件,并用 #define 来控制   大侠，您看看这么写对不对？

user: user-0
content: 引用 3 楼 FightForProgrammer 的回复:see here http://blog.csdn.net/timmy_zhou/article/details/7284110  其实很多问题可以把信息放到搜索框。。。  这个我看了，不是没太明白么。。。

user: user-1
content: see here http://blog.csdn.net/timmy_zhou/article/details/7284110  其实很多问题可以把信息放到搜索框。。。

user: user-2
content: 喵了一下....   // ... // ...     //初始化---获取适配器名单         if(PacketGetAdapterNames((PTSTR)AdapterNames ,&AdapterLength)==false)     {         printf("iiiiiiii");         return -1;     }       temp=AdapterNames;     temp1=AdapterNames;          // ...这段逻辑实在是.............     while((*temp!='\0')||(*(temp-1)!='\0'))// 这里的 *(temp - 1) != '\0'  是一个潜在的溢出问.有可能会导至系统抛 非法访问内存错误     {         if(*temp=='\0')         {             memcpy(AdapterList[j],temp1,(temp-temp1));//void *memcpy( void *dest, const void *src, size_t count )；dest-New buffer；src-Buffer to copy from；count-Number of characters to copy             temp1=temp+1;             j++;         }         temp++;     }  // ... // ...      sprintf (PB,"%s\\%s",importpath,B);     rep(PB,Str1,Str2);     FILE *fpopen = fopen(PA, "rb");   // =============>这里已经打了 PA ....     FILE *fpwr = fopen(PB, "wb");  // ... //  ...      header=&pheader;//链接确认的时候有改变header     for (int t = 0; t < 8; t++)                     {                       //FILE *fpopen = fopen("C:/Users/Frank/Documents/Visual Studio 2012/Projects/bin/regenerate_original_picture.txt", "rb");                     FILE *fpopen = fopen(PA, "rb");     // ==========> 这里继续  open....还在 for里面  //可能你这样做没有什么大问题。但逻辑上好混乱  // 还有  其中有  buf bufhead 等 malloc 出来都没有 free. // 看来楼主要好好查下，还有理一下逻辑

user: user-2
content: 怎么觉得你在晒代码呢    dllimport 是调用者的声名方式 extern "C" _declspec(dllimport) int mytransfunc(char* exportpath,char* importpath);  改成 extern "C" _declspec(dllexport) int mytransfunc(char* exportpath,char* importpath);   最改好成头文件,并用 #define 来控制
user-0 提问: 用递归实现一元钱的兑换方案

回复:
user: user-1
content: int i=0,j=0,k=0;  void fun() { 	int sum = 0;   	sum = i + j*2 + k*5; 	if (sum == 10) 	{ 		printf("%d个1角，%d个2角，%d个5角。\r\n", i, j, k); 	}  	i ++; 	if (sum >= 10) 	{ 		if (i > 10) 		{ 			i = 0; 			j ++; 			if (j > 5) 			{ 				j = 0; 				k++; 				if (k > 2) 				{ 					return; 				} 			} 		} 	} 	 	fun();  }

user: user-0
content: 引用 1 楼 focuslight 的回复:void func() { int i=0; int j=0; int k=0; if (i + j * 2 + k * 5 == 10)                 printf("%d个1毛，%d个2毛，%d个5毛\n", i, j, k); else     func(); }     不行啊     好像溢出了

user: user-2
content: void func() { int i=0; int j=0; int k=0; if (i + j * 2 + k * 5 == 10)                 printf("%d个1毛，%d个2毛，%d个5毛\n", i, j, k); else     func(); }