Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C win32API代码编译报错  求各为师傅解决

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

user: user-2
content: 检查GetDirverInfo函数： 1.如果是自己写的函数，检查拼写，大小写，参数是不是都一致（或者只写了函数声明没有实现） 2.如果是外部库里的函数，检查附加库目录和附加依赖项的配置 （工程---属性---配置属性---链接器---常规---附加库目录） （工程---属性---配置属性---链接器---输入---附加依赖项）

user: user-3
content: 引用 楼主 Hy_xiaosheng 的回复:   错误	1	error LNK2019: 无法解析的外部符号 "int __cdecl GetDirverInfo(char *)" (?GetDirverInfo@@YAHPAD@Z)，该符号在函数 _main 中被引用	C:\Users\Administrator\Desktop\WindowsAPI开发详解\WindowsAPI开发详解\WindowsAPI开发详解\Start-第四章-使用FindFirstVolume系列函数遍历驱动器 获取驱动器信息.obj	WindowsAPI开发详解 错误	2	error LNK2019: 无法解析的外部符号 _WinMain@16，该符号在函数 ___tmainCRTStartup 中被引用	C:\Users\Administrator\Desktop\WindowsAPI开发详解\WindowsAPI开发详解\WindowsAPI开发详解\MSVCRTD.lib(crtexew.obj)	WindowsAPI开发详解 错误	3	error LNK1120: 2 个无法解析的外部命令	C:\Users\Administrator\Desktop\WindowsAPI开发详解\WindowsAPI开发详解\Debug\WindowsAPI开发详解.exe	1	1	WindowsAPI开发详解  把GetDirverInfo函数所在的lib得添加上

user: user-4
content: 找不到对应函数的实现 要么是这个函数声明了但是没有实现 要么就是对应的lib文件没有导入到工程 要么就是调用方式两边不对应
user-0 提问: C中结构体内部的参数传递时，只有字符串传递正常，而数字无法传递，求大佬教教

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

user: user-2
content: //... scanf("%s%d%s",group[i].ContactName,&group[i].ContactNum,group[i].ContactCity); //...   但是你的ContactNum定义的是int数组，你用%d当然不能输入了。

user: user-3
content: 不知道楼主从哪看出来数字无法传递。 &group[i].birthday.year=(int *)0x62d53c? 这个是存放year变量的地址

user: user-0

user: user-0
user-0 提问: 小白求教（指针）

回复:
user: user-1
content: char a[]="ABCDE";  字符串存储在内存中，末尾会自动添加一个'\0'字符，等于整数0，作为字符串的结束。（如果你自己用代码构造一个字符串，就一定要记得在末尾添加一个'\0'字符） while(*t++) 当*t=='\0'==0的时候就结束循环。
user-0 提问: 蓝桥杯的一个题目

回复:
user: user-0
content: 我也感觉对不上，但是这个题目的第一个测试点的输入输出就是这样，就这样搞得我完全不明白这题是干嘛的呢 或许在他的  问题描述  做文章吧  题目在这：http://lx.lanqiao.cn/problem.page?gpid=T406

user: user-1
content: 贴图和文字对不上。  贴图中的样例为： 2行2列的矩阵，矩阵内容为： 1 2 3 4 输出矩阵内容 的和： 10
user-0 提问: 请教指针问题

回复:
user: user-1
content: p表示输出指针（pointer） d表示输出十进制数字（decimal）

user: user-2
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-3
content: 指针是C里的一个精华，学好了对C编程帮助很大。你的问题楼上都回答了。 另外，我自己写了一篇博客，分析了为何指针学多了人会晕掉，欢迎阅读批评指正： http://blog.csdn.net/kelehaier/article/details/54287870

user: user-4
content: 引用 1 楼 jianwen0529 的回复:%p 表示输出的是一个指定值  手误： %p 表示输出的是一个指针值

user: user-4
content: %p 表示输出的是一个指定值

user: user-5
content: p表示输出指针（pointer） d表示输出十进制数字（decimal）

user: user-6
content: ％p　是输出指针的值，就是逻辑内存地址的值。

user: user-7
content: %p就专门用来输出指针的值的，显示的是十六进制的值，%d是十进制的值
user-0 提问: 关于extern的用法

回复:
user: user-1
content: 这也行，求分啊

user: user-2
content: 接分来了，

user: user-3
content: 帮结贴

user: user-0
content: 来个人把分接了。

user: user-4
content: 多谢LZ。。

user: user-0
content: 找到问题了，是由于有个文件没添加到组中的缘固。
user-0 提问: C语言求助！！！！！！！！

回复:
user: user-1
content: 输出语句是从右边走向左边的。

user: user-2
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-3
content: 不要在一个表达式对同一个变量多次++ 这是未定义行为。 研究这种东西并没有啥意义，除非你时间太多

user: user-4
content: 这个和编译器处理函数参数的入栈顺序有关，这个例子中应该是第一个a++先入栈最后一个出栈。 有的编译器是最后一个参数先入栈。

user: user-5
content: 1、不要写这种表达式  2、如果非要说就是参数是从右向左压入栈中的

user: user-6
content: 因为C语言函数参数入栈顺序是从右到左的，所以计算顺序是从右到左开始计算的
user-0 提问: 大神有空给瞧一眼

回复:
user: user-1
content: 当(low+high)之和不为2的倍数时，(low+high)/2为浮点数，因为mid为int型，所以只保留整数部分，小数部分丢弃。例如low=0；high=14；//mid=7；low=1；high=14；//mid=7。你会发现都是7。这样就无法往7以上的数组移动。

user: user-2
content: 仅供参考 #include"stdio.h" main() {      int c[10]={1,2,3,4,5,6,7,8,9,10};     int high=9,low=0,mid,n;     int flag;     scanf("%d",&n);     while (n)     {  mid=(high+low)/2;     if(c[mid]==n)       {         flag=mid;        break;       }     else if(c[mid]>n)     high=mid-1;     else         low=mid+1;     }     printf("%d",flag);  }

user: user-2
content: 折半查找的数应该是原先就排好顺序的

user: user-3
content: 建议你去搜索下二分查找的算法和相关代码

user: user-3
content: 语法，算法都有问题 还有你应该写个函数来查找返回索引，不要在main函数返回

user: user-4
content: scanf("%d,&key"); ==> scanf("%d", &key);
user-0 提问: 求大神解释下怎么用这个代码，高中自学

回复:
user: user-1
content: 高中生还是把高中课程学好吧。 希望楼主不要犯类似 “早知道吃完第七个包子就饱了，我为什么还要吃前六个包子呢？！” 这种低级错误。

user: user-2
content: initgraph(&gdriver, &gmode, "C:\\tc"); 这个是TC绘图的老代码，TC是在DOS平台下。  楼主如果想用TC编写图形程序，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。  下载一个EasyX包，里面有完整的函数手册。EasyX官网有实例。  仅供参考： 用绘图语句画机器猫（初学C语言的同学必看） http://blog.163.com/tab_98/blog/static/1192409720150316223680/

user: user-3
content: 这是用了easyx图形库，然后画图的函数在手册里都有解释，像lineto这些看名字就明白了。

user: user-4
content: 看来你这个是绘制图形的功能，大概是不能再控制台工程上使用的
user-0 提问: 精通acm规则的大神请来，一个代码自认为已经算符合题意但是就是说我答案错误，请大家一起帮忙找错

回复:
user: user-0
content: #include<stdio.h> int main() {     int n,i;     int m,j;     char c,o,p,q;     while( scanf("%d%*c",&n)!=EOF)     {         scanf("%c%c%c(%d,%d)",&c,&o,&q,&j,&m);          if((c=='a')&&(o=='d')&&(q=='d'))         {             printf("%d\n",j+m);         }          else  if((c=='m')&&(o=='u')&&(q=='l'))         {             printf("%d\n",j*m);         }          else if((c=='d')&&(o=='i')&&(q=='v'))         {             if(m==0) printf("error\n");             else if(j%m==0) printf("%d\n",j/m);             else  printf("%.2f\n",j/(float)m);         }          else if((c=='s')&&(o=='u')&&(q=='b'))         {              printf("%.d\n",j-m);         }     } } 已经改对了，不需要麻烦各位啦
user-0 提问: 求助！关于strlen获取指针变量中的个数

