Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 32位机 怎样计算64位减法

回复:
user: user-1
content: /**	$NetBSD: subdi3.c,v 1.9 2005/12/11 12:24:37 christos Exp $	*/  /**-  * Copyright (c) 1992, 1993  *	The Regents of the University of California.  All rights reserved.  *  * This software was developed by the Computer Systems Engineering group  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and  * contributed to Berkeley.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  * 3. Neither the name of the University nor the names of its contributors  *    may be used to endorse or promote products derived from this software  *    without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  * SUCH DAMAGE.  */  /**#include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) #if 0 static char sccsid[] = "@(#)subdi3.c	8.1 (Berkeley) 6/4/93"; #else __RCSID("$NetBSD: subdi3.c,v 1.9 2005/12/11 12:24:37 christos Exp $"); #endif #endif*/ /** LIBC_SCCS and not lint */  #include "quad.h"  /**  * Subtract two quad values.  This is trivial since a one-bit carry  * from a single u_int difference x-y occurs if and only if (x-y) > x.  */ quad_t __subdi3(a, b) 	quad_t a, b; { 	union uu aa, bb, diff;  	aa.q = a; 	bb.q = b; 	diff.ul[L] = aa.ul[L] - bb.ul[L]; 	diff.ul[H] = aa.ul[H] - bb.ul[H] - (diff.ul[L] > aa.ul[L]); 	return (diff.q); }

user: user-2
content: 这个是使用数学函数库的，我们不用管的。

user: user-3
content: 加法器~~~~

user: user-4
content: (high1*2^32 + low1) - (high2*2^32 + low2) =(high1 - high2)*2^32 + (low1 - low2)  任意一个64位数应该都等于高位数字乘以2^32加上低位数字，再根据上面的公式算就是了~

user: user-5
content: 和手工计算一样 先判断低位，如果第一个数字小，那么第一个数字高位-1（借位）     低位=0xffffffff-(第二个数-第一个数) 否则     低位=第一个数-第二个数 然后高位相减

user: user-6
content: 应当有这样的库，你搜搜bigint library？ 另外，如果只做加减法应当不难。标准库里好像有函数判断是否溢出什么的。

user: user-0
content: 运行环境是STM32，只能支持32位运算。

user: user-7
content: 如果你不是用汇编的话，和32位机还是64位没有关系，ansi c本来就有64位的long long型。先加再减或者减了再加都行。
user-0 提问: 2个文件，一个存放main()函数，一个存放自定义函数，哪个阶段合并

回复:
user: user-1
content: 在链接的时候会进行合并。  引用 楼主 u013393674 的回复:我用keil编写c语言程序， 该程序由2个文件组成，一个文件存放main()函数，一个文件存放自定义函数func()，其中main()函数中要使用到自定义函数func()， 那么该程序需要经过 预编译--编译--汇编--链接 这4个步骤。 我想问的是：在哪个阶段，2个文件合并成一个文件啊？ 是在编译之前，将2个文件合并成一个文件，然后进行编译？ 还是编译的时候每个文件单独编译，在链接阶段合并成一个程序文件？ 引用 楼主 u013393674 的回复:我用keil编写c语言程序， 该程序由2个文件组成，一个文件存放main()函数，一个文件存放自定义函数func()，其中main()函数中要使用到自定义函数func()， 那么该程序需要经过 预编译--编译--汇编--链接 这4个步骤。 我想问的是：在哪个阶段，2个文件合并成一个文件啊？ 是在编译之前，将2个文件合并成一个文件，然后进行编译？ 还是编译的时候每个文件单独编译，在链接阶段合并成一个程序文件？

user: user-2
content: 如果一个文件#include另一个文件, 在预编译的时候合并 如果两个独立的.c文件, 在链接的时候合并

user: user-3
content: 比如文件是 main.c和func.c，那么编译后生成main.o和func.o，两个文件还是独立的，链接后，才成了一个文件。

user: user-4
content: 以gcc为例（微软的cl没用过）： gcc -c -o main.o main.c gcc -c -o my_lib.o my_lib.c gcc -o app main.o my_lib.o

user: user-5
content: 预编译--编译--链接 编译的时候每个文件单独编译，在链接阶段合并成一个程序文件
user-0 提问: main函数如何调用其他文档的函数

回复:
user: user-1
content: main函数中调用t2fun不是这样：void t2fun();（看你贴的图是这样的），直接写t2fun()就可以了。 c++才允许函数原型参数为空，比如void main()，c要写上void，比如void main(void) 引用 10 楼 u013410394 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] t1.c: #include <stdio.h> #include "t.h" int main() {  t2fun();  return 0; } t.h: void t2fun();按您说的，结果不跳出来，只有main的printf会输出 t2.c void t2fun() {  printf("in t2fun()\n"); } [/quote]

user: user-2
content: 我之前搞错了，纠正为： t1.c: #include "t.h" int main() {  t2fun();  return 0; }  t2.c: #include <stdio.h> void t2fun() {  printf("in t2fun()\n"); }  t.h不变。

user: user-3
content: void t2fun(); -->t2fun();

user: user-4
content: 引用 11 楼 u013410394 的回复:[quote=引用 8 楼 derekrose 的回复:] compile error 是什么 您看看十楼我发的图片，结果不跳出来，编译成功了。被调用函数不跳出结果[/quote]  debug 设断点

user: user-0
content: 引用 8 楼 derekrose 的回复:compile error 是什么 您看看十楼我发的图片，结果不跳出来，编译成功了。被调用函数不跳出结果

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:t1.c: #include <stdio.h> #include "t.h" int main() {  t2fun();  return 0; } t.h: void t2fun();按您说的，结果不跳出来，只有main的printf会输出 t2.c void t2fun() {  printf("in t2fun()\n"); }

user: user-5
content: 引用 7 楼 u013410394 的回复:引用 5 楼 bijiaoben 的回复:你是编译连接不过还是运行不了？编译连接不过 把你自己写的简单代码和错误提示都贴上来

user: user-4
content: compile error 是什么

user: user-0
content: 引用 5 楼 bijiaoben 的回复:你是编译连接不过还是运行不了？编译连接不过

user: user-2
content: t1.c: #include <stdio.h> #include "t.h" int main() {  t2fun();  return 0; } t.h: void t2fun(); t2.c void t2fun() {  printf("in t2fun()\n"); }

user: user-5
content: 你是编译连接不过还是运行不了？

user: user-0
content: 引用 3 楼 derekrose 的回复:[quote=引用 2 楼 u013410394 的回复:] [quote=引用 1 楼 derekrose 的回复:] #include xxxxx 这个我知道，我是要更详细的[/quote]  include之后直接调用就可以了[/quote] 我试过，不行，一直跳错误，如果你真的懂的话，麻烦您直接给我两个列子，可以直接运行的。你可以直接写text1：.......... main文件：.......... 然后我直接运行main函数就成功运行，那我直接就给分了。

user: user-4
content: 引用 2 楼 u013410394 的回复:[quote=引用 1 楼 derekrose 的回复:] #include xxxxx 这个我知道，我是要更详细的[/quote]  include之后直接调用就可以了

user: user-0
content: 引用 1 楼 derekrose 的回复:#include xxxxx 这个我知道，我是要更详细的

user: user-4
content: #include xxxxx
user-0 提问: Labwindows/CVI中的fets()函数的疑问

回复:
user: user-0
content: 谢谢高手的指点，我现在明白了C语言的前导空格这个概念了，后来百度了下还有尾随空格这一概念

user: user-1
content: void remove_front_space(char *sStr)//删除前导空格 {         int  i = 0, j = 0;         while ( sStr[i] && sStr[i] == ' ' )  i++;//第i个字符不是0且是空格，i逐字往后挪。其实可简写为while (sStr[i] == ' ' )  i++;         if ( i > 0 )//前i个字符都是空格         {                 while ( sStr[i] )//第i个字符不是0循环（即直到字符串末尾逐字循环）                 {                         sStr[j] = sStr[i];//将第i个字符赋值给第j个字符（）                         i++;                         j++;                 }                 sStr[j] = 0;//在前移的字符串的最后补0，作为去掉前导空格后新字符串的结束符         } }
user-0 提问: 联合体和结构体,为什么结果不对呢？

回复:
user: user-0
content: 搞懂，

user: user-1
content: 你这相当于union里有三个变量，int i;struct half;struct* ps; 当你给赋值时，相当于修改了ps的值，也就修改了half和i的值，你最后打印的是half的地址而不是half的值，不知道你懂了没？你可以查看下half的地值就是你最后输出的值。

user: user-2
content: 正如1L所说，你这是个三个元素的union，一个是struct，一个是struct *，一个是int，所以你对其中任意一个赋值都会覆盖其他两个。而你的语句2对那个struct Unknow *ps赋了值，自然就覆盖掉了half的赋值，当然不可能出来a，b，c，d

user: user-0
content: 更正：   number.ps = number.half;  -> number.ps = &number.half;

user: user-3
content: 根本就通不过编译 类型不匹配

user: user-4
content: struct      {        char a;        char b;        char c;        char d;       }half,*ps; 和 struct      {        char a;        char b;        char c;        char d;       }half; struct      {        char a;        char b;        char c;        char d;       }*ps;  是一样的，联合体内有3个变量
user-0 提问: 编程题，求大神

回复:
user: user-1
content: cout<<

user: user-2
content: 叼叼叼！

