Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言数据结构基础方面的教材，值得一看。

回复:
user: user-1
content: 我有此书，错误多成马了。。。

user: user-2
content: 额，扫描版的？

user: user-3
content: 我干过一本基本的数据结构预算法 不过还是忘记了

user: user-4
content: 《数据结构（C语言描述）》 《算法精解（C语言描述）》

user: user-5
content: 引用 3 楼 Claude_Ray 的回复:看起来还可以，我还是喜欢严奶奶的~~哎，调皮一下~网速实在不给力，没下载好，不能验货…不过这种经典书网上资源蛮多的，楼主推荐的不错，支持~个人建议，发链接不如做个详细的书目推荐，而且还是实体书看着舒服一些

user: user-6
content: 楼主总共发过俩帖子，都是分享教材的，都是119G网的

user: user-5
content: 看起来还可以，我还是喜欢严奶奶的~~

user: user-7
content: 清华大学数据结构C语言第二版

user: user-8
content: 好想可以下载支持一下楼主
user-0 提问: 请教关于c的printf函数问题

回复:
user: user-1
content: 提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！

user: user-1
content: printf的源代码在output.c中。 C:\60G\Microsoft SDK\src\crt\output.c C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\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: user-2
content: printf的实现在msvcrt.lib中了

user: user-3
content: 引用 楼主 dasdase 的回复:#include <stdio.h>     main()    {      printf("hello, world\n");    } ----------------------------------------------------分隔线 .const szHello db 'Hello, world!', 0 .code main        proc invoke    printf, offset szHello ret main endp end    main 我是初学者，用msvcrt.lib的printf和这C的PRINTF函数做对比的，程序如上，我想问，为什么汇编的Messagebox源码和C的基本一样，但printf函数的源码就完全不一样呢，难道说C的printf函数不是这个？？，很想知道答案，为什么源码不同？  不了解汇编
user-0 提问: 如何获取当前时间到第2天凌晨00：00：00剩余的秒数

回复:
user: user-1
content: 楼主   同求啊 不知道你是怎么做的

user: user-2
content: 仅供参考#include <afxdisp.h> #include <stdio.h> #include <stdlib.h> int main(int argc, TCHAR* argv[]) {     COleDateTime t;     COleDateTimeSpan ts;     CString s,fmt;     int nYear;     int nMonth;     int nDay;     int nHour;     int nMin;     int nSec;     int lDays;     int nHours;     int nMins;     int nSecs;     int i,N;     // initialize MFC and print and error on failure     if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {         printf("Fatal Error: MFC initialization failed\n");         return 1;     }     if (argc<13) {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 2;     }     if (stricmp(argv[12],"SQL")==0) fmt="%Y-%m-%d %H:%M:%S";     else if (stricmp(argv[12],"YYYY")==0) fmt="%Y%m%d %H%M%S";     else if (stricmp(argv[12],"YY")==0) fmt="%y%m%d %H%M%S";     else {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 3;     }     nYear =atoi(argv[ 1]);     nMonth=atoi(argv[ 2]);     nDay  =atoi(argv[ 3]);     nHour =atoi(argv[ 4]);     nMin  =atoi(argv[ 5]);     nSec  =atoi(argv[ 6]);     lDays =atoi(argv[ 7]);     nHours=atoi(argv[ 8]);     nMins =atoi(argv[ 9]);     nSecs =atoi(argv[10]);     N     =atoi(argv[11]);     if (N<=0) {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 4;     }     t=COleDateTime( nYear, nMonth, nDay, nHour, nMin, nSec);     ts=COleDateTimeSpan( lDays, nHours, nMins, nSecs );     for (i=1;i<=N;i++) {         s=t.Format(fmt);         printf("%08d %s\n",i,s);         t=t+ts;     }     return 0; }

user: user-0
content: 谢谢楼上的，结贴了

user: user-3
content: 引用 1 楼 stormlk1983 的回复:难度要把struct tm里面的时间设置成00：00：00，取得了当前的time_t后在加上86400？ 求大神看看有没有更好的方法，或者接口 差不多的思路， 24hour - (now - start of today) /* difftime example */ #include <stdio.h>      /* printf */ #include <time.h>       /* time_t, struct tm, difftime, time, mktime */  int main () {   time_t now = time(NULL);   struct tm today = *localtime(&now);   double seconds;    today.tm_hour = 0; today.tm_min = 0; today.tm_sec = 0;      seconds = 24*60*60-difftime(now,mktime(&today));    printf (" %.f seconds left today\n" seconds);    return 0; }

user: user-0
content: 难度要把struct tm里面的时间设置成00：00：00，取得了当前的time_t后在加上86400？ 求大神看看有没有更好的方法，或者接口
user-0 提问: 在镜像文件中，找到idx1这个字符串，怎么做？别说用字符串匹配函数。

回复:
user: user-1
content: C:\>findstr /? 在文件中寻找字符串。  FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]         [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]         strings [[drive:][path]filename[ ...]]    /B         在一行的开始配对模式。   /E         在一行的结尾配对模式。   /L         按字使用搜索字符串。   /R         将搜索字符串作为一般表达式使用。   /S         在当前目录和所有子目录中搜索匹配文件。   /I         指定搜索不分大小写。   /X         打印完全匹配的行。   /V         只打印不包含匹配的行。   /N         在匹配的每行前打印行数。   /M         如果文件含有匹配项，只打印其文件名。   /O         在每个匹配行前打印字符偏移量。   /P         忽略有不可打印字符的文件。   /OFF[LINE] 不跳过带有脱机属性集的文件。   /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"   /F:file    从指定文件读文件列表 (/ 代表控制台)。   /C:string  使用指定字符串作为文字搜索字符串。   /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。   /D:dir     查找以分号为分隔符的目录列表   strings    要查找的文字。   [drive:][path]filename              指定要查找的文件。  除非参数有 /C 前缀，请使用空格隔开搜索字符串。 例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或 "there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找 "hello there"。  一般表达式的快速参考:   .        通配符: 任何字符   *        重复: 以前字符或类别出现零或零以上次数   ^        行位置: 行的开始   $        行位置: 行的终点   [class]  字符类别: 任何在字符集中的字符   [^class] 补字符类别: 任何不在字符集中的字符   [x-y]    范围: 在指定范围内的任何字符   \x       Escape: 元字符 x 的文字用法   \<xyz    字位置: 字的开始   xyz\>    字位置: 字的结束  有关 FINDSTR 常见表达法的详细情况，请见联机命令参考。
user-0 提问: 问题请教,按照教材上的一段代码练习，要求是统计各个数字、空白符以及其他字符出现的次数，为什么数不出结果？

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:输入完毕请按 Enter，Ctrl+Z，Enter 知道了，结束符用的是CTRL+C就可以了。~

user: user-1
content: 正解。注意EOF的涵义。

user: user-2
content: 输入完毕请按 Enter，Ctrl+Z，Enter
user-0 提问: C语言从一个字符串中找出指定的几个字符串并打印出来的问题

回复:
user: user-0
content: 不好意思前面没注意，代码贴的时候没注意，整理之后是这样的：   char buf[1024] = "[{\"bucket_name\":\"andy-personal-cloud4\",\"statu\s":\"0\",\"cdatetime\":\"1402481705\",\"used_capacity\":\"0\",\"total_capacity\":\"0\",\"region\":\"beijing\"},{\"bucket_name\":\"andy-personal-cloud3\",\"status\":\"0\",\"cdatetime\":\"1402479952\",\"used_capacity\":\"0\",\"total_capacity\":\"0\",\"region\":\"beijing\"},{\"bucket_name\":\"andy-personal-cloud2\",\"status\":\"0\",\"cdatetime\":\"1402386155\",\"used_capacity\":\"119056\",\"total_capacity\":\"0\",\"region\":\"beijing\"},{\"bucket_name\":\"andy-personal-cloud\",\"status\":\"0\",\"cdatetime\":\"1401209441\",\"used_capacity\":\"19491722\",\"total_capacity\":\"0\",\"region\":\"beijing\"}]\";

user: user-1
content: const char* str = "	[{\"bucket_name\":\"bucket_name\",\"status\":\"0\",\"bucket_name\":\"1402481705\""; 	const char* key = "\"bucket_name\""; 	const char *p = str; 	size_t len = strlen(key); 	char value[256]; 	 	while( (p=strstr(p,key))!=NULL ) 	{ 		sscanf(p, "\"bucket_name\":\"%[^\"]",value); 		p+= (len+strlen(value)); 		puts(value); 	}

user: user-2
content: 大体是这样： char  *pc; pc = strstr(buf, "bucket_name")+strlen("bucket_name");  你的代码根本就无法编译吧？双引号用的太乱。 注意：如果字符串中有，双引号，在代码中应当这样表示：\"
user-0 提问: 一个运行错误

回复:
user: user-1
content: fgets(StrLine,33,fp); 这些参数你确定传对了么

user: user-2
content: 主函数是怎么调用的？

user: user-0
content: 非常感谢！！！！！！！！

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