回复:
user: user-1
content: s++会导致字符串的首地址不断向后偏移，而你的字符串末尾‘\0’是不变的，这就导致的strlen(s)的长度不断变下，当偏移到原字符串一半长度以上时，这个for循环就结束了，也就意味着你原字符串后半部分的大写字母不会做转化。

user: user-2
content: 引用 7楼我是你的主体 的回复:[quote=引用 5 楼 xiaohuh421的回复:]估计楼主是没有明白strlen是做什么用的.  strlen   按字面意思   str  就是字符串string的缩写   len就是长度length的缩写.        如它的字面意思一样, 它就是 求字符串长度的.    它是从你传的地址开始, 查找\0  也就是0作为结束,  它不会管你越不越界什么的. 反正就是从你给它的地址开始往后面找, 如果你的内存中每一个字节都不为0, 那么它就会告诉你字符串长度有几个G. 我一直以为strlen是求一个串长，仅仅想当然的求串的开始到结束，原来是从串的起始地址开始至'＼0'结束 是这样吗？[/quote]

user: user-0
content: 引用 1 楼 user-7的回复:会影响的char* 字符串长度指的是当前指针位置起到\n结束符止，s++会导致指针偏移。 我以为都是从串头到串尾 蟹蟹你

user: user-0
content: 引用 6 楼 自信男孩的回复: void inv (char *s) {     int i;      for (i = 0; i < strlen(s); i++) {         if (isupper(s[i]))             s[i] += 32;     } }  记着加一下isupper（）的头文件。 isupper是干嘛的 没学过。

user: user-0
content: 引用 5 楼 xiaohuh421的回复:估计楼主是没有明白strlen是做什么用的.  strlen   按字面意思   str  就是字符串string的缩写   len就是长度length的缩写.        如它的字面意思一样, 它就是 求字符串长度的.    它是从你传的地址开始, 查找\0  也就是0作为结束,  它不会管你越不越界什么的. 反正就是从你给它的地址开始往后面找, 如果你的内存中每一个字节都不为0, 那么它就会告诉你字符串长度有几个G. 我一直以为strlen是求一个串长，仅仅想当然的求串的开始到结束，原来是从串的起始地址开始至'＼0'结束 是这样吗？

user: user-3
content: void inv (char *s) {     int i;      for (i = 0; i < strlen(s); i++) {         if (isupper(s[i]))             s[i] += 32;     } }  记着加一下isupper（）的头文件。

user: user-4
content: 估计楼主是没有明白strlen是做什么用的.  strlen   按字面意思   str  就是字符串string的缩写   len就是长度length的缩写.        如它的字面意思一样, 它就是 求字符串长度的.    它是从你传的地址开始, 查找\0  也就是0作为结束,  它不会管你越不越界什么的. 反正就是从你给它的地址开始往后面找, 如果你的内存中每一个字节都不为0, 那么它就会告诉你字符串长度有几个G.

user: user-3
content: s++已经移动了字符串的位置，所以strlen的时候值会变化。

user: user-5
content: 假如不会移动，那你又怎么能*s给某个字符赋值呢

user: user-6
content: strlen 只是计算从S指针开始到'\0'位置的字节数，你把S指针往后移那字节当然减少了，有什么问题？

user: user-7
content: 会影响的char* 字符串长度指的是当前指针位置起到\n结束符止，s++会导致指针偏移。
user-0 提问: 求解答为啥程序会停止运行

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

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

user: user-3
content: 自己动手，遇到具体问题点了再问。要让别人看到你的努力。 直接帮你做好了，说实话没有任何价值，其实是在助长你的懒惰。 你这帖子要是在stackoverflow，反对票能淹死你。

user: user-4
content: 只帮你改了下面这个函数 struct address *addnew(struct address *head,char *name,char *email,char *phone) { 	struct address *p0,*p1; 	p0=(struct address *)malloc(sizeof(struct address)); 	strcpy(p0-＞name,name); 	strcpy(p0-＞email,email); 	strcpy(p0-＞phone,phone); 	p0-＞next=NULL; 	if(head==NULL) 	   head=p0; 	else 	{ 		p1=head; 		while(p1-＞next!=NULL) 		     p1=p1-＞next; 		p1-＞next=p0; 	} 	return (head); }

user: user-4
content: 代码好长，好没心情去看啊！

user: user-5
content: 因为你程序出问题了啊，程序不能正常运行，你单步调试下。

user: user-6
content: 不要做伸手党

user: user-7
content: 你至少应该描述下程序功能及运行异常 信息

user: user-0
content: 因为刚刚接触c语言，所以还不会调试，，这个程序的作用就相当于是建立一个简单的通讯录系统

user: user-8
content: p1 p2可能没有初始化就使用了
user-0 提问: C语言文件问题

回复:
user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-2
content: http://www.cnblogs.com/wuqi1003/archive/2013/01/23/2872659.html

user: user-3
content: 传递文件指针过去即可  void Write(FILE *fp) { }  又或者定义一个全局变量来保存已经打开读写开关的FILE*

user: user-4
content: 以文件指针的方式传递即可，打开、关闭均放主函数中。 至于说效率问题，多次传递文件指针这个影响可以忽略不计。
user-0 提问: C语言新人，在学指针与数组这一块，某段代码一直有问题，请教！

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

user: user-0
content: 太粗心了 对这种低级错误还是不注意  谢谢回复的各位！！

user: user-2
content: 你的for后面多加了个;  所以for（i=0;i<number;i++）； 成一个语句 了。  流程是i=0;i++;  i=1;i++; i=2;i++;  i=3;i++;  i=4;i++ i=5; 退出循环 进入下个语句 printf("%d",i+1);   //  i=5，i+1=6

user: user-3
content: 那个for后面加个；太刺眼了。

user: user-4
content: 你的for循环为什么加分号呢？那就一个空的for循环了。
user-0 提问: 注册表信息修改

回复:
user: user-1
content: 引用 2 楼 u013058964 的回复:有介绍如何用labview来操作注册表信息的内容吗？例如查找，替换之类！ 百度搜相关关键字。

user: user-0
content: 有介绍如何用labview来操作注册表信息的内容吗？例如查找，替换之类！

user: user-2
content: http://blog.csdn.net/u011164819/article/details/51880267
user-0 提问: 数据结构适合什么时候学习？在学完c之后学怎么样？

回复:
user: user-1
content: 为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  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-2
content: 可以去学数据结构了。 数据结构的本质就在于：如何将现实世界中各种各样的数据放入到内存中，并且如何在内存中操作这些数据，如何评价这些存储方案和操作方法。 数据结构难学吗？是难学。 为什么难学？一开始上来就讲空间复杂度、时间复杂度，就讲抽象数据，当然难学了。

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

user: user-3
content: 首先数据结构是数据存储的方式，其次需要通过代码来展示它才能更好的理解 你只要学会一门编程语言的基础，有计算机内存的概念 就可以看数据结构了
user-0 提问: 大神来看看吧，拜谢啦

回复:
user: user-0
content: 引用 1 楼 user-2的回复:意思就是用链表存储数据吧，可以自己网上找几篇讲链表的文章学习 主要是时间太急了，能帮忙改下不

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

user: user-2
content: 意思就是用链表存储数据吧，可以自己网上找几篇讲链表的文章学习
user-0 提问: 自学C的新人，请教关于gcc编译文件时遇到C11支持的问题。