user: user-3
content: #include <stdio.h> int main() {  printf(   "123456789\n"   "987654321\n"   "123456789\n"  );  return 0; }

user: user-4
content: 其实楼上说的都对呀！printf是万能的

user: user-5
content: LZ是来散分的吗？

user: user-6
content: 楼上几位说的对

user: user-7
content: << endl;

user: user-8
content: printf("123456789\r\n987654321\r\n123456789\r\n"); fflush(stdout);

user: user-9
content: 一个就好，需要'\n'

user: user-10
content: 简单，3个printf搞定..

user: user-11
content: 3 printfs
user-0 提问: C语言怎么用VS2013创建DLL

回复:
user: user-1
content: Microsoft Visual Studio 2012的方法如下：  1）启动VS for Desktop 2）档案->新建专案->已安装的->Win32主控台应用程式 3）确定 4）应用程式设定->应用程式类型->DLL->完成  估计2013应该也差不多，没找到简体中文版的，暂时用的繁体中文版的，上面的步骤仅供参考

user: user-2
content: 大哥，你解决了吗？

user: user-3
content: 创建DLL项目就行了
user-0 提问: IP地址分类

回复:
user: user-1
content: 这个分类可以说是一些规定，是规定一般也就只有去记住了

user: user-2
content: 结束地址一定是255这样的数值，IP地址的分类只有死记。  引用 楼主 jiemo1123 的回复:IP地址分成5类，A类地址有的说是1.0.0.0到126.0.0.0，有的说是126.255.255.255，那个正确？具体的A到E类时如何划分的？linux中除了死记，还有什么方法可以查看某个IP是那类吗？
user-0 提问: 求C语言大神帮助，关于一道编程题

回复:
user: user-1
content: 引用 5 楼 u013193033 的回复:我想问一下， 那个_getch()和getch有什么区别啊功能一样。不带下划线的是POSIX的，微软新的编译器已经废弃不用了，统一用带下划线的，如果你不用微软的编译器，那么建议用getch，移植性好点。如果用微软的编译器，就用带下划线的。

user: user-2
content: 参考《编译原理》中的词法分析和有限状态自动机。

user: user-0
content: 我想问一下， 那个_getch()和getch有什么区别啊

user: user-1
content: 相邻两次按键间隔时间只要不超过宏定义的1000ms，就会当成连续按键记录次数，超时或者按了别的按键才会输出。 引用 2 楼 KenZhang1031 的回复:#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h>  /* 超过1000ms认为超时输出 */ #define TIME_OVER		1000  /* key按下了count次，根据你自己的要求做按键解码,比如key='1'，count=2表示字母b，自己做处理 */ void translate_key(int key, int count) { 	printf("Pressed %c key %d count\r\n",(char)key, count); }   void main() { 	int iPrevKey, iCurKey; 	int iPressCount; 	time_t tPrevTime;  	iPressCount = 0; 	iCurKey = -1; 	while(1) 	{ 		if(_kbhit()) 		{ 			iCurKey = _getch(); 			tPrevTime = clock(); 			/* 如果新按键首次按下 */ 			if(iPressCount == 0) 			{ 				iPrevKey = iCurKey; 				iPressCount++; 			} 			else 			{ 				/* 如果该次按键和上次不一样，输出上次按键，并重新记录该次按键 */ 				if(iPrevKey != iCurKey) 				{ 					translate_key(iPrevKey, iPressCount); 					iPrevKey = iCurKey; 					iPressCount = 1; 				} 				/* 按键一样,记录次数 */ 				else 				{ 					iPressCount++; 				} 			} 		} 		/* 超时且有按键按下，输出 */ 		else if((iCurKey != (-1)) && ((clock() - tPrevTime) > TIME_OVER)) 		{ 			translate_key(iCurKey, iPressCount); 			iPressCount = 0; 			iCurKey = -1; 		} 	} }

user: user-0
content: 谢谢2楼，太厉害了

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h>  /* 超过1000ms认为超时输出 */ #define TIME_OVER		1000  /* key按下了count次，根据你自己的要求做按键解码,比如key='1'，count=2表示字母b，自己做处理 */ void translate_key(int key, int count) { 	printf("Pressed %c key %d count\r\n",(char)key, count); }   void main() { 	int iPrevKey, iCurKey; 	int iPressCount; 	time_t tPrevTime;  	iPressCount = 0; 	iCurKey = -1; 	while(1) 	{ 		if(_kbhit()) 		{ 			iCurKey = _getch(); 			tPrevTime = clock(); 			/* 如果新按键首次按下 */ 			if(iPressCount == 0) 			{ 				iPrevKey = iCurKey; 				iPressCount++; 			} 			else 			{ 				/* 如果该次按键和上次不一样，输出上次按键，并重新记录该次按键 */ 				if(iPrevKey != iCurKey) 				{ 					translate_key(iPrevKey, iPressCount); 					iPrevKey = iCurKey; 					iPressCount = 1; 				} 				/* 按键一样,记录次数 */ 				else 				{ 					iPressCount++; 				} 			} 		} 		/* 超时且有按键按下，输出 */ 		else if((iCurKey != (-1)) && ((clock() - tPrevTime) > TIME_OVER)) 		{ 			translate_key(iCurKey, iPressCount); 			iPressCount = 0; 			iCurKey = -1; 		} 	} }

user: user-3
content: 记录毛时间啊，直接按几次回车就是几次了。
user-0 提问: Linux客户端和服务器，客户端和客户端通信

回复:
user: user-1
content: 设置状态标志位，客户端连上后发账号密码，服务器把该用户的状态标志设为在线。这就还好多东西要去理了。用户登入后，如果你只是自己做着玩的话，用户少你可以把所有的用户都查询，然后通过心跳包把所有用户的状态传给每个用户。不然就是还有好友啊什么的，上线查询，心跳查询好友的状态

user: user-2
content: 你的思路是可行的啊，以前用java做过类似的东西
user-0 提问: linux网络通信

回复:
user: user-0
content: 引用 1 楼 jerry_dqh 的回复:需要锁的，两个线程会有冲突的。你一边写，那边读，会有问题。 中间遇到7E/7F,需要转义，具体转义成什么，各个协议不一样。读还有一个线程，共有三个，UI，读，写。转义的问题，明白了

user: user-1
content: 需要锁的，两个线程会有冲突的。你一边写，那边读，会有问题。 中间遇到7E/7F,需要转义，具体转义成什么，各个协议不一样。
user-0 提问: vc++6.0

回复:
user: user-1
content: FileTool.exe 替换打开和添加到项目中 Visual C++ 的新功能 http://support.microsoft.com/kb/241396/zh-cn

user: user-2
content: 我运行以前成功过。 楼主可以baidu下， win7安装vc6， 安装后可以用。但不推荐。

user: user-0
content: 有的就发下邮箱，要分的就发

user: user-0
content: 有的，懂的人发下急用

user: user-3
content: 根本就没有。为什么非要在win7上用vc6.看来微软真应该维护一下，估计能大赚一笔。

user: user-0
content: 没有的，。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

user: user-4
content: 已发，楼主查收。

user: user-5
content: 话说VC6.0什么时候停止维护的？win7什么时候出的。怎么可能会有vc6.0支持win7呢。 话说win7不能兼用xp的vc6.0吗？  实在不行有个东西叫做虚拟机。

user: user-6
content: 多少RMB?
user-0 提问: 关于CArray释放元素内存的问题

回复:
user: user-1
content: for(int i = 0, sz = pArray->GetSize(); i < sz; ++i) {   delete (*pArray)[i];  }  pArray->RemoveAll();

user: user-2
content: 确实应该自己搞一个内存管理的东西。比如每一块连续的内存，存放1W个， 只要几十个这样的块就好。到时候直接把这个地方搞掉。中途变化只要标志为就好

user: user-0
content: 引用 3 楼 buyong 的回复:CArray里不应该存这么多指针那应该怎么搞。。

user: user-0
content: 引用 5 楼 derekrose 的回复:对象？还是指针？是指针~

user: user-3
content: 引用 6 楼 hu19920520 的回复:引用 5 楼 derekrose 的回复:对象？还是指针？是指针~  那么你就必须一个一个delete 或者使用智能指针

user: user-3
content: 对象？还是指针？

user: user-4
content: 还有告诉LZ一个诀窍，你直接按debug，那delete确实很慢，可能要好几分钟，但若是按ctrl-F5，或者菜单里面找不调试运行，那么release版本，delete100万个对象估计不超过0.2秒

user: user-5
content: CArray里不应该存这么多指针

user: user-4
content: 若LZ水平够的话，完全可以自己写个内存管理器，为所有对象的指针统一分配连续的内存，一次分配，一次释放~

user: user-6
content: 你里面存放的是指针,就只能这样一个个的delete了......  或者,你可以用智能指针,或自己包装实现RAII
user-0 提问: memcpy的效率和for循环比起来如何？

回复:
user: user-1
content: 先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装  再参考 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\intel\memset.asm C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\intel\memcpy.asm

user: user-2
content: 还是喜欢无码的

user: user-3
content: 看源码吧, 最好是能看反汇编. memcpy复制小量数据, 可能会被优化成几次DWORD数据的赋值. 更大的数据会使用循环. 都是循环, 一考虑其它优化的情况下, 速度应该是半斤八两.

user: user-4
content: 楼主不用在意这些细节，不要过早优化

