Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 新手 求帮助 uart程序问题

回复:
user: user-0
content: 我个人觉得看懂程序最重要的还是以后自己能够应用，所以想要搞懂这些最基本的东西，关于在9楼里提出的问题，希望前辈们帮忙回答下，也可以是像g_ctrlFlag形式的变量，给出自己的见解，或者需要我再提供关于这个程序的相关信息也可以提出来~

user: user-1
content: 已经注释的很清楚了， 看注释就行啦。 变量的话就跳转查看具体定义。

user: user-0
content: g_ctrlFlag的含义 1.g_ctrlFlag在pic单片机中有固定的某种含义？ 2.ctrl一般表示控制，Flag一般表示标志，那么g是什么含义？ 3.下划线"_"的作用时什么？ 4.g_ctrlFlag.rcvOK的g_ctrlFlag后加一“.”后再加一个标示后又表示什么？

user: user-0
content: 具体到每一句的功能，好多变量不知道是干嘛的，这些变量的名字都能看懂吗？我越看越晕的说~

user: user-2
content: 这上面不是有注释吗？ void uart_fmAnaly(void) {     uint rcvcrc16,sndcrc16 ;     ptagtBBFRAME pfram ;          //接收正确     if(g_ctrlFlag.rcvOk==1)     {         pfram=(ptagtBBFRAME)&g_uartbuf[0];         rcvcrc16=CRC16(g_uartbuf,pfram->dlen-2,0xffff);         //         //查询crc是否正确         if(rcvcrc16==(g_uartbuf[pfram->dlen-2]|g_uartbuf[pfram->dlen-1]<<8))         {             //0x80,主板对打卡板的响应消息             if(pfram->cmd&FRM_MANS_FLAG)             {                 //LED_ON();                 g_ctrlFlag.fmok=1 ;                 //收到正确的响应包             }             else if((pfram->cmd&FRM_MOSI_FLAG)==FRM_MOSI_FLAG)             {                 //0x40,主板到打卡板的消息(做配置，状态查询的一些命令)                 switch(pfram->cmd)                 {                     case M_STATE_CMD :                     //查询串口的状态                     pfram->cmd|=FRM_MANS_FLAG ;                     sndcrc16=CRC16(g_uartbuf,pfram->dlen-2,0xffff);                     #if 1                      uart_sndStr((uchar*)g_uartbuf,5);                     //先把数据体前面的数据发送完成                     uart_sndStr((uchar*)&sndcrc16,2);                     //先把数据体前面的数据发送完成                     #endif                      uart_cfgRst();                     break ;                 }             }             g_ctrlFlag.crdTmEn=FALSE ;             //关闭回复计时             g_cardTM=0x00 ;             g_cardState=CARD_MUTUAL ;             //3,         }         //错误的数据包         //其他类型的错误帧         else          {             g_cardState=CARD_SEEK ;             //0,             uart_cfgRst();         }         g_ctrlFlag.rcvOk=0 ;     } } void uart_cfgRst(void) {     g_rcvpos=0 ;     g_ctrlFlag.rcvOk=0 ;     UART_INT_EN(); }

user: user-0
content: 不太懂，什么是上位机、下位机？

user: user-3
content: 这个是下位机程序吧

user: user-4
content: 2个字 硬看

user: user-5
content: 引用 6 楼 uwillobe 的回复:这些变量是什么含义，看懂的帮忙解释下,谢了！ rcvcrc16 sndcrc16 ptagtBBFRAME g_ctrlFlag.rcvOK g_ctrlFlag.fmOK pfram dlen FRM_MANS_FLAG cmd FRM_MOSI_FLAG uart_cfgRst 不太了解项目只能猜了： rcvcrc16//16位CRC校验，难道是接收到的？ sndcrc16//16位CRC校验，发送的？ ptagtBBFRAME//指向BB框架目标的指针？ g_ctrlFlag.rcvOK//控制位标中的rcvOK标记 g_ctrlFlag.fmOK//控制位标中的fmvOK标记 pfram//指向框架，窗口的指针？ dlen//长度 FRM_MANS_FLAG//人的框架标记 cmd//命令 FRM_MOSI_FLAG//MOSI的框架标记 uart_cfgRst//uart配置Rst不懂是什么意思。

user: user-0
content: 这些变量是什么含义，看懂的帮忙解释下,谢了！ rcvcrc16 sndcrc16 ptagtBBFRAME g_ctrlFlag.rcvOK g_ctrlFlag.fmOK pfram dlen FRM_MANS_FLAG cmd FRM_MOSI_FLAG uart_cfgRst
user-0 提问: gcc中的语句表达式

回复:
user: user-1
content: 宏可能会不止一次地计算它的参数。函数对它的参数只会计算一次，而宏可能会计算两次甚至更多次。如果参数有副作用，多次计算参数的值可能会产生意外的结果。  考虑下面的例子：  #define MAX(x,y)    ((x)>(y) ? (x) :(y))  n = MAX(i++, j);  宏展开以后就是：  n =((i++)>(j)?(i++):(j));   如果i大于j，那么i可能会被（错误地）增加了两次，一次在比较的时候，一次在返回MAX的值的时候，也就是说n被赋予了错误的值。

user: user-2
content: 例子举得不太好，就是类似的意思吧。

user: user-2
content: i = 1; max(i++, 0); 宏替换之后： ((a) > (b) ? (a) : (b)) ((i++) > (0) ? (i++) : (0)) i自加了2次。

user: user-3
content: 能不能别想这种找抽的问题

user: user-4
content: 个人感觉是为了防止a和b是两个表达式，且其中出现自加或自减这样的操作，进而导致用上面的形式可能会因多次计算而出错，而下面的是先进行了计算，可以肯定三目运算符判断的只是两个数，所以安全 如有错误，欢迎指出
user-0 提问: 输出怪怪的，为什么

回复:
user: user-1
content: 能否详细描述一下

user: user-1
content: 对了，问一下，你的问题是什么

user: user-0
content: 问题还没解决，换成c++问题消失

user: user-2
content: 输出用%lf

user: user-1
content: 浮点数，如果是双精度，输出时可以用%f，但输入时必须用%lf  循环变量最好不要用浮点数，因为浮点数在这儿无法精确存储

user: user-3
content: 你想用这代码干啥？

user: user-1
content: scanf那儿要用%lf
user-0 提问: 结构体问题

回复:
user: user-1
content: 使用引用或者指针来传参，否则值传递只会改变副本，而不会改变原有数据的值。

user: user-1
content: 用指针：#include<stdio.h> #include<stdlib.h>  struct numbers{ 	int apple[5]; 	int boy[4]; 	int cat[3]; 	int dog[2]; 	int egg; };  void initializenumbers(struct numbers* good);  int main(){ 	struct numbers good; 	initializenumbers(&good);  	printf("%d\n", good.egg);      //  	return 0; }  void initializenumbers(struct numbers* good){ 	int a, b, c, d; 	for (a = 0; a < 5; a++){ 		good->apple[a] = 1;  		for (b = 0; b < 4; b++) 			good->boy[b] = good->apple[b] + good->apple[b + 1]; 		for (c = 0; c < 3; c++) 			good->cat[c] = good->boy[c] + good->boy[c + 1]; 		for (d = 0; d < 2; d++) 			good->dog[d] = good->cat[d] + good->cat[d + 1]; 		good->egg = good->dog[0] + good->dog[1]; 		printf("%3d\n", good->egg);                      //这里print出的egg = 16； 	} }
user-0 提问: linux c Ftp实现

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

user: user-2
content: lz你起码得知道自己代码哪里出错了吧，不贴代码谁知道你的quit和bye是什么玩意

user: user-0
content: 上边的那个问题前几天搞定了，目前遇到的问题是我的ftp文件传输的时候怎么断开文件传输，我使用了close和Ctrl+c没用，使用quit或bye的时候导致崩溃。我使用C写的，请问大家这个怎么处理

user: user-3
content: 引用 3 楼 nanjingnew4 的回复:统一编码啊，传递报文的时候使用同一种，如果做不到统一的话那就转换下把，utf8和gbk字节数都不一样，肯定没法比+1

user: user-2
content: 统一编码啊，传递报文的时候使用同一种，如果做不到统一的话那就转换下把，utf8和gbk字节数都不一样，肯定没法比

user: user-0
content: 我在linux下用c写的一个ftp客户端，进行下载一个文件的时候可以下载英文的文件，但是中文的文件返回的错误是找不到该文件，就是不能够识别ftp server的中文文件名，我想是本地请求ftp server的时候的编码和ft server的文件名编码不同导致的，ftp server 的编码是gbk，具体不知道该怎么解决这个问题，

user: user-4
content: 具体问题是什么？没说清楚
user-0 提问: 求大神指导修改一个小程序，愿意10元话费QB奉上

回复:
user: user-0
content: 这个程序是读取LOL游戏 UDP连接的  本身编译的时候提示“命名空间不能直接包含字段或方法之类的成员”第一行第一个词那里    我主要想请大神修改一下  去除读取LOL游戏 UDP连接以外的什么连接服务器功能   并且把生成的结果复制到粘贴板上   10元绝不食言
user-0 提问: 写了个读取txt并且统计字符出现次数的程序单运行不了，请大神帮忙看看错在哪里

回复:
user: user-1
content: 你确定你要记录文件中的各类字符数？请将你包含的头文件都用上，问题迎刃而解；看看基础去吧。ctype.h头文件：ispunct()判断字符是否为标点符号，isdigit(),判断字符是否为数字，isalnum()判断字符是否为字幕，isupper(),islower(),等等…还有你的for循环只给字符数组的第一个元素复制，并且不断从文件中读取数据，每次一个字符，每次读取的字符都赋给字符数组的第一个元素，并且读文件直到结尾，最终字符数组只有一个元素被赋值，是文件的最后一个字符

user: user-2
content: string[i] = p； 中的i没有更新

user: user-3
content: printf("%s",count);错了吧，count是一个int的数组，怎么可以用%s来打印呢  while的语句判断也不能用‘；’来结尾，这样会进入循环中，不能进行赋值  所以，修改了下，试试看吧，  int main(int argc, char *argv[])  { 	FILE *fp = NULL; 	int count[93]; 	 	fp = fopen("device.txt", "rb"); 	while(!feof(fp)/*string[c] != '\0'*/); 	{ 		count[fgetc(fp) - ' ']++; 	} 	fclose(fp); 	printf("%d\n", count); 	return 0; }

user: user-4
content: 这样？ #include<stdio.h> #include<string.h>   int main() {    FILE* fp = fopen("script.txt", "rb");    int count[93] = {0};    while ( !feof(fp));    {    		count[fgetc(fp)-' ']++;    }     printf("%s", count)： }
user-0 提问: 求助， execve函数无法编译

回复:
user: user-1
content: char* strProcess[] = {"new", (char *) NULL}; execve("new", strProcess, environ);

user: user-2
content: 引用 3 楼 godbreak 的回复:[quote=引用 2 楼 u012879806 的回复:] [quote=引用 1 楼 godbreak 的回复:] 1. 应该是extern char **envrion;不加extern，envirion是一个局部变量，指针的值是脏的； 2. exec系列函数，无论是vector（execv×）还是list（execl×），参数表（argv）都要求至少包含一个字符指针，且以空指针结束——（char *）NULL。习惯上，参数表的第一个参数就是exec函数的第一个参数； 3. 很多Linux系统的实现会忽视参数表的第一个参数，但并不是每个类Unix系统都这样； 4. 关于搜索文件名，我只知道一个命令——find，eg: find ./ -name hello。更多信息参阅man find。   全局变量？   什么意思？   为什么是脏的？  变量不要定义吗  全局变量，只申明，你不觉得奇怪吗？  所以我改成局部变量。  [/quote] 因为char **environ在头文件中以全局变量的形式声明且定义了。不加extern，相当于在内部作用域中屏蔽了外部作用域的environ，成为一个新定义的变量。而局部变量不初始化，其值是不确定的。 如果这样说还不明白，你应该去看C的语法书了。[/quote]   理解了， 这个变量，是linux的头文件里有，  我还以为是随便命名的呢。   可是这个还是无法编译： extern char** environ;  char* strProcess[] =""; execve("new", &strProcess, environ); //无法编译  提示：  ./test.cpp:41:36: error: cannot convert ‘char (*)[1]’ to ‘char* const*’ for argument ‘2’ to ‘int execve(const char*, char* const*, char* const*)’ make: *** [test.o] Error 1

user: user-1
content: 引用 2 楼 u012879806 的回复:[quote=引用 1 楼 godbreak 的回复:] 1. 应该是extern char **envrion;不加extern，envirion是一个局部变量，指针的值是脏的； 2. exec系列函数，无论是vector（execv×）还是list（execl×），参数表（argv）都要求至少包含一个字符指针，且以空指针结束——（char *）NULL。习惯上，参数表的第一个参数就是exec函数的第一个参数； 3. 很多Linux系统的实现会忽视参数表的第一个参数，但并不是每个类Unix系统都这样； 4. 关于搜索文件名，我只知道一个命令——find，eg: find ./ -name hello。更多信息参阅man find。   全局变量？   什么意思？   为什么是脏的？  变量不要定义吗  全局变量，只申明，你不觉得奇怪吗？  所以我改成局部变量。  [/quote] 因为char **environ在头文件中以全局变量的形式声明且定义了。不加extern，相当于在内部作用域中屏蔽了外部作用域的environ，成为一个新定义的变量。而局部变量不初始化，其值是不确定的。 如果这样说还不明白，你应该去看C的语法书了。

user: user-0
content: 引用 1 楼 godbreak 的回复:1. 应该是extern char **envrion;不加extern，envirion是一个局部变量，指针的值是脏的； 2. exec系列函数，无论是vector（execv×）还是list（execl×），参数表（argv）都要求至少包含一个字符指针，且以空指针结束——（char *）NULL。习惯上，参数表的第一个参数就是exec函数的第一个参数； 3. 很多Linux系统的实现会忽视参数表的第一个参数，但并不是每个类Unix系统都这样； 4. 关于搜索文件名，我只知道一个命令——find，eg: find ./ -name hello。更多信息参阅man find。   全局变量？   什么意思？   为什么是脏的？  变量不要定义吗  全局变量，只申明，你不觉得奇怪吗？  所以我改成局部变量。

user: user-1
content: 1. 应该是extern char **envrion;不加extern，envirion是一个局部变量，指针的值是脏的； 2. exec系列函数，无论是vector（execv×）还是list（execl×），参数表（argv）都要求至少包含一个字符指针，且以空指针结束——（char *）NULL。习惯上，参数表的第一个参数就是exec函数的第一个参数； 3. 很多Linux系统的实现会忽视参数表的第一个参数，但并不是每个类Unix系统都这样； 4. 关于搜索文件名，我只知道一个命令——find，eg: find ./ -name hello。更多信息参阅man find。
user-0 提问: 关于程序功能实现的效率问题？

回复:
user: user-1
content: 啊是南京话？可以先读取文件大小，可以一次性分配内存，然后写个函数一次性读取好了。

user: user-2
content: 大一就有这觉悟了！厉害厉害，好好走下去吧 不要需要考虑太复杂的情况，随着学习的深入，后面的知识将会很好的解决你现在的问题，

user: user-0
content: 引用 1 楼 FancyMouse 的回复:>在实际生活中，“帐户名”.txt中的数据会很庞大 实际生活中用不到你的系统。别关心不存在的需求。 >我也没法判断哪一种更合适？ 能跑小数据就行。你现在即使关心大规模也很难把事情搞对，甚至连什么是大规模数据下需要关心的问题都不一定对。一步一步来。 >为了解决文件操作里的一个bug，我用了两天时间，花了大概将近六个小时 你才大一。有道理，我好像有点好高骛远了，还是打好基础。

user: user-3
content: >在实际生活中，“帐户名”.txt中的数据会很庞大 实际生活中用不到你的系统。别关心不存在的需求。 >我也没法判断哪一种更合适？ 能跑小数据就行。你现在即使关心大规模也很难把事情搞对，甚至连什么是大规模数据下需要关心的问题都不一定对。一步一步来。 >为了解决文件操作里的一个bug，我用了两天时间，花了大概将近六个小时 你才大一。

user: user-4
content: 刚考完高考的我不解释。。。
user-0 提问: Linux Opencv编译提示找不到list

回复:
user: user-1
content: 因为list是c++的头文件，而你编译的源文件是c程序，改成cpp就可以了

user: user-2
content: 在#include <opencv2/opencv.hpp>外加上#ifdef __cplusplus .. #endif

user: user-3
content: 确实用g++编译就可以通过的～～

user: user-4
content: 我找到解决办法了，虽然不知道为什么，但是用g++编译通过了

user: user-4
content: 留个联系方式吧qq279510616，如果看到的话可以交流下，多谢了

user: user-4
content: 你好，你这个问题解决了吗？我这也碰到了这个问题
user-0 提问: 求大神讲解下这段代码的意思。

回复:
user: user-1
content: # include <stdio.h>  int main() { 	int a; 	char * h=" - o x \n";    	 	int m[90] = {0};      // -  等于  0； 	m[40] = m[50] = 1;    // o  等于  1； 	m[41] = m[49] = 2;    // x  等于  2； 	                      // \n 等于  3；  	for(int i = 0; i < 10; m[a] = 3)   //一行9个, 等于3 其实就是换行。 	{                                 // 这相当于是一个 二维数组  m[9][9]; 		a = i++ * 9; 	} 	 	for(int j = 9; j < 82; ++j)       // j= 9 ,相当于 m[0][9];  这9个格子就不显示了。 	{ 		printf("%.2s", &h[m[j]*2]);  // 关键就在这里，"%.2s" 是如何把 0.1.2.3 转换成 - o x \n 的 	}                                 	 	return 0; }

user: user-2
content: 代码功能不明白，还是代码语法不明白？

user: user-3
content: 在等大神的同时把写代码的人打死吧。

user: user-4
content: 看了一点，头晕脑胀，不想看了

user: user-5
content: #include <stdio.h>  int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10}; void k(){if(m[p]==0) for(i=0;i<8;i++){                  for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])                      c++;                  if(c&&m[v]==t){                     a+=c;v=p;                     if(d)                     do m[v]=t,v+=r[i];                   while(m[v]!=t);                   }                   }          } char*h=" - o x\n";  int main(){     for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)     m[40]=m[50]=t=s=1;        for(;;a=d=0){         for(p=9;p<82;++p)k(),           printf("%.2s",&h[m[p]*2]);           if(a)           for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d",&p,&i),p+=i*9):++p;else if(s)s=0,printf("pass");           else            break;         t=3-t;}     return 0; }

user: user-6
content: 把变量都定义成了全局的，第一次见  楼主哪里不明白？

user: user-7
content: 绳命布洗，啥铁布紫！

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

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

user: user-0
content: 语法看不懂。。。。。

user: user-9
content: 不知LZ从哪里搞来的,真心难
user-0 提问: linux新手，关于mmap

回复:
user: user-1
content: p[0]=和*p=是一回事。 而且结果没错。 因为你p定的是int *，所以p[0]=0x30313233是写一个int到内存，写了4字节，按小端存储就是3 2 1 0.

user: user-1
content: sizeof(int) 32位下 就是4字节长。 如果你希望结果是0 1 2 3那么你需要写成p[0]=0x33323130;  这个int是一次写入4字节的，并不是分4次每次写1个字节，小端cpu的话写入的4字节代表的int就是低位在前高位在后

user: user-0
content: 引用 1 楼 Idle_ 的回复:p[0]=和*p=是一回事。 而且结果没错。 因为你p定的是int *，所以p[0]=0x30313233是写一个int到内存，写了4字节，按小端存储就是3 2 1 0. 是30先压进寨里才在后面吗？ 要写成p[0]=0123 效果一样吗？ 另外为什么一个常量占4字节，有类似资料吗
user-0 提问: 今天的华为上级题第一道，求解

回复:
user: user-1
content: 还可以使用两个线程，一个将产生的结果存入文件中，另一个sleep（）10秒，然后输出文件内存

user: user-1
content: 引用 3 楼 chybeyond123456789 的回复:引用 1 楼 lovesmiles 的回复:计算出起始字节，按位与或并算就行了。多行输入怎么实现，什么时候结束？定时，现将输出存放在文件中，每执行一次写一次换行。十秒产生一个信号后打印文件中所有的数据，（我感觉这样可以）

user: user-2
content: 引用 1 楼 lovesmiles 的回复:计算出起始字节，按位与或并算就行了。多行输入怎么实现，什么时候结束？

user: user-3
content: 引用 1 楼 lovesmiles 的回复:计算出起始字节，按位与或并算就行了。+1

user: user-4
content: 计算出起始字节，按位与或并算就行了。
user-0 提问: fork ,vfork

回复:
user: user-1
content: 回复4楼： (1)pid_t可以当做windows下的进程句柄看，但是句柄是一个广义的概念，在Windows中，任何通过操作系统API创建的东西都返回一个句柄，句柄就是一个指针（在我的vs中）；pid_t只有当创建一个进程时才能得到，在UNIX系统中，描述符使用的比较广泛，比如打开一个文件（open），会得到一个文件描述符，描述符通常是一个int类型的变量。  (2)我提供的命令没问题，是你用错了，命令ps的参数我可没有加横线哦 ps aux | grep ‘Test'  (3)system('pause')，pause是Windows下的命令，Linux是没有这个命令的，但是有一个函数，pause()，在头文件unistd.h中  稍稍修改后，代码如下：   #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h>  int gval = 0;  int main () {   int nval = 7;    pid_t pid = fork();    if (pid < 0)     return -1;    if (0 == pid) { // child     gval++;     nval++;      printf("In child process %u\n", (unsigned int)getpid());     printf("[c] %d %d\n", gval, nval);     pause();     exit(0);   } else {     printf("In parent process %u\n", (unsigned int)getpid());     printf("[p] %d %d\n", gval, nval);     wait(NULL);   }    return 0; }   输出： [root@localhost src]# ./Test In child process 5015 [c] 1 8 In parent process 5014 [p] 0 7  命令输出： [root@localhost test_env]# ps aux | grep 'Test' root      5014  0.0  0.0   1608   344 pts/2    S+   10:13   0:00 ./Test root      5015  0.0  0.0   1608   220 pts/2    S+   10:13   0:00 ./Test root      5025  0.0  0.0   4016   672 pts/3    R+   10:14   0:00 grep Test

user: user-0
content: 引用 3 楼 user-2 的回复:先入为主而已。楼主先接触Windows的进程，所以总会想在POSIX标准的OS中找到Windows已有的功能。找不了就难免有些失望  帮忙看4楼

user: user-0
content: 引用 2 楼 jwj070524 的回复:（1）你创建的进程当然有名字了，如果父进程名字叫A，fork之后，若没有使用exec系列的函数执行其他程序的话，子进程的名字跟父进程一样，LInux命令"ps aux | grep 'A'"就可以看到了 （2）一个进程fork时，操作系统会新建一个进程，复制父进程的所有代码与数据，成为自身进程的执行环境，此次此刻，父子进程的状态一模一样（所有数据，包括各种描述符等，堆栈以及保存的cpu寄存器值），唯一的不同是：父子进程从系统调用fork中得到的返回值，父进程得到子进程的pid，子进程得到0，这个是操作系统实现的，应用程序据此判断自己是父还是子。   1. pid_t 是不是类似widnows 下的句柄？  2. 你提供的命令有问题。  我发我的命令给你看：   ps -aux | grep -i "Test"  可执行文件名字叫Test ，所以 我这样匹配，应该对啊。  结果为（你看图）   http://i2.tietuku.com/4d48b0c0578c0985.jpg  复制链接，就可以看到图了。 图中，没有看到2个进程，怎么回事？    另外付程序代码： #include <iostream> #include<unistd.h> #include<stdio.h> #include<dirent.h> #include<string.h> #include<sys/stat.h> #include<stdlib.h>  using namespace std;  //extern char* const* environ; int gval = 0; int main() { 	int nval = 7; 	pid_t pid; 	pid = fork(); 	if(pid < 0 ) 		return -1; 	if( pid ==0 ) 	{ 		gval++; 		nval++; 		printf("in child process\n"); 		printf("%d %d\n",gval, nval); 		system("pause"); 		_exit(0); 	} 	else 	{ 		printf("in parent process\n"); 		printf("%d %d\n",gval, nval); 	} 	system("pause"); 	return 0; 	//execve("new", "", environ); }    注意代码中有 system("pause");  说明 程序不会关闭，除非强制关闭。  我在shell中 ./Test运行程序的。  然后terminal没有关闭。

user: user-2
content: 先入为主而已。楼主先接触Windows的进程，所以总会想在POSIX标准的OS中找到Windows已有的功能。找不了就难免有些失望

user: user-1
content: （1）你创建的进程当然有名字了，如果父进程名字叫A，fork之后，若没有使用exec系列的函数执行其他程序的话，子进程的名字跟父进程一样，LInux命令"ps aux | grep 'A'"就可以看到了 （2）一个进程fork时，操作系统会新建一个进程，复制父进程的所有代码与数据，成为自身进程的执行环境，此次此刻，父子进程的状态一模一样（所有数据，包括各种描述符等，堆栈以及保存的cpu寄存器值），唯一的不同是：父子进程从系统调用fork中得到的返回值，父进程得到子进程的pid，子进程得到0，这个是操作系统实现的，应用程序据此判断自己是父还是子。
user-0 提问: 还是sizeof与strlen的问题

回复:
user: user-1
content: 你记住一点.   strlen    是计算字符串长度的.  只有要计算字符串的长度, 才能使用这个函数.   就不会乱了.  strlen   ==   string lenght  sizeof是编译的时候就执行的,   也就是"类似"一个宏. 而strlen是程序执行过各中调用, 它是一个函数.

user: user-2
content: sizeof 是操作符（关键字）所求的是类型的大小，编译时就有结果；strlen是函数，计算的是字符串的长度，要在程序中运行时才会出现；

user: user-3
content: strlen是个函数， 在运行时计算， sizeof是个运算符， 在编译时就出结果了。

user: user-4
content: 说的有道理   学习了

user: user-5
content: 比如有一个300ml的瓶子，装了150ml的水，sizeof会得到300，strlen得到150 sizeof里边如果是一个指针，那么就是计算指针所占的空间，32位系统一般就是4. “hello”这个常量字符串共有5个字符和一个隐含的结束符'\0'，所以char str[] 的总空间就是5+1=6.（定义数组如果不标明元素个数，在初始化时系统会根据后边的常量值自动计算）

user: user-6
content: sizeof的源代码在编译器中 strlen的源代码在库函数中

user: user-7
content: sizeof求的是编译系统跟变量分配的空间数。不同的编译系统分配的空间也不同。turbo-c给指针分配的是2个字节。

user: user-8
content: sizeof()是求数组或变量所占的字节数；在第一个sizeof (str)中，它是包括'\0'的。而第二个sizeof表示的是字符串指针变量所占的字节，即4。 strlen()是字符串的长度，不包含‘\0’；

user: user-9
content: 这种问题还要问？百度一下不就知道了吗

user: user-10
content: 第一：字符串在使用sizeof计算时是要计算字符串结束符的，但是strlen是不计算字符串结束符的，所以会相差1； 第二：一个是字符数组，一个字符指针；对于指针变量都是4个字节（在32系统）；

user: user-11
content: 其实char str[] = {'h', 'e', 'l', 'l', 'o', '\0'}

user: user-11
content: sizeof得到的是所占的字节，strlen得到的是字符串长度 第二个是个字符指针，一般是4个字节
user-0 提问: 关于数据类型转换之间的错误！求指教！！附程序 运行结果

回复:
user: user-1
content: 引用 4 楼 u012861727 的回复:[quote=引用 3 楼 zxh707wk 的回复:] 自己写个输入浮点数的函数 能说的具体点吗[/quote]好吧，具体点：自己本人用c语言写个实现能输入浮点数的函数

user: user-0
content: 引用 3 楼 zxh707wk 的回复:自己写个输入浮点数的函数 能说的具体点吗

user: user-1
content: 自己写个输入浮点数的函数

user: user-0
content: 非常好的帖子 但是估计我为了解决这个问题而要看懂这个帖子要花太多时间了 水平还不够 跪求更直接或者水平低一点的解决方法

user: user-2
content: http://bbs.csdn.net/topics/390676437
user-0 提问: 帮忙推荐一本C语言经典书籍

回复:
user: user-1
content: C程序设计语言。

user: user-2
content: msdn98下载地址我也没现成的。 自己搜搜看。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:查MSDN是Windows程序员必须掌握的技能之一。 搜索下载安装MSDN98： mk:@MSITStore:C:\MSDN98\98VS\2052\vccore.chm::/html/_crt_run.2d.time_routines_by_category.htm Run-Time Routines by Category This chapter lists and describes Microsoft run-time library routines by category. For reference convenience, some routines are listed in more than one category. Multibyte-character routines and wide-character routines are grouped with single-byte – character counterparts, where they exist. msdn98下载地址找不到，能不能给个啊？

user: user-3
content: 觉得楼主表达的就有问题 “C语言的api函数”？  介绍windows程序设计的基础书籍：《windows程序设计》 这本书当然是用C。。。

user: user-3
content: 引用 6 楼 gojoy_x13 的回复:谭浩强的 c程序设计 薛非的 品悟c

user: user-4
content: 引用 7 楼 u012184298 的回复:[quote=引用 6 楼 gojoy_x13 的回复:] 谭浩强的 c程序设计 薛非的 品悟c[/quote] 同意这两本书很经典的，完全超过 C专家编程 和 C和指针

user: user-5
content: 领教领教来来来~

user: user-6
content: 《编译原理及实践》 && 《深入理解计算机系统》

user: user-7
content: 《C primer plus》感觉很很基础，也很经典

user: user-8
content: 《Windows 程序设计》+《Windows核心编程》

user: user-9
content: 引用 6 楼 gojoy_x13 的回复:谭浩强的 c程序设计 薛非的 品悟c

user: user-10
content: 谭浩强的 c程序设计 薛非的 品悟c

user: user-11
content: 引用 4 楼 max_min_ 的回复:c和指针吧！比较基础浅显！ ps：c语言和windows有什么关系？为毛推荐windowswindows桌面用户多。。。

user: user-12
content: c和指针吧！比较基础浅显！ ps：c语言和windows有什么关系？为毛推荐windows

user: user-2
content: 查MSDN是Windows程序员必须掌握的技能之一。 搜索下载安装MSDN98： mk:@MSITStore:C:\MSDN98\98VS\2052\vccore.chm::/html/_crt_run.2d.time_routines_by_category.htm Run-Time Routines by Category This chapter lists and describes Microsoft run-time library routines by category. For reference convenience, some routines are listed in more than one category. Multibyte-character routines and wide-character routines are grouped with single-byte – character counterparts, where they exist.  The main categories of Microsoft run-time library routines are:  Argument access Floating-point support  Buffer manipulation Input and output  Byte classification Internationalization  Character classification Memory allocation  Data conversion Process and environment control  Debug Searching and sorting  Directory control String manipulation  Error handling System calls  Exception handling Time management  File handling

user: user-13
content: 想学习 windows sdk/c 编程，1楼那本就可以。 如果是想学习c语言本身的话，推荐：C语言程序设计 现代方法

user: user-14
content: windows程序设计
user-0 提问: 关于斐波那契查找

回复:
user: user-1

user: user-2
content: 楼主是否仔细思考过这个问题？ 可以看看这个——http://v.163.com/movie/2011/12/H/S/M7KV3072J_M89ASJKHS.html

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

回复:
user: user-0
content: 谢谢大家！我选择了dev-c++

user: user-1
content: 引用 6 楼 conanky 的回复:请问你们都用什么编译器，我也觉得vc6不好  vc6是轻便，但是你用c++，总得对c++标准支持的好点吧。vc6都是什么年代的老古董了，可以用vc2012。

user: user-2
content: 引用 8 楼 conanky 的回复:谢谢，还有其他推荐吗？  大型的IDE必须是 vs2010 vs2012 vs2013 较小型的推荐 code::blocks

user: user-3
content: dev c++ c-free

user: user-4
content: dev-c++ code::blocks 这两款都是不错的免费IDE，前者自带中文，对新手友好，后者我很喜欢它的工作空间可以多开

user: user-0
content: 谢谢，还有其他推荐吗？

user: user-5
content: vs2013

user: user-0
content: 请问你们都用什么编译器，我也觉得vc6不好

user: user-6
content: 自己定TRUE FALSE吧。

user: user-3
content: 建议换个编译器，对C99支持较好的

user: user-2
content: 不要用vc6.0了，太老了，都不符合最新标准了。。。

user: user-7
content: VC6的时代还没有stdbool.h

user: user-8
content: stdbool.h/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.  This file is part of GCC.  GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.  GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with GCC; see the file COPYING.  If not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */  /* As a special exception, if you include this header file into source    files compiled by GCC, this header file does not by itself cause    the resulting executable to be covered by the GNU General Public    License.  This exception does not however invalidate any other    reasons why the executable file might be covered by the GNU General    Public License.  */  /*  * ISO C Standard:  7.16  Boolean type and values  <stdbool.h>  */  #ifndef _STDBOOL_H #define _STDBOOL_H  #ifndef __cplusplus  #define bool    _Bool #define true    1 #define false   0  #else /* __cplusplus */  /* Supporting <stdbool.h> in C++ is a GCC extension.  */ #define _Bool   bool #define bool    bool #define false   false #define true    true  #endif /* __cplusplus */  /* Signal that all the definitions are present.  */ #define __bool_true_false_are_defined   1  #endif  /* stdbool.h */
user-0 提问: 请看看程序中的数组有无初始化，哪些需要注意的

回复:
user: user-1
content: #include <iostream> #include <string>       // string #include <map>          // multimap #include <functional>   // greater #include <sstream>      // istringstream #include <cstdlib>      // system("pause") using namespace std;  typedef multimap<int, string, greater<int>>::iterator Iterator;  int main() { 	string s, buf; 	multimap<int, string, greater<int>> str;    // greater<int>指定按key降序排列  	getline(cin, s);                            // 读取一行 	istringstream ss(s);                        // 用字符流读取每个单词 	while (ss >> buf)                           // 循环将每个单词加入multimap 	{ 		str.insert(make_pair(buf.size(), buf)); 	}  	Iterator beg = str.begin(); 	int i = beg->first;                         // i就是最长的单词长度 	while (beg != str.end()) 	{ 		if (beg->first == i) 		{ 			cout << beg->second << endl; 			++beg; 		} 		else 		{ 			break; 		} 	} 	system("pause"); 	return 0; }   输入：  it string abc buffer iter is stream  输出：  string buffer stream 请按任意键继续. . .
user-0 提问: 使用fseek后，fscanf无法读取文件中数据

回复:
user: user-1
content: 用记事本打开文件看看就知道了

user: user-2
content: 引用 1 楼 brookmill 的回复:文件是用文本方式打开的，最后一个double不一定是在离文件尾部8个字节处+1

user: user-3
content: 你确定是离尾部八字节处吗？

user: user-4
content: fp_account = fopen(“A.txt”,"rb");

user: user-1
content: 文件是用文本方式打开的，最后一个double不一定是在离文件尾部8个字节处
user-0 提问: 有关于TCP数据包包头包尾的处理

回复:
user: user-1
content: 谢邀，我个人网络方面的还在学习中，这个问题暂时不知道怎么回答。

user: user-2
content: 问题是啥？ 还有  包头+数据，包头包含数据长度，还有加包尾处理干啥？

user: user-3
content: What are u talking about?

user: user-0
content: 引用 3 楼 cheng7068 的回复:给了一段函数，请问你的问题是什么呢这个是公司规定的数据包协议，咱们不用管。关键是包头+长度+数据+包尾，我怎么来解析出包头包尾看是否是合法的数据包。是的话，num+1，否则继续寻找。然后，我编写的代码不能实现这个功能，所以过来求助。

user: user-0
content: 引用 2 楼 max_min_ 的回复:问题是啥？ 还有  包头+数据，包头包含数据长度，还有加包尾处理干啥？这个是公司规定的数据包协议，咱们不用管。关键是包头+长度+数据+包尾，我怎么来解析出包头包尾看是否是合法的数据包。是的话，num+1，否则继续寻找。然后，我编写的代码不能实现这个功能，所以过来求助。

user: user-0
content: 引用 1 楼 lineage191 的回复:What are u talking about?我需要接受一个数据包，然后解析该数据包的包头包尾，看是否为我们所需要的数据包，是的话，num+1，否则继续寻找。然后，我编写的代码不能实现这个功能，所以过来求助。

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

user: user-5
content: 给了一段函数，请问你的问题是什么呢
user-0 提问: 上海贝尔笔试题   为什么程序这样执行？

回复:
user: user-1
content: int minus(int a, int b) {    cout<<a<<" "<<b<<endl;    return a-b; } int main() { 	int c=4; 	int d=3; 	printf("%d", minus(++c, ++c));         printf("%d", minus(d++, d++)); 	system("pause"); } 在win7 vs2010中，输出结果为6 6 0,4 3 1

user: user-2
content: printf后面从右往左进行计算！

user: user-3
content: win7 64位  vs2010 表示运行之后的结果是0

user: user-4
content: 这种题，没啥意思

user: user-5
content: 我就是面试过这样的问题，当时没找到地方，耽误了半小时，然后是各种刁难，

user: user-6
content: 难怪上海贝尔活不下去，要和人家合并。

user: user-7
content: 不同的编译器有不同的实现

user: user-8
content: 引用 4 楼 FightForProgrammer 的回复:win7  vs2012 表示运行之后的结果是0 和我结果一样，这种东西和编译器有关的，再说，实际应用中写这样代码的自己都要疯掉

user: user-9
content: 引用贴里关于这个问题讲得好明确！

user: user-10
content: 结果未定义。这种公司不用去了。

user: user-11
content: 好蛋疼的笔试题

user: user-12
content: 引用 34 楼 FrankHB1989 的回复:[quote=引用 16 楼 my3439955 的回复:] 这个题不是普通的考察++的顺序或结合性，他考察的关键点是函数调用的入栈顺序。就是问你觉得执行的流程是怎样的？  一般的，在vc环境中，cdecl是默认的调用约定，参数的入栈顺序是由右至左，参数的求值顺序也是由右至左，所以是后一个参数先++，前边的参数后++，前边的参数比后边的参数大  具体实现和编译器相关，只要答出入栈顺序就好了 这是连求值都没概念的典型瞎扯蛋。 C都没给你保证这里就应该有个栈，关入栈几毛钱关系？  [/quote]  好臭的嘴

user: user-13
content: 引用 16 楼 my3439955 的回复:这个题不是普通的考察++的顺序或结合性，他考察的关键点是函数调用的入栈顺序。就是问你觉得执行的流程是怎样的？  一般的，在vc环境中，cdecl是默认的调用约定，参数的入栈顺序是由右至左，参数的求值顺序也是由右至左，所以是后一个参数先++，前边的参数后++，前边的参数比后边的参数大  具体实现和编译器相关，只要答出入栈顺序就好了 这是连求值都没概念的典型瞎扯蛋。 C都没给你保证这里就应该有个栈，关入栈几毛钱关系？

user: user-13
content: 上海贝尔原来有这么SB么。

user: user-0
content: 引用 19 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/370153775 谢谢赵老师！学习了

user: user-14
content: 应该就是考察入栈顺序的问题，不过出的太不严谨了！

user: user-15
content: gcc编译后执行值是0

user: user-16
content: 引用 26 楼 u012421456 的回复:[quote=引用 7 楼 lovesmiles 的回复:] 呵呵，又是i++，楼主看下置顶贴吧，这出题的人估计会被喷  这种问题，不想多说，置顶帖——http://bbs.csdn.net/topics/370153775[/quote]++

user: user-17
content: 引用 1 楼 zxh707wk 的回复:这样可以看懂了吧 int minus(int a, int b) {    return a-b; } int c=4; int a=++c; int b=++c; printf("%d", minus(a, b)) ； 误人子弟啊

user: user-18
content: 调用方式，开始以为是0
user-0 提问: ACM 1002 究竟错在哪里了？ 求指点

回复:
user: user-0
content: 还是发现了很多小Bug  终于AC过了，谢谢提醒 #include    "stdio.h" #include <string.h>  char* super_sum(const char* pS1, const char *pS2, char *pSum) { 	const char *pBigger = pS1, *pSmaller = pS2; 	int len1, len2, small = 0, big = 0, sum =0, added =0; 	if((!*pS1) || (!*pS2)) 	{ 		return 0; 	}  	len1 = strlen(pS1); 	len2 = strlen(pS2);  	if(len1 <= len2) 	{ 		small = len1; 		big = len2; 	} 	else 	{ 		big = len1; 		small = len2; 	}  	if(small != big) 	{ 		pBigger = (len1<len2)? pS2 : pS1; 		pSmaller= (len1<len2)? pS1 : pS2; 	}  	while(small) 	{ 		sum = pSmaller[small-1] - '0' + pBigger[big-1] - '0' + added; 		if(sum > 9) 		{ 			pSum[big] = sum - 10 + '0'; 			added =1; 		} 		else 		{ 			pSum[big] = sum + '0'; 			added =0; 		} 		small--; 		big--; 	}  	while(big) 	{ 		sum = pBigger[big-1] - '0' + added; 		if(sum > 9) 		{ 			pSum[big] = sum - 10 + '0'; 			added =1; 		} 		else 		{ 			pSum[big] = sum + '0'; 			added =0; 		} 		big--; 	} 		 	/* Processing the first bit */ 	pSum[0] = added ? '1' : 0; 	return pSum; }  int main(void) { 	int count; 	int i; 	char input1[20][1001]={0}, input2[20][1001]={0}, output[20][1001]={0}; 	 	scanf("%d", &count); 	if(count == 0) 	{ 		return 0; 	}  	i =count; 	while(i--) 	{ 		scanf("%s %s", input1[count -i -1], input2[count -i -1]); 	}  	i = 0; 	while(i < count) 	{ 		printf("Case %d:\n", i+1); 		super_sum(input1[i], input2[i], output[i]); 		printf("%s + %s = %s", input1[i], input2[i], output[i][0] ? output[i] : &output[i][1]); 		++i; 		if(i < count) 		{ 			printf("\n\n"); 		} 		else 		{ 			printf("\n"); 		} 	} }

user: user-1
content: LZ程序不能正确处理有前导0的输入，例如： 001 1

user: user-2
content: ACM的输出规则是每完成一个测试用例就输出结果，不是把结果放到数组中最后统一输出。

user: user-0
content: http://acm.hdu.edu.cn/showproblem.php?pid=1002 Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.    Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.    Output For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.    Sample Input 2 1 2 112233445566778899 998877665544332211    Sample Output Case 1: 1 + 2 = 3  Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110  引用 1 楼 zxhuser-3 的回复:这个代码是做啥的？

user: user-3
content: 这个代码是做啥的？
user-0 提问: 这函数里的memcpy是不是多此一举?

回复:
user: user-0
content: 引用 3 楼 lisong694767315 的回复:不是，bit_set(bits, i, bit_get(bits, mapping[i] - 1));一边修改bits，一边使用bits，会出错的。  再说你可以自己测试一下啊 压根没想到这点

user: user-1
content: 不是，bit_set(bits, i, bit_get(bits, mapping[i] - 1));一边修改bits，一边使用bits，会出错的。  再说你可以自己测试一下啊

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:不行，bit_get(bits, mapping[i] - 1));这里面一在使用bits，然后又赋值给bits，这样应该不行 你太强了

