Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c语言世界杯是这个月的热门话题，请用C语言实现世界杯的小组分组。

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }

user: user-0
content: 有大神吗 在线等
user-0 提问: 我是软件工程的大一学生，作业是编写图书信息管理系统，大神帮我查查bug，谢谢。源代码网址：百度网盘http://pan.baidu.com/s/1dEWgnvF

回复:
user: user-1
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 5 楼 jiftlixu 的回复:] 伸手党驾到,赵四老师...... 有偿提供服务。支付宝zhao4zhong1@163.com [/quote]  知识就是金钱，技术便是财富，，在此得到了充分的验证~

user: user-2
content: 引用 5 楼 jiftlixu 的回复:伸手党驾到,赵四老师...... 有偿提供服务。支付宝zhao4zhong1@163.com

user: user-3
content: 伸手党驾到,赵四老师......

user: user-4
content: 直接说出遇到什么问题 不就行了？

user: user-5
content: 查BUG这事还是自己来的比较好吧，基本技能吧，别人就是帮自己找出来BUG对自己能力也没什么提升

user: user-6
content: 卧槽，还有这种操作？

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

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:看不出有什么问题，在我的电脑上跑了一下也没发现问题，换了好几台电脑都得到正确的结果 出错的程序也许有别的问题吧，你应该是没贴全代码 代码贴全了。我发现gcc 4.9 是正常的  gcc 5.4 就会line2输出两行

user: user-1
content: 看不出有什么问题，在我的电脑上跑了一下也没发现问题，换了好几台电脑都得到正确的结果 出错的程序也许有别的问题吧，你应该是没贴全代码
user-0 提问: 小白问一个关于长整型转化为字符串的问题

回复:
user: user-1
content: 能把它在转为，低位在后高位在前的吗？我用这进行倒计时得时候，10s倒数到9s得时候，变成90然后80，70依次下来

user: user-2
content: 楼主可以研究一下*str++,(*str)++,*(str++)

user: user-3
content: 原因在这行： *str++ = buf[i] + '0'; //每次循环先取str的值：*str = buf[i] + '0' //然后str的值加1：str++ //while循环结束后str指针移动到字符串末尾。

