Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c语言  数据读写

回复:
user: user-1
content: \代表转义符号，如果你要在字符串中表示出\ 必须同时写两个\\才行，代表一个‘\’ 参考：http://www.cnblogs.com/emanlee/archive/2010/05/14/1735274.html

user: user-0
content: 能不能具体说明一下，不是很懂

user: user-2
content: \\  转义字符问题
user-0 提问: 请问 数组会造成内存泄漏

回复:
user: user-1
content: 是不是管道1没有及时取走数据，导致数据在内存中堆积，最后溢出了。

user: user-1
content: 你可以这样试，把写管道1的代码注释掉，其它的都不变，看看内存还会不会不断增大。

user: user-2
content: 内存一直增大并不代表内存泄露  调用的一些系统函数也是会有资源消耗的

user: user-0
content: 引用 9 楼 titan_ysl 的回复:是不是管道1没有及时取走数据，导致数据在内存中堆积，最后溢出了。 管道数据 在读出时应该就不占内存了 web那边接收数据我用ajax同步的  应该不会有数据堆积

user: user-0
content: 我说下流程 大神们帮分析下感谢了   这是一个web - server 交互系统  web页面用定时器（0.5s）循环调用ajax去掉一个cgi程序，这个cgi通过管道实现和server进程间通讯，cgi再把server返回的数据发给页面 是同步的  我怀疑一个地方 但没有依据  管道开关快速读写对内存是否有影响    这是感觉像是 内存泄漏 可我没有malloc 处理数据的函数数组都是局部的 js在浏览器上运行，应该不会占用Linux内存的

user: user-3
content: 引用 4 楼 qq_32778999 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！你好 程序是在arm板上的Linux跑的 我只能用free看已使用内存和剩余内存[/quote] Linux下可以使用top命令。

user: user-0
content: 引用 3 楼 u012097721 的回复:运行内存 和其他因素也有关内存可以肯定被这个程序吃掉了 因为只运行了这一个程序。

user: user-0
content: 引用 1 楼 qq423399099 的回复:用工具可以帮助定位 譬如vld 我下载过 但按照网上的步骤编译会出错 是不支持还是得方法不对 我的程序是在arm板子上跑的

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！你好 程序是在arm板上的Linux跑的 我只能用free看已使用内存和剩余内存

user: user-4
content: 运行内存 和其他因素也有关

user: user-3
content: 检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！

user: user-5
content: 用工具可以帮助定位 譬如vld
user-0 提问: key值最多膨胀64倍,查找时间复杂度为len(key)*4的hash_map

回复:
user: user-0
content: static int hdc_pe4[256][4] = {     {0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,0,3},     {0,0,1,0},{0,0,1,1},{0,0,1,2},{0,0,1,3},     {0,0,2,0},{0,0,2,1},{0,0,2,2},{0,0,2,3},     {0,0,3,0},{0,0,3,1},{0,0,3,2},{0,0,3,3},     {0,1,0,0},{0,1,0,1},{0,1,0,2},{0,1,0,3},     {0,1,1,0},{0,1,1,1},{0,1,1,2},{0,1,1,3},     {0,1,2,0},{0,1,2,1},{0,1,2,2},{0,1,2,3},     {0,1,3,0},{0,1,3,1},{0,1,3,2},{0,1,3,3},     {0,2,0,0},{0,2,0,1},{0,2,0,2},{0,2,0,3},     {0,2,1,0},{0,2,1,1},{0,2,1,2},{0,2,1,3},     {0,2,2,0},{0,2,2,1},{0,2,2,2},{0,2,2,3},     {0,2,3,0},{0,2,3,1},{0,2,3,2},{0,2,3,3},     {0,3,0,0},{0,3,0,1},{0,3,0,2},{0,3,0,3},     {0,3,1,0},{0,3,1,1},{0,3,1,2},{0,3,1,3},     {0,3,2,0},{0,3,2,1},{0,3,2,2},{0,3,2,3},     {0,3,3,0},{0,3,3,1},{0,3,3,2},{0,3,3,3},     {1,0,0,0},{1,0,0,1},{1,0,0,2},{1,0,0,3},     {1,0,1,0},{1,0,1,1},{1,0,1,2},{1,0,1,3},     {1,0,2,0},{1,0,2,1},{1,0,2,2},{1,0,2,3},     {1,0,3,0},{1,0,3,1},{1,0,3,2},{1,0,3,3},     {1,1,0,0},{1,1,0,1},{1,1,0,2},{1,1,0,3},     {1,1,1,0},{1,1,1,1},{1,1,1,2},{1,1,1,3},     {1,1,2,0},{1,1,2,1},{1,1,2,2},{1,1,2,3},     {1,1,3,0},{1,1,3,1},{1,1,3,2},{1,1,3,3},     {1,2,0,0},{1,2,0,1},{1,2,0,2},{1,2,0,3},     {1,2,1,0},{1,2,1,1},{1,2,1,2},{1,2,1,3},     {1,2,2,0},{1,2,2,1},{1,2,2,2},{1,2,2,3},     {1,2,3,0},{1,2,3,1},{1,2,3,2},{1,2,3,3},     {1,3,0,0},{1,3,0,1},{1,3,0,2},{1,3,0,3},     {1,3,1,0},{1,3,1,1},{1,3,1,2},{1,3,1,3},     {1,3,2,0},{1,3,2,1},{1,3,2,2},{1,3,2,3},     {1,3,3,0},{1,3,3,1},{1,3,3,2},{1,3,3,3},     {2,0,0,0},{2,0,0,1},{2,0,0,2},{2,0,0,3},     {2,0,1,0},{2,0,1,1},{2,0,1,2},{2,0,1,3},     {2,0,2,0},{2,0,2,1},{2,0,2,2},{2,0,2,3},     {2,0,3,0},{2,0,3,1},{2,0,3,2},{2,0,3,3},     {2,1,0,0},{2,1,0,1},{2,1,0,2},{2,1,0,3},     {2,1,1,0},{2,1,1,1},{2,1,1,2},{2,1,1,3},     {2,1,2,0},{2,1,2,1},{2,1,2,2},{2,1,2,3},     {2,1,3,0},{2,1,3,1},{2,1,3,2},{2,1,3,3},     {2,2,0,0},{2,2,0,1},{2,2,0,2},{2,2,0,3},     {2,2,1,0},{2,2,1,1},{2,2,1,2},{2,2,1,3},     {2,2,2,0},{2,2,2,1},{2,2,2,2},{2,2,2,3},     {2,2,3,0},{2,2,3,1},{2,2,3,2},{2,2,3,3},     {2,3,0,0},{2,3,0,1},{2,3,0,2},{2,3,0,3},     {2,3,1,0},{2,3,1,1},{2,3,1,2},{2,3,1,3},     {2,3,2,0},{2,3,2,1},{2,3,2,2},{2,3,2,3},     {2,3,3,0},{2,3,3,1},{2,3,3,2},{2,3,3,3},     {3,0,0,0},{3,0,0,1},{3,0,0,2},{3,0,0,3},     {3,0,1,0},{3,0,1,1},{3,0,1,2},{3,0,1,3},     {3,0,2,0},{3,0,2,1},{3,0,2,2},{3,0,2,3},     {3,0,3,0},{3,0,3,1},{3,0,3,2},{3,0,3,3},     {3,1,0,0},{3,1,0,1},{3,1,0,2},{3,1,0,3},     {3,1,1,0},{3,1,1,1},{3,1,1,2},{3,1,1,3},     {3,1,2,0},{3,1,2,1},{3,1,2,2},{3,1,2,3},     {3,1,3,0},{3,1,3,1},{3,1,3,2},{3,1,3,3},     {3,2,0,0},{3,2,0,1},{3,2,0,2},{3,2,0,3},     {3,2,1,0},{3,2,1,1},{3,2,1,2},{3,2,1,3},     {3,2,2,0},{3,2,2,1},{3,2,2,2},{3,2,2,3},     {3,2,3,0},{3,2,3,1},{3,2,3,2},{3,2,3,3},     {3,3,0,0},{3,3,0,1},{3,3,0,2},{3,3,0,3},     {3,3,1,0},{3,3,1,1},{3,3,1,2},{3,3,1,3},     {3,3,2,0},{3,3,2,1},{3,3,2,2},{3,3,2,3},     {3,3,3,0},{3,3,3,1},{3,3,3,2},{3,3,3,3} }; 这是每个字节固定的查找或者建树的规则。