user: user-2
content: 不行，bit_get(bits, mapping[i] - 1));这里面一在使用bits，然后又赋值给bits，这样应该不行
user-0 提问: 获取开发板IP？

回复:
user: user-0
content: 不是Linux，在Linux里面编译的，但是移到板子上了，前端通信

user: user-0
content: 引用 2 楼 user-2 的回复:如果没有记错的话，有通信的，告诉ip端口用户名这些  cgi有个环境变量，REMOTE_ADDR，但是接出来是主机的IP，想要开发板的啊

user: user-1
content: 有操作系统吗，不能调用系统接口？ 获取本机IP地址

user: user-2
content: 如果没有记错的话，有通信的，告诉ip端口用户名这些
user-0 提问: 新手请教 C 语言 从文件中 读取指定内容

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

user: user-2
content: 这个难度有点大 如果code中包括不匹配的{}，几乎没有办法实现 如果没有不匹配的{}，则可以通过计算大括号的层数来实现

user: user-3
content: 嘛意思？

user: user-4
content: code中包含{}么
user-0 提问: 拷贝数组内容，我的方法是直接复制内容，可以修改成将源数组内容的地址赋给目标指针吗？

回复:
user: user-0
content: 引用 2 楼 amoyman 的回复:感觉楼主的后一个问题不涉及复制。 double s[5] = {1.1,2.2,3.3,4.4,5.5}; double *p = s; 这样 就可以调用 p[0],p[1]....了，它们的值和s是一样的。  另外，copy的时候，目标写在前，源写在后 这虽然是一个不成文的约定，但很多人也是这么做的，至少，vc 是这么做的 如： memcpy(void *dst, void *src, size_z count); 这样其他人（或自己在别的地方）调用的时候，不会把目标和源弄错了。 受用了，谢谢