user: user-4
content: 如果你是自己练习，仅供参考。否则就是用系统api就行了，ltoa  void Long2Str(long _l, char *outStr) { 	char cTemp[20] = { 0 };  // 临时数组保存的是逆序的字符串 	char *pTemp = cTemp; 	if (_l < 0) 	{ 		*outStr++ = '-'; 		_l *= -1; 	} 	long l1; 	long l2 =_l;    	do  	{ 		l1 = l2 % 10; 		*pTemp++ = l1 + '0'; 		l2 /= 10; 	} while (l2>0); 	pTemp--;  	// 将逆序的字符串正序拷贝到输出串 	while (pTemp >= cTemp) 	{ 		*outStr++ = *pTemp--; 	} }  int _tmain(int argc, _TCHAR* argv[]) { 	long l = 1125412; 	char str[20] = { 0 }; 	Long2Str(l, str); 	printf("%s\n", str); }

user: user-5
content: 因为前面操作了str++;这个操作会让指针的位置向后移动一个元素； 长整形转字符串，也可以考虑使用sprintf, snprintf函数，更简单。 sprintf(buf, "%lu", dat);
user-0 提问: 关于C语言，字符型的一个小问题

回复:
user: user-1
content: scanf并不是立即读取输入存放到变量中，而是先放到缓冲区，当按下回车键后，再对缓冲区进行处理。  假设输入abc，当按下回车后，开始执行如下代码：              scanf ("%c",&ch); //从缓冲区读取一个字符'a'存到ch变量中             while (ch != 'g') //条件满足             {             printf ("%c",ch);//打印'a'             scanf("%c",&ch);//从缓冲区读取下一个字符'b'存到ch变量中，然后回到上一行，打印'b'             }  按照这个流程打印出abc，注意回车也是一个字符，同样满足!='g',所以程序运行后你会看到光标移动abc的下一行。 当输入g，循环结束。

user: user-2
content: 你输入到的是stdin, 并就是行缓冲的，也就是按下回车后scanf才会从stdin中一个个读，不需要读会，读到匹配的就退出了

user: user-3
content: //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-4
content: 因为有循环啊，只要不是g就循环一个字符一个字符的输出，效果就像直接一次性输出了一个字符串

user: user-5
content: 你的输入先是在输入缓存里，此时还没到内存呢。变量ch内存里存放的。 1楼说的很多，标准输入是行缓冲，输入回车才会将输入缓存里的数据刷到内存里。 在内存里，ch是循环利用的，后面的将前面的覆盖；所以不存在越界问题
user-0 提问: windows版本下的MinGW 编译iconv函数出错

回复:
user: user-1
content: 这是缺少iconv库。找libiconv.a或libiconv.dll放到编译器能找到的路径。再编试下，实在不行，下载iconv的源码，自己编。

user: user-2
content: 你是怎么解决的？

user: user-3
content: iconv()  可能是linux下的专用函数,windows下没有

user: user-4
content: 百度搜相关关键字。
user-0 提问: 求大神！c语言数据结构的题目，递归算法求Pn（x）

回复:
user: user-1
content: 我记得刚回复过一个类似帖子 //递归符号演算 //P0(x)=1 //P1(x)=x //Pn+1(x)=(2n+1)/(n+1)*x*Pn(x)-n/(n+1)*Pn-1(x) //求Pn(x) #include <stdio.h> #include <stdlib.h> #include <malloc.h> char *P(int m) {     char *p;     int n;      if (m==0) {         p=(char *)malloc(2);         sprintf(p,"1");         return p;     }     if (m==1) {         p=(char *)malloc(2);         sprintf(p,"x");         return p;     }     //m>=2     n=m-1;     p=(char *)malloc(200);     sprintf(p,"%d/%d*x*(%s)-%d/%d*(%s)",2*n+1,n+1,P(n),n,n+1,P(n-1));     return p; } int main() {     int v;     char *q;      for (v=0;v<6;v++) {         q=P(v);         printf("P(%d)=%s\n",v,q);     }     return 0; } //P(0)=1 //P(1)=x //P(2)=3/2*x*(x)-1/2*(1) //P(3)=5/3*x*(3/2*x*(x)-1/2*(1))-2/3*(x) //P(4)=7/4*x*(5/3*x*(3/2*x*(x)-1/2*(1))-2/3*(x))-3/4*(3/2*x*(x)-1/2*(1)) //P(5)=9/5*x*(7/4*x*(5/3*x*(3/2*x*(x)-1/2*(1))-2/3*(x))-3/4*(3/2*x*(x)-1/2*(1)))-4/5*(5/3*x*(3/2*x*(x)-1/2*(1))-2/3*(x)) //

user: user-2
content: 建议你先熟悉递归，再想自己的算法。  递归：想要解决问题n，必须解决前一层问题 n-1 ，问题n本身并不关注 n-1的问题如何解决，总之只要能解决 n-1的问题，就能解决当前问题n。。这才是递归算法的精髓。  例如：经典的汉诺塔问题   将n个盘子从 A柱子将盘子以B为跳转移动到C柱子，只要能将  N-1个盘子移动到B上，然后将第 N个盘子移动到C【最底层的盘子移动到目的地】，再将 n-1个盘子从B移到C即可。  希望对你有帮助。
user-0 提问: snmpd一直执行request，我并没有发送请求

回复:
user: user-1
content: 建议还是要将代码里发送request的接口检查一遍，尤其是发送request的判断条件。也可以先用抓包工具抓一下包，查看是发的什么数据包，然后再到代码里去寻找。

user: user-2
content: 抓包＋写日志
user-0 提问: 从二维数组中IM[2][5]分别选择两个不同的随机数，但是没有运行结果

回复:
user: user-0
content: 谢谢您们了，我会多花时间学习！

user: user-1
content: #include <iostream> #include <iomanip>  #include <stdlib.h> #include <time.h>  using namespace std;  #define MAX_NUM 2 int main() {     int i, j;     int IM[2][5] = { {0,2,4,6,8},         { 1,3,5,7,9 } };     int a[MAX_NUM];      srand(time(NULL));      for (i = 0; i < MAX_NUM;) {         a[i] = IM[i][rand() % 5];         for (j = 0; j < i; j++)             if (a[j] == a[i])                 break;         if (j >= i)             i++;     }      for (int i = 0; i < MAX_NUM; i++)          cout << a[i] << endl;      return 0;  } 这个程序是从IM第一行取一个数据，在IM第二行去一个数据，放到a中

user: user-1
content: 想得有点复杂了，循环太多。 #include <iostream> #include <iomanip>  #include <stdlib.h> #include <time.h>  using namespace std;  #define MAX_NUM 2 int main() {     int i, j;     int IM[2][5] = { {0,2,4,6,8},         { 1,3,5,7,9 } };     int a[MAX_NUM];      //存储结果      srand(time(NULL));      for (i = 0; i < MAX_NUM;) {         a[i] = IM[rand() % 2][rand() % 5];         for (j = 0; j < i; j++)             if (a[j] == a[i])                 break;         if (j >= i)             i++;     }      for (int i = 0; i < MAX_NUM; i++)          cout << a[i] << endl;      return 0;  }

user: user-2
content: 随机必然有重复，所谓“不重复的随机”实际上是洗牌。洗牌算法参考下面： #include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }

user: user-3
content: for (int k1 = 0;k1 < k; k1++)  //k = 0，k1 < k这个条件不满足，而且k一直不会增加，这个for循环不会执行。  我重新写了一个(测试通过)，代码如下：  int main() { 	int IM[2][5] = { { 0,2,4,6,8 }, 	{ 1,3,5,7,9 } }; 	int a[2][2];      //存储结果 	srand(time(NULL)); 	for (int k = 0; k < 2; k++) 	{ 		a[k][0] = IM[k][rand() % 5]; 		while (true) 		{ 			a[k][1] = IM[k][rand() % 5]; 			if (a[k][1] != a[k][0]) 			{ 				break; 			} 		} 		 	} 	for (int i = 0; i < 2; i++) //输出得到的数值。 	{ 		for (int j = 0; j < 2; j++) 		{ 			cout << a[i][j]; 			cout << " "; 		} 		cout << endl; 	} 	 	return 0; }  代码比较简单，就不加注释了。  如果对您有帮助，请采纳答案好吗，谢谢！

user: user-4
content: 数组容量不足，IM数组 元素没有5的下标，
user-0 提问: 【LinuxC】新手，写了一个数据库备份的代码，存在一些疑问；

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:无非是把逻辑相对独立的几句放在一起变成一个函数。 道理我都懂，但是没有照您说那样写过，所以多少有点不大会。。您可以举个例子吗。真的谢谢您

user: user-1
content: 无非是把逻辑相对独立的几句放在一起变成一个函数。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:crontab bash  我现在是在暑期实习，这个是别人写好的监听进程，会一直在，我要做的是在里边加入凌晨两点的备份操作；因为都是用指令写的，师傅说不大好想让我优化一下使用函数来完成，但是我对函数不大熟练，不知道该用什么怎么用；

user: user-1
content: crontab bash

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

user: user-0
content: 背景是放在一个每10秒钟循环一次的守护进程中，凌晨两点备份一次数据库；

user: user-1
content: 这样？：void backup(void) {     dp = popen(capBuf,"r");     if(fgets(tnkBuf, sizeof(tnkBuf), dp)) {         if (rap == 0) {             if (rep == 0) {                 strcpy(timBuf,"stat -c%Z /mnt/hd1/1.sql");                 strcpy(tieBuf,"stat -c%Z /mnt/hd1/2.sql");                 dm = popen(timBuf,"r");                 fgets(tmiBuf, sizeof(timBuf), dm);                 de = popen(tieBuf,"r");                 fgets(tmeBuf, sizeof(tmeBuf), de);                 if (strcmp(tmiBuf ,tmeBuf)<0) {                     system("cp -rf /mnt/hd1/2.sql /mnt/hd1/1.sql");                     sleep(1);                     system("rm -rf /mnt/hd1/2.sql");                     sleep(3);                     system("mysqldump -uroot -pcocloud smarthome > /mnt/hd1/2.sql ");                     sleep(1);                     pclose(dm);                     pclose(de);                     dzlog_debug("jinle if\n");                     sleep(60);                 } else {                     system("cp -rf /mnt/hd1/1.sql /mnt/hd1/2.sql");                     sleep(1);                     system("rm -rf /mnt/hd1/1.sql");                     sleep(3);                     system("mysqldump -uroot -pcocloud smarthome > /mnt/hd1/1.sql ");                     pclose(dm);                     pclose(de);                     dzlog_debug("jinle else\n");                     sleep(60);                 }             } else {                 system("mysqldump -uroot -pcocloud smarthome > /mnt/hd1/2.sql ");                 sleep(60);             }         } else {             system("mysqldump -uroot -pcocloud smarthome > /mnt/hd1/1.sql ");             sleep(60);         }     } else {         dzlog_debug("It's not two o'clock\n");     }     pclose(dp); } int main() {     rap = access("/mnt/hd1/1.sql", F_OK);     rep = access("/mnt/hd1/2.sql", F_OK);     system("date > /mnt/hd1/time");     sprintf(capBuf,"%s","cat /mnt/hd1/time | grep 02:00:*");     backup();     return 0; }
user-0 提问: 对于编译器中的错误提示，"=="左边的gets(m)的类型不是char*吗？为何是int型？等号右边的类型char [4]这是什么类型？

回复:
user: user-1
content: 字符串比较要调用库函数，strcmp, strncmp

user: user-2
content: 理解和讨论之前请先学会如何观察！ //char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-3
content: 应该用strcmp(gets(m),"abc")

user: user-3
content: char * 是指针型，跟int一样都是4字节的数据，指针可能也可以等同于int吧 右边的字符串3字节加上结束符\0，正好4字节
user-0 提问: vs6.0

回复:
user: user-1
content: 楼主发这个帖子的是想干啥？ 赵四老师的回答很威武

user: user-2
content: 引用 3 楼 u011280788 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] http://fanyi.baidu.com/#en/zh/-------------------Configuration%3A%20Cpp1%20-%20Win32%20Debug--------------------%0ACompiling...%0ACpp1.cpp%0A%0ACpp1.obj%20-%200%20error(s)%2C%200%20warning(s)  老师V5[/quote]