user: user-4
content: 话说我运行了下代码。。没有出现段错误啊。。。  #include  <stdio.h>  int ReadSL(char* filename, int WhichLine, char* StrLine) { 	FILE* fp = NULL; 	int curindex = 0;  	if((fp = fopen(filename, "r")) == NULL) 	{ 		printf("Open file error\n"); 		return -1; 	}  	while(!feof(fp)) 	{ 		if(curindex == WhichLine) 		{ 			fgets(StrLine, 33, fp); 			fclose(fp); 			return 0; 		} 		curindex++; 		fgets(StrLine, 33, fp); 	}  	fclose(fp); 	return -1; }  int main(int argc, char *argv[]) { 	char buffer[100]; 	char file[] = "test.txt"; 	int ret = ReadSL(file, 2, buffer); 	printf("%s\n", buffer);  	return 0; }    test.txt里面有三行，每行一个词，能正常读出来东西啊，楼主是不是文件名或者参数的问题？Buffer(StrLine)够大吗？文件有没有那么多行？ 楼主可以测试下fgets的返回值
user-0 提问: codeblocks与vs2010比较，优势和劣势？

回复:
user: user-1
content: 引用 11 楼 NineTyNine_LP 的回复:[quote=引用 9 楼 yangyunzhao 的回复:] [quote=引用 8 楼 NineTyNine_LP 的回复:] Linux下的大型C++项目使用的是什么IDE/工具呢？  我习惯vs2008里面编写代码，然后在linux里面自己写makefile编译。 如果是跨平台的代码，我一般都在windows下调试完成，然后再到linux下调试[/quote]  看来Linux下优秀的C++IDE真的很匮乏啊。[/quote] 关键是Linux下优秀的图形UI基本上都比不上Windows

user: user-2
content: 引用 9 楼 yangyunzhao 的回复:[quote=引用 8 楼 NineTyNine_LP 的回复:] Linux下的大型C++项目使用的是什么IDE/工具呢？  我习惯vs2008里面编写代码，然后在linux里面自己写makefile编译。 如果是跨平台的代码，我一般都在windows下调试完成，然后再到linux下调试[/quote]  看来Linux下优秀的C++IDE真的很匮乏啊。

user: user-2
content: Linux下的大型C++项目使用的是什么IDE/工具呢？

user: user-3
content: 引用 9 楼 yangyunzhao 的回复:[quote=引用 8 楼 NineTyNine_LP 的回复:] Linux下的大型C++项目使用的是什么IDE/工具呢？  我习惯vs2008里面编写代码，然后在linux里面自己写makefile编译。 如果是跨平台的代码，我一般都在windows下调试完成，然后再到linux下调试[/quote] 这个办法不错

user: user-4
content: 引用 8 楼 NineTyNine_LP 的回复:Linux下的大型C++项目使用的是什么IDE/工具呢？  我习惯vs2008里面编写代码，然后在linux里面自己写makefile编译。 如果是跨平台的代码，我一般都在windows下调试完成，然后再到linux下调试

user: user-5
content: 个人觉得,codeblocks跟VS差的不是一星半点

user: user-6
content: coblocks可能不适合编写大型代码

user: user-7
content: 跟同一时代VS还是有差距的。

user: user-8
content: 黑猫白猫，能抓老鼠的都是好猫。

user: user-9
content: VS 2010，是我最讨厌的一个VS版本。不但跑得慢，还奇丑无比，让我很不爽。  所以，我主要使用的VS版本有：6.0, 2005, 2008, 2012.  2002和2003我也很讨厌。  codeblocks也在用，但一般不会用于工作，而是用于学习，验证一些东西。

user: user-1
content: 镰刀与联合收割机比较，优势和劣势？

user: user-0
content: 引用 1 楼 akirya 的回复:个人觉得,codeblocks跟VS差的不是一星半点 废话，等于没说
user-0 提问: 求质数算法

回复:
user: user-0
content: 引用 1 楼 user-3 的回复:i*i <= l 就相当于 i <= sqrt(l) 假定l的平方根是s，那么只要l不能被小于s的所有数整除，比s大的数也就没有必要再算了。  为什么比s大的数也就没有必要再算了？这是什么原理？怎么理解？

user: user-1
content: 引用 3 楼 constmei 的回复:[quote=引用 1 楼 user-3 的回复:] i*i <= l 就相当于 i <= sqrt(l) 假定l的平方根是s，那么只要l不能被小于s的所有数整除，比s大的数也就没有必要再算了。  为什 么比s大的数也就没有必要再算了？这是什么原理？怎么理解？[/quote] 1. (l%j==0)除了表示j是l的一个整因子，还蕴含着l/j（记作k吧）也是l的一个整因子。即一次%j运算是可以判断出两个整因子的。 ----》l%k就是多余的了。  2.j与k的分布是以sqrt(l)为界左右分布的 以l=36为例 2是36的最小整因子，同时可以判断出18是36的最大整因子（真因子） 3是36的整因子，同时可以判断出12也是36的整因子 4是36的整因子，同时可以判断出9也是36的整因子 6是36的整因子，同时可以判断出6也是36的整因子！！！！

user: user-2
content: 嗯，楼上回答够细心的  只是循环的次数减少了  至于原因，比如说a是一个数，设其平方根为x，如果从2到x（如果x不是整数，就下取整）都不能整除a，则再往上试比x更大的数，那这个比x更大的数所乘的数一定比x小，而比x小的数前边都已经试过，不能用才到后边这步，所以，用a的平方根即可判断a是不是素数

user: user-0
content: 感谢大家的回复 终于明白了 特别感谢user-3的回复 没有用到一个数学名词 说的相当清楚 明白

user: user-3
content: 假设x不是质数，x = a * b，x的平方根是s，那么a和b必然有一个大于s，另一个小于s，除非a和b相等都是s 还是以37为例，当我们发现它不能被23456整除，那么他也不可能被7到36的任何一个数整除。如果真有一个a在7到36之间可以整除的，那么对应的b必然小于7，而我们已经验证过小于7的都不能整除，所以b不可能存在，那么a也就不可能存在了。

user: user-3
content: 更正一楼： 只要l不能被所有小于或等于s的所有数整除  其实楼主说的两个方法原理是一样的，只是循环范围不同而已。 比如，如果l=37，那么循环在i=7的时候结束，因为不需要再去除更大的数了

user: user-3
content: i*i <= l 就相当于 i <= sqrt(l) 假定l的平方根是s，那么只要l不能被小于s的所有数整除，比s大的数也就没有必要再算了。
user-0 提问: C语言中有没有类似Python中的StringIO可以读写的。

回复:
user: user-0
content: 引用 1 楼 truelance 的回复:c++中的string c里自带的字符串处理能力很弱, 都依赖自己实现 谢谢，其实这个实现起来一点都不难，主要是高级语言（python java）之类的用多了， 人就变懒了，申请一个malloc，然后移动指针写入数据就OK了。：）就不该问这样的问题。

user: user-1
content: c++中的string c里自带的字符串处理能力很弱, 都依赖自己实现
user-0 提问: xp和win7下共用的dll文件有哪些啊

回复:
user: user-1
content: http://www.dllzj.com

user: user-0
content: 引用 1 楼 user-2 的回复:写10个hello world 要求是系统自带的

user: user-2
content: 写10个hello world

user: user-1
content: c:\windows\system32\oleaut32.dll c:\windows\system32\ole32.dll c:\windows\system32\comdlg32.dll c:\windows\system32\shlwapi.dll c:\windows\system32\shell32.dll c:\windows\system32\user32.dll c:\windows\system32\gdi32.dll c:\windows\system32\secur32.dll c:\windows\system32\advapi32.dll c:\windows\system32\ws2_32.dll c:\windows\system32\ntdll.dll c:\windows\system32\kernel32.dll

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:http://www.dllzj.com 我当然知道这种dll网站  百度能找到 可是xp和win7都具有的并且一定在system32下存在的共同文件名的dll
user-0 提问: 文件操作 fputc()

回复:
user: user-1
content: 引用 3 楼 wenbo228228 的回复:我觉得警告级别还是不要太高吧，不然出了问题都不知道 我觉得正好相反，警告级别低了才是“出了问题都不知道”。 警告级别高了，编译的时候可能有点麻烦，但这总比程序到了用户那里出错再拿回来到处找问题要好。 有的公司不但把编译器警告级别设到最高，还要求零警告甚至直接要求编译器把警告当作错误，这都是有原因的。

user: user-2
content: 引用 5 楼 wenbo228228 的回复:用惯了搜狗不想换 而且在其他地方没有这种情况，只是在codeblocks里面这样，是不是我哪里设置不对？ coding的时候，关闭中文输入法。 只有有必要的时候（比如中文注释，中文输出）， 打开中文输入法（自己定义快捷键吧）。

user: user-0
content: 用惯了搜狗不想换 而且在其他地方没有这种情况，只是在codeblocks里面这样，是不是我哪里设置不对？