user: user-1
content: 取决于你想怎么用

user: user-2
content: （接2楼）为了传递，建议把返回类型改为 double * 如： double copy_double_arr(double *dst, double *src, int count) {     memcpy(dst, src, sizeof(double) * count);     return dst; }

user: user-2
content: 感觉楼主的后一个问题不涉及复制。 double s[5] = {1.1,2.2,3.3,4.4,5.5}; double *p = s; 这样 就可以调用 p[0],p[1]....了，它们的值和s是一样的。  另外，copy的时候，目标写在前，源写在后 这虽然是一个不成文的约定，但很多人也是这么做的，至少，vc 是这么做的 如： memcpy(void *dst, void *src, size_z count); 这样其他人（或自己在别的地方）调用的时候，不会把目标和源弄错了。

user: user-3
content: 参数改成 double **ar1, double **ar2. 然后 double * tmp = *ar1;           *ar1 = *ar2;           *ar2 = tmp;
user-0 提问: 外网做socket通信--问题

回复:
user: user-0
content: 谢谢各位解答。 问题已经解决。 程序本身没有什么太大问题。 是公司路由这边设置有问题，导致数据包只能收到几个。

user: user-0
content: 引用 5 楼 cheng7068 的回复:看了一下你的代码，不知道你的锁用在这里的作用是什么；另外在线程传递参数的时候最好用结构体指针传递参数，你直接用SOCKET类型的引用，这个很容易早晨问题的，不明白你的调试环境，就这么多了 谢谢。  锁和线程的话，我都去掉了。测试起来，还是一样有问题。 环境的话我说的详细点吧,不好意思。 客户端和服务器端，处于2个不同的网络中。 比如客户端是你家里的网络，服务器是你公司的网络。 从客户端发起请求连接到服务器，建立连接之后，2者进行数据传递。 这就是我说的外网。 我说的局域网测试通过，就是 客户端和服务器都在你公司的网络里，直接用192.168.2.xxx的网络就可以传递了，这样测试是没问题的。

