Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请前辈指点，为什么老是编译错误？

回复:
user: user-0
content: 不好意思，我没学过，不知道是C语言还是C#，感谢您的回复，我去试一下，可行的话，回来给分，谢谢

user: user-1
content: 你的程序在vs2013上面是编译成功的！ 还有，你的问题是C#语言，应该发在.NET技术区的C#板块。

user: user-0
content: 我已经搞定了，感谢 Falleyes 的回答

user: user-0
content: 我装了VS2010编译还是失败啊 用了SharpDevelop也是编译失败

user: user-0
content: 哪位可以加我QQ帮我处理一下啊？处理好马上送分啊,谢谢啦 29010889

user: user-2
content: 这段 C# 代码没什么问题啊 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;  namespace Lrc_Trimer {     class Program     {         static void Main(string[] args)         {             Console.WriteLine("---------\n本程序可以将*.lrc中的时间标签去除，并批量装换为*.txt\nDidier制作\n----------\n任意键继续");             Console.ReadKey();             //一些提示语句             FileStream Read = null;             FileStream Write = null;             bool ok = false ;             int x = 0;             //定义一些变量和类             string[] filenames = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.lrc");             if (filenames == null)                  return;             //以字符串数组的形式获取所有lrc文件名，要是没有就直接退出             foreach (string i in filenames)             //用foreach语句对每个文件进行处理             {                    Read = File.Open(i, FileMode.Open);                 Write = File.Open (i.Replace("lrc","txt"),FileMode.OpenOrCreate );                 //创建.txt，并初始化读写流                while (x > -1)                //"粗略"判断是否读到了结尾                {                     x = Read.ReadByte();                     //读一个字节                     switch (x)                      {                         case 91:                             ok = false;                             //读到“[”，意味着时间标志开始，关闭bool值ok。隐含着跳过这个字节                             break;                         case 93:                             ok = true;                             //读到“]”，意味着时间标志结束，打开bool值ok。隐含着跳过这个字节                             break;                         default :                             if (ok == true & x != -1)                             {                                 Write.WriteByte(Convert.ToByte(x));                              }                             //通过写入bool值ok来判断是否要将字节转存到txt文件。是用x!=-1精确判断是否读到了末尾                             break;                     }                }                x = 0;                //重要！清除x=-1，否则会出乱子             }             //foreach这样的神句帮助我们遍历并处理所有lrc文件         }     } }
user-0 提问: 关于数组和if循环函数的一个小问题

回复:
user: user-0
content: 谢谢你的帮助，很全面的解释了它，这个问题我也想到了，但是如果只是单个的这个程序，改成全局变量是简单的。如果说是在一个更大的程序，比如一个已经成型的管理系统里面，那么这个全局变量的定义是不是应该放在主函数的下面，这个函数的外面？

user: user-1
content: 不是你说的    ”感觉要么是之前注册的用户名和密码根本没有存到数组里，那个比较没意义，要么就是判断的方式有问题。“      这种问题，而是你一些基础知识没有打扎实：   原因就在 你没有注意那些 char 变量的作用范围是哪里，char在xuanze（）这个函数内部定义的，也就是说他的变量的作用域是函数内部，详细解释一下：    在你选择了1后，写入用户名和密码后，它就将这些信息全部存入char这些数组变量中，然后会怎样，你又调用了xuanze()这个函数，相当于你在函数内部递归了xuanze()函数，同样它会在这个嵌套的xuanze()内部在定义一次char 数组这些变量，和外面那个xuanze（）函数定义的是同名char变量，这些都是局部变量，但是外层的char 数组已经在注册过程中已经赋值，但是嵌套的xuanze()函数内部重新定义的char 数组变量中用户名和密码根本就没赋值，相当于在嵌套xuanze()内部你只完成了登录过程，完成的是s1,s2登录过程中的赋值，然后他会将这些信息和在嵌套的xuanze()函数内部定义的yhmtmp和tmp1作比较，但是嵌套xuanze()函数的yhmtmp个tmp1根本没有赋值，肯定会用户名和密码不匹配的情况： 解决方法： 把那些局部变量char数组和 int全部定义为全局变量，放在函数外部定义，就能通过了，我试过了，能得到你要的结果。

user: user-2
content: 要善于调试。

user: user-1
content: 一般这样的变量可以现在xxxx.h头文件用extern  char   xxx[n]   先声明在头文件，然后需要在xxx.cpp中使用时，直接定义使用；
user-0 提问: 关于指针数组

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:if(strcmp(a[i],a[j])==1)             {                 temp=a[j];                 a[j]=a[i];             } 一针见血，我忘了   a[j]=a[i];把它换回去了

user: user-1
content: 不是指针问题 是你排序算法问题 不难看出你想用冒泡排序吧#include <stdio.h> #include<stdlib.h> #include<string.h> void sort(char  *a[4],int n) {     int i,j,flag;     char * temp;     for(i=0;i<n-1;i++)     { 		temp=a[i]; 		flag=i;         for(j=i+1;j<n;j++)         {             if(strcmp(temp,a[j])>0)             {                 temp=a[j]; 				flag=j;             }                      } 		if(i!=flag) 		{ 			temp=a[i]; 			a[i]=a[flag]; 			a[flag]=temp; 		}     } }  int main() {     char * str[4]={"sfdsf","reef","erscsd","axad"};      sort(str,4);      int i;     for(i=0;i<4;i++)     {         printf("%s\n",str[i]);     } 	getchar(); 	getchar();     return 0; }

user: user-2
content: if(strcmp(a[i],a[j])==1)             {                 temp=a[j];                 a[j]=a[i];             }
user-0 提问: none,一个简单的内核

回复:
user: user-1
content: 楼主强大啊

user: user-2
content: 弓虽丁页

user: user-3
content: 求联系方式，新手求交流

user: user-4
content: 赞个

user: user-5
content: 弓虽丁页！

user: user-6
content: 人才啊

user: user-7

user: user-8

user: user-9
content: 必须顶一个
user-0 提问: 本人大二，请前辈们给指条明路。

回复:
user: user-1
content: 引用 23 楼 u012941377 的回复:引用 9 楼 ForestDB 的回复:都开了哪些课？开了C语言 数电 模电 数据结构 计算机组成原理 微机原理 离散数学 数电、模电，，，软件工程学这些。。。。。。 哪个方向好要根据你自身情况和你的兴趣爱好来判断，你觉得哪个好理解，学得好，就往哪个方向去钻研它。

user: user-2
content: 引用 23 楼 u012941377 的回复:引用 9 楼 ForestDB 的回复:都开了哪些课？开了C语言 数电 模电 数据结构 计算机组成原理 微机原理 离散数学 都很基础也很重要的课。

user: user-3
content: 引用 3 楼 u010486937 的回复:研究C语言以后可以开发Linux应用，嵌入式，操作系统内核 学习C++，windows编程，以后写游戏或者开发大型项目 学习win32汇编，搞破解，逆向工程 学习Java，搞各种安卓开发 web,数据库什么的，全在自己的个人兴趣了 还有，编程无所谓最好的方向，这个世界在不断的改变，做自己最感兴趣的东西就是了   说得漂亮！给赞！

user: user-4
content: 首先对多个方向都需要了解一下，然后分析一下，根据自己的兴趣和爱好，以及对这个方向的认识。 其实，主要是楼主对各个方向都不很了解吧，才有如此的彷徨和不知所措吧。

user: user-5
content: 引用 楼主 u012941377 的回复:我今年大二，专业是软件工程。 总感觉我们开的课程很多，我想往一个方向去钻研它，请前辈们帮忙指点下，那个方向比较好点，我不怕辛苦，不怕麻烦。+1

user: user-6
content: 都是基础课，学学总是有好处的。关键是自己要多动手，多看书，课堂上那点东西只是引子。

user: user-0
content: 引用 16 楼 IT_dreamer1993 的回复:和lz一样也是大二，学的也是se，我们大三分方向，lz学校也应该分吧我们老师说不分的

user: user-0
content: 引用 9 楼 ForestDB 的回复:都开了哪些课？开了C语言 数电 模电 数据结构 计算机组成原理 微机原理 离散数学

user: user-7
content: 都说的什么啊，大二不是泡妹子的时候么？学个毛的C++啊，完全是浪费青春

user: user-8
content: 引用 3 楼 u010486937 的回复:研究C语言以后可以开发Linux应用，嵌入式，操作系统内核 学习C++，windows编程，以后写游戏或者开发大型项目 学习win32汇编，搞破解，逆向工程 学习Java，搞各种安卓开发 web,数据库什么的，全在自己的个人兴趣了 还有，编程无所谓最好的方向，这个世界在不断的改变，做自己最感兴趣的东西就是了冥币收入多些

user: user-9
content: 引用 24 楼 u012941377 的回复:引用 16 楼 IT_dreamer1993 的回复:和lz一样也是大二，学的也是se，我们大三分方向，lz学校也应该分吧我们老师说不分的 那就看lz你对那一块感兴趣，是底层还是上层。。。

user: user-10
content: 努力把基础知识学好，跟楼主一起努力！

user: user-11
content: 引用 1 楼 shimachao 的回复:学好专业课，专业基础课。大二大三的课程都很有用。没有基础，以后想飞也飞不起来。  楼主说的很对，我深有体会

user: user-12
content: 前期基础一定要打扎实，程序设计，算法数据结构、操作系统数据库、网络之类，以后无论干什么这些都是有帮助的