user: user-3
content: 引用 3 楼 wenbo228228 的回复:确实是优先级的问题 还有个问题，我有时候输入了中文，下一句该输入英文，但是忘了切换过来，比如此时已经输入中文状态下的printf，我想直接搞成英文状态的printf，所以直接按了shift键，但是屏幕上只显示了rintf,第一个p没有了，你们遇到过这种情况吗，怎么解决的？  我觉得警告级别还是不要太高吧，不然出了问题都不知道 果断换个输入法。

user: user-0
content: 确实是优先级的问题 还有个问题，我有时候输入了中文，下一句该输入英文，但是忘了切换过来，比如此时已经输入中文状态下的printf，我想直接搞成英文状态的printf，所以直接按了shift键，但是屏幕上只显示了rintf,第一个p没有了，你们遇到过这种情况吗，怎么解决的？  我觉得警告级别还是不要太高吧，不然出了问题都不知道

user: user-1
content: 有些编译器会有警告的。编译的时候把警告级别设的高一点比较好。  我就记不住优先级，所以到处加括号，反正多加了括号也没坏处。 而且我不太敢这么写代码，宁可分两行 fp = fopen(...); if (fp ...)

user: user-1
content: 注意运算符优先级    if((fp=fopen("E:\\c语言\\文件操作\\a.txt","w+"))==NULL)
user-0 提问: 关于头文件包含问题

回复:
user: user-1
content: 这种问题我以前好象遇到过，有个可能是因为a.h找不到b.h的路径，导致b.h并没有真正加载到a.h中，当然就没有定义了。 楼主检查一下a.h中引用b.h时的路径设置， 另外在编译时仔细一点可以看到中间码时是否把b.h包含进来了

user: user-2
content: a.c 有没有包含a.h？ 这个确实不好 猜

user: user-3
content: 目测是楼主的test结构体在定义的时候忘了加分号

user: user-4
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E  理解和讨论之前请先学会如何观察！

user: user-5
content: 结构体前面没有加struct

user: user-6
content: 没有遇到过。名字写对了么

user: user-7
content: 报错是指编译通不过还是提示有问题

user: user-8
content: 引用 7 楼 cau_eric 的回复:[quote=引用 楼主 navyliu1986 的回复:] 我有四个文件，a.c    a.h      b.c    b.h， b.h里定义了一个结构体 test，a.h包含了b.h， 在a.c里面定义了一个函数 void hello(test  inA); 在a.h里声明了这个函数void hello(test  inA)，此时总是报错test结构体未定义，但在a.c中又没问题。  大家来出现过这种问题没？我是一个大项目里，处理这四个文件还有其他文件，我分析了下好像又没什么问题，请各位大牛指点可能问题出在哪里？谢谢啦！  楼主把代码发上来看看？[/quote] +1

user: user-9
content: 引用 楼主 navyliu1986 的回复:我有四个文件，a.c    a.h      b.c    b.h， b.h里定义了一个结构体 test，a.h包含了b.h， 在a.c里面定义了一个函数 void hello(test  inA); 在a.h里声明了这个函数void hello(test  inA)，此时总是报错test结构体未定义，但在a.c中又没问题。  大家来出现过这种问题没？我是一个大项目里，处理这四个文件还有其他文件，我分析了下好像又没什么问题，请各位大牛指点可能问题出在哪里？谢谢啦！  楼主把代码发上来看看？

user: user-10
content: 直接看一下代码比这里瞎猜要好得多

user: user-11
content: 在a.h里，要确保先写了结构体定义，再写函数定义
user-0 提问: 数据结构哈弗曼树的编码，求指出编译器无法显示的错误！

回复:
user: user-0
content: typedef char **HuffmanCode; // 动态分配数组存储赫夫曼编码表  怎样理解”**“？这是双指针还是？在程序里有啥作用？

user: user-1
content: #include <stdio.h> #include <limits.h> #include <malloc.h> #include <string.h> #include <windows.h>  // 赫夫曼树和赫夫曼编码的存储表示  typedef struct { 	unsigned int weight; 	unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; // 动态分配数组存储赫夫曼树   typedef char **HuffmanCode; // 动态分配数组存储赫夫曼编码表   // 函数void select()调用 int min1(HuffmanTree t,int i) {  	int j,flag; 	unsigned int k=UINT_MAX; // 取k为不小于可能的值  	for(j = 1; j <= i; j++) 		if(t[j].weight < k && t[j].parent == 0) 			k = t[j].weight,flag = j; 	t[flag].parent=1; 	return flag; }  // s1为最小的两个值中序号小的那个 void select(HuffmanTree t,int i,int *s1,int *s2) {  	int j; 	*s1=min1(t,i); 	*s2=min1(t,i); 	if(*s1 > *s2) 	{ 		j=*s1; 		*s1=*s2; 		*s2=j; 	} }  // w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n)  {   	int m,i,s1,s2,start; 	unsigned c,f; 	HuffmanTree p; 	char *cd; 	 	if(n<=1) 		return; 	m=2*n-1;	//因为一颗有n个叶子结点的赫夫曼树共有2n-1个结点 	*HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); // 0号单元未用  	for(p=*HT+1,i=1;i<=n;++i,++p,++w)	//初始化各结点的权值 	{ 		(*p).weight=*w; 		(*p).parent=0; 		(*p).lchild=0; 		(*p).rchild=0; 	} 	for(;i<=m;++i,++p)	//初始化双亲位置 		(*p).parent=0; 	for(i=n+1;i<=m;++i) // 建赫夫曼树  	{ 		// 在HT[1 ~ i-1]中选择parent为0且weight最小的两个结点,其序 		// 号分别为s1和s2  		select(*HT,i-1,&s1,&s2); 		(*HT)[s1].parent=(*HT)[s2].parent=i; 		(*HT)[i].lchild=s1; 		(*HT)[i].rchild=s2; 		(*HT)[i].weight=(*HT)[s1].weight+(*HT)[s2].weight; 	} 	// 从叶子到根逆向求每个字符的赫夫曼编码  	*HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); 	// 分配n个字符编码的头指针向量([0]不用)  	cd=(char*)malloc(n*sizeof(char)); // 分配求编码的工作空间  	cd[n-1]='\0'; // 编码结束符  	for(i=1;i<=n;i++) 	{  		// 逐个字符求赫夫曼编码  		start=n-1; // 编码结束符位置  		for(c=i,f=(*HT)[i].parent; f!=0; c=f,f=(*HT)[f].parent) 			// 从叶子到根逆向求编码  			if((*HT)[f].lchild==c) 				cd[--start]='0'; 			else 				cd[--start]='1'; 		(*HC)[i]=(char*)malloc((n-start)*sizeof(char)); 		// 为第i个字符编码分配空间  		strcpy((*HC)[i],&cd[start]); // 从cd复制编码(串)到HC  	} 	free(cd); // 释放工作空间  }  int main() { 	HuffmanTree HT; 	HuffmanCode HC; 	int *w,n,i; 	 	printf("请输入权值的个数(>1)："); 	scanf("%d",&n); 	w=(int*)malloc(n*sizeof(int)); 	printf("请依次输入%d个权值(整型)：\n",n); 	for(i=0;i<=n-1;i++) 		scanf("%d",w+i); 	HuffmanCoding(&HT,&HC,w,n); 	for(i=1;i<=n;i++) 		puts(HC[i]); 		 	system("pause"); 	return 0; } 楼主你和这个对比一下吧
user-0 提问: C语言，，这样写是什么意思

回复:
user: user-1
content: c语言也可以面向对象。但楼主这段程序，有构造函数，有初始化列表，是纯c？

user: user-2
content: 引用 25 楼 cdcxy2009 的回复:谁说C没有构造函数，一样有的，没什么问题。 但不明白楼主的问题是什么？  无语了，纯C有构造函数？ 构造函数是干嘛的？这个你都没搞清。

user: user-3
content: 哪本C语言的书讲构造函数了？

user: user-0
content: 引用 31 楼 zhuyf87 的回复:c语言也可以面向对象。但楼主这段程序，有构造函数，有初始化列表，是纯c？ C语言可以面向对象？

user: user-4
content: 纯C中俩冒号咋能编译过去？？求举例。。。

user: user-5
content: 语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。

user: user-6
content: struct能定义函数么？

user: user-7
content: 引用 17 楼 M173475237 的回复:我想知道C语言里,,这个冒号是什么意思,,,,而且，也可以这样用参数初始化列表么？  如果是c++，Snake::Snake(const POINT &npt, Snake * nnext, Snake * nbefore): 这句中的最后一个冒号，表示后面跟的是初始化列表，C++中结构体也能像类一样定义构造函数，至于其他成员函数、是否能继承……我也不知道，没有尝试过，因为要是需要这些东西，直接定义成类就行了。

user: user-7
content: c不是面向对象的语言，这种语法，已经用到面向对象的概念了，所以我觉得不是纯C的语法。  楼主有没有在TC上编译过？

user: user-0
content: 引用 13 楼 polyard 的回复:这是API编程，看看《VC++深入详解》你就知道了，这里一言难尽，好吧，其实我没看懂你想问什么，哈哈~ 引用 15 楼 majia2011 的回复:很正常的写法，咱的结构就这么写，有时还会多写几个执行函数进去，呵呵  我想知道C语言里,,这个冒号是什么意思,,,,而且，也可以这样用参数初始化列表么？

