Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求助！问题出在哪里？

回复:
user: user-1
content: 首先呢你的定义int 放在main函数里面，而且你要定义数组后再调用，数组不能是b［n］，数组大小一定要是申明数组这个变量时就确定的。如果要根据输入的值来确定数组的维数的话，这就要用到动态内存分配了。建议你好好看看相关数组的教学视频，补一下基础吧

user: user-2
content: 定义数组不能使用变量，比如用new开辟空间

user: user-3
content: #include<stdio.h> #include <string.h>  #define ROW     8 #define COL     4   void calculate_matrix(int (*arr)[COL]); static void output_matrix(int *arr, int max, int col);  int main(int argc, const char *argv[]) {     int i, j, cnt = 1;      //printf("请输入矩阵的行数n与列数m:");     //scanf("%d%d",&n,&m);     int array[ROW][COL];      //printf("请输入整数矩阵");     for(i = 0; i <= ROW-1; i++) {         for(j = 0; j <= COL-1; j++) {             //scanf("%d",&array[i][j]);             array[i][j] = cnt++;   /* initize the matrix. */         }     }     printf("Initize the matrix: \n");     output_matrix(&array[0][0], COL * ROW, COL);     calculate_matrix(array);      return 0; }  /* Show the array data. */ static void output_matrix(int *arr, int max, int col) {     int i;      for (i = 0; i < max; i++) {         printf("%-8d", arr[i]);         if ((i + 1) % col == 0)             putchar(10);     }     putchar(10); } void calculate_matrix(int (*array)[COL]) {     int i, j, k;     int result[ROW][ROW];     int matrix_trans[COL][ROW];       /* matrix transpose */     for (i = 0; i < ROW; i++) {         for (j = 0; j < COL; j++) {             matrix_trans[j][i] = array[i][j];         }     }     printf("After matrix transpose: \n");     output_matrix(&matrix_trans[0][0], COL * ROW, ROW);      /* matrix multip */     int res = 0;     for (i = 0; i < ROW; i++) {         for (j = 0; j < ROW; j++) {             res = 0;             for (k = 0; k < COL; k++) {                 res += array[i][k] * matrix_trans[k][j];             }             result[i][j] = res;             //printf("result = %d\n", res);         }     }      printf("Show the result: \n");     output_matrix(&result[0][0], ROW * ROW, ROW); }  这是我改你的代码,改动比较大些,你可以试一下；一下是我的一些小建议: 1) 对于数组长度建议多用宏,C语言里是不支持变长数组的, 所以建议你使用宏(当然也可以动态申请空间,可以规避变长数组)； 2) 建议你的代码写简单一些, 对于矩阵转置和乘法,可以先做转置,再做乘法,并且分在两个函数里实现(我在一个函数里做的, 你可以再分一下)这样让读你代码的人更清晰你的每个步骤,也便于理解和查找你的问题； 3) 对于变量和函数名,最好能做到见名知义,对阅读你的代码会提高效率,同时对自己将来阅读自己的代码也是有好处的；代码写出来还是要让别人和将来的自己看的,不是只为了实现功能； 4) 若有多个功能,比如你需要做初始化矩阵,矩阵转置,最后矩阵相乘,输出结果；你可以分步输出验证每步是否有问题,这样对你验证最后结果是否正确有指导意义；建议你做一个输出查看函数； 最后,加油吧,在前进的道路上总有一些做的不好的地方,不过不要灰心,一点一点努力吧~

user: user-4
content: 没有这种形式的语法：void y(int x[n][m])，不能两个维数都是不确定的值  建议动态申请内存吧（代码我直接复制楼上大神的）   int **z;         z = (int **)malloc(sizeof(int *)* n);     for (i = 0; i < n; i++)         z[i] = (int *)malloc(sizeof(int)* m);

user: user-5
content: y函数里int z[n][n];这种写法都是不对的。 可以写成用malloc来分配空间。(包含头文件stdlib.h)  int **z; 	for (i = 0; i < n; i++) 		z = (int **)malloc(sizeof(int *)* n); 	for (i = 0; i < n; i++) 		z[i] = (int *)malloc(sizeof(int)* n);
user-0 提问: 我用邻接表的写的DFS.输入有异常。求大佬帮我调试是一下。scanf("\n%c",&(G->verters[i]->data));

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

user: user-2
content: 你的G->verters[i]指针还没指向有效对象，你就去访问他的data值自然出错了：G->verters[i]->data
user-0 提问: 关于二叉树的一个小问题

回复:
user: user-1
content: void creatree(BtNode tree) 这个函数你是按值传递的，所以你在函数中将申请到的内存只是赋值给了一个复制的对象，并不是你主函数中的root  解决问题你应该传递的是root的地址

user: user-0
content: 引用 1 楼 user-2 的回复:我能帮你的是那个位置为什么会出问题，帮不了你哪个位置出了什么样的问题 也行。。都一样的。。

user: user-2
content: 我能帮你的是那个位置为什么会出问题，帮不了你哪个位置出了什么样的问题
user-0 提问: 进制转换问题求解

回复:
user: user-0
content: 就是在不用数组和递归的情况下考虑怎么做啊！

user: user-1
content: 用大数的时候可以考虑用数组来存储

user: user-2
content: 1024的时候，变量 z 已经溢出了  可以声明为long long ：  #include <stdio.h> #include <math.h> int main() { 	long int x,y,i,j,a; 	long long z; 	z=0; j=0; 	while(scanf("%ld",&x)) 	{ 		for(i=0;x!=1;i++) 		{ 			y=x%2; 			if(y==0) 			{ 				j++; 				x=x/2; 			} 			else 				break; 		} 		for(i=0;x!=1;i++) 		{ 			y=x%2; 			x=x/2; 			z=z+y; 			z=z*10; 		} 		z++; 		for(;z!=0;) 		{ 			a=z%10; 			z=z/10; 			printf("%ld",a); 		} 		for(;j>0;j--) 		{ 			printf("%d",0); 		} 	} 	getch(); 	return 0;   }  不过如果数字更大一样会溢出，更好的办法是改变你的算法

user: user-3
content: 问题出在这里：for(i=0;x!=1;i++) {y=x%2; x=x/2; z=z+y; z=z*10;} 如果是1025或其他大于1024的奇数，那么到了循环的最后关头，z会溢出！因为int表示的最大值是有限的。。。
user-0 提问: #define中如何包含#if

回复:
user: user-1
content: 你要针对不同的 #if 来定义不同的 #define 。

user: user-2
content: 不能 换其他方法吧

user: user-3
content: 参考gcc源代码中处理#define和#if相关片断。

user: user-0
content: 引用 1 楼 sunyongliang118 的回复:#ifndef _DEBUG #define _DEBUG #else #define _DEBUG 999999 #endif 我需要的那个效果，这个debug的很常用的

user: user-0
content: 我就是需要这样的效果，这个debug是知道的

user: user-4
content: #ifndef _DEBUG #define _DEBUG #else #define _DEBUG 999999 #endif
user-0 提问: 关于BSS段的一些问题，求各位帮忙解惑

回复:
user: user-1
content: 这么考虑是减小可执行文件的大小

user: user-1
content: bss段里面只是一些占位符并不分配真正的存储空间。

user: user-2
content: 引用 5 楼 zyt5166096 的回复:[quote=引用 2 楼 q3733353520 的回复:] 把i=0改成i=10，再看看。 可能编译器默认把0值当作未初始化。 有些编译器把全局的未初始化变量存放在目标文件.bss段，有些则不存放，只是预留一个未定义的全局变量符号，等到最终链接成可执行文件的时候再在.bss段分配空间。  谢谢你！！ 好像是初始化为0的全局变量在生成obj文件后会保存在.bss段（当然并不占用obj的空间，只是一个大小的标识），没有初始化的全局变量则是先保存在common段，等到将obj链接的时候才放入bss段，应该是这个原因吧，但是我发现如果编译cpp文件的话没有初始化的全局变量也会存在obj的bss段[/quote] 编译器不一样，而且要确定不能是链接后的文件