user: user-13
content: 才大二的话我觉得应该多接触些东西，课虽然多，但是能了解的东西也就更多，大一大二是扩展知识面的时候，大二下就可以考虑选择一个方向了。学习应该是一个做“工”字的过程，先扩展知识面，然后专注一个方向深入学，最后再次扩展知识的时候会豁然开朗。选择的方向一定要是你感兴趣的，喜欢的。比如对底层比较感兴趣，可以着重C语言，数据结构，汇编，操作系统等计算机基础课程。喜欢做网页，做游戏，黑客，病毒？想到你觉得能用编程实现的让你觉得很有用的东西，关键是你要用你的技能实现什么东西。选定了就要坚持，一定要坚持，就算别人觉得没什么用，只要你有兴趣，就坚持下去

user: user-14
content: 学长您好。  我感觉可以先 努力把C学好，最主要是就是C的指针，建议看看C和指针这本书 C++很变态的，没有3 5年我感觉学不好 数据结构，算法 弄明白就好 到时候开java就好了 然后自学下Linux&Unix C语言视频 看看郝斌老师的 Linux可以看鸟叔的私房菜。

user: user-9
content: 和lz一样也是大二，学的也是se，我们大三分方向，lz学校也应该分吧

user: user-15
content: 我建议你接触一下Linux。 初学者建议玩玩Ubuntu。 你可以先在虚拟机里装一个体验一下，但最好安装在实体机里。 分出个15G的磁盘来，足够了。

user: user-16
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  注意以上内容不含“软件工程”。

user: user-17
content: 软件工程可以做管理和开发，看你能力和兴趣了
user-0 提问: 从键盘输入一个字符串，统计并输出字符串中字符、数字、和其他符号的个数，为什么数不出结果？求解决谢谢！！

回复:
user: user-1
content: char[N]，这样不对

user: user-2
content: 输入字符数组构成的字符串，不用加取地址符也可以的

user: user-3
content: 你的代码有2个问题： 1. main 函数里面，不是 scanf("%s",a) ，应该是 scanf("%s",&a)  2. fun 函数里面，不是 for(i=0;*p!='\0';i++) ，应该是 for(;*p!='\0';p++) 实际上，完全没必要搞这个 i 出来。  #include <stdio.h> #include <stdlib.h> #define N 100 void fun(char *p) { 	int k=0,j=0,g=0; 	for(;*p!='\0';p++) 	{ 		if((*p >= 'a' && *p <= 'z' )|| (*p >= 'A' && *p <= 'Z')) 			j++; 		else if(*p >= '0' && *p <= '9') 			k++; 		else  			g++; 	} 	printf("%d\n%d\n%d\n",j,k,g); } void main() {     	char a[N]; 	printf("输入一个字符串:\n"); 	scanf("%s",&a); 	fun(a); 	system("pause"); }
user-0 提问: 数据结构（c语言，不是c++）

回复:
user: user-1
content: 《算法精解（C语言描述）》

user: user-2
content: http://bbs.csdn.net/topics/390623576  直接找人要答案，而且相对消耗时间，一般不会有人直接给答案的

user: user-0
content: 就是《数据结构》严蔚敏  的课程设计

user: user-3
content: 《数据结构》 严蔚敏
user-0 提问: c语言写的一个分割优酷MP4文件程序

回复:
user: user-0
content: 还有版主关注。。哈哈，那就有空给大家写写原理吧！！谢谢大家的关注。。。太荣幸了！

user: user-0
content: 下次吧。下次有空了，写一篇文章简单的解释一下。。。。

user: user-1
content: 分享原理，当然能分析代码最好

user: user-2
content: 讲一下原理，分享一下。

user: user-0
content: 源代码是公司的，不能给外人看的，呵呵，可执行程序可以发给你试试

user: user-3
content: 求源代码！我想看看

user: user-4
content: 楼主辛苦了，下次写个格式工厂
user-0 提问: printf格式修改符

回复:
user: user-1
content: 想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495  将复杂数据结构的整个内容在处理它的每一步使用一小段代码按自己很容易理解的格式输出，非常有助于调试！或者可以说是“基础设施”：  为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  理解和讨论之前请先学会如何观察！

user: user-1
content: 有这工夫还不如看看printf格式修改符处理对应的源代码（下列文件的随便哪个都行）： C:\Microsoft SDK\src\crt\output.c C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\output.c C:\MSVC20\SAMPLES\win32\output\OUTPUT.C C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\OUTPUT.C C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\output.c C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\output.c C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c
user-0 提问: linux不就是unix的一种吗？为什么招聘的时候，要招unix程序员呢？

回复:
user: user-1
content: 学习了！！！

user: user-2
content: 挂节点是个符号链接文件，linux 文件系统通过挂节点，把所有硬盘软盘等外部存储起，以及硬盘分区，组合成一个大的文件系统。 每个硬盘和硬盘分区，软盘，光驱是一个个子文件系统。 挂节点，(不一定就是一个完整的文件系统??)，他只是一个符号链接。 但是所有子文件系统，都是通过挂节点，挂接到主文件系统上的,......除了根文件系统/。  linux识别硬盘，硬盘分区，可以通过设备文件来识别。 有对应的目录，，，也许还有对应的配置文件。。 由于没用过linux，具体例子举不出来

user: user-3
content: 楼主，可以透露下Linux程序员，的薪水么？我正在看鸟哥的Linux私房菜，貌似可以回答了以上问题！  就是不知道，学Linux有木有钱途而已！

user: user-4
content: mount可以随便mount,  想一下u盘挂载就知道了，可以手动挂在任何一个普通文件夹下，但是数据还是存储在u 盘中的。  我的理解是文件不能拆分到不同分区中。

user: user-5
content: 1. 要知道一个目录下可以有多个目录，我的是 其中的一个父目录，可以挂在到某个分区上，  比如 楼上有人说的，将某个目录挂在到可移动盘（u盘上）。  一旦这个父目录挂在后，那么是否该父目录的所有子目录及其数据都 是这个分区即 例子上的可移动盘 联系起来  ，即所谓的mount  。   很明显则不是，比如： / 挂在分区1， /home挂在分区2.  所以说明，子目录是可以挂在另一个分区的。  为此结论： 父目录在分区1， 不代表子目录和父目录在同一个分区。  那么数据呢？    数据应该是只能在同一个分区。   再比如， 一个目录有多个文件，有的文件可以挂在到分区1上，有的由于分区大小，  那么就可能放到其他分区上去。  文件是否可以挂在？ 没有资料显示呼？

user: user-6
content: 确切的说，linux是类unix

user: user-0
content: 引用 8 楼 luotuo44 的回复:Linux并不是Unix的一种。Linux的实现源码和Unix的源码没有什么关系。之所以很多人认为Linux是Unix的一种，可能是觉得C程序很容易在Linux和Unix之间移植，或者说Linux和Unix提供了很多相同的系统API。其实，这是因为Linux和Unix都遵循了POSIX标准。所以他们有很多相同的系统API，并且很容易移植。这个道理就像遵循C标准库写出来的代码，很容易在各个编译器和平台上编译。  6 楼问题

user: user-7
content: Linux并不是Unix的一种。Linux的实现源码和Unix的源码没有什么关系。之所以很多人认为Linux是Unix的一种，可能是觉得C程序很容易在Linux和Unix之间移植，或者说Linux和Unix提供了很多相同的系统API。其实，这是因为Linux和Unix都遵循了POSIX标准。所以他们有很多相同的系统API，并且很容易移植。这个道理就像遵循C标准库写出来的代码，很容易在各个编译器和平台上编译。

user: user-8
content: MBR，512字节，0.5KB

user: user-0
content: 引用 6 楼 caddor2011 的回复:[quote=引用 2 楼 FightForProgrammer 的回复:] 正在看《鸟哥的linux私房菜》，推荐lz去看。你的问题都能解决 引用 4 楼 zmlovelx 的回复:mount可以随便mount,  想一下u盘挂载就知道了，可以手动挂在任何一个普通文件夹下，但是数据还是存储在u 盘中的。  我的理解是文件不能拆分到不同分区中。  正在看鸟哥的书，正是看了它的书，有了疑惑，  1. 要知道一个目录下可以有多个目录，我的是 其中的一个父目录，可以挂在到某个分区上，  比如 楼上有人说的，将某个目录挂在到可移动盘（u盘上）。  一旦这个父目录挂在后，那么是否该父目录的所有子目录及其数据都 是这个分区即 例子上的可移动盘 联系起来  ，即所谓的mount  。  注意 ，关键字“所有“  2. mbr512个字节？是怎么得出的，我的理解是446+64 == 510 ,帖子里有个错误，不是500，是510才对。主分区的分区信息，会不会存在  对应的分区里？   因为鸟哥提到， 逻辑分区的信息存在扩展分区里，所以一旦扩展分区破坏，所以所有逻辑分区都挂了。  于是，我就想：那么 主分区的分区信息，是否也存在 mbr 即 主分区本身里。  当然对于问题2. 可能意义不大。  我最想知道的是第一点。  我一直无法正确的理解 ，挂在这个概念。    [/quote]  顶起来。