user: user-1
content: 看了一下你的代码，不知道你的锁用在这里的作用是什么；另外在线程传递参数的时候最好用结构体指针传递参数，你直接用SOCKET类型的引用，这个很容易早晨问题的，不明白你的调试环境，就这么多了

user: user-0
content: 引用 3 楼 user-2 的回复:貌似lock/unlock的点不对，譬如外网可能有来源不明的连接，对应线程拿到锁后recv不到阻塞了，其他正常连接的线程拿不到锁也不跑了...  我试过把lock去掉，还是同样的会出现问题。 谢谢你呀，都没人鸟我。。 tcp协议应该就可以直接传送了吧？不需要再外加别的头了吧(比如HTTP)？

user: user-2
content: 貌似lock/unlock的点不对，譬如外网可能有来源不明的连接，对应线程拿到锁后recv不到阻塞了，其他正常连接的线程拿不到锁也不跑了...

user: user-0
content: 更新一下问题，经过测试，我把client端发送速度调慢，1s发送一个字符串到server， server这边第一次会及时接收到，但是server端第2次接收时候就处于阻塞态了。这时让程序继续进行那么1分来钟，再直接把client端断开,ctrl+c。发现server端一次性把前面的数据都收到了。但是如果时间久了就不行，时间久了，我想应该是server端认为这个socket已经是断开的，所以不去收数据了。现在这样，我该怎么去处理，让server立即接收数据，不处于等待状态呢？