user: user-0
content: 引用 2 楼 q3733353520 的回复:把i=0改成i=10，再看看。 可能编译器默认把0值当作未初始化。 有些编译器把全局的未初始化变量存放在目标文件.bss段，有些则不存放，只是预留一个未定义的全局变量符号，等到最终链接成可执行文件的时候再在.bss段分配空间。  谢谢你！！ 好像是初始化为0的全局变量在生成obj文件后会保存在.bss段（当然并不占用obj的空间，只是一个大小的标识），没有初始化的全局变量则是先保存在common段，等到将obj链接的时候才放入bss段，应该是这个原因吧，但是我发现如果编译cpp文件的话没有初始化的全局变量也会存在obj的bss段

user: user-3
content: Unix FAQ section 1.3（http://www.faqs.org/faqs/unix-faq/faq/part1/section-3.html）里面有Unix和C语言之父Dennis Rithcie对BSS这个词由来的解释。 一般C语言的编译后执行语句都编译成机器代码，保存在.text段；已初始化的全局变量和局部静态变量都保存在. data段；未初始化的全局变量和局部静态变量一般放在一个叫.“bss”的段里。我们知道未初始化的全局变量和局部静态变量默认值都为0，本来它们也可以被放在.data段的，但是因为它们都是0，所以为它们在.data段分配空间并且存放数据0是没有必要的。程序运行的时候它们的确是要占内存空间的，并且可执行文件必须记录所有未初始化的全局变量和局部静态变量的大小总和，记为.bss段。所以.bss段只是为未初始化的全局变量和局部静态变量预留位置而已，它并没有内容，所以它在文件中也不占据空间。

user: user-4
content: 为什么不参考gcc源代码相关片断呢？

user: user-2
content: 把i=0改成i=10，再看看。 可能编译器默认把0值当作未初始化。 有些编译器把全局的未初始化变量存放在目标文件.bss段，有些则不存放，只是预留一个未定义的全局变量符号，等到最终链接成可执行文件的时候再在.bss段分配空间。

user: user-0
content: 求各位帮忙解答一下啊！！谢谢
user-0 提问: 如何将30个浮点数存入80个字节的空间中？

回复:
user: user-1
content: float  4个字节, 有3个字节保存的是精度, 可以删掉一个字节,这样精度下降了些 损失的精度 1/65536, 这个很小, 大多情况都可以的  如 1.33333     内存 ABAAAA3F 你可以去掉AB, 变成  ABAA3F  使用的时候自己补上 00ABAA3F, 也就是  1.33334

user: user-2
content: 我觉得楼主真正需要的可能是一个合适大小的IO缓冲

user: user-3

user: user-4
content: 1、转化为整数 2、保存为增量 3、使用压缩库

user: user-5
content: 如果你是任意的 30 个浮点，那么是不可能的。不要尝试。 如果你的浮点数是特定的，自己处理一下，比如说大小，精度等等。  我们早年的时候，曾经使用的浮点数是实际的电力参数。 比如，电压，电流，相位 等等。 那么这些数的精度很小，大小也很小。比如相位 [0.0000-360.0000) 等等。

user: user-6
content: 为什么要存入80个字节的空间中，什么命题？

user: user-7
content: 即使有方法也不是１００%的情况适用吧。120个字节的信息量在那里，现在你要用80来存储肯定是有丢失的，毋庸置疑。 折中的办法就是将数值的范围压缩到一定的范围内例如本题可以压缩到120/80=1.5 也就是4/1.5= 2.6666个字节算下来就是 2.66*8=21位。没啥好办法。到时候还原的时候再扩展回去。

user: user-8
content: 调用zlib

user: user-9
content: 引用 3 楼 calen_ 的回复:楼主啊，你这个要求看着有些超乎常规，所以我有一毒计：把这30个浮点数排一排120个字节，6个数一组分5组算5个MD5散列值，正好80字节；然后要用这些浮点数的时候暴力搜索.........  直到宇宙的终结也搜索不出来。

user: user-2
content: 楼主啊，你这个要求看着有些超乎常规，所以我有一毒计：把这30个浮点数排一排120个字节，6个数一组分5组算5个MD5散列值，正好80字节；然后要用这些浮点数的时候暴力搜索.........

user: user-9
content: 压缩到2/3大小，这不是必然能保证的，但是可能性还是比较大的， 可以把30个float作为120个字节序列压缩，最简单的就是游程码压缩。

user: user-10
content: 有如下方法可以一试 1.数据压缩。     如果数据有规律，那么压缩比就很大。 2.保存相对数据。     保存基准数据，其他数据保存与基准值的差值， 这样就不是每个浮点数都需要4 字节。
user-0 提问: 小白又来求助了。。。。调用函数的简单问题

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

user: user-2
content: 引用 4 楼 sixto47 的回复:[quote=引用 2 楼 jianwen0529 的回复:] sum=0; for(i=0;i<5;i++) sum+=s[i][j]; s[5][j]=sum/4; // 五个数据，但是你却只除以 4主要不是这个原因……每个答案都是-107374176.00[/quote]  首先你没有调用函数求平均值，所以你打印的值是没有经过初始化和赋值，就表现为未定义的一个值 第二你求5个学生4门成绩的平均值那个算法也是错的

user: user-2
content: 引用 2 楼 jianwen0529 的回复:sum=0; for(i=0;i<5;i++) sum+=s[i][j]; s[5][j]=sum/4; // 五个数据，但是你却只除以 4  首先你没有调用函数求平均值，第二你求5个学生4门成绩的平均值那个算法也是错的

user: user-3
content: 引用 5 楼 sixto47 的回复:引用 3 楼 paschen 的回复:你要问什么，我没有见到你函数中有调用average函数的语句啊，你希望的正确答案是什么想求5个学生四门课成绩 每一门课的平均成绩…………在主函数一开始就调用了啊……  void average(float a[6][4]);  这个只是函数声明，不是在调用函数，调用函数要写成 average(a);

user: user-0
content: 引用 3 楼 paschen 的回复:你要问什么，我没有见到你函数中有调用average函数的语句啊，你希望的正确答案是什么想求5个学生四门课成绩 每一门课的平均成绩…………在主函数一开始就调用了啊……

user: user-0
content: 引用 2 楼 jianwen0529 的回复:sum=0; for(i=0;i<5;i++) sum+=s[i][j]; s[5][j]=sum/4; // 五个数据，但是你却只除以 4主要不是这个原因……每个答案都是-107374176.00

user: user-3
content: 你要问什么，我没有见到你函数中有调用average函数的语句啊，你希望的正确答案是什么

user: user-2
content: sum=0; for(i=0;i<5;i++) sum+=s[i][j]; s[5][j]=sum/4; // 五个数据，但是你却只除以 4

user: user-4
content: 代码出问题，如果没报错，有两种解决方案，一种是调试，一种是在每一截语句后面加输出，看看你语句中的变量值是否和你所想要的结果一样，不一样就说明你这截代码有问题，否则就继续往下，直到你找出问题来为止。

user: user-5
content: 不明白你到底是要求列的平均值还是行的平均值？ 注意你开的数组的行数和列数
user-0 提问: 小白求助，关于指向指针的指针的使用的问题，求大神帮助，谢谢

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

