Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求助【链表】：请各位看看这代码有没有内存泄露问题？

回复:
user: user-0
content: 之前对链表为非空情况是有点错误，函数已经改正，我只是疑问针对create_link函数内部的malloc是否需要free，在何时何地free？ 附：改正代码 struct node* create_link(struct node *head) { 	struct node *p1,*p2; 	int length=0;  	printf("输入需要创建的链表长度:\n"); 	scanf("%d",&length);  	p1 = p2 = (struct node*)malloc(sizeof(struct node)); 	 	assert(p1 != NULL); 	if(p1 == NULL) 	{ 		printf("申请内存失败，程序退出！\n"); 		exit (1); 	}  	p1->next = NULL; 	p1->pre = NULL; 	printf("输入新增链表节点数值:"); 	scanf("%d",&p1->data); 	if(head == NULL) 	{ 		head = p1; 	} 	else 	{ 		head->next = p2; 		p2->pre = head; 		p2->next = NULL; 	}  	while(length != 0) 	{ 		length--; 		if(length == 0) 		{ 			break; 		}  		p1 = (struct node*)malloc(sizeof(struct node)); 		assert(p1 != NULL); 		if(p1 == NULL) 		{ 			printf("申请内存失败，程序退出！\n"); 			exit (-1); 		} 		p1->next = NULL; 		p1->pre = NULL; 		printf("输入新增链表节点数值:"); 		scanf("%d",&p1->data);  		p2->next = p1; 		p1->pre = p2; 		p1->next = NULL; 		p2 = p1; 	}  		//free (p1); 		return head; }

user: user-1
content: 可以用VLD检测有没内存泄露： http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio

user: user-2
content: while(length != 0)  	{  		if(head == NULL)  		{  			head = p1;  		}  		else  		{ 楼主这里head不是NULL，是不是想遍历链表  			p2->next = p1;  但是这时候p1跟p2是一样的  就变成了自己的next指向自己  			p1->pre = p2;  自己的前面还是自己 跟原来的链表没有关系，不符合楼主的原意。  			p1->next = NULL;  			p2 = p1;  		}  		length--;  		if(length == 0)  		{  			break;  		}  		p1 = (struct node*)malloc(sizeof(struct node));  		assert(p1 != NULL);  		if(p1 == NULL)  		{  			printf("申请内存失败，程序退出！\n");  			exit (-1);  		}    		p1->next = NULL;  		p1->pre = NULL;  		printf("输入新增链表节点数值:");  		scanf("%d",&p1->data);  	}  	//free (p1);  	return head;  } 手机打字不方便，不过希望楼主能看明白
user-0 提问: 重言式判别和二叉树有啥关系?由于刚学二叉树 对这个很困惑

回复:
user: user-1
content: 这是把表达式，表示成一颗二叉树  非叶子节点是运算符 左右子树，分别是两个子表达式（操作数），子表达式递归，表示为 运算算符，子表达式（操作数） 叶子节点为操作数 注意括号和优先级
user-0 提问: C语言中文本文件和二进制文件的区别

回复:
user: user-1
content: 其实没有什么区别 记事本是最常用的打开文本文件的工具,如果你将"abc"以二进制形式写入.dat文件中,用记事本就会出现乱码 在不需要查看内容的情况下,最好用二进制读写,简单,出错概率小

user: user-2
content: abc三个字符用文本方式与二进制方式均为3个字节，如果存的是字符，用二进制和文本存不同在于如果有\n，windows下用文本存会被换成\r\n，而二进制会保持原字符  如果存的是数字，就差别很远了，用文本存你要把数字先转换成字符串，这样可能就会产生一些误差了  如果文件不需要在文本方式下查看的话，都建议用二进制存

user: user-0
content: 那么含有数据'abc'的二进制文件在磁盘中占多少个字节呢？如果存放成文本文件又应该占多少个字节呢

user: user-3
content: 二进制文件包含非文本性的内容， 当然，如果你把二进制文件写成文本格式的文件，就是文本文件。

user: user-4
content: 关键还得看你用什么权限写进去

user: user-5
content: 字符串有区别也很小，主要区别是非字符串数据 例如 int double  这些类型，一般按照内存所占字节数原样存储 另外 二进制读写 fread fwrite 和 文本读写 fscanf fprintf 处理数据的方式是不同的 fwrite 把内存中的数据，按照所占字节数，直接写到文件中，会有字节序问题 fprintf 把数据，按照类型转换成字符（串）格式，写到文件中。 单字节字符串是不会有字节顺序问题的， 因为统一按照地址从低到高读写。 其他还有控制字符的转换问题

user: user-6
content: 主要区别就是\r\n的处理，二进制文件不关心具体是什么，一切都是字节
user-0 提问: printf会改变if的判断？求助大神啊！

回复:
user: user-0
content: 引用 17 楼 lm_whales 的回复:[quote=引用 16 楼 a615350236 的回复:] 感谢楼上各位，问题解决了。 问题出在多线程上，和printf以及printf缓冲区无关。 程序中有多个线程，因为使用了printf导致所在程序耗时过多，影响到其它线程赋值，printf所在线程耗时不同会造成不同结果。 之后用sleep验证，不同的sleep时间会有不同结果！ 真是搞死人了。。。以后验证数据正确性只能用相同的数量的printf 多线程输入输出需要同步，Sleep 是不管事的 你可以输出到文件（不同步的话，不同线程，输出到不同的文件），并记录时间 以此进行验证，[/quote] sleep在我这个程序中是有用的，这几个线程交互比较复杂，数据也是以数据流的形式输入，线程执行时间不同得到的结果也不同（针对每个线程内部）。 你说的那个方法学习了，但对这个程序意义不大

user: user-1
content: 引用 16 楼 a615350236 的回复:感谢楼上各位，问题解决了。 问题出在多线程上，和printf以及printf缓冲区无关。 程序中有多个线程，因为使用了printf导致所在程序耗时过多，影响到其它线程赋值，printf所在线程耗时不同会造成不同结果。 之后用sleep验证，不同的sleep时间会有不同结果！ 真是搞死人了。。。以后验证数据正确性只能用相同的数量的printf 多线程输入输出需要同步，Sleep 是不管事的 你可以输出到文件（不同步的话，不同线程，输出到不同的文件），并记录时间 以此进行验证，

user: user-0
content: 感谢楼上各位，问题解决了。 问题出在多线程上，和printf以及printf缓冲区无关。 程序中有多个线程，因为使用了printf导致所在程序耗时过多，影响到其它线程赋值，printf所在线程耗时不同会造成不同结果。 之后用sleep验证，不同的sleep时间会有不同结果！ 真是搞死人了。。。以后验证数据正确性只能用相同的数量的printf

user: user-0
content: 引用 14 楼 lm_whales 的回复:这和你的c这只指针指向的数据结构的意义相关 这应该是某种逻辑错误， 当然也可能是，某些地方疏忽，或者不严谨造成的，但是跟这个printf 关系不大，还是别处在找找吧 最新发现，stdout缓冲区改大的话，前面数据不会出错，至于后面数据是否出错未知

user: user-0
content: 引用 5 楼 wang0635 的回复:加了一行代码，编译连接后，可能你预想的那些地址就不准了，if 中的条件就不满足了 （根据 c->addr 乱猜的） 引用 5 楼 wang0635 的回复:加了一行代码，编译连接后，可能你预想的那些地址就不准了，if 中的条件就不满足了 （根据 c->addr 乱猜的） 可加的那行代码，没有改变任何东西

user: user-0
content: 引用 4 楼 user-3 的回复:[quote=引用 3 楼 a615350236 的回复:] [quote=引用 1 楼 user-3 的回复:] 不知你哪里是不是搞错了，单步调试看下 linux下怎样单步调试？程序有几万行GDB不顶用[/quote]  加断点然后运行，一般IDE都有这功能[/quote] 我用的vim，不行

user: user-0
content: 引用 8 楼 lm_whales 的回复:c->addr == 267912？ 我要检测的就是这个数据

user: user-1
content: c->addr == 267912？

user: user-1
content: 这和你的c这只指针指向的数据结构的意义相关 这应该是某种逻辑错误， 当然也可能是，某些地方疏忽，或者不严谨造成的，但是跟这个printf 关系不大，还是别处在找找吧

user: user-0
content: 引用 12 楼 lm_whales 的回复:这个错误，和你的printf 应该没啥关系 那加了一行printf后，结果就变了，不知道哪里出问题

user: user-1
content: 这个错误，和你的printf 应该没啥关系

user: user-0
content: 引用 10 楼 lm_whales 的回复:不知道你这个数据是什么类型，你这个应用是什么平台的应用？ 如果是单片之上的应用，还真很难说 因为C,C++内存地址的分配，程序员很难控制。 如果是，PC一般不会有升么影响，除非你这个应用比较特殊。 PC上的应用，c是一个结构体，c->addr的类型是int64_t

user: user-1
content: 不知道你这个数据是什么类型，你这个应用是什么平台的应用？ 如果是单片之上的应用，还真很难说 因为C,C++内存地址的分配，程序员很难控制。 如果是，PC一般不会有升么影响，除非你这个应用比较特殊。

user: user-2
content: 加了一行代码，编译连接后，可能你预想的那些地址就不准了，if 中的条件就不满足了 （根据 c->addr 乱猜的）

user: user-3
content: 引用 3 楼 a615350236 的回复:[quote=引用 1 楼 user-3 的回复:] 不知你哪里是不是搞错了，单步调试看下 linux下怎样单步调试？程序有几万行GDB不顶用[/quote]  加断点然后运行，一般IDE都有这功能

user: user-0
content: linux下怎样单步调试？程序有几万行GDB不顶用

user: user-0
content: 引用 1 楼 user-3 的回复:不知你哪里是不是搞错了，单步调试看下 linux下怎样单步调试？程序有几万行GDB不顶用

user: user-3
content: 不知你哪里是不是搞错了，单步调试看下
user-0 提问: 求助，这一段代码怎么在运行后的窗口中输入字符串，而不是直接在main（）中赋值？

回复:
user: user-1
content: scanf getchar gets

user: user-2
content: 至于数组大小，设置个差不多的就是了，例如100，4096 等等 如果还觉得小了，动态分配内存，不够就扩大

user: user-2
content: 输入字符串很容易啊 如果格式不对，你可以先判断，不对的不处理。

user: user-3
content: scanf不是支持从控制台读取输入吗
user-0 提问: 大家来找茬 脑袋已经晕了 求大牛指点

回复:
user: user-1
content: 正常情况下调用函数只能有一个返回值，在你的代码里可以用两个指针来代替x1 x2 ,而且，在q大于零与小于零可以调用同一个函数，不用分开写。你还需判断当a=b=0时，x为任意值，x=0时的情况。

user: user-2
content: 分类讨论 a=0 a!=0

user: user-3
content: 函数a3要返回一个值啊
user-0 提问: 请问VS2015写C的时候，为什么调试不跳转到函数呢,比如到一个函数的地方就那一条函数语句,不跳到函数体,VS2013就到函数体继续执行，为什么呢?

回复:
user: user-1
content: 除了楼上说的F10,F11的区别，还有Debug与Release的区别，Debug默认不会对程序做任何优化，而Release可能会把函数优化成内联的形式。

user: user-2
content: 引用 1 楼 adusuccessfully 的回复:把断点打在 print(7);这一行，调试F11，就进入到 print函数体内。 楼主可以百度下调试程序时F10与F11的用法： F10,F11是调试时用的，俩者区别在于F10是逐过程调试，F11是逐语句调试。F11比F10细一些，但考虑到时间问题和部分代码需要快速跳过原因，2者结合用效果最佳。++

user: user-3
content: F10是逐过程调试,F11是逐语句调试, 你可以将断点设置在函数中 到那一句就会进入

user: user-4
content: 分步入和步过的区别，步入才跟进函数，有时你不可能有精力去一直跟踪函数里每一条语句，所以应该根据不同情况采用不同方式

user: user-5
content: 把断点打在 print(7);这一行，调试F11，就进入到 print函数体内。 楼主可以百度下调试程序时F10与F11的用法： F10,F11是调试时用的，俩者区别在于F10是逐过程调试，F11是逐语句调试。F11比F10细一些，但考虑到时间问题和部分代码需要快速跳过原因，2者结合用效果最佳。
user-0 提问: 求问可以让EXE文件自动运行吗

回复:
user: user-1
content: 很多病毒还有汇编做呢，比如当年的CIH病毒，可以把自身得到各个可执行文件中，这样可以自我恢复 如果要开机启动，直接改注册表就行，如果想在运行其他程序绑定着被运行那就比较高端的话题了，但这些操作如果你装了杀软都会被拦下来

user: user-2
content: 应该有的病毒是会自动运行的，比如有的病毒Iexplores.exe，双击硬盘符就会运行。 下载杀毒软件查杀下就好了
user-0 提问: 有大神吗？求帮忙

回复:
user: user-0
content: 为什么输入文件路径后显示无法打开

user: user-1
content: 学会看错误提示：  f 函数中 str变量没有声明  另外他提示'fp' 变量声明了没被引用，不过这只是一个警告而已

user: user-2
content: 这样改 #include<stdio.h> #include<string.h> #include<stdlib.h> int main()//定义主函数 { 	int f(char file[]);//声明函数 	FILE *fp; 	char file1[50],file2[50]; 	printf("请输入所用的文件名："); 	scanf("%s,%s",file1,file2);//输入两个文件名 	f(file1);//执行函数 	f(file2); 	if(f(file1)==f(file2)) 		printf("这两个同学存在抄袭"); 	else 		printf("这两个同学不存在抄袭");//判断是否抄袭 	return 0; } int f(char file[]) { 	int n,sum[1000]={0}; 	FILE *fp;//定义文件指针 	if((fp=fopen(file,"r"))==NULL)//判断文件是否存在并打开 	{ 		printf("无法打开此文件："); 		exit(0); 	} 	char str[10000] = {0}; 	fgets(str,10000,fp);//从fp指向的文件读入字符串，并存入字符数组str中 	 	while (fgets(str,10000,fp)!=NULL)  	{	 		n=strlen(str);//测定str的字符长度 		for(int i=0;i<n;i++) 		{ 			if(str[i]=='i'&&str[i+1]=='f')//对if计数 				sum[0]+=1; 			if(str[i]=='d'&&str[i+1]=='o')//对do计数 				sum[1]+=1; 			if(str[i]=='w'&&str[i+1]=='h'&&str[i+2]=='i'&&str[i+3]=='l'&&str[i+4]=='e')//对while计数 				sum[2]+=1; 			if(str[i]=='f'&&str[i+1]=='o'&&str[i+2]=='p'&&str[i+3]=='e'&&str[i+4]=='n')//对fopen计数 				sum[3]+=1; 			if(str[i]=='f'&&str[i+1]=='g'&&str[i+2]=='e'&&str[i+3]=='t'&&str[i+4]=='s')//对fgets计数 				sum[4]+=1; 			if(str[i]=='f'&&str[i+1]=='c'&&str[i+2]=='l'&&str[i+3]=='o'&&str[i+4]=='s'&&str[i+5]=='e')//对fclose计数 				sum[5]+=1; 			if(str[i]=='f'&&str[i+1]=='p'&&str[i+2]=='u'&&str[i+3]=='t'&&str[i+4]=='s')//对fputs计数 				sum[6]+=1; 			if(str[i]=='s'&&str[i+1]=='t'&&str[i+2]=='r'&&str[i+3]=='l'&&str[i+4]=='e'&&str[i+5]=='n')//对strlen计数 				sum[7]+=1; 			if(str[i]=='f'&&str[i+1]=='o'&&str[i+2]=='r')//对for计数 				sum[8]+=1; 			if(str[i]=='s'&&str[i+1]=='t'&&str[i+2]=='r'&&str[i+3]=='u'&&str[i+4]=='c'&&str[i+5]=='t')//对struct计数 				sum[9]+=1; 		} 	} 	strcpy(file,(char*)sum);//将sum数组复制给file数组 	fclose(fp);//关闭文件 	return 1; }

user: user-0
content: 而且已经把单斜杠换成双斜杠

user: user-0
content: 我是直接将文件拖拽入输入黑框的

user: user-1
content: 引用 3 楼 qchengzi 的回复:为什么输入文件路径后显示无法打开  文件路径是否存在  https://msdn.microsoft.com/en-us/library/yeby3zcb.aspx
user-0 提问: 这段程序哪哪有问题啊

回复:
user: user-1
content: 不能把一个函数定义在另一个函数里

user: user-2
content: LZ真会提问。 既不给报错信息，也没有错误描述。 给了一大段代码，格式又不用论坛的代码规整。
user-0 提问: 关于scanf中读取域宽的问题

回复:
user: user-1
content: 编译器如果懒惰一点，那就按照定义顺序，安排。这也是经常会看到的。 如果想精细一点，那就会不耐其烦的依照某种策略安排变量内存位置。

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

user: user-3
content: 编译愿意把谁放在前面都可以，也可以在两者之间插入任意长度的 padding (就是说两者也不一定就是连续的）。  不同的编译选项，程序上的（细微的）不同，不同的版本，可能都会导致结果的不同。  至于 gcc 具体规则，恐怕要去读 gcc 的代码了。

user: user-4
content: 输出两个连续的局部变量真的会影响它们在栈里面的相对地址吗？ 这个问题呢不好回答，具体怎么实现呢，我觉得和编译器有关系，就看编译器模型中占内存如何抉择 但是我要提醒下，你这样的代码并不可靠~~~ 也许不同版本不同厂家的编译器编译出来，运行结果不一样

user: user-4
content: 输出两个连续的局部变量真的会影响它们在栈里面的相对地址吗？ 这个问题呢不好回答，具体怎么实现呢，我觉得和编译器有关系，就看编译器模型中占内存如何抉择 但是我要提醒下，你这样的代码并不可靠~~~ 也许不同版本不同厂家的编译器编译出来，运行结果不一样

user: user-5
content: 可能编译器是这样想的, 谁先用就先给谁地址, 第1个先出现&a, 先分配, 第2个从压栈顺序来说是先出现&b,  以上纯属猜想, 这用法应该也算是越界了

user: user-4
content: 输出两个连续的局部变量真的会影响它们在栈里面的相对地址吗？ 这个问题呢不好回答，具体怎么实现呢，我觉得和编译器有关系，就看编译器模型中占内存如何抉择 但是我要提醒下，你这样的代码并不可靠~~~ 也许不同版本不同厂家的编译器编译出来，运行结果不一样

user: user-0
content: 额，图片好像不挂vpn看不见(贴的外链)，无所谓了，上面已经有运行结果说明了

user: user-0
content: 额，图片好像不挂vpn看不见(贴的外链)，无所谓了，上面已经有运行结果说明了

user: user-0
content: 引用 9 楼 lm_whales的回复:编译器如果懒惰一点，那就按照定义顺序，安排。这也是经常会看到的。 如果想精细一点，那就会不耐其烦的依照某种策略安排变量内存位置。 谢谢大家的回答，我明白了
user-0 提问: 帮忙设计个程序

回复:
user: user-1
content: 我觉可以这样采用位图操作 利用20个bit表示20个灯笼亮的情况 利用20个位表示操作情况 比如1表示亮 0表示不亮 对某个位进行异或操作 1^1=0   0^0=0 1^0=1 0^1=1 比如a c d f g 表示为0000 0000 0000 0110 1101          b k f m g 表示为    0000 0000 1000 0110 0010 进行异或操作后就是acdbkm   然后针对具体数据完成 你的代码呗  我的算法就是这样咯

user: user-1
content: 我觉可以这样采用位图操作 利用20个bit表示20个灯笼亮的情况 利用20个位表示操作情况 比如1表示亮 0表示不亮 对某个位进行异或操作 1^1=0   0^0=0 1^0=1 0^1=1 比如a c d f g 表示为0000 0000 0000 0110 1101          b k f m g 表示为    0000 0000 1000 0110 0010 进行异或操作后就是acdbkm   然后针对具体数据完成 你的代码呗  我的算法就是这样咯

user: user-1
content: 我觉可以这样采用位图操作 利用20个bit表示20个灯笼亮的情况 利用20个位表示操作情况 比如1表示亮 0表示不亮 对某个位进行异或操作 1^1=0   0^0=0 1^0=1 0^1=1 比如a c d f g 表示为0000 0000 0000 0110 1101          b k f m g 表示为    0000 0000 1000 0110 0010 进行异或操作后就是acdbkm   然后针对具体数据完成 你的代码呗  我的算法就是这样咯

user: user-2
content: 7个按钮, 最多2^7种组合, 直接枚举一下就可以了

user: user-3
content: 每个按钮控制的灯数量随机 那么按下多少按钮后灯笼能全亮，这个多少是不确定的 是要求最少按下多少个按钮？ 最少按下一个，即按下的那个按钮控制着除开始亮着之外的所有等

user: user-0
content: 引用 1 楼 fly_dragon_fly的回复:7个按钮, 最多2^7种组合, 直接枚举一下就可以了 如何穷举? 我只是求个程序 我没学C语言啊
user-0 提问: 小白问题，宏的用法 

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-2
content: 求解答啊,我也想知道

user: user-3
content: 就是直接替换

user: user-4
content: 只是相当于一个函数头和一些定义 你把宏展开就知道了
user-0 提问: C语言如何让编译界面显示输出内容

回复:
user: user-1
content: 在return 0;前面加上system("pause");//暂停 需要头文件#include <iostream>

user: user-2
content: Alt - F5 ？记不清了，太多年了

user: user-3
content: 引用 2 楼 both_war的回复:还真是，请问 return 0; 是什么意思，能不能设置成 按任意键继续 加个循环，循环中调用getchar，有字符则输出，否则等待输入

user: user-0
content: 还真是，请问 return 0; 是什么意思，能不能设置成 按任意键继续

user: user-4
content: 在return 0;前面加一句getchar();

user: user-5
content: TC的IDE内部一直都是可以见到结果的 选择菜单 File DOS shell 就可以了 输入exit 可以返回编辑器界面
user-0 提问: The Art and Science of C 《C语言科学与艺术》 的库文件问题

回复:
user: user-1
content: 初学请严格按照书中说明搭建实验环境。如果环境太旧无法搭建，可在虚拟机中搭建。

user: user-0
content: 谢谢，使用的就是在windows IDE环境下对应的文件。仍然不能编译，说缺少了布尔文件吧，不过初学，还不知道那是什么。。。。

user: user-2
content: 微软有很多自家的"语言特性"，你编译通不过正常，你应该查看源文件附带的文档，看看是在什么环境下开发的
user-0 提问: 关于单链表的逆转，这一段源程序看不懂

回复:
user: user-1
content: 我画了个图，你瞅瞅？

user: user-2
content: 你可以画一个有3个结点的链表，然后照着代码一步一步走，直到循环结束，应该就能看出来了。

user: user-3
content: 楼主的程序应该是带表头结点的单向链表吧，这样逻辑就是对的。 每次都是在表头结点H的后面依次插入原链表的结点，插入到末尾链表就逆序了。
user-0 提问: 为什么这里要用n+1而不能是n++

回复:
user: user-1
content: n++; 会改变n的值，而n+1不会。

user: user-2
content: ++n和n++是不一样的

user: user-0
content: 第7行和第13行，n++不就是n+1么
user-0 提问: C语言中数组这样的写法为什么

回复:
user: user-1
content: i[a]???这样也太任性了吧，即使可以，最好也别这样写，可读性太差了

user: user-2
content: http://blog.csdn.net/paschen/article/details/47315449

user: user-3
content: 你想问的是为何i[a]也行吧，c陷阱和缺陷里面提到了这一点。首先数组下标其实就是借用了指针运算，即a[i]的本质就是*(a+i)，明白这一点后题主的问题很好理解了，即i[a]就是*(i+a)。所以i[a]和a[i]等价

user: user-2
content: 没明白你意思，这样写没问题啊，你问的是什么为什么

user: user-4
content: 可以这样写啊 只是循环中如果你把7写成10或者其他更大的数 就会发生越界而已

user: user-5
content: 这么写真的不会被打吗。。

user: user-6
content: 呵呵，等价于a[i]，问问坛子里的zhao4zhong1 http://my.csdn.net/zhao4zhong1
user-0 提问: C语言怎样实现多线程？

回复:
user: user-1
content: 引用 10 楼 fefe82 的回复:自从 C11 ，C 语言已经开始提供线程支持，并提供了 <threads.h>  C11只是建议，但是否支持多线程，取决于C实现。C并不提供<threads.h>，那是C实现提供的。

user: user-2
content: 自从 C11 ，C 语言已经开始提供线程支持，并提供了 <threads.h>

user: user-3
content: Thread support library 在visual studio中需包含头文件<thr\threads.h>

user: user-2
content: 引用 11 楼 sholber 的回复:[quote=引用 10 楼 fefe82 的回复:] 自从 C11 ，C 语言已经开始提供线程支持，并提供了 <threads.h>  C11只是建议，但是否支持多线程，取决于C实现。C并不提供<threads.h>，那是C实现提供的。[/quote]  这个东西确实是 conditional supported ，也就是可选的。  但是 C11 确实定义了 threads.h ，以及其中需要提供的类型、函数等，及其功能。

user: user-4
content: 系统调用系统api CreateThread(....); 需要包含头文件 #include <windows.h>

user: user-4
content: sorry 需要调用

user: user-5
content: c语言没有提供  需要调用操作系统api !!!!  c不像某些高级语言，比如java，就自带线程接口

user: user-6
content: 楼主，可以试试beginthread，endthread

user: user-7
content: 创建一个线程用来计时，CreateThread

user: user-8
content: 百度一下 C语言 线程创建 以及多线程通讯

user: user-9
content: pthread_create

user: user-10
content: _beginthread CreateThread
user-0 提问: Huffuman树的基础构造（C语言实现）

回复:
user: user-0
content: 引用 1楼user-1 的回复:当前n个,按从大到小排序, 最后2个加起来, 然后n-1个排序, 一直到结束加起来然后存放的位置呢…

user: user-1
content: 当前n个,按从大到小排序, 最后2个加起来, 然后n-1个排序, 一直到结束
user-0 提问: 【数据结构】C程序有一个测试点出了段错误，求解...

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

user: user-2
content: 引用 楼主 jyty001 的回复:[原题] 两个有序链表序列的合并   (20分) 已知两个非降序链表序列S1与S2，设计函数构造出S1与S2的并集新非降序链表S3。 输入格式: 输入分两行，分别在每行给出由若干个正整数构成的非降序序列，用−1表示序列的结尾（−1不属于这个序列）。数字用空格间隔。 输出格式: 在一行中输出合并后新的非降序链表，数字间用空格分开，结尾不能有多余空格；若新链表为空，输出NULL。 输入样例: 1 3 5 -1 2 4 6 8 10 -1 输出样例: 1 2 3 4 5 6 8 10  [测试结果]   [源码] #include <stdio.h> #include<stdlib.h> typedef struct node { 	int data; 	struct node *next; }LNode,*LinkList; LinkList create() { 	int num; 	LinkList p,r,list=NULL; 	while(1) 	{ 		scanf("%d",&num); 		if(num==-1) 			break; 		p=(LinkList)malloc(sizeof(LNode)); 		p->data=num; 		p->next=NULL; 		if(list==NULL) 			list=p; 		else 			r->next=p; 		r=p; 	} 	if(r!=NULL) 		r->next=NULL; 	return list; } void print(LinkList L) { 	while(L!=NULL) 	{ 		printf("%d",L->data); 		L=L->next; 		if(L!=NULL) 			printf(" "); 	} } int main() { 	LinkList s1,s2; 	s1=create(); 	s2=create(); 	if(s1==NULL&&s2==NULL) 	{ 		printf("NULL"); 		return 0; 	} 	else if(s1==NULL) 	{ 		print(s2); 		return 0; 	} 	else if(s2==NULL) 	{ 		print(s1); 		return 0; 	} 	while(s1!=NULL&&s2!=NULL) 	{ 		if(s1->data<s2->data) 		{ 			printf("%d",s1->data); 			s1=s1->next; 			if(s2!=NULL||s1!=NULL) 				printf(" "); 		} 		else if(s1->data==s2->data) 		{ 			printf("%d %d",s1->data,s2->data); 			s1=s1->next; 			s2=s2->next; 			if(s2!=NULL||s1!=NULL) 				printf(" "); 		} 		else 		{			 			printf("%d",s2->data); 			s2=s2->next; 			if(s2!=NULL||s1!=NULL) 				printf(" "); 		} 	} 	if(s1==NULL&&s2!=NULL) 	{ 		print(s2); 	} 	if(s1!=NULL&&s2==NULL) 	{ 		print(s1); 	} 	free(s1); 	free(s2); 	return 0; }给r赋初值为NULL；否则直接输-1的话就出错了，看起来没影响，实际上系统随机为r分配的地址可就被篡改了(release模式下，debug下好像会给个固定的错误地址)。

user: user-3
content: 以下输入使程序出现段错误： -1 1 -1  把以下一行 LinkList p,r,list=NULL; 改为 LinkList p,r=NULL,list=NULL;
user-0 提问: 求问在C语言编译过程中汇编文件以ASCII码形式存储还是二进制编码的机器指令存储？

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

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

user: user-2
content: 编译生成的目标代码，以及连接生成的可执行代码 通常都是二进制代码 格式和平台相关 例如C51生成的可执行代码，通常是是intel格式的.hex 文件（一种十六进制表示的二进制代码）,用于烧写到 rom 中。 dos 生成的代码，有目标文件.obj,静态库.lib  ,可执行文件有.com，.exe，等等 据说是OMF 格式 Windows 可执行文件.exe.dll 是PE格式 据说是一种 COFF格式的变体.obj,.lib 也是这种格式 Linux可执行文件 是ELF 格式 .a 也是这种格式  大概只有DOS的.com文件，是赤裸裸的代码。 很多文件格式，都是有一定的组织结构的。

user: user-2
content: 一般来书，编译生成的 是二进制代码，是按照某种格式组织的,二进制代码。 但是你可以让他(同时)生成汇编语言源文件，（文本文件） 你还可以让他生成 包含C（C++）原始代码的汇编语言源文件 如果你对二进制代码感兴趣，还可以同时也生成二进制代码（十六进制表示的文本形式）。

user: user-3
content: 你如果需要输出汇编的结果，当然是文本。  但是内部在内存里是什么样子的，就不知道了。

user: user-4
content: 代码文件的话是用文本存储的，如果编译链接后PE文件则是用二进制存储的

user: user-5
content: 编译过程中根本就不会出现汇编文件，你的问题本身就不成立。
user-0 提问: 求问C语言编译过程中汇编文件以ASCII字符存储还是以二进制存储？

回复:
user: user-1
content: 正常编译，是不输出汇编源文件的，除非设置为输出。

user: user-2
content: 二进制存储。查看时可以使用很多编码方式。你说的ascii只是一种编码方式。记住一句话，在计算机里所有的数据都是二进制。但是查看二进制的方法有千万种

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

user: user-0
content: 引用 3 楼 user-4 的回复:代码文件应该就是按文本格式存的 谢谢

user: user-0
content: 引用 3 楼 user-4 的回复:代码文件应该就是按文本格式存的谢谢

user: user-0
content: 引用 3 楼 user-4 的回复:代码文件应该就是按文本格式存的谢谢

user: user-4
content: 代码文件应该就是按文本格式存的

user: user-4
content: 代码文件应该就是按文本格式存的

user: user-4
content: 代码文件应该就是按文本格式存的
user-0 提问: visual c++6.0断点调试该怎么做？求详解

回复:
user: user-1
content: 引用 2 楼 jutiafuweh 的回复:是不是有的地方不能加断点，加断点有什么限制吗？ 加断点的行有对应的汇编指令且程序运行时能经过该汇编指令。

user: user-0
content: 是不是有的地方不能加断点，加断点有什么限制吗？

user: user-2
content: 简单的说就是在要断的地方插入断点，程序运行到就会断下，可以观察此时各变量及各种环境值，方便调试 可以配合逐步运行、步入、步出等一起使用  http://blog.csdn.net/zxq1138634642/article/details/8108983

user: user-0
content: 谢谢各位的指导
user-0 提问: 为什么在Ubuntu里，单独用cpp, cc1, as, ld产生的程序执行出错

回复:
user: user-1
content: 找不到入口点

user: user-2
content: 最后链接时需要加上 crt0.o，或者类似的文件。文件名有些记不清了。这个文件里包含了程序真正的入口。然后由它来调用main函数

user: user-0
content: 引用 5 楼 user-3 的回复: --dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o -lc  完整的需要很多工作的，你可以用 gcc --verbose main.c 看一下具体有多少内部流程 好的谢谢了，虽然没看懂哪些信息。

user: user-3
content: --dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o -lc  完整的需要很多工作的，你可以用 gcc --verbose main.c 看一下具体有多少内部流程

user: user-0
content: 引用 1 楼 user-3 的回复:ld main.o -o main -lc --entry main 这样的话执行程序的时候又产生了这个错误：

user: user-3
content: ld main.o -o main -lc --entry main
user-0 提问: strcmp函数

回复:
user: user-1
content: 引用 楼主 qq_18888869 的回复:#include<stdio.h> #include<string.h> #define N 80  int fun(char *str) { 	char*pf,*pt; 	int flag=1;;  	for(pf=str,pt=str+strlen(str)-1;pf<pt;pf--,pt++) 		if(strcmp(*pf,*pt)) 		//if(*pf!=*pt) 			flag=0;     return flag;  } 为什么我用strcmp这个函数不能比较呀 。求指教  参数有误吧 strcmp 是比较字符串 不是比较字符~~~~

user: user-2
content: strcmp(pf,pt)

user: user-3
content: 我也有同样的问题   楼主解决了没

user: user-4
content: extern int strcmp(const char *s1,const char *s2);所以传值参数应该是地址

user: user-5
content: 引用 9 楼 qq_18888869 的回复:引用 7 楼 butters10 的回复:strcmp参数要求是比较字符串的首地址我把pt赋值为一个字符的地址 那*pt代表的应该是从这个字符到\0位置的字符串吧 *pt是该字符串的第0个字符

user: user-6
content: 1、应该使用if(*pf！=*pt）这个判断语句，逐个字符比较是否相等； 2、strcmp是字符串比较函数，比较的是字符串的大小，参数是要比较的字符串的首地址； 3、如果fun的参数为字符串"abcdefa"，则pf所指向的字符串为"abcdefa",pt所指向的字符串为"a"，变成两个字符串的比较，实现不了最初的目的；

user: user-7
content: 字符串的首地址

user: user-8
content: 楼主你首先得知道strcmp的参数 它有两个参数，类型都是const char * 而你调用时传的是char类型实参 当然不对

user: user-0
content: 引用 7 楼 butters10 的回复:strcmp参数要求是比较字符串的首地址我把pt赋值为一个字符的地址 那*pt代表的应该是从这个字符到\0位置的字符串吧

user: user-9
content: 引用 4 楼 qq_18888869 的回复:[quote=引用 1 楼 adusuccessfully 的回复:] 楼主看下是不是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf--,pt++)写错了 应该是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf++,pt--) 确实是错了  现在 如果用那个if(*pf！=*pt)的话能得到正确结果，但是用strcmp还是会出现:\Users\Administrator\Desktop\try\try.cpp(11) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'       这样的问题 这个问题你知道为什么吗 很感谢你  [/quote] 楼主可以百度下strcmp函数的用法  #include<stdio.h> #include<string.h> void main() { 	char *s1 = "abcd"; 	char *s2 = "abcd"; 	if(!strcmp(s1,s2)) 		printf("相同"); 	else 		printf("不同"); }

user: user-10
content: strcmp参数要求是比较字符串的首地址

user: user-0
content: 引用 1 楼 adusuccessfully 的回复:楼主看下是不是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf--,pt++)写错了 应该是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf++,pt--) 确实是错了  现在 如果用那个if(*pf！=*pt)的话能得到正确结果，但是用strcmp还是会出现:\Users\Administrator\Desktop\try\try.cpp(11) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'       这样的问题 这个问题你知道为什么吗 很感谢你