user: user-3
content: 编辑---编译----链接----运行。 这个信息说明编译成功，生成.obj文件，等待链接。  深入学习可以参考：  http://c.biancheng.net/cpp/html/729.html 如果有帮助，请采纳答案好吗，谢谢！

user: user-4
content: 引用 2 楼 zhao4zhong1 的回复:http://fanyi.baidu.com/#en/zh/-------------------Configuration%3A%20Cpp1%20-%20Win32%20Debug--------------------%0ACompiling...%0ACpp1.cpp%0A%0ACpp1.obj%20-%200%20error(s)%2C%200%20warning(s)  老师V5

user: user-2
content: http://fanyi.baidu.com/#en/zh/-------------------Configuration%3A%20Cpp1%20-%20Win32%20Debug--------------------%0ACompiling...%0ACpp1.cpp%0A%0ACpp1.obj%20-%200%20error(s)%2C%200%20warning(s)

user: user-4
content: 编译没有错误和警告，ok
user-0 提问: 这个程序为什么执行的时候提示无法读取内存？

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

user: user-2
content: scanf("%d, d%", &i, &j); 这句的语法写得不对。

user: user-3
content: scanf("%d, d%", &i, &j); 这里逗号后面还有个空格  要么去掉这个空格，要么输入的时候还要再多输入一个空格

user: user-4
content: 应该是数组越界访问，验证办法是：在输入i，j之后，先将i,j输出看看你输入的数据和接收的数据是否一致。

user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-5
content: scanf("%d, d%", &i, &j);  应该修改为：  scanf("%d,%d", &i, &j);  输入格式字符串不对，小心一些就好了。  如果有帮助，请采纳答案好吗，谢谢！
user-0 提问: 从TXT文本中读取数据（数值为0-9），将数据转换为指定字符后再写入文件，但程序结束时出时出现错误中断。为什么

回复:
user: user-1
content: fflush或fclose后，fprintf的内容才真正写到磁盘文件中。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #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; }   找到原因是str数组益出，但是为什么结果写进文件fp呢？ 	for (i = 0; i < HIGH; i++) 	{  		for (j = 0; j < WIND; j++) 		{  			fprintf(fp,"%c", str[i][j]); 			//fputc(str[i][j], fp); 		} 		fprintf(fp,"\n"); 	} 这方法不可行吗？还是fopen 打开文件只能执行一次，读取后要关闭了才能再进行写入？

user: user-1
content: 判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-2
content: 可能访问str或者st时越界了

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

user: user-2
content: 引用 4 楼 mk112255 的回复:[quote=引用 2 楼 paschen 的回复:] 可能访问str或者st时越界了 是在程序结束的时候弹出的，而且数组的内容无法写入文件f:\\map.txt内[/quote]  越界不一定直接崩溃，从你提示看，你的栈被破坏了，函数结束时检查程序被中断了下来  你可以单步跟踪程序运行，查看读到的变量是多少，观察分析原因

user: user-3
content: 引用 4 楼 mk112255 的回复:[quote=引用 2 楼 paschen 的回复:] 可能访问str或者st时越界了 是在程序结束的时候弹出的，而且数组的内容无法写入文件f:\\map.txt内[/quote] str[i][j] = st[ch];这句ch是以%d读出来的，但是作为st的下标，可能已经越界了。 建议把ch打印出来，看看是否越界了。

user: user-0
content: 引用 2 楼 paschen 的回复:可能访问str或者st时越界了 是在程序结束的时候弹出的，而且数组的内容无法写入文件f:\\map.txt内

user: user-4
content: 读出来的ch比st的下标大会数组越界！可以查一下读到值
user-0 提问: 二维数组过大，动态申请空间之后，再赋值，赋值进行的一半就不行了，请问该怎么解决

回复:
user: user-1
content: 仅供参考：当程序需要使用比如2GB～1TB左右的存储时，最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数，linux参考fseeko64函数。 FILE *fA;fA=fopen("A","rb+");_fseeki64(fA,10000000000i64*sizeof(int),SEEK_SET);fputc(fA,0);//int A[10000000000]; int B; _fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fread(&B,1,sizeof(int),fA);//B=A[9999999999]; _fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fwrite(&B,1,sizeof(int),fA);//A[9999999999]=B; fclose(fA);

user: user-0
content: 我是要对一个1000X22500的矩阵进行svd分解，其中矩阵v就是22500X22500的

user: user-2
content: 你这是要测试CPU和内存的极限吗？还是纯粹想玩，测试一下？ 22500 × 22500 × 8 / （1024 × 1024 × 1024） 大约为3.77个G，堆上的空间没这么大吧（还得考虑一下你的PC内存）

user: user-3
content: 非得这样申请内存还想快, 那是不可能的, 但是完成一个任务方法有很多, 你应该描述一下原始需求.

user: user-3
content: 1. a[i]也是要free的. 2. 申请的内存差不多有8G, 而且是碎片化的,运行需要比较长时间, 要考虑一下是不是设计不合理.
user-0 提问: 哪位大牛，解决一下int和float的精度问题

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-0
content: 感谢两位仁兄的解惑，希望以后多多指点

user: user-2
content: 看看这个帖子吧 http://bbs.csdn.net/topics/370138481

user: user-2
content: 越界了，float虽然也是4个自己，但是它不是所有位用于表示整数部分。int类型不会这样，它是将所有位都表示整数。 http://www.cnblogs.com/mirrorgrass/p/5469552.html
user-0 提问: c语言读取文件夹下所有的文件名

回复:
user: user-1
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。 如果嫌system黑窗口一闪，将system("...")替换为WinExec("cmd /c ...",SW_HIDE);

user: user-2
content: http://blog.csdn.net/aoshilang2249/article/details/37819159

user: user-3
content: #include <stdio.h> #include <string.h> #include <sys/types.h> #include <errno.h> #include <dirent.h>  int main(int argc, char *argv[]) {     if (argc < 2) {         fprintf(stdout, "Usage: too few paramters!\n");         return 0;     }      DIR *dp = NULL;      dp = opendir(argv[1]);     if (!dp) {         fprintf(stderr, "opendir: %s\n", strerror(errno));         return 0;     }      struct dirent *dirp;     while ((dirp = readdir(dp))) {         if (strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0)             continue;         printf("%s\n", dirp->d_name);     }     closedir(dp);      return 0; } 系统调用，建议把上面的代码先运行一下，然后改成你想要的--就是把文件名拷贝到你要得缓存里。

user: user-4
content: @echo off & setlocal EnableDelayedExpansion for /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do ( set file=%%~fi set file=!file:/=/! echo !file! >> 路径.txt )  bat文件内输入这个，然后把改文件放在你需要的目录下

user: user-4
content: 这个批处理 dos就可以做到吧
user-0 提问: 急 vc：有木有大神帮忙加一下文本存储和统计功能呀 统计任一家庭的平均寿命，平均身高，男女比例，家庭平均人口 要做一个家谱管理系统

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-2
content: 这个程序能编译通过吗？ 建议多检查一下scanf，看到里面多处错误；比较典型的是对于数组名前加&，数组名本身是地址，所以不用加&。 对于这么长的程序不建议一下子写出所有功能，然后再编译，除非你有比较好的C语言功底和足够的耐心。否则，你会在多个error和warning面前失去耐心的。 建议逐步注释和逐步调试，一个个功能调试。
user-0 提问: Serialport  串口问题    ReadFile