user: user-0
content: 高手快点出现啊。急急急！
user-0 提问: #ifdef #undef 的应用

回复:
user: user-1
content: 百度。。。。

user: user-2
content: 就是条件编译  #ifdef interface读作如果interface被定义了 #undef interface读作解除interface的定义 #endif读作条件编译完了  为什么要这么做，得看完整的代码才能理解

user: user-3
content: #ifdef interface  #undef interface // 一般会在这里重新定义 // 比如 #define interface IMyNewInterface  // 你可以看看 C 语言如何定义接口，就知道了。   #endif

user: user-4
content: 这个真不好回答啊！

user: user-5
content: #include <stdio.h>   int main() { #define interface 1 #ifdef interface 	printf("%d\n", interface); #undef interface 	//printf("%d\n", interface);		// 这句话加上会报错 因为interface的定义被取消了 #endif 	getchar(); 	return 0; }  #undef  的作用就是取消先前的定义

user: user-6
content: 这是条件编译语句，告诉编译器你的编译规则而已，熟悉一下这几个语句的语法就好了

user: user-7
content: #ifdef The #ifdef directive controls conditional compilation of the resource file by checking the specified name. If the name has been defined by using a #define directive or by using the /d command-line option with the resource compiler, #ifdef directs the compiler to continue with the statement immediately after the #ifdef directive. If the name has not been defined, #ifdef directs the compiler to skip all statements up to the next #endif directive.  Syntax #ifdef name   Parameters name  Specifies the name to be checked by the directive.  Example This example compiles the BITMAP statement only if the name Debug is defined:  #ifdef Debug BITMAP 1 errbox.bmp #endif    See Also #define, #endif, #if, #ifndef, #undef     #undef The #undef directive removes the current definition of the specified name. All subsequent occurrences of the name are processed without replacement.  Syntax #undef name   Parameters name  Specifies the name to be removed. This value is any combination of letters, digits, and punctuation.  Example This example removes the definitions for the names nonzero and USERCLASS:  #undef     nonzero #undef     USERCLASS    See Also #define
user-0 提问: socket客户端引发的FIN_WAIT_2