user: user-0
content: 在网上查了资料，与我介绍的这种不同吧， 我设计的是一种树形的存储结构： ，每棵字节树含有256个节点，data节点后面再接入下一个字节树，数据存储的时候按照规则建树，查询的时候只要按照规则查询就行了。

user: user-1
content: 搜“暴雪哈希算法”
user-0 提问: 询问万能的坛友一个C语言算法的名字

回复:
user: user-1
content: 映射

user: user-2
content: 引用 3 楼 adusuccessfully 的回复:[quote=引用 1 楼 lqbk1 的回复:] #include<stdio.h>    signed char myScale(int v){ 	return -128 + ((255*v/100) + 0.5); }    int main()   {    	printf("%d -> %d\n%d -> %d\n%d -> %d\n",0, myScale(0), 50, myScale(50), 100, myScale(100)); 	return 0;   }    一楼挺给力，提供了一个非常好的思路。但我试了下，还是有点问题，这样double转unsigned char 都是向下取整了：  -128+（255*0/100+0.5）是-127.5，输出是-127； -128+（255*50/100+0.5）是-0.5，输出是0； -128+（255*0/100+0.5）是127.5，输出是127；[/quote]  多谢提醒，做个调整也是很简单的事情  #include<stdio.h>    signed char myScale(int v){ 	return -128 + (int)((255.0*v/100) + 0.5); }    int main()   {    	printf("%d -> %d\n%d -> %d\n%d -> %d\n",0, myScale(0), 50, myScale(50), 100, myScale(100)); 	return 0;   }

user: user-0
content: 引用 1 楼 lqbk1 的回复:#include<stdio.h>    signed char myScale(int v){ 	return -128 + ((255*v/100) + 0.5); }    int main()   {    	printf("%d -> %d\n%d -> %d\n%d -> %d\n",0, myScale(0), 50, myScale(50), 100, myScale(100)); 	return 0;   }  思路是对的，谢谢了

user: user-3
content: 引用 1 楼 lqbk1 的回复:#include<stdio.h>    signed char myScale(int v){ 	return -128 + ((255*v/100) + 0.5); }    int main()   {    	printf("%d -> %d\n%d -> %d\n%d -> %d\n",0, myScale(0), 50, myScale(50), 100, myScale(100)); 	return 0;   }    一楼挺给力，提供了一个非常好的思路。但我试了下，还是有点问题，这样double转unsigned char 都是向下取整了：  -128+（255*0/100+0.5）是-127.5，输出是-127； -128+（255*50/100+0.5）是-0.5，输出是0； -128+（255*0/100+0.5）是127.5，输出是127；

user: user-0
content: 引用 1 楼 lqbk1 的回复:#include<stdio.h>    signed char myScale(int v){ 	return -128 + ((255*v/100) + 0.5); }    int main()   {    	printf("%d -> %d\n%d -> %d\n%d -> %d\n",0, myScale(0), 50, myScale(50), 100, myScale(100)); 	return 0;   }  这么晚了，好给力，我先研究研究，到时候给分

user: user-2
content: #include<stdio.h>    signed char myScale(int v){ 	return -128 + ((255*v/100) + 0.5); }    int main()   {    	printf("%d -> %d\n%d -> %d\n%d -> %d\n",0, myScale(0), 50, myScale(50), 100, myScale(100)); 	return 0;   }
user-0 提问: C语言，字符合并

回复:
user: user-1
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-2
content: #include <stdio.h> #include <string.h> void main() { int i,k; unsigned char str[4][10]={"MAC","TIME","MARK","SSID"};  printf("("); for(i=0;i<4;i++){ 	printf("'"); 	printf("%s",str[i]); 	printf("'"); if(i!=3){ 		printf(","); 	} } printf(")");   }

user: user-3
content: 1、strcat字符连接 注意控制格式，可以批量处理 2、sprintf这个比较直接，固定格式

user: user-4
content: sprintf  "（'%s','%s','%s','%s'）"  http://en.cppreference.com/w/c/io/fprintf

user: user-5
content: sprintf
user-0 提问: C语言又一个函数不知道哪里错了

回复:
user: user-1
content: 修改方法：   for(i=0;i<3;i++) 		for(j=i;j<3;j++)

user: user-1
content: 原因很简单，你交换的时候，比如 i = 1, j = 0的时候，你把array[0][1]与array[1][0]交换了一次，当i=0，j=1的时候，你又将它们交换一次，这样又换回原来的了

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

user: user-3
content: #include<stdio.h> void zhuanzhi(int array[][3]) {  	int t,i,j; for(i=0;i<3;i++) {  for(j=i;j<3;j++) { t=array[i][j];     array[i][j]=array[j][i]; array[j][i]=t; } } for(i=0;i<3;i++) for(j=0;j<3;j++) printf("%d ",array[i][j]); } int main() {   int array[3][3];   int m,n;     for(m=0;m<3;m++)  for(n=0;n<3;n++)     scanf("%d",&array[m][n]);      zhuanzhi(array);  printf("\n"); return 0; } 注意那个条件
user-0 提问: c语言怎么把字符串0x123转换成16进制的0x123?

回复:
user: user-1
content: int v; sscanf("0x123","%i",&v); printf("0x%x",v); 这样应该就可以

user: user-2
content: int v; sscanf("0x123","%i",&v); printf("0x%x",v);

user: user-3
content: BOOL HexStringToUnShort(const char *pInHexString,unsigned short &nOut) { 	if(pInHexString==NULL) 	{ 		return FALSE; 	}  	char szBuf[16] = "\0"; 	strcpy(szBuf, pInHexString + 2);  	try 	{ 		nOut=0; 		BYTE nData; 		for(int i=0;i<2;++i) 		{ 			nData=szBuf[i]; 			switch(nData) 			{ 			case '0': 			case '1': 			case '2': 			case '3': 			case '4': 			case '5': 			case '6': 			case '7': 			case '8': 			case '9': 				nData=nData-'0'; 				nOut +=nData<< ((3-i)*4); 				break;  			case 'A': 			case 'B': 			case 'C': 			case 'D': 			case 'E': 			case 'F': 				nData=nData-'A' + 10; 				nOut +=nData<< ((3-i)*4); 				break;  			case 'a': 			case 'b': 			case 'c': 			case 'd': 			case 'e': 			case 'f': 				nData=nData-'a' + 10; 				nOut +=nData<< ((3-i)*4); 				break;	  			default: 				return FALSE; 			} 		} 	} 	catch(...) 	{ 		return FALSE; 	} 	return TRUE; }

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-4
content: char* p = "0x123";           char* str;           long i = strtol(p, &str, 16);     printf("%d", i);

user: user-5
content: atoi遇到第一个数字就取出来，sscanf要对格式。

user: user-6
content: 有个函数叫sscanf

user: user-7
content: 十进制和十六进制的数的内存表现形式是一样的，所以转换为十进制就可以了，具体方法可以参考我的这篇文章 http://blog.csdn.net/cyfcsd/article/details/51381605
user-0 提问: hdu 1002  A + B Problem II  菜鸟求助

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110

user: user-2
content: 参考:  /*  * hdu-1002  * mike-w  * 2012-5-21  */ #include<stdio.h> #include<stdlib.h> #include<string.h>  #define ONLINE_JUDGE  #ifndef ONLINE_JUDGE #include<assert.h> #endif  #define MAX_NUM_LEN 1234 #define BASE 10000 #define WIDTH 4 #define min(a,b) ((a)>(b)?(b):(a))  int conv(char *buf, int *s) { 	int len=strlen(buf); 	int weight=1,pos=MAX_NUM_LEN-1; 	int i; 	memset(s,0,sizeof(int)*MAX_NUM_LEN); 	for(i=1;i<=len;i++) 	{ 		s[pos]+=(buf[len-i]-'0')*weight; 		weight*=10; 		if(weight==BASE) 			weight=1, pos--; 	} 	s[0]=pos; 	return 0; }  int add(int *a1, int *a2, int *s) { 	memset(s,0,sizeof(int)*MAX_NUM_LEN); 	int end=min(a1[0], a2[0]); 	int carry=0,i; 	for(i=MAX_NUM_LEN-1;i>=end;i--) 	{ 		s[i]=a1[i]+a2[i]+carry; 		carry=s[i]/BASE; 		s[i]%=BASE; 	} 	if(carry) 		s[i]=carry,s[0]=i; 	else 		s[0]=i+1; 	return 0; }  int disp(int *s) { 	int i=s[0]; 	while(i<MAX_NUM_LEN && s[i]==0) 		i++; 	if(i==MAX_NUM_LEN) 		putchar('0'); 	else 		printf("%d",s[i]); 	for(i++;i<MAX_NUM_LEN;i++) 		printf("%0*d",WIDTH,s[i]); 	return 0; }  int read_num(int *s) { 	char buf[MAX_NUM_LEN]; 	memset(s,0,sizeof(int)*MAX_NUM_LEN); 	scanf("%s",buf); 	conv(buf,s); 	return 0; }  int main(void) { #ifndef ONLINE_JUDGE 	assert(freopen("in","r",stdin)); #endif 	int ncase,ccase; 	int n1[MAX_NUM_LEN]; 	int n2[MAX_NUM_LEN]; 	int s[MAX_NUM_LEN]; 	scanf("%d",&ncase); 	for(ccase=1;ccase<=ncase;ccase++) 	{ 		if(ccase>1) 			putchar('\n'); 		printf("Case %d:\n",ccase); 		read_num(n1); 		read_num(n2); 		add(n1, n2, s); 		disp(n1) 		printf(" + "); 		disp(n2); 		printf(" = "); 		disp(s); 		printf("\n"); 	} 	return 0; } /*  * extra words:  * 我的存储大数的方法：  * char* -> int*  * 数字在数组中与尾部对齐——不倒序存储！  * 数组的首位标示了数字可能开始的位置，有可能比实际开始位置  * 提前。  * 输出的过程中注意过滤掉数组前面的0  */