user: user-10
content: strcmp参数要求是比较字符串的首地址

user: user-10
content: strcmp参数要求是比较字符串的首地址

user: user-0
content: 引用 1 楼 adusuccessfully 的回复:楼主看下是不是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf--,pt++)写错了 应该是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf++,pt--) 确实是错了  现在 如果用那个if(*pf！=*pt)的话能得到正确结果，但是用strcmp还是会出现:\Users\Administrator\Desktop\try\try.cpp(11) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'       这样的问题 这个问题你知道为什么吗 很感谢你

user: user-0
content: 引用 1 楼 adusuccessfully 的回复:楼主看下是不是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf--,pt++)写错了 应该是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf++,pt--) 确实是错了  现在 如果用那个if(*pf！=*pt)的话能得到正确结果，但是用strcmp还是会出现:\Users\Administrator\Desktop\try\try.cpp(11) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'       这样的问题 这个问题你知道为什么吗 很感谢你

user: user-9
content: 楼主看下是不是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf--,pt++)写错了 应该是for(pf=str,pt=str+strlen(str)-1;pf<pt;pf++,pt--)
user-0 提问: 检测回文 （比如123321就是回文）有个问题不知道问什么不能运行

回复:
user: user-1
content: int fun(char *str) { 	char*pf,*pt; 	int flag=1;;  	for(pf=str,pt=str+strlen(str)-1;pf<pt;pf++,pt--) 		//if(strcmp(*pf,*pt)) 			if(*pf!=*pt) 				flag=0; 	return flag;  }

user: user-2
content: 3楼正解！！

user: user-3
content: 引用 3 楼 Arvll 的回复:pf应该是++,pt应该是--++

user: user-3
content: 引用 3 楼 Arvll 的回复:pf应该是++,pt应该是--++

user: user-4
content: pf应该是++,pt应该是--

user: user-5
content: 你的main函数在哪里

user: user-0
content: 引用 1 楼 user-5 的回复:你的main函数在哪里int main() { 	char S[N]; 	printf("Ener s str:\n"); 	gets(S); 	puts(S); 	if(fun(S)) 		printf("YES\n"); 	else 	printf("NO");  	     return 0; } 在这里
user-0 提问: 把字符串中非字母字符去掉

回复:
user: user-0
content: 引用 1楼user-1 的回复:for(i=0;a[i]!='\0';) { if(!(65<=a[i]&&a[i]<=90||97<=a[i]&&a[i]<=122)) ｛ for(k=i;a[k]!='\0';k++) a[k]=a[k+1]; } else i++; }嗯，这办法可以，学习了，谢谢哈