回复:
user: user-0
content: 引用 9 楼 ri_aje 的回复:[quote=引用 8 楼 wufhjx 的回复:] [quote=引用 7 楼 ri_aje的回复:][quote=引用 4 楼 wufhjx 的回复:] [quote=引用 1 楼 ri_aje的回复:]*_s 好像是软软的私货，gcc 估计不支持，用不带 _s 的版本吧。 书本上说不带_s的是标准函数，而这个是C11标准引入的新字符串函数。作者说这个新的函数比旧的好。上网查了好久，知道4.7后面的gcc版本都支持C11标准啊，现在我的是5.4。请问为什么还是编译不了？[/quote] 这些 safe 函数是 Annex K (optional) of ISO/IEC 9899:2011，看名字标准并没有严格要求，实现可以自决。gcc c11 的支持在这里可以查到 https://gcc.gnu.org/wiki/C11Status，里面明确说了： Bounds-checking (Annex K) [Optional]　Library issue (not implemented) ，显然没有支持呢，所以你看到链接错误。[/quote] 自决就是可以随便给这个函数起名字？不太懂。请问可以详细说一下，我应该怎么做吗？今天我换了codeblocks来运行这段代码也是不行。要崩溃了。[/quote] 自决就是就是可以自由决定是否实现这个函数，因为这个函数在标准里试定义在 annex K 里面，然后这个附录是 optional，意思就是 gcc 实不实现都行。我猜 ms 把这些推进了标准，但是遇到的阻力也不小，最后只弄了个 optional，然后非 ms 的编译器没人吊它。[/quote] 非常感谢你的回答

user: user-1
content: 引用 8 楼 wufhjx 的回复:[quote=引用 7 楼 ri_aje的回复:][quote=引用 4 楼 wufhjx 的回复:] [quote=引用 1 楼 ri_aje的回复:]*_s 好像是软软的私货，gcc 估计不支持，用不带 _s 的版本吧。 书本上说不带_s的是标准函数，而这个是C11标准引入的新字符串函数。作者说这个新的函数比旧的好。上网查了好久，知道4.7后面的gcc版本都支持C11标准啊，现在我的是5.4。请问为什么还是编译不了？[/quote] 这些 safe 函数是 Annex K (optional) of ISO/IEC 9899:2011，看名字标准并没有严格要求，实现可以自决。gcc c11 的支持在这里可以查到 https://gcc.gnu.org/wiki/C11Status，里面明确说了： Bounds-checking (Annex K) [Optional]　Library issue (not implemented) ，显然没有支持呢，所以你看到链接错误。[/quote] 自决就是可以随便给这个函数起名字？不太懂。请问可以详细说一下，我应该怎么做吗？今天我换了codeblocks来运行这段代码也是不行。要崩溃了。[/quote] 自决就是就是可以自由决定是否实现这个函数，因为这个函数在标准里试定义在 annex K 里面，然后这个附录是 optional，意思就是 gcc 实不实现都行。我猜 ms 把这些推进了标准，但是遇到的阻力也不小，最后只弄了个 optional，然后非 ms 的编译器没人吊它。

user: user-0
content: 引用 7 楼 ri_aje的回复:[quote=引用 4 楼 wufhjx 的回复:] [quote=引用 1 楼 ri_aje的回复:]*_s 好像是软软的私货，gcc 估计不支持，用不带 _s 的版本吧。 书本上说不带_s的是标准函数，而这个是C11标准引入的新字符串函数。作者说这个新的函数比旧的好。上网查了好久，知道4.7后面的gcc版本都支持C11标准啊，现在我的是5.4。请问为什么还是编译不了？[/quote] 这些 safe 函数是 Annex K (optional) of ISO/IEC 9899:2011，看名字标准并没有严格要求，实现可以自决。gcc c11 的支持在这里可以查到 https://gcc.gnu.org/wiki/C11Status，里面明确说了： Bounds-checking (Annex K) [Optional]　Library issue (not implemented) ，显然没有支持呢，所以你看到链接错误。[/quote] 自决就是可以随便给这个函数起名字？不太懂。请问可以详细说一下，我应该怎么做吗？今天我换了codeblocks来运行这段代码也是不行。要崩溃了。

user: user-1
content: 引用 4 楼 wufhjx 的回复:[quote=引用 1 楼 ri_aje的回复:]*_s 好像是软软的私货，gcc 估计不支持，用不带 _s 的版本吧。 书本上说不带_s的是标准函数，而这个是C11标准引入的新字符串函数。作者说这个新的函数比旧的好。上网查了好久，知道4.7后面的gcc版本都支持C11标准啊，现在我的是5.4。请问为什么还是编译不了？[/quote] 这些 safe 函数是 Annex K (optional) of ISO/IEC 9899:2011，看名字标准并没有严格要求，实现可以自决。gcc c11 的支持在这里可以查到 https://gcc.gnu.org/wiki/C11Status，里面明确说了： Bounds-checking (Annex K) [Optional]　Library issue (not implemented) ，显然没有支持呢，所以你看到链接错误。

user: user-2
content: https://www.oschina.net/code/snippet_942932_23807

user: user-3
content: 参考：https://gcc.gnu.org/wiki/C11Status  这个在 gcc 里貌似还没实现

user: user-4
content: *_s 好像是微软自定义的函数吧，gcc 应该不支持

user: user-0
content: 引用 3 楼 小灸舞的回复:https://www.oschina.net/code/snippet_942932_23807 谢谢你的答复，我现在还看不懂这个。

user: user-0
content: 引用 1 楼 ri_aje的回复:*_s 好像是软软的私货，gcc 估计不支持，用不带 _s 的版本吧。 书本上说不带_s的是标准函数，而这个是C11标准引入的新字符串函数。作者说这个新的函数比旧的好。上网查了好久，知道4.7后面的gcc版本都支持C11标准啊，现在我的是5.4。请问为什么还是编译不了？

user: user-1
content: *_s 好像是软软的私货，gcc 估计不支持，用不带 _s 的版本吧。
user-0 提问: 求在指定两个串中，在串1，不在串2的字符序列的算法

回复:
user: user-1
content: for(i = 0;i < strlen(s1); i++) { 	ind = 0; 	for(j = 0; j< streln(s2); j++) 	{ 		if(s[i] == s2[j]) 		{ 			ind = 2; 			break;	 		} 		ind = 1; 		 	} 	 	if(ind == 1) 	{ 		sprintf(buf, " %s", s1[i]); 		strcat(s3, buf); 	} 	 } s3[strlen(s3)] = '\0'; printf("s3=[%s]", s3);  注：s3中打印出的就是需要s1中存在但是在s2中不存在的字符所组成的字符串了（未经运行，仅供参考）

user: user-2
content: std::string::find