user: user-0
content: 引用 3 楼 paschen 的回复:主函数中：  while(tem[i]!='\0'&&i<100){  这里的 i 没有初始化就使用了  至于你标红的地方语法上没问题，代码的逻辑就没帮你看  不过这种代码的风格是不好的  谢谢，我会注意风格的

user: user-0
content: 引用 1 楼 playinend 的回复:#include<stdio.h> #include<stdlib.h> #include<string.h> char ** found(char *,int); int main() { int i,num,count=0; char tem[100],* prt=tem,**p=NULL; printf("请输入你将要输入的单词的数量：\n"); scanf("%d",&num);							 printf("请输入你要输入的%d个单词：\n",num); getchar(); gets(tem); while(tem[i]!='\0'&&i<100){ 	int k=0; 	while(tem[i]!='\0'&&tem[i++]!=' '&&i<100) { 		k++; 	} 	count++; } if(count!=num){ 	printf("输入的单词的数量不正确！\n"); 	exit(0); }  //从下面开始 p=found(prt,num);          //把函数返回值赋给p printf("这里是你所输入的单词：\n"); for(i=0;i<num;i++){ printf("%s\n",p[i]); } return 0; } char ** found(char *prt,int num) { char ** p=NULL; p=(char **)malloc(sizeof(char *)*num); int i,j=0,len=0; char tem[20]; for(i=0;*(prt+i)!='\0';i++){ 	while(*(prt+i)!=' '&&*(prt+i)!='\0'){ 	tem[len++]=*(prt+i); 	i++; 	} 	tem[len]='\0'; 	p[j]=(char*)malloc(sizeof(char)*(len+1)); 	strncpy(p[j],tem,len+1); 	len=0; 	j++; } 	return p; }  我根据你的源程序改的 调试运行了两遍 没啥问题了应该   谢谢，根据你的代码我发现了我的问题所在。

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

user: user-2
content: 主函数中：  while(tem[i]!='\0'&&i<100){  这里的 i 没有初始化就使用了  至于你标红的地方语法上没问题，代码的逻辑就没帮你看  不过这种代码的风格是不好的

user: user-3
content: #include<stdio.h> #include<stdlib.h> #include<string.h> char ** found(char *,int); int main() { int i,num,count=0; char tem[100],* prt=tem,**p=NULL; printf("请输入你将要输入的单词的数量：\n"); scanf("%d",&num);							 printf("请输入你要输入的%d个单词：\n",num); getchar(); gets(tem); while(tem[i]!='\0'&&i<100){ 	int k=0; 	while(tem[i]!='\0'&&tem[i++]!=' '&&i<100) { 		k++; 	} 	count++; } if(count!=num){ 	printf("输入的单词的数量不正确！\n"); 	exit(0); }  //从下面开始 p=found(prt,num);          //把函数返回值赋给p printf("这里是你所输入的单词：\n"); for(i=0;i<num;i++){ printf("%s\n",p[i]); } return 0; } char ** found(char *prt,int num) { char ** p=NULL; p=(char **)malloc(sizeof(char *)*num); int i,j=0,len=0; char tem[20]; for(i=0;*(prt+i)!='\0';i++){ 	while(*(prt+i)!=' '&&*(prt+i)!='\0'){ 	tem[len++]=*(prt+i); 	i++; 	} 	tem[len]='\0'; 	p[j]=(char*)malloc(sizeof(char)*(len+1)); 	strncpy(p[j],tem,len+1); 	len=0; 	j++; } 	return p; }  我根据你的源程序改的 调试运行了两遍 没啥问题了应该
user-0 提问: 数据结构课设作业，但是不会修改。求助。想要在一元多次计算器程序中加入赋值计算功能

回复:
user: user-1
content: 令x=1.23 求3*x^3+2*x^2-x+1

user: user-2
content: 一元多次。。。你得将这个问题讲出来吧，和你想解决的问题直接以来就一段自己写的代码，我自己的代码我看起来都头大，还看别人的完整代码。

user: user-3
content: case 4:下面  printf(f);  改成  print(f);
user-0 提问: opencv新手求助！运行hog-svm代码的时候错误显示“ml”不是“cv”的成员

回复:
user: user-1
content: 你好楼主，你的问题解决了么？我也遇到了这个问题。

user: user-0
content: 谢谢 我换成了opencv3.0版本能够运行成功了！

user: user-2
content: 是不是opencv版本的问题，建议看看官方文档说明

user: user-3
content: 将这行注释掉再试试。

user: user-0
content: 您好 还是没有解决我的问题 一直显示 namespace“cv”没有成员“ml”

user: user-3
content: http://blog.csdn.net/angelazy/article/details/41947427
user-0 提问: 使用单链表来弄约瑟夫环问题运行不了啊 求教

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

user: user-2
content: 变量建议尽量使用单词或单词的缩写形式；这样别人看你的代码能够明白你的思想,我们写的代码还是主要让别人看得嘛

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h> //#include<malloc.h>  struct chil {     int num;     char name[20];     struct chil *next; };  struct chil *cir(int num) {     struct chil*head, *prev, *cur;     int i;      head = NULL;     for(i = 0; i < num; i++) {         cur = (struct chil*)malloc(sizeof(struct chil));         if (!cur) {             printf("Malloc error!");             return NULL;         }         cur->next = NULL;         cur->num = i+1;         //scanf("%s",cur->name);         snprintf(cur->name, 20-1, "%c", 'A'+i);         if (!head) {             head = cur;             prev = cur;         } else {             prev->next = cur;             prev = prev->next;         }     }     prev->next = head;     return head; }  static void test_out(struct chil *phead) {     struct chil *pcur = phead->next;      printf("num = %d\t name = %s\n", phead->num, phead->name);     while (pcur != phead) {         printf("num = %d\t name = %s\n", pcur->num, pcur->name);         pcur = pcur->next;     } }  int output( struct chil *head, int start, int step, int total) {     struct chil *p, *q;     int count = 0;     int num = 1, i;      q = head;     /*     while(q->next != head)         q = q->next;     */     for(i = 0; i < start-1; i++)         q = q->next;      while(count < total-1) {         p = q->next;         num++;         if(!(num % step)) {             q->next = p->next;             printf("%s\n", p->name);             free(p);             count++;         } else {             q = p;         }     }     printf("num = %d\t, name = %s\n", q->num, q->name);      return 0; } int main(int argc, const char *argv[]) {     int total, step, start;     struct chil*head;     printf("Please input total test number: ");     scanf("%d", &total);     head = cir(total);     test_out(head);     scanf("%d%d", &start, &step);     output(head, start, step, total);      return 0; }  LZ对比一下吧,建议, 1)代码写的不要太挤,该加空格的还是要加空格；2)指针的使用上还带加强；

user: user-0
content: 在oj上运行就是Time Limit Exceeded 我也不懂0.0.

user: user-3
content: int i,int n;  改成  int i, n;

user: user-0
content: 引用 2 楼 user-3 的回复:int i,int n;  改成  int i, n; 我试了 还是不行啊 还是会异常终止
user-0 提问: 如何删除数组里的元素？

回复:
user: user-1
content: 结帖时，鼠标放在分配给指定楼多少分的红色输入框里，会显示还剩多少分，参考其值填写想给多少分。

user: user-0
content: 不好意思啊，我电脑结帖一直结帖不成功，弄了半小时还是结帖不成功。。只有弄个无满意结帖了。。  谢谢你们的回答

user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //

user: user-2
content: 必须依次前移  void erase(int arr[], int arr_size, int which) {     if (arr || which>=0)     {          for (int i=which; i<arr_size-1; ++i)               arr[i] = arr[i+1];     }  }

user: user-0
content: 引用 6 楼 赵4老师的回复:仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //    我想问下怎么结贴的。。。新手。。。不会结贴，比如说有40分分配了半天都过不了。。。

user: user-0
content: 引用 1 楼 user-3的回复:删除元素可以将要删除元素之后的所有元素向前移动，然后递减记录数组大小的变量 就是下标也给递减了对吗？

user: user-3
content: 删除元素可以将要删除元素之后的所有元素向前移动，然后递减记录数组大小的变量

user: user-0
content: 引用 3 楼 user-3的回复:循环中从要删除元素的下一个开始，一直到最后，依次将后一个元素前移，下标应该是从前往后，所以是递增 好的

user: user-3
content: 循环中从要删除元素的下一个开始，一直到最后，依次将后一个元素前移，下标应该是从前往后，所以是递增
user-0 提问: 求问用递归方法打印菱形的经典题目，找bug

回复:
user: user-1
content: 仅供参考：//输入1 //输出 //* * // * //* * //输入2 //输出 //* *   * * // *     * //* *   * * //   * * //    * //   * * //* *   * * // *     * //* *   * * //输入3 //输出 //* *   * *         * *   * * // *     *           *     * //* *   * *         * *   * * //   * *               * * //    *                 * //   * *               * * //* *   * *         * *   * * // *     *           *     * //* *   * *         * *   * * //         * *   * * //          *     * //         * *   * * //            * * //             * //            * * //         * *   * * //          *     * //         * *   * * //* *   * *         * *   * * // *     *           *     * //* *   * *         * *   * * //   * *               * * //    *                 * //   * *               * * //* *   * *         * *   * * // *     *           *     * //* *   * *         * *   * * //最大输入8 #include <stdio.h> char m[6561][6561];//==3^8 void fractalx(int cy,int cx,int L) {     int N,i;      if (1==L) {         m[cy  ][cx  ]='*';         m[cy-1][cx-1]='*';         m[cy-1][cx+1]='*';         m[cy+1][cx+1]='*';         m[cy+1][cx-1]='*';     } else {         N=1;for (i=0;i<L-1;i++) N=N*3;         fractalx(cy  ,cx  ,L-1);         fractalx(cy-N,cx-N,L-1);         fractalx(cy-N,cx+N,L-1);         fractalx(cy+N,cx+N,L-1);         fractalx(cy+N,cx-N,L-1);     } } int main() {     int L,N,i,y,x;      while (1) {         while (1) {             printf("\nInput 1..8,0 for Exit:");             fflush(stdout);             if (1==scanf("%d",&L)) {                 if (0<=L && L<=8) break;             } else rewind(stdin);         }         if (0==L) break;         N=1;for (i=0;i<L;i++) N=N*3;         for (y=3280-(N-1)/2;y<=3280+(N-1)/2;y++) {             for (x=3280-(N-1)/2;x<=3280+(N-1)/2;x++) {                 m[y][x]=' ';             }         }         fractalx(3280,3280,L);         for (y=3280-(N-1)/2;y<=3280+(N-1)/2;y++) {             for (x=3280-(N-1)/2;x<=3280+(N-1)/2;x++) {                 printf("%c",m[y][x]);             }             printf("\n");         }     }     return 0; }

user: user-2
content: 问题出在第二行第六列 这里的flag变量仍为1 你改成colNum>=lineNum就对了
user-0 提问: 数据结构图的创建及应用。写出来的程序总是出错，求指正，万分感谢

回复:
user: user-1
content: scanf_s("%c %c", &v1, &v2);应该改成scanf_s("%c %c", &v1, 1, &v2, 1); 如果不能保证输入缓冲区为空的话（包括回车符），在scanf_s前面加一句fflush(stdin)  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 那应该怎么改呢？

user: user-2
content: printf("%d ", G.arcs[i][j]);  %d需要的是一个整数，但你的G.arcs[i][j]是struct ArcCell类型
user-0 提问: 找人帮我修改一个课程设计，已经写好，存在问题。就是整体功能可以实现，但是无法将学生的系别分开，分系别分别处理相应系别的学生成绩信息，求修改。

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

user: user-2
content: 引用 1 楼 xuyulong1234 的回复:如果想帮忙的我有完整的程序可以发给你，上面的程序因为太长我删除了一部分代码。  给出能重现你问题的完整程序，删除不必要的功能，别人没时间给你一句句看

user: user-0
content: 如果想帮忙的我有完整的程序可以发给你，上面的程序因为太长我删除了一部分代码。

user: user-3
content: 在加一个 系别的结构体 struct 系别 {      int count;    // 当前学生数组中学生的个数      struct student stu[MAX];   // 学生数组      char name[maxbyte] 系名字 }

user: user-4
content: 看着确实比较累，建议题主把代码用编辑栏中的插入代码功能贴上来。
user-0 提问: 程序赋值问题

回复:
user: user-1
content: 你malloc了一维的当然不行了，写成下面这样才行  MCU_data = (JBLOCKROW**)malloc(sizeof(JBLOCKROW*)* 2); for (i = 0; i < 2; i++) 	MCU_data[i] = (JBLOCKROW*)malloc(sizeof (JBLOCKROW));

user: user-2
content: 赋值对象时 = 号左边的对象需要是一个左值  你的[]运算符应该返回一个引用

user: user-3
content: 看JBLOCK的结构定义
user-0 提问: 求满足符合这个条件的三角形

回复:
user: user-1
content: 首先，楼主您代码里面的【a*a+b*b<=c】这块，应该是（c*c）而非单纯一个c吧，其次，您应该用 long而非int，因为最大斜边10000000的平方大于int所能表示的最大值。。。
user-0 提问: 因子数

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

user: user-1
content: 边界条件 输入输出格式 ……

user: user-2
content: 参考下别人AC的代码。 1.看看输入和输出的格式是不是和别人一样（自己理解错了） 2.是不是有些边界的测试数据没有考虑到

user: user-3
content: 就是看能不能整除嘛。

user: user-4
content: 每组数据一个整数n(n<=1000000)，n为0时输入结束。

user: user-5
content: 你的程序没有在      n为0时结束
user-0 提问: WINSOCK的启动SOCKET

回复:
user: user-0
content: 感谢两位大神的回复。  引用 1 楼 user-3 的回复:没毛病，是初始化 socket 啊。  你初始化后，还需要创建socket，绑定端口，监听端口，等待连接。。  但是我在编译器DEV C++中出错了。我采用的是C语言，而非C++. 见以下附图。劳请你们再次赐教。

user: user-1
content: https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms738566

user: user-0
content: 原来是我的编译器不支持WINSOCK的库。

user: user-2
content: 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项

user: user-3
content: 没毛病，是初始化 socket 啊。  你初始化后，还需要创建socket，绑定端口，监听端口，等待连接。。
user-0 提问: 关于字符串输出问题

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

user: user-2
content: 除了上面的问题，还有一个问题就是，字符串是以'\0'为结尾标志的，没有'\0'不叫做字符串。（你的substring后面必须得加上）

user: user-3
content: 未定义行为，返回一个局部变量的地址，没必要花太多时间在这个上面

user: user-4
content: 你的char substring[100] 是一个局部数组，函数结束时就销毁了，你不应返回一个局部变量的地址，否则是一个未定义行为

user: user-5
content: 不要近观回局部变量
user-0 提问: 求助一道考研题

回复:
user: user-1
content: 我的运行结果是： -6784 -24 1 0 13 24 45 456 6784 3 54 -19 11 11 3 53  6784 456 54 53 45 24 13 11 11 3 3 1 0 -19 -24 -6784  0 1 3 3 11 11 13 24 45 53 54 -19 -24 456 6784 -6784   我的理解是： 第一行输出就是读取的data.txt文件的输出，每一项都是一个字符串a[i]（虽然字符串都是数字）。 第一次快排，比较函数是： return atoi((char(*)[80])b)-atoi((char(*)[80])a); 就是把每一个字符串都转换为整数，而且b在前面，a在后面，所以是降序，所以输出结果就是第二行。 第二次快排，比较函数先比较字符串长度，长度相等的情况下，按strcmp比较，升序，所以先是长度为1的字符串，长度为1又按照ASCII值升序，然后长度为2。要注意长度为3的有：-19 -24 456，'-'负号字符的ASCII值小于数字'0'——'9'的ASCII值，所以字符串-19和-24排在字符串456前面，这个真的要对ASCII表比较注意的才不会丢分。

user: user-2
content: 考研题都缩水成这副模样了。

user: user-3
content: http://www.cnblogs.com/CCBB/archive/2010/01/15/1648827.html

user: user-4
content: 参看：http://en.cppreference.com/w/c/algorithm/qsort

user: user-4
content: qsort最后一个参数是一个函数指针  指向这种类型的函数： int cmp(const void *a, const void *b);  相等返回0，参数1大于参数2返回正数，否则返回负数
user-0 提问: 鬼畜的程序。。。。

回复:
user: user-1
content: http://blog.csdn.net/hanchaoman/article/details/7827031

user: user-2
content: 对楼主的代码略作修改。  #include <stdio.h> int main() {     unsigned int a = 1;     unsigned short b = 1;     char c = -1;     int d;     printf("a = %d,c = %d\n",a,c);//a=1,c=-1     d = (a > c) ? 1 : 0;     printf("unsigned int is %d\n",d);//结果为0     d = (1 > c) ? 1 : 0; //同样的代码，a用实际值1代进去     printf("unsigned int is %d\n",d);//结果却变成了1     d = (b > c) ? 1 : 0; //使用如下代码： //    printf("a_d = %d, a_u = %u\n",(char)-1,(char)-1); //    结果：a_d = -1, a_u = 4294967295 //    所以上述代码中，a和c比较=>（大家一起隐式转换成unsigned int）1和4294967295比较，结果显然是c大，结果为0 //                 1和c比较=>（大家一起隐式转换成int）1和－1比较，显然是1大，结果是1     printf("unsigned short is %d\n",d);//结果为1     return 0; }

user: user-3
content: 楼上正解。

user: user-4
content: 正常啊  第一个比较： c转换成unsigned int后，unsigned int可表示的最大值，所以d的值是0 你比较的不是-1 与1，而是类型转换后的结果  第二个比较： b和c都会被转换为int，转换后他们的值仍然是1和-1，所以d为1 如果类型比int小，会都转换成int来比较
user-0 提问: 为什么我这个在vc++上运行答案都正确 在oj上运行就是wronganswer啊 求解答

回复:
user: user-1
content: 都对？ 你把所有数据都测试过了？就敢说“都”对？……

user: user-2
content: 参考下别人AC的代码。 1.看看输入和输出的格式是不是和别人一样（自己理解错了） 2.是不是有些边界的测试数据没有考虑到

user: user-3
content: 弱弱地问一句。。。oj 是啥？

user: user-4
content: 边界条件 输入输出格式 ……
user-0 提问: AC问题

回复:
user: user-1
content: oj的题目一般都懒得看，自己和别人ac的代码比较一下差别。 多测试一些数据。

user: user-2
content: scanf("%s",&a);  建议写成：  scanf("%s",a);  虽然两种写法效果看似是一样的，但含义不同的  对于程序逻辑问题就没帮你看

user: user-3
content: 楼主看清楚题目，题目要你先输入一个整数n，然后底下接着输入n行对应的字符串，输出n行运算以后的字符串。不是你这样输入一个字符串然后输出结果，再继续输入。
user-0 提问: 着急！求解神帮我看看我改怎么改正这个程序

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

user: user-2
content: 题主，我贴一个我以前实现的程序吧： #include <stdio.h> #include <stdlib.h> int binany[64], temp[64]; int integer; int printf(char *s) { 	return 0; } void binany_to_integer(int p[]) { 	int value=0, temp=1, i; 	for ( i = 0; i <= 31; i++) 	{ 		if (1 == binany[i]) value += temp; 		temp *= 2; 	} 	printf("The value is %d\n", value); } void integer_to_binany(int *p) { 	int demo = 1, i; 	for (i = 31; i >= 0; i--) binany[i] = 0;  	for (demo = 1; demo <= *p; demo *= 2,i++) ;  	demo /= 2; 	 	printf("demo is %d\n", demo); 	for ( ; i >= 0; i--) 	{ 		if (*p >= demo) 		{ 			binany[i] = 1; 			*p -= demo; 		} 		demo = demo / 2; 	} 	for (i = 31; i >= 0; i--) printf("%d", binany[i]); } int main(void) { 	int i,j,k=0; 	void(*funp[2])(int *); 	funp[0] = binany_to_integer; 	funp[1] = integer_to_binany; 	printf("%d\n", (int)(funp[0])); 	printf("%d\n", *funp[0]); start: 	printf("请输入您需要的类型转换，0表示二进制到十进制，1表示十进制到二进制！：\n"); 	scanf("%d", &i); 	printf("请输入您的原始数值(如果是二进制到十进制，最后请加上字符“e”！:\n"); 	if (1==i) { 		scanf("%d", &integer); 		(*funp[i])(&integer); 	} 	else 	{ 		getchar(); 		for (j = 0; j < 64; j++) 		{ 			temp[k] = getchar(); 			if ('e'==temp[k]||'\n'==temp[k]) break; 			k++; 		} 		for (k--,j=0; k >= 0; k--,j++) 		{ 			binany[j] = temp[k] - '0'; 		} 		(*funp[0])(binany); 	} 	goto start; 	return 0; }

user: user-3
content: 这个人人品有问题，回答他问题居然还骂人

user: user-0
content: 顶！！！！！！！！！！！！

user: user-0
content: 为什么没人呀~~~
user-0 提问: 用scanf为数组赋值的问题（如何提前跳出循环？）（c语言）

回复:
user: user-1
content: 用while可能会比你的for更好  int a[30] = {0}, i = 0; 	do{ 		scanf("%d", &a[i++]); 	} while (getchar() != '\n');

user: user-2
content: 引用 2 楼 sinat_36461027 的回复:那请问（问题有点儿多，非常感谢！）， 1.我能不能设定一个判断在输入回车的时候结束循环呢？ 2.如果我只输入一个回车（回车前不输入任何其他东西），getchar（）也会从缓冲区内读走‘\n'么？ 3.如果我写 for（i=0;i<N&&getchar()!='\n';i++) {            scanf("%d",&a[i]); } 是不是scanf（）就不能从缓冲区里读到任何东西？  可以通过回车判断结束输入

user: user-3
content: 通过判断最后一个输入的数据,比如你可以定义输入-1时,循环退出；或者判断输入很大的数据然后退出循环,比如(>10000),前提是这个大数据不是你想要的；

user: user-4
content: 不判断scanf函数返回值的c程序员都在走钢丝。

user: user-5
content: 按CTRL+Z结束输入，然后通过scanf返回值（EOF）判断是否是用户提前结束的  scanf返回值含义：http://en.cppreference.com/w/c/io/fscanf

user: user-0
content: 那请问（问题有点儿多，非常感谢！）， 1.我能不能设定一个判断在输入回车的时候结束循环呢？ 2.如果我只输入一个回车（回车前不输入任何其他东西），getchar（）也会从缓冲区内读走‘\n'么？ 3.如果我写 for（i=0;i<N&&getchar()!='\n';i++) {            scanf("%d",&a[i]); } 是不是scanf（）就不能从缓冲区里读到任何东西？

user: user-6
content: 你输入的都是字符串，scanf中的f代表格式转换，就是把字符串转成指定的类型， 结果循环你可以在输入时按ctrl+z, 代码中判断scanf返回值是否为EOF
user-0 提问: 关于vc无缘无故消失

回复:
user: user-0
content: 引用 1 楼 paschen 的回复:没遇到过，试下使用高版本VS 安装vs2013一样，重新安装完全版系统，解决

user: user-1
content: 没遇到过，试下使用高版本VS

user: user-2
content: 做开发不要用阉割版的windows
user-0 提问: 第二个字符为什么不能显示？

回复:
user: user-1
content: 引用 2 楼 wokaoyan1981 的回复:编译错误了，提示6	16	C:\Users\smile\Desktop\test.c	[Error] lvalue required as increment operand  你的pt不是指针类型，而是数组类型，你不能修改一个数组的地址   #include <stdio.h> int main(void) { 	char pt[81]="Hello World! 1981"; 	const char* p = pt; 	printf("%c\n",*p); 	printf("%c",*++p); 	return 0; }

user: user-0
content: 编译错误了，提示6	16	C:\Users\smile\Desktop\test.c	[Error] lvalue required as increment operand

user: user-2
content: pt++返回的还是pt,改成++pt
user-0 提问: 这种情况有其他方法替代goto语句吗？

回复:
user: user-1
content: 引用 4 楼 wokaoyan1981 的回复:也就是说循环嵌套比较深的时候还是可以用goto。楼上修改的代码只执行完一次功能就退出了，貌似没有解决问题。  是的，如果你不用goto，就检查一个变量判断是否继续循环

user: user-2
content: 状态机式写法适合一切字符扫描，而且逻辑清晰，不容易出错

user: user-3
content: 从来没人说要禁用goto。在容易理解的前提下使用goto，比用一些机械的标志更高效

user: user-0
content: 也就是说循环嵌套比较深的时候还是可以用goto。楼上修改的代码只执行完一次功能就退出了，貌似没有解决问题。

user: user-4
content: continue接在while((ch=getchar())!='q')循环体后面。

user: user-4
content: switch (ch)            {                case 'a' :output(ptstr,ct); break;                case 'b' :asc_output(ptstr,ct); output(ptstr,ct);break;                case 'c' :len_output(ptstr,ct); output(ptstr,ct);break;                case 'd' :word_len_output(ptstr,ct);output(ptstr,ct); break;                default : printf("only a,b,c or d is available, please try again!\n");                          continue;            }   continue;

user: user-1
content: 如果循环比较深，用goto也可以，如果要替换，就这样写吧；  #include <stdio.h> #include <string.h> #define LIM 10 #define SIZE 81  void output(char * strings[], int num);  void asc_output(char * strings[], int num); void len_output(char * strings[], int num); void word_len_output(char * strings[], int num); int first_word_len(char * strings); char * s_gets(char * st, int n); int main(void) { 	int ct; 	char input[LIM][SIZE]; 	char * ptstr[LIM]; 	char ch; 	while(1) 		  { 			  printf("Options:\n"); 			  printf("a)original strings;              b)ASCII;\n"); 			  printf("c)lengths of lines;              d)length of first word;\n"); 			  printf("q)quit.\n"); 			  bool flag = true; 			  while(flag && (ch=getchar())!='q') 			  { 				  ct=0; 				  printf("Input up to %d lines.\n",LIM); 				  while( ct<LIM&&s_gets(input[ct],SIZE)!=NULL&&input[ct][0]!=EOF) 				  {  					  ptstr[ct]=input[ct]; 					  ct++; 				  } 				  switch (ch) 				  { 				  case 'a' :output(ptstr,ct); flag = false; break; 				  case 'b' :asc_output(ptstr,ct); output(ptstr,ct); flag = false; break; 				  case 'c' :len_output(ptstr,ct); output(ptstr,ct); flag = false; break; 				  case 'd' :word_len_output(ptstr,ct);output(ptstr,ct);  flag = false; break; 				  default : printf("only a,b,c or d is available, please try again!\n"); 					  continue; 				  }   			  } 			  return 0;   		 		  } }  void output(char * strings[], int num) { 	int i; 	for(i=0;i<num;i++) 	{ 		fputs(strings[i],stdout); 		printf("\n"); 	} 	return; }  void asc_output(char * strings[], int num) { 	char * temp; 	int i; 	int top,seek; 	for(top=0;top<num-1;top++) 		for(seek=top+1;seek<num;seek++) 			if(strcmp(strings[top],strings[seek])>0) 			{ 				temp=strings[top]; 				strings[top]=strings[seek]; 				strings[seek]=temp; 			} }
user-0 提问: 使用malloc开辟空间时候出错，含泪跪求各位指点指点。

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

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

user: user-2
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-0
content: 引用 7 楼 paschen的回复:sizeof(len) 改成 len  否则 申请到的空间只是一个 len变量的大小，你后面的操作就越界了，把堆空间破坏了，再次申请时就出错了 申请到的只是一个对吧？

user: user-3
content: sizeof(len) 改成 len  否则 申请到的空间只是一个 len变量的大小，你后面的操作就越界了，把堆空间破坏了，再次申请时就出错了

user: user-0
content: 引用 4 楼 luciferisnotsatan的回复:[quote=引用 3 楼 alinzihao 的回复:] [quote=引用 1 楼 振翅高飞的回复:]你是不是笔误啊？  v1=(struct stu *)malloc(sizeof(len));  前面都是 p1=(struct stu * )malloc(len);   仔细看这两句的等号右边的差别。瞪大眼睛仔细看。 sizeof(len)和len原来不是一样的东西的啊。。不过他们不都是表示大小么。。为什么一个行一个不行呢[/quote] sizeof(len)是这个结构的大小。你这个len八成是个长度吧，一个整型变量int之类的[/quote] 所以sizeof(len)表示的是整数的大小么？

user: user-0
content: 引用 4 楼 luciferisnotsatan的回复:[quote=引用 3 楼 alinzihao 的回复:] [quote=引用 1 楼 振翅高飞的回复:]你是不是笔误啊？  v1=(struct stu *)malloc(sizeof(len));  前面都是 p1=(struct stu * )malloc(len);   仔细看这两句的等号右边的差别。瞪大眼睛仔细看。 sizeof(len)和len原来不是一样的东西的啊。。不过他们不都是表示大小么。。为什么一个行一个不行呢[/quote] sizeof(len)是这个结构的大小。你这个len八成是个长度吧，一个整型变量int之类的[/quote] 对啊对啊，我定义的是define len sizeof(结构体)

user: user-4
content: 引用 3 楼 alinzihao 的回复:[quote=引用 1 楼 振翅高飞的回复:]你是不是笔误啊？  v1=(struct stu *)malloc(sizeof(len));  前面都是 p1=(struct stu * )malloc(len);   仔细看这两句的等号右边的差别。瞪大眼睛仔细看。 sizeof(len)和len原来不是一样的东西的啊。。不过他们不都是表示大小么。。为什么一个行一个不行呢[/quote] sizeof(len)是这个结构的大小。你这个len八成是个长度吧，一个整型变量int之类的

user: user-0
content: 引用 1 楼 振翅高飞的回复:你是不是笔误啊？  v1=(struct stu *)malloc(sizeof(len));  前面都是 p1=(struct stu * )malloc(len);   仔细看这两句的等号右边的差别。瞪大眼睛仔细看。 sizeof(len)和len原来不是一样的东西的啊。。不过他们不都是表示大小么。。为什么一个行一个不行呢

user: user-0
content: 引用 1 楼 振翅高飞的回复:你是不是笔误啊？  v1=(struct stu *)malloc(sizeof(len));  前面都是 p1=(struct stu * )malloc(len);   仔细看这两句的等号右边的差别。瞪大眼睛仔细看。 啊啊啊啊啊啊啊！！！！！改过来了。。真的对了。。 不过为什么第一次运行的时候可以啊。。第二次才报错。。喵的。。

user: user-5
content: 你是不是笔误啊？  v1=(struct stu *)malloc(sizeof(len));  前面都是 p1=(struct stu * )malloc(len);   仔细看这两句的等号右边的差别。瞪大眼睛仔细看。
user-0 提问: 杭电ACM2034不知道错哪里，调试过了，就是WA

回复:
user: user-0
content: 结果还是WA，求帮助下

user: user-1
content: 1 1 16777217 16777216

user: user-2
content: ac代码参考下 #include <iostream> using namespace std; int main() {     int m,n;     while(scanf("%d%d",&m,&n)!=EOF)     {         if(m==0&&n==0)          break;          else          {              int i,j,g,s,d=0,k=0;              int a[100],b[100],c[100];              for(i=0;i<m;i++)                  cin>>a[i];              for(j=0;j<n;j++)                  cin>>b[j];              for(i=0;i<m;i++)              {                   g=a[i];                   s=0;                   for(j=0;j<n;j++)                                     {                       if(b[j]==g)                       s++;            }                                                          if(s==0)                   {                        c[k]=a[i];                        k++;                        d++;                      }                 }              if(d==0)                  cout<<"NULL";              else              {                  int temp;                  for(i=1;i<d;i++)                    for(j=d-1;j>=i;j--)                    {                         if(c[j]<c[j-1])                         {                             temp=c[j];                             c[j]=c[j-1];                             c[j-1]=temp;                                    }                                  }              }              for(i=0;i<d;i++)                  cout<<c[i]<<" ";              cout<<endl;          }     }     //system("pause");     return 0; }

user: user-0
content: 引用 5 楼 l6shee 的回复:我是循环出错了吗，为什么自己测试的数据不会出错，这个会，数据类型？

user: user-0
content: 引用 4 楼 FancyMouse 的回复:1 1 16777217 16777216是我循环错了？

user: user-0
content: 我是循环出错了吗，

user: user-0
content: 找到问题所在了
user-0 提问: 一道考试的大题，到现在都读不懂题目是想让我做什么，请大家帮忙参考一下，谢谢了！

回复:
user: user-0
content: 引用 6 楼 u010165006 的回复:[quote=引用 5 楼 zwei1993 的回复:] [quote=引用 3 楼 u010165006 的回复:] 仅供参考： C++ Builder模拟数字双时钟（带秒表）示例 http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 谢谢你如此耐心的回复，我会仔细研读的。 这是往年研究生考试的最后一道真题，业务课二《课程设计》，由于是本科教育，大纲要求也基本上是c\c++\数据结构，前面还都是简单的常规题，问问你数据的逻辑结构，c语言基本的类型什么的，最后出现这么一道大题实在是有点想不明白，还占了25分的分值。卷子不给标准答案，所以根本不知道怎么回答。若如4楼所说的写文档什么的，也根本不会啊。[/quote]  研究生考试，本科教育？还是说你现在本科，找的往年考研试题？ 考试是在考场纸面作答，还是可以上机编写呢？[/quote] 是往年的考研试题，就在纸面作答。

user: user-1
content: 引用 5 楼 zwei1993 的回复:[quote=引用 3 楼 u010165006 的回复:] 仅供参考： C++ Builder模拟数字双时钟（带秒表）示例 http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 谢谢你如此耐心的回复，我会仔细研读的。 这是往年研究生考试的最后一道真题，业务课二《课程设计》，由于是本科教育，大纲要求也基本上是c\c++\数据结构，前面还都是简单的常规题，问问你数据的逻辑结构，c语言基本的类型什么的，最后出现这么一道大题实在是有点想不明白，还占了25分的分值。卷子不给标准答案，所以根本不知道怎么回答。若如4楼所说的写文档什么的，也根本不会啊。[/quote]  研究生考试，本科教育？还是说你现在本科，找的往年考研试题？ 考试是在考场纸面作答，还是可以上机编写呢？

user: user-0
content: 引用 3 楼 u010165006 的回复:仅供参考： C++ Builder模拟数字双时钟（带秒表）示例 http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 谢谢你如此耐心的回复，我会仔细研读的。 这是往年研究生考试的最后一道真题，业务课二《课程设计》，由于是本科教育，大纲要求也基本上是c\c++\数据结构，前面还都是简单的常规题，问问你数据的逻辑结构，c语言基本的类型什么的，最后出现这么一道大题实在是有点想不明白，还占了25分的分值。卷子不给标准答案，所以根本不知道怎么回答。若如4楼所说的写文档什么的，也根本不会啊。

user: user-1
content: 第2题画图也可以使用EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。  下载一个EasyX包，里面有完整的函数手册。EasyX官网有实例。  仅供参考： 用绘图语句画机器猫（初学C语言的同学必看） http://blog.163.com/tab_98/blog/static/1192409720150316223680/

user: user-1
content: 图形用户界面可以学习C++ Builder，入门比较容易。 仅供参考： 初学者学习C++ Builder第一个程序（模拟聊天室），经典！ http://blog.163.com/tab_98/blog/static/11924097201693033057497/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/  C++ Builder写的《ZEC 纸牌游戏21点》 http://blog.163.com/tab_98/blog/static/119240972016115113039304/ C++ Builder写的《ZEC 僵尸版打地鼠》 http://blog.163.com/tab_98/blog/static/11924097201601084117748/   书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社） 《C++Builder6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。

user: user-2
content: 不是写代码，写文档：怎么实现题目中的需求？要有什么样的界面？界面怎样同步？用户怎样操作？对用户操作怎么反应？内部怎么保存数据？大体上的流程是什么样的？

user: user-1
content: 仅供参考： C++ Builder模拟数字双时钟（带秒表）示例 http://blog.163.com/tab_98/blog/static/11924097201611324819376/
user-0 提问: 编写一个函数：拷贝字符串前n个字符

回复:
user: user-0
content: 没看你的答案，自己找出来了原因。不过还是很感谢！*p指的是一个字符，用%s格式输出当然会出现问题。而指针p遇到格式符号%s，将转化成指针所指向的内容，即字符串。

user: user-1
content: printf("the copy of s2 is:%s\n",*p); 改成 printf("the copy of s2 is: %s\n", p);
user-0 提问: 各位又有一个错误求解

回复:
user: user-1
content: 参考下别人AC的代码。 1.看看输入和输出的格式是不是和别人一样（自己理解错了） 2.是不是有些边界的测试数据没有考虑到

user: user-2
content: 没必要malloc，我觉得。

user: user-3
content: printf("%d\n", sum); 呢

user: user-0
content: 引用 1 楼 user-5 的回复:输出要回车的。。。 试了不行

user: user-0
content: 引用 1 楼 user-5 的回复:输出要回车的。。。 试了不行

user: user-4
content: 最后不要 system("pause");

user: user-0
content: 引用 7 楼 wang0635 的回复:[quote=引用 6 楼 qq_36151474 的回复:] [quote=引用 5 楼 paschen 的回复:] printf("%d\n", sum); 呢 楼上说要回车我就加了\n不行的[/quote] 为什么不把 system("pause"); 去掉呢？[/quote] 一般习惯了加system("pause");要看运行结果 楼上有人说了我去掉了也不行 而且我提交别的程序也都有这行代码没有问题的

user: user-4
content: 引用 6 楼 qq_36151474 的回复:[quote=引用 5 楼 paschen 的回复:] printf("%d\n", sum); 呢 楼上说要回车我就加了\n不行的[/quote] 为什么不把 system("pause"); 去掉呢？

user: user-0
content: 引用 5 楼 paschen 的回复:printf("%d\n", sum); 呢 楼上说要回车我就加了\n不行的

user: user-5
content: 输出要回车的。。。
user-0 提问: 使用指向堆的指针，能查出堆的空间有多大码？

回复:
user: user-1
content: _msize Returns the size of a memory block allocated in the heap.  size_t _msize( void *memblock );  Routine Required Header Compatibility  _msize <malloc.h> Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  _msize returns the size (in bytes) as an unsigned integer.  Parameter  memblock  Pointer to memory block  Remarks  The _msize function returns the size, in bytes, of the memory block allocated by a call to calloc, malloc, or realloc.  When the application is linked with a debug version of the C run-time libraries, _msize resolves to _msize_dbg. For more information about how the heap is managed during the debugging process, see Using C Run-Time Library Debugging Support.  Example  /* REALLOC.C: This program allocates a block of memory for  * buffer and then uses _msize to display the size of that  * block. Next, it uses realloc to expand the amount of  * memory used by buffer and then calls _msize again to  * display the new amount of memory allocated to buffer.  */  #include <stdio.h> #include <malloc.h> #include <stdlib.h>  void main( void ) {    long *buffer;    size_t size;     if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )       exit( 1 );     size = _msize( buffer );    printf( "Size of block after malloc of 1000 longs: %u\n", size );     /* Reallocate and show new size: */    if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))          ==  NULL )       exit( 1 );    size = _msize( buffer );    printf( "Size of block after realloc of 1000 more longs: %u\n",              size );     free( buffer );    exit( 0 ); }   Output  Size of block after malloc of 1000 longs: 4000 Size of block after realloc of 1000 more longs: 8000   Memory Allocation Routines  See Also   calloc, _expand, malloc, realloc

user: user-2
content: 引用 4 楼 jjj4722 的回复:这个函数确实看不懂，有没有VC里用的函数哦 这个函数就是VC的API函数，微软专有。  SIZE_T WINAPI HeapSize(   _In_ HANDLE  hHeap,   _In_ DWORD   dwFlags,   _In_ LPCVOID lpMem );  第一个参数是申请的对内存所在的内存块的句柄，该句柄由 HeapCreate 或者 GetProcessHeap返回。 第二个参数是一个标识位，如果将该标识位赋值HEAP_NO_SERIALIZE，可以在多线程中提升性能，消除互斥机制。但是有内存溢出的风险。 所以为这个标识位时，请在以下三种情况使用。 1.单线程程序 2.多线程，但是只有一个线程开辟指定堆内存。 3.多线程，但是进程提供自有的基于指定堆内存的互斥机制。 第三个参数是要获得堆内存大小的内存指针（堆内存起始地址），该值可由 HeapAlloc 或者 HeapReAlloc获得。 该指针必须由第一个参数指定。也就是第一和第三参数存在对应关系。  该函数返回成功是返回指定堆内存大小。返回-1代表失败。 如果返回-1，而且没有调用API函数SetLastErrors，无法应用API函数GetLastErrors函数获取进一步的错误信息。

user: user-3
content: 直接malloc很大的空间，然后判断返回值，失败了的话说明没有那么大，然后放小点继续试

user: user-4
content: 检测的是： HeapAlloc 或 HeapReAlloc 申请得到的堆空间大小

user: user-4
content: HeapSize  https://msdn.microsoft.com/en-us/library/windows/desktop/aa366706(v=vs.85).aspx

user: user-0
content: 这个函数确实看不懂，有没有VC里用的函数哦
user-0 提问: 资讯一个 C 获取 REDIS KEY后的问题

回复:
user: user-1
content: C/C++也有json_decode库或json_decode开源代码可供使用啊。

user: user-0
content: 可能我描述得不好 不是我讲所谓的乱码那里  而是我已经得到其他语言（数组） 传过来的字符串后 {0=>"wbs", 1=>99, 2=>"xo", 3=>"ffffffffffffffffffffffffffffavavadsferaersdafsadfiiiiiiiiiiiiiiiiiiiii"}  我如何更方便的运用的问题。、 好像 PHP 有 json_decode 可以回归到数组。但对于 C 呢？这样一个字符串 如何更好的改变模式后 再做使用

user: user-1
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-0
content: 求助一下~~~~~~~~~~~~~
user-0 提问: C语言十六进制转换成八进制

回复:
user: user-1
content: 引用 2 楼 bayhax 的回复:那应该char *strHex[10];       char *strBin[10];       char *strOct[10];   这样吗？但是这样怎么得到每个字符串里的字符啊，？ strbin[i][j]好像会出错  那就  char strHex[][10]  改成  char strHex[3][10]  显示指定出数组的维数

user: user-2
content: http://blog.csdn.net/u010625743/article/details/44495161?locationNum=2&fps=1

user: user-0
content: 那应该char *strHex[10];       char *strBin[10];       char *strOct[10];   这样吗？但是这样怎么得到每个字符串里的字符啊，？ strbin[i][j]好像会出错

user: user-3
content: 你这个输入的地方就是不对的。 char strHex[][10] = { "0" };这样的写法默认就是1X10的一个数组，也就是char strHex[1][10] = { "0" }; 你之后在根据输入的n来gets字符串，会造成越界的
user-0 提问: C语言中

回复:
user: user-0
content: 谢谢大神们！！！

user: user-1
content: 引用 1 楼 user-2 的回复:整个控制台的颜色   用 system("color 0A");    其中color后面的0是背景色代号，A是前景色代号。各颜色代码如下：    0=黑色    1=蓝色    2=绿色    3=湖蓝色    4=红色    5=紫色    6=黄色    7=白色    8=灰色    9=淡蓝色    A=淡绿色    B=淡浅绿色    C=淡红色    D=淡紫色    E=淡黄色    F=亮白色 谢谢大神指教！

user: user-2
content: 整个控制台的颜色   用 system("color 0A");    其中color后面的0是背景色代号，A是前景色代号。各颜色代码如下：    0=黑色    1=蓝色    2=绿色    3=湖蓝色    4=红色    5=紫色    6=黄色    7=白色    8=灰色    9=淡蓝色    A=淡绿色    B=淡浅绿色    C=淡红色    D=淡紫色    E=淡黄色    F=亮白色
user-0 提问: net-snmp添加的MIB不能识别

回复:
user: user-0
content: 执行MIB2C会出现下面这种错误 zrt@ubuntu:~/mib$ env MIBS="+/etc/snmp/mibs/Test-MIB.my" mib2c Test  /etc/snmp/mibs/Test-MIB.my: No such file or directory  You didn't give mib2c a valid OID to start with.  IE, I could not find any information about the mib node "Test".  This could be caused because you supplied an incorrectly node, or by the MIB that you're trying to generate code from isn't loaded.  To make sure your mib is loaded, run mib2c using this as an example:     env MIBS="+MY-PERSONAL-MIB" mib2c Test  You might wish to start by reading the MIB loading tutorial at:     http://www.net-snmp.org/tutorial-5/commands/mib-options.html  And making sure you can get snmptranslate to display information about your MIB node.  Once snmptranslate works, then come back and try mib2c again.
user-0 提问: 为什么64位系统默认是8字节对齐

回复:
user: user-0
content: 已经找到了原因了  大概是也为了性能考虑，8字节的数据需要8字节对齐和cpu缓冲命中率有关系  http://stackoverflow.com/questions/21219130/is-8-byte-alignment-for-double-type-necessary

user: user-1
content: 《The Intel 64 and IA-32 Architectures Software Developer's Manual》
user-0 提问: 【求助】班级信息管理系统设计

回复:
user: user-1
content: c语言+数据库+图形界面应该可以做，

user: user-2
content: 图形用户界面可以学习C++ Builder，入门比较容易。 仅供参考： 初学者学习C++ Builder第一个程序（模拟聊天室），经典！ http://blog.163.com/tab_98/blog/static/11924097201693033057497/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/  C++ Builder写的《ZEC 纸牌游戏21点》 http://blog.163.com/tab_98/blog/static/119240972016115113039304/ C++ Builder写的《ZEC 僵尸版打地鼠》 http://blog.163.com/tab_98/blog/static/11924097201601084117748/   书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社） 《C++Builder6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。

user: user-3
content: 百度搜相关关键字。

user: user-4
content: 试试QT，适合新手做界面

user: user-5
content: 只会控制台的肯定不行，要做界面就学GUI编译，先把基础打扎实了，路还长.......
user-0 提问: DLL 全局数组赋值及调用

回复:
user: user-0
content: 去掉extern后还是无法赋值，仍然是0，不过还是多谢指点：）

user: user-1
content: 引用 4 楼 Lujiafeng0203 的回复:extern double randomarray[100]; 头文件这样声明还是不行：（ 没看见我把extern去掉了吗？

user: user-0
content: 是赋值函数，与回调函数的问题吗？赋值函数必须要调用一次，然后才能给全局数组重新赋值。 如果不调用的话，全局数组里还是初始值，所以不会改变？？？

user: user-0
content: extern double randomarray[100]; 头文件这样声明还是不行：（

user: user-0
content: 多谢，试试先：）

user: user-1
content: 在 globalarray.h文件中声明全局数组： double randomarray[100];  在dll .cpp中初始化全局数组，及定义两个函数。 #include "globalarray.h" extern "C" { void get_rand(); int __declspec(dllexport) APIENTRY AnotherFunction(v1,v2); } // get_rand()用于生成一组数字然后存放于全局数组中,然后在另外一个函数AnotherFunction中调用这个全局数组中的值，一直不成功，返回都是0.好像get_rand 函数没有运行赋值给全局数组。 void get_rand() { int i; srand(0); //设置随机数种子 for (i = 0; i <= 99; i++) { randomarray[i] = rand()%1000/1001.0; }  }  int __declspec(dllexport) APIENTRY AnotherFunction(v1,v2);  {   double t; t=randomarray[1]; }

user: user-0
content: 有偿付费咨询，高手们指点一下吧，能写段代码作为参考最好了
user-0 提问: 求解一个很无语的bug

回复:
user: user-1
content: 你输入的m是1，p=p+m后，p指向的就是p[1]即 ‘b’那个字符，之后你又*p='\0'把这个字符改了

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

user: user-3
content: scanf(m);  ... p = buf; p = p+m;  *p = '\0';//j就是这句  就是注释的那一句，你把第二个值B改成'\0'了，当然输出不出来了

user: user-4
content: 自己单步跟一下吧，

user: user-5
content: scanf(m); // m == 1 p = buf; p = p+m; // buf+1 *p = '\0';  。。。

user: user-0
content: 引用 5 楼 paschen 的回复:你输入的m是1，p=p+m后，p指向的就是p[1]即 ‘b’那个字符，之后你又*p='\0'把这个字符改了 谢谢啊就是这个我当时大意然后调试时候发现了最后把字符备份了截取过后恢复就好了。