user: user-0
content: 引用 1楼user-1 的回复:for(i=0;a[i]!='\0';) { if(!(65<=a[i]&&a[i]<=90||97<=a[i]&&a[i]<=122)) ｛ for(k=i;a[k]!='\0';k++) a[k]=a[k+1]; } else i++; }嗯，这办法可以，学习了，谢谢哈

user: user-0
content: 引用 1楼user-1 的回复:for(i=0;a[i]!='\0';) { if(!(65<=a[i]&&a[i]<=90||97<=a[i]&&a[i]<=122)) ｛ for(k=i;a[k]!='\0';k++) a[k]=a[k+1]; } else i++; }嗯，这办法可以，学习了，谢谢哈

user: user-1
content: for(i=0;a[i]!='\0';) { if(!(65<=a[i]&&a[i]<=90||97<=a[i]&&a[i]<=122)) ｛ for(k=i;a[k]!='\0';k++) a[k]=a[k+1]; } else i++; }
user-0 提问: 新人求助 报错LNK1168

回复:
user: user-1
content: 如果看不到那个窗口，可以打开任务管理器，找到映像名称为 test4.exe 的进程，结束它即可

user: user-1
content: 如果看不到那个窗口，可以打开任务管理器，找到映像名称为 test4.exe 的进程，结束它即可