user: user-3
content: for(串1) {     for(串2)     {         if(s1[i] == s2[j])             break;     }     if(j == len2) //len2 串2的长度     {         //这个就是符合结果的字符，然后把所有这里的存储起来就是你需要的结果     } }
user-0 提问: 链表初级

回复:
user: user-1
content: 如果是初学者，不建议使用别人看不懂的或者看着别扭的语法形式去写代码。比如while (scanf("%d", &data), data != -1).写这个没错，逗号运算符嘛，以最后一个表达式作为判断true或者false，但是你考虑scanf("%d", &data)出错的情况吗？虽然一般不会出错。但是一般不出错不等于以后总不出错。 建议，按部就班，杜绝小的技巧导致大的错误。

user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct node{     int num;     struct node *next; };  typedef struct node SNODE;  SNODE *creat(void) {     int ret;     SNODE *r,*h,*p;     int data;     h = (SNODE*)malloc(sizeof(SNODE));     if (!h) {         fprintf(stderr, "Malloc error!\n");         return NULL;     }     r = h;      ret = scanf("%d", &data);     while(ret > 0 && data != -1)     {         p = (SNODE*)malloc(sizeof(SNODE));         if (!p) {             fprintf(stderr, "Malloc error!\n");             return NULL;         }         p->num = data;         p->next = NULL;         r->next = p;         r = p;         ret = scanf("%d", &data);     }     p->next = NULL;      return h; } void print(SNODE *head) {     SNODE *p = NULL;     p = head->next;      if(!p)         printf("\nLinkList is NULL");     else     {         printf("\nhead");         do {             printf("->%d",p->num);             p=p->next;         }while(p != NULL);         printf("->end");     } } int main() {     SNODE *head;      head = creat();     print(head);      return 0; }  其实没有多复杂的为什么。你的语法就不应该这样，虽然编译器不给你指出错误，但是这样写就是不合法的。因为写的不对，所以结果就不能按照你想法输出。 语法上对于空指针，就是NULL，不要用'\0'，先搞明白'\0', NULL, "0", 0这些是什么，做什么用。在什么地方用什么符号，不要混哦。

user: user-2
content: p->next不赋值的话，是个垃圾值（并不是NULL，或者说'\0'） 然后就会找到垃圾值对应的地址，然后继续next 然后就会跳不出你print函数里的while循环

user: user-3
content: p是一个指针 while(scanf("%d",&data),data!=-1)  {   p=(SNODE*)malloc(sizeof(SNODE));   r->next=p;   p->num=data;   r=p;  } 看看这里面最后r = p ； 然后现在你在while之后让p = NULL； 让p的指针指向了一个未知的空间，也就让在while循环中的r = NULL；所以最后程序运行的时候，你可以看到前三个数字都已经输出，然后最后本应该结束的地方却无限的的输出一个未知的值，这是因为在print的时候无法检测到停止的地方； 也就是这里 do{    printf("->%d",p->num);    p=p->next;   }while(p!='\0');   printf("->end");
user-0 提问: 很无解的运行时间问题

回复:
user: user-0
content: 我之前的项目是运用，CUDA/OpenCl/SSE ,技术的，但由于终端极限性，无法施用，     主机和终端的CPU主频比是 3.6 G/ 1.33 G, 两个平台的处理核数都是4个，按理推算， 两边的时间也就差不多10倍左右吧，怎么会相差那么多，自己写的C 代码也是要25倍差距， 是因为配置环境，或其他原因导致的？

user: user-1
content: 引用 1 楼 user-3 的回复:你说的时间是walltime吧，还要看系统时间，用户时间，可以用linux time命令获取 差不多就这样

user: user-2
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-3
content: 你说的时间是walltime吧，还要看系统时间，用户时间，可以用linux time命令获取
user-0 提问: 问一个二级指针的问题 C语言

回复:
user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:[quote=引用 11 楼 songjiajia 的回复:] [quote=引用 7 楼 zhao4zhong1 的回复:] A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价   谢谢 弄明白了！  再问个问题 用malloc给指针分配内存后 那内存中存放的有初始值吗 默认是0 吗？[/quote] 没有确定的初始值（是之前别的程序占用该处时遗留下来的不再使用的垃圾值） 希望为0可以memset或改用calloc  其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。 [/quote] 恩 多谢！

user: user-1
content: 引用 11 楼 songjiajia 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价   谢谢 弄明白了！  再问个问题 用malloc给指针分配内存后 那内存中存放的有初始值吗 默认是0 吗？[/quote] 没有确定的初始值（是之前别的程序占用该处时遗留下来的不再使用的垃圾值） 希望为0可以memset或改用calloc  其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-1
content: A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价   谢谢 弄明白了！  再问个问题 用malloc给指针分配内存后 那内存中存放的有初始值吗 默认是0 吗？

user: user-0
content: 引用 4 楼 playinend 的回复:temp[ i ] 和 *( temp + i ) 一般是等同的，temp + i 是一个指针表达式 谢谢 弄明白了！  再问个问题 用malloc给指针分配内存后 那内存中存放的有初始值吗 默认是0 吗？

user: user-2
content: temp[i] 和 temp+i 是什么关系呢？ 相等

user: user-3
content: temp[i] 与 *(temp+i) 都表示第i个元素的值

user: user-4
content: 看你怎么理解  temp 是char**  那么temp[i] 就是char*  temp+i 就是temp[i]  *(temp+i ) 就是temp[i]里面存的值，这个值在你的例子中，存的是一个字符串常量的地址

user: user-5
content: 数组可以退化为指针的。  a[i]其实也就是*（a+i)，只是后面这个是表达式罢了。

user: user-6
content: temp[ i ] 和 *( temp + i ) 一般是等同的，temp + i 是一个指针表达式

user: user-7
content: 是相等的，数组其实也能算作是指针； //假设有数组如下 int a[10]; //指针如下 int *p; //让指针指向数组 p = a;  想想看这个指针指向的是哪里？

user: user-8

user: user-9
content: 是
user-0 提问: 求助，c语言程序卡死

回复:
user: user-0
content: 可以了，感谢各位的帮助，忘加取地址符号了，谢谢4楼提醒

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-0
content: 换了双等号，还是不行，断点不会啊，挺急的，麻烦大神帮忙改一下，在线等

user: user-2
content: if(stu[i].mingci=1)  stu[i].score=7;  else if(stu[i].mingci=2)  stu[i].score=5;  else if(stu[i].mingci=3)  stu[i].score=3;  else if(stu[i].mingci=4)  stu[i].score=2;  else if(stu[i].mingci=5)  stu[i].score=1;  } 这一片if(=)应该是if(==)吧

user: user-3
content: 加断点，进行单步调试
user-0 提问: 已知字母A的ASCII码为十进制数65，且c2为字符型，则执行语句c2＝‘A’+‘6’-‘3’后，c2中的值为     

回复:
user: user-1
content: 以字符格式%c输出结果为：D，以数值格式%d输出结果为：68

user: user-0
content: 好的 三克油 学习了

user: user-2
content: 因为在c2后面的运算里，'A'+'6'-'3'这三个用单引号括起来表示一个字符型常量，最后得到一个字符型常量，而c2又是一个char变量，所以结果保存成字符，如果说c2定义为int型，最后就会把得到的字符转换成ASCII表中对应的码值。
user-0 提问: socket FTP服务器中一用dir功能就停止工作

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #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: 另外，由于tcp的特性，你服务器端虽然一次发一行，客户端接收到的时候可能是多行，这时也会造成szBuffer的越界

user: user-2
content: 引用 4 楼 qq_35402305 的回复:[quote=引用 3 楼 cutmelon的回复:]szBuffer[ret]='\0'; 这句错了吧， szBuffer[ret]=0; 才是正道 这里应该是'\0' 空字符没错[/quote] 嗯，我不习惯这么用转义符。 不过你这里的szBuffer大小开的有问题，ret=recv(...)这里返回的是接收到的字节数，也就是说可能是80，szBuffer[80]就明显越界了，我猜你这服务器的运行路径巨深

user: user-3
content: 调试下就知道哪里出错了

user: user-0
content: 引用 3 楼 cutmelon的回复:szBuffer[ret]='\0'; 这句错了吧， szBuffer[ret]=0; 才是正道 这里应该是'\0' 空字符没错

user: user-2
content: szBuffer[ret]='\0'; 这句错了吧， szBuffer[ret]=0; 才是正道

user: user-4
content: 先用 windows 自带的 ftp 命令测试下 ftp 的 dir 返回的数据是有一定格式的。
user-0 提问: 为啥一运行出现XX.exe已停止工作

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

user: user-2
content: 少了个取地址符号，这种错误一般单步就能发现，出错在这一行。 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 引用 2 楼 ai977313677 的回复:你的scanf用法有问题 ,改成 scanf("*d",&n);那个星号打错了，应该是%百分号

user: user-3
content: 你的scanf用法有问题 ,改成 scanf("*d",&n);

user: user-4
content: scanf("%d",&n); 还有记得return 0;
user-0 提问: 看不懂的  for循环 求解释 新手

回复:
user: user-1
content: i,j,k各不相等，但是没有j的值，if语句会出问题，建议单步调试，并且对j初始化

user: user-2
content: 开始的时候j应该有赋值吧，这样没有J什么事哦

user: user-3
content: j没有值，你给j赋值后试试

user: user-4
content: i = 1      k = 1      ...      k = 4 i = 2     k = 1      ...      k = 4 ... i = 4     k = 1      ...      k = 4     这样的！还有你的j没有初始化，会有问题。以后遇到这种问题就多单步调试，看程序是怎么走的。