user: user-0
content: ACM初学者见谅..试了很多数据都对，可是还是wrong answer
user-0 提问: perror和strerror的问题

回复:
user: user-1
content: 补充一点，perror 是打到 stderr 上的，不是 stdout 。它们会有独立的缓冲。

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout);

user: user-3
content: perror是无缓冲:无缓冲指的是标准的IO库不对字符进行缓冲存储 printf是行缓冲: 在这种情况下，标准的IO在输入和输出中遇到换行符执行IO操作；注意，当流涉及终端时，都使用行缓冲．
user-0 提问: 后缀子串排序

回复:
user: user-1
content: while((gets(str))!=EOF){ 这句  gets返回值是char*，而 EOF是整数类型，不能这样比较  http://en.cppreference.com/w/c/io/gets

user: user-2
content: scanf返回值是接收到的变量值的个数 而EOF一般是-1

user: user-0
content: 引用 2 楼 paschen的回复:while((gets(str))!=EOF){ 这句  gets返回值是char*，而 EOF是整数类型，不能这样比较  http://en.cppreference.com/w/c/io/gets 改成scanf也不对。。。

user: user-3
content: 字斟句酌， 边界条件。
user-0 提问: 关于打开外部exe文件的问题

回复:
user: user-0
content: 引用 7 楼 060的回复:你不行，总的有个现象吧？现象是什么，这样大家才好帮你解决问题。 抱歉！ 代码已经贴出。

user: user-0
content: #include <stdio.h>  #include <windows.h>  int main(int argc,char *argv[]) {  	WinExec("C:/Users/ZGHMVP/Desktop/SD_Setup.exe",SW_SHOW);//无法打开 	printf("%d\n",GetLastError()); 	WinExec("C:/Users/ZGHMVP/Desktop/SD1.4.0.553_CN.exe",SW_SHOW);//正常打开 	printf("%d\n",GetLastError()); 	system("pause"); 	return 0;  }  打印输出 ///////////////// 0 0 请按任意键继续. . . ////////////////////

user: user-1
content: system 或者exec ？ 这俩函数行不。

user: user-2
content: 你不行，总的有个现象吧？现象是什么，这样大家才好帮你解决问题。

user: user-3
content: 贴出你的代码，让大家帮你看看

user: user-4
content: GetLastError

user: user-5
content: 检查函数返回值，并参照MSDN解释，判断失败原因

user: user-6
content: 自己的程序和系统自带的程序不一样，要用完整的路径

user: user-7
content: 试过用管理员权限运行你的程序吗？
user-0 提问: 谢谢大神指导

回复:
user: user-1
content: 也就是*s1=s2改成*s1=*s2 另外char*p 改成char p[] 结果将是1711717

user: user-0
content: 引用 9 楼 小灸舞的回复:你这个不是要逆序输出？ 蒽蒽，我懂了，谢谢指导

user: user-1
content: 这样改：   #include<stdio.h> #include<string.h> void fun(char *w, int n) { 	char t, *s1, *s2; 	s1 = w, s2 = w + n - 1; 	while(s1 < s2) 	{ 		t = *s1++; 		*s1 = *s2; 		*s2 = t; 	} } main() { 	char p[] = "1234567"; 	fun(p, strlen(p)); 	puts(p); }

user: user-2
content: 你这个不是要逆序输出？

user: user-0
content: 引用 7 楼 小灸舞的回复:我第三条讲了，不要将--和++写在一个语句里，否则的话你进行之后的赋值替换的时候，指针已经指到下一个字符了 初始：1234567（s1指向1，s2指向7） t = *s1++;//t为1，然后s1++指向了2 *s1 = *s2--;//*s2为7，将7赋给s1指向的位置!!!!(此时s1是指向2的，你将2替换成了7)，字符串变成了1734567 *s2 = t;//s2已经--过了，所以指向的是6，然后用1替换掉6，字符串变成了1734517  楼主应该明白了吧.................. 不对的，按你这个改顺序是7654321，可是你按我的那个打一次结果是1711717，而且标准答案就是1711717

user: user-2
content: 我第三条讲了，不要将--和++写在一个语句里，否则的话你进行之后的赋值替换的时候，指针已经指到下一个字符了 初始：1234567（s1指向1，s2指向7） t = *s1++;//t为1，然后s1++指向了2 *s1 = *s2--;//*s2为7，将7赋给s1指向的位置!!!!(此时s1是指向2的，你将2替换成了7)，字符串变成了1734567 *s2 = t;//s2已经--过了，所以指向的是6，然后用1替换掉6，字符串变成了1734517  楼主应该明白了吧..................

user: user-0
content: 引用 4 楼 小灸舞的回复:有3个错误： 1.p = "1234567";代表p指向的是常量区的常量字符串"1234567"，该区域一般是禁止进行写操作的 2.楼主没有让s2-- 3.逻辑上也有问题，不要将--和++写在一个语句里，否则的话你进行之后的赋值替换的时候，指针已经指到下一个字符了  #include<stdio.h> #include<string.h> void fun(char *w, int n) { 	char t, *s1, *s2; 	s1 = w, s2 = w + n - 1; 	while(s1 < s2) 	{ 		t = *s1; 		*s1 = *s2; 		*s2 = t; 		s1++; 		s2--; 	} }  void main() { 	char p[] = "1234567"; 	fun(p, strlen(p)); 	puts(p); }  结果为什么是1711717，能指导一下吗

user: user-3
content: 4楼正解

user: user-2
content: 有3个错误： 1.p = "1234567";代表p指向的是常量区的常量字符串"1234567"，该区域一般是禁止进行写操作的 2.楼主没有让s2-- 3.逻辑上也有问题，不要将--和++写在一个语句里，否则的话你进行之后的赋值替换的时候，指针已经指到下一个字符了  #include<stdio.h> #include<string.h> void fun(char *w, int n) { 	char t, *s1, *s2; 	s1 = w, s2 = w + n - 1; 	while(s1 < s2) 	{ 		t = *s1; 		*s1 = *s2; 		*s2 = t; 		s1++; 		s2--; 	} }  void main() { 	char p[] = "1234567"; 	fun(p, strlen(p)); 	puts(p); }

user: user-0
content: 引用 1 楼 user-4的回复:char *p; p = "1234567"; =================== 改为：char p[] = "1234567"; 对了，那个循环中条件是*s1≡s2--,可是结果为什么是1711717，还有那个你说的字符改法有什么区别

user: user-0
content: 引用 1 楼 user-4的回复:char *p; p = "1234567"; =================== 改为：char p[] = "1234567"; 可是这样修改程序是没错了，可结果是乱码

user: user-4
content: char *p; p = "1234567"; =================== 改为：char p[] = "1234567";
user-0 提问: c语言编译错误求助

回复:
user: user-1
content: 引用 4 楼 ghx287524027 的回复:#include"stdio.h" float max(float a[]) {     float *p=a,*i=a;     for(;p<p+9;p++)         if(*a<*(p+1))         {             *a=*(p+1);             i=(p+1);         }     printf("这个最大的数是数组的第%d位元素",i-a);     return *a; }       int main() {     float a[10],*p=a,maxnum;     for(;p<p+10;p++)         scanf("%f",p);     maxnum=max(a);     printf(":%f",maxnum); 	return 0; } 建议你也跟着楼主一起改行。

user: user-2
content: #include"stdio.h" float max(float a[]) {     float *p=a,*i=a;     for(;p<p+9;p++)         if(*a<*(p+1))         {             *a=*(p+1);             i=(p+1);         }     printf("这个最大的数是数组的第%d位元素",i-a);     return *a; }       int main() {     float a[10],*p=a,maxnum;     for(;p<p+10;p++)         scanf("%f",p);     maxnum=max(a);     printf(":%f",maxnum); 	return 0; }

user: user-1
content: #include <stdio.h> float max(float a[]) {     float *p=a,*i=a;     for(;p<&a[9];p++)         if(*a<*(p+1))         {             *a=*(p+1);             i=p+1;         }     printf("这个最大的数是数组的第%d（从0开始）个元素",i-&a[0]);     return *a; }  int main() {     float a[10],*p=a,maxnum;     for(;p<&a[10];p++)         scanf("%f",p);     maxnum=max(a);     printf(":%f",maxnum);     return 0; }  建议楼主趁早改行。

user: user-3
content: maxnum=max(a[10]);  改成  maxnum=max(a);   另外建议把max函数换个名字，否则可能与max宏重名

user: user-4
content: 1.编译错误： 传参写错了，a[10]代表a数组第11个元素，直接传数组名就行了 maxnum=max(a[10]);改为maxnum=max(a); 2.逻辑错误： main和max函数里for循环里p<p+10都是不对的，这个恒满足，应该改成p<a+10  #include"stdio.h" float max(float a[]) { 	float *p=a,*i=a; 	for(;p<a+9;p++) 		if(*a<*(p+1)) 		{ 			*a=*(p+1); 			i=(p+1); 		} 		printf("这个最大的数是数组的第%d位元素",i-a); 		return *a; }  void main() { 	float a[10],*p=a,maxnum; 	for(;p<a+10;p++) 		scanf("%f",p); 	maxnum=max(a); 	printf(":%f",maxnum); }
user-0 提问: 请教一个函数局部变量生命周期问题

回复:
user: user-1
content: 要是想在函数内部创建一个在全局可用的变量，可以用new操作符。

user: user-2
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-3
content: 有效最多能说明运气好，调用prinft后无效因为printf函数参数以及内部变量需要在栈上开辟空间，将你之前的值覆盖了

user: user-4
content: 房东租给你了一间房子，配了一把钥匙给你，结果到期了，你还占着房子以为是你的，结果房东找到了新租客，你的东西全被房东扔了，然后你还理直气壮的拿着钥匙问为什么。

user: user-5
content: 行为未定义，anything is possible

user: user-6
content: 在调用了int *test(int a)函数之后，内存被释放，但是此处，虽然*p指向已经被释放区域，但是此处内存可能没有被覆盖，等到第二次打印的时候也许此处内存被覆盖了，所以打印会出现任意情况

user: user-7
content: test函数返回后局部变量销毁，但是仍然有指针指向这块内存，这块内存随时有可能被修改成不同的内容，所以得到了不确定的结果

user: user-0
content: 所以如果换一个编译环境的话结果可能完全不一样是吗？

user: user-8
content: 本来就是一个未定义的行为，发生什么结果都不奇怪。 毕竟你让p指向了一个形参的地址（局部变量）
user-0 提问: 请教：这种情形下，不写return有没有问题？

回复:
user: user-1
content: 尝试运行了一下是没问题

user: user-2
content: 第一种写法有的编译器无法通过，即使通过了也会出现未定义行为。

user: user-3
content: 楼主第一种方法是想通过f1内的EAX寄存器里值作为返回值？ PS：暂且不说第一种方式在有的编译器里编译都过不去。

user: user-4
content: 凡是有返回值的函数，他的每条路径，都应该有返回值。

user: user-5
content: 如果不需要取g函数都返回值 没return也没关系 需要去g函数都返回值就必须有return

user: user-4
content: 本质上是不一样的  不过凑巧的话，可能是一样的
user-0 提问: 代码段（.text）在内存中的地址为什么比数据段的要大？

回复:
user: user-1
content: 这个应该是局部变量，存放在栈中的，地址应该是大的啊

user: user-2
content: 引用 8 楼 spiritmg 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] 这个问题要回到当初ROM中烧代码，RAM中存数据的那个年代了…… 这么说来就远了，估计得搞个单片机来测试下。不纠结了先这样吧。[/quote] ROM的地址一般总比RAM的地址大。

user: user-0
content: 引用 6 楼 paschen 的回复:请参看PE文件结构，各个块之间并没有顺序要求  恩，确实是。 我估计段在内存中的位置可能与PE loader的实现有关。暂时先不纠结这个问题了。windows总是给人意外的惊喜，linux就比较按规矩来。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:这个问题要回到当初ROM中烧代码，RAM中存数据的那个年代了…… 这么说来就远了，估计得搞个单片机来测试下。不纠结了先这样吧。

user: user-2
content: 这个问题要回到当初ROM中烧代码，RAM中存数据的那个年代了……

user: user-3
content: 请参看PE文件结构，各个块之间并没有顺序要求

user: user-4
content: 引用 4 楼 spiritmg 的回复:[quote=引用 3 楼 akirya 的回复:] [quote=引用 2 楼 spiritmg 的回复:] [quote=引用 1 楼 qq423399099 的回复:] DEBUG模式变量周围需要存放调试信息，所以相差的距离大于4个字节。 楼主改成RELEASE就会发现两者相差4字节了  多谢版主，确实是这样的，改为release后就是4个字节了。  第1个问题，还是不懂，请大神们赐教。  [/quote] 这个没有为什么吧，没有规定的事情。[/quote]  从我网上查的资料看，程序在内存中的映射应该是有一定规律的，我把工程->属性中改为固定基地址，每次运行程序中各个变量的地址就不变了。而且对于Linux系统来说，代码段的基地址永远是0x08048000。[/quote] 得有明确的规定才能说不符合的是错的，规律不能证明什么。

user: user-0
content: 引用 3 楼 akirya 的回复:[quote=引用 2 楼 spiritmg 的回复:] [quote=引用 1 楼 qq423399099 的回复:] DEBUG模式变量周围需要存放调试信息，所以相差的距离大于4个字节。 楼主改成RELEASE就会发现两者相差4字节了  多谢版主，确实是这样的，改为release后就是4个字节了。  第1个问题，还是不懂，请大神们赐教。  [/quote] 这个没有为什么吧，没有规定的事情。[/quote]  从我网上查的资料看，程序在内存中的映射应该是有一定规律的，我把工程->属性中改为固定基地址，每次运行程序中各个变量的地址就不变了。而且对于Linux系统来说，代码段的基地址永远是0x08048000。

user: user-4
content: 引用 2 楼 spiritmg 的回复:[quote=引用 1 楼 qq423399099 的回复:] DEBUG模式变量周围需要存放调试信息，所以相差的距离大于4个字节。 楼主改成RELEASE就会发现两者相差4字节了  多谢版主，确实是这样的，改为release后就是4个字节了。  第1个问题，还是不懂，请大神们赐教。  [/quote] 这个没有为什么吧，没有规定的事情。

user: user-0
content: 引用 1 楼 qq423399099 的回复:DEBUG模式变量周围需要存放调试信息，所以相差的距离大于4个字节。 楼主改成RELEASE就会发现两者相差4字节了  多谢版主，确实是这样的，改为release后就是4个字节了。  第1个问题，还是不懂，请大神们赐教。

user: user-5
content: DEBUG模式变量周围需要存放调试信息，所以相差的距离大于4个字节。 楼主改成RELEASE就会发现两者相差4字节了

user: user-6
content: 引用 9 楼 spiritmg 的回复:[quote=引用 6 楼 paschen 的回复:] 请参看PE文件结构，各个块之间并没有顺序要求  恩，确实是。 我估计段在内存中的位置可能与PE loader的实现有关。暂时先不纠结这个问题了。windows总是给人意外的惊喜，linux就比较按规矩来。[/quote]  你看的规矩是不是都是根据 Linux 写的 ..
user-0 提问: 新人求助

回复:
user: user-0
content: 引用 11 楼 qq423399099 的回复:else putchar(m);表示如果输入的字符不是s里面的字符就原样输出 如果输入的字符是s里面的字符，输出的其实是s数组里和m字符相同的前一个字符  这个明白 我的意思是按题目的意思 怎么会输入除s之外的字符

user: user-1
content: else putchar(m);表示如果输入的字符不是s里面的字符就原样输出 如果输入的字符是s里面的字符，输出的其实是s数组里和m字符相同的前一个字符

user: user-2
content: 引用 9 楼 k1287447887 的回复:[quote=引用 8 楼 firmbank 的回复:] s[i]&&s[i]!=m 这个s[I] 是为了读到s结尾时退出循环，防止内存溢出。 引用 8 楼 firmbank 的回复:s[i]&&s[i]!=m 这个s[I] 是为了读到s结尾时退出循环，防止内存溢出。          else putchar(m);这句话有什么用吗 我实在想不到输入什么会用到这句话[/quote] 这个是当m在s[]中未曾出现时将你输入都字符输出来。

user: user-0
content: 引用 8 楼 firmbank 的回复:s[i]&&s[i]!=m 这个s[I] 是为了读到s结尾时退出循环，防止内存溢出。 引用 8 楼 firmbank 的回复:s[i]&&s[i]!=m 这个s[I] 是为了读到s结尾时退出循环，防止内存溢出。          else putchar(m);这句话有什么用吗 我实在想不到输入什么会用到这句话

user: user-2
content: s[i]&&s[i]!=m 这个s[I] 是为了读到s结尾时退出循环，防止内存溢出。

user: user-0
content: 引用 4 楼 qq423399099 的回复:1.s[i]&&s[i]!=m表示既要保证字符数组s没有循环到末尾，同时也要满足s[i]!=m 2.if(s[i])表示判断是不是由于s循环到末尾才跳出的for循环  1. 如果不加s[i]，而只有s[i]!=m这一个条件为什么不行呢  2.有一个新问题 else那句话有什么用吗   题目是这样的：输入一个错位后敲出的字符串（所有字母均大写），输出打字员本来想打出的句子。输入保证合法，即一定是错位之后的字符串。例如输入中不会出现大写字母A。

user: user-1
content: 如果循环到字符数组末尾了那么s[i]将等于'\0' 此时if(s[i])将是false

user: user-3
content: 引用 3 楼 k1287447887 的回复:[quote=引用 1 楼 user-3 的回复:] 1、意思是要同时满足s[i] 与 s[i]!=m 两个条件才执行 2、s[i] 不为0时执行if，否则不执行   不懂怎么回帖= =我这么回的话你是不是能看到   1.  s[i]这个条件指的是什么 2.  为啥要s[i]不为0啊 这个0指的是数组s里面那个0吗[/quote]  1、 s[i]这个条件已经在你上面第二个问题里回复你了 2、是字符数组 s的索引为 i 的字符不是'\0'

user: user-1
content: 1.s[i]&&s[i]!=m表示既要保证字符数组s没有循环到末尾，同时也要满足s[i]!=m 2.if(s[i])表示判断是不是由于s循环到末尾才跳出的for循环

user: user-0
content: 引用 1 楼 user-3 的回复:1、意思是要同时满足s[i] 与 s[i]!=m 两个条件才执行 2、s[i] 不为0时执行if，否则不执行   不懂怎么回帖= =我这么回的话你是不是能看到   1.  s[i]这个条件指的是什么 2.  为啥要s[i]不为0啊 这个0指的是数组s里面那个0吗

user: user-0
content: 1.  s[i]这个条件指的是什么 2.  为啥要s[i]不为0啊 这个0指的是数组s里面那个0吗

user: user-3
content: 1、意思是要同时满足s[i] 与 s[i]!=m 两个条件才执行 2、s[i] 不为0时执行if，否则不执行
user-0 提问: struct 结构体初始化问题。

回复:
user: user-1
content: 引用 8 楼 xiaozi5230 的回复:[quote=引用 4 楼 qq423399099 的回复:] 用_tcscpy赋值 用_stprintf打印 定义了UNICODE，TCHAR就是wchar_t。 没定义UNICODE,TCHAR就是char  我是想就是说，定义了对象以后直接用里面成员，不需要在初始化了，前提是在结构体那里构造函数的时候初始化 [/quote]  malloc / calloc申请内存，当用malloc的时候用 memset 初始化内存空间，calloc本身包含初始化的作用

user: user-0
content: 引用 4 楼 qq423399099 的回复:用_tcscpy赋值 用_stprintf打印 定义了UNICODE，TCHAR就是wchar_t。 没定义UNICODE,TCHAR就是char  我是想就是说，定义了对象以后直接用里面成员，不需要在初始化了，前提是在结构体那里构造函数的时候初始化

user: user-2
content: 引用 6 楼 paschen 的回复:其次，构造函数初始列表初始化的是成员变量，而不是其他，所以你只能这样写：   struct bRegAccount { 	int Number; 	TCHAR ID[30]; 	TCHAR PassWord[30]; 	TCHAR PassWordOK[30]; 	TCHAR TwoPassWord[30];  public: 	bRegAccount() :Number(0),ID(""),PassWord(""),PassWordOK(""),TwoPassWord(""){} };  我在VS这样试还是不行的

user: user-3
content: 其次，构造函数初始列表初始化的是成员变量，而不是其他，所以你只能这样写：   struct bRegAccount { 	int Number; 	TCHAR ID[30]; 	TCHAR PassWord[30]; 	TCHAR PassWordOK[30]; 	TCHAR TwoPassWord[30];  public: 	bRegAccount() :Number(0),ID(""),PassWord(""),PassWordOK(""),TwoPassWord(""){} };

user: user-3
content: 首先说一下，你结构体里的数组有效索引只是0-29，这种语句PassWord[30] = '\0';已经越界了

user: user-4
content: 用_tcscpy赋值 用_stprintf打印 定义了UNICODE，TCHAR就是wchar_t。 没定义UNICODE,TCHAR就是char

user: user-0
content: 引用 1 楼 user-5 的回复:ID[30] = '\0'; PassWord[30] = '\0'; PassWordOK[30] = '\0'; TwoPassWord[30] = '\0'; lz你这是在玩火....这几行是什么意思....  请问是不是错了。正确如何写，初始化

user: user-0
content: 引用 1 楼 user-5 的回复:ID[30] = '\0'; PassWord[30] = '\0'; PassWordOK[30] = '\0'; TwoPassWord[30] = '\0'; lz你这是在玩火....这几行是什么意思....  初始化啊

user: user-5
content: ID[30] = '\0'; PassWord[30] = '\0'; PassWordOK[30] = '\0'; TwoPassWord[30] = '\0'; lz你这是在玩火....这几行是什么意思....
user-0 提问: 求助贴。。最近老师叫做课程设计，然而遇到点问题，请大神指导一下

回复:
user: user-0
content: 已解决，谢谢1楼

user: user-1
content: 请那些喜欢将数组作为函数参数传来传去的码农思考一下为什么不把整个互联网内容当作函数参数传来传去呢？

user: user-2
content: 楼上大大已经给代码了我还是混个回答，个人想法是返回数组或者指针

user: user-3
content: 1.函数调用传参的时候不需要写类型 2.函数声明的时候需要写类型 3.你的paixu函数里不需要再调用shuzua函数了 4.paixu函数里出现了把两个a写成了b  #include <stdio.h> #include <stdlib.h>                            // 包含rand()函数说明 #include <time.h>  void shuzua(int*a,int i);  void paixu(int*a,int i);  void shuzua(int*a,int i) {    	int j, tmp;           	srand((unsigned)time( NULL ) );//用当前时间种子重置随机数生成器，使每次运行生成不同的随机数 	for(i=0;i<100;i++)                          // 生成100个数 	{ 		while(1)                             //生成1个数 		{ 			tmp=100 *rand()/ RAND_MAX +1;   // 产生随机数 			for(j=0;j<i;j++)                  //判断是否重复 				if( tmp==a[j] ) 					break; 			if(j==i)                     // 找到1个数 			{ 				a[i]=tmp;            //入队列 				break;                 // 开始下一轮 			} 		}  	}   } void paixu(int*a,int i)//冒泡排序 {  	int m,n,temp; 	//shuzua(); 	//	strcpy(char*b,char*a);   	for(m=0;m<100-1;m++)//冒泡排序 	{ 		for(n=0;n<100-1-m;n++) 		{ 			if(a[n]<a[n+1]) 			{ 				temp=a[n]; 				a[n]=a[n+1]; 				a[n+1]=temp; 			} 		}  	} 	for(i=0;i<100;i++) 	{ 		printf("%d\t",a[i]); 	}   } void main() { 	int a[100],i; 	shuzua(a,i); 	paixu(a,i); }
user-0 提问: 异或算法、除数、模数，看题。

回复:
user: user-1
content: 这不是通联支付的KEY吗

user: user-2
content: 大胆假设，小心求证。

user: user-0
content: 引用 6 楼 ForestDB 的回复:[quote=引用 5 楼 afdlig 的回复:] [quote=引用 2 楼 ForestDB 的回复:] 将除数与模数......  将‘商’与‘余数’......  如果不是LZ打错的话。。。。我没打错，这是原话。我只是怀疑错了。那你将你所说的'商'与'余数'亦或之后得出那个结果了么。。。我来试试[/quote] 3L... [/quote]嗯，没错。是商与余数。一直被套在这里。谢谢啦~

user: user-3
content: 引用 5 楼 afdlig 的回复:[quote=引用 2 楼 ForestDB 的回复:] 将除数与模数......  将‘商’与‘余数’......  如果不是LZ打错的话。。。。我没打错，这是原话。我只是怀疑错了。那你将你所说的'商'与'余数'亦或之后得出那个结果了么。。。我来试试[/quote] 3L...

user: user-0
content: 引用 2 楼 ForestDB 的回复:将除数与模数......  将‘商’与‘余数’......  如果不是LZ打错的话。。。。我没打错，这是原话。我只是怀疑错了。那你将你所说的'商'与'余数'亦或之后得出那个结果了么。。。我来试试

user: user-4
content: 第一步：将56781234变为35 36 37 38 31 32 33 34 第二步：将第一步转化的结果分别与CD A8 C1 AA D0 C2 D0 CB进行异或操作 第三步：分别用第二步的结果除以9得到商，模9得到余数，将商和余数进行异或操作得到最后结果

user: user-3
content: ‘5’ == 0x35  0x35 ^ 0xCD == 0xF8  0xF8 / 0x09 == 0x1B  0xF8 % 0x09 == 0x05  0x1B ^ 0x05 == 0x1E

user: user-3
content: 将除数与模数......  将‘商’与‘余数’......  如果不是LZ打错的话。。。。

user: user-0
content: 35 36 37 38 31 32 33 34 CD A8 C1 AA D0 C2 D0 CB八字节亦或得 F8 9E F6 92 E1 F0 E3 FF
user-0 提问: 求请教。。。。不知道哪里写错了

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

user: user-1
content: #include <stdio.h> int main() {     int a[10],max,min,i,t,y;     printf("please enter 10 numbers:");fflush(stdout);     for(i=0;i<10;i++)         scanf("%d",&a[i]);     y=0;     max=a[y];     for(i=1;i<10;i++) {         if (a[i]>max) {             y=i;             max=a[y];         }     }     t=a[y];a[y]=a[0];a[0]=t;     y=1;     min=a[y];     for(i=2;i<10;i++) {         if(a[i]<min) {             y=i;             min=a[y];         }     }     t=a[y];a[y]=a[9];a[9]=t;     for(i=0;i<10;i++)         printf("%d ",a[i]);     return 0; }

user: user-2
content: 逻辑有点问题： 1.下标初始化放在for循环之前 2.保存最大值和最小值的下标才对 3.交换数值应该放在for循环之后 4.打印的时候两个数之间加上空格  #include<stdio.h> int main() { 	int a[10],max,min,i,t,y; 	printf("please enter 10 numbers:"); 	for(i=0;i<10;i++) 		scanf("%d",&a[i]); 	max=0; 	for(i=1;i<10;i++) 	{ 		if(a[i]>a[max]) 			max=i; 	} 	t=a[max];a[max]=a[0];a[0]=t; 	min=0; 	for(i=1;i<10;i++) 	{ 	if(a[i]<a[min]) 		min=i; 	} 	y=a[min];a[min]=a[9];a[9]=y;  	for(i=0;i<10;i++) 		printf("%d ",a[i]); 	return 0; }   代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 最大值能对换，但是最小值不行，怎么解决哦。。。

user: user-3
content: 找个调试工具跟一下试试
user-0 提问: C语言新手程序求帮助，程序里生成不了文件，有个文件无法输出

回复:
user: user-1
content: 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-2
content: 这程序我这都编不过去，而且好多地方写的都比较乱。先自己调试一下吧。另外，char function() 返回的是字符，char *function() 返回的是字符串
user-0 提问: 一个关于c语言结构体及其调用的问题

回复:
user: user-1
content: #include<stdio.h> struct fish { 	const char *name; 	const char *species; 	int teeth; 	int age; } ;  void catalog(struct fish f) { 	printf("%s is a %s with %i teeth. He is %i.\n", f.name, f.species, f.teeth, f.age); }  void label(struct fish f) { 	printf("Name: %s\nSpecies: %s\n%i years old,\n%i teeth\n", f.name, f.species, f.teeth, f.age); }   int main() { 	struct fish snappy = {"Snappy", "Piraha", 69, 4}; 	catalog(snappy); 	label(snappy); 	return 0; }

user: user-2
content: void catalog(struct fish f) { printf("%s is a %s with %i teeth. He is %i.\n", f,name, f.species, f.teeth, f.age); }  其余的类似

user: user-0
content: 引用 2 楼 qq423399099 的回复: #include<stdio.h> struct fish { 	const char *name; 	const char *species; 	int teeth; 	int age; } ;  void catalog(struct fish f) { 	printf("%s is a %s with %i teeth. He is %i.\n", f.name, f.species, f.teeth, f.age); }  void label(struct fish f) { 	printf("Name: %s\nSpecies: %s\n%i years old,\n%i teeth\n", f.name, f.species, f.teeth, f.age); }   int main() { 	struct fish snappy = {"Snappy", "Piraha", 69, 4}; 	catalog(snappy); 	label(snappy); 	return 0; }   这个代码是怎么添加的啊，好神奇，嗷嗷嗷~~~

user: user-0
content: 引用 1 楼 user-2 的回复:void catalog(struct fish f) { printf("%s is a %s with %i teeth. He is %i.\n", f,name, f.species, f.teeth, f.age); }  其余的类似 谢谢，谢谢~
user-0 提问: 为什么出现了乱码

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

user: user-2
content: if(b[i]>=0&&b[i]<=9) c[k-1-i]=b[i]-'0'; 转化有问题

user: user-3
content: 楼主把这两句想清楚：c[k-1-i]=b[i]-'0';  c[k-1-i]=b[i]-10+'A'; 要把整数数字转换为对应字符数字，应该是用+  下面是帮你改的：   #include<stdio.h> void main() { 	int a,k=0; 	scanf("%d",&a); 	int t=a; 	while(a!=0) 	{    		a=a/16; 		k++; 	} 	int b[100]; 	for(int i=0;i<k;i++) 	{ 		b[i]=t%16; 		t=t/16; 	} 	char c[100]; 	for(int i=0;i<k;i++) 	{ 		if(b[i]>=0&&b[i]<=9)  			c[k-1-i]=b[i]+'0'; 		else  			c[k-1-i]=b[i]+10+'0'; 	} 	c[k]='\0'; 	printf("%s",c); }
user-0 提问: c语言例题

回复:
user: user-1
content: 引用 2 楼 github_27756899 的回复:前面错了          leap=0表示m不是素数。   正解

user: user-2
content: 根据你程序推断为判断素数的一个标记

user: user-3
content: leap用于标识是否为素数，h是每行的素数个数，按代码的意思是每行输出10个然后换行。

user: user-4
content: leap只是一个标志位而已，用来标记哪些是素数哪些不是，最后根据标志位的状态确定是不是输出该数

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

user: user-6
content: 前面错了          leap=0表示m不是素数。

user: user-6
content: leap是素数的标志，即leap=1表示m是素数，leap=1表示m不是素数。 if(leap){printf("%-4d",m);   //如果leap=1输出素数m。
user-0 提问: 怎么把我的程序改为多文件格式？？

回复:
user: user-0
content: 是的，我不知道该如何分开存放，哪一部分放哪些东西呢？

user: user-1
content: 什么叫多文件格式？是指把你这个程序的内容放在多个文件吗？你可以利用头文件与源文件分开存放的方法，这样可以将很长的代码分成多个文件存储和修改。
user-0 提问:  毫无头绪报错error C2143

回复:
user: user-0
content: 好蠢啊，谢谢

user: user-1
content: 大括号不对称，楼主把代码写规范了自然就看出来了

user: user-2
content: 语法错误,仔细检查错误的行数~

user: user-3
content: k++;后面多了一个}

user: user-4
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-5
content: k++ 后面有两个花括号

user: user-6
content: #include<stdio.h> void main() { 	int a,k=0; 	scanf("%d",&a); 	int t=a; 	while(a!=0) 	{    		a=a/16; 		k++; 	} 	int b[100]; }

user: user-7
content: k++;} }这2个大括号，删除一个就好了