user: user-2
content: 是因为你已经打开了一个控制台程序，就是你运行了一个程序了，要先关闭运行窗口在运行当前程序才可以正常运行新的程序

user: user-3
content: 是楼主的编译环境问题么，我看程序没问题，我在VS2010上试是对的。
user-0 提问: 帮忙看下

回复:
user: user-1
content: 引用 2 楼 qq_33484912 的回复:能不能直接发给我看下 不好意思，不好意思，不好意思 链接复制错了： http://bbs.csdn.net/topics/391880431

user: user-1
content: 引用 2 楼 qq_33484912 的回复:能不能直接发给我看下 不好意思，不好意思，不好意思 链接复制错了： http://bbs.csdn.net/topics/391880431

user: user-1
content: 引用 2 楼 qq_33484912 的回复:能不能直接发给我看下 不好意思，不好意思，不好意思 链接复制错了： http://bbs.csdn.net/topics/391880431

user: user-0
content: 能不能直接发给我看下

user: user-1
content: 楼主提的问题跟昨天的一个贴子很像，可以参考下，里面有我的回复，链接是： http://bbs.csdn.net/topics/391881448
user-0 提问: 开关语句问题

回复:
user: user-1
content: switch需要一个大括号：   int main() { 	int i; 	for(i=0;i<10;i++) 	{ 		switch(i) 		{         case 0: 			printf("零\n"); 			break; 		case 1: 			printf("壹\n"); 			break; 		case 2: 			printf("贰\n"); 			break; 		case 3: 			printf("叁\n"); 			break; 		case 4: 			printf("肆\n"); 			break; 		case 5: 			printf("伍\n"); 			break; 		case 6: 			printf("陆\n"); 			break; 		case 7: 			printf("柒\n"); 			break; 		case 8: 			printf("捌\n"); 			break; 		default: 			printf("玖\n"); 			break; 		} 	} }
user-0 提问: #define