user: user-5
content: 很明显少了个j循环  #include <stdio.h>  int main(void) { 	int i; 	int j;   //  三个 变量 分别为 I J K ; 	int k;  	printf("\n");  	for (i = 1; i < 5; i++) 	{ 		for (j = 1; j < 5; j++) 		{ 			for (k = 1; k < 5; ++k) 			{ 				if (i != k&&i != j&&j != k)// 如果 i 不等于 k 且 i不等于 j 且不等于 k;  				{ 					printf("%d %d %d\n", i, j, k);  				}  			} 		} 		  	} }
user-0 提问: 怎么使用C语言做一个射击类小游戏。

回复:
user: user-1
content: 显示错误 找不到graphics头目录

user: user-2
content: 用什么原件写呢

user: user-3
content: 楼主的游戏做的怎么样了？  可不可以发来玩一下

user: user-4
content: srand放main函数里面调用一次

user: user-0
content: 引用 6 楼 user-5的回复:[quote=引用 5 楼 qq_37167928 的回复:] [quote=引用 4 楼 user-5的回复:]随机出现用随机数啊,stdlib.h里面有srand, rand这两个函数 大神您好，其实我知道用那两个的。可是，我放进函数的时候有问题~没有理想中的效果[/quote] srand调用一次，rand调用多次，使用取模%将rand的返回调整到自己需要的范围[/quote] 这样，好的，我再试试。

user: user-5
content: 引用 5 楼 qq_37167928 的回复:[quote=引用 4 楼 user-5的回复:]随机出现用随机数啊,stdlib.h里面有srand, rand这两个函数 大神您好，其实我知道用那两个的。可是，我放进函数的时候有问题~没有理想中的效果[/quote] srand调用一次，rand调用多次，使用取模%将rand的返回调整到自己需要的范围

user: user-0
content: 引用 4 楼 user-5的回复:随机出现用随机数啊,stdlib.h里面有srand, rand这两个函数 大神您好，其实我知道用那两个的。可是，我放进函数的时候有问题~没有理想中的效果

user: user-5
content: 随机出现用随机数啊,stdlib.h里面有srand, rand这两个函数

user: user-0
content: 怎么发出来就没有换行符了

user: user-0
content: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #include <graphics.h> typedef struct  { 	int x; 	int y; }Coord; int score = 0, life = 3;//分数和生命值。 Coord mposition, bullet, fposition;//飞机坐标，子弹坐标，敌机坐标。 void Iterface();//总界面。 void Mposition();//飞机位置。 void Bullet();//子弹位置 void Fposition();//敌机位置 void print();//打印游戏画面 void Iterface() { 	int i, j; 	char str[10]; 	initgraph(550, 660); 	HWND hwnd = GetHWnd(); 	SetWindowText(hwnd, "星际迷航                 制作:工贸梦之队"); 	Sleep(2000); 	/*settextstyle(40, 0, "隶体"); 	setcolor(RED); 	outtextxy(255, 140, "NEW"); 	settextstyle(40, 0, "楷体"); 	for (i = 0; i <= 255; i++) 	{ 		for (j = 0; j <= 255; j++) 		{ 			setcolor(RGB((i + j + 128) % 255, i, j)); 			outtextxy(205, 200, "星际迷航"); 		} 	} 	Sleep(2000); 	settextstyle(22, 0, "隶体"); 	outtextxy(310, 300, "←_←"); 	settextstyle(22, 0, "楷体"); 	outtextxy(180, 300, "容我装个B"); 	setcolor(LIGHTMAGENTA); 	Sleep(2500); 	outtextxy(175, 300, "请按任意键开始游戏!"); 	getch(); 	cleardevice();*/ 	 	settextstyle(24, 0, "楷体"); 	outtextxy(345, 40, "得分："); 	sprintf(str, "%d", score); 	outtextxy(420, 40, str); 	outtextxy(345, 65, "死亡："); 	sprintf(str, "%d", life); 	outtextxy(420, 65, str); 	settextstyle(22, 0, "楷体"); 	setcolor(LIGHTBLUE); 	outtextxy(350, 100, "操作说明:"); 	outtextxy(350, 125, "W: 射击"); 	outtextxy(350, 175, "A: 左移"); 	outtextxy(350, 200, "D: 右移"); 	outtextxy(350, 225, "空格: 暂停"); } void Mposition() {     IMAGE img1;    loadimage(&img1, "D:\\飞机.JPG");    putimage(mposition.x, mposition.y, &img1); } void print() { 	IMAGE img; 	int i,j=0; 	setcolor(BLACK); 	for (i = 0; i <= 550; i += 30) 	{ 		settextstyle(20, 30, "楷体"); 		outtextxy(i, 0, "■"); 	} 	setcolor(WHITE); 	rectangle(29, 29, 334, 633); 	rectangle(28, 28, 335, 634); 	loadimage(&img, "D:\\TT.JPG"); 	putimage(29, 29, &img); 	Mposition(); 	Bullet(); } void Bullet() { 	IMAGE img; 	loadimage(&img, "D:\\子弹.JPG"); 	putimage(bullet.x, bullet.y, &img); } void Fposition() { 	IMAGE img; 	srand(time(NULL)); 	fposition.x = rand() % 300; 	loadimage(&img, "D:\\敌机.JPG"); 	putimage(fposition.x,
user-0 提问: 杭电acm2005题

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

user: user-2
content: 综合1楼2楼的改了，就可AC了。