user: user-8
content: int b上边那个}删了
user-0 提问: 关于 fgets 的一个疑问，小白求大神！！

回复:
user: user-1
content: 让str指向的内存空间是可写的。 方式1：  char buffer[24]; char *str = buffer;  方式2：  char *str = (char *)malloc(24 * sizeof(char));

user: user-0
content: 引用 1 楼 qq423399099 的回复:你第一种方式： char *str; str = NULL; 意味着str指向了地址为0的区域（该区域禁止写操作） 然后你fgets(str, 1024, stdin);试图向地址为0的区域写入读到的数据，肯定报错了  而第二种方式char str[24];是在栈上分配的空间，可以写入  这样，那我知道了，另外就是如果就想通过第一种方式做可以怎么做？

user: user-2
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-3
content: fget的第一个参数虽然是一个指针，但不能是空指针

user: user-4
content: 第一个方法里的str是NULL   NULL是0,那么0地址是系统保护地址是不容许读写内容的！

user: user-5
content: C 语言保证 0 （NULL）不是有效的数据地址，即值为 NULL的指针不会指向任何数据内容，因此你不可以向它写入任何内容。

user: user-6
content: 指针接收的是首地址，数组接收的是值，那么问题来了，你第一种写法数据保存在那里？

user: user-1
content: 你第一种方式： char *str; str = NULL; 意味着str指向了地址为0的区域（该区域禁止写操作） 然后你fgets(str, 1024, stdin);试图向地址为0的区域写入读到的数据，肯定报错了  而第二种方式char str[24];是在栈上分配的空间，可以写入
user-0 提问: 询问一个C++的问题