回复:
user: user-0
content: 引用 11 楼 chehw_1 的回复:[quote=引用 10 楼 wsdxyz 的回复:] 请问 如何获得 #define PANEL_FORM_NUMERIC_81 的地址?谢谢！  #define的功能只是文本的替换，宏名称没有地址。  i = 81;  i的值（81）是在程序运行后才知道的，预编译期不可能知道“81”这个数（除非你自己写个特定的编译器），所以没法把“81”这个数值替换进去。  想实现你想要的结果，通常需要自己写个映射：   #define getCtrlViaStr(n) PANEL_FORM_NUMERIC_##(n)  static inline int map_ctrl(int i) { switch(i) { case 81:  return getCtrlViaStr(81);  // 直接写PANEL_FORM_NUMERIC_81也行 case 0: return getCtrlViaStr(0);  case 1: return getCtrlViaStr(1);  ... default:   break; } return -1; }   i = ...;  ctrlID = map_ctrl(i);    [/quote] 谢谢！

user: user-0
content: 引用 9 楼 jackydi 的回复:[quote=引用 7 楼 Minikinfish 的回复:] =1~10,j=1~10,   GetContrl( "PANEL_FORM_NUMERIC_" i j)  用这个 _stprintf("PANEL_FORM_NUMERIC_%d%d" i j);  他的目的应该不是获取这个字符串，而是这个字符串所代表的宏，所以像你楼下所说的那样，使用一个映射表应该是比较好的方法。[/quote] 请问 如何获得 #define PANEL_FORM_NUMERIC_81 的地址?谢谢！

user: user-1
content: 引用 7 楼 Minikinfish 的回复:=1~10,j=1~10,   GetContrl( "PANEL_FORM_NUMERIC_" i j)  用这个 _stprintf("PANEL_FORM_NUMERIC_%d%d" i j);  他的目的应该不是获取这个字符串，而是这个字符串所代表的宏，所以像你楼下所说的那样，使用一个映射表应该是比较好的方法。

user: user-2
content: 引用 10 楼 wsdxyz 的回复:请问 如何获得 #define PANEL_FORM_NUMERIC_81 的地址?谢谢！  #define的功能只是文本的替换，宏名称没有地址。  i = 81;  i的值（81）是在程序运行后才知道的，预编译期不可能知道“81”这个数（除非你自己写个特定的编译器），所以没法把“81”这个数值替换进去。  想实现你想要的结果，通常需要自己写个映射：   #define getCtrlViaStr(n) PANEL_FORM_NUMERIC_##(n)  static inline int map_ctrl(int i) { switch(i) { case 81:  return getCtrlViaStr(81);  // 直接写PANEL_FORM_NUMERIC_81也行 case 0: return getCtrlViaStr(0);  case 1: return getCtrlViaStr(1);  ... default:   break; } return -1; }   i = ...;  ctrlID = map_ctrl(i);

user: user-3
content: 或者自己写一个map映射关系

user: user-3
content: =1~10,j=1~10,   GetContrl( "PANEL_FORM_NUMERIC_" i j)  用这个 _stprintf("PANEL_FORM_NUMERIC_%d%d" i j);

user: user-1
content: 使用宏的方式应该是不能达到你的目的的，使用其他方式吧。

user: user-0
content: 引用 1 楼 jackydi 的回复:使用#和##符号实现，具体使用方法在网上搜  你好，我想实现的功能如下， 将其中的81 变更为变量: #define getCtrlViaStr(n) PANEL_FORM_NUMERIC_##(n);   ctrlID=getCtrlViaStr((81));   SetCtrlAttribute (panelHdlFormula, ctrlID, ATTR_CTRL_MODE, VAL_HOT);  但是变量代替后,如： i=81;  ctrID =getCtrlViaStr(i);  获得的值是 PANEL_FORM_NUMERIC_i , 而不是想要的  PANEL_FORM_NUMERIC_81; 请问这个如何实现 ？  谢谢！

user: user-0
content: #define getCtrlViaStr(n) PANEL_FORM_NUMERIC_##(n); ctrlID=getCtrlViaStr((81)); SetCtrlAttribute (panelHdlFormula, ctrlID, ATTR_CTRL_MODE, VAL_HOT);  我想实现的是 81 用 一个变量代替, i=81; 如 ctrID =getCtrlViaStr(i);  但是 这样之后，获得的值是 PANEL_FORM_NUMERIC_i , 而不是 PANEL_FORM_NUMERIC_81; 请问这个如何实现 ？ 谢谢！

user: user-0
content: 引用 楼主 wsdxyz 的回复:已有CVI 控件清单(p1), 类型为int, 如何根据其 名称 来循环调用所有 控件？ 如： i=1~10,j=1~10,  GetContrl( "PANEL_FORM_NUMERIC_" i j) ...   #define getCtrlViaStr(n) PANEL_FORM_NUMERIC_##(n);  ctrlID=getCtrlViaStr((81));  SetCtrlAttribute (panelHdlFormula, ctrlID, ATTR_CTRL_MODE, VAL_HOT);  我想实现的是 81 用 一个变量代替,如： i=81; ctrID =getCtrlViaStr(i);  但是 这样之后，获得的值是 PANEL_FORM_NUMERIC_i , 而不是 PANEL_FORM_NUMERIC_81; 请问这个如何实现 ？  谢谢！

user: user-4
content: 使用 宏循环来做这个。直接使用源代码展开。 但是不建议。  因为宏是预编译期的，而你的要求是运行时的。 运行时宏是看不到的。

user: user-1
content: 使用#和##符号实现，具体使用方法在网上搜
user-0 提问: 怎样让输入3接着12的操作而且能够返回

回复:
user: user-1
content: 引用 3 楼 DJYLSY 的回复:还有为啥我在输入函数里改成%D输入然后调用显示数据函数就输出的全部是0？ 你是怎么修改的？怎么输入的？按照我给你修改的输入有问题？

user: user-0
content: 还有为啥我在输入函数里改成%D输入然后调用显示数据函数就输出的全部是0？

user: user-0
content: 为啥输入的数据和显示的数据有一个不相同啊？