user: user-0
content: 引用 2 楼 FightForProgrammer 的回复:正在看《鸟哥的linux私房菜》，推荐lz去看。你的问题都能解决 引用 4 楼 zmlovelx 的回复:mount可以随便mount,  想一下u盘挂载就知道了，可以手动挂在任何一个普通文件夹下，但是数据还是存储在u 盘中的。  我的理解是文件不能拆分到不同分区中。  正在看鸟哥的书，正是看了它的书，有了疑惑，  1. 要知道一个目录下可以有多个目录，我的是 其中的一个父目录，可以挂在到某个分区上，  比如 楼上有人说的，将某个目录挂在到可移动盘（u盘上）。  一旦这个父目录挂在后，那么是否该父目录的所有子目录及其数据都 是这个分区即 例子上的可移动盘 联系起来  ，即所谓的mount  。  注意 ，关键字“所有“  2. mbr512个字节？是怎么得出的，我的理解是446+64 == 510 ,帖子里有个错误，不是500，是510才对。主分区的分区信息，会不会存在  对应的分区里？   因为鸟哥提到， 逻辑分区的信息存在扩展分区里，所以一旦扩展分区破坏，所以所有逻辑分区都挂了。  于是，我就想：那么 主分区的分区信息，是否也存在 mbr 即 主分区本身里。  当然对于问题2. 可能意义不大。  我最想知道的是第一点。  我一直无法正确的理解 ，挂在这个概念。

user: user-9
content: linux从广义上说可以算1种unix，但unix不只是linux，所以可能想找会unix中不是linux部分的。

user: user-10
content: 正在看《鸟哥的linux私房菜》，推荐lz去看。你的问题都能解决

user: user-11
content: linux不是unix的变种，linux没有参照任何unix的源代码，但是说linux是unix like的一点不为过。linux基本使用了和unix一致的系统调用接口，这使得为unix编写的程序，只需要重新编译就可以用于linux。  如果是MBR方式的磁盘分区，那么第一个扇区保存着分区信息，MBR最多支持4个分区，包括主分区和扩展分区。而逻辑驱动器的分区信息则不在这里。  同一个目录下可以有不同的挂载点，但是一个文件应该不能拆分。
user-0 提问: 一个段诡异的C语言代码

回复:
user: user-1
content: 学好C真的不容易的，不知道哪里就会出错

user: user-2
content: 跑了跑，确实有这样的问题~~  看到楼上有的回复说没问题，有些有问题。 是由于编译器不同的原因吧？ 想知道是用的什么编译器。

user: user-0
content: 引用 13 楼 yuanhong2910 的回复:这个地方其实是有另一个bug的 unsigned short a,b;   // a, b各占两个字节  scanf("%d%d",&a,&b);  //scanf 是按4个字节去读的，会把未使用的内存写爆 在#include<stdio.h>下面加一个int m；后就没问题了，代码如下： #include<stdio.h> int m; int n; unsigned short a,b; int main() { scanf("%d",&n); for(int k=0;k<n;k++) { scanf("%d%d",&a,&b); printf("fg\n");  } return 0; } 另外，没改之前的那段代码，在scanf执行之后n的值变为0了，所以只循环一次。只是不知道n是如何变为0的。我加个int m；是为了改变编译器分配给n的地址，果然如我所料，这个新的地址不会因为scanf语句而使这个地址内存储的n值变化。 可能是编译器的bug？也是因为我没有规范使用。不知道这个问题有没有价值，会不会太转牛角尖。

user: user-0
content: 引用 16 楼 bigwatercar 的回复:[quote=引用 13 楼 yuanhong2910 的回复:] 这个地方其实是有另一个bug的 unsigned short a,b;   // a, b各占两个字节  scanf("%d%d",&a,&b);  //scanf 是按4个字节去读的，会把未使用的内存写爆   分析的有道理， LZ的scanf格式化字符串本身也有问题，根本没办法接收两个输入。加个空格或者逗号试试[/quote]  恩恩，是这样的，改为scanf("%hu%hu",&a,&b);就对了。对scanf机制理解不够，导致出错。非常感谢以上各位赐教

user: user-0
content: 引用 1 楼 r_Jimy 的回复:表示用DEV C++，测试一切正常，不知楼主用的什么环境？ 用的VC++ 6.0,

user: user-3
content: 引用 13 楼 yuanhong2910 的回复:这个地方其实是有另一个bug的 unsigned short a,b;   // a, b各占两个字节  scanf("%d%d",&a,&b);  //scanf 是按4个字节去读的，会把未使用的内存写爆   分析的有道理， LZ的scanf格式化字符串本身也有问题，根本没办法接收两个输入。加个空格或者逗号试试

user: user-4
content: 引用 13 楼 yuanhong2910 的回复:这个地方其实是有另一个bug的 unsigned short a,b;   // a, b各占两个字节  scanf("%d%d",&a,&b);  //scanf 是按4个字节去读的，会把未使用的内存写爆  确实是这样 这是个坑！

user: user-5
content: 也许你可以试试volatle int n;

user: user-6
content: 关于scanf，楼主可以看看这个——http://blog.csdn.net/u012421456?viewmode=contents

user: user-7
content: 引用 19 楼 u010505007 的回复:[quote=引用 13 楼 yuanhong2910 的回复:] 这个地方其实是有另一个bug的 unsigned short a,b;   // a, b各占两个字节  scanf("%d%d",&a,&b);  //scanf 是按4个字节去读的，会把未使用的内存写爆 在#include<stdio.h>下面加一个int m；后就没问题了，代码如下： #include<stdio.h> int m; int n; unsigned short a,b; int main() { scanf("%d",&n); for(int k=0;k<n;k++) { scanf("%d%d",&a,&b); printf("fg\n");  } return 0; } 另外，没改之前的那段代码，在scanf执行之后n的值变为0了，所以只循环一次。只是不知道n是如何变为0的。我加个int m；是为了改变编译器分配给n的地址，果然如我所料，这个新的地址不会因为scanf语句而使这个地址内存储的n值变化。 可能是编译器的bug？也是因为我没有规范使用。不知道这个问题有没有价值，会不会太转牛角尖。[/quote] 挺简单的，调试的时候把a, b, n的地址输出出来就知道了，很容易分析。三种方法： 1. 直接%p输出&a, &b, &n地址。 2. 调试时反汇编直接看地址。 3. 在&n的地址设置 内存断点，停止时看怎么改的。

user: user-8
content: 表示用VS2010也没有问题，不知道楼主是出了什么问题

user: user-9
content: 请检查scanf的返回值!

user: user-7
content: 这个地方其实是有另一个bug的 unsigned short a,b;   // a, b各占两个字节  scanf("%d%d",&a,&b);  //scanf 是按4个字节去读的，会把未使用的内存写爆

user: user-10
content: 应该是输入的问题吧，我先是直接跑，也是能循环一次就结束了，不管你输入n是多少，但是我在输入n之后加了句printf，然后在printf那儿打了个断点，就正常了。。 会不会是缓存的问题？但是输入的时候回车了啊。。。。。

user: user-11
content: 简单的问题 目测楼主scanf("%d%d",&a,&b);出入的是如1,2所以你的n不论为多少都是一次，如果你按照scanf的格式12输入，是没问题的；如果想输入成1，2可以改为scanf("%d,%d",&a,&b);

user: user-12
content: clean + rebuild

user: user-13
content: 你怎么输入的？看着没什么问题

user: user-14
content: 表示用DEV C++，测试一切正常，不知楼主用的什么环境？

user: user-15
content: scanf("%d%d",&a,&b);

user: user-6
content: 楼主什么编译器啊
user-0 提问: 一个关于结构体的问题

回复:
user: user-1
content: char*只是一个字符指针，他可以指向一个内存空间，如果是向他指向的空间录入（写入）的话就要保证这个空间是可写的（指向一个字符数组就可以，指向一个字符串常量值就不可以写，只能读取）

user: user-2
content: 引用 2 楼 u010515100 的回复:[quote=引用 1 楼 max_min_ 的回复:] 名字没有分配足够的内存空间吧！ malloc一下 或者用栈空间 char last_name[20]; 内存好像是没分配，主要我是看书这样做的。 是否代表书有错误？ [/quote]  书上没有问题，书上这样是把常量字符串"Busheker"的地址赋值给last_name了， 也就是说让last_name这个指针指向了"Busheker"，是有地址指向了

user: user-3
content: last_name没分配内存啊。可以malloc一下或者使用字符数组。

user: user-4
content: 由于未初始化, 可能是内存访问越界导致.

user: user-0
content: 引用 1 楼 max_min_ 的回复:名字没有分配足够的内存空间吧！ malloc一下 或者用栈空间 char last_name[20]; 内存好像是没分配，主要我是看书这样做的。 是否代表书有错误？

user: user-2
content: 名字没有分配足够的内存空间吧！ malloc一下 或者用栈空间 char last_name[20];
user-0 提问: 【新手求教】字符数组

回复:
user: user-1
content: 引用 3 楼 moyac 的回复:……，第二个问题，是我自己想错了，恩，知道怎么解决了 OK

user: user-1
content: 只有一个if语句啊。 你说的是，不明白这里？  if(c == '\n') {     s[i] = '\n';     i ++; }  因为，上面跳出循环的情况，有一种是：c!='\n'，所以下面这样处理完全没有问题啊。 如果不明白，可以跟踪一下就理解了。 引用 2 楼 moyac 的回复:int getline(char s[], int lim){ int c, i ; for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i ++){ s[i] = c; } if(c == '\n'){ s[i] = '\n'; i ++; } s[i] = '\0'; return i ; } 这里面不是用了两句if语句嘛，不太能理解这一小部分的代码

user: user-1
content: 为什么copy函数里的参数是longest而不是写longest[]，不是数组吗？ ----------------- 因为形参里面是longest []，所以传参的时候就直接传数组名。 数组名可以代表数组的首地址，数组名代表这个数组。不用在后面加上[]。 如果学过java里面的数组，这里就比较好理解： java里面的数组这样声明： int[] a;就表示 a是一个数组。反正记住，使用时表示一个数组，用数组名就可以了。不用后面带中括号。带中括号的情况都是下标，表示数组中的一个元素的用法。  第二个问，没有看明白你想问什么。
user-0 提问: [新人求助]关于Vistual studio编译器的问题！！！！！