回复:
user: user-1
content: //Student.h class Student { private: 	 char num[20]; 	 char name[60]; 	 char address[60]; 	 Student *next; public: 	 Student* Create(); }; int n; //Student.cpp Student* Student::Create()//定义函数。此函数返回一个指向链表头的指针 { 		struct Student *head; 		struct Student *p1,*p2; 		n=0; 		p1=p2=new Student(); 		printf("请依次输入学生的信息，输入学号为零时退出。\n"); 		printf("学号\t姓名\t地址\n"); 		scanf("%s%s%s",p1->name,p1->address);     head=NULL;     while(p1->num[0]!='0')//当学号是0时，退出 		{ 				n=n+1; 				if(n==1) 					head=p1; 				else 					p2->next=p1; 				p2=p1; 				p1=new Student();//开辟动态存储区，把起始地址付给p1 				printf("学号\t姓名\t地址\n"); 				scanf("%s%s%s",p1->num,p1->name,p1->address); 		} 		p2->next=NULL;      return(head); }

user: user-1
content: 把结构体改为类型？是指改为class么？

user: user-2
content: 什么叫“将结构体改为类型”？是想少打struct吗？  struct student; typedef student* pstudent;  struct student {    char num[20];    char name[60];    char address[60];    pstudent next; }; int n;//n为全局变量，本文件模块中各函数均可使用它 pstudent creat()//定义函数。此函数返回一个指向链表头的指针 {     pstudent head;     pstudent p1,p2;     ... } 这样子？
user-0 提问: 单链表逆转问题