user: user-2
content: while(scanf("%d%d%d",&year,&month,&day)!=EOF){  这行错误了，应该改成下面的  while(scanf("%d%d%d",&year,&month,&day)==3){   你的代码在linux里面Ctrl+D根本结束不了。你可以看看scanf返回值的意思。

user: user-3
content: “输入数据有多组，每组占一行，数据格式为YYYY/MM/DD组成”  scanf("%d%d%d",&year,&month,&day)  应该为  scanf("%d/%d/%d",&year,&month,&day)  （%d之间有 ‘/ ’ ）
user-0 提问: 【小白求助】把字符串写入文件出现乱码！！再次读取文件好像出现了错误

回复:
user: user-1
content: windows里常见的内存填充数据含义  * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory 漱 * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers 涵? * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory 很? * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger 撅饰 * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files 烫烫 * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory 屯屯 * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory 葺葺 * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory 蕲蕲 * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash  * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory  * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory

user: user-2
content: 1、释放内存造成的 2、读写的方式也会有影响

user: user-1
content: windows里常见的内存填充数据含义 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory

user: user-3
content: “葺”的GB码是0xdddd, 在这里查到0xdddd的解释 Microsoft Visual C++ compiled code with memory leak detection turned on. Usually, DEBUG_NEW was defined. Memory with this tag signifies memory that has been freed (by free() or delete) by the application. It is how you can detect writing to memory that has already been freed. For example, if you look at an allocated memory structure (or C++ class) and most of the members contain this tag value, you are probably writing to a structure that has been freed.   也就是向已经free的堆内存写导致的

user: user-4
content: 二进制形式写文件，如果你打开有可能会出现乱码；如果想用写可读的文本形式，建议不要使用二进制形式写。

user: user-5
content: 你在strcpy(inf.NUMBER,p);之前就已经free(p)，不出乱码才有鬼了
user-0 提问: 求帮我这个菜鸟看看哪里错了，到输入第二个学生信息就挂了。

回复:
user: user-1
content: 改变指针指向的内存空间的内容，用一级指针就行了。 要改变指针的指向才需要用二级指针。 改成下面这样就行了：  #include <stdio.h> #include <malloc.h> struct student { 	int age; 	char name[40]; 	float score; };  void intput(struct student *st, int len); void output(struct student *st, int len);  int main(void) { 	int len; 	printf("请输入学生人数："); 	scanf("%d", &len); 	struct student * st = (struct student*)malloc(sizeof(struct student) * len); 	intput(st, len); 	output(st, len);  	return 0; }  void intput(struct student *st, int len) { 	int i; 	for (i = 0; i<len; ++i) 	{ 		printf("请输入第%d个人的姓名：", i + 1); 		scanf("%s", &st[i].name); 		printf("请输入第%d个人的年龄：", i + 1); 		scanf("%d", &st[i].age); 		printf("请输入第%d个人的分数：", i + 1); 		scanf("%f", &st[i].score); 	} }  void output(struct student *st, int len) { 	int i; 	for (i = 0; i<len; ++i) 	{ 		printf("第%d个人的信息:\n", i + 1); 		printf("姓名：%s\n", st[i].name); 		printf("年龄：%d\n", st[i].age); 		printf("分数：%f\n", st[i].score); 	} }

user: user-2
content: 给指针数组分配内存时要循环一个一个分配的

user: user-2
content: #include ＜stdio.h＞ #include ＜malloc.h＞ struct student { 	int age; 	char name[40]; 	float score; }; 	void intput(struct student **st, int len); 	void output(struct student **st, int len); int main (void) { 	int k; 	const int len=3; 	struct student *st[len];     for (k=0;k＜len;k++)     {     st[k]= (struct student * )malloc(sizeof (struct student) );     } 	intput(st, len); 	output(st, len); 	return 0; } void intput(struct student **st, int len) { 	int i; 	for (i=0; i＜len; ++i) 	{ 		printf("请输入第%d个人的姓名：", i+1); 		scanf("%s", &st[i]-＞name); 		printf("请输入第%d个人的年龄：", i+1); 		scanf("%d", &st[i]-＞age); 		printf("请输入第%d个人的分数：", i+1); 		scanf("%f", &st[i]-＞score); 		} } 		void output(struct student **st, int len) { 	int i; 	for (i=0; i＜len; ++i) 	{ 		printf("第%d个人的信息:\n", i+1); 		printf("姓名：%s\n", st[i]-＞name); 		printf("年龄：%d\n", st[i]-＞age); 		printf("分数：%f\n", st[i]-＞score); 	 } }

user: user-0
content: st是指向动态分配的内存空间的指针，然后在函数里改变指针指向的内存空间的内容，所以定义了形参是**类型。这个想法没问题吧？

user: user-3
content: 是想把st定义成存储student指针的数组吗，在main中初始化st的时候要有两个*，然后传到函数中的时候不需要取地址符。 struct student **st = (struct student **)malloc(sizeof(struct student *) * len); st是一个一维数组，数组元素是student类型的指针。
user-0 提问: linux下的动态库为什么不需要lib文件

回复:
user: user-1
content: 没有, 凑字, 凑字...    这也没啥用啊...

user: user-0
content: 引用 3 楼 mLee79 的回复:ELF 本来就有加载视图和链接视图.   PE实际上也有的,  WIN 下 mingw32/gcc,  cygwin/gcc 都不用 .lib 就可以链接 dll,  即使你用 M$VC, 一个 dll你没lib的话, 你也可以从 dll 生成导入库 .lib 没有问题的, 我一般都用  mingw32 为开源库生成 dll,  手工生成 lib 在 M$VC 里用,  感觉就是 M$ 的人写 linker 的时候偷懒罢了...  windows下的#pragma可以写在文件内，不在链接时指定，linux有没有这种方式啊

user: user-1
content: ELF 本来就有加载视图和链接视图.   PE实际上也有的,  WIN 下 mingw32/gcc,  cygwin/gcc 都不用 .lib 就可以链接 dll,  即使你用 M$VC, 一个 dll你没lib的话, 你也可以从 dll 生成导入库 .lib 没有问题的, 我一般都用  mingw32 为开源库生成 dll,  手工生成 lib 在 M$VC 里用,  感觉就是 M$ 的人写 linker 的时候偷懒罢了...

user: user-0
content: 引用 1 楼 zjq9931 的回复:有的，编译的时候不用def文件就可以不生成lib文件。 只要头文件就可以。  当然加载的时候要用显式加载。 不能用隐式加载了。  这是两个概念，和链接完全没关系，不知道windows平台的gcc支不支持这种

user: user-2
content: 有的，编译的时候不用def文件就可以不生成lib文件。 只要头文件就可以。  当然加载的时候要用显式加载。 不能用隐式加载了。
user-0 提问: 如何用C语言创建Access数据库（mdb文件）

回复:
user: user-1
content: C不能调用ODBC吗？ ODBC不是C写的吗？

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:调用ODBC ？    ODBC驱动管理器中， 可以选择 ACCESS odbc驱动，创建 空数据库， 想知道 C语言能实现access数据库创建吗？

user: user-1
content: 调用ODBC ？
user-0 提问: 怎么实现把图的多条关键路径输出到显示页面上？在线等，，，，急急急

回复:
user: user-1
content: 页面？参考HTML5！

user: user-2
content: 用不同的存储方式会输出不同的拓扑序列，比如用栈和用队列的结果就不一样，可以理解成一个追求深度，一个追求广度……
user-0 提问: 电脑如何控制手机并收到手机上的声音

回复:
user: user-0
content: 引用 1楼user-1 的回复:远程桌面类似的软件通常是需要流媒体的参与： 1. 手机端采集桌面进行视频编码,采集音频进行编码,根据通信协议所能承载的Container类型进行Mux，最后通过网络传出。 举个例子，抓取手机桌面，使用H.264格式编码；抓取音频信息，使用AAC编码；Mux为flv格式，通过rtmp协议传出 2. 电脑端则需要对应的接收通信协议传输过来的内容，Demux flv文件，解码音视频信息，最后播放呈现  为什么要压缩，因为原始数据很大，要去冗余。 为什么会卡顿，要么是传输码率大于带宽，来不及传输；要么是电脑解码慢；不过通常是前者可能性较大，降低分辨率，降低帧率等等即可如果采用vnc传输 怎样解决卡顿画面卡顿问题 声音不需要了 只需要解决画面卡顿 减少帧数吗

user: user-1
content: 远程桌面类似的软件通常是需要流媒体的参与： 1. 手机端采集桌面进行视频编码,采集音频进行编码,根据通信协议所能承载的Container类型进行Mux，最后通过网络传出。 举个例子，抓取手机桌面，使用H.264格式编码；抓取音频信息，使用AAC编码；Mux为flv格式，通过rtmp协议传出 2. 电脑端则需要对应的接收通信协议传输过来的内容，Demux flv文件，解码音视频信息，最后播放呈现  为什么要压缩，因为原始数据很大，要去冗余。 为什么会卡顿，要么是传输码率大于带宽，来不及传输；要么是电脑解码慢；不过通常是前者可能性较大，降低分辨率，降低帧率等等即可
user-0 提问: 关于C Primer Plus一处疑问

回复:
user: user-0
content: 引用 4 楼 zhu339111520 的回复:不这么写怎么显出与众不同呢，不这么写怎么来彰显自己的牛逼气息呢  牛逼不用显

user: user-1
content: 引用 3 楼 gblhack 的回复:[quote=引用 1 楼 ipqtjmqj 的回复:] 上一行，printf里面 引用 2 楼 paschen 的回复:printf 里让number = i  确实是这样，作者为什么这样写呢，很容易让人忽略啊，我觉得这不是好习惯吧。[/quote]  那就建议分成两条语句写，毕竟代码是写给人看的

user: user-2
content: 引用 3 楼 gblhack 的回复:[quote=引用 1 楼 ipqtjmqj 的回复:] 上一行，printf里面 引用 2 楼 paschen 的回复:printf 里让number = i  确实是这样，作者为什么这样写呢，很容易让人忽略啊，我觉得这不是好习惯吧。[/quote] number可以小于等于max, scanf("%lf", &ptd[i])不返回1时，循环就结束了

user: user-3
content: 不这么写怎么显出与众不同呢，不这么写怎么来彰显自己的牛逼气息呢

user: user-0
content: 引用 1 楼 ipqtjmqj 的回复:上一行，printf里面 引用 2 楼 paschen 的回复:printf 里让number = i  确实是这样，作者为什么这样写呢，很容易让人忽略啊，我觉得这不是好习惯吧。

user: user-1
content: printf 里让number = i

user: user-2
content: 上一行，printf里面
user-0 提问: C语言求帮助，程序写完了，但这个报告怎么做？？？求帮助

回复:
user: user-1
content: 你不是有 ①②③④。。。。 描述下功能就好了

user: user-2
content: 做了什么不重要；重要的是如何包装成做了什么。

user: user-3
content: 最多只能做到  // 程序入口点 void main()  卒于2017年1月3日，享年XX岁。
user-0 提问: 大神看过来！编写找出100以内的素数程序时，运行结果47后面为什么多出了换行

回复:
user: user-0
content: 谢谢，我明白了

user: user-1
content: if(j%5==0)这个应该在if(k>b)里面

user: user-1
content: #include<stdio.h> #include<math.h> void main()  { int a[100]; int i,j=0,k; double b; printf("100以内的素数有：\n"); for(i=0;i<99;i++) { a[i]=i+2; b=sqrt(a[i]); for(k=2;k<=b;k++) 	if(a[i]%k==0)break; 		if(k>b) 		{ 			printf("%5d",a[i]); 			j=j+1; 		 		if(j%5==0) 			printf("\n"); 		}  } printf("\n");  }
user-0 提问: 字符简单问题

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

user: user-2

user: user-2
content: 我的头都转的脖子疼了。终于看明白题目了。 原因是越界了，建议使用strncpy strncpy(s1, s2, strlen(s1));有多少空间就能装多少字符，多了装不了溢出了。溢出没关系，不要溢到只读区域，不然就会出现段错误。所以，小心一些，strncpy比strcpy安全一些了。 不是所有情况都会出现段错误，但是溢出是必定的，你把这两个变量定义成全局的或者在栈上申请空间试试。有可能会拷贝成功。但是不建议这样做，只是作为一个尝试。

user: user-3
content: 引用 楼主 w_linux 的回复:为什么77题答案是有可能导致数据错误，而不是B选项这个答案  用隐式长度定义数组，则必须给数组赋初始值，这样编译器会根据实际后面数值长度来给数组定长。 char s1[] = "That girl"; // 加上\0共10字节 char s2[] = "is beatiful";  // 加上\0共12字节 把s2的内容复制到s1中，导致数组越界，出现不可预测的问题。

user: user-4
content: 字符数组越界是未定义行为

user: user-5
content: 因为后者长度大于前者，后者复制到前者会跃出边界 可能导致程序崩溃，也可能导致不仅仅是s1中的数据被篡改  这个行为涉及到修改了别的内存

user: user-6
content: s1的长度未知，所以会导致数据错误。
user-0 提问: c语言数据的读取

回复:
user: user-1
content: 引用 4 楼 qq_37235706 的回复:①	从文件中读入20位学生英语、体能、治安学三门课的成绩（每名学生成绩信息均包括姓名，学号，分数）。  ②编写查询函数，实现输入学生学号，输出该学生三门课的成绩的功能。 ③编写排序函数，采用冒泡法，将学生总成绩成绩按照从高到低进行排序，排序由排序函数实现，在主函数中调用实现排序，并在主函数中输出排序后的成绩单（要求用指针实现参数传递）。 ④编写插入函数，实现再输入一个学生三门课的成绩，将此学生总成绩按照排序规律插入原学生成绩数组。 ⑤将排好序的成绩单进行反序存放，即原来是总成绩从高到低，现在改为从低到高排列。      ⑥将以上程序结果打印输出，验证程序是否正确实现题目要求。 ⑦在项目报告中画出程序流程图，说明程序设计的算法，附主要程序段。 ⑧在项目报告中说明程序设计过程中的难点、解决办法及编程小结或体会。 大神我必定以高分相赠。急切谢谢 c++操作excel不是很灵活，可以改成读取csv文件， 另附一个大一时候得一个类似的作业， 可以参考，but，代码很烂，毕竟大一。。。

user: user-0
content: ①	从文件中读入20位学生英语、体能、治安学三门课的成绩（每名学生成绩信息均包括姓名，学号，分数）。  ②编写查询函数，实现输入学生学号，输出该学生三门课的成绩的功能。 ③编写排序函数，采用冒泡法，将学生总成绩成绩按照从高到低进行排序，排序由排序函数实现，在主函数中调用实现排序，并在主函数中输出排序后的成绩单（要求用指针实现参数传递）。 ④编写插入函数，实现再输入一个学生三门课的成绩，将此学生总成绩按照排序规律插入原学生成绩数组。 ⑤将排好序的成绩单进行反序存放，即原来是总成绩从高到低，现在改为从低到高排列。      ⑥将以上程序结果打印输出，验证程序是否正确实现题目要求。 ⑦在项目报告中画出程序流程图，说明程序设计的算法，附主要程序段。 ⑧在项目报告中说明程序设计过程中的难点、解决办法及编程小结或体会。 大神我必定以高分相赠。急切谢谢

user: user-0
content: 好像改了之后还是错误的

user: user-0
content: 我这个题目就是在excel中旅读取20个学生成绩的题目，这该怎么写呢

user: user-2
content: 是不是编译不过啊，你这一句 if((fg=fopen("学生成绩信息表.xls","r+"))==NULL ) 中的变量打错了，把fg改成fp
user-0 提问: c语言的字符串问题

回复:
user: user-0
content: 恩，谢谢啦~

user: user-1
content: a[10] 只能赋值一个字符，况且你还越界了

user: user-2
content: 引用 11 楼 qq_36380978 的回复:[quote=引用 10 楼 paschen 的回复:] [quote=引用 9 楼 qq_36380978的回复:][quote=引用 8 楼 paschen 的回复:] [quote=引用 7 楼 qq_36380978 的回复:] 那a=“abc”为什么也不可以呢？  a不是指针，是数组，数组不允许这样赋值，指针就可以  数组要用strcpy[/quote]  可a不是地址么？我的理解是将字符串的第一个字符的地址付给a。。。为什么这样就不对呢？[/quote] a是数组，不是指针，数组名可以退化为指针，但数组不是指针[/quote]，糊涂了，，，，，[/quote]  你要指针写成char* a;  总之记住，数组不是指针  数组没有 a= "123" 这种赋值方法

user: user-0
content: 引用 10 楼 paschen 的回复:[quote=引用 9 楼 qq_36380978的回复:][quote=引用 8 楼 paschen 的回复:] [quote=引用 7 楼 qq_36380978 的回复:] 那a=“abc”为什么也不可以呢？  a不是指针，是数组，数组不允许这样赋值，指针就可以  数组要用strcpy[/quote]  可a不是地址么？我的理解是将字符串的第一个字符的地址付给a。。。为什么这样就不对呢？[/quote] a是数组，不是指针，数组名可以退化为指针，但数组不是指针[/quote]，糊涂了，，，，，

user: user-2
content: 引用 9 楼 qq_36380978的回复:[quote=引用 8 楼 paschen 的回复:] [quote=引用 7 楼 qq_36380978 的回复:] 那a=“abc”为什么也不可以呢？  a不是指针，是数组，数组不允许这样赋值，指针就可以  数组要用strcpy[/quote]  可a不是地址么？我的理解是将字符串的第一个字符的地址付给a。。。为什么这样就不对呢？[/quote] a是数组，不是指针，数组名可以退化为指针，但数组不是指针

user: user-0
content: 引用 8 楼 paschen 的回复:[quote=引用 7 楼 qq_36380978 的回复:] 那a=“abc”为什么也不可以呢？  a不是指针，是数组，数组不允许这样赋值，指针就可以  数组要用strcpy[/quote]  可a不是地址么？我的理解是将字符串的第一个字符的地址付给a。。。为什么这样就不对呢？

user: user-2
content: 引用 7 楼 qq_36380978 的回复:那a=“abc”为什么也不可以呢？  a不是指针，是数组，数组不允许这样赋值，指针就可以  数组要用strcpy

user: user-0
content: 那a=“abc”为什么也不可以呢？

user: user-3
content: 数组名是数组的首地址，是一个常量，可以给该地址的内存单元（数组第一个元素）赋值，不能改变该常量，常量没有内存空间存你要赋的值。  和指针的区别：指针本身也是一个变量，在内存中有自己的空间，来存放所指向内容的地址。所以指针可以为左值，数组名不可以

user: user-2
content: a[10] 表示的是字符串中的第11个字符  你只能在声明时这样用

user: user-4
content: 语法规则而已 见其他楼！！

user: user-5
content: char a[10]="abc"是字符数组初始化同时赋值abc缺省了7个字符，char a[10];    //定义字符数组，a[10]=“abc”是给数组第10个元素赋值，数组下标最大是9，溢出了。

user: user-6
content: 这样不合法呀

user: user-7
content: 这是规定，字符串的初始化和平常一样，但是赋值需要调用strcpy函数
user-0 提问: 求助 

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

user: user-2
content: fscanf是读文本，fread是读二进制，这两个一般不会混用在同一个文件里吧，除非你的文件就是第一个元素是文本，后面的都是二进制那么存的

user: user-3
content: 如果你代码没问题，那就是在fscanf和fread之间fclose再fopen一下（这样才能把缓存中的数据真正写入到文件中）

user: user-4
content: 引用 1 楼 user-4 的回复: struct student     {     char name[20];     int no;     int score[3];     int yingyu;     int tineng;     int zhian; } stud[SIZE];   文件的格式和读取格式要匹配。

user: user-4
content: struct student     {     char name[20];     int no;     int score[3];     int yingyu;     int tineng;     int zhian; } stud[SIZE];
user-0 提问: 无法调用自己写的函数用的vs2008

回复:
user: user-1
content: 将所有源文件的扩展名由.c改为.cpp再试试。

user: user-0
content: 还是不行啊。

user: user-2
content: //不需要这些 //#ifdef  __cplusplus //extern "C" { //#endif     //创建并返回一个空线性表     extern SeqList* Seqlist_Creat(int capacity);     //销毁一个线性表     extern void SeqList_Destroy(SeqList *list);     //将一个线性表list中所有元素清空，线性表回到创建时初始状态     extern void SeqList_Clear(SeqList *list);       extern int SeqList_Length(SeqList* List);       extern int SeqList_Capacity(SeqList* List);       extern int SeqList_Insert(SeqList* List, SeqListNode* node, int pos);       extern SeqListNode* SeqList_Get(SeqList* list, int pos);       extern SeqListNode* SeqList_Delete(SeqList* list, int pos);           //#ifdef  __cplusplus //} //#endif

user: user-3
content: 工程中添加已有文件试试
user-0 提问: 在C语言中如何用全零表示零

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

user: user-0
content: 用浮点数表示，尾数用补码表示（0.00000000）阶码用移码表示（0 00000在补码中1.00000表示负一，在用移码表示，加上2^n为0.00000）
user-0 提问: 关于全局变量！！！

回复:
user: user-1
content: 楼主看下，在另一个函数使用len的值之前，是否已经调用了给len赋值的函数。  如果没有在使用之前调用赋值的函数，那么值是不会改变的。  #include <stdio.h>  int len = 0;  void setLen() { 	len = 100; }  void useLen() { 	len += 20; }  void main() { 	setLen(); 	useLen(); 	printf("%d\n",len); }
user-0 提问: 关于“静态变量不能跨函数使用”的一个疑问

回复:
user: user-1
content: 这涉及c语言的变量存储类别，看看这个资料，很有用http://blog.csdn.net/libing403/article/details/72934528

user: user-2
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-3
content: 输出是正确的，但是不能保证总是正确的。变量i空间已经被释放了，在对i引用其内存单元的值已经没有意义。对变量i定义前加static就可以将i的内存空间申请在数据段，改变了i的生命周期。这样就可以正常引用了。

user: user-4
content: 推荐程正冲老师的《C语言深度解剖》，真正的一劳永逸！

user: user-5
content: 1、你的 i 不是静态变量，是一个局部变量，在栈上分配空间。  2、函数结束后，函数中的变量就销毁了，你指针指向的内容也就是无效的了。  3、结果只是看似正确，那是因为那片内存还没有被操作系统再次分配。

user: user-6
content: 是不是代码少打了static

user: user-7
content: 以上“但是”的太蛋疼，请忽略。。  建议看一下C Primer Plus 第12章的存储类，可以对静态和作用域有一个比较清晰的认识，然后你会发现你上面的论证没有什么意义，局部变量对外是不可见的，除非传递指针，并且局部变量默认是auto自动类型，也就是执行函数时分配内存，执行完后释放内存。 而静态的局部变量虽然可以在程序运行期间一直存在，但他依然是对外不可见的(指针传递除外)，而且要使用关键字static来声明，不然默认的就是auto自动类型。

user: user-7
content: 建议看一下C Primer Plus 第12章的存储类，可以对静态和作用域有一个比较清晰的认识，然后你会发现你上面的论证没有什么意义，局部变量对外是不可见的，除非传递指针，但是局部变量默认是auto自动类型，也就是执行函数时分配内存，执行完后释放内存。 而静态的局部变量虽然可以在程序运行期间一直存在，但他依然是对外不可见的(指针传递除外)，但是要使用关键字static来声明，不然默认的就是auto自动类型。

user: user-8
content: 你这个例子本身就不对题  “静态变量不能跨函数使用” 这句话也是有问题 确切的说“局部静态变量不能跨函数使用”，就算是这样子，我认为如此表述对新人也是很难令人理解的  说白了就是作用域的问题，跟普通局部变量的作用域一样 不同的是当第一次遇到该定义之后创建这个静态变量并且一直到程序结束都存在，假如第二次遇到就不会再继续创建了  总结：虽然局部静态变量在创建后一直存在，但是却只能在它的作用域中可用

user: user-9
content: 1、你的 i 不是静态变量，只不过是一个局部变量  2、函数结束后，函数中的变量就销毁了，你指针指向的地址也就是无效的了  3、结果只是看似正确，那是因为那片内存还没有被覆盖
user-0 提问: 输入不超过６０个字符组成的英文文字,要求只对Ａ到Ｚ的字母重新排列，其它字符保持原来的状态

回复:
user: user-1
content: 1.调用input,sort1,sort2传参的时候str不需要& 2.input函数里getchar(str[i]);又是啥？

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

回复:
user: user-1
content: 左值右值就是用来描述表达式的。  x // 这是一个表达式 *x // 这也是一个表达式

user: user-2
content: 左值是引用某个对象的表达式，就是可以放在赋值左边的东西，如：*(p+1)=7, 没有名字的变量（*(p+1)表达式一定是一个类型的对象）被赋值了，但左值并不一定能被赋值，因为左值可以引用某个常量。 所有的引用都是左值。  右值是表达式的值（不是引用），可以放在赋值右面。  所有的左值都可以是右值，反之不成立  int i, j, *p;  i = 7; // Correct. A variable name, i, is an l-value.  7 = i; // ERROR. A constant, 7, is an r-value.  j * 4 = 7; // ERROR. The expression j * 4 yields an r-value.  *p = i; // A dereferenced pointer is an l-value.  const int ci = 7; // Declare a const variable.  ci = 9; // ERROR. ci is a nonmodifiable l-value

user: user-3
content: When a function's return type is lvalue reference, the function call expression becomes an lvalue expression:    #include <iostream> #include <string>   char& char_number(std::string& s, std::size_t n) {     return s.at(n); // string::at() returns a reference to char }   int main() {     std::string str = "Test";     char_number(str, 1) = 'a'; // the function call is lvalue, can be assigned to     std::cout << str << '\n'; }  http://en.cppreference.com/w/cpp/language/reference

user: user-0
content: 引用 1 楼 adlay 的回复:比如 int *x = new int; *x 就是一个表达式,  可以赋值 *x = 10, *x 就是左值 请问*x叫什么表达式？取地址内容表达式？  3楼那个复制错了

user: user-0
content: 引用 1 楼 adlay 的回复:比如 int *x = new int; *x 就是一个表达式,  可以赋值 *x = 10, *x 就是左值 C的左值用是指用于标志一个特定的数据对象的名称或表达式，能否举个表达式的例子？

user: user-0
content: 请问*x叫什么表达式？取地址内容表达式？

user: user-4
content: 比如 int *x = new int; *x 就是一个表达式,  可以赋值 *x = 10, *x 就是左值