回复:
user: user-1
content: 表示学了一个月， 还没有遇到过！！！！！！！！！！！

user: user-2
content: 第一，上一次的exe运行还没结束，可以从任务管理器中检查； 第二，开了360之类的东西。

user: user-3
content: 原因可能比较复杂，可能是你的电脑有360或是别的杀毒软件，,360和一些杀毒软件的有些设置会防止修改exe文件。这样编译的时候就会有问题了。 还有一个原因就是有病毒在修改这个exe文件，这样，你编译的时候就无法修改这一个文件了。 所以，检查一下，看是否是这些原因吧。 引用 15 楼 Splendid8023 的回复:[quote=引用 14 楼 zjq9931 的回复:] [quote=引用 7 楼 Splendid8023 的回复:] [quote=引用 1 楼 zjq9931 的回复:] 根据提示，看样子是你运行后，没有关闭。然后改了源码，再次编译。造成的。 关闭运行的结果窗口，在编译就可以了。求助啊[/quote] 删除这个工程的DEBUG文件夹。再试试。[/quote]删除是有用，但不能一直这么弄啊？有其他办法吗？[/quote]

user: user-4
content: 引用 12 楼 ACMtop 的回复:VC 6 高级开发者都足够用了【不是我说的】，不用赶时髦  vc6的stl是硬伤

user: user-3
content: 引用 7 楼 Splendid8023 的回复:[quote=引用 1 楼 zjq9931 的回复:] 根据提示，看样子是你运行后，没有关闭。然后改了源码，再次编译。造成的。 关闭运行的结果窗口，在编译就可以了。求助啊[/quote] 删除这个工程的DEBUG文件夹。再试试。

user: user-5
content: 可能是没有关闭。打开资源管理器，看helloworld进程还在不在运行，在的话就关闭它。

user: user-0
content: 引用 14 楼 zjq9931 的回复:[quote=引用 7 楼 Splendid8023 的回复:] [quote=引用 1 楼 zjq9931 的回复:] 根据提示，看样子是你运行后，没有关闭。然后改了源码，再次编译。造成的。 关闭运行的结果窗口，在编译就可以了。求助啊[/quote] 删除这个工程的DEBUG文件夹。再试试。[/quote]删除是有用，但不能一直这么弄啊？有其他办法吗？

user: user-6
content: VC 6 高级开发者都足够用了【不是我说的】，不用赶时髦

user: user-0
content: 引用 10 楼 q191201771 的回复:任务管理器看下还有没有hello world进程吧。没有，我都是直接把x掉的，为什么编译不起来啊，但是把程序放在那里不动，过几分钟就能编译成功了，求教啊！

user: user-7
content: 任务管理器看下还有没有hello world进程吧。

user: user-8
content: 不清楚，楼主你要不试一下新建一个工程项目，把代码再敲进去试试？还不行就不清楚了，可以尝试着修复一下VS

user: user-0
content: 引用 5 楼 u012421456 的回复:楼上说得对，按说楼主该可以成功的， 看来楼主是初学者，编译器也不太熟，唉，现在的软件越来越复杂，新手入门操作起来也有些问题，建议楼主如果有时间，可以看些讲的详细的视频，还是不行啊，会不会是电脑系统的问题啊

user: user-0
content: 引用 1 楼 zjq9931 的回复:根据提示，看样子是你运行后，没有关闭。然后改了源码，再次编译。造成的。 关闭运行的结果窗口，在编译就可以了。求助啊

user: user-0
content: 真的关掉了，还是这样子，但是把程序放在那边不碰它，过几分钟就能编译成功了，为什么啊？

user: user-8
content: 楼上说得对，按说楼主该可以成功的， 看来楼主是初学者，编译器也不太熟，唉，现在的软件越来越复杂，新手入门操作起来也有些问题，建议楼主如果有时间，可以看些讲的详细的视频，

user: user-9
content: HelloWorld.exe 没有退出。

user: user-0
content: 关闭了，还是没用啊

user: user-10
content: cmd窗口没关，关了再编译就行了

user: user-3
content: 根据提示，看样子是你运行后，没有关闭。然后改了源码，再次编译。造成的。 关闭运行的结果窗口，在编译就可以了。
user-0 提问: 为什么回显的汉字不对，或者说getch（）两次怎么得到的是同一个值。。。。

回复:
user: user-1
content: 引用 2 楼 u012834851 的回复:谢谢楼上，我自己的程序写的太没逻辑了  放在这上面叫我自己也懒得看   后来查了下好像是我编译器没装好  。看了楼上的程序很有收获。 赵4出品， 必属精品！

user: user-0
content: 谢谢楼上，我自己的程序写的太没逻辑了  放在这上面叫我自己也懒得看   后来查了下好像是我编译器没装好  。看了楼上的程序很有收获。

user: user-1
content: 仅供参考#include <conio.h> #include <stdio.h> char pw[40]; int i,ch; FILE *f; void main() {     cprintf("\r\nPassword:");     i=0;pw[i]=0;     while (1) {         ch=getch();         if (ch==13 || i>=39) break;         switch (ch) {         case 27:             cprintf("\rPassword: %40s"," ");             cprintf("\rPassword: ");             i=0;pw[i]=0;             break;         case 8:             if (i>0) {                 i--;                 pw[i]=0;                 cprintf("\b \b");             }             break;         default:             pw[i]=ch;             i++;             pw[i]=0;             cprintf("*");             break;         }     }     cprintf("\r\n");     f=fopen("password.txt","w");     fprintf(f,"%s\n",pw);     fclose(f); }
user-0 提问: 关于C-Free编译问题

回复:
user: user-1
content: 没看懂，运行后当然显示计算结果，编译的时候出问题了吗？上图

user: user-2

user: user-3
content: 显示什么，我怎么没读懂，是我的理解能力太差还是。。。

user: user-4
content: 你的问题是？？

user: user-5

user: user-6
content: 运行后就显示什么啊？这个程序实在是，，，  这是我的C-Free结果——

user: user-7
content: 换种编译器试试

user: user-8
content: int main() {int a = 15,b = 37; printf("%d",a+b); return 0;}
user-0 提问: 请问如何在windows下模拟linux里面手动编译

回复:
user: user-0
content: 引用 8 楼 ForestDB 的回复:cl.exe /output test main.c shell中的()，是在子shell中执行命令的意思。 非常感谢！！！

user: user-1
content: cl.exe /output test main.c shell中的()，是在子shell中执行命令的意思。

user: user-0
content: 引用 2 楼 zmlovelx 的回复:cygwin也可以 或者直接用vc下的命令行，如cl.exe == 谢谢了，大哥  在请问一下下面这两条命令有什么区别，为什么执行效果不同？ cpp1.exe | cpp2.exe < data.txt > output.txt (cpp1.exe | cpp2.exe) < data.txt > output.txt  我想要的结果是cpp1和cpp2两个程序连在一起，然后data.txt作为cpp1的输入, output.txt作为cpp2的输出。

user: user-2
content: 我觉得最好安装一个vmware，然后在里面装rhel。然后在windows下用xshell去连接。 这样最正式

user: user-3
content: 还可以参考一下MSDN里面 vcbuild msbuild 相关内容。

user: user-4
content: 1、cygwin是在windows下模拟linux的一套软件，可以熟悉linux的人很快上手windows上的开发  2、直接基于vc也可以，建立源文件，可以直接编译，也可以建立makefile。在vc++的命令行中，用cl是编译，用link是链接，用nmake是针对makefile进行编译链接

user: user-5
content: 用MinGW可以，得配置一下环境变量

user: user-6
content: cygwin也可以 或者直接用vc下的命令行，如cl.exe ==

user: user-7
content: 可以自己装一个MinGW
user-0 提问: 类型 ：STRING	大小：可变	长度最大：255	 字符串类型，第一字节指明长度，其后是字符串内容    

回复:
user: user-0
content: 引用 9 楼 u011362822 的回复: typedef struct {     unsigned char length;     char* data; }STRING;   没注意楼主说的长度最大255，已改正； 在我的项目中，我用到了很多这种结构体，很实用； 嗯，谢谢啦！

user: user-1
content: typedef struct {     unsigned char length;     char* data; }STRING;   没注意楼主说的长度最大255，已改正； 在我的项目中，我用到了很多这种结构体，很实用；

user: user-1
content: typedef struct {     int length;     char* data; }STRING;   这样就行了

user: user-2
content: 引用 4 楼 twj5817 的回复:typedef struct {    char  length;    char* m_str; } STRING; 这样写吧，然后需要用到的时候就指定length，动态申请m_str的空间吧，但是这个最大长度应该就不止255了吧？支持此楼做法。不过感觉把长度改成无符号char会好一些（范围0~255），然后第二个元素就是一个字符指针，可以根据第一个信息动态开辟相应长度的空间（注意结束符还需要额外的一个字节）

user: user-3
content: http://baike.sogou.com/v8548258.htm

user: user-4
content: 引用 1 楼 starytx 的回复:定义成char *就可以了，不用指定长度，只要你确定好结束符'\0'就可以了 呵呵

user: user-0
content: typedef struct {    char  length;    char* m_str; } STRING; 这样写吧，然后需要用到的时候就指定length，动态申请m_str的空间吧，但是这个最大长度应该就不止255了吧？

user: user-5
content: typedef struct {    USHORT length;    char* m_str; } STRING;

user: user-0
content: 可以写出来看看吗？因为题目要求这个要第一字节制定长度，想了半天都不知道要怎么弄才好了

user: user-2
content: 定义成char *就可以了，不用指定长度，只要你确定好结束符'\0'就可以了
user-0 提问: 求助