user: user-5
content: 引用 5 楼 angel_su 的回复:不用太担心，让编译器优化去，有可能你的for循环就变成调用memcpy，或者memcpy区域很小就转成简单代码，不去调用函数了...  ++ 根本用不着关注这种东西，怎么写方便就用哪个。

user: user-6
content: 不用太担心，让编译器优化去，有可能你的for循环就变成调用memcpy，或者memcpy区域很小就转成简单代码，不去调用函数了...

user: user-7
content: 当然是memcpy快，memcpy的效率随设计者的不同而不同，但至少不会比for慢，而且由于设计者一般根据平台特性进行了优化，大多数情况下会比for快不少。

user: user-8
content: 循环次数少时，赋值比较快，循环次数多时，memcpy一条语句块拷贝比for循环赋值快。

user: user-9
content: memcpy会按系统字长进行对齐优化。比如32bit系统上4字节4字节操作，64bit系统上8字节8字节操作。 如果你的循环中也是按对齐赋值的，就没有区别，如果你的赋值不是对齐，比如是char类型赋值，memcpy会快一些。

user: user-5
content: 没区别，我特地测试过~ 当然是release版本，debug版本memXXX确实快不少，但比debug版本毫无意义不是吗？
user-0 提问: 输入顺序和结果的问题

回复:
user: user-1

user: user-2
content: c = 成功输入的数据个数。 第1个      键盘输入1.0        a = 1 输入成功，剩下.0 ;      b 没有输入成功，.0 没有用,所以 c = 1; 第2个     键盘输入 3 a = 3 输入成功;    接着键盘输入2,b = 2 输入成功所以 c = 2; 第3个    键盘输入3 2.0  a = 3 输入成功;    b = 2 输入成功，剩余 .0 没有用，所以 c = 2;

user: user-3
content: #include <stdio.h> int main() { 	int a, b, c; 	c = scanf("%d%d", &a, &b);   //c的结果为输入的参数个数 	printf("%d\n", c); 	return 0; }  c 的结果为输入的参数个数, 详细解释推荐你看下面文章： http://blog.sina.com.cn/s/blog_70ec9a6f010145ti.html

user: user-0
content: 这是输入浮点数的结果
user-0 提问: x86中 div汇编指令问题

回复:
user: user-1
content: ;以下计算1到10000的和         xor ax, ax         xor dx, dx         mov cx, 10000      @f:         add ax, cx         adc dx, 0         loop @f           ;以下计算累加和的每个数位         xor cx, cx         mov ss, cx  ;设置堆栈段的段基址         mov sp, cx          mov bx, 10         xor cx, cx      @d:         inc cx         mov bp, ax         mov ax, dx         xor dx, dx         div bx         xchg bp, ax         div bx         or dl, 0x30         push dx         mov dx, bp         cmp dx, 0         jne @d         cmp ax, 0         jne @d

user: user-2
content: ;以下计算1到10000的和         xor ax, ax         xor dx, dx         mov cx, 10000      @f:         add ax, cx         adc dx, 0         loop @f           ;以下计算累加和的每个数位         xor cx, cx         mov ss, cx  ;设置堆栈段的段基址         mov sp, cx          mov bx, 10         xor cx, cx      @d:         inc cx         mov bp, ax         mov ax, dx         xor dx, dx         div bx         xchg bp, ax         div bx         or dl, 0x30         push dx         mov dx, bp         cmp dx, 0         jne @d         cmp ax, 0         jne @d

user: user-3
content: 第一次， 商 qh （在AX中）余数是 rh' 第二次， 商 ql 余数是 remain  所以两次除法，足够了。 只是需要把  qh （在AX中）处理好---存放到商的高位 XL取到 AX中 rh'（在DX中不动），，接着用于第二次除法          qh ql      ------------ y  ) 0 xh  xl      第一次除法 DX=0，AX=xh        ..   --------------         rh' xl     第二次除法 DX=rh'，不动，AX=xl           ......         --------            remain  余数在DX中  就可以了，所以不是很复杂  就是第一次，DX初始化为0 然后，自高向低，依次取出X 的各16Bits，放入 AX寄存器中，开始除。 这就像10进制的多位数除1位数，实际上还是比较简单的。 这是除法指令，设计出来就是这样的效果。  如果是高级语言，就比较麻烦了； 汇编语言一次计算，可以得到商和余数。 所以，比较简单。 大概代码如下： Mov DX，0 Mov AX，x+2 mov BX ,y div BX       ；第1次除法  mov q+2,AX mov AX,x div BX        ；第2次除法 mov q,AX mov remain,DX

user: user-4
content: 前面有人说两次除，其实没那么简单，首先要试商，试完了要乘，乘完要判断大小，然后调整。

user: user-4
content: 引用 4 楼 CrazyCater 的回复:就是在8086的那种情况 只有16位的时候怎么办  看《计算机程序设计艺术》多精度算数

user: user-5
content: 32 bit： edx, eax 64 bit: rdx, rax

user: user-3
content: 引用 1 楼 lm_whales 的回复:扩展一下，接着除 比如： 改成 BX：DX：AX 左移8位再除 哦想起来了不用移位，就可以了  DX：AX   先用 DX --》0 AX高16 去除 再把余数放到DX，AX 低 16 通过两次除法，就可以算出32Bits的商了

user: user-6
content: 假设被除数高16位B，低16位A，除数C  mov ax,B xor dx,dx div C mov cx,ax mov ax,A div C  商：CX:AX, 余数: DX

user: user-0
content: 就是在8086的那种情况 只有16位的时候怎么办

user: user-6
content: 64位除法用 RDX RAX

user: user-7
content: 32位除法用 EDX EAX

user: user-3
content: 扩展一下，接着除 比如： 改成 BX：DX：AX 左移8位再除
user-0 提问: gdb中怎样知道哪个线程拥有互斥体，代码编译时加了 -O2的，---在线等！！！

回复:
user: user-0
content: 二楼的在-g模式编译是可以的，但是如果没有加-g编译，而是加了-O2编译，也就是没有用debug生成，而是build的时候，对代码进行了优化。不知道这个加了-O2的是否也可以呢，我的好像不行！

user: user-1
content: 学习2楼

user: user-2
content: 学习2楼

user: user-3
content: 学习二楼。

user: user-4
content: 查看进程对应的proc目录 ？

user: user-4
content: 学习2楼！

user: user-5
content: 例如： 查看哪个线程拥有互斥体（然后list代码，查看使用互斥变量的名称）  (gdb) print AccountA_mutex $1 = {__m_reserved = 2, __m_count = 0, __m_owner = 0x2527, __m_kind = 0, __m_lock = {__status = 1, __spinlock = 0}} (gdb) print 0x2527 $2 = 9511 (gdb) print AccountB_mutex $3 = {__m_reserved = 2, __m_count = 0, __m_owner = 0x2529, __m_kind = 0, __m_lock = {__status = 1, __spinlock = 0}} (gdb) print 0x2529 $4 = 9513 (gdb) 从上面的命令中，我们可以看出AccontA_mutex是被线程 5（LWP 9511）加锁（拥有）的，而AccontB_mutex是被线程 3（LWP 9513）加锁（拥有）的。
user-0 提问: 编写一个税收软件，要求最精简容易明白的代码

回复:
user: user-1
content: 引用 3 楼 vipcxj 的回复: #include <iostream> #include <cstdlib> using namespace std;  //1.小于3500部分不收税。 //2.大于3500小于5000部分收0.3%的税。 //3.大于5000小于8000部分收0.5%的税。 //4.大于8000小于10000部分收0.7%的税。 //5.大于10000部分收1%的税。  //利用递归 double jisuanSui(double ShouRu) { 	if (ShouRu > 10000) 	{ 		return jisuanSui(10000) + (ShouRu - 10000)*0.01; //大于10000部分收1%的税。 	} 	else if (ShouRu > 8000) 	{ 		return jisuanSui(8000) + (ShouRu - 8000)*0.007; //大于8000小于10000部分收0.7%的税。 	} 	else if (ShouRu > 5000) 	{ 		return jisuanSui(5000) + (ShouRu - 5000)*0.005; //大于5000小于8000部分收0.5%的税。 	} 	else if (ShouRu > 3500) 	{ 		return jisuanSui(3500) + (ShouRu - 3500)*0.003; //小于3500部分不收税。 	} 	else 		return 0; }  不用递归的版本  tax = 0; if (income > 10000) { 	tax += (income - 10000)*0.01; //大于10000部分收1%的税。 	income = 10000; } if (income > 8000) { 	tax += (income - 8000)*0.007; //大于8000小于10000部分收0.7%的税。 	income = 8000; } if (income > 5000) { 	tax += (income - 5000)*0.005; //大于5000小于8000部分收0.5%的税。 	income = 5000; } if (income > 3500) { 	tax += (income - 3500)*0.003; //小于3500部分不收税。 	//income = 3500; } return tax;