回复:
user: user-1
content: for 中的next 赋值问题

user: user-2
content: 搞清楚单链表的操作~

user: user-3
content: next没有赋初值。 参考：http://www.cnblogs.com/pianoid/archive/2011/05/03/reverse-a-singly-linked-list.html
user-0 提问: 请问cmd界面下运行这个程序

回复:
user: user-1
content: 引用 7 楼 BEE_HY 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  我说的也是控制台环境。 程序员个人发展路线？ [/quote] IT专业科班生成长历程。

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  我说的也是控制台环境。 程序员个人发展路线？

user: user-3
content: if(fclose(in)!=0||fclose(out)!=0).....

user: user-4
content: 引用 4 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  我说的也是控制台环境。  好吧，我错了。我用了windows开发的习惯思维！

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

user: user-4
content: 引用 1 楼 user-5 的回复:lz太叼，居然用DOS，膜拜  楼主说的应该是控制台环境吧？

user: user-1
content: 比如你的exe文件名为MYPROG.EXE，在D:\MYDIR目录下 D: CD \MYDIR MYPROG IN   将在当前目录下生成一个文件IN.RED IN.RED内容为IN中每三个字符留一个字符的内容

user: user-5
content: lz太叼，居然用DOS，膜拜
user-0 提问: 在下小白，希望大家帮忙把下面一段程序，画成流程图