回复:
user: user-1
content: 这个和你的要求差不多，自己改改吧，不多动手，很难进步 http://blog.csdn.net/u012421456/article/details/26170519

user: user-2
content: http://zhidao.baidu.com/link?url=0UHlyzdAtf98axxSJnL14xypMzeDvajpQ1LV_Lv3PoouCMKppagTNhAyXpKpKNfqrU55M6V4--DjwEGQpp0tZK 这上面只是给了你一个思路，其实有两种方法：1、二维数组，a[6][N]；2、用结构体数组，结构体表示一个学生的六门成绩，然后用数组表示所有学生。先输入，再进行排序就OK了，希望对你有所帮助。

user: user-3
content: http://zhidao.baidu.com/link?url=0UHlyzdAtf98axxSJnL14xypMzeDvajpQ1LV_Lv3PoouCMKppagTNhAyXpKpKNfqrU55M6V4--DjwEGQpp0tZK

user: user-4
content: 你应该写出你的程序，然后在这里改错。不应该甚么都没有。
user-0 提问: 编译比链接慢，是不是因为编译的时候解析字符串的原因，才使得编译的过程比较慢呢？

回复:
user: user-1
content: 因为编译阶段，需要包含头文件，特别是当头文件特别大，特别多时，编译速度就更是受不了了。

user: user-2
content: 编译比链接慢 -> 可有明确的数据？

user: user-0
content: 没学过编译原理，果然是不懂编译器啊。

user: user-0
content: 额，这样子啊。呵呵

user: user-3
content: 总的来说编译比连接处理复杂，尤其是语法复杂的语言，又尤其是歧义语法，不能归约为LR(k)文法的语言（k为定值），比如C++。

user: user-4
content: 或者对比 gcc或g++ 与 ld 对应的源代码。

user: user-4
content: 可参考Tiny C

user: user-4
content: 编译比链接复杂，所需步骤比链接多而已。
user-0 提问: 请问,  char 如何用数字来赋值呢？

回复:
user: user-1
content: 直接给数字

user: user-2
content: 没错。char esc = 92;// 92 == '\'  引用 7 楼 starytx 的回复:直接 char cavl = 97;

user: user-3
content: 直接 char cavl = 97;

user: user-4
content: char是Java中的保留字，与别的语言不同的是，char在Java中是16位的，因为Java用的是Unicode。不过8位的ASCII码包含在Unicode中，是从0~127的。 Java中使用Unicode的原因是，Java的Applet允许全世界范围内运行，那它就需要一种可以表述人类所有语言的字符编码。Unicode。但是English，Spanish，German, French根本不需要这么表示，所以它们其实采用ASCII码会更高效。这中间就存在一个权衡问题。 因为char是16位的，采取的Unicode的编码方式，所以char就有以下的初始化方式： char c='c'; //字符，可以是汉字，因为是Unicode编码 char c=十进制数，八进制数，十六进制数等等; //可以用整数赋值 char c='\u数字'; //用字符的编码值来初始化，如：char='\0',表示结束符，它的ascll码是0，这句话的意思和 char c=0 是一个意思。

user: user-5
content: 楼主来错地方了

user: user-6
content: byte c=-100;

user: user-0
content: 顶起来啊 顶起来啊

user: user-6
content: byte c=-100;

user: user-7
content: 是不是应该发到java版块呢亲
user-0 提问: 求助，排序

回复:
user: user-1
content: http://blog.csdn.net/column/details/algorithm-easyword.html

user: user-1
content: 可以去搜一下白话快速排序，点进去那个人的博客有一个白话算法的标签，里面讲了一些排序，讲的浅显易懂。http://blog.csdn.net/column/details/algorithm-easyword.html

user: user-2
content: 碰到问题还是得尽量自己去解决。自己写的程序要一步一步的F10（但不调试），相信你会有很大进步的。

user: user-3
content: 输入多个数字  保存在数组里 这个用到了动态分配内存，可以参考这个——http://blog.csdn.net/u012421456/article/details/23374213 排序，简单的话，冒泡就行了，可以参考这个——http://blog.csdn.net/u012421456/article/details/26170519  自己不会的话，还是建议先看书或搜索，实在不行可以来论坛

user: user-4
content: 看书看书还是看书，别的没的说，给你代码对你没帮助，自己写的有问题，贴过来还行。。。。

user: user-5
content: 大一刚学C，还是在自学C？

user: user-5
content: 你这是什么情况？

user: user-6
content: 把问题分成两部分岂不是容易很多。 第一、把数据读到数组里 第二、对数组排序 相信这两个在书本上都能找到

user: user-7
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/  ＜1000个元素，冒泡排序 ＜100000个元素，qsort函数 ＜10000000个元素，放数据库中，建索引，（B+树排序） ≥10000000个元素，没用到过。

user: user-8
content: 有效率要求吗？最简单的冒泡排序总会吧， 各种排序google一下一大把，不要说你懒得 搜。
user-0 提问: 指针问题，真心给跪了

回复:
user: user-1
content: char *s="hello,china,hello,bejing!";  这样s是指向字符串常量，不能通过 *p=*q;修改里面的值，*p 是不能作为左值。  你可以定义 char s[]="hello,china,hello,bejing!"; 或者 	char *s = NULL; 	s = malloc(30); 	memcpy(s,"hello,china,hello,bejing!",strlen("hello,china,hello,bejing!")); 这样是变量，可以赋值修改了

user: user-0
content: 明白，谢谢楼上了

user: user-2
content: char *s="hello,china,hello,bejing!"; "hello,china,hello,bejing!"这个字符串存储在常量存储区， 你不能改变其中的内容的，比如删除几个字符，用堆栈 都可以。

user: user-3
content: 引用 2 楼 u013523101 的回复:[quote=引用 1 楼 xihu1364 的回复:] char *s="hello,china,hello,bejing!"; strdele(s,5,6);  。。。修改const char *  试试  char s[100] = "hello,china,hello,bejing!"; strdele(s,5,6); 是这样没错。char *s="hello,china,hello,bejing!";为什么不能那样写呢？是应为没有开辟出内存吗？[/quote]  不是说了是const char*    char *s="hello,china,hello,bejing!";  s指向全局内存区  是const char*  char s[100] = "hello,china,hello,bejing!"; s指向栈上 或者char* s= new char[100]; memcpy(s,"hello,china,hello,bejing!",strlen(...));s指向堆上

user: user-0
content: 引用 1 楼 xihu1364 的回复:char *s="hello,china,hello,bejing!"; strdele(s,5,6);  。。。修改const char *  试试  char s[100] = "hello,china,hello,bejing!"; strdele(s,5,6); 是这样没错。char *s="hello,china,hello,bejing!";为什么不能那样写呢？是应为没有开辟出内存吗？

user: user-3
content: char *s="hello,china,hello,bejing!"; strdele(s,5,6);  。。。修改const char *  试试  char s[100] = "hello,china,hello,bejing!"; strdele(s,5,6);
user-0 提问: gsoap 实现onvif 发现不了设备

回复:
user: user-1
content: 楼主，你问题解决了吗？？我也遇到类似的问题了？？？

user: user-2
content: header.wsa__Action = "http://schemas.xmlsoap.org/ws/2005/04/discovery/Prob" ; 最后面是Probe，不是Prob
user-0 提问: 懂C语言和JAVA的朋友帮帮看看，给个提示。用C语言生成SO后，为什么同样的程序，普通JAVA main可以执行正确，但是java servlet就不行呢？

回复:
user: user-0
content: 有人帮忙吗，这个问题真是太奇怪了。

user: user-0
content: 谢谢楼上，但这个帮不了我现在的程勋。

user: user-1
content: 有时不将“调用函数名字＋各参数值，进入函数后各参数值，中间变量值，退出函数前准备返回的值，返回函数到调用处后函数名字＋各参数值＋返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的，包括捕获各种异常、写日志到屏幕、单步或设断点或生成core文件、……这些方法都不行！ 写日志到文件参考下面： #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef WIN32     #include <windows.h>     #include <io.h> #else     #include <unistd.h>     #include <sys/time.h>     #include <pthread.h>     #define  CRITICAL_SECTION   pthread_mutex_t     #define  _vsnprintf         vsnprintf #endif //Log{ #define MAXLOGSIZE 20000000 #define MAXLINSIZE 16000 #include <time.h> #include <sys/timeb.h> #include <stdarg.h> char logfilename1[]="MyLog1.log"; char logfilename2[]="MyLog2.log"; static char logstr[MAXLINSIZE+1]; char datestr[16]; char timestr[16]; char mss[4]; CRITICAL_SECTION cs_log; FILE *flog; #ifdef WIN32 void Lock(CRITICAL_SECTION *l) {     EnterCriticalSection(l); } void Unlock(CRITICAL_SECTION *l) {     LeaveCriticalSection(l); } #else void Lock(CRITICAL_SECTION *l) {     pthread_mutex_lock(l); } void Unlock(CRITICAL_SECTION *l) {     pthread_mutex_unlock(l); } #endif void LogV(const char *pszFmt,va_list argp) {     struct tm *now;     struct timeb tb;      if (NULL==pszFmt||0==pszFmt[0]) return;     _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);     ftime(&tb);     now=localtime(&tb.time);     sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);     sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );     sprintf(mss,"%03d",tb.millitm);     printf("%s %s.%s %s",datestr,timestr,mss,logstr);     flog=fopen(logfilename1,"a");     if (NULL!=flog) {         fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);         if (ftell(flog)>MAXLOGSIZE) {             fclose(flog);             if (rename(logfilename1,logfilename2)) {                 remove(logfilename2);                 rename(logfilename1,logfilename2);             }         } else {             fclose(flog);         }     } } void Log(const char *pszFmt,...) {     va_list argp;      Lock(&cs_log);     va_start(argp,pszFmt);     LogV(pszFmt,argp);     va_end(argp);     Unlock(&cs_log); } //Log} int main(int argc,char * argv[]) {     int i; #ifdef WIN32     InitializeCriticalSection(&cs_log); #else     pthread_mutex_init(&cs_log,NULL); #endif     for (i=0;i<10000;i++) {         Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);     } #ifdef WIN32     DeleteCriticalSection(&cs_log); #else     pthread_mutex_destroy(&cs_log); #endif     return 0; } //1-78行添加到你带main的.c或.cpp的那个文件的最前面 //81-85行添加到你的main函数开头 //89-93行添加到你的main函数结束前 //在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中