user: user-1
content: #include<stdio.h> #define N 2 #define M 4 float score[M][N]={0}; float cla[M]={0},people[N]={0}; int main() {     void input(void);     void aver1(void);     void aver2(void); 	void data(void); 	char ch; 	printf("1:输入数据\n2:显示数据\n3:计算每个人的平均成绩\n4:计算每门课的平均成绩\n5:返回\n");	 	scanf("%c",&ch); 	getchar(); 	while(ch!=0) 	{ 		switch(ch) 		{ 		case '1':input(); 		case '2':data(); 			break; 		case '3':aver2();break; 		case '4':aver1();break; 		case '5':return 0;break; 		} 		printf("1:输入数据\n2:显示数据\n3:计算每个人的平均成绩\n4:计算每门课的平均成绩\n5:返回\n"); 		 		scanf("%c",&ch); 		getchar(); 	}  }  void input(void) {     int i,j;     for(i=0;i<N;i++)     {         printf("\nthe score of student %2d:",i+1001);         for(j=0;j<M;j++)             scanf("%f5",&score[i][j]);     } 	getchar(); } void data(void) { 	int i,j; 	printf("\nNO.     cour1   cour2    cour3   cour4   aver\n"); 	for(i=0;i<N;i++) 	{ 		printf("NO%2d",i+1001); 		for(j=0;j<M;j++) 			printf("%8.2f",score[i][j]); 	} }  void aver1(void) {     int i,j;     float s[N] = {0.0};     for(i=0;i<N;i++)     {         for(j=0;j<M;j++)             s[i]+=score[i][j];         people[i]=s[i]/(float)M;     } 	for(i=0;i<N;i++)     {         printf("NO%2d",i+1001);         for(j=0;j<M;j++) 			printf("%8.2f\n",people[i]);     } 	     printf("\naverage:"); } void aver2(void) {     int i,j;     float s[M] = {0.0};     for(j=0;j<M;j++)     {         for(i=0;i<N;i++)             s[j]+=score[i][j];         cla[j]=s[j]/(float)N;     } 	for(j=0;j<M;j++)         printf("%8.2f",cla[j]);     printf("\n"); }
user-0 提问: 汉诺塔问题:求大神指点递归函数中的堆栈是怎么运行的

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: 这图看上去确实头痛,讲递归画栈反而把问题搞复杂了 1) 假设3个盘(A,B,C) 如果前2个盘移动到C(显然是从A 通过B, 到C),同理也可以把前2个盘移动到B(从A通过C到B,对称), 换句话说就是前两个盘从所有柱子可以通过另一个柱子到目标柱子, 现在假定前2个盘移动了C, 下一步就3号盘移动B, 现在1.2在C柱就可以通过A移动到B, 从而完成移动 2) 如果4个盘, 前3个盘按上面方法移动到B, 把4移动到C, 然后从B通过A到C, 整个过程都是对称的, 递归函数就很好写了,如果还不明白,再看一下上面1)
user-0 提问: 如何实现O_DIRECT与异步io同时使用？

回复:
user: user-1
content: 要想写磁盘速度尽量快，还是换块固态硬盘更靠谱。

user: user-1
content: 《Windows核心编程》

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:O_DIRECT|O_ASYNC 如果用单进程同时发送10个写请求到设备上，使用O_DIRECT打开设备，发现是完成一个再发送下一个，本来打算看看aio能否达到同时下发的目的，发现也不行，您在我的另一个帖子里面说用进程同步，我试来一下，多进程同步确实可以达到多个请求同时下发的目的，但我现在碰到另一个问题，就是使用多进程后，由于其并发性难以预测，对后面请求的下发顺序有影响，就是本来都是按下发时间进行顺序的，后来用多进程并发，后面的顺序难以保证了，不知道大师可否帮我一下，苦逼学生党啊

user: user-1
content: O_DIRECT|O_ASYNC
user-0 提问: 请教一下，这个C程序，运行后，为什么输入100printf不出来

回复:
user: user-1
content: C语言比较 大小的运算符 ，关系运算符 为 > ,>=,<,<=,==,!= 分别表示 大于，大于等于，小于，小于等于，等于，不等于  = 是赋值运算符，用于 初始化和赋值

user: user-0
content: 感谢楼上，豁然开朗

user: user-2
content: 引用 1 楼 u012442535 的回复:#include <stdio.h> main() { int a=0; printf("请输入一个有效的分数（1-100）"); scanf("%d",&a); if(a<60&a>=0) printf("%d为不及格 \n",a); else if(a<80&a>=60) printf("%d为及格",a); else if(a<90&a>=80) printf("\n%d为优良\n",a); else if(a<100&a>=90) printf("%d为优秀",a); else  if(a=100&a<101) printf("满分"); }   所有的 && 都写成 & 了 最后的 a==100 写成 a=100 了

user: user-0
content: #include <stdio.h> main() { int a=0; printf("请输入一个有效的分数（1-100）"); scanf("%d",&a); if(a<60&a>=0) printf("%d为不及格 \n",a); else if(a<80&a>=60) printf("%d为及格",a); else if(a<90&a>=80) printf("\n%d为优良\n",a); else if(a<100&a>=90) printf("%d为优秀",a); else  if(a=100&a<101) printf("满分"); }
user-0 提问: 老和尚汉诺的问题（在思路上有点小问题求解答求解答谢谢）

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: 1) 这是调用树, 要清楚一点你可以在函数入口打印一下参数 比如加上 printf("call (%d) %c->%d\n",n,one three) 这样就看得比较清楚. 2) 直接从函数名上理解相对简单一些, han（int n,char one ,char two ,char three)代表移动n个盘子从one到three, 中间通过two, 那么如果是n+1个盘子, 显然要先把n个盘子移动two, 然后把第n+1直接移动three, 然后再把前n个移动c, 函数终止条件显然是n==1
user-0 提问: 关于float 转化成字符串之后，打印出现-1.#IND00或者-1.#J的问题

回复:
user: user-0
content: 算了，不研究了  sprintf(str,"%.2f",human[0].score3);        sprintf(strtemp,"%.2f,%.2f",human[0].score2,human[0].score1); strcat(str,strtemp); printf(str); 这样就没问题，奇怪  先结贴

user: user-1
content: 浮点数可能除以了0

user: user-2
content: 应该是没有获取到human[0].score3，而你的human又没有初始化，所以才会输出错误

user: user-3
content: To set a breakpoint when a variable human[0].score3 changes value   From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable human[0].score3. Click OK to set the breakpoint.

user: user-4
content: 把数据库获取数据原先赋给human[0].score3的值赋给human[0].score2,看看是否正常. 正常则是你数据库获取数据有问题或是对human[0].score3操作有问题.
user-0 提问: 用for编写一个程序

回复:
user: user-1
content: 引用 7 楼 sholber 的回复:声明一下，我的上一个回复不得转载。是我从自己的书上摘录的，你要转载的话，不是朕找你，恐怕闹出格的话出版社会找你。

user: user-2
content: 声明一下，我的上一个回复不得转载。是我从自己的书上摘录的，你要转载的话，不是朕找你，恐怕闹出格的话出版社会找你。

user: user-2
content: 这个题目并不简单，因为涉及到字符集和字符编码的问题。而且Linux和Windows下的编写规则都不太一样。 以下是一个通用的解决方案： # include <locale.h> # include <wchar.h> # include <wctype.h>  # if defined (PWINDOWS) #     define LOCSTR ".936" # elif defined (PLINUX) #     define LOCSTR "zh_CN.UTF-8" # else #     define LOCSTR "C" # endif // defined  int main (void) {     setlocale (LC_ALL, LOCSTR);     for (int x = 0; x < 2; x ++) wprintf (L"中国\n");     return 0; }  宽字符的编码方案和具体使用的是哪个国家的语言文字无关，但是程序的执行和宽字符的具体操作就不能不考虑这些因素。特别是，如果需要一个从宽字符到多字节字符的转换（在本程序中，wprintf函数就执行这种转换），则必须指定多字节字符集（代码页）。为此，程序中就需要调用setlocale函数来设置和区域有关的参数，很多宽字符处理函数的执行都会受这些参数的影响。以下是该函数的原型： # include <locale.h> char * setlocale (int category, const char * locale); 该函数的第一个参数用于指定和区域有关的项，LC_ALL表示整个区域的所有项；第二个参数是字符串，其内容取决于C实现，用于选取同第一个参数相对应的值。对于Windows简体中文版的控制台来说，它的活动代码页是936，实际上对应于GBK字符集，所以这个字符串可以是“.936”，但也可以使用“chs”或者“chinese”；对于Linux控制台来说，它使用的是Unicode字符集，采用UTF-8编码方案，因此这个字符串可以是“zh_CN.UTF-8”。 为了使当前程序能够在Windows和Linux上编译，同时又不用修改源程序，这里使用了预处理指令（条件编译指令）。如果已经定义了宏PWINDOWS，则将宏LOCSTR定义为字符串“.936”，如果已经定义了宏PLINUX，则将宏LOCSTR定义为字符串“zh_CN.UTF-8”，如果PWINDOWS和PLINUX都未定义，则将宏LOCSTR定义为字符串“C”，它对应着每个程序启动之后的最小环境。GCC允许使用编译选项-D来预定义一个可以在编译期间使用的宏，因此，假定上述程序的源文件是exam.c，则可以在Linux上用下面的方法转换它： gcc exam.c –fwide-exec-charset=UTF-32LE –DPLINUX 相对应地，如果是在Windows上，可以使用下面的方法： gcc exam.c –fwide-exec-charset=UTF-16LE –DPWINDOWS

user: user-3
content: 你想用什么语言写

user: user-0
content: 我是想用双字符型来表示。

user: user-0
content: 用c++编写