回复:
user: user-1
content: // 当在串口助手放1234的是时候就显示strcat_s(buffer, 16, szTmp);  VC我不会，但strcat应是连接字符串吧，如果发过来的数据不是字符串，不就会发生问题了？

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

回复:
user: user-1
content: 递归穷举法。

user: user-2
content: 语文不太好，没看懂楼主的意思。

user: user-3
content: #include <stdio.h> #include <stdlib.h>  #define     MAX_SIZE    3  struct num_info {     int num;     int *list; };  void init_num(struct num_info **p, int len); void reinit_num(struct num_info **p, int len); void print_arr(struct num_info *p); void bubble_sort(int *arr, int len); void merge_nums(struct num_info *p1, struct num_info *p2, struct num_info **pnew);  int main(void) {     int i;     struct num_info *parr[MAX_SIZE], *pnew;      init_num(parr, MAX_SIZE);     for (i = 0; i < MAX_SIZE; i++) {         bubble_sort(parr[i]->list, parr[i]->num);         print_arr(parr[i]);     }      merge_nums(parr[1], parr[2], &pnew);      print_arr(pnew);      reinit_num(parr, MAX_SIZE);     free(pnew->list);     free(pnew);      return 0; }   void init_num(struct num_info **p, int len) {     int i, j, num;      for (i = 0; i < len; i++) {         p[i] = (struct num_info *)malloc(sizeof(struct num_info));         if (!p[i])             exit(0);         printf("Please input the number: ");         scanf("%d", &num);         p[i]->list = (int *)malloc(num * sizeof(int));         if (!p[i])             exit(0);         p[i]->num = num;         printf("Please input the data: ");         for (j = 0; j < num; j++)             scanf("%d", p[i]->list + j);     } }  void reinit_num(struct num_info **p, int len) {     int i;      for (i = 0; i < len; i++) {         free(p[i]->list);         free(p[i]);     } }  void print_arr(struct num_info *p) {     int i;      for (i = 0; i < p->num; i++)         printf("%d\t", p->list[i]);     printf("\n"); }  void bubble_sort(int *arr, int len) {     int i, j;      int tmp;     for (i = 0; i < len - 1; i++)         for (j = 0; j < len - 1 - i; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }  void merge_nums(struct num_info *p1, struct num_info *p2, struct num_info **pnew) {     int i = 0, j = 0, k = 0;      *pnew = (struct num_info *)malloc(sizeof(struct num_info));     if (!(*pnew))         exit(0);     (*pnew)->list = (int *)malloc(sizeof(int) * (p1->num + p2->num));     if (!(*pnew)->list)         exit(0);      while (i < p1->num && j < p2->num) {         if (p1->list[i] > p2->list[j]) {             (*pnew)->list[k++] = p2->list[j];             j++;         } else if (p1->list[i] < p2->list[j]) {             (*pnew)->list[k++] = p1->list[i];             j++;         } else {             i++;             j++;         }     }     while (i < p1->num) {         (*pnew)->list[k++] = p1->list[i];         i++;     }     while (j < p2->num) {         (*pnew)->list[k++] = p2->list[j];         j++;     }     (*pnew)->num = k; } 试一下这个程序
user-0 提问: 求一份C语言库函数手册 chm版的，网上找了好久都失效了，希望能给一份，谢谢

回复:
user: user-1
content: http://en.cppreference.com/w/

user: user-2
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-2
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl

user: user-2
content: c++库函数(中文).chm http://download.csdn.net/detail/ygsfly/2519154

user: user-3
content: 需要积分吧，可能很多，记得我曾经发过一个，

user: user-4
content: 免费免帐号下载http://zh.cppreference.com/w/Cppreference:Archives 不过只有html的，chm是compiled html,可以找个工具转换

user: user-5
content: http://vdisk.weibo.com/s/aXnA1uHm1eS6s 下载连接

user: user-5
content: http://c.biancheng.net/cpp/u/hanshu/ 在线查
user-0 提问: 为何会出现段错误？

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

user: user-0
content: 引用 6 楼 cfjtaishan 的回复:[quote=引用 5 楼 qq_34984564 的回复:] [quote=引用 4 楼 xaioxiaoguai 的回复:] 输入的n>10时，结构体数组就越界了（第三个测试点） 下标越界是未定义行为，有的编译器不会报错（运行的时候就什么都可能发生了） O(∩_∩)O谢谢！我明白了。[/quote] 不会输入超过10个吧？ 自己定义长度呢[/quote] 可能pat代码评测的时候会考虑到大于10的情况

user: user-2
content: 引用 5 楼 qq_34984564 的回复:[quote=引用 4 楼 xaioxiaoguai 的回复:] 输入的n>10时，结构体数组就越界了（第三个测试点） 下标越界是未定义行为，有的编译器不会报错（运行的时候就什么都可能发生了） O(∩_∩)O谢谢！我明白了。[/quote] 不会输入超过10个吧？ 自己定义长度呢

user: user-0
content: 引用 4 楼 xaioxiaoguai 的回复:输入的n>10时，结构体数组就越界了（第三个测试点） 下标越界是未定义行为，有的编译器不会报错（运行的时候就什么都可能发生了） O(∩_∩)O谢谢！我明白了。

user: user-3
content: 输入的n>10时，结构体数组就越界了（第三个测试点） 下标越界是未定义行为，有的编译器不会报错（运行的时候就什么都可能发生了）

user: user-2
content: 引用 1 楼 qq_34984564 的回复:题目是：pat乙级1004 提交以后显示有段错误。 在LInux下测试没有问题。

user: user-2
content: #include <stdio.h>  struct student{     char sname[11];     char sno[11];     int score; }stu[10];  int main(){     int n;     int max=0,min=100,i=0,k,t;      scanf("%d",&n);      for(i=0;i<n;i++){         scanf("%s %s %d", stu[i].sname, stu[i].sno, &stu[i].score);     } /*     for(i=0;i<n;i++){         printf("%s %s %d\n", stu[i].sname, stu[i].sno, stu[i].score);     } */     t = k = 0;     for(i=0;i<n;i++){         if(stu[i].score<=100 && stu[i].score>=0){             if(stu[i].score>max){                 max = stu[i].score;                 k = i;             }             if(stu[i].score<min){                 min = stu[i].score;                 t = i;             }         }     }     printf("%s %s\n",stu[k].sname,stu[k].sno);     printf("%s %s\n",stu[t].sname,stu[t].sno);     return 0; } 代码没问题，怀疑是你的输入数据的格式问题

user: user-0
content: 题目是：pat乙级1004 提交以后显示有段错误。
user-0 提问: 大神帮看看哪这个问题怎么解决 