user: user-0
content: 引用 1 楼 user-2 的回复:以下是个人推测： 自己写main调用时，是可控的。 写servlet，是要靠tomcat调用运行的，可能tomcat创建了多个对象或者多个线程。导致无法close。  可以负责任的说，只开启了一个线程。

user: user-2
content: 以下是个人推测： 自己写main调用时，是可控的。 写servlet，是要靠tomcat调用运行的，可能tomcat创建了多个对象或者多个线程。导致无法close。
user-0 提问: "你可以分配多大的内存"问题答案求证

回复:
user: user-1
content: 话说lz你确定没忘记free? 1+2+2^2+...+2^n=2^(n+1)-1

user: user-2
content: 答案是要少一些。。。那我请求的内存还有一部分我不能用？？？ 内存按分页来分配，总是要多一些才对。

user: user-3
content: 有在这里空谈的工夫，为什么不去研读Linux的malloc源代码呢？

user: user-0
content: 上面写错了,应该是这样   1 #include <stdio.h>   2 #include <stdlib.h>   3 main()   4 {   5     double MB=0;   6     while(malloc(1<<18))   7         ++MB;   8     printf("Allocated %lf MB total\n",MB/4);   9 } 我的答案是比原来小了,这样的结果正确吗?

user: user-0
content: 我的意思是我把程序改成这样之后,输出比原来大还是小?   1 #include <stdio.h>   2 #include <stdlib.h>   3 main()   4 {   5     double MB=0;   6     while(malloc(1<<20))   7         ++MB;   8     printf("Allocated %lf MB total\n",MB);   9 }

user: user-4
content: 实际分配的内存总是比你需要的多一嗲

user: user-5
content: 引用 5 楼 zhao4zhong1 的回复:有在这里空谈的工夫，为什么不去研读Linux的malloc源代码呢？ 有个蛋用。区区一个hosted impl就敢代婊C了？ 就是知道hosted impl也没什么意义。dt的实现有权自己多swap点东西过来，不预设具体环境根本就说不清什么是malloc能拿到的“内存”。

user: user-6
content: 看看内存分页的原理。
user-0 提问: c语言，子线程控制进程退出问题求教

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:可以直接退出。嗯嗯 多谢 那这样退出的话会不会有什么隐患呢

user: user-1
content: 可以直接退出。
user-0 提问: 请教#define SFR @0x0001

回复:
user: user-1
content: 请给出具体的代码，而不是你的描述。  最好给出“一般”的代码，同时也给出“不一般”的代码。

user: user-0
content: 引用 1 楼 user-1 的回复:有无调用SFR的代码，这样可以分析出是否是扩展。  有调用SFR的代码,一般就是给SFR赋值操作!!!

user: user-1
content: 有无调用SFR的代码，这样可以分析出是否是扩展。
user-0 提问: 结构体数组 使用fwrite 重新覆盖写入  编译通过，程序就执行到这一步，就错误了

回复:
user: user-1
content: fp = fopen(.....);

user: user-0
content: 这是什么意思？

user: user-0
content: 我之前 试了试  他就执行到写入文件的时候  错误  字节格式 应该没问题 我是重新生成文件  并且 我用追加 写入 就可以  老师能否 帮忙修改一下  谢谢

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-2
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。  请检查每个函数的返回值。  请设置字节对齐。  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-0
content: 折磨好几天了 一直解决不了  求大神 帮忙给看看
user-0 提问: C语言选择法排序，有时排序正确，有时错误，求大神指教

回复:
user: user-1
content: 把这一段 if(k!=i)             {                 temp=a[i];                 a[i]=a[k];                 a[k]=temp;             } 放入 for(j=i+1;j<10;j++)         {             if(a[j]<a[i])                 k=j;         }  这个循环就可以了

user: user-0
content: 多谢了,继续学习