user: user-2
content: #include <iostream> #include <cstdlib> using namespace std;  //1.小于3500部分不收税。 //2.大于3500小于5000部分收0.3%的税。 //3.大于5000小于8000部分收0.5%的税。 //4.大于8000小于10000部分收0.7%的税。 //5.大于10000部分收1%的税。  //利用递归 double jisuanSui(double ShouRu) { 	if (ShouRu > 10000) 	{ 		return jisuanSui(10000) + (ShouRu - 10000)*0.01; //大于10000部分收1%的税。 	} 	else if (ShouRu > 8000) 	{ 		return jisuanSui(8000) + (ShouRu - 8000)*0.007; //大于8000小于10000部分收0.7%的税。 	} 	else if (ShouRu > 5000) 	{ 		return jisuanSui(5000) + (ShouRu - 5000)*0.005; //大于5000小于8000部分收0.5%的税。 	} 	else if (ShouRu > 3500) 	{ 		return jisuanSui(3500) + (ShouRu - 3500)*0.003; //小于3500部分不收税。 	} 	else 		return 0; }   int main() { 	double ShouRu; 	cout << "请输入你的收入："; 	cin >> ShouRu; 	cout << "你所要缴纳的税收为：" << jisuanSui(ShouRu) << endl; 	system("pause"); 	return 0; }

user: user-3
content: 其实也可以用最笨最简单的不断if判断的方式，不过我当时被要求是简洁的代码 看来都是学生啊

user: user-3
content: 之前我也做过这道题。只要修改两个数组里面相应的税率和收税的点就可以了  #include<stdio.h> int main() { 	double a[4] = {12500,8000,5000,3500}; 	double b[4] = {0.25,0.2,0.1,0.03}; 	/*数组a作为每次判断的标准(点)，数组b作为每次判断之后的税收*/  	 	double earn,temp,shui,rest; 	int i; 	/*earn是用户输入赚了多少钱，temp是earn赋值过来用来计算的，shui是税收总额，rest是每次减去税收点的税收计算额*/ 	 	printf("请输入你这个月赚了多少钱："); 	scanf("%lf",&earn); 	 	/*计算主体*/ 	for(temp=earn,i=0,shui=0;i<4;i++) 	{ 		if(temp - a[i] <= 0) 		{ 			continue; 		} 		/*这里主要判断目前的钱是否大于a[i]的这个税收点，如果结果小于0，则表明不在该点，程序i++跳到下一个判断点*/ 		 		else 		{ 			rest = temp - a[i]; 			shui += rest * b[i]; 			temp -= rest; 		} 		/*税收计算主体，如果不是上面的条件了，就是表明符合了这个条件*/ 		/*首先将目前的钱减去这个点，剩下的就是这个点需要计算这个点的税收的钱*/ 		/*下一个需要判断的点其实是从这个点开始的，不过目前可以用temp -= rest来计算*/ 		 	} 	printf("收入为：%.2lf\t所需交税：%.2lf\t税后收入为：%.2lf\n\n",earn,shui,earn-shui);	 	main(); }
user-0 提问: 关于水仙花数的问题

回复:
user: user-1
content: for(a=100;a<=999;a++) l=a/100; 因为没有大括号的存在，l的赋值最终是l=999/100；在这之前l始终跳不出for循环。这才是正解！！！

user: user-1
content: 引用 6 楼 u012571406 的回复:for没有大括号{}，有错误……个人觉得! 看错了，你那样也是可以的……

user: user-1
content: for没有大括号{}，有错误……个人觉得!

user: user-2
content: http://www.baike.com/wiki/%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0  和这个列表比对下，如果相符，就对了。

user: user-3
content: 引用 1 楼 user-4 的回复:LZ觉得有错就有错，LZ觉得没错就没错，我都听LZ的，所以LZ可以结贴给分了 大哥，一天24小时在线吗？每次都能看到...

user: user-3
content: 还可以这么求 a=n/100;百位 c=n%10;个位 b=n%100/10;十位

user: user-3
content: 可以的，如果有毛病估计是for循环没大括号的原因  #include "stdio.h" int main() {	 	int i,a,l,m,n; 	for(a=100;a<=999;a++) 	{//在这行对比下和你的程序有什么不同 		l=a/100; 		m=a/10-l*10; 		n=a-l*100-m*10; 		if(a==l*l*l+m*m*m+n*n*n) 			printf("%d\n",a); 	}//还有这里 	return 0; }

user: user-4
content: LZ觉得有错就有错，LZ觉得没错就没错，我都听LZ的，所以LZ可以结贴给分了
user-0 提问: 求一行代码的理解。

回复:
user: user-0
content: 引用 7 楼 my_live_123 的回复:n2可能是个掩码，保留右边的部分位！ 这个回答有点靠谱了，问题的核心是求chr+2*(n2&chr)的逆运算。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:将0～255带进chr参数，输出函数对应的返回值。 额，大神能不能花点时间看问题。 这个问题的核心是求And运算的逆运算，还是比较新颖的。 明天结贴。

user: user-1
content: n2可能是个掩码，保留右边的部分位！

user: user-2
content: 将0～255带进chr参数，输出函数对应的返回值。

user: user-0
content: 我已经想出来答案了,n1是奇数，n2任意,加密函数暂时不贴出来。 用AND来加密这种方法还是比较新颖的，大家以后可以用上面的函数+内联汇编来对字符串进行加密，还是比较有效果的。

user: user-3
content: 你还是到数学论坛上咨询比较好

user: user-4
content: 有逻辑运算的应该是不能倒推的。

user: user-5
content: 上面计算a的就是解密函数吧，你倒推一下就能推出加密函数
user-0 提问: c语言学习  求指导

回复:
user: user-1
content: #pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> HWND WINAPI GetConsoleWindow(); void HideTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = FALSE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } void ShowTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = TRUE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } int main() {     HWND  hwnd;     HDC   hdc;     HFONT hfont;     int i,x,y;       srand(time(NULL));     system("color F0");     system("cls");     HideTheCursor();     hwnd  = GetConsoleWindow();     hdc   = GetDC(hwnd);     hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");     SelectObject(hdc,hfont);     TextOut(hdc,10,10,"地球人都知道！",14);     MoveToEx(hdc,5,5,NULL);     LineTo(hdc,300,  5);     LineTo(hdc,300, 60);     LineTo(hdc,  5, 60);     LineTo(hdc,  5,  5);     for (i=0;i<100;i++) {         x=rand()%400;         y=rand()%300;         SetPixel(hdc,x,y,0);     }     DeleteObject(hfont);     ReleaseDC(hwnd,hdc);     getchar();     system("color 07");     system("cls");     ShowTheCursor();     return 0; }

user: user-2
content: c和指针，。

user: user-3
content: 我觉得看视频太慢了，还是看一些书吧，主要把基础看完就好了，感觉你有delphi的基础，学C应该很快，只是要多实现，动手才好。

user: user-0
content: 其实呢 像这种基础学习的我倒是有在看一本书C Primer plus ，The C Programming Language也是属于这种类型吧。我是想把这个当成参考书，再找一个高级一点的，能综合运用这些知识的教材，学起来不至于太无聊，这样可好

user: user-0
content: PDF的话 《The C Programming Language》   《c和指针》已经很好了，一个基础的，一个深入的，也不求别的书了。 看视频学习确实慢，所以呢我想要的视频是那种讲讲某小项目怎么做的，代码结构，设计思路这种，看完自已也可以尝试实现一下。而不是基础知识讲解的视频，这种的话确实是看书好。 如果有人看过的话，求推荐一套了

user: user-4
content: 我觉得比较好的学习方法是看下基本语法等基础，然后找一些经典的例题，自己来实现，在这个过程中逐步解决各种遇到的问题，慢慢累积

user: user-5
content: The C Programming Language
user-0 提问: 请教指针函数的问题