user: user-8
content: 不是c，是c++

user: user-9
content: 很正常的写法，咱的结构就这么写，有时还会多写几个执行函数进去，呵呵

user: user-10
content: C语言 +1

user: user-11
content: 这是API编程，看看《VC++深入详解》你就知道了，这里一言难尽，好吧，其实我没看懂你想问什么，哈哈~

user: user-12
content: 明显不是C嘛

user: user-13
content: 这是C么？ 哪个版本的C？

user: user-14
content: 我喜欢9楼的头像

user: user-15
content: 谁说C没有构造函数，一样有的，没什么问题。 但不明白楼主的问题是什么？

user: user-16
content: 我瞬间凌乱了！

user: user-17
content: 估计先学C，然后C++，刚学C++的时候，都是这个样子的。 当然，有时候为了 效率-------像C那样编写程序，，，真的有效率吗？----- 和 方便----------C++，，使用C++的某些语法，比如构造函数，比如省略 struct ,比如引用-------， 这种C式的C++也是无可厚非的。
user-0 提问: linux下，c语言工程如何调用c++文件

回复:
user: user-1
content: 有没有返回值，不管返回值是什么类型，都不影响extern "C"的用法

user: user-0
content: 引用 2 楼 brookmill 的回复:编译：  gcc -c -o test.o test.c  g++ -c -o nad.o nad.cpp  g++ test.o nad.o /* nad.h */ #ifdef __cplusplus extern "C" { #endif  int nad(int a, int b);  #ifdef __cplusplus } #endif // nad.cpp extern "C" int nad(int a, int b) {         return a+b; } /* test.c */ #include <stdio.h> #include "nad.h"  int main(void) {         printf("%d\n", nad(1,2));         return 0; }  如果没有返回值，直接使用nad()是不是可以？

user: user-1
content: make报什么错？贴出来看看 用g++编译cpp文件应该没问题。检查一下你的makefile，cpp文件不是用gcc编译的吧？

user: user-0
content: 引用 5 楼 brookmill 的回复:有没有返回值，不管返回值是什么类型，都不影响extern "C"的用法 非常感谢～写的很明白！ 我照这个方法编译了一下，gcc是可以通过的，但最后的make还是报错识别不了cpp文件中的new，delete等等关键字，是不是有这些东西的cpp是无法用在c文件里的？ 无奈最后还是改写成了c文件。。还好工程量不大 折腾了一大圈，学习啦～

user: user-1
content: 这里的要点是让c++的编译器按照c的方式(而不是c++的方式)来编译nad函数。而c文件不需要做任何的特殊处理，就把nad当作普通的c函数调用即可。 所以extern "C"需加到cpp文件里面nad的定义，还有头文件里面nad的声明。当用gcc编译c文件的时候，虽然也包含了头文件，但是extern "C"被ifdef删掉了。

user: user-1
content: 编译：  gcc -c -o test.o test.c  g++ -c -o nad.o nad.cpp  g++ test.o nad.o /* nad.h */ #ifdef __cplusplus extern "C" { #endif  int nad(int a, int b);  #ifdef __cplusplus } #endif // nad.cpp extern "C" int nad(int a, int b) {         return a+b; } /* test.c */ #include <stdio.h> #include "nad.h"  int main(void) {         printf("%d\n", nad(1,2));         return 0; }

user: user-2
content: 不能自己写需要的函数吗？
user-0 提问: 字符从文件中读取的问题

回复:
user: user-0
content: 引用 1 楼 zjq9931 的回复:其实我想说，这种问题，只要会跟踪调试，解决起来很简单的。 我就是用单步调试找出来的

user: user-1
content: 其实我想说，这种问题，只要会跟踪调试，解决起来很简单的。

user: user-2
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
user-0 提问: 先有鸡还是先有蛋？？？

回复:
user: user-1
content: 先有鸡！鸡蛋鸡蛋，鸡在前，未听过蛋鸡！

user: user-2
content: 个人意见，仅供参考： 最早的生物都是不会繁殖后代的生物（也可以不叫其生物），先有一个生物会用DNA繁殖后代，后有一串这个生物死后留下的能繁殖其后代的一串DNA； 最早的鸡都是不会下蛋的鸡（也可以不叫其鸡），先有一只会下鸡蛋的鸡，后有一枚这只会下鸡蛋的鸡下的鸡蛋。

user: user-3
content: 引用 29 楼 zhao4zhong1 的回复:[quote=引用 28 楼 wjfwd2010 的回复:] 世界先有男人还是先有女人？ 先生已经解释了这个问题。 鸡蛋已经解释了这个问题。 现有雌雄同体吧。[/quote] 哈哈我从脑筋急转弯的角度说的。

user: user-2
content: 先有雌雄同体，后有雌雄异体。

user: user-2
content: 引用 28 楼 wjfwd2010 的回复:世界先有男人还是先有女人？ 先生已经解释了这个问题。 鸡蛋已经解释了这个问题。 现有雌雄同体吧。

user: user-3
content: 世界先有男人还是先有女人？ 先生已经解释了这个问题。 鸡蛋已经解释了这个问题。

user: user-4
content: 开关---> 机器语言 电子管开关---> 机器语言 三极管开关-->机器语言  机器语言-------------------------->高级语言            机器语言----> 汇编------->      高级语言  (低级语言-》中级语言-》高级语言) 早期的机器指令很少，可能不需要汇编步骤，直接用机器语言编程，或者直接搞个高级语言（跟汇编指令相似的语言） 使用穿孔纸带控制运行

user: user-5
content: 创建一种语言常用的方法是：  （1）先用这种语言写一个编译器，当然，此时没有编译器程序。然后人肉将这个编译器翻译成机器语言（不求优化），再用这个编译器编译它自己。 （2）先实现一个精简语法的小编译器，再不断扩充，所谓添油战术。 （3）用另外一种语言写编译器。  哲学命题，先有鸡还是先有蛋，理解这个问题的本质是，下蛋的鸡和孵出鸡的蛋是有微小不同的，虽然它们被视作同一个概念。直到量变引起质变，下蛋的“鸡”和我们理解的鸡已经不能算同一个事物了，那么那就是鸡的起源。

user: user-6
content: 引用 16 楼 zhao4zhong1 的回复:人脑和人手。+1

user: user-7
content: 拨弄开关 写的

user: user-8

user: user-9
content: 当然是机器码了

user: user-10
content: 扯淡贴，经常有人说编译器，是鸡蛋，这个那个的，呵呵呵

user: user-11
content: 那么这样写帖子为贵嘛，不违规我重写一个这样的帖子

user: user-2
content: 引用 18 楼 u013697891 的回复:[quote=引用 16 楼 zhao4zhong1 的回复:] 人脑和人手。 我想发个帖子，求助写个软件，这个软件要找个qq好，35*******九位的，昵称是123，像这样的帖子违规吗，我发表了一个帖子好像被删除了[/quote] http://www.csto.com/ 但刚试了打不开。

user: user-11
content: 引用 16 楼 zhao4zhong1 的回复:人脑和人手。 我想发个帖子，求助写个软件，这个软件要找个qq好，35*******九位的，昵称是123，像这样的帖子违规吗，我发表了一个帖子好像被删除了

user: user-12
content: 引用 16 楼 zhao4zhong1 的回复:人脑和人手。 确实，那个时候的电子管电路都是人用手和大脑做出来的。

user: user-2
content: 人脑和人手。

user: user-13
content: 机器语言指令

user: user-14
content: 计算机只认识0和1，所以与计算机最接近最早的一种语言必然是用0和1写的，也就是机器码
user-0 提问: 霍夫曼压缩编码问题

回复:
user: user-1
content: 引用 4 楼 liwenjin1992 的回复:将转化的编码写入硬盘文件中，例如源文件名为qq.doc,压缩后命名为qq.doc.zip 就当做普通的二进制文件写就好了，名字都是自己定的

user: user-0
content: 将转化的编码写入硬盘文件中，例如源文件名为qq.doc,压缩后命名为qq.doc.zip

user: user-2
content: 仅供参考//有一个二进制文件，要求每隔50bits，删除后面的12bits。 #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fi,*fo; char buf[31]; char obf[31]; int bn,n; void filter() {//对buf中前n个字节中的位，每隔50bits，忽略12bits，结果放在obf中,且将bn设置为obf中的字节数。     char bit[249];     char obt[249];     char b8[33];     char b88[33];     int i,j;     char *e;      for (i=0;i<n;i++) {         _itoa(buf[i],b8,2);         sprintf(b88,"%032s",b8);         sprintf(bit+i*8,"%s",b88+24);     }      j=0;     for (i=0;i<n*8;i++) {         if (i%62<50) {             obt[j]=bit[i];             j++;         }     }     if (j%8) {         bn=(j/8+1)*8;     } else {         bn=j;     }     for (i=j;i<bn;i++) obt[i]='0';     obt[bn]=0;     bn=bn/8;     for (i=0;i<bn;i++) {         strncpy(b8,obt+i*8,8);b8[8]=0;         obf[i]=(char)strtol(b8,&e,2);     } } int main() {     fi=fopen("in.bin","rb");     if (NULL==fi) {         printf("Can not open file in.bin!\n");         return 1;     }     fo=fopen("out.bin","wb");     if (NULL==fo) {         fclose(fi);         printf("Can not open file out.bin!\n");         return 2;     }     while (1) {         n=fread(buf,1,31,fi);         if (0==n) break;         filter();         fwrite(obf,1,bn,fo);     }     fclose(fo);     fclose(fi);     return 0; }