回复:
user: user-1
content: #include <stdio.h>  int arry( int (*arr)[3], int lines, int col);  int main() {     int arr[3][3] = {         {1,2,3},         {4,5,6},         {7,8,9}     };     arry(arr, 3,3);      return 0; }  int arry(int (*arr)[3], int lines, int col) {     int i;     int j = 0;     int index = 1;       for(i = 0; i < lines; i++)     {         arr[i][j+1]= index++;     }      for(j = 0; j < col; j++ )     {         arr[i++][j] = index++;     }     for (i = lines; i >= 0; i--)     {          arr[i][j--]= index++;     }     for(j = 0; j>= 0; j++)     {          arr[i-1][j] = index++;     }       for(i = 0; i< lines; i++)     {         for(j = 0; j < col; j++)         {             printf("%d ",arr[i][j]);         }         printf("\n");     }      return 0; }  参数需要是二维数组，传递为一个一维数组是不行的。传递一个数组指针到arry函数里。详见上面的代码；  上面的代码还有问题，很明显的是越界。比如j未初始化，但是第一个循环就是用到了j++ 根据你的需求，改一改，注意下标不要越界。否则越界导致段错误。
user-0 提问: vc++6.0新手求解答，程序编译没问题，执行时总是停止工作

回复:
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里面下载“适合程序员的键盘练习”  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: 赞同2楼和4楼，编译器该换换了

user: user-3
content: scanf("%lf,&x"); 像这样的错误语句，编译器都发现不了吗？我只能说这个编译器不不行呢。

user: user-4
content: 基础的扎实！同意二楼

user: user-5
content: scanf("%lf,&x"); 应修改为： scanf("%lf",&x);  错误原因是输入语句的格式不对，小心一些就好。  如果对您有帮助，请采纳答案好吗，谢谢！

user: user-6
content: 内存泄漏了  double 不能转换为int 会造成泄漏
user-0 提问: 请教大神   (.text+0x20):cf 'main'未定义的引用 collect2

回复:
user: user-1
content: 引用 5 楼 zhao4zhong1 的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约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: int main 当然要return 0了！

user: user-3
content: 楼主是Linux哪个版本

user: user-4
content: 单词拼写错误，错误提示信息就是找不到main，注意比较一下提示错误里的main和你定义的main有什么不同

user: user-5
content: int main  不是 int mian

user: user-6
content: include <stdlib.h>并在main函数末尾写上:return 0;

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

回复:
user: user-1
content: 完全卸载后重装试试。 搜“完全卸载VS2013”

user: user-0
content: 引用 楼主 wyl915 的回复: win10操作系统。修复了也没用。 求大神帮忙！ 谢谢！  其它的可以创建，就这个项目不行

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行 对VS2013修复或重装或打最新的SP补丁 没用啊，已经是重装过的了，修复不管用

user: user-0
content: 已经是重装过的了，修复不管用

user: user-1
content: 关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行 对VS2013修复或重装或打最新的SP补丁

user: user-2
content: 创建其他应用呢？比如MFC。实在不行只有重装VS了
user-0 提问: vs2010进行c程序编程的一些问题

回复:
user: user-1
content: 引用未报错。这两个编译器对return命令的处理有什么不一样？  一定会报错。 你可以 重新编译 一下，看看结果。

user: user-2
content: 1、因为你的main函数返回类型是void，改成int main()即可，void main()仅仅只是VC++中允许，标准的是int main()  2、因为本身程序运行完就退出了，main结束后会调用ExitProcess结束进程  3、参看：http://www.cnblogs.com/newpanderking/p/4003228.html