回复:
user: user-0
content: 引用 4 楼 dwjjyq 的回复:[quote=引用 1 楼 Automation_dmu 的回复:] short DB_find_1st_match(unsigned short fs_num, void* data , //添加一个要传入到match_routine里的data参数 	short （* match_routine）（void * rec_buffer） ） { 	... 	match_routine(data);//传入data进行匹配 	... } 要有返回值的哦[/quote]  这个是我定义的  short	Table_Match(void *rec) { 	return (!strncmp( (char *)rec, (char *)m_name, 16)); }  我的数据库里面有 typedef struct {         //单号          unsigned char odd_number[8];         //物料编码  	unsigned char new_code[8]; 	//名称  	unsigned char new_name[8]; 	//价格          unsigned char new_money[8];         //数量          unsigned char new_num[30]; }TYP_New_Bill_INFO;  我现在有单号，我要查其他数据 retshort = DB_find_1st_match(0,Table_Match);         if(retshort>=0)	//Note:important!!!!! 	{  	p_rec = (char *)DB_jump_to_record(3,retshort,&rec_flag);

user: user-1
content: 引用 4 楼 dwjjyq 的回复:[quote=引用 1 楼 Automation_dmu 的回复:] short DB_find_1st_match(unsigned short fs_num, void* data , //添加一个要传入到match_routine里的data参数 	short （* match_routine）（void * rec_buffer） ） { 	... 	match_routine(data);//传入data进行匹配 	... }   要有返回值的哦[/quote]  if (match_routine(data)) {     ... ... } else {     ... ... }

user: user-2
content: 引用 4 楼 dwjjyq 的回复:[quote=引用 1 楼 Automation_dmu 的回复:] short DB_find_1st_match(unsigned short fs_num, void* data , //添加一个要传入到match_routine里的data参数 	short （* match_routine）（void * rec_buffer） ） { 	... 	match_routine(data);//传入data进行匹配 	... }   要有返回值的哦[/quote]

user: user-0
content: 引用 1 楼 Automation_dmu 的回复:short DB_find_1st_match(unsigned short fs_num, void* data , //添加一个要传入到match_routine里的data参数 	short （* match_routine）（void * rec_buffer） ） { 	... 	match_routine(data);//传入data进行匹配 	... }   要有返回值的哦

user: user-3
content: 就是 short my_match_routine(void *p) { }

user: user-4
content: short my_match_routine(void* rec_buffer) {     char* data = (char*)rec_buffer;     ... }  引用 楼主 dwjjyq 的回复:我有一个api 是这样写的 short DB_find_1st_match(unsigned short fs_num,                          short （* match_routine）（void * rec_buffer） ）    参数：  fs_num  要查寻的数据表的索引号  match_routine  一个用户自己定义的匹配函数，非用来检验存在 rec_buffer 中的数据记录是否是用  户所需要的记录。匹配时应该返回非 0 值。如果这个参数为空，那么任何一条未删除 的记录都将被看作是符合条件的被选中的记录。   现在，我有一个编号为4的数据表，查询条件为char *data; 我该怎样定义short （* match_routine）（void * rec_buffer）；  把我的数据char *data传进去，然后查询出数据。  大神们，帮帮忙呗！我刚学的C

user: user-2
content: short DB_find_1st_match(unsigned short fs_num, void* data , //添加一个要传入到match_routine里的data参数 	short （* match_routine）（void * rec_buffer） ） { 	... 	match_routine(data);//传入data进行匹配 	... }
user-0 提问: windows下删除非空文件目录

回复:
user: user-0
content: 引用 2 楼 yang15225094594 的回复:应该是已经删除了，但是需要刷新一下，这样应该就不显示了！ 引用 2 楼 yang15225094594 的回复:应该是已经删除了，但是需要刷新一下，这样应该就不显示了！ 怎么刷新呀，求指导呀！

user: user-1
content: io sync下。

user: user-2
content: refresh

user: user-3
content: 应该是已经删除了，但是需要刷新一下，这样应该就不显示了！

user: user-0
content: 自己顶一下！！！
user-0 提问: C新手的一些疑惑

回复:
user: user-1
content: 数据类型就过不去，以后怎么学？遇到难题不用怕，怕的是不去做。

user: user-2
content: 不要把学习当做是一种义务，而是权利

user: user-3
content: 多动手练练就明白了

user: user-4
content: 你是厌学症 http://baike.baidu.com/view/551999.htm

user: user-5
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-6
content: 学编程不写代码，看书看不进去很正常

user: user-7
content: 你试试把你的想法运行出来，看到结果也许你就开心了

user: user-8
content: 可能编程不适合你
user-0 提问: 值一样的数组，转化成同类型的整数打印出来不一样

回复:
user: user-1
content: unsigned char *buf unsigned char checksum_buf[5]={0}; DLOG("%d %d", *(buf+i), checksum_buf[i]);  你把DLOG定义贴出来

user: user-2
content: 这是多线程程序吧，  ck=CHECKSUM;         memcpy(checksum_buf, (unsigned char*)&ck, 4);         for(i=0;i<4;i++) DLOG("%d %d", *(buf+i), checksum_buf[i]); buf 没变，所以 ============================================   handle_net_msg(): cli.c: 695: 120 120   handle_net_msg(): cli.c: 695: 86 86   handle_net_msg(): cli.c: 695: 33 33   handle_net_msg(): cli.c: 695: 67 67 ================================================  if(!strncmp(checksum_buf, buf, 4))          DLOG("get %x %x", *((unsigned int *)buf), *((unsigned int *)checksum_buf)); checksum=*((unsigned int *)buf);的时候，buf中的内容改变了。 285678 所以 handle_net_msg(): cli.c: 696: get 285678 43215678 handle_net_msg(): cli.c: 698: checksum:285678

user: user-3
content: 最高位的符号位考虑了么？

user: user-2
content: 感觉是 checksum=*((unsigned int *)buf);的时候，buf中的内容改变了。
user-0 提问: 文件指针移动不了，每次输出都是全部输出，求指教！！！

回复:
user: user-1
content: 你fseek的是fp文件, fscanf的是fn文件, 移动文件指针和读数据都不是针对同一个文件, 怎么会起作用?  btw: LZ是看谭浩强那厮的书学c的吧, 居然把代码都写在main()里

user: user-0
content: 我想间隔输出，但是用了fseek(fp,2*n*sizeof(struct students),0);后，还是全部输出，没什么用处啊，不明白。

user: user-2
content: 什么意思，你不就是要全部输出吗？
user-0 提问: 学王爽的汇编碰到的一个问题

回复:
user: user-1
content: 我刚刚翻了下书，是73页的内容吗？ 你书上是在0B39：0100地址写代码的，， 而你是直接在2000:000这个地址写代码的，，并且这个代码是在2000:0000这个地址进行堆栈的（程序地址和堆栈的地址在一堆了）。。。能不出错吗。。

user: user-1
content: 书上多少页？以前看了一半，，好久没有看了。。

user: user-0
content: 我试了好几次每次执行完mov ss,ax之后都显示下一条待执行的指令是： 2000:0008 0000          ADD     [BX+SI],AL  恳请前辈高人指点一二，万分感激。
user-0 提问: C语言问题，求助！

回复:
user: user-0
content: 谢谢你们的指点。问题已经解决了。

user: user-1
content: 当除数和被除数都为整型时，结果是取商，而不是以实数形式出现，看这道题，你体会下： 假定x和y为double型，则表达式(x=2,y=x+5/2)的值是_C_____ 。    A、4.500000                     B、4      C、4.000000                     D、2.000000 当然，若是除数或被除数或者两者都是浮点型的，则商以浮点型为准。

user: user-2
content: 类型不匹配，你的b是float格式存放的，a按照整数存放的,5/4也会当成整数1。%f会按照float去解释你存放的数据，得到当然就不对了。同理%d去取float也是一样的道理。
user-0 提问: 有会用Vtune的吗？

回复:
user: user-1
content: 引用 2 楼 baipv008 的回复:[quote=引用 1 楼 user-3 的回复:] 没有！都优化掉了 函数名都优化掉了吗？[/quote] release版本编译生成pdb，就可以看到相应的函数名了，这类分析工具肯定要pdb文件的。

user: user-1
content: vs2010以后自带性能分析工具。

user: user-2
content: LZ还有手册，查啊。

user: user-0
content: 引用 4 楼 ForestDB 的回复:可以修改release的配置，不要strip掉函数名。 在哪里修改？vs2008

user: user-0
content: 引用 4 楼 ForestDB 的回复:可以修改release的配置，不要strip掉函数名。  在哪里修改？vs2008

user: user-2
content: 可以修改release的配置，不要strip掉函数名。

user: user-2
content: 函数就一地址，哪有名字？

user: user-0
content: 引用 1 楼 user-3 的回复:没有！都优化掉了 函数名都优化掉了吗？

user: user-3
content: 没有！都优化掉了
user-0 提问: 网上下载的G.729A源码怎么生成dll动态库？

回复:
user: user-1
content: 链接发过来 我给你编一个

user: user-2
content: 284941821  QQ空间 的日志 是我以前看孙鑫视频时候的笔记 感觉一步一步手把手教的 可能能帮到你吧   一直想挪到CSDN上来的 下班回去总是记不起来了...

user: user-0
content: 顶顶，没有人知道么？
user-0 提问: 动态开辟内存空间的问题

回复:
user: user-1
content: char *ss;     int i;     ss=(char *)malloc(sizeof(char)*7);     for(i=0;i<6;i++)     {         ss[i]='a';     }     ss[6] = '\0';     printf("%s\n",ss);

user: user-2
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-3
content: 引用 12 楼 mghhz816210 的回复:引用 9 楼 u011569364 的回复:i==5不是i=5那是不是动态开辟字符数组都要在后面加‘\0’ 如果你觉得内存中的数据是字符串，那就加‘\0’

user: user-4
content: 引用 12 楼 mghhz816210 的回复:引用 9 楼 u011569364 的回复:i==5不是i=5那是不是动态开辟字符数组都要在后面加‘\0’表示同意，你说的对。

user: user-0
content: 可以了  引用 11 楼 u011569364 的回复:引用 10 楼 mghhz816210 的回复:引用 9 楼 u011569364 的回复:i==5不是i=5急躁了这下可以了吧？

user: user-0
content: 引用 9 楼 u011569364 的回复:i==5不是i=5那是不是动态开辟字符数组都要在后面加‘\0’

user: user-4
content: 引用 10 楼 mghhz816210 的回复:引用 9 楼 u011569364 的回复:i==5不是i=5急躁了这下可以了吧？

user: user-0
content: 引用 9 楼 u011569364 的回复:i==5不是i=5急躁了

user: user-4
content: i==5不是i=5

user: user-0
content: 写错了应该是i=5,不过运行出来差不多，就差了个问号

user: user-0
content: char *ss; 	int i; 	//ss=plus(s1,s2); 	int num[]={98,99,109,109,97,97}; 	ss=(char *)malloc(sizeof(char)*6); 	for(i=0;i<6;i++) 	{ 		ss[i]='a'; 		if(i=6) 			ss[i]='\0'; 	} 	printf("%s\n",ss);  引用 4 楼 u011569364 的回复:你没有结束符，大会自动往后读，就是简单的地址加1，已知到遇到‘\0’停止，越界不检查，这就是指针不安全的地方之一

user: user-0
content: 加完‘\0’是这样的

user: user-4
content: 引用 4 楼 u011569364 的回复:你没有结束符，大会自动往后读，就是简单的地址加1，已知到遇到‘\0’停止，越界不检查，这就是指针不安全的地方之一纠错：它会

user: user-4
content: 你没有结束符，大会自动往后读，就是简单的地址加1，已知到遇到‘\0’停止，越界不检查，这就是指针不安全的地方之一

user: user-0
content: 引用 2 楼 u011569364 的回复:最后一位应该搞个字符串的结束符‘\0’,不然会一直读取知道遇到‘\0’可是内存不是只开辟了6个字节吗，其余的是从哪里读取的呢

user: user-4
content: 最后一位应该搞个字符串的结束符‘\0’,不然会一直读取知道遇到‘\0’

user: user-0
content: 沙发先抢下
user-0 提问: 打开一批文件问题请求各位大神帮帮忙

回复:
user: user-1
content: 引用 10 楼 mk112255 的回复:[quote=引用 9 楼 zhaobangyu 的回复:] [quote=引用 7 楼 mk112255 的回复:] [quote=引用 5 楼 zhaobangyu 的回复:] 路径和权限的问题, 先要确认这个目录下是否需要管理员权限 再确认你的路径是否正确   如何确定路径和是否需要管理权限[/quote] 1.路径正确否就是你自己检查文件路径是否正确,权限问题就是在你操作的文件路径下新建一个文件，看是否需要管理员权限 2.确认路径没问题，你直接用管理员权限运行你的程序看读取是正确(编绎程序时也能将程序设为管理员方式启动，右击工程属性，链接器，清单文件，UAC执行级别，设置为requireAdministrator)。 3.fp的值为x00000000时，打印出GetLasterror()的值，得到相关的信息。[/quote]  不明白怎样才能使用管理权限，我的是WINDOWSXP的系统[/quote] 哪你就使用第二条就行，将工程的UAC执行级别设置为requireAdministrator,重新编绎就行。

user: user-0
content: 引用 9 楼 zhaobangyu 的回复:[quote=引用 7 楼 mk112255 的回复:] [quote=引用 5 楼 zhaobangyu 的回复:] 路径和权限的问题, 先要确认这个目录下是否需要管理员权限 再确认你的路径是否正确   如何确定路径和是否需要管理权限[/quote] 1.路径正确否就是你自己检查文件路径是否正确,权限问题就是在你操作的文件路径下新建一个文件，看是否需要管理员权限 2.确认路径没问题，你直接用管理员权限运行你的程序看读取是正确(编绎程序时也能将程序设为管理员方式启动，右击工程属性，链接器，清单文件，UAC执行级别，设置为requireAdministrator)。 3.fp的值为x00000000时，打印出GetLasterror()的值，得到相关的信息。[/quote]  不明白怎样才能使用管理权限，我的是WINDOWSXP的系统

user: user-0
content: 引用 5 楼 zhaobangyu 的回复:路径和权限的问题, 先要确认这个目录下是否需要管理员权限 再确认你的路径是否正确   如何确定路径和是否需要管理权限

user: user-0
content: 引用 2 楼 max_min_ 的回复:1 路径是否正确 2 是否有对应权限对文件进行操作  把错误码打印出来看看，就知道了！  我输入路径为D:\file\file1.c  读定方式为：r   fp的值为x00000000

user: user-1
content: 路径和权限的问题, 先要确认这个目录下是否需要管理员权限 再确认你的路径是否正确

user: user-0
content: 我只会用单步还不会用断点

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

user: user-3
content: 1 路径是否正确 2 是否有对应权限对文件进行操作  把错误码打印出来看看，就知道了！

user: user-4
content: D:\file\file1.c 不等于 D:file\file1.c

user: user-1
content: 引用 7 楼 mk112255 的回复:[quote=引用 5 楼 zhaobangyu 的回复:] 路径和权限的问题, 先要确认这个目录下是否需要管理员权限 再确认你的路径是否正确   如何确定路径和是否需要管理权限[/quote] 1.路径正确否就是你自己检查文件路径是否正确,权限问题就是在你操作的文件路径下新建一个文件，看是否需要管理员权限 2.确认路径没问题，你直接用管理员权限运行你的程序看读取是正确(编绎程序时也能将程序设为管理员方式启动，右击工程属性，链接器，清单文件，UAC执行级别，设置为requireAdministrator)。 3.fp的值为x00000000时，打印出GetLasterror()的值，得到相关的信息。

user: user-0
content: 引用 2 楼 max_min_ 的回复:1 路径是否正确 2 是否有对应权限对文件进行操作  把错误码打印出来看看，就知道了！  我试过不知为何只能在这个文件才能运行C:\Documents and Settings\Administrator\file.c    r 才会得到想要的输出，以及新建出设定的文件
user-0 提问: 前后两个程序怎么算出来的数值不一样？那个是对的？

回复:
user: user-1
content: 看精度喽，浮点运算本身和精度和一块讨论才有意义

user: user-2
content: 把第7行的float换成double，第一个的结果就是3.141592，更好点。

user: user-3
content: http://bbs.csdn.net/topics/390676437
user-0 提问: apache调用fastcgi报错：(104)Connection reset by peer，高手快来啊！

回复:
user: user-1
content: cgi启动时会有个进程，查看下php-cgi或者其它进程是否启动。

user: user-2
content: 你那搞定没？我也遇到了同样的问题，apache的mod_fcgid，fastcgi官网下的toolkit（fcgi-2.4.1-SNAP-0311112127），我怀疑它俩能兼容么？？

user: user-0
content: 自己顶起！！！

user: user-0
content: FastCGI安装的是fcgi-2.4.0和mod_fcgid-2.3.9

user: user-0
content: 引用 3 楼 microlab2009 的回复:php-fcgi 是否安装正确 是否启动 不是php-fcgi，是FastCGI，

user: user-3
content: php-fcgi 是否安装正确 是否启动

user: user-0
content: 引用 1 楼 user-4 的回复:发错区了吧 应该是php那边的吧 fcgi是用C写的，我就发到C这边了，不是php

user: user-4
content: 发错区了吧 应该是php那边的吧
user-0 提问: 简单c

回复:
user: user-1
content: mallocs是C语言里面的一个动态分配内存的函数，原型是这样的： void* malloc (size_t size); size为要分配的空间大小，单位是字节。 如果分配成功则返回一个void类型的指针指向该内存的首地址， 一般会转换成自己需要的指针类型，比如 int * number = (int *)malloc(sizeof(int)); 如果分配失败，则返回空。

user: user-2
content: C++不允许讲void* 赋值给任何非void* 指针，所以需要强制转换， 但是C则没有这种限制！   引用 3 楼 u013410394 的回复:[quote=引用 1 楼 user-4 的回复:]  int size = sizeof(int[10]) ;//返回40 void *p = malloc(size);//分配一个40个BYTE的指针； int *pn = (int*)p;//然后p指针转换成int* //其实也就是pn指向一个可以容纳10个int的buffer.   int *pn = (int*)p;//这一步我需要打括号吗？我觉得不需要啊？我看到的很多我发的那个程序，都有括号，请问是为什么呢，谢谢[/quote]

user: user-0
content: 引用 1 楼 user-4 的回复: int size = sizeof(int[10]) ;//返回40 void *p = malloc(size);//分配一个40个BYTE的指针； int *pn = (int*)p;//然后p指针转换成int* //其实也就是pn指向一个可以容纳10个int的buffer.   int *pn = (int*)p;//这一步我需要打括号吗？我觉得不需要啊？我看到的很多我发的那个程序，都有括号，请问是为什么呢，谢谢

user: user-3
content: malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available

user: user-4
content: int size = sizeof(int[10]) ;//返回40 void *p = malloc(size);//分配一个40个BYTE的指针； int *pn = (int*)p;//然后p指针转换成int* //其实也就是pn指向一个可以容纳10个int的buffer.
user-0 提问: 关于return的返回终止函数问题

回复:
user: user-1
content: 感觉你问的不是return，而是break

user: user-2
content: 返回至调用fun处，和for还是if无关

user: user-2
content: 引用 2 楼 u013410394 的回复:[quote=引用 1 楼 baichi4141 的回复:] 函数不分级。 嵌套函数，for函数里面带有if（）然后再for（return），这样子终止的是哪个，第一个for？？？[/quote] for不是函数，if也不是函数 函数是这样的  void fun() {       for()       {          if()            return ;//返回值调用fun处，和for还是if无关        } }

user: user-3
content: 引用 2 楼 u013410394 的回复:[quote=引用 1 楼 baichi4141 的回复:] 函数不分级。 嵌套函数，for函数里面带有if（）然后再for（return），这样子终止的是哪个，第一个for？？？[/quote] 循环不是函数，return终止函数

user: user-0
content: 引用 1 楼 baichi4141 的回复:函数不分级。 嵌套函数，for函数里面带有if（）然后再for（return），这样子终止的是哪个，第一个for？？？

user: user-3
content: 函数不分级。

user: user-4
content: return后，函数就返回了。所谓return。
user-0 提问: 内存问题请教

回复:
user: user-1
content: #include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 // //A1.a 0 //A1.b 4 //A1.c 17 // //A2.a 0 //A2.b 4 //A2.c 18 // //A4.a 0 //A4.b 4 //A4.c 20 // //A8.a 0 //A8.b 4 //A8.c 24 // //A16.a 0 //A16.b 4 //A16.c 24 // //

user: user-2
content: 引用 2 楼 u013431701 的回复:这个是什么原理呢？  编译器会加入调试信息

user: user-3
content: 上全部代码！

user: user-4
content: 可能是字节对齐。 你怎么打印的？

user: user-5
content: 我会告诉你是编译器的问题吗？

user: user-0
content: 这个是什么原理呢？

user: user-2
content: 在debug模式下就是这样，如果换成release就不会了。
user-0 提问: NuSMV最后make报错，求大牛帮忙

回复:
user: user-0
content: 那个在 $$ ./configure  的时候不装会报错，我试试Ubunut 12.04 吧 Thanks 引用 4 楼 turingo 的回复:我在Ubuntu12.04上测试没有问题，会不会是你的flex和bison没有安装。  [quote=引用 楼主 dengnanyi 的回复:] NuSMV是一个基于linux的模型检测工具，小弟安装它出现了问题，求大牛帮帮忙。  这是在Ubuntu Server上安装的，我在此系统上安装成功过NuSMV。  系统里直接apt-get的g++包。  $$ ./configure  命令执行成功 截图如下：   $$ make 命令后报错如下：   求大牛帮帮忙，看看怎么弄这个[/quote]

user: user-1
content: 我在Ubuntu12.04上测试没有问题，会不会是你的flex和bison没有安装。  引用 楼主 dengnanyi 的回复:NuSMV是一个基于linux的模型检测工具，小弟安装它出现了问题，求大牛帮帮忙。  这是在Ubuntu Server上安装的，我在此系统上安装成功过NuSMV。  系统里直接apt-get的g++包。  $$ ./configure  命令执行成功 截图如下：   $$ make 命令后报错如下：   求大牛帮帮忙，看看怎么弄这个

user: user-0
content: 引用 1 楼 wangyaninglm 的回复:这个错误，应该是由配置不正确引起的。。。  求解释啊

user: user-2
content: 我猜的 ，看看楼下大牛的说法

user: user-2
content: 这个错误，应该是由配置不正确引起的。。。

user: user-0
content: 换成Ubuntu12.10 后编译成功
user-0 提问: 点子扎手，请求支援这个程序过程似乎有问题

回复:
user: user-1
content: 多累，已经知道是3位数，百位和个位相等的数就是回文数   int count=0; for(int i=100; i<1000; ++i)     if(i/100==i%10)         ++count; printf("三位回文数个数为:%d\n",n);

user: user-2
content: 1.在do前面漏了赋值 j = m; 2.里面的那个m==0应该是j==0

user: user-3
content: 用排列组合，首位和个位相等，首位不为0，共9种可能。 中间位有10中可能。 共：9＊10=90 三位回文数个数为：90
user-0 提问: 怎么进入死循环了？

回复:
user: user-1
content: 弄明白没？以下是我的一些看法： #include<stdio.h> main() { 		int m,s=0,i,n=0; 		int m1; 		for(m=100;m<1000;m++) 		{ 				m1 = m;//用于保存m值 				s=0;//这里很重要，因为你不清零的话 ，下次进入循环，史上一次保存的值； 				do{ 						i=m1%10; 						m1/=10; 						s=s*10+i; 				}while(m1>0);//这里我不明白你为什么事m==0？ 			 				if (s == m) n++; 		} 		printf("三位使得回文数个数为:%d\n",n); }

user: user-2
content: m/10也能在循环内部？

user: user-3
content: #include<stdio.h> main() { int m,s=0,i,n=0; for(m=100;m<1000;m++) { int m2 = m;do { i=m2%10; m2/=10; s=s*10+i; }while (m2 == 0); if (s == m) n++; } printf("三位使得回文数个数为:%d\n",n); }

user: user-4
content: m/=10会使得m>=1000的条件永远不满足，所以退不出for循环。  引用 楼主 u013389843 的回复:#include<stdio.h> main() { int m,s=0,i,n=0; for(m=100;m<1000;m++) { do { 	i=m%10; 	m/=10; 	s=s*10+i; 	}while (m == 0); 	if (s == m) n++; } 	printf("三位使得回文数个数为:%d\n",n); }

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

user: user-6
content: what an algorithm!!

user: user-7
content: m/=10;这一句，m=m/10；这样m的值一直偏小，无法达到上面跳出循环的条件，所以死了吧

user: user-8
content: for或者while中一般都是线性增加或者减少控制的值，你这样搞肯定容易死循环
user-0 提问: C语言模拟栈是出错。

回复:
user: user-1
content: 听到模拟栈，我第一个想到LZ是大神，要自建虚拟机，结果原来是小白，在练习数据结构~  void push(Stack * pS,int val){ //你这个push写的狗屁不通，不作评论~ //PNode p=(PNode)malloc(sizeof(PNode)); PNode p=(PNode)malloc(sizeof(Node)); p->date=val; //p->next=pS->pHead; p->next = NULL; //pS->pHead=p; pS->pTail->next = p; pS->pTail = p; }  void travel(Stack * pS){ //PNode p=pS->pHead; PNode p=pS->pHead->next; //你既然带了头节点，那么这个头节点是没有数据的，遍历时自然要跳过 while(p!=NULL){  printf("%d ",p->date);  p=p->next; } }  还有题外话，data才是数据的英文，你那个date是日期。还有你没写内存释放的函数，会有内存泄漏

user: user-2
content: init函数你写了没有调用

user: user-3
content: c language debug
user-0 提问:  做定制好还是做基线好

回复:
user: user-1
content: 定制组可以接触到市场，需要和他人交流，而且你过去会作为老人，提升空间也比较大。

user: user-2
content: 关键看你自己的兴趣。定制会有各种客户、市场上的压力，客户都希望用有限的价钱买到十全十美的东西，甚至有些功能他一辈子也用不到，他也要求要完美的具有，尤其是小公司，随着产品越来越多，客户越来越多，就会越来越烦，又不敢得罪客户，光应付这些就够了，肯本没有时间去沉下心来做技术，而且如果你对基线的技术不熟的话，未必能满足客户的定制要求，要得去找做基线的帮忙，如果做基线的专注于他自己的事情，不帮你，到时客户找的是你，解决问题还得求人，夹在中间很麻烦。如果你喜欢做技术，觉得研究技术不是压力，而是兴趣，建议还是做基线的好，如果相反，那就做定制。

user: user-3
content: 具体是做什么。

user: user-4
content: 基线项目对能力要求高. 如果你要考虑如何让各种定制更简单的话.

user: user-5

user: user-6
content: it depends
user-0 提问: 相同思路编程~~多个文件编程和单个文件编程结果不同~~求指教~~

回复:
user: user-0
content: 引用 10 楼 vipcxj 的回复:[quote=引用 9 楼 pokerLee 的回复:] [quote=引用 7 楼 vipcxj 的回复:]  printf("The second of your age is %e", age_sec(age));  你那多个文件的例子中相关代码请改成这样，至于原因，LZ还是先看书去吧，因为根据LZ犯的错误，我就知道LZ还在婴儿学语阶段，就算告诉你为什么，你也看不懂~应该看哪本书~~求指教~~[/quote] 只要是教C/C++基础的就行，关于你的错误，看函数这章就行了[/quote]谢谢

user: user-1
content: 引用 9 楼 pokerLee 的回复:[quote=引用 7 楼 vipcxj 的回复:]  printf("The second of your age is %e", age_sec(age));  你那多个文件的例子中相关代码请改成这样，至于原因，LZ还是先看书去吧，因为根据LZ犯的错误，我就知道LZ还在婴儿学语阶段，就算告诉你为什么，你也看不懂~应该看哪本书~~求指教~~[/quote] 只要是教C/C++基础的就行，关于你的错误，看函数这章就行了

user: user-0
content: 引用 7 楼 vipcxj 的回复: printf("The second of your age is %e", age_sec(age));  你那多个文件的例子中相关代码请改成这样，至于原因，LZ还是先看书去吧，因为根据LZ犯的错误，我就知道LZ还在婴儿学语阶段，就算告诉你为什么，你也看不懂~应该看哪本书~~求指教~~

user: user-0
content: 引用 3 楼 angel_su 的回复:晕，多文件那个代码错有误，%e格式对应参数是函数名，呢怎会正确。h文件做函数声明即可，不要在里面写实现的代码，另外再开个.c文件往里面写...我把函数返回值赋给了一个变量，然后让变量显示就正常了~~这是为什么？求指教~~ 程序显示变量后可正常运行了~~

user: user-1
content: printf("The second of your age is %e", age_sec(age));  你那多个文件的例子中相关代码请改成这样，至于原因，LZ还是先看书去吧，因为根据LZ犯的错误，我就知道LZ还在婴儿学语阶段，就算告诉你为什么，你也看不懂~

user: user-0
content: 引用 3 楼 angel_su 的回复:晕，多文件那个代码错有误，%e格式对应参数是函数名，呢怎会正确。h文件做函数声明即可，不要在里面写实现的代码，另外再开个.c文件往里面写...声明不是函数么~~头文件不应该包含么~~再有格式控制符%e对应的函数不可以看成是返回值么？求指教~~

user: user-0
content: 引用 2 楼 wangyaninglm 的回复:第一个程序写的不太对啊，函数运行完后，那个值就释放掉了啊。 第二个程序对着呢。如何处理求指教~~

user: user-0
content: 引用 1 楼 turingo 的回复:多文件的时候，main.c是如何写的？  [quote=引用 楼主 pokerLee 的回复:] 思路、变量都相同，单个文件是按照多个文件为模板编写。但是输出结果差异很大，多个文件编程效果图如下   得出结果如下图  单个文件编程效果图如下  得出结果如下图  求指点~~是不是没设置指针的原因？[/quote]第一张图不是main.c么？

user: user-2
content: 晕，多文件那个代码错有误，%e格式对应参数是函数名，呢怎会正确。h文件做函数声明即可，不要在里面写实现的代码，另外再开个.c文件往里面写...

user: user-3
content: 第一个程序写的不太对啊，函数运行完后，那个值就释放掉了啊。 第二个程序对着呢。

user: user-4
content: 多文件的时候，main.c是如何写的？  引用 楼主 pokerLee 的回复:思路、变量都相同，单个文件是按照多个文件为模板编写。但是输出结果差异很大，多个文件编程效果图如下   得出结果如下图  单个文件编程效果图如下  得出结果如下图  求指点~~是不是没设置指针的原因？
user-0 提问: 怎样把大型的c语言程序写好？比如更层次化，接口与实现的分离等等？

回复:
user: user-1
content: 看看FILE流是如何设计的。

user: user-2
content: 用比如Source Insight软件查看、修改代码 ？

user: user-3
content: 引用 4 楼 fengyunjh6 的回复:知道该这么做，但是不知道具体怎么分。  有没有比较详细的介绍这方面的资料。   引用 1 楼 KenZhang1031 的回复:自己规划啊。把自己要实现的功能规划好，细分，先做到规划，要有那些模块，要提供哪些接口？分别有哪些文件？工程目录层次也规划好，规划的同时必须要考虑可移植、可维护性和可扩展性，要建立模块是独立的这样的思想，模块写好了可以用于不同的工程，规划好了再写程序，层次要分明。不要上来就写，更不要一个函数、一个文件写到底，写到哪算哪，出问题由推翻重写，切不要这样做。我没见过，或者说没看过，这些是属于软件工程方面的范畴吧？或者下别人的工程看看别人的架构是怎样的，这样也能学到一些。

user: user-0
content: 知道该这么做，但是不知道具体怎么分。  有没有比较详细的介绍这方面的资料。   引用 1 楼 KenZhang1031 的回复:自己规划啊。把自己要实现的功能规划好，细分，先做到规划，要有那些模块，要提供哪些接口？分别有哪些文件？工程目录层次也规划好，规划的同时必须要考虑可移植、可维护性和可扩展性，要建立模块是独立的这样的思想，模块写好了可以用于不同的工程，规划好了再写程序，层次要分明。不要上来就写，更不要一个函数、一个文件写到底，写到哪算哪，出问题由推翻重写，切不要这样做。

user: user-4
content: 学习一下面向对象的设计，以及设计模式 比如有些开源代码里面用结构体包裹指针函数就是C在用类似于C++成员函数的概念

user: user-5
content: 改用C++~~~

user: user-3
content: 自己规划啊。把自己要实现的功能规划好，细分，先做到规划，要有那些模块，要提供哪些接口？分别有哪些文件？工程目录层次也规划好，规划的同时必须要考虑可移植、可维护性和可扩展性，要建立模块是独立的这样的思想，模块写好了可以用于不同的工程，规划好了再写程序，层次要分明。不要上来就写，更不要一个函数、一个文件写到底，写到哪算哪，出问题由推翻重写，切不要这样做。
user-0 提问: ./a.out 0 < /dev/tty 如何理解？

回复:
user: user-1
content: 是在看UNIX环境高级编程吧，哈哈，我也刚刚开始看。 ./a.out 2 2>>temp.foo 就是先执行./a.out 2，并将错误信息追加输入到temp.foo ./a.out 5 5<>temp.foo 这句书上有解释的啊，先执行./a.out 5，同时在文件描述符5上打开temp.foo文件，并以这个文件为程序执行的输入和输出

user: user-2
content: http://www.explainshell.com/

user: user-3
content: 直接从鸟哥私房菜里复制的 这里我们来说明命令重定向里几个常用的符号与设备： · < ：由 < 的右边读入参数文件； · > ：将原本由屏幕输出的正确数据输出到 > 右边的file（文件名称）或device（设 备，如printer）； · >> ：将原本由屏幕输出的正确数据输出到 >> 右边，与 > 不同的是，该文件将 不会被覆盖，而新的数据将以累加方式添加到文件的最后面； · 2> ：将原本应该由屏幕输出的错误数据输出到2>的右边； · /dev/null ：可以视为垃圾设备。

user: user-0
content: 引用 4 楼 xwhbwas2008 的回复:[quote=引用 2 楼 YTerrenceLau 的回复:] 用tty设备，取代文件0（stdin），来运行a.out。  就是说a.out的所有需要输入的信息，都是通过tty设备获得的，而不是用户终端（有可能用户终端也是tty）。 你好，那再问下 ./a.out 5 5<>temp.foo 如何理解阿 ？ 是不是多写了一个5 ？[/quote] 还有一个 ./a.out 2 2>>temp.foo 麻烦Lau了。thanks

user: user-0
content: 引用 2 楼 YTerrenceLau 的回复:用tty设备，取代文件0（stdin），来运行a.out。  就是说a.out的所有需要输入的信息，都是通过tty设备获得的，而不是用户终端（有可能用户终端也是tty）。 你好，那再问下 ./a.out 5 5<>temp.foo 如何理解阿 ？ 是不是多写了一个5 ？

user: user-4
content: 标准输入重定向

user: user-5
content: 用tty设备，取代文件0（stdin），来运行a.out。  就是说a.out的所有需要输入的信息，都是通过tty设备获得的，而不是用户终端（有可能用户终端也是tty）。

user: user-6
content: 执行./a.out文件, 命令行参数是0, 程序里scanf()输入的地方从/dev/tty文件里读
user-0 提问: 几个简单的c

回复:
user: user-1
content: 相当于SENSOR_BLUE|SENSOR_YELLOW|SENSOR_NEGATIVE|SENSOR_CANVAS  引用 3 楼 u013410394 的回复:[quote=引用 1 楼 turingo 的回复:] 先看一遍《C Prime Plus》，再买开发板学习，随时回帖。  [quote=引用 楼主 u013410394 的回复:] typedef struct L_code_tag{ 	unsigned int datatype; 	int a; }L_Code;          //这里我定义这个结构体，是不是以后用这个结构体初始化                   //变量只需要使用别名L_Code A;就可以？？那这里定义了结构体                   //A有什么具体的用处？ 	   L_Code * rd = rd_prep；//这样定义了一个结构体指针？有什么具体的用处吗，希望多讲讲。      想要学习单片机，现在打算买开发板，请问买开发板前需要做什么吗？只买开发板可以学习单片机了吗？  同时问大家，csdn这个类似财富值的可用分，是怎么赚的？只能回答题目吗？别的途径可以吗？[/quote]          SENSOR_BLUE|\         SENSOR_YELLOW|\         SENSOR_NEGATIVE|\         SENSOR_CANVAS, 我刚看到有这个的，那这里|\是啥呢？[/quote]

user: user-2
content: |是按位或 \是续行符

user: user-0
content: 引用 1 楼 turingo 的回复:先看一遍《C Prime Plus》，再买开发板学习，随时回帖。  [quote=引用 楼主 u013410394 的回复:] typedef struct L_code_tag{ 	unsigned int datatype; 	int a; }L_Code;          //这里我定义这个结构体，是不是以后用这个结构体初始化                   //变量只需要使用别名L_Code A;就可以？？那这里定义了结构体                   //A有什么具体的用处？ 	   L_Code * rd = rd_prep；//这样定义了一个结构体指针？有什么具体的用处吗，希望多讲讲。    想要学习单片机，现在打算买开发板，请问买开发板前需要做什么吗？只买开发板可以学习单片机了吗？  同时问大家，csdn这个类似财富值的可用分，是怎么赚的？只能回答题目吗？别的途径可以吗？[/quote]          SENSOR_BLUE|\         SENSOR_YELLOW|\         SENSOR_NEGATIVE|\         SENSOR_CANVAS, 我刚看到有这个的，那这里|\是啥呢？

user: user-3
content: 你可以看看自引用的结构指针，自引用的在链表中是很有用的。买开发板之前需要了解熟悉具体一款单片机的片上资源，可以看看相关的书，用到具体的单片机时随时翻看芯片的数据手册。好好学吧

user: user-1
content: 先看一遍《C Prime Plus》，再买开发板学习，随时回帖。  引用 楼主 u013410394 的回复:typedef struct L_code_tag{ 	unsigned int datatype; 	int a; }L_Code;          //这里我定义这个结构体，是不是以后用这个结构体初始化                   //变量只需要使用别名L_Code A;就可以？？那这里定义了结构体                   //A有什么具体的用处？ 	   L_Code * rd = rd_prep；//这样定义了一个结构体指针？有什么具体的用处吗，希望多讲讲。    想要学习单片机，现在打算买开发板，请问买开发板前需要做什么吗？只买开发板可以学习单片机了吗？  同时问大家，csdn这个类似财富值的可用分，是怎么赚的？只能回答题目吗？别的途径可以吗？