回复:
user: user-0
content: 有没有谁有办法解决

user: user-0
content: 引用 1 楼 user-1 的回复:客户端与服务器端设置一个心跳机制啊，可以手动实现，也可以用系统的KEEP_ALIVE功能，上网查下。  心跳这个没有用，这个原因的产生是因为客户端没有做close动作，同时客户端没有退出，导致系统也没有办法帮他完成FIN和ACK包发送。

user: user-1
content: 客户端与服务器端设置一个心跳机制啊，可以手动实现，也可以用系统的KEEP_ALIVE功能，上网查下。
user-0 提问: C文件操作中，fprintf无法连续向文本文件中写入数据。请教这是什么情况

回复:
user: user-1
content: 引用 2 楼 u010030181 的回复:close后，肯定不能写啊！还有你那个free也有问题，你那个出错了就return?就不free？内存不照样泄露了，最好free之后赋值成NULL,防止出现野指针……+1

user: user-2
content: C89  4.9.5.3 The fopen function ......    When a file is opened with update mode ('+' as the second or third character in the mode argument), both input and output may be performed on the associated stream.  However, output may not be directly followed by input without an intervening call to the fflush function or to a file positioning function ( fseek , fsetpos , or rewind ), and input may not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file.  Opening a file with update mode may open or create a binary stream in some implementations.