回复:
user: user-1
content: 难道大家不是先画流程图然后才写代码么？

user: user-2
content: 引用 2 楼 C0909 的回复:难道大家不是先画流程图然后才写代码么？ 至少我不是。

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

回复:
user: user-1
content: 仅供参考：#include <afxdisp.h> #include <stdio.h> #include <stdlib.h> int main(int argc, TCHAR* argv[]) {     COleDateTime t;     COleDateTimeSpan ts;     CString s,fmt;     int nYear;     int nMonth;     int nDay;     int nHour;     int nMin;     int nSec;     int lDays;     int nHours;     int nMins;     int nSecs;     int i,N;     // initialize MFC and print and error on failure     if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {         printf("Fatal Error: MFC initialization failed\n");         return 1;     }     if (argc<13) {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 2;     }     if (stricmp(argv[12],"SQL")==0) fmt="%Y-%m-%d %H:%M:%S";     else if (stricmp(argv[12],"YYYY")==0) fmt="%Y%m%d %H%M%S";     else if (stricmp(argv[12],"YY")==0) fmt="%y%m%d %H%M%S";     else {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 3;     }     nYear =atoi(argv[ 1]);     nMonth=atoi(argv[ 2]);     nDay  =atoi(argv[ 3]);     nHour =atoi(argv[ 4]);     nMin  =atoi(argv[ 5]);     nSec  =atoi(argv[ 6]);     lDays =atoi(argv[ 7]);     nHours=atoi(argv[ 8]);     nMins =atoi(argv[ 9]);     nSecs =atoi(argv[10]);     N     =atoi(argv[11]);     if (N<=0) {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 4;     }     t=COleDateTime( nYear, nMonth, nDay, nHour, nMin, nSec);     ts=COleDateTimeSpan( lDays, nHours, nMins, nSecs );     for (i=1;i<=N;i++) {         s=t.Format(fmt);         printf("%08d %s\n",i,s);         t=t+ts;     }     return 0; }

user: user-2
content: #include<stdio.h> void main() { 	int year,month,day; 	int leapyear=0;//闰年时使用  	int daytime=0; 	int sum; 	static int month_date[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 	printf("请输入日期:(例如:2010 5 27)"); 	scanf("%d%d%d",&year,&month,&day);  	if(year<=0||month>12||month<1)//判断输入是否正确  	{ 		printf("Error!\n"); 		return; 	} 	if(year%400==0||(year%4==0&&year%100!=0))//判断是否为闰年  		leapyear=1;//是就加1 	if(month==2)//判断日是否输入正确，2月是特殊的因为分闰年和平年  	{  		if((month_date[month-1]+leapyear)<day||day<=0) 	{ 		printf("Error!\n"); 		return; 	} 	}  	if(month!=2)//当输入不是2月时，判断输入  	{ 		if(month_date[month-1]<day||day<=0) 		{ 			printf("Error!\n"); 			return; 		} 	} 	printf("\n请输入天数："); 	scanf("%d",&daytime);//输入第N天后  	if(daytime<0) 	{ 		printf("Error!\n"); 		return; 	} 	sum=daytime+day;//当前日期与N天相加 	do 	{ 		if(month==2)//判断当月是不是二月份  			month_date[month-1]+=leapyear; 		if(sum>month_date[month-1]) 		{ 			sum-=month_date[month-1]; 			month++;//超过当月天数，加一个月  			if(month==13)//当月份超过12月时，重新返到1月  			{ 				year++;//加一年  				if(year%400==0||(year%4==0&&year%100!=0))//判断加一年后是不是闰年  					leapyear=1; 				else 					leapyear=0;//不是闰年则为0  				month=1;//因为12月的下一个月是1月  			} 		} 	}while(sum>month_date[month-1]);//当加起来的天数少于当月的天数就停止循环  	day=sum; 	printf("\n第%d天后是%d %d %d\n",daytime,year,month,day);//输出  }
user-0 提问: 一个计算第一个单词长度的函数

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

user: user-2
content: 建议自己进行调试，逐步查看变量和内存的变化，发现问题比直接解决问题更有意义~
user-0 提问: 关于访问1048 ＊ 2000 的数组时出现的奇怪的内存错误