user: user-4
content: 哦，徒手写，没注意看，需要把i<1改成 i<2

user: user-4
content: 。。。楼主刚开始学习编程？请看代码：   #include <stdio.h>  void main(void) {     int  i = 0;      for (i=0; i<1; i++)     {         printf("中国\n");     } }
user-0 提问: 含有读写锁的结构无法释放

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

user: user-0
content: qp = (struct myqueue*)calloc(1,sizeof(struct myqueue));  ========不是======= qp = (struct myqueue*)calloc(1,sizeof(struct myqueue*));  继续请教，两者有什么区别，编译都能通过啊？

user: user-2
content: qp = (struct myqueue*)calloc(1,sizeof(struct myqueue));  ========不是======= qp = (struct myqueue*)calloc(1,sizeof(struct myqueue*));

user: user-0
content: #include <stdio.h> #include <stdlib.h> #include <pthread.h>   pthread_t tid1,tid2,tid3,tid4;  struct job{     struct job *prev;     struct job *next;     pthread_t id; };  struct myqueue{     struct job *head;     struct job *tail;     pthread_rwlock_t qlock;  /* protect head and tail pointer */ };  struct myqueue *qp; struct job *job1,*job2,*job3,*job4;  int init_queue() {     int err;          /* initializing work queue*/	     qp = (struct myqueue*)calloc(1,sizeof(struct myqueue*)); /* calloc(): clean up */     err = pthread_rwlock_init(&qp->qlock, NULL); /* 注释掉该行，可以释放qp */     if(err != 0)     	return err;          /* initializing jobs */         job1 = (struct job*)calloc(1,sizeof(struct job*));     job2 = (struct job*)calloc(1,sizeof(struct job*));     job3 = (struct job*)calloc(1,sizeof(struct job*));     job4 = (struct job*)calloc(1,sizeof(struct job*));	 }   int main() {     /* 1.initializing queue and jobs */     init_queue();                  pthread_rwlock_destroy(&qp->qlock);	     free(qp);  /* 该行出现问题 */            return 0; }

user: user-2
content: 提供一下程序吧 ...
user-0 提问: 怎么将这个程序用主函数和trans函数表示，trans函数将行列式转置

回复:
user: user-1
content: #include<stdio.h> #include <stdlib.h>  int** trans(int a[][3], int n) {     int **ret, i, j;     ret = (int**)malloc(3*sizeof(int*));     for (int i = 0; i < 3; i ++) {         ret[i] = (int*)malloc(n * sizeof(int));         for (j = 0; j < n; j ++) {             ret[i][j] = a[j][i];         }     }     return ret; }  int main() {     int a[2][3];     int i,j;     for(i=0;i<2;i++)     {         printf("请输入第行%d数:",i+1);         for(j=0;j<3;j++)         {             scanf("%d",&a[i][j]);         }     }             for(j=0;j<3;j++)     {         for(i=0;i<2;i++)         {             printf("%d\t",a[i][j]);         }         printf("\n");     }     int** t = trans(a, 2);     for (i = 0; i < 3; i ++) {         for (j = 0; j < 2; j ++)             printf("%d\t", t[i][j]);         printf("\n");     } }
user-0 提问: web压力测试原理是什么?_?

回复:
user: user-1
content: 引用 2 楼 zhao4zhong1 的回复:这方面是有开源项目的。 引用 6 楼 mxway 的回复:webbench是开源的

user: user-2
content: webbench是开源的

user: user-3
content: ab和siege是最常见的压力测试工具

user: user-4
content: ab命令可以吗。。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:这方面是有开源项目的。  有没有简单的实现，先看个简单的。

user: user-1
content: 这方面是有开源项目的。

user: user-2
content: 使用多线程模拟多个客户的并发请求。计算服务器的响应时间和吞吐量。
user-0 提问: 最匹配的重载方法具有一些无效参数

回复:
user: user-1
content: 引用 7 楼 northwesternwind 的回复:[quote=引用 6 楼 u012404135 的回复:] [quote=引用 5 楼 northwesternwind 的回复:] [quote=引用 4 楼 u012404135 的回复:] [quote=引用 3 楼 user-3 的回复:] SqlHelper.ExecuteReader() 参数不匹配 第一个参数，要求的是类型为string 第二个，类型是CommandType 第三个，string 你调用的第三个参数类型有问题，是否第一、二个顺序反了，查查示例程序吧 我还是不太懂啊，你说说如果第一，二个顺序反了应该怎么修改，[/quote] 额滴神呀，顺序反了怎么改？改顺序呀！！！[/quote] 修改了又出现一个错误 错误1	参数 3: 无法从“System.Data.SqlClient.SqlParameter[]”转换为“string”	 帮我看看参数三怎么修改，谢谢[/quote] 需要看SqlHelper.ExecuteReader的定义才能知道到底为啥错了。[/quote]     都不懂

user: user-2
content: 引用 6 楼 u012404135 的回复:[quote=引用 5 楼 northwesternwind 的回复:] [quote=引用 4 楼 u012404135 的回复:] [quote=引用 3 楼 user-3 的回复:] SqlHelper.ExecuteReader() 参数不匹配 第一个参数，要求的是类型为string 第二个，类型是CommandType 第三个，string 你调用的第三个参数类型有问题，是否第一、二个顺序反了，查查示例程序吧 我还是不太懂啊，你说说如果第一，二个顺序反了应该怎么修改，[/quote] 额滴神呀，顺序反了怎么改？改顺序呀！！！[/quote] 修改了又出现一个错误 错误1	参数 3: 无法从“System.Data.SqlClient.SqlParameter[]”转换为“string”	 帮我看看参数三怎么修改，谢谢[/quote] 需要看SqlHelper.ExecuteReader的定义才能知道到底为啥错了。

user: user-0
content: 引用 5 楼 northwesternwind 的回复:[quote=引用 4 楼 u012404135 的回复:] [quote=引用 3 楼 user-3 的回复:] SqlHelper.ExecuteReader() 参数不匹配 第一个参数，要求的是类型为string 第二个，类型是CommandType 第三个，string 你调用的第三个参数类型有问题，是否第一、二个顺序反了，查查示例程序吧 我还是不太懂啊，你说说如果第一，二个顺序反了应该怎么修改，[/quote] 额滴神呀，顺序反了怎么改？改顺序呀！！！[/quote] 修改了又出现一个错误 错误1	参数 3: 无法从“System.Data.SqlClient.SqlParameter[]”转换为“string”	 帮我看看参数三怎么修改，谢谢

user: user-2
content: 引用 4 楼 u012404135 的回复:[quote=引用 3 楼 user-3 的回复:] SqlHelper.ExecuteReader() 参数不匹配 第一个参数，要求的是类型为string 第二个，类型是CommandType 第三个，string 你调用的第三个参数类型有问题，是否第一、二个顺序反了，查查示例程序吧 我还是不太懂啊，你说说如果第一，二个顺序反了应该怎么修改，[/quote] 额滴神呀，顺序反了怎么改？改顺序呀！！！

user: user-0
content: 引用 3 楼 user-3 的回复:SqlHelper.ExecuteReader() 参数不匹配 第一个参数，要求的是类型为string 第二个，类型是CommandType 第三个，string 你调用的第三个参数类型有问题，是否第一、二个顺序反了，查查示例程序吧 我还是不太懂啊，你说说如果第一，二个顺序反了应该怎么修改，

user: user-3
content: SqlHelper.ExecuteReader() 参数不匹配 第一个参数，要求的是类型为string 第二个，类型是CommandType 第三个，string 你调用的第三个参数类型有问题，是否第一、二个顺序反了，查查示例程序吧

user: user-0
content: 。。在线等。。

user: user-0
content: 这个怎么修改啊，小白，不太懂，求大神
user-0 提问: 图书管理系统

回复:
user: user-1
content: 图形用户界面，包括登陆界面和主界面，登陆界面包括管理员登陆和普通用户登录。 主界面又分若干个操作，添加修改，删除，查询，借书信息，还书信息等， 看你需要实现什么功能了。 需要用到的SQL，图形用户界面设计，c/c++.

user: user-2
content: 实用真实一点的管理系统需要数据库知识、图形用户界面编程，这两个是C++ Builder和Delphi的强项，用CB和D也是最容易的，用C#也差不多，三者只是语言不同（C++，Object Pascal，C#），其它类似。

user: user-3
content: 把基本语法知识搞扎实就够了，先把基础打好！
user-0 提问: help，关于uint64类型数据的打印

回复:
user: user-0
content: 引用 6 楼 LLW059 的回复:出现负数是溢出了，可以使用unsigned long long 或long long 类型，转换说明符使用"%llu"和"%lld"  多谢！结贴了

user: user-1
content: 出现负数是溢出了，可以使用unsigned long long 或long long 类型，转换说明符使用"%llu"和"%lld"

user: user-0
content: 引用 1 楼 user-4 的回复:会有啥权限问题阻止你看到它的具体定义？  ==  试试 %ld 。不过看不到定义，只是瞎猜。  == 你是什么系统，什么编译器？  linux系统，gmake

user: user-0
content: 引用 2 楼 yangyunzhao 的回复:理论上不可能阻止的，如果仅仅声明而不定义的话，就必须提供一大堆函数来让你使用uint64  ps，可以用unsigned long long来做吧？windows下用%I64u，linux用%llu  试一下，有结果告诉你 ：）

user: user-2
content: %llu

user: user-3
content: 理论上不可能阻止的，如果仅仅声明而不定义的话，就必须提供一大堆函数来让你使用uint64  ps，可以用unsigned long long来做吧？windows下用%I64u，linux用%llu