user: user-2
content: 引用 3 楼 angel_su 的回复:读写切换之间重新定位一下吧，不然是会有些奇怪的问题... fseek(fp, 0, SEEK_END); fprintf(fp_account,"%s %ld %s %lf\n",... ++  C89  4.9.5.3 The fopen function ......    When a file is opened with update mode ('+' as the second or third character in the mode argument), both input and output may be performed on the associated stream.  However, output may not be directly followed by input without an intervening call to the fflush function or to a file positioning function ( fseek , fsetpos , or rewind ), and input may not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file.  Opening a file with update mode may open or create a binary stream in some implementations.

user: user-3
content: 读写切换之间重新定位一下吧，不然是会有些奇怪的问题... fseek(fp, 0, SEEK_END); fprintf(fp_account,"%s %ld %s %lf\n",...

user: user-4
content: close后，肯定不能写啊！还有你那个free也有问题，你那个出错了就return?就不free？内存不照样泄露了，最好free之后赋值成NULL,防止出现野指针……

user: user-0
user-0 提问: HBase REST接口使用

回复:
user: user-1
content: 楼主 你hbase rest研究好了吗 求共享啊

user: user-0
content: 资料上的插头表  sishen@sishen-mac:~/Work/Personal/java/apache/hbase-trunk$curl -v -X POST -T - http://localhost:60050/api/ * About to connect() to localhost port 60050 (#0) *   Trying ::1... connected * Connected to localhost (::1) port 60050 (#0) > POST /api/ HTTP/1.1 > User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 > Host: localhost:60050 > Accept: */* > Transfer-Encoding: chunked > Expect: 100-continue >  < HTTP/1.1 100 Continue <?xml version="1.0" encoding="UTF-8"?> <table>   <name>tables</name>   <columnfamilies>     <columnfamily>       <name>subscription</name>       <max-versions>2</max-versions>       <compression>NONE</compression>       <in-memory>false</in-memory>       <block-cache>true</block-cache>     </columnfamily>   </columnfamilies> </table> ^D < HTTP/1.1 200 OK < Date: Wed, 13 Aug 2008 18:59:38 GMT < Server: Jetty/5.1.4 (Mac OS X/10.5.4 i386 java/1.5.0_13 < Content-Length: 0 <  * Connection #0 to host localhost left intact * Closing connection #0    本地上  root@wangxin hbase]# curl -v -X POST -T - http://localhost:8000/api/ * About to connect() to localhost port 8000 (#0) *   Trying ::1... connected * Connected to localhost (::1) port 8000 (#0) > POST /api/ HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: localhost:8000 > Accept: */* > Transfer-Encoding: chunked > Expect: 100-continue >  < HTTP/1.1 100 Continue /////////他这里的xml格式的文件时怎么加进去的？
user-0 提问: 问一个关于指定文件的问题

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:C:\Users\Administrator>explorer /select, C:\Windows\notepad.exe  参考http://www.360doc.com/content/12/0831/08/7123232_233319841.shtml 谢谢

user: user-0
content: 谢谢 不过我要的不是打开文件，也不是打开文件夹 而是打开文件夹后，选定文件就可以了

user: user-1
content: http://www.baidu.com/s?tn=94820638_hao_pg&ie=utf-8&word=c语言打开文件夹&lans=132

user: user-2
content: C:\Users\Administrator>explorer /select, C:\Windows\notepad.exe  参考http://www.360doc.com/content/12/0831/08/7123232_233319841.shtml
user-0 提问: 求帮忙，c 语言

回复:
user: user-0
content: 感谢zxh707wk 朋友的帮忙。现在问题已经解决了！

user: user-1
content: 这个不难啊！有函数可以读一个文件夹下的所有文件的，不管是20个还是200个文件都可以读出来的…如果格式都一样，那么可以对每个文件进行行读，对读出的行进行解析，然后就可以进行运算了……（由于你的文件格式给出的只是一部分，不知道你所谓的格式怎么样，是每一行都一样？还是每三个数字之后就一个“|”，这个不确定，所以也不好编码）

user: user-2
content: 暂时的思路就是fgets()函数按行读取文件，将读入的字符串存储在一个字符数组中，然后用ctype.h头文件的isdigit()函数判断每个字符是否为数字,同时设定一个计数器，记录遍历字符数组时找到的数字的个数，每找到三个进行一次求平方和计算，再用math.h头文件中的函数sqrt()求平方根,然后将这个结果存储再记录单个文件综合的变量中，继续重复前面步骤(这个思路对于细节的地方是有BUG的，需要自己处理，看你的文件存储数据的格式是否规范)

user: user-3
content: 由于是64位系统，所以只能用vs来测试代码，没测试过，希望各位能把问题指出来，谢谢了 下载地址： http://pan.baidu.com/s/1hqGHhSK

user: user-0
content: 引用 5 楼 u010030181 的回复:这个不难啊！有函数可以读一个文件夹下的所有文件的，不管是20个还是200个文件都可以读出来的…如果格式都一样，那么可以对每个文件进行行读，对读出的行进行解析，然后就可以进行运算了……（由于你的文件格式给出的只是一部分，不知道你所谓的格式怎么样，是每一行都一样？还是每三个数字之后就一个“|”，这个不确定，所以也不好编码）   格式都一样。就是每3个数之后就一个“|”  列数是固定的。以3个数为最小单位， 共四列。

user: user-0
content: 引用 4 楼 zxh707wk 的回复:每个文本文件里的数据数都是确定的吗 每个文件里的数据数不一样。。有多有少的。没有规律。。

user: user-4
content: 读入，平方，求和，搞定

user: user-0
content: 引用 8 楼 zxh707wk 的回复:各位，这贴的代码让我练练手 那提前感谢高人！

user: user-3
content: 各位，这贴的代码让我练练手

user: user-3
content: 每个文本文件里的数据数都是确定的吗

user: user-0
content: 引用 2 楼 zxh707wk 的回复:读取数据-》计算-》输出 不谢 谢谢你的回复， 可以帮忙写代码实现吗？

user: user-3
content: 读取数据-》计算-》输出 不谢

user: user-5
content: 我也很想帮你 但是我不会啊
user-0 提问: for循环中定义变量 的问题

回复:
user: user-1
content: c语言函数内的变量, 不管你在哪个位置定义的, 编译器自动会帮你, 把变量提到最新面,

user: user-2
content: 引用 9 楼 zhao4zhong1 的回复:栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，…… 赵老师的解答还是不错

user: user-3
content: 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-4
content: cout << "Now test array...\n\n"; 	char test[30] = "test Is a address ?"; 	cout << "test1 = " << test << endl; 	printf("test2 = %0X\n", test); 	printf("test3 = %0X\n", &test); 	printf("test4 = %s\n", test); 	printf("test5 = %s\n", &test); 	printf("test6 = %0X\n", &test[0]); 	printf("test7 = %s\n", &test[0]);  	cout << "\n\nNow test point...\n\n";  	char *ptest = test; //"ptest Is a address ?"; 	cout << "ptest1 = " << ptest << endl; 	printf("ptest2 = %0X\n", ptest); 	printf("ptest3 = %0X\n", &ptest); 	printf("ptest4 = %s\n", ptest); 	printf("ptest5 = %s\n", &ptest); 	printf("ptest6 = %0X\n", &ptest[0]); 	printf("ptest7 = %s\n", &ptest[0]); 	getchar(); 你那个Vector存的是地址，那么打印的时候肯定是找到这个地址再打印出其内容，在你进入{ }进行插入的时候，插入的是str地址，在整个{}的进行中，str这个地址并没有改变，改变的只是这个str里面的也即地址存的内容，当你退出循环时，插入的是三个一样的地址，打印的时候是打印这个地址的内容，可以说是垃圾值（因为退出这个循环后，栈就回收了，由于并没有其他操作这个地址的内容，故还是保留了最后循环中最后进行赋的值），故……

user: user-5
content: 这是一个局部变量和堆栈的问题，栈没用一次销毁一次，用malloc 或者new 就可以，

user: user-6
content: 栈你学过的吧， 新来个就堆在现有的这一堆上面，  自动变量也是这样的，  新来一个就在最上面， 走了再来还在同一个位置， 一个函数里自动变量的位置， 以这函数被调用时刻栈的位置为基准， 是可预测的

user: user-7
content: 这个问题我前两天也刚遇到，就是每次赋值都把前边的值修改了。把char*改成string就可以了，vector<string>  vecTest;赋值过程不用改，输出时按%s输出的话，要改为vecTest[i].c_str();

user: user-8
content: 自古二楼出真相。。。

user: user-9
content: 换用new去分配空间就行了。。。  #include<iostream> #include<vector> #include<cstdio> #include<cstring> using namespace std;  int main() { 	vector<char*> vecTest; 	for (int i=0; i<3; i++) 	{ 	    char *str = new char[10]; 	    memset(str,0,10);         // 置0 	    sprintf(str,"%d",i); 	    vecTest.push_back(str); 	}  	// 输出 	for(int i=0; i<vecTest.size(); ++i) 	{ 		printf("%s ", vecTest[i]); 	} 	return 0; }

user: user-10
content: why not? 局部变量作用域到}为止，之后它占用的空间可以被编译器随便使用于其它需求；对第二次循环来说这个局部变量是全新的，至于具体在哪是编译器决定的，既然可以重用上一次循环体中的无用空间为什么不用？
user-0 提问: 不同优先级的线程，是否会存在优先级逆转现象

回复:
user: user-1
content: 按我的了解windows的调度机制是比较复杂的，不是说高级永远挡死低级的，除非高到最高级    另外现在都是用多核CPU， 一个高级线程是不可能挡死所有其它线程的， 你可以试试多个高级线程是不是能挡死低级线程

user: user-0

user: user-2
content: 会。 参考《深入解析Windows操作系统-Windows Internals》
user-0 提问: 回传值,程式一执行就当机?

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

user: user-0
content: 谢谢您><问题已解决了

user: user-2
content: 没学过C，但我想，应该是scanf那句，x该传地址，  scanf(“%d",&x);
user-0 提问: C语言处理缓存数据

回复:
user: user-0
content: 大赞4楼 哈哈

user: user-1
content: 确实，归根到底还是遍历，只是效率不同而已

user: user-2
content: 遍历整个报文，设置一个标志变量，依次检测0x0d和0x0a，连续检测到这两个字符时设置标志，表示新的缓冲区，参考如下示意代码  int state = 0; for(;;) { if( pstPluginState->pcUartRxBuffer==0x0d) {   state=1;/*有可能是新的缓冲区开始，先做个标记*/ } else if( pstPluginState->pcUartRxBuffer==0x0a && state==1) {  state=2;  //确实是一个新的缓冲区起始，做下标记 } else {  if(state==2) {  state=0;  ............../* 开始处理新缓冲区 */ } else if(state==1) /*老缓冲区，并且之前标记了0x0d，因此漏掉一个字符*/ { 之前有一个0x0d作为了缓冲区起始标识，但现在并不是真的缓冲区起始，因此要先处理先前漏掉的0x0d，然后继续处理当前字符 } else/* if(state==0) 老缓冲区*/ { ..../*缓冲区中，处理当前字符*/ } } }

user: user-0
content: pstPluginState->pcUartRxBuffer是一个指针，用 *（pstPluginState->pcUartRxBuffer）==0D  和 *（pstPluginState->pcUartRxBuffer）+1==0A  就能判断pcUartRxBuffer所指向内容中是0D0A的数据了  但是给出一个数据包 一共78个数  0D 0A D7 A2 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 0A B9 CA D5 CF 3A 30 31 2D 31 2D 31 38 20 20 55 53 43 39 35 30 31 20 0D 0A CA B1 BC E4 3A 30 31 2F 30 31 20 20 30 32 3A 31 39 0D 0A   nHead=0x 0D 要从nHead 开始查找到末尾 ，怎么用pstPluginState->pcUartRxBuffer指正来控制啊 我想用for循环 求大家指点

user: user-3
content: 引用 楼主 SUXIN091237 的回复:pstPluginState->pcUartRxBuffer  是缓存 怎么用C语句查找数据缓存区的数据是0D 0A   谢谢大家 \r\n啊? 在抓HTTP流的数据

user: user-4
content: 楼主 大爱  这个积分我要拿走啊啊啊啊 啊哈哈哈

user: user-5
content: 引用 1 楼 liu111qiang88 的回复:不论你用什么办法 ，最后都是遍历+1

user: user-6
content: 不论你用什么办法 ，最后都是遍历
user-0 提问: 宏定义该如何解析

回复:
user: user-1
content: 宏展开只是一方面，  另一方面是一个老掉牙的问题， ++的副作用的问题      按照规范被++的变量是不能在表达式里再次使用的， 否则编译器理解成什么样就是个没标准的事了， 可是总有些人每天热衷于讨论这个不合规范的做法的结果，给出种种解释， 有什么意义呢

user: user-2
content: 引用 10 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！+1

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

user: user-4
content: 引用 8 楼 liu111qiang88 的回复:宏  就是替换展开，像数学函数一样 你把宏带进去展开就行啦

user: user-5
content: 宏  就是替换展开，像数学函数一样 你把宏带进去展开就行啦

user: user-6
content: 定义宏的时候 加上括号就好了

user: user-7
content: 宏定义在编译过程中直接替换。

user: user-8
content: 宏用到程序中是不带括号的 建议一般最好不要用宏

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

user: user-9
content: 这有什么可以纠结的呢，宏定义引用的时候没有加括号导致的结果么

user: user-10
content: ++a%4+3*a%4/2  a=10时 结果为3 没错的。楼主以为是多少呢？

user: user-11
content: printf("%d\n", ++ Z);  相当于  printf("%d\n", ++Y*X/2)相当于 printf("%d\n", ++X+3*X/2)相当于 printf("%d\n", ++a%4+3*a%4/2)  这种表达式 完全没有括号的 lz就别纠结了
user-0 提问: C语言中宏定义的使用：最后输出为什么i变成3，输出D

回复:
user: user-1
content: 引用 2 楼 mujiok2003 的回复:何苦跟自己过不去？ 代码写简单点不好吗？  把它简化吧，让楼主瞧瞧！！！

user: user-2
content: 代码写这么复杂，为难自己呢么

user: user-3
content: 你可以把'a'<=(c)&&(c)<='z'这两个条件去掉一个，会发现结果变成了 C   建议不要这么用宏

user: user-3
content: 因为在你的程序中，c 就等于s[++i], i的初值是0，s[i]为a，而进行TOUPPER(s[++i])时，'a'<=(c)&&(c)<='z'将i的值加了两次，再进行(c)-'a'+'A'操作时又加了一次，所以是d-‘a’+'A'，最终为D

user: user-0
content: i的变化和宏也没有关系吧？

user: user-4
content: 何苦跟自己过不去？ 代码写简单点不好吗？

user: user-5
content: 把 TOUPPER 展开就明白了
user-0 提问: dos下外部RAM的访问

回复:
user: user-0
content: 您好： 我用char far *pRAm=(char far*)0xe0000000L和char far *pRAm=(char far*)MK_FP(0xe0000,0) 都测试过了，pc104的IOR也没有反应，另外640K高端内存使用可行吗

user: user-1
content: 在纯DOS下，内存地址请用seg:offset的格式，永远不要用offset的格式。  第一个问题：外设地址定0xe000:0x0000，char far *pRAm=(char far*)(char far*)MK_FP(0xe000,0);操作，pc104 isa总线的 IOR读信号一直是高电平，请另找原因。 第二个问题：dos 内存640k以上是给视频显示(A000:0000～D000:0000)和bios中断(F000:0000)的，内存映射地址为E000:0000,正好是dos 内存640k以上的，所以不会有冲突 第三个问题：外设地址我定的0xe000:0x0000等价于(char far*)0xe0000000L;

user: user-0
content: 赵老师您好： 第一个问题：我的外设地址我定的0xe0000，我用您说的方法char far *pRAm=(char far*)0xe0000000L;操作但是pc104 isa总线的 IOR读信号一直是高电平，没有反应 第二个问题：dos 内存640k以上是给视频显示和bios中断的，如内存映射地址为0xe0000,正好是dos 内存640k以上的，所以我说会不会有冲突 第三个问题：外设地址我定的0xe0000能等价于0xe0000000L;吗

user: user-1
content: 在纯DOS下，内存地址请用seg:offset的格式，永远不要用offset的格式。  0～640KB对应 0000:0000～A000:0000 当然不会和 E000:0000 冲突了。

user: user-0
content: 您好，赵老师我加你qq好吗

user: user-1
content: char far *pRAm=(char far*)0xe0000000L; 等价于 char far *pRAm=(char far*)MK_FP(0xe000,0) 而不等价于 char far *pRAm=(char far*)MK_FP(0xe0000,0)

user: user-2

user: user-1
content: 0xe0000000对应e000:0000 0xe0000对应000e:0000

user: user-0
content: 为什么用这种char far *pRAm=(char far*)0xe0000读法，pc的IOR没有反应呢

user: user-1
content: char far *pRAm=(char far*)0xe0000000L;