回复:
user: user-1
content: 数组已占用整个栈，当给其它局部变量分配栈空间时就溢出了

user: user-2
content: 太大的数组不要放在栈上，请使用动态分配内存，否则会导致栈溢出

user: user-3
content: 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-4
content: 堆栈溢出了~

user: user-5
content: 栈溢出了吧，一般栈空间只有几m

user: user-6
content: 栈溢出了吧？ 你这个a数组已经有1048*2000*4字节了。  把这个变量申请成静态的或者全局变量就好了。

user: user-3
content: 编译器在这种情况下至少应该给个警告，我觉得。
user-0 提问: 新手自编一段代码输出结果不对，求指教

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

user: user-2
content: 1   #include <stdio.h>                                                                                                                                                                                          1 int main()     2 {              3     int a,b,c,d,x;   4     char e;    5     scanf("%c",&e);   6     x = e - 'a'+1;   7     for(a=0;a<=x;a++)   8     {   9     |   for(b=0; b<x-a; b++)  10     |   |   printf(" ");  11     |   for(c=0; c<=x-b; c++)  12     |   |   printf("%c",'A' + c);  13     |   for(d=0; d < c-1; d++)  14     |   |   printf("%c",'A' + d);     15     |   printf("\n");  16     }         17     return 0;  18 }   找到行数和字母的规律吧,另外建议注意编写格式和变量命名: 1   #include <stdio.h>                                                                                                                                                                                          1                2 int main()     3 {              4     int i, j, k, m, x;     5     int ch; >>  6     scanf("%c",&ch);     7     x = ch - 'a'+1;     8     //printf("%d\n", x);     9     for(i = 0; i < x; i++) {    10     |   for(j = 0; j < x-i; j++)    11     |   |   printf(" ");    12     |   for(k=0; k <= x-j; k++)    13     |   |   //printf("%c",'A'+x-j);    14     |   |   printf("%c", 'A'+k);    15     |   for(m = 0; m < k-1; m++)    16     |   |   printf("%c",'A'+m);    17     |   printf("\n");    18     }         19     return 0;    20 }

user: user-0
content: #include <stdio.h> int main() { 	int a,b,c,d,x; 	char XX; 	scanf("%c",&XX); 	x=XX-'A'; 	for(a=0;a<=x;a++) 	{ 		for(b=0;b<x-a;b++) printf(" "); 		for(c=0;c<=x-b;c++) printf("%c",'A'+c); 		for(d=c-1;d>0;d--) printf("%c",'A'+d-1); 		printf("\n"); 	} 	return 0;    }
user-0 提问: nodejs+socket.io做的服务器，怎么用C语言实现客户端来与服务器通讯，因为socketio客户端没有c语言版本的

回复:
user: user-1
content: socket 虽然用法不一样,但是效果是一样的

user: user-2
content: 建议楼主先学会使用抓包软件比如wireshark

user: user-3
content: 引用 2 楼 u012880683 的回复:[quote=引用 1 楼 user-3 的回复:] 当然可以了，试下  怎么试呢？ 你对socket.io有研究吗，有大体思路吗[/quote]没有，但这应该有样例，写一个简单的应该可以的

user: user-0
content: 引用 1 楼 user-3 的回复:当然可以了，试下  怎么试呢？ 你对socket.io有研究吗，有大体思路吗

user: user-3
content: 当然可以了，试下
user-0 提问: 子函数线性顺序表的建立、插入和删除与主函数之间怎么实现参数的传递

回复:
user: user-1
content: buil中m没有初始化就使用了，主函数中m,n,i,b都没有初始化就使用

user: user-2
content: buil函数完全不对。 m没有初始化，直接malloc了m*sizeof(int)的空间 而且函数也没有return 给n赋值成0也毫无意义，根本不会影响到main函数里的n

user: user-3
content: 这个书上和网上都有现成的吧~感觉你都没理解了什么是顺序表，以及顺序表的操作原理~

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

user: user-0
content: 除了没有初始化以及子函数buil没有return之外，主函数与另外那两个子函数之间的参数传递有问题吗？
user-0 提问: 求教为啥写进程字符串无法写入

回复:
user: user-1
content: 具体原因有很多的啊， 端口设置错误，传值错误，还有就是速率不匹配。可以通过返回值或者GetLastError来具体分析。  建议这类的代码还是不要自己造轮子，网上下一个吧。
user-0 提问: 用循环嵌套语句输出九九乘法表出错

回复:
user: user-1
content: #include <stdio.h> int main (void) {     int i;     int j;     int n;      for(i=1;i<10;i++)     {          for(j=1;j<=i;j++)          {                n=i*j;                printf("%d*%d=%d ",i,j,n);           }          printf("\n");       }      return 0; }

user: user-0
content: j不是在开头已经置1了吗，为什么下面还需要

user: user-2
content: 3个错误： 1.printf("4d\n",i*j);改为printf("%4d\n",i*j); 2.while(i<10)后面多了分号 3.j应该在每次while循环都重新置为1  #include<stdio.h> void main() { 	int i,j; 	i=1; 	while(i<10) 	{ 		j=1; 		do{ 			if(j==9) 				printf("%4d\n",i*j); 			else 				printf("%4d",i*j); 			j++; 		}while(j<10); 		i++; 	} }

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-4
content: "4d\n"错了
user-0 提问: 关于程序内存问题

回复:
user: user-1
content: 没代码没真相……  main还没进去？ 那可能是某个全局或者静态变量要初始化，楼主在构造函数里想new好大好大好大好大的内存，比方说10g，你机器内存没那么多，爆了

user: user-2
content: 你看看编译有没警告什么的

user: user-3
content: 通过调用堆栈来判断出错位置

user: user-0
content: 引用没代码没真相……  main还没进去？ 那可能是某个全局或者静态变量要初始化，楼主在构造函数里想new好大好大好大好大的内存，比方说10g，你机器内存没那么多，爆了 根本就没有用到new

user: user-0
content: 引用你看看编译有没警告什么的 有，和警告有关系？

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

user: user-0
content: 引用main函数怎么写的？进调试看看 第一句打了断点都没有进去

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

user: user-5
content: main函数怎么写的？进调试看看
user-0 提问: 为什么t2非要加绝对值以后，结果才会正确呢？不加pi=1，π=4，t2不是个正数吗？加与不加为什么有这么大的差别？

回复:
user: user-1
content: 问题解决了记得结帖

user: user-0
content: 谢谢！你说的太对了，怎么没有初始化呢？自己看了半天都看不出来，一语惊醒梦中人啊！ 引用 1 楼 qq423399099 的回复:你的t2都没初始化过，里面可能存了一个垃圾值（极有可能是个负数） 在VS下值是-9.2559631349317831e061（是个负数） 所以不满足while循环，直接就输出结果了 PS:加了绝对值的话就会进入while循环，建议可以初始化成1.0

user: user-1
content: 你的t2都没初始化过，里面可能存了一个垃圾值（极有可能是个负数） 在VS下值是-9.2559631349317831e061（是个负数） 所以不满足while循环，直接就输出结果了 PS:加了绝对值的话就会进入while循环，建议可以初始化成1.0
user-0 提问: 求使用win 32进行串口通信多线程的例子，希望能进行字符串传输

回复:
user: user-1
content: 去codeproject上找吧，非常的多。 还有事例，代码也很成熟。

user: user-2
content: 百度搜“C源代码 串口通信 多线程”
user-0 提问: C语言输入函数scanf()和gets()，gets函数输入的次数比输入的n少一次，这是为什么？

回复:
user: user-0
content: 谢谢，问题已经解决了，我刚学C语言，大概知道是输入的n的占了一次，但是不知道要怎么解决。函数是fflush()，不是flush()

user: user-1
content: scanf("%d",&n);在输入时候你会按3，回车，然后scanf取到了3，回车保留在了缓冲区里，当你用gets(name)的时候,name获取到了一个回车，可以用fflush(stdin);清空缓冲区，放在get（name）前。 我是那么理解的

user: user-2
content: 你for循环之前的scanf("%d",&n);会有遗留下来的回车符在输入缓冲区 gets可以读入回车符而跳过第一次for循环，而scanf不行 你在scanf("%d",&n);后面加上flush(stdin);清空输入缓冲区两者就一样了
user-0 提问: 为啥会乱码啊！！！！

回复:
user: user-1
content: for(p=a;p<(p+8);p++)这句写的不对 你的p<(p+8)恒成立，直到程序越界崩溃 应该改成for(p=a;p<(a+8);p++)

user: user-0