user: user-4
content: 会有啥权限问题阻止你看到它的具体定义？  ==  试试 %ld 。不过看不到定义，只是瞎猜。  == 你是什么系统，什么编译器？
user-0 提问: 超市货物管理系统

回复:
user: user-1
content: 如果用数据库，可以定义好数据表各字段，创建表，把数据插入数据库表。 如果用文件代替数据库，初始信息可以使用txt文本文件，可以自己定义格式，比如每一行一条商品信息，商品编号，商品名，数量，单价等等属性之间用空格或者自定义的特殊符号隔开。导入以后可以写到二进制文件，一条商品信息对应一个结构体，结构自己定义。 也可以使用XML，需要第三方的库来读写XML。

user: user-2
content: 在百度搜“超市货物管理系统 C源代码”
user-0 提问: 指针跟踪数组

回复:
user: user-1
content: p + str，两个指着相加，是什么意思？

user: user-2
content: 没有指针加指针的运算！ 只有指针加减一个整数，或者两个指针相减的运算 16行之所以对，是因为两指针相减后得到的是一个整数，然后就变成指针与整数相加

user: user-3
content: Pointer Arithmetic Additive operations involving a pointer and an integer give meaningful results only if the pointer operand addresses an array member and the integer value produces an offset within the bounds of the same array. When the integer value is converted to an address offset, the compiler assumes that only memory positions of the same size lie between the original address and the address plus the offset.  This assumption is valid for array members. By definition, an array is a series of values of the same type; its elements reside in contiguous memory locations. However, storage for any types except array elements is not guaranteed to be filled by the same type of identifiers. That is, blanks can appear between memory positions, even positions of the same type. Therefore, the results of adding to or subtracting from the addresses of any values but array elements are undefined.  Similarly, when two pointer values are subtracted, the conversion assumes that only values of the same type, with no blanks, lie between the addresses given by the operands.
user-0 提问: c语言关于if判断的问题

回复:
user: user-1
content: 把两个if 合并了吧 c1,c2只保留c1 简化为c 并作为参数传递

user: user-2
content: 每次操作完之后清空缓冲区？

user: user-3
content: 在scanf前多加一句试试  rewind(stdin); scanf("%d",&c2);

user: user-4
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-0
content: 引用 3 楼 u011672336 的回复:当我连续几次输入1，运行的时候，再输入2.会出现多个“谢谢使用!”。这个错误的原因是因为这个动作c1运行之后，还有c2，也是依次再调用回ccc函数。  调用回自己这是一个递归，递归的含义是什么请寻找度娘。只能说你调用几次自己就会出现调用次数+1次的“谢谢使用”，其次我认为你的基础架构知识有很严重的偏差，为什么连打开文档都会了就不会switch函数呢………………还有，算了……没了，程序看得很头疼，没主函数没返回值……上次有好多大神告诉我，只贴有问题的地方。所以这次在贴了这个地方，其他的太多了，看起来会更头疼。

user: user-5
content: 当我连续几次输入1，运行的时候，再输入2.会出现多个“谢谢使用!”。这个错误的原因是因为这个动作c1运行之后，还有c2，也是依次再调用回ccc函数。  调用回自己这是一个递归，递归的含义是什么请寻找度娘。只能说你调用几次自己就会出现调用次数+1次的“谢谢使用”，其次我认为你的基础架构知识有很严重的偏差，为什么连打开文档都会了就不会switch函数呢………………还有，算了……没了，程序看得很头疼，没主函数没返回值……

user: user-0
content: 引用 1 楼 lm_whales 的回复:感觉你做复杂了求指点.......

user: user-1
content: 感觉你做复杂了
user-0 提问: 学生成绩系统问题

回复:
user: user-1
content: print函数的参数也要改成指针形式的

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

user: user-0
content: 试了，没有用~~ 感觉应该不是这个问题吧

user: user-1
content: void input(struct student* stu)  //函数头改成这样！

user: user-3
content: 楼主，替换一行：float pro[0], pro[1], pro[2], pro[3]; 替换为：float pro[4]; 先这样改着试试，要把代码贴上来！！！
user-0 提问: 矩阵操作（新手上路，各位好心的帮帮忙吧）

回复:
user: user-0
content: 谢谢你的帮助，虽然那个并不是我想要的，第一次发帖有人回还是很高兴，谢谢你

user: user-1
content: http://download.csdn.net/detail/zhadan001/4989879

user: user-0
content: 可是在百度里找不到，如果你有代码，可以请你发个链接给我吗？麻烦你了

user: user-1
content: 在百度搜“矩阵操作 C源代码”
user-0 提问: c

回复:
user: user-1
content: 楼主只是没将代码放在对应的虚拟机里面编译而已。

user: user-1
content: app store 里搜索 C++ Programming Language

user: user-2
content: 只要不调用api或其他一些平台特性就可以

user: user-0
content: 引用 1 楼 赵4老师的回复:可以 可我把一些游戏代码复制上去运行不了(贪吃蛇，21点)

user: user-0
content: 引用 3 楼 醉花阴柳的回复:只要不调用api或其他一些平台特性就可以 什么意思，请求详细解答

user: user-3
content: 引用 1 楼 zhao4zhong1 的回复:可以 真精辟 ，是不是等级高回复字数可以少点

user: user-1
content: 可以
user-0 提问: 在Visual Studio 2012中，如何找到Windows的Masked Edit控件？

回复:
user: user-1
content: 引用 2 楼 Ma_shuhua 的回复:C#的，不是C++的。  那移步去C#版块提问啊

user: user-2
content: CMFCMaskedEdit只能供C#用？

user: user-0
content: C#的，不是C++的。

user: user-2
content: CMFCMaskedEdit                             支持掩码编辑控件，验证用户输入掩码并基于模板显示验证的结果。  https://msdn.microsoft.com/zh-cn/library/bk77x1wx(v=vs.110).aspx
user-0 提问: 关于const修饰的常量的修改问题

回复:
user: user-1
content: 这么神奇，在我机器上，都输出3 另外建议你把 -Wall 加上

user: user-2
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-3
content: 编译时编译器可能直接拿用立即数代替，而不是从内存地址中读取，请自己看生成的汇编

user: user-4
content: 这种做法是错误的。  这种错误可能带来任何结果，包括无法理解的结果。

user: user-5
content: 编译器的确为const 声名的变量分配了一个内存空间，但是在引用了该变量的地方编译器在编译时都将该变量替换为了常数，就像宏代换那样，也就是说运算用到的实际数值是在代码区存放的常数，而并非在数据空间的那个数，所以你通过指针可以修改数据空间的值并不影响a本身的值，当然不同的编译器可能是不一样的

user: user-6
content: const 的作用是你对编译器负责，编译器告诉你，如何使用可能会出错。 一旦你用了const 关键字，表明你跟编译器签订了条约。 你确信，你的代码里，不会出现修改const 修饰的那个对象的值的代码。 一旦出现修改const 修饰的那个对象的值，那就是你想错了，或者笔误，请编译器给你指出错误。 而不是相反，编译器不必对你写出来的const 负责； const 是约束程序员而不是编译器的。

user: user-7
content: C++ 和 C对const修饰的处理方法不一样。  你把文件名由“point.cpp”改成"point.c"，重新编译一下，再看看，就会有另一种结果。
user-0 提问: perl大数值输出请教

回复:
user: user-1
content: 会计算244的847次方大约等于10进制数多少位吗？

user: user-0
content: 看来无人识这个，结贴

user: user-0
content: 有人懂这个吗？

user: user-0
content: 已经解决，是要在cmd界面进入到perl.exe所在文件夹，如，c:\perl64\bin>perl -Mbigint -e "print 244**847%2773",即可得到所要的答案465.
user-0 提问: 一个关于while循环的问题

回复:
user: user-1
content: 引用 2 楼 caterpillarous 的回复:[quote=引用 1 楼 hy09070422 的回复:] 因为你输入1，之后按的回车键被getchar接收了，程序已经执行完AddVertex(G,vp);然后才退出的。 这样 scanf("%s\n", &a); 试试 谢谢哈 一般项目中怎么处理这个问题啊 挺想知道的[/quote] 不客气，比如在有的情形下可能会输入回车键，而此时的回车键不是输入的确认，而是在程序中可能会用到，这样的话就只能用getchar了，其他情况下用scanf更多。 此处按输入习惯，没必要用getchar。 个人愚见，仅供参考。

user: user-2
content: scanf("%d",&a); 	getchar(); //接收掉\n

user: user-0
content: 引用 1 楼 hy09070422 的回复:因为你输入1，之后按的回车键被getchar接收了，程序已经执行完AddVertex(G,vp);然后才退出的。 这样 scanf("%s\n", &a); 试试 谢谢哈 一般项目中怎么处理这个问题啊 挺想知道的

user: user-1
content: 因为你输入1，之后按的回车键被getchar接收了，程序已经执行完AddVertex(G,vp);然后才退出的。 这样 scanf("%s\n", &a); 试试
user-0 提问: printf函数的实现

回复:
user: user-1
content: crt\src\output.c

user: user-2
content: 单步运行步进就可以跟踪到printf里面，如下是我跟进去的代码：   int __cdecl printf (         const char *format,         ...         ) /*  * stdout 'PRINT', 'F'ormatted  */ {     va_list arglist;     int buffing;     int retval;      _VALIDATE_RETURN( (format != NULL), EINVAL, -1);      va_start(arglist, format);      _lock_str2(1, stdout);     __try {         buffing = _stbuf(stdout);          retval = _output_l(stdout,format,NULL,arglist);          _ftbuf(buffing, stdout);      }     __finally {         _unlock_str2(1, stdout);     }      return(retval); }    里面他又调用了其他函数，这里不贴了，楼主想看可以自己跟进去看

user: user-3
content: 你这是问的什么。。。