user: user-2
content: for(j=i+1;j<10;j++) 		{ 			if(a[j]<a[k])//这儿错了把i改成k就行了，自己想想逻辑上的问题 				k=j; 		}
user-0 提问: 求教我这个删除信息的代码哪里错了

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-0
content: 好吧！我就是想问问我这个代码为什么不能删除车龄大于8的汽车信息！

user: user-2
content: 人家那是在教你提问的态度。  你这只是读取文件的代码，文件是怎样写的？是否和读操作逻辑上对应？

user: user-0
content: 你这是什么意思！不就是我的代码吗？

user: user-3
content: void cancel() {     int i,j = 0,k = 0,count=0;     int t = car[0].sum;     if((fp = fopen("car.dat","rb"))==NULL)     {         printf("不能打开文件\n");         system("pause");         return;     }     for(i = 0;i<=car[0].sum;i++)     {         fread(&car[i],sizeof(struct car_type),1,fp);         if(car[i].age>=8)         {              count = 0;              for(j=i;j<=t;j++)              {                  car[j].NUM = car[j+1].NUM;                  car[j].num=car[j+1].num;                  car[j].name=car[j+1].name;                  car[j].age=car[j+1].age;                  car[j].price=car[j+1].price;                  k++;                  k=i;                  t--;                  count++;              }              if(count!=0)              {                  car[0].sum = car[0].sum -1;              }         }   // i = k;       //  printf("%d",car[i].age);     }      save();     if(k==0)     {          printf("没有该汽车的信息！\n");          system("pause");     }     else     {             output();     }  }

user: user-4
content: for(j=i;j<t-1;j++)              {                  car[j].NUM = car[j+1].NUM;                  car[j].num=car[j+1].num;                  car[j].name=car[j+1].name;                  car[j].age=car[j+1].age;                  car[j].price=car[j+1].price;                  k++;                  k=i;                               count++;              }
user-0 提问: 用c程序写的socket下载网页，有个url的网页死活下不下来

回复:
user: user-1
content: 调试下啊，使用抓包工具

user: user-2
content: 看看内容是不是用gzip压缩了.

user: user-3
content: 同意老赵。。

user: user-4
content: 建议楼主先学会使用抓包软件比如wireshark
user-0 提问: 物理win7安装了VM9.0.如何让虚拟机上网。求大神解救

回复:
user: user-1
content: http://zhidao.baidu.com/question/477693692

user: user-1
content: 将虚拟机的网络连接设置改为桥接试试  如下图，勾选Bridged  祝你好运！

user: user-2
content: 我的物理win7，虚拟机VMware10.02，安装ubuntu 12.04和14.04都可以自动上网，不需要做任何配置。 所谓桥接或NAT，就是虚拟机里如何配置虚拟机中网络参数的方式，这两种方式对于ubuntu来说，缺省值都可以直接上网。

user: user-0
content: 引用 12 楼 sniffer12345 的回复:求解，我的虚拟机里貌似没有苹果的网卡驱动和USB驱动。求解啊，貌似就是这个版本和电脑不融合，具体操作应该是怎样呢，我是新手，求详细！！！ 虚拟机装黑苹果？没那么简单[/quote] 就是物理win7装VNware9.0

user: user-3
content: 引用 11 楼 sxcm_Gyt 的回复:求解，我的虚拟机里貌似没有苹果的网卡驱动和USB驱动。求解啊，貌似就是这个版本和电脑不融合，具体操作应该是怎样呢，我是新手，求详细！！！ 虚拟机装黑苹果？没那么简单

user: user-0
content: 求解，我的虚拟机里貌似没有苹果的网卡驱动和USB驱动。求解啊，貌似就是这个版本和电脑不融合，具体操作应该是怎样呢，我是新手，求详细！！！

user: user-4
content: 用nat方式不需要设置，你也可以用virtualbox更小巧。

user: user-5
content: 这个东西百度一搜一大把的啊

user: user-6
content: Windows 7系统Internet连接共享了没？NAT方式虚拟机自动获取IP应该可以直接上网，桥接方式IP地址设置要和宿主机同一个子网段。

user: user-7
content: 与其QQ请教，不如自己先行将VMWare的帮助文档好好读读，里面都有写。 不要说你的英文不好。

user: user-0
content: 底如何上网。。。求图求详解，是9.0.求QQ详细请教

user: user-8
content: 不是有上网配置

user: user-9
content: 虚拟机什么操作系统？ 我装的XP自动就能上网

user: user-10
content: 选桥接或者nat都能上网

user: user-11
content: 2楼正解、。。。

user: user-0
content: 最好是能QQ教我的大神。不要说NAT什么的  我能找到 但是不会设置 而且用NAT还会报错。
user-0 提问: 该选用哪种C语言软件？

回复:
user: user-1
content: vim 控

user: user-2
content: 强烈推荐Qt Creator

user: user-3
content: c-free安装和使用都挺方便的，codeblocks从网上下要下gcc有时不好找，想简单就用c-free就行了下个软件编译器就都包括了

user: user-4
content: wintc可以，但不支持中文路径

user: user-5
content: VC4, 比VC6兼容性好，内建的帮助很强大，不用联网看乱七八糟的MSDN

user: user-6
content: codeblocks吧，下载自带gcc的版本，不用自己配置，直接用。你总得相信gcc吧？

user: user-7
content: QT     功能强大

user: user-8
content: vc++6.0比较好，调试方便

user: user-9
content: 不知道你说什么问题，我猜，你要是编写c代码，windows下小的就用wintc（几兆而已），大的用vc++或者vs.linux下直接就可以写代码

user: user-10
content: VC Express Code Blocks

user: user-11
content: 要想在Windows环境下稳定运行tc.exe 建一个批处理tc.bat,内容为下面两行，放在tc.exe同目录下，再将tc.bat发送到桌面快捷方式： del tc*.swp >NUL start command /c tc.exe 如果想在IDE里面使用鼠标，还应将快捷方式属性中的快速编辑模式关掉。

user: user-12
content: 引用 7 楼 wen_eric 的回复:引用 5 楼 maomaodelaogong 的回复:现在的学生怎么这么不专业啊……选择什么C语言软件……那叫编译器……说的就是 他想说的是肯定是IDE，不单单是一个编译器。不然的话，Windows也就gcc/msvc两个主流编译器，没有什么可以纠结的了。

user: user-13
content: 引用 5 楼 maomaodelaogong 的回复:现在的学生怎么这么不专业啊……选择什么C语言软件……那叫编译器……说的就是

user: user-14
content: codeblocks

user: user-15
content: 引用 2 楼 proof1 的回复:[quote=引用 1 楼 linux_hsylar 的回复:] 装个linux 虚拟机，强烈推荐vi 编辑，用gcc编译器，还有man当助手，啥不会就找man。 跑偏了。 就是Windows下 练习 C语言源码的《数据结构》，其它因素越少越好。[/quote]+++++

user: user-16
content: 可以试试vc6

user: user-17
content: 其实 说实在的初学者用tc就挺好的！ 很小巧！

user: user-18
content: codeblocks真心不错啊

user: user-19
content: 现在的学生怎么这么不专业啊……选择什么C语言软件……那叫编译器……

user: user-20
content: 个人喜欢codeblocks
user-0 提问: define的复杂用法

回复:
user: user-1
content: ceph的dout/eout系列宏必须跟dendl宏搭配使用，这样才能保证dout_impl展开后，do...while循环闭合以及及时flush。注意dendl的定义，定义了do...while的后半部分。   define里面根本没有嵌套define，dout_impl宏展开到“std::ostream* _dout = &_dout_os;”这句就完毕了，注意这句后面没有\符号连接下一行。 后续的define是完全独立的。

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

user: user-3
content: std::ostream* _dout = &_dout_os; ================ 看到这样的代码我就怕 即便写代码的是老手 这样的代码也得小小心翼翼啊。。

user: user-4
content: 再怎么复杂，不过就是文本替换。 gcc -E查看替换后的结果即可。

user: user-2
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-5
content: 引用 3 楼 itxyy 的回复: 我也只是个新手，没往这儿看过，没有，看别人吧，不好意思啊

user: user-0
content: 引用 2 楼 u012421456 的回复:如果一般用不到，没必要深究，如果想知道，先看书和搜索 http://www.2cto.com/kf/201104/89377.html http://blog.csdn.net/djsl6071/article/details/1549539 http://www.baidu.com/s?ie=utf-8&bs=define的复杂用法&f=8&rsv_bp=1&wd=define的用法&rsv_sug3=3&rsv_sug4=114&rsv_sug1=1&rsv_sug2=0&inputT=600能不能给介绍本书，我需要把这段代码看懂

user: user-5
content: 如果一般用不到，没必要深究，如果想知道，先看书和搜索 http://www.2cto.com/kf/201104/89377.html http://blog.csdn.net/djsl6071/article/details/1549539 http://www.baidu.com/s?ie=utf-8&bs=define的复杂用法&f=8&rsv_bp=1&wd=define的用法&rsv_sug3=3&rsv_sug4=114&rsv_sug1=1&rsv_sug2=0&inputT=600

user: user-6
content: gcc -E
user-0 提问: 关于malloc和free的问题

回复:
user: user-1
content: 引用 11 楼 zhao4zhong1 的回复:使用前malloc分配一个估计足够大的内存， 使用中万一发现不够大，用realloc增大， 使用完free。  赵老师说的对啊，可以先分配一个大的数组，用完一次清空一下然后再用比较好。用内存池也可以，就是复杂了点儿，但是用一用就当学习学习了

user: user-2
content: 有借有还就没事，这是基本节操。  当然频繁的分配／释放，会导致内存碎片。 简单点的结决方法就是一次性分配足够的大的内存，反复使用； 复杂点就是内存池。

user: user-3
content: 就是分配一个大的内存， 比反复分配释放好多了

user: user-4
content: 使用前malloc分配一个估计足够大的内存， 使用中万一发现不够大，用realloc增大， 使用完free。

user: user-5
content: 看样子大家说的建议是使用前分配一个大的内存

user: user-6
content: 引用 11 楼 zhao4zhong1 的回复:使用前malloc分配一个估计足够大的内存， 使用中万一发现不够大，用realloc增大， 使用完free。 正解，也可以先设定个比较大的数组，不够时再malloc； malloc还有一个栈版本，alloca，不用free。 不停地malloc+free是下下策

user: user-7
content: 代码贴出来，或许能找到问题的所在。

user: user-8
content: 需要就申请，不需要就释放，没什么纠结的

user: user-9
content: 在循环里动态分配内存不妥吧。。。既然每次都用到干嘛不在外面分配好。

user: user-10
content: 不能这样，一旦free了以后对应的指针就成了悬浮指针，再想用malloc来分配是不可能的。就算在for循环里面malloc，要想free也要在for循环结束以后

user: user-11
content: malloc do something free  technically, u r right

user: user-12
content: 不停地分配释放，很容易产生内存碎片的

user: user-13
content: 做法没错，但是如果循环终止在某一步，应该就是控制循环的算法有问题了

user: user-14
content: 错是没有错，不过很二  记录个大小，malloc一次或几次就可以，没必要每次都malloc和free，除了浪费cpu，什么用也没有

user: user-0
content: 可是这个循环运行到第四步就停止运行了，本来要运行10步的。

user: user-15
content: malloc 和 free要成对出现 一一对应，不要多也不要少。  话说你也可以用list、vector之类的

user: user-16
content: 虽然命题没有听太明白。这样应该没问题
user-0 提问: c语言死循环问题

回复:
user: user-1
content: 还有为什么用%d就不行呢？字符不就是范围小一点的整数吗？  理论上是这样。 但对scanf函数就不一样了，仔细看下说明。

user: user-0
content: 谢谢，在scanf ("%c", &is_quit) ;前加rewind(stdin);就可以了，每一个printf后面加fflush(stdout);都不起作用（如果不加ewind(stdin);），想问一下，为什么？还有为什么用%d就不行呢？字符不就是范围小一点的整数吗？

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
user-0 提问: 关于两个unsigned char型字符数组异或加解密

回复:
user: user-1
content: unsigned char a[20]; unsigned char m[16]; int i; for (i=0;i<20;i++) a[i]^=m[i%16];

user: user-2
content: 1和0x1是同一个东西。

user: user-2
content: int无所谓16进制。

user: user-0
content: 引用 1 楼 user-3 的回复:如果楼主知道什么叫异或，那就该知道异或根本不分unsigned和signed 至于十六进制，那是给人看的，内存中不分十六进制二进制十进制八进制 就是按字节异或，那么我异或后的结果也得保存在unsigned char数组里？也是16进制的？

user: user-3
content: 如果楼主知道什么叫异或，那就该知道异或根本不分unsigned和signed 至于十六进制，那是给人看的，内存中不分十六进制二进制十进制八进制

user: user-0
content: 有人帮帮忙吗
user-0 提问: C语言 结构体指针申请内存空间

回复:
user: user-1
content: prev->next=current;                                   current->next=NULL;  其实这两句话在很多基于链表的实现中很常见的，具体的语义就是将前一个节点指向现在新加的节点，并且将现在的节点的next指针指向空指针。在逻辑上应该还是很好理解的。

user: user-2
content: 引用 7 楼 Jeadystraw 的回复:楼主mcmay回答的狠规范！谢了!!其他都是吭爹的！有的人还说程序有错误！麻烦你运行下还行？？ prev->next=current这句话current指向哪儿啊？？怎么next还指向current啊？？不太懂啊  current指向通过malloc新产生的链表成员（链表中的新的末端），而prev-next是保存这个新产生链表成员（新末端）。

user: user-3
content: 对于“prev->next=current这句话current指向哪儿啊？？”这个问题，其实mcmay已经解释清楚了，这个current是一个中间指针，是临时的，总是指向最新生成的指针， prev->next=current;  主要作用是将后来产生的新成员挂在当前链表成员的next指针上，置于链表尾端。

user: user-4
content: 我这是运行过 发现 问题 才 会的贴.

user: user-0
content: 奇怪了！难道书上是错误的啊？？按照你的逻辑也有道理啊

user: user-4
content: 自己有错,还 犟. while(current!=NULL)   {          free(current);//  current  都已经free 了          current=current->next;// 哪来的 next ??             }

user: user-0
content: 楼主mcmay回答的狠规范！谢了!!其他都是吭爹的！有的人还说程序有错误！麻烦你运行下还行？？ prev->next=current这句话current指向哪儿啊？？怎么next还指向current啊？？不太懂啊

user: user-2
content: 这是C Primer Plus当中的的例题吧？ current只是个临时指针，其值是随着接收malloc所产生的指针而不断变化的。它的作用是让通过malloc分配内存而新产生的链表成员，以prev-next = current的方式一个一个接续下去。 当链表为空，即head == NULL时，首先将第一个产生的链表成员的指针赋给head，这样整个链表就有了head（第一个元素了）。 否则，即链表不为空，则将新产生的链表成员通过prev-next = current的方式挂到前面已经产生的链表成员的next指针上（成为新的链表末端成员），以此类推，直到不再产生新的链表成员为止。    while(gets(input)!=NULL && input[0]!='\0') {          current=(struct filem *)malloc(sizeof(struct film));   /*产生新的链表成员*/                   if(head==NULL)            head=current;    //如果链表为空，则将第一个产生的链表成员的指针赋给head          else             prev->next=current;  //将后来产生的链表成员挂在链表成员的next指针上，使其成为新的链表末端成员          current->next=NULL;   //开放新的链表尾巴的next指针，以便接收可能会挂上来的下一个新的末端成员          strcpy(current->title,input);          puts("请输入电影等级");          scanf("%d",¤t->rating);          while(getchar()!='\n')            continue;                puts("请输入下一个电影标题");          prev=current;                  //记录当前新产生的链表末端成员的指针，这个指针即为                                                 //下一轮prev->next当中的prev的值 }

user: user-4
content: /* 任务完成 清空内存 */   	current=head; 	while(current != NULL) 	{ 		tmp=current->next; 		free(current); 		current=tmp; 	} 	printf("再见");

user: user-5
content: 这程序很多错误啊

user: user-6
content: 付空值。  擦。。。又打错了。

user: user-6
content: 引用 1 楼 user-6 的回复:prev->next=current;          //这句话的意思：前一节点指向当前申请的加单                                 current->next=NULL;//当前申请的节点付控制，表示后面已到了链表的末尾  prev=current           //表示指针后移，prev始终指向末尾节点。  画个图你能更好的理解。  改正错别字：浮空值

user: user-6
content: prev->next=current;          //这句话的意思：前一节点指向当前申请的加单                                 current->next=NULL;//当前申请的节点付控制，表示后面已到了链表的末尾  prev=current           //表示指针后移，prev始终指向末尾节点。  画个图你能更好的理解。
user-0 提问: 字符串传参数的困惑

回复:
user: user-1
content: char *str="abcdef";  这是个字符串常量，而且强烈建议写为const char*类型，这样更好一些

user: user-2
content: char *str1 = "abcdef";//只读 C语言没有字符串这种数据类型，虽然可以用字符指针操作一个C风格字符串，但必须清楚这个指针指向的内存归谁管

user: user-3
content: char *str1 = "abcdef"; char str2[] = "abcdef"; 你要弄清楚这两者的区别，str1指向了一个常量字符串，常量字符串是不允许更改的， str2是一个字符串数组，存放在栈上，可以更改 你要实现你开始交换的目的，字符串指针使用后者

user: user-3
content: 引用 4 楼 huruzun 的回复:[quote=引用 1 楼 a515360208 的回复:] char *str1 = "abcdef"; char str2[] = "abcdef"; 你要弄清楚这两者的区别，str1指向了一个常量字符串，常量字符串是不允许更改的， str2是一个字符串数组，存放在栈上，可以更改 你要实现你开始交换的目的，字符串指针使用后者  再问下我调试进去交换代码，每次都显示access violation 越界错误！如果是常量不让写按道理是提示无法改写啊， 为什么编译器这么提示？我用的是VS2010，这个错误让我纠结了半天！[/quote] CSDN.exe 中的 0x001e109d 处有未经处理的异常: 0xC0000005: 写入位置 0x001e7830 时发生访问冲突这是我调试时的错误，至于你的错误，我也不明白， 你查一查吧

user: user-0
content: 引用 1 楼 a515360208 的回复:char *str1 = "abcdef"; char str2[] = "abcdef"; 你要弄清楚这两者的区别，str1指向了一个常量字符串，常量字符串是不允许更改的， str2是一个字符串数组，存放在栈上，可以更改 你要实现你开始交换的目的，字符串指针使用后者  再问下我调试进去交换代码，每次都显示access violation 越界错误！如果是常量不让写按道理是提示无法改写啊， 为什么编译器这么提示？我用的是VS2010，这个错误让我纠结了半天！
user-0 提问: 帮忙看看这是怎么回事？

回复:
user: user-1
content: 你怎么调用的

user: user-2
content: E:\csz\csz.c(188) : error C2198: 'c_jifenbang' : too few actual parameters 其实错误说的很明显啊，too few actual parameters---》实参太少。 这种问题自己得学会看出错信息解决

user: user-3
content: printf("用户%c的积分为%5d",nickname,score);

user: user-4
content: printf("用户%c的积分为%5d,nickname,score");

user: user-5
content: 这句错了：printf("用户%c的积分为%5d,nickname,score"); 改为：printf("用户%c的积分为%5d“,nickname,score);

user: user-6
content: 引用 1 楼 Symfund 的回复:printf("用户%c的积分为%5d",nickname,score);  顶
user-0 提问: strcmp

回复:
user: user-1
content: 引用 2 楼 hjl0508 的回复:strcmp是比较字符串的，你哪个tmp[0]是一个字符，肯定不行啊，二楼说的挺对的！ 说错了，是一楼说的挺对的！

user: user-1
content: strcmp是比较字符串的，你哪个tmp[0]是一个字符，肯定不行啊，二楼说的挺对的！

user: user-2
content: error C2664: “strcmp”: 不能将参数 2 从“char”转换为“const char *”  意思是strcmp的第二个参数不能转换成const char* ，tmp[0]是一个字符，一个字符怎么和字符串比较呢？？？ 不清楚你要比较啥？ 如果比较第一个字符if('d' == tmp[0])就行了
user-0 提问: 求推荐 算法/数据结构 书籍!

回复:
user: user-1
content: 引用 4 楼 hollebab 的回复:[quote=引用 2 楼 FightForProgrammer 的回复:] 算法导论  花个一两年时间啃掉，顺便写个博客，督促自己也给别人参考 你算是推荐了本书,不过我想不通780页的书得花1-2年?是指把书反复看2~3遍以上吗?[/quote]  真正理解。烂熟于心。 当然水平高可以另当别论

user: user-0
content: 引用 2 楼 FightForProgrammer 的回复:算法导论  花个一两年时间啃掉，顺便写个博客，督促自己也给别人参考 你算是推荐了本书,不过我想不通780页的书得花1-2年?是指把书反复看2~3遍以上吗?

user: user-0
content: 引用 1 楼 user-2 的回复:一本书够看好几十年的了 嗯,那你是指哪本书呢?

user: user-1
content: 算法导论  花个一两年时间啃掉，顺便写个博客，督促自己也给别人参考

user: user-2
content: 一本书够看好几十年的了
user-0 提问: HMMIO句柄是高度保密的东西吧...

回复:
user: user-0
content: 引用 3 楼 ForestDB 的回复:SDK里的吧  另外对我来说，所有的Windows API都是高度保密的东西。好吧

user: user-0
content: 引用 2 楼 sd530842780 的回复:嗯，很保密，我都不知道是啥玩意哈，接分啦真坏!

user: user-1
content: SDK里的吧  另外对我来说，所有的Windows API都是高度保密的东西。

user: user-2
content: 嗯，很保密，我都不知道是啥玩意哈，接分啦

user: user-0
content: 脑子有阬..自己想通了..来几个接分的人吧..等会结贴..
user-0 提问: 求孙鑫的c视频教程

回复:
user: user-1
content: 郝斌的看完了，你水平怎么样啊？看完一个，入门以后，可以自己想办法继续深入学习，视频看一个就可以了，这句话不错，而且，这个你网上一搜，不难搜到吧

user: user-2
content: 去淘宝买

user: user-0
content: 网上没有下载的资源，我不想在线看，希望有资源的同学分享一下

user: user-0
content: 没有视频不知道要学些什么，看了赫斌的视频我感觉他讲的不完全，比如字符的操作和宏还有函数，想看看其他人的视频重点学习一下这部分的内容。我是学数学专业的，只是课外时间学c语言，后来学了赫斌的数据结构，感觉算法真的好多，要具备独立开发程序的能力真的好难，所以希望听听大家的看法，要学些什么才能具备独立开发小程序的能力

user: user-3
content: 去优酷，直接搜“孙鑫”就可以了

user: user-4
content: 视频看一个就行了，入个门而已。自己动手做才是真理。

user: user-0
content: 我qq1557537239
user-0 提问: C语言4圣经看完了干什么?

回复:
user: user-0
content: 写代码的话书上习题不就够了么,而且我认为学了这些浅显的东西能写出什么好东西吗?每天写十遍hello world?我刚学完C语言本身,看的最深的书也就是C专家编程, 接下去干些什么呢?

user: user-1
content: c语言四圣经是神马？ 学编程就是看书->写代码->看书->写代码...etc.

user: user-2
content: 看完圣经，接着去做圣人
user-0 提问: 问下用C连接MYSQL数据库无法连上

回复:
user: user-1
content: MySQL你看dBASE的DSN做甚？  请检查ODBC控制面板 注意查看驱动那里的显示项，最好能截图

user: user-2
content: MYSQL C API 访问程序(更新升级版本)  http://blog.csdn.net/hzhxxx/article/details/6100752

user: user-3
content: 你到mysql安装目录下，有个include目录，在vs中包含这个目录和同目录下的lib目录，使用mysql.h中提供的函数直接连接mysql就可以了，不需要设定数据源的