user: user-1
content: 楼主会把编码放到内存数组里面吗？

user: user-3
content: 这里有一篇关于霍夫曼编码的文章，楼主可以参考
user-0 提问: 　linux shell  问题

回复:
user: user-1
content: 引用 4 楼 shencallwudi 的回复:this time is:'date'  ./k2.sh: 24: ./k2.sh: [18: not found ./k2.sh: 27: ./k2.sh: [18: not found good evening! back from function evening... back from function greeting.. back from function greeting_again  引用 4 楼 shencallwudi 的回复:this time is:'date'  ./k2.sh: 24: ./k2.sh: [18: not found ./k2.sh: 27: ./k2.sh: [18: not found good evening! back from function evening... back from function greeting.. back from function greeting_again   我上面那句是可以的，刚才试过了，你复制过去试试吧。 hour=$(date +"%H") 看看哪里有不同。

user: user-0
content: this time is:'date'  ./k2.sh: 24: ./k2.sh: [18: not found ./k2.sh: 27: ./k2.sh: [18: not found good evening! back from function evening... back from function greeting.. back from function greeting_again

user: user-1
content: 引用 2 楼 shencallwudi 的回复:this time is:'date'  date: 额外的操作数 "%H" Try 'date --help' for more information. ./k2.sh: 24: [: Illegal number:  ./k2.sh: 27: [: Illegal number:  good evening! back from function evening... back from function greeting.. back from function greeting_again 還是不行啊！ 刚才还有个地方忘记说了  + 和 “%H” 也没有空格，你试试

user: user-0
content: this time is:'date'  date: 额外的操作数 "%H" Try 'date --help' for more information. ./k2.sh: 24: [: Illegal number:  ./k2.sh: 27: [: Illegal number:  good evening! back from function evening... back from function greeting.. back from function greeting_again 還是不行啊！

user: user-1
content: greeting() {    hour= $ (date + %H )  // 这一句出现了错误， = 和$和（） 中间不该出现空格吧？！！ 改成这个样子就好了： hour=$(date +"%H")
user-0 提问: “else”求助！

回复:
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-1
content: if、for、do、while后面都忌讳带多余的分号。

user: user-2
content: 还有就是你的main函数最后应该添加返回值  int main(int argc, char** argv) {     ..........      return 0; }

user: user-3
content: #include <stdio.h> int main() {    int n1,n2;    printf("Input the first number:");    scanf("%d",&n1);    printf("Input the second number:");    scanf("%d",&n2);    if(n1>n2)    { 	   printf("min=%d",n2);    }    else     { 	   printf("min=%d",n1);    } } 改成这样就好了，就是"if(n1>n2);"这个地方多了个";"。

user: user-2
content: 因为楼主if(n1>n2);这句后面不应该加分号    if (conditions) {  } else {  }

user: user-4
content: if(n1>n2); 这里多了个;
user-0 提问: 关于获取文件长度的问题！

回复:
user: user-1
content: 为什么不用 FILE *f; __int64 fl; …… f=fopen(…… …… fl=_filelengthi64(_fileno(f)); printf("%I64d\n",fl); …… fclose(f); 呢？

user: user-2
content: 回车、换行等控制字符对getc族函数有影响，还是不应该用此族函数

user: user-3
content: 当然有种可能，Unicode 文件：如果使用 Unicode 读法前面两个字节不会读到。但使用字节的读法，会读到 Unicode 文件标识符。

user: user-3
content: 结果应该是一样，建议 LZ 上代码来分析原因

user: user-4
content: 结果应该是一样的，可能是代码有问题。fseek和ftell应该是不太会错的，可能是用fgetc循环计数的时候多算或者少算了一个。用操作系统直接看文件的大小，再和你的运行结果对比一下就知道了。  1. 无代码无真相 2. “非常轻微的差别”到底是什么差别 3. windows还是linux还是什么系统

user: user-5
content: 文件里面还会保存一些文件信息，所以用GetFileSize
user-0 提问: Makefile 编译不过去

回复:
user: user-1
content: 搜“跟我一起写makefile”

user: user-2
content: 引用 5 楼 jmppok 的回复:一个工程里面不能包含两个main主要原因是makefile不正确

user: user-3
content: 一个工程里面不能包含两个main

user: user-2
content: 或者你可以这样写：  hello:hello.o           gcc -o  $@  $< hello.o:hello.c           gcc -c $<  world: world.o           gcc -o  $@  $< world.o:world.c           gcc -c $<

user: user-2
content: 第一条规则就写错了，去掉world.o

user: user-1
content: 引用 8 楼 Koptop 的回复:同时编译的文件只能有一个main函数哦  [quote=引用 7 楼 zhao4zhong1 的回复:] 搜“跟我一起写makefile”  这个确实有用，如果你要学Makefile的话[/quote] 谢谢捧场！

user: user-4
content: 同时编译的文件只能有一个main函数哦  引用 7 楼 zhao4zhong1 的回复:搜“跟我一起写makefile”  这个确实有用，如果你要学Makefile的话

user: user-5
content: 不是Makefile的问题，而是编译命令不会使用，更确切来说是对C语言的编译链接不熟悉。熟悉C语言的编译链接过程再去好好学Makefile的使用吧。这样才能事半功倍。

user: user-6
content: 不能定义两个main程序的。编译器不知道该用哪个main作为目标程序了。
user-0 提问: 归并排序小问题

回复:
user: user-1
content: r是辅助数组，merge 完后要拷贝回去。 加两行代码就可以了。 如下 #include <stdio.h>  void merge (int *a, int *r, int s, int m, int n) {     int i = s, j = m+1, k = s;      while (i <= m && j <= n)     {         if (a[i] <= a[j])             r[k++] = a[i++];         else             r[k++] = a[j++];     }      if (i <= m)     {         while (i <= m)             r[k++] = a[i++];     }     else if (j <= n)     {         while (j <= n)             r[k++] = a[j++];     }     // copy back     for( i = s; i <=n; i++ )         a[i] = r[i]; }  void mergesort (int *a, int *r, int s, int n) {     int m;      if (s == n)         ;     else     {         m = (s + n) / 2;         mergesort(a, r, s, m);         mergesort(a, r, m+1, n);         printf("s=%d, m=%d, n=%d\n", s,m,n);         merge(a, r, s, m, n);         printf("==>\n");     } }
user-0 提问: 关于冒泡法算法

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  void bubblesort(int a[], int n) {    	int exchange; 	int i, j, k; 	for (i = 0; i < n; i++) 	{    		exchange = 0; 		for ( j = 1; j < n - i; j++) 		{  			if (a[j - 1] > a[j]) 			{ 				k = a[j]; 				a[j] = a[j - 1]; 				a[j - 1] = k; 				exchange = 1; 			} 		}  		if (exchange != 1) 			break; 	} }  int main() {    	int b[6] = {1, 23, 12, 34, 22, 14}; 	bubblesort(b, 6);  	for (int i = 0; i < 6; i++) 		printf("%d\n", b[i]); 	 	return 0; }

user: user-0
content: 感谢各位大神帮忙，终于搞懂了~

user: user-2
content: void bubblesort(int a[], int n) { 	int exchange; 	int i,j,k; 	for(i=0; i<n-1; i++) { 		exchange = 0; 		for(j=1; j<n-i; j++) { 			if(a[j-1] > a[j]) { 				k = a[j]; 				a[j] = a[j - 1]; 				a[j - 1] = k; 				exchange = 1; 			} 		} 		if(exchange != 1) 			break; 	} 	for(i=0; i<n; i++) 		printf("%5d", a[i]); 	printf("\n"); }

user: user-3

user: user-3
content: 引用 5 楼 hahahahaboyboy 的回复:加了括号好像还是不行 二楼的程序难道不行吗？

user: user-1
content: #include <iostream> using namespace std;  // 冒泡排序 void BubbleSort(int data[], int count) { 	int aux = 0; 	bool swap_flag = true;  	for (int i = 0; i < count && swap_flag; ++i) 	{ 		swap_flag = false; 		for (int j = count - 1; j > i; --j) 		{ 			if (data[j] < data[j - 1]) 			{ 				aux = data[j - 1]; 				data[j - 1] = data[j]; 				data[j] = aux;  				swap_flag = true; 			} 		} 	} }  int main() { 	int array[] = {9, 6, 3, 8, 7, 1, 5, 2, 4};  	BubbleSort(array, 9);  	for(int i = 0; i < 9; ++i) 		cout << array[i] << endl;  	return 0; }

user: user-4
content: #include<stdio.h> #include<stdlib.h> void bubblesort(int a[],int n) {   int exchange;     int i,j,k; 	for(i=0;i<n;i++) 	{    		exchange=0; 		for(j=1;j<n-i;j++) 		{  			if(a[j-1]>a[j]) 			{ 				k=a[j]; 			a[j]=a[j-1]; 			a[j-1]=k; 			exchange=1; 			} 		} 		//if(exchange!=1) 		//	exit(0); 	} 	printf("排序后："); 	for(i=0;i<n;i++) 		printf("%5d",a[i]); 	printf("\n"); } int main() {    	int i,b[6]={1,23,12,34,22,14}; 	printf("排序前："); 	for(i=0;i<6;i++) 		printf("%5d",b[i]); 	printf("\n"); 	bubblesort(b,6); 	return 0; }

user: user-0
content: 之前没有排版不好意思，这个版本比较清晰~

user: user-0
content: 加了括号好像还是不行

user: user-0
content: 加个是exchange 用来判断是否排序完成

user: user-3
content: 楼主为啥要加一个 exchange 啊？

user: user-3
content: # include <stdio.h> # include <stdlib.h>  void bubblesort(int a[],int n) {    	int exchange; 	int i, j, k; 	for(i=0; i<n; i++) 	{   		exchange = 0; 		for(j=1; j<n-i; j++) 		{  			if(a[j-1] > a[j]) 			{ 				k = a[j]; 				a[j] = a[j-1]; 				a[j-1] = k; 				exchange = 1; 			} 		} //		if(exchange != 1) //			exit(0); 	} 	for(i=0; i<n; i++) 		printf("%5d", a[i]); 	printf("\n"); }  int main(void) {   	int i, b[6] = {1, 23, 12, 34, 22, 14}; 	for(i=0; i<6; i++) 		printf("%5d", b[i]);  	printf("\n");    	bubblesort(b, 6); 	 	return 0; }

user: user-5
content: 这代码排版的，真是难看。好像是少了{} 吧   for(i=0;i<n;i++) { 	for(j=1;j<n-i;j++) 	{ 		if(a[j-1]>a[j]) 		{   		    k=a[j];   		    a[j]=a[j-1];   		    a[j-1]=k;   		    exchange=1;                ｝   	} }
user-0 提问: 数据结构课程设计家谱管理，求大神帮助，网上找的源代码错误太多啦

回复:
user: user-1
content: 弄本C语言描述的数据结构书翻翻

user: user-2
content: 这是树的代码吧。。。

user: user-3
content: 简单一些的用链表 复杂一些的用树结构 注：     计划生育做得好可以用四叉树     不然用八叉树，  要说代码，我也觉得除非是学生， 不然不会花时间给你写这个用不上的东西 还是自己实现练练手吧

user: user-4
content: 估计不会有人直接回答的，这个网上一搜有不少，还是自己找一个错误少的慢慢改吧，这样还能学到一些东西

user: user-5
content: 《算法精解（C语言描述）》
user-0 提问: C和win32是什么关系？？？

回复:
user: user-0
content: 引用 10 楼 zhucz333 的回复:这个问题，感觉楼主对C win32 API win32汇编等等名词还没有区分清楚  win32 API 就是windows提供的一套系统接口，可以是汇编语言实现，也可以是C语言实现，或者其它语言什么的，那不是我们关注的，对于API的用户而言，只是使用其功能，可以理解为黑盒子上的几个接口而已。 win32 汇编我的理解应该是在汇编语言下使用API，没有别的什么，和C环境使用win32 API的道理一样，没有什么特殊的 我懂了，接口不同，但其实都是一样的API。是这样吧？

user: user-1
content: 这个问题，感觉楼主对C win32 API win32汇编等等名词还没有区分清楚  win32 API 就是windows提供的一套系统接口，可以是汇编语言实现，也可以是C语言实现，或者其它语言什么的，那不是我们关注的，对于API的用户而言，只是使用其功能，可以理解为黑盒子上的几个接口而已。 win32 汇编我的理解应该是在汇编语言下使用API，没有别的什么，和C环境使用win32 API的道理一样，没有什么特殊的

user: user-2
content: 顾名思义 http://www.baidu.com/s?wd=api%E7%9A%84%E6%84%8F%E6%80%9D&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=6&rsv_sug4=48&rsv_sug1=6&oq=API%E7%9A%84&rsv_sug2=1&f=3&rsp=0&inputT=6890

user: user-3
content: 引用 7 楼 asdas434123 的回复:之前对api概念很模糊，是不是这样，API有用C写的也有用汇编写的，C和汇编都有自己的api？ 更合理的说法是：API的C语言接口，API的汇编语音接口。

user: user-0
content: 之前对api概念很模糊，是不是这样，API有用C写的也有用汇编写的，C和汇编都有自己的api？

user: user-2
content: 被称为“大师”了。窃喜中……

user: user-2
content: 机械制造能不能实现汽车的离合器的功能？？？机械制造是不是不用管橡胶和金属材料，不用记那么多齿轮和标准零件参数？？相对来说比金属冶炼简单？

user: user-3
content: 引用 2 楼 asdas434123 的回复:[quote=引用 1 楼 zjq9931 的回复:] [quote=引用 楼主 asdas434123 的回复:] C语言里能不能实现win32的api函数编写出来功能？？？C是不是不用定义数据段和资源，不用记那么多API函数和参数？？相对来说比win32汇编简单？ win32是一个平台。 只要编译器支持这个头文件包含：window.h API函数，是windows提供的编程接口，不是C语音的库函数，必须要用的。 C语音没有实现界面的库函数。要使用平台，系统提供的编程接口才行。所以api函数是必须要学的。  如果用java 则有自己的一套实现界面的方案.swing接口。跨平台。 [/quote] 还一个疑问，以下引用大师的话：计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 上面的汇编语言指的就是win32汇编吧？[/quote] 如果是用来分析代码的话，肯定是的。

user: user-2
content: 机械制造和汽车是什么关系？？？

user: user-0
content: 引用 1 楼 zjq9931 的回复:[quote=引用 楼主 asdas434123 的回复:] C语言里能不能实现win32的api函数编写出来功能？？？C是不是不用定义数据段和资源，不用记那么多API函数和参数？？相对来说比win32汇编简单？ win32是一个平台。 只要编译器支持这个头文件包含：window.h API函数，是windows提供的编程接口，不是C语音的库函数，必须要用的。 C语音没有实现界面的库函数。要使用平台，系统提供的编程接口才行。所以api函数是必须要学的。  如果用java 则有自己的一套实现界面的方案.swing接口。跨平台。 [/quote] 还一个疑问，以下引用大师的话：计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 上面的汇编语言指的就是win32汇编吧？

user: user-3
content: 引用 楼主 asdas434123 的回复:C语言里能不能实现win32的api函数编写出来功能？？？C是不是不用定义数据段和资源，不用记那么多API函数和参数？？相对来说比win32汇编简单？ win32是一个平台。 只要编译器支持这个头文件包含：window.h API函数，是windows提供的编程接口，不是C语音的库函数，必须要用的。 C语音没有实现界面的库函数。要使用平台，系统提供的编程接口才行。所以api函数是必须要学的。  如果用java 则有自己的一套实现界面的方案.swing接口。跨平台。
user-0 提问: 求帮忙改下这个代码！  我改了好久也不懂

回复:
user: user-0
content: 非常感谢你的帮忙！

user: user-1
content: void FindRecord(RECORD* pHead) { 	while (1) 	{ 		FindMenue(); 		switch (FindMenuRes()) 		{ 		case '0': 			return; 		case '1': 		{ 					char name[20] = "";  					printf("\t\t请输入学生姓名:"); 					fflush(stdin);//清空缓存 					gets(name); 					//用于显示姓名为name的所有结点信息 					FindByName(pHead, name); 		} 			break; 		case '2': 		{ 					char num[20] = "";  					printf("\t\t请输入学生学号:"); 					fflush(stdin);//清空缓存 					gets(num);	 //用于显示学号为num的所有结点信息 					FindByNum(pHead, num); 		} 			break; 		case '3': 		{ 					char spec[21] = ""; 					printf("请输入学生专业："); 					fflush(stdin); 					gets(spec); 					FindBySpec(pHead, spec); 		} 			break; 		case '4': 		{ 					int clas_1; 					char clas[40]; 					printf("请输入学生年级："); 					fflush(stdin); 					scanf("%d", &clas_1); 					itoa(clas_1, clas, 4); 					FindByclas(pHead, clas); 		} 			break;  		default: 			printf("请选择[0-4]:"); 			system("cls"); 		} 	} }  void FindMenue(void) { 	system("cls"); 	printf("\t\t\t--------查找菜单---------\n"); 	printf("\t\t\t1.按姓名查找。\n"); 	printf("\t\t\t2.按学号查找。\n"); 	printf("\t\t\t2.按专业查找。\n"); 	printf("\t\t\t2.按班级查找。\n"); 	printf("\t\t\t0.返回主菜单。\n"); 	printf("\t\t\t-------------------------\n"); 	printf("\t\t请选择:"); }  char FindMenuRes(void) { 	char sel[100] = ""; 	gets(sel); 	if (strlen(sel) != 1 		|| sel[0] > '4' 		|| sel[0] < '0') 	{ 		return -1; 	} 	else 	{ 		return sel[0]; 	} }
user-0 提问: Linux 怎么用shell写个守护进程

回复:
user: user-1
content: http://blog.csdn.net/guoyilongedu/article/details/42835931

user: user-2
content: 引用 楼主 xiaomi163 的回复:写一个daemon  shell脚本： 脚本启动后，脚本死循环的形式在后台运行，当前启动脚本的终端关闭后，脚本仍能够正常运行。 ./shell.bin &

user: user-3
content: 引用 2 楼 chenbin0522 的回复:#!/bin/bash  exec 2>&1 exec /opt/program -para   晕，看错标题，我以为是写daemon tools的run脚本。

user: user-4
content: nohup ./youshell.sh &

user: user-5
content: 顶1L，&可以使脚本后台执行，nohup可以使得进程脱离shell（即退出登录脚本仍然执行）

user: user-3
content: #!/bin/bash  exec 2>&1 exec /opt/program -para
user-0 提问: C语言新手求助 急！！！

回复:
user: user-1
content: 属于数组越界了

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

user: user-3
content: 那把数据的值开大一点呢？？虽然会造成内存浪费， 但可以等以后自己技术厉害一点了， 在回来该啊！！！！！！！

user: user-0
content: 引用 4 楼 whustyle 的回复:xinxi[20][5]最好不要用char类型定义，应为你是希望存储20个人5类信息，改成结构体吧 struct Friends{     char No[30];     char Name[10];     char Sex[10];     int Age;     char Tel[20]; }xinxi[20] 我不会用结构体，能帮忙把完整的代码发给我吗？万分感谢

user: user-4
content: char xinxi[20][5];  scanf_s("%s", &xinxi[i][j]); /*注意这时候是把用户输入的数据按照 %s (即字符串)的形式放到 &xinxi[i][j] 里面， 但是 &xinxi[i][j] 又是什么呢？它是一个二维字符数组中某个元素的地址，只能装一个字节的数据。 你把一个字符串装进一个只能容纳单个字符的内存空间里，不出错才怪。 */

user: user-5
content: 应该是数组越界了

user: user-6
content: xinxi[20][5]最好不要用char类型定义，应为你是希望存储20个人5类信息，改成结构体吧 struct Friends{     char No[30];     char Name[10];     char Sex[10];     int Age;     char Tel[20]; }xinxi[20]

user: user-0
content: 引用 1 楼 91program 的回复:应该是数组越界了 引用 2 楼 crestine 的回复:char xinxi[20][5];  scanf_s("%s", &xinxi[i][j]); /*注意这时候是把用户输入的数据按照 %s (即字符串)的形式放到 &xinxi[i][j] 里面， 但是 &xinxi[i][j] 又是什么呢？它是一个二维字符数组中某个元素的地址，只能装一个字节的数据。 你把一个字符串装进一个只能容纳单个字符的内存空间里，不出错才怪。 */   那我要怎么修改那？
user-0 提问: 请教一个补码运算的问题

回复:
user: user-1
content: 引用 4 楼 u010486937 的回复:128的补码是10000000b（即128） -128的补码也是10000000b按位取反（此时为01111111b)再加1（此时为10000000） 由于char只能保存-128到127之间的数据，所以依据结果的补码（10000000b)可知结果为-128

user: user-2
content: 128的补码是10000000b（即128） -128的补码也是10000000b按位取反（此时为01111111b)再加1（此时为10000000） 由于char只能保存-128到127之间的数据，所以依据结果的补码（10000000b)可知结果为-128

user: user-3
content: 是的，char 的取值（-128，127）， 128，原码10000000，在计算机中补码表示10000000，但signed char表示出来的是-128， 同理，如果-128-1，即-129，原码10000001，在计算机中补码表示为01111111，sighed char  打印出来（%d）是127  0- （-128）计算出是128，故结果 -128

user: user-4
content: 我想应该是-128，

user: user-5
content: 这种运算溢出的结果应该属于未定义行为吧
user-0 提问: 求C语言插入图片函数和音乐函数

回复:
user: user-1
content: 和具体的平台相关，什么平台？

user: user-2
content: 什么叫插入？

user: user-3
content: 图片不知道，音乐只知道背景音乐——http://blog.csdn.net/u012421456/article/details/18887643
user-0 提问: printf.c: 没有那个文件或目录

回复:
user: user-1
content: 路径问题吧。。。

user: user-2
content: 看看这个

user: user-2
content: 在glibc的调试包中

user: user-3
content: #4说的对，我也遇到这样的情况了，改成n(next)，不进入函数就好了，又不要调试printf函数，所以在printf函数语句之前用next调试命令，不进入printf函数。

user: user-4
content: 贴源码啊，估计是lz把文件目录搞错了

user: user-5
content: 文件名或路径是否正确？

user: user-6
content: 贴源代码

user: user-7
content: LZ想step into printf函数，当然得有printf的定义文件了。
user-0 提问: 能不能再if语句中给数组赋初值

回复:
user: user-1
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-2
content: 引用 9 楼 u012421456 的回复:不可以吗？可以参考

user: user-3
content: 引用 13 楼 lin5161678 的回复:引用 9 楼 u012421456 的回复:不可以吗？C语言不可以的 不要和C++ 混淆了 我刚才仔细看了看，的确是C++可以，C不可以，新手又犯错误了，唉，谢谢指点啊

user: user-4
content: 不可以  原因是 if()这里只能写语句  而声明不是语句  不符合语法 所以不行

user: user-4
content: 引用 9 楼 u012421456 的回复:不可以吗？C语言不可以的 不要和C++ 混淆了

user: user-5
content: 引用 8 楼 lpcads 的回复:[quote=引用 1 楼 u013163564 的回复:] c语言所有的变量定义都要放在函数开头，谢谢 目测老谭和 (或) TC 的受害者。[/quote] 好吧，是我的错，但在VC6.0中c后缀确实只可以在函数前面使用，刚在linux中使用gcc的时候是可以的，我不知道其他版本会不会有这样的问题

user: user-5
content: 引用 8 楼 lpcads 的回复:[quote=引用 1 楼 u013163564 的回复:] c语言所有的变量定义都要放在函数开头，谢谢 目测老谭和 (或) TC 的受害者。[/quote] 目测你写C文件的时候后缀是.cpp的，谢谢

user: user-6
content: 作用域的问题。如果在if/else都加上{}就很容易明白了。

user: user-3
content: 不可以吗？

user: user-7
content: 引用 1 楼 u013163564 的回复:c语言所有的变量定义都要放在函数开头，谢谢 目测老谭和 (或) TC 的受害者。

user: user-8
content: 不可以。  LZ的问题可以这样解决： int days[][12]= {{31,28,31,30,31,30,31,30,31,30,31,30}, {31,29,31,30,31,30,31,30,31,30,31,30}};  number_of_days_in_month = days[is_leap(year)][month];

user: user-9
content: int a[12]={31,28,31,30,31,30,31,30,31,30,31,30}; if(leap(y,m,d))  a[1] = 29;

user: user-10
content: 引用 4 楼 a515360208 的回复:标准C的变量声明必须放在最前面、、、、、、、  从c99标准开始，变量声明就已经可以不在语句之前了。楼主换了个新版本的编译器吧。

user: user-11
content: 标准C的变量声明必须放在最前面、、、、、、、

user: user-12
content: 引用 1 楼 u013163564 的回复:c语言所有的变量定义都要放在函数开头，谢谢不用好吗，在while语句里也可以定义变量啊！只是它的变量的俢域范围不一样而已！

user: user-12
content: a的作用域只在if的内部。像下面这样的代码：if (1) {     int a = 1;     printf("\n %d",a); } else {     int a = 2;     printf("\n %d", a); }  这样是可以的。但如果在这个语句的下面加上  printf("\n %d", a); 这样都会报上面的错误！

user: user-5
content: c语言所有的变量定义都要放在函数开头，谢谢
user-0 提问: 关于sscanf

回复:
user: user-1
content: 你自己解决了，接分^_^ 引用 1 楼 qin_lin_sb 的回复:找到原因了，忘了取地址了 sscanf(str,  "(%u,%u):(%u,%u):%u", &begx, &begy, &endx, &endy, &type) ;

user: user-2
content: sscanf用的不多吧

user: user-3

user: user-4
content: 引用 1 楼 qin_lin_sb 的回复:找到原因了，忘了取地址了 sscanf(str,  "(%u,%u):(%u,%u):%u", &begx, &begy, &endx, &endy, &type) ;

user: user-0
content: 找到原因了，忘了取地址了 sscanf(str,  "(%u,%u):(%u,%u):%u", &begx, &begy, &endx, &endy, &type) ;
user-0 提问: 这个程序怎么读不进数据？？？C语言

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

user: user-2
content: void init() {     int a[N]={0},i,j,sq=(int)sqrt(N)+1;     for(i=0;i<sq;i++)     {         if(a[i]==0)         {             j=2;             while(i*j<N)  a[j++*i]=1;         }     }     for(j=0,i=2;i<N;i++)     {         if(a[i]==0)            prime[j++]=i;     } } 函数中第一个for循环出现问题了，应该是死循环了，所以你在函数后面调用的scanf就没有作用了

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <math.h>  int N = 200; int prime[200]; int Isprime(int n) { 	for(int i=2;i<=sqrt(N*1.0);i++) 	{ 		if(n%i==0)  return 0; 	} 	return 1; }  void init() { 	int a[200]; 	ZeroMemory(a,_countof(a)); 	 	int sq=(int)sqrt(N*1.0); 	int i,j=0; 	for(i=0;i<sq+1;i++) 	{ 		if(a[i]==0) 		{ 			j=2; 			 			while(i*j<N)   				a[j++*i]=1; 		} 	} 	for(j=0,i=2;i<N;i++) 	{ 		if(a[i]==0) 			prime[j++]=i; 	} }  void solve() { 	int a,i,count=0; 	scanf("%d",&a); 	if(Isprime(a)) 	{ 		printf("(%d,1)\n",a); 	} 	else 	{ 		for(i=2;i<(sqrt(N*1.0)+1);i++) 		{ 			if(a%i==0) 			{ 				while(a%i==0) 				{ 					count++; 				} 				printf("(%d,%d)",i,count); 			} 		} 	} }   int Isprime(int n); void solve(); void init();   int main() {  	int T,t;  	init(); 	scanf("%d\n",&T); 	for (t=0;t<T;t++) 	{ 		printf("case #%d:\n",t); 		solve(); 	} 	return 0; }  我只是让你能调试成功，while(i*j<N)  a[j++*i]=1;数组肯定会越界的，你在好好看看吧
user-0 提问: strnlen_s函数返回值的调用问题

回复:
user: user-1
content: C99以上才支持可变长度数组的定义吧。

user: user-0
content: 引用 楼主 qq1282456555 的回复:strnlen_s函数返回的值算是是什么。不可以当变量用吗strnlen_s返回的数值能用于定义数组维数吗  char a[1 + strnlen_s(a,sizeof(a)) + 1 ];  书上这么写的 但是我打出来是错误的

user: user-0
content: strnlen_s返回的数值能用于定义数组维数吗  char a[1 + strnlen_s(a,sizeof(a)) + 1 ];  书上这么写的 但是我打出来是错误的

user: user-2
content: 引用 3 楼 modyaj 的回复:返回值是右值  不能作为变量使用

user: user-3
content: 返回的是字符长的长度值，可以迭代使用，不能作为左值。  引用 楼主 qq1282456555 的回复:strnlen_s函数返回的值算是是什么。不可以当变量用吗

user: user-4
content: 返回值是右值  不能作为变量使用

user: user-5
content: 返回值当变量使用？strlen_s(xxxxx) = n?这样吗？

user: user-6
content: size_t __cdecl strnlen(const char *str, size_t maxsize) {     size_t n;      /* Note that we do not check if s == NULL, because we do not      * return errno_t...      */      for (n = 0; n < maxsize && *str; n++, str++)         ;      return n; }  返回的是字符串的长度（不超过指定最大值，超过，则返回指定值），可以像strlen一样在语句中使用 如 int i = xxx(strnlen_s(strxxx, 512)); xxx函数返回一个int值
user-0 提问: 51单片机子函数直接调用数组需要多少个机械周期

回复:
user: user-1
content: uint 不是C51数据类型，这要看你如何定义uint 这和数据长度，数据所在区域有关， 外部RAM， 包括芯片内部的XRAM，需要 通过DPTR读写 指令执行时间比较长 Data 区域的。可以用 R0，R1两个指针读写，执行时间比较短

user: user-2
content: 看转换成的汇编指令，根据汇编指令来算周期
user-0 提问: 字符常量使用的作用域问题。

回复:
user: user-1
content: 我的理解，你想通过setstring的形参作用域传递地址值，并且你的指针常量定义的作用域在代码块内，这样它的存储类型是自动变量，会随着作用域消失的。 总结： 1，你没有返回值，函数的形参作用域，随代码块执行后没有了。所以你不能把你定义的常量返回给变量ButtonText 。 2，你的常量定义的存储类型是自动变量。setstring函数执行后会被其他值覆盖。  你可以把程序改成这样就可以，打印出“1234”的字符串了。 代码： #include<stdio.h> #include<stdlib.h> char* setstring(char *Text);   int main(){          char* ButtonText;     ButtonText = setstring(ButtonText);         printf(ButtonText);          system("pause");     return EXIT_SUCCESS;     }      char* setstring(char *text) {  static char tmptext[]="1234";   //用static 改变变量的存储类型为静态的     text = tmptext;     return text; }

user: user-2
content: 用** tmptexT

user: user-3
content: 当然会消失，tmptext是局部变量，函数调用结束后就释放了。

user: user-4
content: tmptext是局部变量，所谓局部变量就是该变量只作用在它最内层的大括号，出了距离其最近的大括号则变量被释放。在这里，出了函数setstring后，tmptext即被释放，所以text将指向一个野指针

user: user-5
content: setstring(char *)中的tmptext改为：char  *tmptext="1234”。就可以了。数组在该函数中是局部变量，不能正确返回。

user: user-6
content: 1.你的setstring函数传进去的是char* ButtonText这个变量的值，而不是地址。 2. tmptext数组是指向常量的指针。text = tmptext;你是想将tmptext的地址赋给text，这是不行的，text是局部变量，退出setstring函数后主函数的text并没有改变   建议你看看《c和指针》 在这里发帖倒不如用这些时间去看看书

user: user-7
content: 另外，多线程的话，会错得一塌糊涂。

user: user-7
content: 这个其实就是测不准原理的，人择原理在起作用了。 不是得不到，而是得到一个不可用的数据。 不使用，数据是1234没错 用了，可能就不是1234了。  使用的过程，改变了被使用的数据，这个改变过程，不是你能够控制的。

user: user-7
content: 1）1234 不会马上消失，但是会胡乱变化，不是你想要的。。 不是函数退出就会消失，而是当你使用的时候，非常可能，得不到1234。 2）这种写法是错误的，没有达到set的目的，和函数名不符，会造成逻辑混乱。 程序写的是逻辑，所以函数名要有意义，并且要名副其实。 PS： 这么做就够了 char* setstring(char *text, int n) {      return strncpy(text, "1234",min(n,4));//<==>strncpy(text, "1234",min(n,4));return text; } //或者 char* setstring(char *text) {     return strncpy(text, "1234",4);//其实可以strncpy(text, "1234");的，不过处于代码安全考虑，改用strncpy  }
user-0 提问: c语言的编译器

回复:
user: user-1
content: 最新的gcc或者VC。

user: user-2
content: gcc

user: user-3
content: 装个虚拟机用 gcc

user: user-4
content: 我的资源例有这个完整绿色版

user: user-4
content: 引用 4 楼 lqj529 的回复:谢谢！是吗？我这里提示vc++6.0不兼容的喔 我的是完整绿色版，你可以试试吧可执行文件MSDEV.EXE稍微改一下名字试试（如果你还想继续用这个），不过不推荐使用这个，太老了，许多新的标准都不支持

user: user-0
content: 谢谢！是吗？我这里提示vc++6.0不兼容的喔

user: user-5
content: QT，虚拟机

user: user-4
content: VC6.0可以的，我现在win8.1还装着VC6.0呢！不过不怎么用了，可以使用C-Free，这儿有地址——http://download.csdn.net/detail/u012421456/7374337，也可以装过VS。建议2010及以上版本

user: user-6
content: 威力强大的大型装备，可以选VS2013，微软官网上找，而且强力推荐 如果是Linux下工作，选择gcc吧

user: user-7
content: 用Code::Blocks(http://www.codeblocks.org)吧。
user-0 提问: 数据结构程序设计马上要答辩，很着急，求大神帮忙啊55555

回复:
user: user-1
content: 如果自己写了代码没？如果没有，以后想干什么？

user: user-2
content: 参考Linux下sed awk grep的源代码。

user: user-3
content: 这么问一般不会有人直接回答的， 可以看这个搜索，然后把前边两个结合一下——http://www.baidu.com/s?ie=utf-8&bs=文本查找与替换工具&f=8&rsv_bp=1&wd=数据结构程序设计文本查找与替换工具&rsv_sug3=16&rsv_sug4=3313&rsv_sug2=0&inputT=8392
user-0 提问: 驱动卸载蓝屏，符号链接读取出错

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:最好把其他部分放出来， 这些代码看不出问题。 或者你简化一下， 自己测试看看是那块的问题 其他地方都没有调用到的样子。。我就是加载、卸载。他就不行。

user: user-1
content: 最好把其他部分放出来， 这些代码看不出问题。 或者你简化一下， 自己测试看看是那块的问题