Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 找了一天bug。。。OJ漏点求助

回复:
user: user-0
content: 引用 4 楼 nanjun520 的回复:看了一下题目  你的肯定不符合题目要求的   1.单次运行你的可能是正确的， 只要出现上一次是错误的输入，下次即便是正确的输入你也会判断错误。 因为你的  int check[9 + 1] = {0}; 这个在 下一次循环的时候没有置空 for ( turn = 1; turn <= n; turn ++ ){ 在这里循环的时候应该 设置 check[]的值为0  2. 题目要求是 应该是所有的输入之后， 再给结果吧   你的是每次输入就出结果  哇，十分感谢！！ 第一次没注意题目要跑n次，就声明时={0}处理，后来发现草草加了个for() (都没缩进...) 然后单步时来回跑了很多数据，但都是跑完一次就中止了，没有连续单步，所以就漏掉了 >.<  另外每次输出也可以过oj的，这个可能跟oj实现有关。一般只看输出不看输入及输入输出顺序关系吧。  再次感谢！

user: user-1
content: 看了一下题目  你的肯定不符合题目要求的   1.单次运行你的可能是正确的， 只要出现上一次是错误的输入，下次即便是正确的输入你也会判断错误。 因为你的  int check[9 + 1] = {0}; 这个在 下一次循环的时候没有置空 for ( turn = 1; turn <= n; turn ++ ){ 在这里循环的时候应该 设置 check[]的值为0  2. 题目要求是 应该是所有的输入之后， 再给结果吧   你的是每次输入就出结果

user: user-2
content: 有的oj就是这么坑

user: user-0
content: 引用 1 楼 user-3 的回复:找BUG很好的方法就单步跟踪程序运行，观察程序流程及变量变化 跟踪过了，在很多例子上都符合我的预期 只是不知道漏的特殊case长什么样...

user: user-3
content: 找BUG很好的方法就单步跟踪程序运行，观察程序流程及变量变化
user-0 提问: linux 中批处理时出现报错，但是已经分配过权限

回复:
user: user-1
content: 或者： sudo  xx.sh

user: user-1
content: sudo  su 或者 su 再执行你的shell批处理

user: user-0
content: 求回复，在线等

user: user-0
content: 我一应给bak文件权限了，但是还是同样的错误

user: user-2
content: 你得对bak目录有执行权限
user-0 提问: 求大神指教

回复:
user: user-1
content: 引用 4 楼 qq_27091599 的回复:我用su到root下修改了权限，还是不行，报的还是这个的错。 这个是批处理程序make时遇到的问题  以root用户运行shell批处理试试。

user: user-0
content: 我用su到root下修改了权限，还是不行，报的还是这个的错。 这个是批处理程序make时遇到的问题

user: user-1
content: sudo  su

user: user-0
content: 写了权限，还是报这个错误

user: user-2
content: 没有写权限？
user-0 提问: 如何判断一个数组里有没有  ±  这个符号

回复:
user: user-1
content: 那就查找子字符串  再不让使用unicode

user: user-2
content: 移位运算。。。。

user: user-3
content: strstr(a, "±");  ======================== GBK编码的话有可能得到错误结果。

user: user-4
content: ||运算符应该知道吧
user-0 提问: 在函数外部定义外部变量时，省略储存类型符号，则该变量具体储存在哪个储存区域？是内存堆栈、是CPU寄存器里还是内存数据区？

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

user: user-2
content: 在执行中自动分配内存，寄存器

user: user-2
content: 外部变量 某些常量（包括字符串字面值） 静态变量（外部的，函数内部的，类的静态变量，无名名空间内的变量） 这些都是放在一起的，放在数据区（也就是所谓静态区，或者全局区）  编译前和编译后的程序结构是不同的 所谓作用域，只是针对源代码的 不是针对二进制的  数据存放的位置，不同于C，C++的作用域。 这是两个不同的概念。  实际上编译后，数据只是区分全局的，局部的。以及动态分配的三种形态。 而代码，对于编译后的程序，本身也是一种数据，加载程序读程序结构 安排代码，数据的存储位置，并开辟栈空间 编译后，只有函数内定义的非静态变量，和函数形参是真正的局部数据 会存放在栈区，或者寄存器中，在执行中自动分配内存 全局的数据，和代码，加载过程分配内存 全局的数据，如果可能会在加载时初始化。 部分不能在加载时候，初始化的 一部分在加载后运行时初始化 很可能在main函数执行之前初始化。 一部分（主要指函数内部静态变量），在执行的时候，初始化。

user: user-3
content: 顶一下1楼，内存分为数据区， 栈，堆，代码区！ 一般常量都是放在数据区！堆是动态分配内存放的地方，栈放的是你定义的局部变量！

user: user-1
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533

user: user-4
content: 放在全局区，是全局变量

user: user-2
content: 确切的说，编译后，内存分为一下几个区（段）： 数据区（段），代码区（段），栈区（段），堆区（段） 不过，编译的时候，还会细分一下 其中 例如bss 段等等  静态变量，外部变量一般在数据区。 然而常量，以及字符串字面值，通常在数据区，但是也可能会放在代码区。 而函数内部非静态变量放在栈区，或者寄存器中 动态分配的内存（非变量对象,是一种无名对象）在堆区。 函数形式参数，在栈区  类，结构的成员变量，当对象定义（或者用new 创建）的时候，才会分配内存(在对象内部) 由于编译优化的存在 很多常量，部分引用，部分变量，会被优化掉（不占用内存空间） 很多人称呼，数据区为静态区，因为（外部，或者静态）变量是一次定义，终生（直到程序结束）使用的。
user-0 提问: C 语言EOF问题

回复:
user: user-1
content: 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 其实EOF并不是Console的结尾。  MS-DOS编辑器里里面Ctrl+Z才是结尾的意思。   我正好在看C primer plus第六版， 来自13.5.2 二进制模式和文本模式

user: user-3
content: 这应该是跟具体的系统以及编译器有关，要看Windows和Ubuntu下面的C库中getchar函数是如何实现的

user: user-4
content: 这么说吧。你可以认为这个是微软的认为文件结束的一个行为。回车+ctrl z +回车

user: user-5
content: 换行也算一个字符

user: user-6
content: #include <stdio.h> int main(int argc, char const *argv[]) {    	int i; 	int ch; 	for (i = 0; (ch  = getchar()) != EOF && ch != 26; i++){} 	printf("%d\n", i);  	return 0; }

user: user-7
content: 你可以把这一句getchar() != EOF换成getchar() != '\n',判断只要回车就结束就好了   /* 其实就是一个看输入了多少个字符的小程序 */ #include <stdio.h> int main(int argc, char const *argv[]) {	 	int i; 	for (i = 0; getchar() != '\n'; i++){} 	printf("%d\n", i);  	return 0; }
user-0 提问: 有可以在MCU上运行的数据压缩/解压缩源码吗？

回复:
user: user-0
content: 引用 6 楼 jiqiang01234 的回复:也许可以多使用一些“位域”再压缩一下。 最好能把数据包格式发一下，看看还有什么地方可以压缩的。  另：一次不到1k数据的压缩，没有必要，因为压缩以后可能比原始数据还大。  用位域来表示我们也有考虑过的 项目是让终端一个装置收集一些设备的状态信息（这些状态信息也可以用0/1来表示，就是是否故障），然后上送给服务器，但是如果用位域来表示的话，可能数据量还会更大一些，因为可能的故障会有280多种，如此一来，每次上送数据就必须使用超过32字节表示，而实际上设备大多数情况下是没有处于故障状态的。现在我是使用2字节表示这个状态，每个状态编个号，取值范围在0~32767之间，两个字节中第二字节的最高位表示是否故障，其它15位表示故障编号。故障状态发生变化时才上送信息。如此一来，数据量会少很多了。

user: user-1
content: 现在流行用空间换取时间，不怎么会碰到用时间换取空间的情况。

user: user-2
content: 引用 4 楼 hemowolf 的回复:[quote=引用 1 楼 jiqiang01234 的回复:] 得看你是什么性能的mcu，c51什么的就不用考虑了。如果能到ARM9以上，可以用。 另：1000字节很多吗？需要这么节省？  可以肯定不是ARM9，在ARM9上可以跑java了，我还操这份心干嘛  现在通信协议是我在制订，我做的是服务端的开发，MCU上的东西我也不懂 公司一直强调流量、流量、流~量~，成本、成本、成~本~ 经过估算，一个MCU接多台终端，一个终端一个月估计有10M流量，我也觉得很省了，但人家还想要省  现在协议都没有用字符串，全部是二进制数据，能省的都省了，还想省的话，就只能压缩数据传输了 [/quote] 也许可以多使用一些“位域”再压缩一下。 最好能把数据包格式发一下，看看还有什么地方可以压缩的。  另：一次不到1k数据的压缩，没有必要，因为压缩以后可能比原始数据还大。

user: user-3
content: 51类也有高速的，还有51的升级版16Bits的251 类芯片 intel 也有16Bits的MCU

user: user-3
content: dsp 做离散余弦变换，是很平常的 MCU类型很多，有低速的，有高速的 有各种专用的芯片 看你做什么事情，选用那种芯片了

user: user-2
content: 得看你是什么性能的mcu，c51什么的就不用考虑了。如果能到ARM9以上，可以用。 另：1000字节很多吗？需要这么节省？

user: user-3
content: ARM 很便宜啊，十几块的都有 为啥不用呢

user: user-0
content: 引用 1 楼 jiqiang01234 的回复:得看你是什么性能的mcu，c51什么的就不用考虑了。如果能到ARM9以上，可以用。 另：1000字节很多吗？需要这么节省？  可以肯定不是ARM9，在ARM9上可以跑java了，我还操这份心干嘛  现在通信协议是我在制订，我做的是服务端的开发，MCU上的东西我也不懂 公司一直强调流量、流量、流~量~，成本、成本、成~本~ 经过估算，一个MCU接多台终端，一个终端一个月估计有10M流量，我也觉得很省了，但人家还想要省  现在协议都没有用字符串，全部是二进制数据，能省的都省了，还想省的话，就只能压缩数据传输了
user-0 提问: 求助 如何在C语言中读取想要的数据？

回复:
user: user-1
content: 如果你需要多次比较，可以用链表或者结构体数组存储多个航班信息 如果只需要比较一次，那么文件读一行和指定的航班比较一次就行了

user: user-0
content: 引用 3 楼 libinden71 的回复:这问题很简单啊！  定义FILE *指针  fopen打开文件    feof循环文件直到结尾 fgets读取文件内容   struct 定义结构把fgets读取出来的文件内容 植入 结构体中 判断航班号 输出字符串  可是有多个航班信息，怎么把他们都提取到结构体中？

user: user-2
content: 这问题很简单啊！  定义FILE *指针  fopen打开文件    feof循环文件直到结尾 fgets读取文件内容   struct 定义结构把fgets读取出来的文件内容 植入 结构体中 判断航班号 输出字符串

user: user-0
content: 好的，问题解决啦，谢谢各位大神！

user: user-3
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-1
content: 可以用fopen,fread把文件里的数据一条条读出来，然后和用户输入的航班号进行比较
user-0 提问: 统计文件内容 c语言初学者 统计文本中字符 空格 数字个数并保持文件，请帮我看一下那里有问题，好几个小时了，初学不懂。

回复:
user: user-1
content: 引用 12楼我是你的主体 的回复:[quote=引用 11 楼 u010165006 的回复:] char filename1[50]="f:\\gd\\185.txt"; 不用 printf("file name\n"); scanf("%s", filename1); 先试试。  #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void main() { 	FILE *fp1, *fp2; 	char ch ; 	int character,num,space,other; 	character = num = space = other = 0;  	char filename1[50] = { "f:\\gd\\185.txt" }; 	fp1 = fopen(filename1, "r");  	char filename2[50] = { "f:\\gd\\55.txt" };  	fp2 = fopen(filename2, "w");  	while ((ch = fgetc(fp1)) != EOF) 	{ 		if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') 			character++; 		else if (ch >= '0' && ch <= '9') 			num++; 		else if (ch = ' ') 			space++; 		else 			other++; 	} 	fprintf(fp2, "character%d space%d num%d other%d", character, space, num, other); 	fclose(fp1); 	fclose(fp2);  } 改过之后，编译没报错，但运行错了。不知为什么？[/quote]else if(ch==' ')……

user: user-2
content: 楼主应该学会调试程序，

user: user-3
content: if (fp1== NULL) { printf("cannot open\n"); exit(1); }  这个留着试试。

user: user-0
content: 引用 13 楼 u010165006 的回复:if (fp1== NULL) { printf("cannot open\n"); exit(1); }  这个留着试试。 谢谢，我再看看书，回头看完书再看看怎么回事。

user: user-0
content: 引用 11 楼 u010165006 的回复:char filename1[50]="f:\\gd\\185.txt"; 不用 printf("file name\n"); scanf("%s", filename1); 先试试。  #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void main() { 	FILE *fp1, *fp2; 	char ch ; 	int character,num,space,other; 	character = num = space = other = 0;  	char filename1[50] = { "f:\\gd\\185.txt" }; 	fp1 = fopen(filename1, "r");  	char filename2[50] = { "f:\\gd\\55.txt" };  	fp2 = fopen(filename2, "w");  	while ((ch = fgetc(fp1)) != EOF) 	{ 		if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') 			character++; 		else if (ch >= '0' && ch <= '9') 			num++; 		else if (ch = ' ') 			space++; 		else 			other++; 	} 	fprintf(fp2, "character%d space%d num%d other%d", character, space, num, other); 	fclose(fp1); 	fclose(fp2);  } 改过之后，编译没报错，但运行错了。不知为什么？

user: user-3
content: char filename1[50]="f:\\gd\\185.txt"; 不用 printf("file name\n"); scanf("%s", filename1); 先试试。

user: user-0
content: 引用 9 楼 paschen 的回复:[quote=引用 7 楼 hxf1220 的回复:] [quote=引用 6 楼 qq423399099 的回复:] 要两个反斜杠才行。 即：f:\\gd\\185.txt  按完回车就没黑框了，和原来一样。[/quote]  不用两个斜杠，输入的时候一个就行[/quote] 谢谢，我试过，\也不对。

user: user-4
content: 引用 7 楼 hxf1220 的回复:[quote=引用 6 楼 qq423399099 的回复:] 要两个反斜杠才行。 即：f:\\gd\\185.txt  按完回车就没黑框了，和原来一样。[/quote]  不用两个斜杠，输入的时候一个就行

user: user-0
content: 引用 3 楼 paschen 的回复:通过 errno 的值判断文件打开失败原因   fopen返回值判断参看：  http://en.cppreference.com/w/c/io/fopen  我不太懂您说的什么，刚学，加个断点这样了。

user: user-0
content: 引用 6 楼 qq423399099 的回复:要两个反斜杠才行。 即：f:\\gd\\185.txt  按完回车就没黑框了，和原来一样。

user: user-5
content: 要两个反斜杠才行。 即：f:\\gd\\185.txt

user: user-0
content: 引用 2 楼 qq423399099 的回复:你这个是文件打开失败了。 看看文件是否存在，路径是不是写错了（当前目录是指工程目录，不是exe所在目录） 同时注意/和\的区别，或者用绝对路径试试 楼主最好把你输入的截图看一下 截图了麻烦帮看一下。

user: user-0
content: 我一按回车就结束了。

user: user-4
content: 通过 errno 的值判断文件打开失败原因   fopen返回值判断参看：  http://en.cppreference.com/w/c/io/fopen

user: user-5
content: 你这个是文件打开失败了。 看看文件是否存在，路径是不是写错了（当前目录是指工程目录，不是exe所在目录） 同时注意/和\的区别，或者用绝对路径试试 楼主最好把你输入的截图看一下

user: user-6
content: 看看文件存在吗
user-0 提问: 自己构造二级指针，实现二维数组使用

回复:
user: user-1
content: 引用 2 楼 qq423399099 的回复:int *ptr = (int *)malloc(3 * sizeof(int *));应该是int **ptr = (int **)malloc(3 * sizeof(int *)); p = (int **)&ptr;应该是p = (int **)ptr;  #include<stdio.h> #include<stdlib.h> void main() { 	int data[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 	int i, j; 	int **p; 	//int *ptr[3] = { data[0], data[1], data[2] }; 	int **ptr = (int **)malloc(3 * sizeof(int *)); 	for (i = 0; i < 3; i++) 	{ 		*(ptr + i) = data[i]; 	} 	p = (int **)ptr; 	printf("%p %p %p\n", p[0], p[1], p[2]); } 牛逼！

user: user-2
content: 动态分配二维数组不像你这种写  参看： http://blog.chinaunix.net/uid-22516719-id-263215.html

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

user: user-4
content: int *ptr = (int *)malloc(3 * sizeof(int *));应该是int **ptr = (int **)malloc(3 * sizeof(int *)); p = (int **)&ptr;应该是p = (int **)ptr;  #include<stdio.h> #include<stdlib.h> void main() { 	int data[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 	int i, j; 	int **p; 	//int *ptr[3] = { data[0], data[1], data[2] }; 	int **ptr = (int **)malloc(3 * sizeof(int *)); 	for (i = 0; i < 3; i++) 	{ 		*(ptr + i) = data[i]; 	} 	p = (int **)ptr; 	printf("%p %p %p\n", p[0], p[1], p[2]); }

user: user-5
content: 弄清楚地址和值，弄清你代码中的每个变量的值和地址
user-0 提问: 赋值的位置不同， 为什么 " c=1 " 放在开头定义会错误

回复:
user: user-1
content: 是为了每次循环前把c重置为1，不然c会一直累加的。

user: user-2
content: 楼主想表达的大概是for循环里的c=1语句移到main函数的第一句为什么不行吧？

user: user-3
content: 结果错误吗， 因为!n = 1*3*5*...*n,所以c每次都要从1开始网上加。

user: user-4
content: 向别人请教问题时，要将问题描述清楚，包括你的操作、各种现象、你采取的尝试，这样有利于大家快速的分析问题，帮你解决掉。 建议你学习这篇文章《提问的智慧》 http://www.jianshu.com/p/60dd8e9cd12f

user: user-5
content: 什么叫放在开头定义错误？

user: user-6
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。
user-0 提问: compile没错，可是build事却出现一个错误，怎么回事？

回复:
user: user-1
content: scanf（"%f，&weight"）  改成 scanf("%f"，&weight);

user: user-0
content: [quote=引用 3 楼 qq423399099 的回复:]好的，谢谢

user: user-2
content: 引用 楼主 qq_30202127 的回复:  你的截图将最有用的内容给隐藏掉了。 在输出窗口，显示了有一个编译错误，必然有错误信息，可惜给隐藏掉了。  让大家看看那条错误信息，很快就可以帮你解决。  另外，记住，向别人请教问题时，要将问题描述清楚，包括你的操作、各种现象、你采取的尝试，这样有利于大家快速的分析问题，帮你解决掉。 建议你学习这篇文章《提问的智慧》 http://www.jianshu.com/p/60dd8e9cd12f

user: user-3
content: VC6太老了，经常各种问题  另外你代码scanf中引号位置错了，这虽然不会引起编译错误，但运行时可能会崩

user: user-4
content: 引用 6 楼 qq_30202127 的回复:引用 1 楼 cherish_ff 的回复:scanf（“%f”，&weight）我试了下，还是不对啊。什么情况？编译器太老了吗？  你那什么错误，这几行还扯不上编译器。

user: user-0
content: 引用 1 楼 cherish_ff 的回复:scanf（“%f”，&weight）我试了下，还是不对啊。什么情况？编译器太老了吗？

user: user-5
content: Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579 Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

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

user: user-6
content: 注意细节啊。。 建议楼主可以换个IDE了，VC6太老了，建议换成VS

user: user-5
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-4
content: scanf（“%f”，&weight）
user-0 提问: c语言文件导入导出

回复:
user: user-0
content: 解决了 在LoadAdd函数里面声明一个node变量，分配内存空间。 每调用一次LoadAdd,就为P重新分配一次内存空间。 int LoadAdd(node *h) {     node *p = (node *)malloc (sizeof(node));     strcpy(p->Name,h->Name);     strcpy(p->address,h->address);     strcpy(p->num,h->num);     p->next=NULL;     printf("%s\n%s\n%s\n",p->Name,p->address,p->num);     p->next=Number[Hashtable_Number(p->num)]->next;     Number[Hashtable_Number(p->num)]->next=p;      return 0; }

user: user-0
content: 单步调试已经找到问题了、 这句话中，h被连接到了两个指针后面，所以两个不为空的指针输出的都是h         h->next=NULL;         h->next = Number[Hashtable_Number(h->num)]->next;         Number[Hashtable_Number(h->num)]->next=h;  有什么解决办法呢？

user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 遇到问题单步跟踪分析原因更容易解决问题

user: user-0
content: 我把Load函数里面的fscanf函数改成了fread函数 现在在命令行里面可以正常显示了 int LoadAdd(node *h) {     h->next=NULL;     h->next=Number[Hashtable_Number(h->num)]->next;     Number[Hashtable_Number(h->num)]->next=h;     printf("%s\n%s\n%s\n",h->Name,h->address,h->num);     return 0; }  int Load() {     FILE*fp;     node *h;     int i;      if(!(h = (node *)malloc (sizeof(node))))     {          printf("分配内存失败\n");     }     if((fp=fopen("result.txt","r")) == NULL)//以只读形式打开二进制文件     {         printf ("Fail to load\n");     }     fseek(fp,0,SEEK_END);     int m=ftell(fp)/sizeof(node);     fseek(fp,0,SEEK_SET);      for(i=0;i<m;i++)     {         fread(h,sizeof(node),1,fp);         LoadAdd(h);     }      fclose(fp);      return 0; }  但是node却在添加过程中出了问题

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

回复:
user: user-1
content: 同时这也是为什么定义指针变量后可以成功运行的原因。

user: user-1
content: 简单来说，a和b是不可改变的常量，并不是变量。只有变量支持改变，包括++。

user: user-2
content: 你的a和b是数组名，不能++ 你应该用指针指向数组，然后进行++操作  #include <stdio.h> int main(void) { 	char a[20] = "hello"; 	char b[] = "world"; 	char *p = a; 	char *q = b; 	while ((*p) != '\0') 	{ 		p++; 	} 	while ((*q) != '\0') 	{ 		*(p++) = *(q++); 	} 	printf("a = %s", a); 	return 0; }

user: user-3
content: 变量a和b是定义的数组，虽然代表了数组首地址和第一个元素的地址，但是是不能改变的，不能对其做赋值运算，但是可以给其他变量赋值，楼主可以通过以下方式来对数组进行引用    char* pa =a; char* pb = b; ……  pa++； pb++；

user: user-4
content: a++，b++是不行的。因为他们的类型都是char[]数组类型
user-0 提问: 无法跳入mian函数中的while循环

回复:
user: user-1
content: 倒数第一个while这一行后面加了分号，去掉试试

user: user-2
content: while (pTemp!=pHead);  后面多了分号，以使while成了循环体为空，并不是后面大括号中的内容

user: user-3
content: main函数里while (pTemp != pHead);这句后面多了个分号

user: user-4
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

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

回复:
user: user-1
content: int_object.SetString(test,strlen(test));   改为 int_object.SetString(test,strlen(test)，allocator);  就好了。

user: user-0
content: 刚才结果写错了实际结果是： haha_2 haha_2 haha_2
user-0 提问: 关于C语言加密函数

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

user: user-2
content: BASE64 又不是加密,   本来就是明文啊.   邮件加密用 S/MIME 或者  PGP/GPG 啥的也不错,  这些都基于 PKCS,   在量子计算出现前都足够安全鸟...
user-0 提问: C语言运行输入数字后，没有任何输出，并且会出现等待关闭的对话框。这是代码的问题吗？

回复:
user: user-1
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];  现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-2
content: 是不是 还要加下 getchar(); 或 system("pause");

user: user-1
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-3
content: 确实是代码问题 http://blog.csdn.net/lambyuyu/article/details/5544341

user: user-4
content: primenum函数中输出应该是printf

user: user-5
content: scanf("%d isn't prime number",a);   scanf("%d is prime number",a);    这里应该是用printf  printf是输出，scanf是输入  如果printf，后面要写成&a
user-0 提问: 关于c语言基础 位移问题

回复:
user: user-1
content: int x=0x12345678; assert(( x & 0x0000FFFF )==0x00005678);

user: user-2
content: 没太搞懂楼主啥意思，可以自己转换成二进制去计算一下

user: user-0
content: 知道什么原因了
user-0 提问: codeblocks运行有问题啊

回复:
user: user-1
content: 我也遇到这样的问题，请问楼主怎么解决的？

user: user-0
content: 呃，已经解决了，谢谢大家

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

user: user-2
content: 安装360安全卫士 一键优化 卸载360安全卫士

user: user-3
content: 1）重做系统，或者买新电脑 2）清理垃圾 3）不要太多杀毒软件 4）及时查杀病毒 。。。。。。。。。。

user: user-4
content: 光从这儿看不出什么问题，不过3秒多是比较慢

user: user-0
content: 不过关闭那个窗口后有这么一句

user: user-0
content: 没修改过啊，我刚装的系统，所有盘都清空了一遍才装的。

user: user-5
content: 你之前对CB做了什么更改？

user: user-0
content: 一个样子。。。

user: user-5
content: 你这样试试

user: user-0
content: 但是反应速度慢了好多啊。有办法调回原来的样子吗？

user: user-4
content: 没问题，很好的
user-0 提问: 不太懂进程这一块儿的东西，麻烦帮忙看看

回复:
user: user-1
content: 杀毒软件是程序开发的“猪队友”。

user: user-0
content: 引用 9 楼 user-3的回复:[quote=引用 8 楼 shiyuzuxiaqianli 的回复:] [quote=引用 7 楼 user-3的回复:][quote=引用 6 楼 shiyuzuxiaqianli 的回复:]  那个500还没改过来[/quote] 已改，还是不行，估计不是这里的问题。[/quote]C程序没问题。Sleep(500)只是闪一下。检查下IE[/quote] 先吃饭去啦，回来再查查看

user: user-2
content: Sleep(5000) 才是5s  不然只是500ms

user: user-3
content: 引用 8 楼 shiyuzuxiaqianli 的回复:[quote=引用 7 楼 user-3的回复:][quote=引用 6 楼 shiyuzuxiaqianli 的回复:]  那个500还没改过来[/quote] 已改，还是不行，估计不是这里的问题。[/quote]C程序没问题。Sleep(500)只是闪一下。检查下IE

user: user-0
content: 引用 7 楼 user-3的回复:[quote=引用 6 楼 shiyuzuxiaqianli 的回复:]  那个500还没改过来[/quote] 已改，还是不行，估计不是这里的问题。

user: user-3
content: 引用 6 楼 shiyuzuxiaqianli 的回复: 那个500还没改过来

user: user-0

user: user-0
content: 如图，关键是打不开IE

user: user-3
content: 引用 3 楼 shiyuzuxiaqianli 的回复:[quote=引用 2 楼 user-3 的回复:] #define CMD    " http://www.baidu.com/" 前面带一个空格空格加上去了，可是依然无法启动IE。。。[/quote] 打印的错误号是什么

user: user-0
content: 引用 2 楼 user-3 的回复:#define CMD    " http://www.baidu.com/" 前面带一个空格空格加上去了，可是依然无法启动IE。。。

user: user-3
content: #define CMD    " http://www.baidu.com/" 前面带一个空格

user: user-0
content: 23行写错啦应该是Sleep(5000);

user: user-0
content: 引用 17 楼 user-3 的回复:[quote=引用 16 楼 shiyuzuxiaqianli 的回复:] [quote=引用 15 楼 user-3 的回复:] [quote=引用 14 楼 shiyuzuxiaqianli 的回复:] [quote=引用 13 楼 user-3的回复:]windows中，找到“运行”，输入 C:\Program Files\Internet Explorer\iexplore.exe http://www.baidu.com/ 看能不能启动IE和百度 可以的，这个之前就试过了[/quote]这就怪了，我试了试，程序运行正常。你那个500改大了吗[/quote]好了，莫名其妙的好了，不知道是哪里出了问题。我刚才把IE版本升级了一下[/quote]也说不定是杀毒、防木马软件捣的鬼[/quote]好吧，太可恶了

user: user-3
content: 引用 16 楼 shiyuzuxiaqianli 的回复:[quote=引用 15 楼 user-3 的回复:] [quote=引用 14 楼 shiyuzuxiaqianli 的回复:] [quote=引用 13 楼 user-3的回复:]windows中，找到“运行”，输入 C:\Program Files\Internet Explorer\iexplore.exe http://www.baidu.com/ 看能不能启动IE和百度 可以的，这个之前就试过了[/quote]这就怪了，我试了试，程序运行正常。你那个500改大了吗[/quote]好了，莫名其妙的好了，不知道是哪里出了问题。我刚才把IE版本升级了一下[/quote]也说不定是杀毒、防木马软件捣的鬼

user: user-0
content: 引用 15 楼 user-3 的回复:[quote=引用 14 楼 shiyuzuxiaqianli 的回复:] [quote=引用 13 楼 user-3的回复:]windows中，找到“运行”，输入 C:\Program Files\Internet Explorer\iexplore.exe http://www.baidu.com/ 看能不能启动IE和百度 可以的，这个之前就试过了[/quote]这就怪了，我试了试，程序运行正常。你那个500改大了吗[/quote]好了，莫名其妙的好了，不知道是哪里出了问题。我刚才把IE版本升级了一下

user: user-3
content: 引用 14 楼 shiyuzuxiaqianli 的回复:[quote=引用 13 楼 user-3的回复:]windows中，找到“运行”，输入 C:\Program Files\Internet Explorer\iexplore.exe http://www.baidu.com/ 看能不能启动IE和百度 可以的，这个之前就试过了[/quote]这就怪了，我试了试，程序运行正常。你那个500改大了吗

user: user-0
content: 引用 13 楼 user-3的回复:windows中，找到“运行”，输入 C:\Program Files\Internet Explorer\iexplore.exe http://www.baidu.com/ 看能不能启动IE和百度 可以的，这个之前就试过了

user: user-3
content: windows中，找到“运行”，输入 C:\Program Files\Internet Explorer\iexplore.exe http://www.baidu.com/ 看能不能启动IE和百度

user: user-0
content: 引用 9 楼 user-3的回复:[quote=引用 8 楼 shiyuzuxiaqianli 的回复:] [quote=引用 7 楼 user-3的回复:][quote=引用 6 楼 shiyuzuxiaqianli 的回复:]  那个500还没改过来[/quote] 已改，还是不行，估计不是这里的问题。[/quote]C程序没问题。Sleep(500)只是闪一下。检查下IE[/quote] 怎么检查IE呢？不知道是什么问题
user-0 提问: 怎样让一个数组元素的个数始终固定为一个定值

回复:
user: user-0
content: 多谢，就是要这样的效果

user: user-1
content: 等间距取元素吗？  #include <stdio.h>  int filter(int* src,int ns,int* result,int nr) { 	int step;								//采样步长 	int o = 0;								//输出序号 	int i; 	int r;									//执行除法的余数 	int op = 0;								//按step+1采样的个数  	if(ns <= 0) return o;  	if(ns <= nr)							//样本小时逐个输出 	{ 		step = 0; 		op = nr = ns; 	} 	else 	{ 		step = (ns - 1) / (nr - 1); 		r = (ns - 1) % (nr - 1);  		if(r >= step)						//仅余数大于步长时将多出的加到前几次采样中 			op = r; 	}  	for(i=0,o=0;o<nr;o++){ 		result[o] = src[i]; 		i += step; 		if(o < op) i++; 	}  	return o; }  void show(int* arry,int len) { 	int i; 	for(i=0; i<len; i++) 	{ 		if(i != 0) printf(","); 		printf("%d",arry[i]); 	} 	printf("\n"); }  int main() { 	int Array_1[13]; 	int result[5]; 	int i,o,n;  	for(i=0; i<sizeof(Array_1)/sizeof(int); i++) 		Array_1[i] = i + 1;  	for(n=0; n<sizeof(Array_1)/sizeof(int); n++) 	{ 		o = filter(Array_1,n,result,sizeof(result)/sizeof(int)); 		printf("src: "); 		show(Array_1,n); 		printf("dst: "); 		show(result,o); 		printf("\n"); 	}  	return 0; }   运行结果如下：  红框框出不一致的地方，应该是楼主的问题吧？

user: user-0
content: 用程序去完成

user: user-2
content: 建议楼主先修一下《数理逻辑》

user: user-3
content: 你都把这个问题说很清楚了，还有什么问题，按你描述逻辑写就行了

user: user-0
content: 就是求一个筛选算法，完成上述功能就可以了

user: user-4
content: 筛选算法是什么？ 能把算法描述清楚，这个工作就已经完成了

user: user-5
content: 我知道了，楼主大概是想减小采样率，或者是做一种抽样.....但这个用初中数学就能解决啊

user: user-6
content: “”最终元素要是原来数组元素差不多间距位置的元素“” 这句话真心不懂。
user-0 提问: C语言黑框一闪就没了

回复:
user: user-1
content: 你在每一个 return 1; 前面也加上 system("pause"); 试试

user: user-0
content: 引用 1 楼 user-1 的回复:改成什么样了，发出来看看 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h>   #define A 10//行数 #define B 35//列数  int main()  { 	double  start, finish; 	start = clock();//取开始时间     int data[A][B];//用于存放栅格数据 	int suit[A][B];//用于存放限制值 	int so[A][B];//用于存放影响因子       FILE *fp;//读取栅格数据     fp=fopen("text.txt","r");     if(!fp) 	{         printf("不能找到text.TXT!");         return 1;     }     for(int i=0;i<A;i++)         for(int j=0;j<B;j++)             fscanf(fp,"%d",&data[i][j]);     fclose(fp);  	FILE *fp2;//读取限制条件     fp2=fopen("1.txt","r");     if(!fp2) 	{         printf("不能找到1.TXT!");         return 1;     }     for(int i=0;i<A;i++)         for(int j=0;j<B;j++)             fscanf(fp2,"%d",&suit[i][j]);     fclose(fp2); 	 	FILE *fp3;//读取影响因子     fp3=fopen("2.txt","r");     if(!fp3)  	{         printf("不能找到2.TXT!");         return 1;     }     for(int i=0;i<A;i++)         for(int j=0;j<B;j++)             fscanf(fp3,"%d",&so[i][j]);     fclose(fp3); 	     for(int i=0;i<A;i++)         for(int j=0;j<B;j++)             printf("data[%d][%d]=%d\n",i,j,so[i][j]);  	float P[A][B]={0};//定义转换概率二维数组 	int near=0;//定义领域内建设用地的数目 	 	//for(int time=1;time<11;time++)//time为迭代次数+1 	//{ 		for(int i=1;i<A-1;i++)//计算P的值 		{ 			for(int j=1;j<B-1;j++) 			{ 				if(data[i][j]==-9999||data[i][j]==1)//判断用地类型，排除数据空值和原本的城镇用地 					P[i][j]=0; 				else 					for(int m=i-1;m<i+2;m++) 					{ 						for(int n=j-1;n<j+2;n++) 						{ 							if(data[m][n]==1) 							{ 								near=near+1; 							} 						} 					} 					//float near2=near/8; 					//float randdata=1+pow(-log(rand()/(RAND_MAX+1.0)), 2);//随机影响因素 					int suitdata=suit[i][j];//限制值 					int posdata=so[i][j];//开发概率 					P[i][j]=near+suitdata+posdata; 					near=0; 					printf("P[%d][%d]=%f\n",i,j,P[i][j]); 			} 		} 	finish = clock();//取结束时间 	printf( "本次运行消耗%f seconds\n",(finish - start) / CLOCKS_PER_SEC);//以秒为单位显示之     system("pause");     return 0; }

user: user-1
content: 改成什么样了，发出来看看
user-0 提问: C语言小程序中一个“ 1 个无法解析的外部命令”错误！！！

回复:
user: user-0
content: 引用 23 楼 ljcljxsxq 的回复:感觉有点像是上次的编译器没有关闭  我的这个问题已经解决了，谢谢你。

user: user-1
content: 感觉有点像是上次的编译器没有关闭

user: user-0
content: 引用 21 楼 u012997273 的回复:[quote=引用 20 楼 dear_Alice_moon 的回复:] [quote=引用 19 楼 u012997273 的回复:] 楼主，我好像认识你，哈哈 这个问题提示的已经很明显了，就是入口函数的问题 一般c的是main，windows 的是winmain，俺已经不搞技术了，但是问题在哪，还是一眼能看出来滴    你认错人了，我目前还是一位在校生。  谢谢你的回复，谢谢。    [/quote]  嗯，我好像搞错了[/quote]

user: user-2
content: 引用 20 楼 dear_Alice_moon 的回复:[quote=引用 19 楼 u012997273 的回复:] 楼主，我好像认识你，哈哈 这个问题提示的已经很明显了，就是入口函数的问题 一般c的是main，windows 的是winmain，俺已经不搞技术了，但是问题在哪，还是一眼能看出来滴    你认错人了，我目前还是一位在校生。  谢谢你的回复，谢谢。    [/quote]  嗯，我好像搞错了

user: user-0
content: 引用 19 楼 u012997273 的回复:楼主，我好像认识你，哈哈 这个问题提示的已经很明显了，就是入口函数的问题 一般c的是main，windows 的是winmain，俺已经不搞技术了，但是问题在哪，还是一眼能看出来滴    你认错人了，我目前还是一位在校生。  谢谢你的回复，谢谢。

user: user-2
content: 楼主，我好像认识你，哈哈 这个问题提示的已经很明显了，就是入口函数的问题 一般c的是main，windows 的是winmain，俺已经不搞技术了，但是问题在哪，还是一眼能看出来滴

user: user-3
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt  Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579

user: user-0
content: 引用 14 楼 NabariOu 的回复:最后的调用函数，return后面括号都没有  return后的花括号是有的。

user: user-0
content: 引用 16 楼 zhao4zhong1 的回复:Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt  Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载 http://bbs.csdn.net/topics/390812579  谢谢，真的谢谢赵老师。编辑器，我自己在网上找到了。谢谢

user: user-4
content: 帮顶

user: user-5
content: 最后的调用函数，return后面括号都没有

user: user-6
content: main函数是在源文件里，不是新建头文件

user: user-7
content: 解决了就分享下给大家共勉！可以结贴了！

user: user-0
content: 引用 5 楼 xmt1139057136 的回复:c不太会啊，www.xttblog.com   没关系，问题已经解决了。谢谢

user: user-7
content: c不太会啊，www.xttblog.com

user: user-0
content: 引用 11 楼 lm_whales 的回复:开发环境问题 重新安装  我应经在第2楼给了问题的解决方法。  不需要重新安装软件。谢谢

user: user-0
content: 引用 10 楼 user-9 的回复:用工具还要考虑操作的问题，通常linux用vim非常方便从不会有这样的问题，楼主编写测试程序可以考虑转linux平台，便于以后开发  嗯，谢谢你的提醒。  Linux我用了一点点，对于Linux的系统命令不懂，弄得我很难受。我对Linux一点都不懂，自学起来难度非常大！自学起来好困难！

user: user-8
content: 开发环境问题 重新安装

user: user-9
content: 用工具还要考虑操作的问题，通常linux用vim非常方便从不会有这样的问题，楼主编写测试程序可以考虑转linux平台，便于以后开发

user: user-0
content: 引用 8 楼 paschen 的回复:main函数是在源文件里，不是新建头文件  嗯，谢谢。
user-0 提问: scanf输入非零数后得到的确是零，请问哪里出了问题？

回复:
user: user-1
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];

user: user-0
content: 谢谢user-3，小灸舞和赵4老师指点和提戒，C语言就是一个在细节上见功夫的语言，pitfalls和traps多啊！要仔细仔细再仔细才能达到最低要求。

user: user-2
content: C语言中的格式占位符： %a,%A 读入一个浮点值(仅C99有效) %c 读入一个字符 %d 读入十进制整数 %i 读入十进制，八进制，十六进制整数 %o 读入八进制整数 %x,%X 读入十六进制整数 %s 读入一个字符串，遇空格、制表符或换行符结束。 %f,%F,%e,%E,%g,%G 用来输入实数，可以用小数形式或指数形式输入。 %p 读入一个指针 %u 读入一个无符号十进制整数 %n 至此已读入值的等价字符数 %[] 扫描字符集合 %% 读%符号

user: user-3
content: 如果要unsigned short，用 %hu

user: user-3
content: scanf("%u", &n);  %u对应的是unsigned int ，而不是unsigned short
user-0 提问: 用c语言怎么删除字符串中某段字符串啊，要删除的字符串知道开头跟结尾 

回复:
user: user-1
content: 基本可以用下面的代码，如果不合适调整一下。  char sSourE[1024] = "iuncoao14cscsdzsxcwvwv1x"; char *s1 = "co" char *s2 = "4c" char *p1 = NULL, *p2 = NULL; p1 = strstr(sSour, s1); p2 = strstr(s1, s2); while(*p2) {  *p1  =  *p2;   p1++;   p2++ }

user: user-2
content: 方法二，让字符串指针指向co，然后在4c的下一个字符改成'\0'

user: user-2
content: 方法一：将需要的部分复制出来
user-0 提问: ZwSetSystemInformation返回c0000061

回复:
user: user-1
content: 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。
user-0 提问: 数据结构中序遍历问题

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

user: user-2
content: 仅当GetTop(S,p)&&p.data满足时才循环

user: user-0
content: 大神，请问上面的红色的功能是什么啊？
user-0 提问: 自己写了个strpbrk...结果段错误了.求助!

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

user: user-2
content: 引用 3 楼 zw545378330的回复:首先不说程序干嘛的，你的函数返回null，且不判断是否为空直接使用这就是错误。你的问题是内部循环没有查找到第一个字符，返回了null。再就是你的内部循环是不是少了，例如第一个字符没找到，第二个字符从哪里开始找？ 说直白点，访问null所指空间☞是非法的

user: user-3
content: 要注意每次循环是不是要把什么变量重新置为初始值。  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: 另外，如果返回值是NULL，再取*是错误的

user: user-4
content: 单步跟踪程序运行，观察分析原因

user: user-2
content: 首先不说程序干嘛的，你的函数返回null，且不判断是否为空直接使用这就是错误。你的问题是内部循环没有查找到第一个字符，返回了null。再就是你的内部循环是不是少了，例如第一个字符没找到，第二个字符从哪里开始找？

user: user-0
content: 发现问题了..........内圈循环跑飞了..........

user: user-0
content: 数组没有越界的,第二个看着有点长,但是够了
user-0 提问: 安装wdm驱动报错》由于没有为设备实例指定函数驱动程序，安装没有成功

回复:
user: user-1
content: Windows驱动开发 http://www.osronline.com/

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:Windows驱动开发 http://www.osronline.com/ 没看懂，你直接跟我说改哪里吧

user: user-0
content: 求人大神分分钟解决

user: user-0
content: 。。。。。。没人么
user-0 提问: realloc成功了为什么最后free还会出错，调试地址也没变,求大神解答

回复:
user: user-1
content: 引用 11 楼 mstlq 的回复:简单例子模拟类似楼主错误,连realloc都不需要，注意第一句的500和第二句的1000  char *p=malloc(500); memset(p,7,1000); free(p);  这种问题可以通过以下办法捕获：#include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-2
content: 简单例子模拟类似楼主错误,连realloc都不需要，注意第一句的500和第二句的1000  char *p=malloc(500); memset(p,7,1000); free(p);

user: user-2
content: 5楼所言甚是，还请楼主仔细检查

user: user-3
content: 我的程序  多加入三个字符没有申请多申请3个 使用用-lmcheck   ，报错memory clobbered past end of allocated block

user: user-1
content: if (!(psTemp = (double*)realloc(pS, (LENGTH + n)*sizeof(double)))) {

user: user-0
content: 引用 2楼小灸舞 的回复:你这个肯定是越界破坏了堆空间。 导致内存管理信息被破坏，所以free出错我调试了，但是发现指针地址都没有变化，而且数值也没有出错，应该没有越界

user: user-4
content: 引用 3 楼 NabariOu的回复:引用 1楼paschen 的回复:检查使用分配的内存有没出现越界情况，如果有会破坏了堆空间，通常表现在释放的时候出错我调试了，但是发现指针地址都没有变化，而且数值也没有出错，应该没有越界 不是只有指针改变才会越界

user: user-5
content: PROTOTYPE: void * realloc ( void * ptr, size_t new_size );  关于realloc的行为方式，结合源码总结为： 1. realloc失败的时候，返回NULL；  2. realloc失败的时候，原来的内存不改变，也就是不free或不move，(这个地方很容易出错)；  3. 假如原来的内存后面还有足够多剩余内存的话，realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址; 假如原来的内存后面没有足够多剩余内存的话，realloc将申请新的内存，然后把原来的内存数据拷贝到新内存里，原来的内存将被free掉,realloc返回新内存的地址；  4. 如果size为0，效果等同于free()；  5. 传递给realloc的指针可以为空，等同于malloc；  6. 传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的。

user: user-6
content: 引用 4 楼 NabariOu 的回复:[quote=引用 2楼小灸舞 的回复:]你这个肯定是越界破坏了堆空间。 导致内存管理信息被破坏，所以free出错我调试了，但是发现指针地址都没有变化，而且数值也没有出错，应该没有越界[/quote]  你描述的现象（指针地址都没有变化，而且数值也没有出错）无法得到你的结论（没有越界）

user: user-0
content: 引用 1楼paschen 的回复:检查使用分配的内存有没出现越界情况，如果有会破坏了堆空间，通常表现在释放的时候出错我调试了，但是发现指针地址都没有变化，而且数值也没有出错，应该没有越界

user: user-5
content: 你这个肯定是越界破坏了堆空间。 导致内存管理信息被破坏，所以free出错

user: user-4
content: 检查使用分配的内存有没出现越界情况，如果有会破坏了堆空间，通常表现在释放的时候出错
user-0 提问: 新手上路，求教vs 2015读取txt的问题

回复:
user: user-0
content: 引用 1 楼 qq423399099 的回复:txt文件应该放在工程目录文件夹下，而不是你EXE所在的DEBUG目录下。 楼主也可以用绝对路径试试。  好的我去试试谢谢您

user: user-1
content: txt文件应该放在工程目录文件夹下，而不是你EXE所在的DEBUG目录下。 楼主也可以用绝对路径试试。
user-0 提问: 可变参数函数的问题，麻烦帮助。有代码，有错误详细截图

回复:
user: user-1
content: 因为你尝试用 %d 来输出一个 char* （"20"）

user: user-0
content: 参数2输出到文件明显是错误的

user: user-0
user-0 提问: 一个简单问题

回复:
user: user-0
content: 确实是这样，我太粗心了

user: user-1
content: 其实只是循环了i次，你之所以会需要多输入一次是因为你的scanf("%d\n")这个里面的\n (你这里完全可以改成scanf("%d",num + n);) \n,空格和制表符，是空白符。 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。 只有输入一个非空白符的时候才能终止scanf的输入。 如果你一定要这样用scanf("%d\n", &i); 你输入一个数后，它是不会立即显示的，要等再接收到一个非（空格、制表符、回车）的输入scanf语句才结束。
user-0 提问: realloc成功了为什么最后free还会出错，调试地址也没变，为什么

回复:
user: user-1
content: 检查使用分配的内存有没出现越界情况，如果有会破坏了堆空间，通常表现在释放的时候出错

user: user-2
content: 麻烦你这样输入代码麻烦你这样输入代码方便他人，方便自己
user-0 提问: 结构体的伸缩型数组成员 为其分配存储空间 分配不了

回复:
user: user-1
content: 这是 C ，注意不要用C++ 编译器或者编译器的 C++ 模式。  扩展名是 .cpp , .cc 等的一般会自动进入 C++ 模式。 扩展名是 .c 的一般会自动使用 C 模式

user: user-2
content: 引用 1 楼 user-4 的回复:double scores[];要攺成double scores[0]; 改成 0 才会出问题。这里只能空着，要么写大于 0 的数字。 如果不是因为 360 报错，那就是编译器太老不支持。

user: user-0
content: 可以了，谢谢！ @user-4  刚刚不知道为什么赋不了值，可能是开了360~

user: user-3
content: 没错啊，你用的什么编译器

user: user-0
content: @user-4 我试过你这样定义，没有报错，但后面赋值就会出现问题。

user: user-4
content: pg = (struct grade *)malloc( sizeof(struct grade) + n * sizeof(double) );  新版支持array[]这样的定义了啊?

user: user-4
content: double scores[];要攺成double scores[0];
user-0 提问: C语言创建二叉树，栈溢出。。，求解(只剩40分了，全发)

回复:
user: user-1
content: C中整型和字符型可以比较，建议用C编译器而不要用C++编译器编译C程序

user: user-0
content: 引用 1 楼 qq423399099 的回复:1.栈溢出是因为你的if(x=='#') 这句，你的x是整形，这样判断是不行的 2.你的CreateTree函数写的也有问题，你如果想把malloc的任务都放在CreateTree函数里，那么必须用二级指针才行 3.你的TreePrint函数里应该用if而不是while  #include <stdlib.h> #include <stdio.h>  typedef struct bTree { 	int data; 	struct bTree *pLeftChild; 	struct bTree *pRightChild;  }bTree;  bool CreateTree(bTree **T); void TreePrint(bTree * T);  int main(int argc, char* argv[]) { 	bTree *T = NULL; 	CreateTree(&T); 	printf("----打印树----\n"); 	TreePrint(T); 	return 0; }  bool CreateTree(bTree **T) { 	int x = 0; 	scanf("%d", &x); 	if (x == 0) 	{ 		*T = NULL; 		return false; 	} 	else 	{ 		*T = (bTree *)malloc(sizeof(bTree)); 		(*T)->data = x; 		CreateTree(&(*T)->pLeftChild); 		CreateTree(&(*T)->pRightChild); 	}  	return true; }  void TreePrint(bTree * T) { 	if (T) 	{ 		printf("%d\n", T->data); 		TreePrint(T->pLeftChild); 		TreePrint(T->pRightChild); 	} }       谢谢小灸舞，真是一言惊醒梦中人，我今天写代码写到傻掉了。

user: user-2
content: 借用赵四老师的话： 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-3
content: 1.栈溢出是因为你的if(x=='#') 这句，你的x是整形，这样判断是不行的 2.你的CreateTree函数写的也有问题，你如果想把malloc的任务都放在CreateTree函数里，那么必须用二级指针才行 3.你的TreePrint函数里应该用if而不是while  #include <stdlib.h> #include <stdio.h>  typedef struct bTree { 	int data; 	struct bTree *pLeftChild; 	struct bTree *pRightChild;  }bTree;  bool CreateTree(bTree **T); void TreePrint(bTree * T);  int main(int argc, char* argv[]) { 	bTree *T = NULL; 	CreateTree(&T); 	printf("----打印树----\n"); 	TreePrint(T); 	return 0; }  bool CreateTree(bTree **T) { 	int x = 0; 	scanf("%d", &x); 	if (x == 0) 	{ 		*T = NULL; 		return false; 	} 	else 	{ 		*T = (bTree *)malloc(sizeof(bTree)); 		(*T)->data = x; 		CreateTree(&(*T)->pLeftChild); 		CreateTree(&(*T)->pRightChild); 	}  	return true; }  void TreePrint(bTree * T) { 	if (T) 	{ 		printf("%d\n", T->data); 		TreePrint(T->pLeftChild); 		TreePrint(T->pRightChild); 	} }
user-0 提问: 求折点个数！运行老是自动终止，求助求助！谢谢！！

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: 1.getchar()可以去掉 2.for的第二部分和第三部分你搞错顺序了 3.if判断也有问题，应该是if (aa[i]>aa[i - 1] && aa[i]<aa[i + 1])  #include<iostream> using namespace std; int main(){ 	int n; 	cin >> n; 	//getchar(); 	int *aa = new int[n]; 	int i, count = 0; 	for (i = 0; i < n; i++) 		cin >> aa[i]; 	for (i = 1; i<n - 1; i++){ 		if (aa[i]>aa[i - 1] && aa[i]<aa[i + 1]) 			count++; 	} 	delete[]aa; 	cout << count << endl; 	return 0; }

user: user-3
content: for语句的格式…… for (/*初始化*/; /*条件*/; /*循环末子句*/) { /* ... */ }

user: user-4
content: 你的for（i=0;i<n;i++）你写反了  你要是单步调式你就明白了为什么只能这样写
user-0 提问: 输入数字的个数，求他们的最大公约数

回复:
user: user-1
content: 1）遍历法，只需要N-1 次 求最大公约数，即可求出最大公约数，好处是一个循环结束。逻辑简单 2）多轮两两相求法，次数为N/2+N/4+...N/2^k 应该也为N-1次吧，好处是每一轮的公约数，总是变小，实际复杂度变小。  算法时间复杂度， 最坏O(N *log(max(ai)))

user: user-2
content: 求两个数的最大公约数使用辗转相除法，多个数的最大公约数也是类似的，先计算n个数其中两个数的最大公约数，得到的数放入原先的序列中，将本轮进行计算的两个数拿出来，这样就得到一个n-1长度的序列，再求这n-1个数的最大公约数，过程和前面是一样的。重复这一过程直到n=1为止，这个数就是最大公约数。为了降低计算量，计算之前首先将序列降序排列，每次取最大的两个数做辗转相除，这样子应该会更加高效一点。

user: user-1
content: 分组，求公约数多次即可 两两一组

user: user-3
content: 把数组 0 作为 结果。 从数组 1 开始一次遍历，和结果求最大公约数，保存到结果中。 最大公约数使用辗转相除法。

user: user-4
content: 引用 6 楼 kongl123 的回复:如果这一组是大数的话还真不好做。 上面几楼的方法都有问题。。。辗转相除法是可以的，我错了

user: user-4
content: 如果这一组是大数的话还真不好做。 上面几楼的方法都有问题。。。

user: user-5
content: http://blog.csdn.net/iwm_next/article/details/7450424

user: user-6
content: 引用 楼主 qida0911 的回复:输入数字的个数，求他们的最大公约数 如输入len=5 arr{2,4,6,8,10｝ 输出2 arr{2,4,6,8,10｝ 这个是从哪里来的？都是偶数？ 也就是数的列表从哪里来的？ 从2开始的偶数？ 如果是这样，都不用计算了，无论输入什么都是2。。。 如果数列是不确定的。 那么就找到数列中最小的数，递减，再用数列里的数逐个除以这个数，如果都没有余数，那就是最大公约数了。

user: user-4
content: 引用 1 楼 zhao4zhong1 的回复:搜“辗转相除法”这是求两个数的，这里好像不太奏效啊

user: user-4
content: 因式分解一个数，把所有因子作为一个集合，用这个集合和剩下的每个数作比较，把不能整除的因子从集合删除，最后集合中最大的数就是最大公约数

user: user-7
content: 搜“辗转相除法”

user: user-1
content: 引用 10 楼 lm_whales 的回复:N个数，中 n-1，n-2,,,,,2 个数的公约数 一定>= 这N 个数的公约数 所以，公约数，只会越求越小，不会越求越大 所以，只要有办法求两个数的公约数 那么，就可以求出 N个数的公约数， 总的来说，时间复杂度不会很高的 达不到 O(max(N,max(xi))^2) 所以，不需要怎么考虑时间复杂度 甚至也达不到O(N log(max(xi));  修改一下

user: user-1
content: N个数，中 n-1，n-2,,,,,2 个数的公约数 一定>= 这N 个数的公约数 所以，公约数，只会越求越小，不会越求越大 所以，只要有办法求两个数的公约数 那么，就可以求出 N个数的公约数， 总的来说，时间复杂度不会很高的 达不到 O(max(N,max(xi))) 所以，不需要怎么考虑时间复杂度 甚至也达不到O(N log(max(xi));
user-0 提问: 给len个整数，求最小公约数 如给arr {2 4 6 8｝输出为2

回复:
user: user-1
content: 做一个求两个数最小公约数的程序  每相邻两个数求最小公约数， 对求出来的最小公约数，再次运用此法 直至求出为止

user: user-2
content: 可以参考一下，我写的代码 #include<iostream> using namespace std;  int main() { 	int arr[1000]; 	int len;  cin >> len; 	for(int i = 0; i < len; i++) 	{ 		cin >> arr[i]; 	} 	int iMAX = 0; //存储最大公约数  	int iMin = INT_MAX; 	 	for(int i = 0; i < len; i++) 	{ 		if(arr[i] < iMin) iMin = arr[i]; 	} 	 	int flag = false; //作为标志  	for(int i = 1; i <= iMin; i++) //iMin存储数组中最小数  	{ 		 		for(int j = 0; j < len; j++) 		{ 			if(arr[j]%i != 0)  			{ 				flag = true; 				break; 			} 		} 		 		if(!flag) 		{ 			iMAX = i; 			flag = false ; 		} 		if(flag) flag = false;			 	} 	cout << iMAX << endl; 	return 0; }

user: user-2
content: 给你一个，时间有点复杂的思路，从1开始到数组中最小的数，看是否有一个数能被所有的整除，如果能，更新关键字，知道 完成遍历！

user: user-0
content: 给len个整数，求最大公约数 如给arr {2 4 6 8｝输出为2，如输入len=5 arr{2,4,6,8,10｝ 输出2  怎么编

user: user-0
content: 给len个整数，求最小公约数 如给arr {2 4 6 8｝输出为2，如输入len=5 arr{2,4,6,8,10｝ 输出2  怎么编

user: user-3
content: 最小

user: user-1
content: 估计写错了 最小公倍数，或者最大公约数

user: user-4
content: 最小公约数不是1么？是求最大公约数吧
user-0 提问: 救命

回复:
user: user-1
content: 你那个函数里的s=&k要去掉啊

user: user-2
content: f函数里的参数是一个形参，百度一下实参和形参的区别可以解。首先s进去是一个指向参数的指针，函数里的第一步，s保存有的全局函数k的地址，下一步，把k的值赋给s指针指向的数，即k
user-0 提问: 二进制转换到十进制 一个问题

回复:
user: user-1
content: main函数的while循环后面多了一个分号，去掉就对了  while(c!='#'); //这里多了一个分号！！！！！！！！！！！！！！ { Push(&s,c); scanf("%c",&c); }
user-0 提问: C代码运行中报Segmentation fault，求指点

回复:
user: user-1
content: 你已经指定协议是HTTPS了，参数中的主机名就不要带https://了，./https_client www.baidu.com试试

user: user-0
content: 引用 2 楼 iyomumx 的回复:这程序没写完吧…… 用法是 https_client <地址> 比如 引用$ ./https_client bbs.csdn.net (1) SSL 上下文初始化完毕  (2) 'bbs.csdn.net' 的IP地址为 '101.200.29.173' 不是程序没写完，是它第（2）步没执行完就报Segmentation fault然后异常退出了

user: user-0
content: 引用 1 楼 user-3 的回复:hostname你传递进去了么 传了呀 ./https_client https://www.baidu.com运行的

user: user-2
content: 这程序没写完吧…… 用法是 https_client <地址> 比如 引用$ ./https_client bbs.csdn.net (1) SSL 上下文初始化完毕  (2) 'bbs.csdn.net' 的IP地址为 '101.200.29.173'

user: user-3
content: hostname你传递进去了么
user-0 提问: C语言从TXT读取数字，包含空格和换行

回复:
user: user-1
content: 首先，程序中数组越界了，这是这个程序最主要的问题。 其次，这个程序还有一个潜藏的问题，就是静态分配了一个大的二维数组。目前来说A和B还不算太大，所以这个问题没有充分暴露出来。如果A和B再大一点，这种静态分配大数组的方式应该是行不通的，编译器会报错。所以最好采用动态内存分配。

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

user: user-2
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8   #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-3
content: fgets 读取一行 再去分隔读取

user: user-4
content: 你定义的数组最大下标是data[241][183],而不是data[242][184]，数组越界了

user: user-5
content: 可以自己调试一下，看看data里面的值
user-0 提问: 函数中字符串返回的问题

回复:
user: user-1
content: 在主函数释放，或等到进程退出时让操作系统帮你释放，不会死人的。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:malloc、realloc、free 引用 3 楼 qq423399099 的回复:返回生命周期结束的变量是不行的。 在函数内malloc就行了，然后返回malloc出来的首地址 然而这样就要在主函数才释放了……

user: user-2
content: 返回生命周期结束的变量是不行的。 在函数内malloc就行了，然后返回malloc出来的首地址

user: user-1
content: malloc、realloc、free

user: user-3
content: std::string？？？
user-0 提问: 数字图像处理中的相关是用的哪种

回复:
user: user-1
content: matlab opencv ？

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:我《高等数学》里面的知识都还给大学老师了。  高等数学太简单了，这个相关有两种定义的原因找不到啊，看了看，国外普遍用的是第一种，国内好像基本是第二种

user: user-1
content: 我《高等数学》里面的知识都还给大学老师了。
user-0 提问: 修改bin文件

回复:
user: user-1
content: 引用 楼主 wtb1027 的回复:有一个设备的配置bin文件，我修改了里面的标识段，保存后，但是文件打开就报错了。有那位老师可以帮修改一下吗？ 用什么编辑器修改的？ 有的编辑器修改bin文件，在保存一些数值型的内容会被破坏掉。 最好是使用16进制编辑器修改。 如同赵老师说的，修改的时候，最好保持修改标识段的长度不变。

user: user-2
content: 保持修改后长度不变再试试