user: user-0
content: 引用 1 楼 fight_in_dl 的回复:第一个问题：         main函数为void类型，即无返回值，此时，return 0;会报错。         应将main函数定义为int类型。         int main()         {              //其它代码               return 0;         }  第二个问题：        不加getchar（），console窗口在程序运行完毕会退出，属于正常现象。  第三个问题：         需要修改设置，右键点击项目，如下修改。         Project Properties                          -> Configuration Properties                                  -> Linker (General)                                         -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"  如下图：   用心回答每个问题，如果对您有帮助，请采纳答案好吗，谢谢！ 对第一个问题，我换用codeblocks，代码如下： #include <stdio.h>  #include <stdlib.h>  void main()  {  printf("The program \'s name is c:\\tools \book.txt");  return(0);  } 未报错。这两个编译器对return命令的处理有什么不一样？  对第三个问题，为什么不关闭嵌入清单，编译时会报错？

user: user-0
content: @ fight_in_dl  对第一个问题，我换用codeblocks，代码如下： #include <stdio.h> #include <stdlib.h> void main() { printf("The program \'s name is c:\\tools \book.txt"); return(0); } 未报错。这两个编译器对return命令的处理有什么不一样？ 对第三个问题，为什么不关闭嵌入清单，编译时会报错？

user: user-1
content: 第一个问题：         main函数为void类型，即无返回值，此时，return 0;会报错。         应将main函数定义为int类型。 int main()         {              //其它代码               return 0;         }  第二个问题：        不加getchar（），console窗口在程序运行完毕会退出，属于正常现象。  第三个问题：         需要修改设置，右键点击项目，如下修改。         Project Properties                          -> Configuration Properties                                  -> Linker (General)                                         -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"  如下图：    用心回答每个问题，如果对您有帮助，请采纳答案好吗，谢谢！
user-0 提问: 用codeblocks编译线性表的顺序插入程序

回复:
user: user-1
content: 引用 楼主 Rourou_miao 的回复:新手，刚刚开始学习相关的知识。在写线性表的插入程序的时候，第42行总是报错，出现错误302和240，大家帮忙看一下我这是哪里有错呀..... #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ok 1 #define ERROR 0 #define error 0 #define INFEASIBLE -1 #define OVERFLOW 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int ElemType; typedef int Status;  typedef struct{     ElemType *elem;     int length;     int listsize; }SqList; Status InitList(SqList *L) {     (*L).elem=(ElemType*)malloc(100*sizeof(ElemType));     if((*L).elem==NULL)     {         exit(OVERFLOW);     }     (*L).length=0;     (*L).listsize=LIST_INIT_SIZE;     return ok; } Status ListInsert(SqList(*L),int i,ElemType *e) {     ElemType *newbase,*p,*q;     if(i<1||i>(*L).length+1)     {         return ERROR;     }     if((*L).length>=(*L).listsize)     {         newbase=(ElemType*)realloc((*L).elem,((*L).listsize+10*sizeof(ElemType)));         (*L).elem=newbase;         (*L).listsize=(*L).listsize+LISTINCREMENT;     }     q=&((*L).elem[i-1]);     for(p=&((*L).elem[(*L).length-1]);p>=q;p--)     {         *(p+1)=*p;     }     *q=*e;     (*L).length++;     return ok; } 能否贴上完整的代码？
user-0 提问: 在codeblocks下新建的"hello world"生成的exe有多大？

回复:
user: user-1
content: 好多半瓶子醋。 为什么不反汇编exe看其中都有哪些汇编指令呢？ 《Windows PE权威指南》也顺便参考一下。

user: user-2
content: 正常！你写Hello World 之前写的#include <studio.h>里面超多东西的，里面的东西编译的时候会链接到你自己写的东西，然后再生成exe的

user: user-0
content: 引用 1楼ipqtjmqj 的回复:正常。看编译选项，debug通常比release大，静态链接比动态链接大没有设置其他编译选项，用qt creator编译这个工程只有48k大小，差距挺大的，感觉好奇怪？

user: user-3
content: 正常。看编译选项，debug通常比release大，静态链接比动态链接大

user: user-4
content: 因为函数有C/C++标准库中好多东西  如果你只用API的话，估计2K都不用
user-0 提问: 麻烦看看c语言写Json哪里出了错误

回复:
user: user-1
content: #include<stdlib.h> #include<string.h>  #include"C:\\Users\\32914\\Desktop\\cJSON-master\\cJSON.h"  int main(void) {     char str[1024];    /*此处定义为数组*/     char *char_json;     scanf("%s", &str);     char_json = str;    /* 此处去掉&*/     //从缓冲区中解析出JSON结构     cJSON *json = cJSON_Parse(char_json);     //将传入的JSON结构转化为字符串 并打印     char *buf = (char *)malloc(1024);    /*下面有free，这儿需要malloc */     printf("data:%s\n",buf = cJSON_Print(json));     //打开一个exec.json文件，并写入json内容     FILE *fp = fopen("exec.json", "w");     fwrite(buf,strlen(buf),1,fp);      fclose(fp);     free(buf);     cJSON_Delete(json);     return 0; }

user: user-2
content: char *buf = NULL;  buf是空的啊，你怎么fwrite啊

user: user-3
content: str 应该是字符数组 用来存储输入的字符串   char str[4096]; scanf("%s", str);
user-0 提问: C编写的Release下的.exe文件如何处理能在其他电脑上打开

回复:
user: user-1
content: 生成Release版。 学会使用depends.exe查看exe依赖的dll

user: user-2
content: 把依赖项.dll文件全复制粘贴到根目录不就ok了？

user: user-1
content: 引用 7 楼 u010011236 的回复:前面回答的都是关于静态链接和动态链接的内容，这部分已基本了解。现在我的问题是：当我把程序发布给别人使用时只需要给予exe文件就行，不需要再把libgcc_s_dw2-1.dll也发给别人。而是我这边直接把dll和exe合并在一起，生成一个exe发布给别人。 试试生成WinRAR自解压格式的exe，并在解压后自动运行对话框中输入原exe的文件名。

user: user-0
content: 前面回答的都是关于静态链接和动态链接的内容，这部分已基本了解。现在我的问题是：当我把程序发布给别人使用时只需要给予exe文件就行，不需要再把libgcc_s_dw2-1.dll也发给别人。而是我这边直接把dll和exe合并在一起，生成一个exe发布给别人。

user: user-3
content: 使用静态链接，VC下RELEASE设置成MT，CB下应该也类似

user: user-0
content: 引用 3楼战在春秋 的回复:点击Project  -----  Build Options 菜单， 在Linker Settins选项卡下，如下图所示，加入.lib文件。    如果有帮助，请采纳答案好吗，谢谢！直接这样设置可以吗？

user: user-0
content: @fight_in_dl，打开可执行程序提示缺少   libgcc_s_dw2-1.dll 的话该怎么处理，直接在Linker Settins下加上-static就行吗？？

user: user-4
content: 点击Project  -----  Build Options 菜单， 在Linker Settins选项卡下，如下图所示，加入.lib文件。    如果有帮助，请采纳答案好吗，谢谢！

user: user-5
content: 静态连接-static
user-0 提问: 问一个关于socket的问题

回复:
user: user-1
content: 接收的数据先放在缓存buffer里面 处理逻辑是从buffer分析处理，检测字符串的结束字符，一般是‘\0’作为字符串的结束

user: user-2
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-3
content: 引用 2 楼 kang2618 的回复:引用 1楼user-4 的回复:客户端write完你服务端这边就close了, 导致客户端java read中断那这种情况应该怎么解决呢？  测试配置：linux c ，windows VC 测试结果： 结论：客户端的接受缓存在读取字符串时，记住需要有‘\0’作为字符串的结尾，否则读不出来，除非幸运的遇上一个'\0'. 实践解释： 补充：若没问题请结帖，有问题欢迎讨论！谢谢！

user: user-0
content: 引用 1楼user-4 的回复:客户端write完你服务端这边就close了, 导致客户端java read中断那这种情况应该怎么解决呢？

user: user-4
content: 客户端write完你服务端这边就close了, 导致客户端java read中断
user-0 提问: 如何用C语言读取分析wireshark抓取的包

回复:
user: user-1
content: https://blog.csdn.net/haolipengzhanshen/article/details/51854853

user: user-2
content: github上搜，有没有合适的包。python 的dpkt包不错

user: user-3
content: 首先要了解协议的结构，然后根据结构把数据包的头、标志、内容以及尾读取出来，最后根据读取的数据进行分析就可以了。

user: user-4
content: 伪需求罢了 你应该做的是解析报文，而不是解析wireshark的包，都有wireshark了，还要你干嘛

user: user-5
content: C语言读取和你用不用wireshark抓不抓包没有关系吧。wireshark只是方便你查看，想用C语言解析，你要了解协议，根据协议去解析你想要了解和读取的东西。

user: user-6
content: 引用 2 楼 OnePeace888 的回复:wireshark  抓取的包，用 wireshark 看不就行了，它都给你解析好，只要它支持，按字节，解析的值显示了。。  你c语言解析，具体还要做什么？具体要交实验报告

user: user-7
content: wireshark  抓取的包，用 wireshark 看不就行了，它都给你解析好，只要它支持，按字节，解析的值显示了。。  你c语言解析，具体还要做什么？

user: user-8
content: 搜“.pcapng格式”
user-0 提问: 新手c语言问题求助！！写一个程序帮助出数学题

回复:
user: user-1
content: 刚好写过，仅供参考： C++ Builder写的《ZEC 四则运算练习程序》海底海星情景 http://blog.163.com/tab_98/blog/static/1192409720174615242948/  关于C++ Builder： 初学者学习C++ Builder第一个程序（模拟聊天室），经典！ http://blog.163.com/tab_98/blog/static/11924097201693033057497/ C++ Builder绘图示例（模拟时钟） http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/

user: user-2
content: 仅供参考：//运用C语言开发一个“小学生算术四则运算测试系统”。该系统是让计算机充当一位给小学生布置作业的算术老师，为学生出题并阅卷。该系统要求实现下列功能： //①为小学生出题（分别进行+、-、*、/等不同运算）。 //②学生做题后，进行评阅。学生每做一题后，评阅给出“答题正确，很好”或“答题错误，重做”等信息。 //③加、减、乘、除运算功能可以自由选择实现。 //④运算数值可控制在两位数的四则运算范围内。 #include <stdio.h> #include <stdlib.h> #include <time.h> int c,a,b,r,ri; void main() {     srand( (unsigned)time( NULL ) );     system("cls");     printf("小学生算术四则运算测试系统\n");     while (1) {         printf("1加法 2减法 3乘法 4除法 0退出:");fflush(stdout);         rewind(stdin);         scanf("%d",&c);         if (0==c) break;         switch (c) {         case 1:             a=rand()%100;             b=rand()%100;             r=a+b;             while (1) {                 printf("%d+%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         case 2:             a=1+rand()%99;             b=rand()%a;             r=a-b;             while (1) {                 printf("%d-%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         case 3:             a=rand()%99;             b=rand()%99;             r=a*b;             while (1) {                 printf("%d*%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         case 4:             a=2+rand()%998;             b=1+rand()%(a/2);             while (1) {                 if (0==a%b) break;                 b--;             }             r=a/b;             while (1) {                 printf("%d/%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         }     } }
user-0 提问: c语言怎么输出一些特殊符号

回复:
user: user-1
content: 仅供参考：#pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> HWND WINAPI GetConsoleWindow(); void HideTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = FALSE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } void ShowTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = TRUE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } int main() {     HWND  hwnd;     HDC   hdc;     HFONT hfont;      system("color F0");     system("cls");     HideTheCursor();     hwnd  = GetConsoleWindow();     hdc   = GetDC(hwnd);     hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0             , 0, 0, 0, 0, "Arial Unicode MS");     SelectObject(hdc,hfont);     TextOutW(hdc,10,10,L"你好",2);     DeleteObject(hfont);     hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, JOHAB_CHARSET , 0, 0, 0, 0, "Arial Unicode MS");     SelectObject(hdc,hfont);     TextOutW(hdc,10,80,L"\xb7f0\xb7f0\xb2dd\xb2dd",4);     DeleteObject(hfont);     ReleaseDC(hwnd,hdc);     getch();     system("color 07");     system("cls");     ShowTheCursor();     return 0; }

user: user-2

user: user-3
content: 试试Unicode方式，用wcout之类。没做过，不确定。

user: user-4
content: 引用 2 楼 Chancy_cx的回复:[quote=引用 1 楼 user-4 的回复:] 你需要调用windows函数，以图片形式显示。ASIIC无法显示你那个字符  具体怎么操作呀[/quote] 也有可能在graphic.h里面有相关API

user: user-4
content: 引用 2 楼 Chancy_cx的回复:[quote=引用 1 楼 user-4 的回复:] 你需要调用windows函数，以图片形式显示。ASIIC无法显示你那个字符  具体怎么操作呀[/quote] 你可以去百度，也可以使用MSDN来查看windows.h这个头文件里面的函数

user: user-0
content: 引用 1 楼 user-4 的回复:你需要调用windows函数，以图片形式显示。ASIIC无法显示你那个字符  具体怎么操作呀

user: user-4
content: 你需要调用windows函数，以图片形式显示。ASIIC无法显示你那个字符
user-0 提问: c语言字符串作为函数输入问题

回复:
user: user-1
content: 符号常量，其特点是编译后写在代码区，不可寻址，不可更改，属于指令的一部分。

user: user-2
content: 因为传递"1234"，这个字符串是在只读数据段上，那么它只能只读，不能写。test函数里对其赋值，就是写操作，所以就会出现段错误。 而传递ss，ss是在栈上申请的空间，具有读写操作的权限。所以没问题。 char ss[]="1234";  这句的含义是将”1234“从只读数据段拷贝至数组ss中。

user: user-3
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-4
content: 因为test("1234") 等于 const char *ss = "1234"; test(ss);  所以

user: user-5
content: 字符串是一个常量！   void test(char *ss){ss[0]='9';}   char ss[]="1234";   这种方式没有问题是因为，定义数组时，将字符串中的数据复制到数组中，而test函数中修改的是数组ss，而不是字符串；  test("1234") 这种方式则是直接把字符串的首地址赋值到形参变量ss中，那么ss所指向的就是一个字符串。  这两个的地址值是不一样的，而且差距很大，可以根据这一点做一个简单的区分。

user: user-3
content: 引用 4 楼 Cy_Chance 的回复:符号常量，其特点是编译后写在代码区，不可寻址，不可更改，属于指令的一部分。 胡扯！
user-0 提问: C语言有关strstr（）的问题 

回复:
user: user-1
content: 引用 3 楼 qq_35922958 的回复:引用 1 楼 wyyy2088511 的回复:strstr返回值是个字符串它的返回值不是子串的地址吗，如果不是就返回空，额我百度的说是这样用的 试试这段代码你就明白了 #include <iostream> #include <cstring> using namespace std;  int main () { 	char a[10],b[10],*p; 	cin >> a >> b; 	p = strstr(a,b); 	cout << p << endl; 	cout << *p << endl; 	return 0; }

user: user-0
content: 被我注释掉的flag部分，当加上它后，可以运行。只是即使buf是line的子串，flag也是0，得不到正确的指针。求教大神可否是我哪里使用错误。

user: user-0
content: 引用 7 楼 cfjtaishan 的回复:引用 4 楼 qq_35922958 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] 建议从文件中读取后，就先输出来，看看从文件里读出的数据是否正确。另外， 注意下strstr函数使用读取的没有错误，这段代码我单独拿出来运行是没有问题的，但是与socket结合起来就有问题。 你在确认一下从对端发过来的数据是正确的吗？[/quote] 是的，接收到的buf也是正确的。

user: user-2
content: 引用 4 楼 qq_35922958 的回复:引用 2 楼 cfjtaishan 的回复:建议从文件中读取后，就先输出来，看看从文件里读出的数据是否正确。另外， 注意下strstr函数使用读取的没有错误，这段代码我单独拿出来运行是没有问题的，但是与socket结合起来就有问题。 你在确认一下从对端发过来的数据是正确的吗？

user: user-3
content: 你要将strstr返回值赋值给一个变量，如果为空则停止，不空则下一次第一个参数用该变量继续寻找  strstr用法参看：http://en.cppreference.com/w/c/string/byte/strstr

user: user-4
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:建议从文件中读取后，就先输出来，看看从文件里读出的数据是否正确。另外， 注意下strstr函数使用读取的没有错误，这段代码我单独拿出来运行是没有问题的，但是与socket结合起来就有问题。

user: user-0
content: 引用 1 楼 wyyy2088511 的回复:strstr返回值是个字符串它的返回值不是子串的地址吗，如果不是就返回空，额我百度的说是这样用的

user: user-2
content: 建议从文件中读取后，就先输出来，看看从文件里读出的数据是否正确。另外， 注意下strstr函数使用

user: user-5
content: strstr返回值是个字符串
user-0 提问: 请大家帮忙解答一个关于数组和指针的问题！

回复:
user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-2
content: 引用 楼主 shihenglee 的回复:大家好，我是一个C语言初学者，现在学到指针了，遇到一个问题，请大家帮忙解答一下。问题如下：   #include<stdio.h> #include<stdlib.h> #include<Windows.h> int main() { 	int i; 	int nums[5] = {1,2,3,4,5}; 	int * ptr_nums = nums;  	for(i = 0; i < 5; i++) 	{ 		printf("数组元素 %d 的地址是 %p \n",nums[i],ptr_nums); 		ptr_nums++; 	} 	system("pause"); }             其中，ptr_nums++ 等价于 ptr_nums + sizeof(int)；那么ptr_nums[i]应该是多少？或者说等价于多少？  指针进行++时，具体移动的字节是和指针类型相关的 如果是int32类型的指针，那就是移动sizeof(int)，同理，如果是double类型的指针，那就是移动sizeof(double)

user: user-3
content: 那个说法完全不正确，首先指针本身是int类型的指针，他的偏移量就是int所占的字节。假设int *p;则有p[i]等价于*(p+i)，注意这里i要为正整数，如果是负整数是另一种情况。

user: user-0
content: 引用 5 楼 xy_kok 的回复:ptr_nums++ 等价于 ptr_nums + sizeof(int)；  这句话没有问题吗？  做一个简单的推算： ptr_nums++  等价于  ptr_nums   = ptr_nums  + 1 然而 ptr_nums + sizeof(int)  则是 ptr_nums  + 4 那么 ptr_nums  + 1 和 ptr_nums  + 4 明显不相等  由于ptr_nums是一个整形指针，所以每次+1 的偏移量是sizeof（int）  嗯，可能是我的表述有问题，但是在程序中，我们的确是用ptr_nums++来做指针偏移的。

user: user-4
content: 引用 1 楼 shihenglee 的回复:问了一个朋友，说ptr_nums[i]等价于ptr_nums + sizeof(int) * i；不知道是否正确？  他说的是错的.  ptr_nums[i]  等价于 ptr_nums+i  因为ptr_nums是是int类型指针, 它移动1,  就是按数据类型来的.

user: user-5
content: ptr_nums++ 等价于 ptr_nums + sizeof(int)；  这句话没有问题吗？  做一个简单的推算： ptr_nums++  等价于  ptr_nums   = ptr_nums  + 1 然而 ptr_nums + sizeof(int)  则是 ptr_nums  + 4 那么 ptr_nums  + 1 和 ptr_nums  + 4 明显不相等  由于ptr_nums是一个整形指针，所以每次+1 的偏移量是sizeof（int）

user: user-1
content: http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组

user: user-0
content: [quote=引用 2 楼 cfjtaishan 的回复:] 他说的是对的。 明白了，谢谢

user: user-6
content: 引用 1 楼 shihenglee 的回复:问了一个朋友，说ptr_nums[i]等价于ptr_nums + sizeof(int) * i；不知道是否正确？ 他说的是对的。 其实，自己完全可以去验证这个是否正确，那就是用下面的代码： #include<stdio.h> #include<stdlib.h> #include<Windows.h>  int main() {     int i;     int nums[5] = {1,2,3,4,5};     int *ptr_nums = nums;      for(i = 0; i < 5; i++)     {         printf("数组元素 %d 的地址是 %p \n",nums[i], ptr_nums);         printf("addr %p, %p\n", &nums[i], ptr_nums + sizeof(int) * i);         ptr_nums++;     }     system("pause"); }

user: user-0
content: 问了一个朋友，说ptr_nums[i]等价于ptr_nums + sizeof(int) * i；不知道是否正确？
user-0 提问: C语言txt文件读写，可以输入但不能写到文件中去

回复:
user: user-1
content: 打开文件的时候试试用wb+

user: user-2
content: 既然使用fscanf和fprintf，那么写入格式和读取格式应该一样才可以。比较一下，写入和读取的格式一样吗？  fprintf(fp,"%d\t%s\t%s\t%d-%d-%d\t\n",bk[i].num,bk[i].name,bk[i].publish,bk[i].t.year,bk[i].t.month,bk[i].t.day);  fscanf(fp,"%d\t%s\t%s\n%d-%d-%d\n",&bk[i].num,bk[i].name,bk[i].publish,&bk[i].t.year,&bk[i].t.month,&bk[i].t.day) 另外，scanf对于第二个是%s，那么前面还加了一个&,怀疑你的结构体定义这个变量是数组；  逻辑相对比较混乱，先写入，再读取。写入之后建议关闭fp，读取之前再次打开文件。

user: user-3
content: fflush fclose
user-0 提问: 路径设置问题

回复:
user: user-1
content: 引用 2 楼 baishen2484 的回复:具体怎么写呢？ 建议看一下字符串操作里的strcpy, strcat,尤其是strcat函数

user: user-0
content: 具体怎么写呢？

user: user-1
content: pszSrcFile\文件名 用字符串拼接，把目录名和文件名拼接在一起

user: user-2
content: #include <stdio.h> #include <string.h> const char* pszSrcFile = "F:\\chengxu\\ImageCut\\Image\\MSS2.tiff"; char s[512]; char t[512]; char *p; int i,n; int main() {     p=strrchr(pszSrcFile,'.');     if (p) {         n=5;         _snprintf(s,p-pszSrcFile,"%s",pszSrcFile);         for (i=1;i<=n;i++) {             sprintf(t,"%s_%d.tiff",s,i);             printf("%s\n",t);         }     }     return 0; } //F:\chengxu\ImageCut\Image\MSS2_1.tiff //F:\chengxu\ImageCut\Image\MSS2_2.tiff //F:\chengxu\ImageCut\Image\MSS2_3.tiff //F:\chengxu\ImageCut\Image\MSS2_4.tiff //F:\chengxu\ImageCut\Image\MSS2_5.tiff //
user-0 提问: 调用函数后为什么没有执行？？

回复:
user: user-1
content: 排序应该是这样： void sort(struct student *a, int len ) { 	int i, j; 	struct student t;  	for (i=0; i<len-1; i++) 	{ 		for (j=0; j<len-1-i; j++) 		{ if (a[j].score < a[j+1].score) 			{ 				t = a[j]; 				a[j] = a[j+1]; 				a[j+1] = t; 			} 		} 	} }

user: user-1
content: 楼主冒泡排序写的有问题： if (a[j].score < a[j].score) 这句判断永远是不成立的

user: user-2
content: if (a[j].score < a[j].score) 你这判断条件写的也太马虎了吧，当然都不执行直接跳过啊

user: user-0
content: 应该不是定义了struct student t的问题，t 只是用来做冒泡排序的中间变量。感觉还是指针用的不对吧

user: user-3
content: sort函数中定义了：  struct student t;  这样写函数里面处理的是这个t， 而不是传进来的pArr，因此没有达到目的。  如果对您有帮助，请采纳答案好吗，谢谢！

user: user-0
content: 程序调用了调用函数，想对把学生信息按照学生成绩多少排序，但是最后执行的时候，发现调用函数没有执行，依然没有排序，各位大神帮忙看看是什么原因？
user-0 提问: c语言数组和指针的问题

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

user: user-2
content: 同意一楼和二楼

user: user-3
content: #include <stdio.h>  void minmax(int *a, int len, int *max, int *min);  int main(void) {     int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,5,};     int min, max;     printf("minmax sizeof(a)=%lu\n", sizeof(a));     printf("main a=%p\n",a);     // printf("a[0]=%d\n",a[0]);     minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);     printf("a[0] = %d\n", a[0]);     printf("min = %d, max = %d\n",min,max);     return 0; } void minmax(int *a,int len,int *min,int *max) {     int i;     printf("minmax sizeof(a)=%lu\n", sizeof(a));     printf("main a=%p\n",a);     //a[0]=600;     *min= *max = a[0];     for (i = 1; i < len; i++){         if (a[i] < *min){             *min = a[i];         }         if (a[i]> *max) {             *max = a[i];         }     } } 去掉那句a[0] = 600;就可以了 注意，数组下标是从0开始，而不是从1开始的。比如数组长度是10，那么下标是从0～9  这个问题跟指针和数组似乎没多大关系；

user: user-3
content: 因为a[0]的1已经被600覆盖了。所以，最小值是2；