Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求教----关于fgets得到乱码的问题

回复:
user: user-1
content: 引用 8 楼 lilin_colin 的回复:[quote=引用 3 楼 JiMoKuangXiangQu 的回复:] 晕，还是错了。 //fflush(fp1); // 如果想同时保持文件1的内容，也许应该再加上这句。 fclose(fp2); fp2 = fopen(filename2, 'r'); 这样的确解决了乱码问题。 我的主要目的是 把文本2的内容复制到文本1中去，用fseek控制它追加在哪个位置！ 借鉴你的方法，会吧文本1的内容覆盖，fflush（fp1）这句没看懂，我试过好像也不行....[/quote] 把fseek调用注释掉，把fflush调用打开。 fflush的作用是把当前缓冲中的内容写到文件1中去。

user: user-0
content: 大神都吃饭了么·········

user: user-0
content: 引用 12 楼 xia597289162 的回复:fseek只是一个文件定位指针，如果你任意添加 ，后面的字符就会被覆盖  那只能从两个文本读出来，然后经过处理后再重新写入文本1吗？  还有其他方法么？T_T

user: user-2
content: fseek只是一个文件定位指针，如果你任意添加 ，后面的字符就会被覆盖

user: user-0
content: 引用 10 楼 xia597289162 的回复:printf("现在把文本2的内容复制到文本1的内容!\n");          fclose(fp1);     fclose(fp2);      //fseek(fp1,0L,2);       fp1=fopen(filename1,"a+")     fp2=fopen(filename2,"r")     while((ch=fgetc(fp2))!=EOF)     {         fputc(ch,fp1);     } 这样固然可以解决，这种方法我也知道。但是a只能在末尾追加数据。 我想要用fseek()控制它可以在任意位置追加数据！

user: user-2
content: printf("现在把文本2的内容复制到文本1的内容!\n");          fclose(fp1);     fclose(fp2);      //fseek(fp1,0L,2);       fp1=fopen(filename1,"a+")     fp2=fopen(filename2,"r")     while((ch=fgetc(fp2))!=EOF)     {         fputc(ch,fp1);     }

user: user-0
content: 引用 7 楼 focuslight 的回复:[quote=引用 6 楼 lilin_colin 的回复:] [quote=引用 5 楼 focuslight 的回复:] 一个以追加方式打开， 第二个以读和追加方式打开。  fopen（filename，“a”） fopen（filename，“ra”） 这样固然可以解决，这种方法我也知道。但是a只能在末尾追加数据。 我想要用fseek()控制它可以在任意位置追加数据！ [/quote]读出到buffer，处理后再重新写入文件[/quote]  你的意思是从两个文本读出来，然后经过处理后再重新写入文本1吗？ 那fseek函数到底有啥用呢? 书上写着fseek可以完成随机读写操作，但是我感觉好像没用啊？是不是我用的方法错了...

user: user-0
content: 引用 3 楼 JiMoKuangXiangQu 的回复:晕，还是错了。 //fflush(fp1); // 如果想同时保持文件1的内容，也许应该再加上这句。 fclose(fp2); fp2 = fopen(filename2, 'r'); 这样的确解决了乱码问题。 我的主要目的是 把文本2的内容复制到文本1中去，用fseek控制它追加在哪个位置！ 借鉴你的方法，会吧文本1的内容覆盖，fflush（fp1）这句没看懂，我试过好像也不行....

user: user-3
content: 引用 6 楼 lilin_colin 的回复:[quote=引用 5 楼 focuslight 的回复:] 一个以追加方式打开， 第二个以读和追加方式打开。  fopen（filename，“a”） fopen（filename，“ra”） 这样固然可以解决，这种方法我也知道。但是a只能在末尾追加数据。 我想要用fseek()控制它可以在任意位置追加数据！ [/quote]读出到buffer，处理后再重新写入文件

user: user-0
content: 引用 5 楼 focuslight 的回复:一个以追加方式打开， 第二个以读和追加方式打开。  fopen（filename，“a”） fopen（filename，“ra”） 这样固然可以解决，这种方法我也知道。但是a只能在末尾追加数据。 我想要用fseek()控制它可以在任意位置追加数据！

user: user-3
content: 一个以追加方式打开， 第二个以读和追加方式打开。  fopen（filename，“a”） fopen（filename，“ra”）

user: user-0
content: 这样确实解决了乱码问题，但是文件1的内容被覆盖了。 除非我第二次打开的时候用 fp1=fopen（filename，“a+”）;打开 但是这样fseek就没有起作用。

user: user-1
content: 晕，还是错了。 //fflush(fp1); // 如果想同时保持文件1的内容，也许应该再加上这句。 fclose(fp2); fp2 = fopen(filename2, 'r');

user: user-1
content: 不好意思，写错了，呵呵，应该是： //fflush(fp1); // 如果想同时保持文件1的内容，也许应该再加上这句。 fclose(fp2); fp1 = fopen(filename2, 'r');

user: user-1
content: 原因应该是写入文件1的内容仍然在内存中，而且目前是以写方式打开文件1，所以对它的读取不成功。 可能的解决方式1： 在语句： fseek(fp1,0L,2); 加入： fclose(fp1); fp1 = fopen(filename1, 'r');

user: user-4
content: fp1本就在末尾写，你要刷的是fp2...  //fseek(fp1,0L,2); rewind(fp2);  或者： fflush(fp2); fseek(fp2, 0, 0);
user-0 提问: 为什么getchar()不让我输入字符，而我调试的时候，看到select自动为‘10’了，求大神解答？？

回复:
user: user-1
content: getchar可能取得输入缓冲里的回车空格符号

user: user-0
content: 我添加了getchar(),然后输入1,2,3数字中的一个数字，还是不能进入对应的case ,而是进入default 语句中，这是怎么回事呢？

user: user-2
content: int main() {     int i=0,a[MAXSIZE+1];     printf("请输入您要排序的数字：");     for(i=1;i<=MAXSIZE;i++)         scanf("%d",&a[i]);//这里按回车会有一个回车符，没有被吸收掉         Choice_Sort(a,MAXSIZE);         for(i=1;i<=MAXSIZE;i++)         printf("%2d",a[i]);     return 0; }     printf("########1、直接插入排序#########\n");     printf("########2、冒泡排序#############\n");     printf("########3、直接选择排序#########\n");     printf("请选择您所需要的排序方式：(按Q(q)退出)");     getchar();//再加一句getchar()吸收回车符     select=getchar();
user-0 提问: 如何用C语言读取txt的3列数据，并重新排列？

回复:
user: user-1
content: 读入3个数组 ，然后对3个数组排序！

user: user-2
content: 用2楼的方法把数存入double型数组里，之后要插入什么直接sprintf组成字符串就行了

user: user-3
content: 试试 fscanf(fp, "%f %f %f", &a, &b, &c);
user-0 提问: 关于c语言中整型的分类：有符号数和无符号数

回复:
user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 赵哥威武 就是这个意思

user: user-1
content: 主要是为了让计算机做数学运算的时候 更具有数学意义 说到底都是一些数据 就看你怎么来解释这些数据了 是按有符号的还是按无符号的

user: user-2
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-3
content: 1个数比如有8位  那么有符号就是要区分正数和负数,无符号就是不区分 那么要区分总他妈得设个标记对不对,要不然区分个鸡巴毛啊?  于是就牺牲1位来表示符号,1表示负数,0表示正数 去掉这1位之后实际表示数据的不就只有7位了吗  8位能表示到255,7位就能表示到127  所以,无符号的8位能表示0~255 而有符号的8位能表示-128~127  该懂?

user: user-4
content: 大致来讲，计算机用某长度的内存表示整数。如果要分正负，其中一个位就要用来当符号，比不分正负的类型少了一位的空间，正数的最大值只有大约一半。 另外，在左右移位操作的时候，有符号类型有时会有特别的问题。所以在用来操作单个位的时候，最好用无符号类型。 详细自己看书。

user: user-5
content: 同样的字节数，只表示正数肯定比同时表示正数和负数的正数个数多

user: user-6
content: 语法书

user: user-7
content: 数字当然分有符号和无符号。  百度搜 << C语言中的无符号数和有符号数 >>

user: user-8
content: 无符号数可以表达更大的正数值
user-0 提问: 有一个关于浮点型数据的问题

回复:
user: user-1
content: 引用 3 楼 xinruodingshui 的回复:引用 1 楼 jiandingzhe 的回复:转int好像是直接截取，不是四舍五入吧？是啊 哦，加了0.5，没注意到

user: user-0
content: 引用 2 楼 user-2 的回复:应该是 f=（int）（f*1000+0.5）/1000 吧  google 整数除法好吧   解决了

user: user-0
content: 引用 1 楼 jiandingzhe 的回复:转int好像是直接截取，不是四舍五入吧？是啊

user: user-2
content: 应该是 f=（int）（f*1000+0.5）/1000 吧  google 整数除法

user: user-1
content: 转int好像是直接截取，不是四舍五入吧？
user-0 提问: 代码中被调用的子函数是什么意思？？？？

回复:
user: user-1
content: Finding prime numbers - Kenneth Haugland Different schemas for finding prime numbers explained with code http://www.codeproject.com/Article.aspx?tag=198374988322054872&

user: user-2
content: 引用 7 楼 u012350586 的回复:j*j<=n;这个判断条件是什么意思啊  改成j<=根号n懂了吗？

user: user-3
content: 引用 7 楼 u012350586 的回复:j*j<=n;这个判断条件是什么意思啊 看n有没有因子

user: user-4
content: f函数里就是在做是否素数的判断：指在一个大于1的自然数中，除了1和此整数自身外，不能被其他自然数整除的数为素数

user: user-5
content: 引用 4 楼 z1179675084 的回复:又是void main()谭浩强那个书是不对的，你查一下，正确的main函数写法！  谭浩强太老了，早期的编译器那样写法是对的

user: user-6
content: 又是void main()谭浩强那个书是不对的，你查一下，正确的main函数写法！

user: user-7
content: 质数又称素数。指在一个大于1的自然数中，除了1和此整数自身外，不能被其他自然数整除的数。  int f(int n) { if(n==1) return 0;   -----------------  1不是素数 for(int j=2;j*j<=n;j++)   ------------  此循环排除所有非素数 if(n%j==0) return 0;  ----------------  如n=4, 这循环可在 4%2 退出返回0，  return 1;            -----------------  为素数则不会在循环里退出，在这里返回1 }

user: user-8
content: 判断一个数是不是素数啊。

user: user-0
content: j*j<=n;这个判断条件是什么意思啊

user: user-9
content: 函数名f改成isPrimeNumber
user-0 提问: c语言多文件编译

回复:
user: user-1
content: 多个文件编译，建议使用make做批处理。否则，当你需要重新编译的时候，反复敲一堆同样的字符，烦不烦躁啊？

user: user-2
content: g++   -o   outFileName   file1.cpp   file2.cpp

user: user-3
content: 光说不行很模糊，直接贴出错误信息不是比较好吗...

user: user-0
content: 那说说对于我的程序，我该具体怎么编译呢?详细指导下啊

user: user-4
content: cc相对于编译+链接, 不能直接对2个c文件直接写 , 具体的看看makefile的写法

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:如何编译出一个完整的程序，楼主要重新看一下书了。 书上并没有讲得很清楚

user: user-5
content: 如何编译出一个完整的程序，楼主要重新看一下书了。
user-0 提问: 请问 timeSetEvent 指定的那个回调函数，这个回调函数的各个参数是什么含义？

回复:
user: user-1
content: UINT uID,        // Timer identifier UINT uMsg,       // Not currently used DWORD_PTR dwUser,// User information DWORD_PTR dw1,   // Windows reserved DWORD_PTR dw2,   // is also reserved

user: user-2
content: typedef void ( CALLBACK *LPTIMECALLBACK)(   UINT uTimerID,   UINT uMsg,   DWORD_PTR dwUser,   DWORD_PTR dw1,   DWORD_PTR dw2 );

user: user-2
content: uTimerID The identifier of the timer. The identifier is returned by the timeSetEvent function. uMsg Reserved. dwUser The value that was specified for the dwUser parameter of the timeSetEvent function. dw1 Reserved. dw2 Reserved.

user: user-3
content: http://msdn.microsoft.com/en-us/library/windows/desktop/dd757634(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ff728861(v=vs.85).aspx

user: user-4
content: 坚决消灭领会副.
user-0 提问: 为什么这个程序输出的不是3.15，而是3.14(我用的是codeblocks编译器）

回复:
user: user-1
content: 引用 4 楼 Polarislee 的回复:二进制浮点数的精度问题。  简单点说，就是算完了3.145*100+0.5不等于315，而是314.9999999，结果赋值给m之后就变成314了。  楼主按照这个理解就是了。

user: user-2
content: 会对表示2进制的3.15进行4舍5入计算，所以值有变大或变小.

user: user-3
content: 引用 5 楼 jk19941122 的回复:[quote=引用 4 楼 Polarislee 的回复:] 二进制浮点数的精度问题。  简单点说，就是算完了3.145*100+0.5不等于315，而是314.9999999，结果赋值给m之后就变成314了。 那我的vs2012编译器为什么结果还是315呢[/quote]  浮点数寄存器的精度更高，或许vs2012用到了吧

user: user-4
content: 引用 9 楼 buyong 的回复:我也用code::blocks,怎么结果是：3.150000 你是高级黑？  code block只是个IDE，不是编译器，出现楼主的结果是正常的 浮点数的精度问题

user: user-5
content: 还是故意出个错题来看笑话。怎么可能是3.14?

user: user-5
content: 我也用code::blocks,怎么结果是：3.150000 你是高级黑？

user: user-6
content: 把程序改下吧。 #include<stdio.h> int main() {     int m;     float n=3.145;     m=n*100+0.5+0.01,n=m/100.0;     printf("%f",n);     return 0; } 浮点和整型之间最好不要隐形转换，

user: user-7
content: 不要纠结这些，编译器的问题干嘛要去管他

user: user-8
content: 编译器不同的原因把

user: user-9
content: 引用 4 楼 Polarislee 的回复:二进制浮点数的精度问题。  简单点说，就是算完了3.145*100+0.5不等于315，而是314.9999999，结果赋值给m之后就变成314了。 那我的vs2012编译器为什么结果还是315呢

user: user-10
content: 二进制浮点数的精度问题。  简单点说，就是算完了3.145*100+0.5不等于315，而是314.9999999，结果赋值给m之后就变成314了。

user: user-0
content: 我就是不能理解为什么是这个结果，打印出来为什么是哪个结果，能不能解释一

user: user-11
content: 别和编译器闹了，他最讨厌了还惹他？

user: user-12
content: 打印一下就知道了 printf("%f\n", n*100.0+0.5);
user-0 提问: 请教一个多线程问题。

回复:
user: user-1
content: 每个线程再额外添加一个标志位吧，当开启线程的时候，标志位为真，当线程结束的时候，标志位为假， 后面通过判断此标志位来确认是否重用此线程ID

user: user-2
content: 引用 2 楼 max_min_ 的回复:每个线程再额外添加一个标志位吧，当开启线程的时候，标志位为真，当线程结束的时候，标志位为假， 后面通过判断此标志位来确认是否重用此线程ID  ++

user: user-0
content: 引用 2 楼 max_min_ 的回复:每个线程再额外添加一个标志位吧，当开启线程的时候，标志位为真，当线程结束的时候，标志位为假， 后面通过判断此标志位来确认是否重用此线程ID 对呀！我怎么就没想到呢，多谢指导哈。

user: user-3
content: 听着有点threadpool的感觉
user-0 提问: xerces xml开源库求赐教啊

回复:
user: user-1
content: LZ没有自己查API么？

user: user-2
content: < >是特殊字符，都被转义了呀

user: user-0
content: 引用 4 楼 ForestDB 的回复:觉得应该先把buf转成xml元素先，然后才能调用此API。   没有别的办法吗？  因为我现在是有三个层次的关系、 1、组建xml 2、对xml进行数字签名 3、对签名的xml处理 发送之类的  本来我是打算将xml组建放在第二步里面一起做，但是这样业务xml 与签名的就耦合了。我想业务跟签名分开所以直接想传入创建好的xml    但是貌似不行啊！！！       或者怎么把buf  xml转换元素呢 只能一个个增加吗？ 有其他的api吗？

user: user-1
content: 觉得应该先把buf转成xml元素先，然后才能调用此API。

user: user-2
content: 引用 2 楼 KuaiPengFei_ 的回复:[quote=引用 1 楼 wangdahu888 的回复:] < >是特殊字符，都被转义了呀   我就是要问有什么方法不被转义，直接可以加xml进去[/quote] 用<  > 代替< >

user: user-0
content: 引用 1 楼 wangdahu888 的回复:< >是特殊字符，都被转义了呀   我就是要问有什么方法不被转义，直接可以加xml进去
user-0 提问: 有没有C语言实现的文件夹打包解包的开源代码（压缩或解压文件夹也行）

回复:
user: user-1
content: zip.c   引用 16 楼 z616913706 的回复:[quote=引用 15 楼 vrace 的回复:] [quote=引用 14 楼 robbi666 的回复:] [quote=引用 13 楼 vrace 的回复:] zlib 简单好用啊  www.zlib.net  zlib也没有文件夹压缩[/quote]  zlib 里面的 contrib 文件夹里有一个 minizip， 现成的代码创建/解压缩 zip 文件。当然如果你懒到搜索文件都不愿意做,那就...[/quote]请问是minizip中的zip.c还是minizip.c啊[/quote]

user: user-2
content: 引用 15 楼 vrace 的回复:[quote=引用 14 楼 robbi666 的回复:] [quote=引用 13 楼 vrace 的回复:] zlib 简单好用啊  www.zlib.net  zlib也没有文件夹压缩[/quote]  zlib 里面的 contrib 文件夹里有一个 minizip， 现成的代码创建/解压缩 zip 文件。当然如果你懒到搜索文件都不愿意做,那就...[/quote]请问是minizip中的zip.c还是minizip.c啊

user: user-1
content: 引用 14 楼 robbi666 的回复:[quote=引用 13 楼 vrace 的回复:] zlib 简单好用啊  www.zlib.net  zlib也没有文件夹压缩[/quote]  zlib 里面的 contrib 文件夹里有一个 minizip， 现成的代码创建/解压缩 zip 文件。当然如果你懒到搜索文件都不愿意做,那就...

user: user-0
content: 引用 13 楼 vrace 的回复:zlib 简单好用啊  www.zlib.net  zlib也没有文件夹压缩

user: user-3
content: 版本控制系统(svn,tfs, git等）

user: user-4
content: 留下你邮箱，可以给楼主发个类文件

user: user-5
content: tar源代码。 gzip源代码。

user: user-0
content: 在线等。。。。

user: user-1
content: zlib 简单好用啊  www.zlib.net

user: user-6
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。

user: user-4
content: 引用 8 楼 robbi666 的回复:[quote=引用 4 楼 mujiok2003 的回复:] 版本控制系统(svn,tfs, git等） 我需要的是C下面的，谢谢[/quote] 无能为力呀，c++的，嵌入式是用不了

user: user-0
content: 引用 9 楼 mujiok2003 的回复:[quote=引用 8 楼 robbi666 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] 版本控制系统(svn,tfs, git等） 我需要的是C下面的，谢谢[/quote] 自己写代码压缩还不如使用system()或者popen直接压缩/解压， 工作量少。 [/quote] 不解。。。

user: user-3
content: 引用 8 楼 robbi666 的回复:[quote=引用 4 楼 mujiok2003 的回复:] 版本控制系统(svn,tfs, git等） 我需要的是C下面的，谢谢[/quote] 自己写代码压缩还不如使用system()或者popen直接压缩/解压， 工作量少。

user: user-0
content: 引用 4 楼 mujiok2003 的回复:版本控制系统(svn,tfs, git等） 我需要的是C下面的，谢谢

user: user-0
content: 我找了tar,7z,gzip,Lzma,quicklz,这些都只到压缩单个文件，或者字符串 没有发现那个源码可以压缩文件夹的 tar的源码文件太多，不适合于嵌入式系统 我的邮箱1045537@qq.com，谢谢了

user: user-7
content: tar gzip 7z ...

user: user-6
content: tar源代码
user-0 提问: 帮忙看一下代码啊，不知道哪里错了！

回复:
user: user-1
content: int i=0; TElemType str[]={"ABC##DE#G##F###"}; char ch; BiTree CreatBitree(BiTree &T){ //移到上面 int i=0; //移到上面 TElemType str[]={"ABC##DE#G##F###"}; ch=str[i++]; if (ch=='#') { T=NULL; } else{ if (!(T=(BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;  T->data=ch; CreatBitree(T->lchild); CreatBitree(T->rchild); } return T; }

user: user-2
content: 先pass编译再说吧
user-0 提问: 帮忙解读下这个程序

回复:
user: user-1
content: 实现itoa算法？

user: user-2
content: s[i++] = '-';

user: user-3
content: 引用 1 楼 u011779875 的回复:s[i++] = '-'; ++

user: user-4
content: 把每一句看懂了不就解读了吗？ 哪句看不懂？ 都是基本语法啊

user: user-5
content: 引用 5 楼 u010334406 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。 请大师继续指导下，我是新手，现在只会用vc++6.0的ctrl+f7和ctrl+f5，[/quote] 现在立即学会用F11，F10，Shift+F11.

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

user: user-0
content: 请大师继续指导下，我是新手，现在只会用vc++6.0的ctrl+f7和ctrl+f5，

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

回复:
user: user-1
content: unsigned char buf[5] = {0x12, 0x34, 0x56, 0x78, 0x9a};    unsigned int res[4];    res[0] = ((buf[0] & 0xff) << 2 ) | (buf[1] >> 6);//8bits + 2bits    res[1] = ((buf[1] & 0x3f) << 2) | (buf[2]>> 4); //6bits + 4bits    res[2] = ((buf[2] & 0x0f) << 4) | (buf[3] >> 2); //4bits + 6bits    res[3] = ((buf[3] & 0x03) << 2) |  buf[4];//2bits+8bits

user: user-0
content: 跟着大神走，就是开眼界啊@！

user: user-2
content: 引用 8 楼 yulitingfeng 的回复:[quote=引用 7 楼 u011779875 的回复:] 60分就是管用啊 这么快就有大神来了  还是如果问题想要快速被解决掉 1 问题实在太简单 2 只要你开的起分 重赏之下必有勇夫大神才不在乎分，只是你的问题简单，但不是很无聊[/quote] 我都说了俩种可能 1 || 2 当然这来的人都是1 所以嘛 2就不会判断了 短路 所以为了1的 不代表它不为了2  只是不判断2而已

user: user-3
content: 引用 7 楼 u011779875 的回复:60分就是管用啊 这么快就有大神来了  还是如果问题想要快速被解决掉 1 问题实在太简单 2 只要你开的起分 重赏之下必有勇夫大神才不在乎分，只是你的问题简单，但不是很无聊

user: user-2
content: 60分就是管用啊 这么快就有大神来了  还是如果问题想要快速被解决掉 1 问题实在太简单 2 只要你开的起分 重赏之下必有勇夫

user: user-4
content: 给你一个把10位分成两个5位的，你比个葫芦画个瓢吧  #include "stdafx.h" #include<iostream> #include <stdio.h> #include <bitset> using namespace std;  int main() { 	bitset<10> b=0x2ab;     for(int i=0;i<2;i++) 	{ 	  bitset<5> temp; 	  for(int j=0;j<5;j++) 	  { 	    temp[j]=b[5*i+j]; 	  }  	  cout<<temp.to_ulong()<<endl; 	}     return 0; }

user: user-5
content: 引用 4 楼 worldy 的回复:long long x=....; n1=x1 & 1024； x=x>>10; n2=x1 & 1024 .... 引用 2 楼 max_min_ 的回复:取首地址，偏移获取需要的字节数据，保存起来！OK  大神

user: user-6
content: long long x=....; n1=x1 & 1024； x=x>>10; n2=x1 & 1024 ....

user: user-0
content: 引用 1 楼 u012565501 的回复:共同体问题吧 可是共同体都是8位啊 怎么分割出10位出来？

user: user-7
content: 取首地址，偏移获取需要的字节数据，保存起来！OK

user: user-5
content: 共同体问题吧

user: user-0
content: 谢谢楼上各位了，问题解决！！结贴发分了@！

user: user-8
content: 飘过。

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

回复:
user: user-1
content: 英语不好 没怎么看！ 但一般数据结构的教材上都会介绍 prime算法和kruskal算法吧！

user: user-0
content: 没权重的话就用了个深度优先搜索，有哪座城被占需要修的路条数多就要终点保护了，有权重了蛋疼了

user: user-1
content: 没有权重的时候 你是根据什么来生成最小生成树的

user: user-2
content: 这个你可以看看http://blog.csdn.net/realxuejin/article/details/10522383

user: user-3
content: 同求……看过一些C++的思路，大概意思是应该先用kruskal算法获得最小生成树，然后就不知道了……求C语言算法啊！
user-0 提问: Window关于关掉窗口后，程序仍运行

回复:
user: user-1
content: 应该是线程ID，WM_QUIT不送入窗口的

user: user-0
content: 引用 2 楼 worldy 的回复:送入当前线程的消息队列  当前的消息队列它的唯一标识是句柄吗？

user: user-1
content: GetMessage拿出来死掉吗 啥意思？  GetMessage如果发现消息是WM_QUIT，则返回0值，循环结束，WinMain函数结束，程序终止

user: user-1
content: 送入当前线程的消息队列

user: user-2
content: 如果hWnd为NULL，则GetMessage接收属于调用线程的窗口的消息，线程消息由函数PostThreadMessage寄送给调用线程。  PostQuitMessage寄送一个WM_QUIT消息给线程的消息队列并立即返回；此函数向系统表明有个线程请求在随后的某一时间终止。  这个不是PostQuitMessage发送到线程消息队列  GetMessage拿出来死掉吗
user-0 提问: 定点类型

回复:
user: user-0
content: 引用 1 楼 user-1 的回复: printf("%d", 3 * k);  不支持直接的 这我知道，关键是啥是定点类型？

user: user-1
content: printf("%d", 3 * k);  不支持直接的
user-0 提问: 关于二维数组传参的问题

回复:
user: user-1
content: void fun(char(*a)[2])  编译器认为你是要传递一个函数指针的数组

user: user-2
content: 引用 6 楼 z1179675084 的回复:把后缀名改为。c才行，你第二种写法是gcc的扩展语法，不是标准C里面的，出错没有什么奇怪的！VS没有实现C99标准，不代表这种写法就不是标准写法吧...这不是gcc的扩展语法，只是一些编译器厂商不肯按标准实现罢了。如果是C，这绝对是正确的写法，C++就算了...

user: user-3
content: 把后缀名改为。c才行，你第二种写法是gcc的扩展语法，不是标准C里面的，出错没有什么奇怪的！

user: user-2
content: C++还不支持直接的变长数组，不过C++11可以利用constexpr这个关键字，将值转换成编译器常量。老的作法是用指针new...或者封装成类，然后重载[]（其实还是new）。听说C++14可能会允许变长数组，具体还要等新标准

user: user-4
content: 貌似gcc才行，g++不能传变长数组出去...至今还不没用过变长的说...

user: user-5
content: 目前绝大多数的编译器只编译元素数量为 常量的 数组

user: user-6
content: 错在这里   int n = 2;      char a[n][n];

user: user-7
content: 引用 楼主 jmy5945hh 的回复:void fun(char(*a)[2]) { }    int main()  {     char a[2][2];     fun(a); }   以上代码可以正常编译。  void fun(char(*a)[2]) { }    int main()  {     int n = 2;     char a[n][n];     fun(a); }   以上代码编译报错。  GCC环境。  test.cpp:19:10: error: cannot convert ‘char (*)[(((unsigned int)(((int)n) + -0x00000000000000001)) + 1)]’ to ‘char (*)[2]’ for argument ‘1’ to ‘void fun(char (*)[2])’   WHAT THE HELL！   int n = 2;    char a[n][n];  这个是什么标准啊  我怎么没见过这么用的 这个n必须得在编译之前知道n的值 才能知道 要开辟多大的空间 你这个n也是编译时候才知道的
user-0 提问: 求问如何定义长度为1000000的结构体数组？

回复:
user: user-1
content: 其实不大，1M个对象而已。楼主做科学计算？

user: user-2
content: 引用 5 楼 u012090902 的回复:我直接写struct定义这个结构没问题吧？不用换typedef struct吧？没问题。。。

user: user-3
content: 定义成全局数组或者静态数组，存放的位置不一样

user: user-4
content: 如果真需要这么大的数组，可以先缓存到硬盘上，再分段读取处理。

user: user-5
content: 好奇楼主的需求啊，  struct path *test=(struct path*)malloc(sizeof(struct path) * 1000000);

user: user-6
content: 用内存映射吧，数据多的话这样不效率~~

user: user-7
content: Windows ~ 调用 win32 api - CreateFileMapping , OpenFileMapping ...  Linux ~ 调用  mmap ....  开 MemoryMapped file 出来用   几百MB 都没问题

user: user-8
content: 引用 5 楼 u012090902 的回复:我直接写struct定义这个结构没问题吧？不用换typedef struct吧？  问个鸡巴问,自己上机试不就知道了吗? 不动手,光鸡巴问有逑用 是试出来的结果可靠,还是别人告诉你的结果可靠?

user: user-9
content: a=new xxx[1000000];

user: user-0
content: 我直接写struct定义这个结构没问题吧？不用换typedef struct吧？

user: user-8
content: struct path *x=(struct path*)malloc(sizeof(path)*1000000);  x[0].a=250; x[999999].a=250;

user: user-10
content: struct path *pArray = malloc(10000000*sizeof(struct path))使用malloc申请吧。

user: user-0
content: 结构体是这么 struct path { int a; int b; int c; int d; }; 要建一个大小1000000的这种结构体数组

user: user-11
content: http://baike.baidu.com/link?url=nCMZ_56CMJFvvJdLXH4PtrsEuG3r2Pi_9TVBJgECMiMjVS2Juicpv-y23CmmYrHOufO2vqgfOnBF9zE_gMblR_  你的结构体多大？你的意思是你要在heap上申请？
user-0 提问: TCP問題

回复:
user: user-1
content: 请检查每个函数调用的返回值！确认每步的正确性！

user: user-2
content: server的程序     m_RecvLen = m_SocketServer.Receive(m_SendBuffer, m_RecvBuffer.Length, SocketFlags.None); m_SendBuffer 这个应该使用错了，缓冲溢出问题。
user-0 提问: C语言如何判断 // 后面的字符串是注释， 而#后面的是命令

回复:
user: user-1
content: 请LZ自行学习“有限状态自动机”。

user: user-0
content: #goto *black001  //跳转到black001这个标签   如果一行中有命令也有注释呢

user: user-0
content: 引用 12 楼 ForestDB 的回复:}  忘了strtok吧  打好基础  不用strtok的话就不好拆分单词了

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

user: user-1
content: # include <stdio.h> # include <ctype.h>  void ltrim(char * line) {     char * p = line;     char * start = line;     while (*p != '\0' && isblank(*p))         p++;     while (*p != '\0')     {         *start++ = *p++;     }     *start = '\0'; }  int is_comment_line(char * line) {     if (line[0] == '/' && line[1] == '/')         return 1;     else         return 0; }  int main() {     char line[BUFSIZ] = "  // this is a comment line";     ltrim(line);     if (is_comment_line(line))         printf("it is comment line\n");      return 0; }  忘了strtok吧  打好基础

user: user-0
content: 引用 10 楼 adeng1919 的回复:可以看看编译原理一类的书，词法分析和语法分析 那书我看过，不过说了一大堆奇怪的东西，比如IR还有什么的，我完全看不懂

user: user-3
content: 可以看看编译原理一类的书，词法分析和语法分析

user: user-0
content: 引用 8 楼 ForestDB 的回复:LZ是不是不知道该如何写“移除行首空白”的代码？ LZ是不是不知道该如何写“判断以//开头”的代码？  移除空格我知道用strtok，但是详细判断的代码不会

user: user-1
content: LZ是不是不知道该如何写“移除行首空白”的代码？ LZ是不是不知道该如何写“判断以//开头”的代码？

user: user-0
content: 引用 4 楼 ForestDB 的回复:简单的分析即可：  读一行 移除行首空白 如果行以//开头，则该行是注释 如果行以#开头，则该行是命令  我知道要把空格去掉，而且是否注释和命令我已经在1楼说过了， 我现在求的是写法

user: user-4
content: 逐行扫描，每行以"\n"或者"\\"结尾  以"#"拆分每行，则除了下标为0的元素，其它都是命令。

user: user-5
content: 这个就是 所谓的语法分析器了词法分析器  Yacc 百度学学 中心思想是状态机思想 这个状态机可是个好东西 成为大神的必须课

user: user-1
content: 简单的分析即可：  读一行 移除行首空白 如果行以//开头，则该行是注释 如果行以#开头，则该行是命令

user: user-0
content: 引用 1 楼 user-7 的回复:你是想自己写编译器还是脚本解释器?  这是普通的字符串处理 遇到第一个字符是"#"就判断是命令 遇到现从个连续的//就认为是注释.  只是一个规则罢了.  所以就是想定这样的规则啊，就是不知道写法

user: user-6
content: 编译器就是知道

user: user-7
content: 你是想自己写编译器还是脚本解释器?  这是普通的字符串处理 遇到第一个字符是"#"就判断是命令 遇到现从个连续的//就认为是注释.  只是一个规则罢了.
user-0 提问: 求纠错：恕我眼拙，实在看不出哪里有问题

回复:
user: user-1
content: 同意3楼 另外你fp3没关

user: user-2
content: 调试程序，是必须掌握的基本技能！也是最基础的！  总要在接收新东西的时候学会新东西的，

user: user-3
content: if(sscanf(names_1[i], "%s%f%d",nms_1[i],&mks_1[i],&wds_1[i]) != 3)  //抽取信息  后面俩个是 int型的 这地方传的是地址 你直接把值传进去了

user: user-4
content: 学debug，没你想得那么难。

user: user-3
content: sscanf(names_1[i], "%s%f%d",nms_1[i],mks_1[i],wds_1[i]); 这句话是错的 你怎么能这么写
user-0 提问: main 函数入参 特殊符号问题

回复:
user: user-1
content: 只有C，C++原生字符串，需要双引号，即只有代码里，明确写的字符串字面值，需要双引号。  命令行参数格式，由操作系统和编译器（编译器的库代码中的启动代码）确定。 并不是，一定会，当作字符串字面值处理。

user: user-2
content: http://bbs.csdn.net/topics/390469280

user: user-0
content: 虽然 '\'' 是不可以的，但是"\""是可以的，这就行了，需要什么字符都可以表示出来

user: user-0
content: 引用 1 楼 max_min_ 的回复: ./test  "dd\'dd"   用双引号引起来的单引号是不需要转义的，"dd\'dd"打印出来的是dd\'dd，那我还是用双引号引吧

user: user-3
content: C:\Users\lfyang>echo 'abc'def' 'abc'def'  C:\Users\lfyang>

user: user-3
content: 'abc'efg'  命令行不识别转义吧，   直接按空格分隔，  穿字符串表面值。

user: user-4
content: "dd\'dd"这样不对吗

user: user-5
content: ./test  "dd\'dd"

user: user-6
content: 这主要看命令解释程序（如MS的command.exe,linux下的各种shell）的处理

user: user-7
content: google 转义字符
user-0 提问: memset函数疑惑

回复:
user: user-1
content: “memset函数是以字节为单位进行赋值的操作的”楼上说的对，所以他理论上是应该跟任何对象进行初始化的。但是对于一些包含STL变量，指针等数据成员的对象不该这么干

user: user-2
content: 引用 5 楼 u010286751 的回复:#include<stdio.h> #include <string.h> int main() {  int a[10],i;  memset(a,1,sizeof(a));  for(i=0;i<10;i++)    printf("%d ",a[i]);    return 0; }  初始为1不行了？？？输不出来 memset函数是以字节为单位进行赋值的操作的 看看你的数组类型 数组中所有元素都是 0x01010101h

user: user-0
content: #include<stdio.h> #include <string.h> int main() {  int a[10],i;  memset(a,1,sizeof(a));  for(i=0;i<10;i++)    printf("%d ",a[i]);    return 0; }  初始为1不行了？？？输不出来

user: user-2
content: 引用 2 楼 max_min_ 的回复:memset函数是以字节为单位进行赋值的操作的 看看你的数组类型 ++ 初始为零,符合常理呀...

user: user-3
content: 不超过0xFF都可以

user: user-4
content: memset函数是以字节为单位进行赋值的操作的 看看你的数组类型

user: user-5
content: 其实是可以的..但一个数组你要置为其他数,是不是得用个for循环呢?或者用memcpy也行..其实你不置为0也无所谓,撑死了也就留下点堆栈信息,除非特别是牛x的黑客..要不然那丁点堆栈信息真没啥用
user-0 提问: 大型程序中函数名或类型名冲突的问题！

回复:
user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 3 楼 u011779875 的回复:] 还有你去大公司 都有严格编码风格的手册 你进公司第一件事是学一星期编码风格  你还怕这个 除非你去小公司  就你一个程序员 你想咋写就咋写 你就是神 就是上帝 哦？原来我就是神 就是上帝！以前咋没觉味呢？[/quote] 我也是上帝 我们公司也就我一个人 哈哈 真是奇闻  当上帝当久了 突然有一天 掉下去当普通人 还是会很痛苦的一件事 但是普通人变成上帝 确实很快乐的一件事 当一个人不知道上帝和普通人之分的时候  那么 同等概率

user: user-2
content: 引用 3 楼 u011779875 的回复:还有你去大公司 都有严格编码风格的手册 你进公司第一件事是学一星期编码风格  你还怕这个 除非你去小公司  就你一个程序员 你想咋写就咋写 你就是神 就是上帝 哦？原来我就是神 就是上帝！以前咋没觉味呢？

user: user-3
content: 引用 楼主 skyliuxu 的回复:请教一下列位，一个大型程序中如何避免函数名或类型名冲突呢？ 所有extern的或者global的都加上前缀，像abc123_DoJob,abc123_GoTo之类的

user: user-1
content: 还有你去大公司 都有严格编码风格的手册 你进公司第一件事是学一星期编码风格  你还怕这个 除非你去小公司  就你一个程序员 你想咋写就咋写 你就是神 就是上帝

user: user-4
content: 1.使用命名空间 2.少用using namespace,尽量用全名.

user: user-1
content: 很简单啊  规定一个规则就好了 比如 我类型名  必须这样定义 int i_elem; int 型加一个_ char c_elem; 我函数名定义的时候不我不用_这样 你肯定就不可能冲突了  还有就是C++中有命名空间 这个东西  可以减少吧 反正我也没用过 C也存在命名空间的感念吧

user: user-5
content: 一般用 ModuleName + FunctionName的形式

user: user-6
content: 选择一种自己习惯的命名规则@

user: user-7
content: 引用 1 楼 u011779875 的回复:很简单啊  规定一个规则就好了 比如 我类型名  必须这样定义 int i_elem; int 型加一个_ char c_elem; 我函数名定义的时候不我不用_这样 你肯定就不可能冲突了  还有就是C++中有命名空间 这个东西  可以减少吧 反正我也没用过 C也存在命名空间的感念吧  命名规则
user-0 提问: 关于unsiged int和int相加的一个面试提

回复:
user: user-0
content: 引用 4 楼 qq283802332 的回复:假设是32位数据  a的32位模式是00000000 00000000 00000000 00000110 (6) b的32位模式是11111111 11111111 11111111 11110110 (-20)  a + b 后的位模式是11111111 11111111 11111111 11111100  printf("a + b =%d\n",a + b);  因为printf()中格式要求是%d, 即要用十进制有符号， 所以很明显这里的a+b的位模式就将被解释成有符号数 即-14   a + b > 6 ? puts("1"):puts("2"); 因为a是一个无符号， 而b是有符号, 所以a+b将被强制转换成无符号 所以这里a+b的位模式将被解释成无符号数， 所以这里a+b将是一个很大的数， 所以输出1  个人见解， 请指教谢谢,算是懂了,大半夜起来发这个问题,还真怕得不到及时回答,大伙早点休息吧

user: user-1
content: 引用 3 楼 A328240784 的回复:[quote=引用 1 楼 max_min_ 的回复:] 无符号的  printf("%u")那a和b相加的时候b是否向unsigned转型了呢?[/quote]  这样说更准确：  当表达式中存在有符号类型和无符号类型时，默认情况下计算的结果将转化为无符号类型

user: user-2
content: 假设是32位数据  a的32位模式是00000000 00000000 00000000 00000110 (6) b的32位模式是11111111 11111111 11111111 11110110 (-20)  a + b 后的位模式是11111111 11111111 11111111 11111100  printf("a + b =%d\n",a + b);  因为printf()中格式要求是%d, 即要用十进制有符号， 所以很明显这里的a+b的位模式就将被解释成有符号数 即-14   a + b > 6 ? puts("1"):puts("2"); 因为a是一个无符号， 而b是有符号, 所以a+b将被强制转换成无符号 所以这里a+b的位模式将被解释成无符号数， 所以这里a+b将是一个很大的数， 所以输出1  个人见解， 请指教

user: user-0
content: 引用 1 楼 max_min_ 的回复:无符号的  printf("%u")那a和b相加的时候b是否向unsigned转型了呢?

user: user-3
content: 按%d输出是负的

user: user-1
content: 无符号的  printf("%u")
user-0 提问: memcpy 的不解

回复:
user: user-1
content: 正解++， ps：是我那个博客的代码？ 引用 5 楼 zhao4zhong1 的回复:因为+后面表达式计算的数是以多少个char为单位；而不是以多少个int或多少个double为单位。

user: user-2
content: 引用 楼主 daxiaoyuyu 的回复:我看了一篇博文： C语言实现 vector( 动态数组) 改进版  地址：http://blog.csdn.net/dengxu11/article/details/7311820  有一点不明白，在下面代码中 int cvector_pushback(const cvector cv, void *memb)   {   	if (cv->cv_len >= cv->cv_tot_len)    	{   		void *pd_sav = cv->cv_pdata;   		cv->cv_tot_len <<= EXPANED_VAL;   		cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size);    		if (!cv->cv_pdata)    		{   			cv->cv_pdata = pd_sav;   			cv->cv_tot_len >>= EXPANED_VAL;   			return CVEPUSHBACK;   		}   	}     //把memeb中的数据复制到cv_pdata的后面。从memeb拷贝cv_size个字节到cv_pdata的最后。 	memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size);   	cv->cv_len++;   	return CVESUCCESS;   }  对于memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size);   为什么(char*)不能够换成(int *)或（double *）或其它类型？  你换成 int*, double*也是完全可以的, 前面的楼已经说过, memcpy中参数是void*类型的. 最重要的是后面的参数, 要复制的长度, 单位是字节. 由于char刚好是占一个字节, 所以使用这个指针, 可以增强程序的可读性.

user: user-3
content: 今后要在C论坛混了。。。

user: user-4
content: 因为+后面表达式计算的数是以多少个char为单位；而不是以多少个int或多少个double为单位。

user: user-5
content: 引用 4 楼 starytx 的回复:举了例子，假如原指针p的值为1(指向地址为1的空间)，现在要向它后边3个位置的地方赋值内容，那么需要把指针位置后移3位，那就是(char*)p+3,也就是memcpy(p+3 , xxx ,xxx);如果使用了int*或者其他来代替char*,那么就是(int*)p+3,此时指针指向的不是p后移3位的位置而是3*4=12的位置，因为一个int通常占4个字节，而char是1 ++    就是指针的加减法

user: user-6
content: 举了例子，假如原指针p的值为1(指向地址为1的空间)，现在要向它后边3个位置的地方赋值内容，那么需要把指针位置后移3位，那就是(char*)p+3,也就是memcpy(p+3 , xxx ,xxx);如果使用了int*或者其他来代替char*,那么就是(int*)p+3,此时指针指向的不是p后移3位的位置而是3*4=12的位置，因为一个int通常占4个字节，而char是1

user: user-7
content: 引用 5 楼 zhao4zhong1 的回复:因为+后面表达式计算的数是以多少个char为单位；而不是以多少个int或多少个double为单位。  ++

user: user-8
content: 因为char是 1 byte, 指针+1时向后偏移的是1 byte, 可以一个一个字节拷贝 如果转换成int*指针, 这样在计算大小的时候指针向后偏移是4byte, 算出来的大小如果是byte的话,需要除以4以对应指针的步长, 拷贝的时候是按照4byte为单位.  拷贝内存时肯定是按照byte为单位最合适, 而不是4byte或者多个byte

user: user-9
content: 引用 楼主 daxiaoyuyu 的回复:我看了一篇博文： C语言实现 vector( 动态数组) 改进版  地址：http://blog.csdn.net/dengxu11/article/details/7311820  有一点不明白，在下面代码中 int cvector_pushback(const cvector cv, void *memb)   {   	if (cv->cv_len >= cv->cv_tot_len)    	{   		void *pd_sav = cv->cv_pdata;   		cv->cv_tot_len <<= EXPANED_VAL;   		cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size);    		if (!cv->cv_pdata)    		{   			cv->cv_pdata = pd_sav;   			cv->cv_tot_len >>= EXPANED_VAL;   			return CVEPUSHBACK;   		}   	}     //把memeb中的数据复制到cv_pdata的后面。从memeb拷贝cv_size个字节到cv_pdata的最后。 	memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size);   	cv->cv_len++;   	return CVESUCCESS;   }  对于memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size);   为什么(char*)不能够换成(int *)或（double *）或其它类型？  memcpy的实现是 void *memcpy(void *s1,const void *s2,size_t n) 你在C++的环境中的编译器 会严格检查函数的参数类型吧  当然就不行了 之所以memcpy为什么会选void* 因为这个是万能指针 可以实现泛型

user: user-10
content: cv_pdata 是怎么定义的？
user-0 提问: 帮忙看个数据结构的题目，谢谢啦

回复:
user: user-1
content: 是变量p消失 但是你new出来的还在那 但是你却找不到在哪了 到底

user: user-1
content: char Pop(LinkStack &S,char e)//出栈 { LinkStack p; p=new StackNode;   //这行没有用。  if(S==NULL) { printf("栈为空！"); return ERROR; } else{  e=S->data; p=S; S=S->next; return e;} } 你这是要逆天啊  你这个p是局部变量 你定义了p 你new出来 你就给p赋值S啊 之后你也没用到p啊 你这样会new出来后 你都delete 不了 局部变量函数结束后 就消失了 还有我没看你程序逻辑 问题肯定很多 你这个p你回答我 你要用来做什么 还是你有地方写错了

user: user-0
content: 大哥，就是帮我看下问题出在哪里，咋运行不了呢？麻烦帮忙改下，谢谢了！

user: user-2
content: char Pop(LinkStack &S,char e)//出栈 { LinkStack p; p=new StackNode;   //这行没有用。  if(S==NULL) { printf("栈为空！"); return ERROR; } else{  e=S->data; p=S; S=S->next; return e;} } int StackEmpty(LinkStack S) { if(S->next=NULL){ return ERROR;} else{ return OK; }  } int StackLength(LinkStack &S){ int len=0; while(S->next!=NULL){ len++; S=S->next; } return len; }   StackEmpty首先判断的是S是否为空。

user: user-1
content: 你是要我帮你写一个 这个功能还是做什么 没看懂你要问的是什么 说关键 帮忙看 我也不能盯着看就帮到你了吧
user-0 提问: 循环终止问题

回复:
user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！   恩，我就是怕我自己写出不可预测的代码，所以问一下这个代码的操作流程。现在知道了。

user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-2
content: 引用 5 楼 u011594571 的回复:好吧，可能是我太弱。 我只是想知道，if语句判断的是ch的获取值，但是我总觉得ch每次获得是'\n'，所以当输入E或者e时，应该是x的值是E或者e啊，而ch = '\n',怎么循环也会终止。  你可以加个测试啊，scanf的返回值是成功读取的个数，当你输入‘e‘或者‘E'时你看看返回值是什么，scanf没有读入你的‘e‘或者‘E'，字母还在输入缓冲里放着呢，接着getchar就读入就....你懂的

user: user-0
content: 好吧，可能是我太弱。 我只是想知道，if语句判断的是ch的获取值，但是我总觉得ch每次获得是'\n'，所以当输入E或者e时，应该是x的值是E或者e啊，而ch = '\n',怎么循环也会终止。

user: user-3
content: break; 如果用于循环，跳出最内层的循环 如果用于switch，跳出最内层的switch

user: user-4
content: linux环境下验证了下，没有啥问题啊，lz有啥疑问

user: user-5
content: 可能又是回车符的问题。。。。

user: user-6
content: 不知楼主要问什么
user-0 提问: 请教一个编程的问题！

回复:
user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:重建所有 这是什么原因导致成的啊？

user: user-1
content: 重建所有

user: user-2
content: rebuild all

user: user-3
content: 看 编译器手册或google

user: user-4
content: 清理项目，重新编译  抬头看你的帖子标题处,即有结贴二字

user: user-5
content: Debug目录删除了！重建所有吧。

user: user-0
content: 怎样解决啊？
user-0 提问: 什么是原生代码？

回复:
user: user-1
content: 楼主说的这个词语，应该是一个方言。

user: user-2
content: 1.高级语言编译，链接，其实是实现以下过程：  源代码---->汇编----->机器指令  对否？ 不一定， 汇编语言－汇编－机器指令 C/C++语言－编译－机器指令 VB6、Java、.NET－编译－对应的P代码 2.可以把机器指令，变成汇编指令么？ 不应叫“变成”，应该叫“以汇编助记符的形式呈现”

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:引用 11 楼 u012561056 的回复: [quote=引用 10 楼 zhao4zhong1 的回复:] 个人理解：不需要通过虚拟机，能直接让CPU执行的机器指令代码。  1.什么是机器指令代码？汇编？ 汇编是将二进制的机器指令代码翻译为人能看懂的助记符。 2.机器指令代码，可以反编译为源代码？ 不能。 3.javascript语言编写的程序，可以变成机器指令代码？ 不能，只能变成java虚拟机指令。[/quote]  1.高级语言编译，链接，其实是实现以下过程： 源代码---->汇编----->机器指令 对否？  2.可以把机器指令，变成汇编指令么？

user: user-3
content: e ,虽不明，但觉历

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:引用 11 楼 u012561056 的回复: [quote=引用 10 楼 zhao4zhong1 的回复:] 个人理解：不需要通过虚拟机，能直接让CPU执行的机器指令代码。  1.什么是机器指令代码？汇编？ 汇编是将二进制的机器指令代码翻译为人能看懂的助记符。 2.机器指令代码，可以反编译为源代码？ 不能。 3.javascript语言编写的程序，可以变成机器指令代码？ 不能，只能变成java虚拟机指令。[/quote]  机器指令，可以反编译成汇编指令？

user: user-4
content: http://blog.jobbole.com/41184/

user: user-5
content: 3楼，对！

user: user-2
content: 引用 11 楼 u012561056 的回复: 引用 10 楼 zhao4zhong1 的回复:个人理解：不需要通过虚拟机，能直接让CPU执行的机器指令代码。  1.什么是机器指令代码？汇编？ 汇编是将二进制的机器指令代码翻译为人能看懂的助记符。 2.机器指令代码，可以反编译为源代码？ 不能。 3.javascript语言编写的程序，可以变成机器指令代码？ 不能，只能变成java虚拟机指令。

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:个人理解：不需要通过虚拟机，能直接让CPU执行的机器指令代码。  1.什么是机器指令代码？汇编？  2.机器指令代码，可以反编译为源代码？  3.javascript语言编写的程序，可以变成机器指令代码？

user: user-2
content: 个人理解：不需要通过虚拟机，能直接让CPU执行的机器指令代码。

user: user-6
content: 引用 7 楼 u012561056 的回复:[quote=引用 1 楼 wangdahu888 的回复:] 就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。  javascript可以转化为原生代码么？[/quote] 不可以吧,运行时需要解释器

user: user-0
content: 引用 1 楼 wangdahu888 的回复:就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。  javascript可以转化为原生代码么？

user: user-7
content: 没听过，路过

user: user-6
content: 引用 4 楼 u012561056 的回复:[quote=引用 3 楼 wangdahu888 的回复:] [quote=引用 2 楼 u012561056 的回复:] [quote=引用 1 楼 wangdahu888 的回复:] 就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。   1.原生代码：是指一些高级语言，编译，链接后的代码？  2.C， objective-c，都可以产生原生代码？    javascript，也可以产生原生代码么？[/quote] javascript要通过一个解释器来执行,并不是直接依附操作系统运行[/quote]   C， objective-c ？[/quote]可以产生原生代码

user: user-0
content: 引用 3 楼 wangdahu888 的回复:[quote=引用 2 楼 u012561056 的回复:] [quote=引用 1 楼 wangdahu888 的回复:] 就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。   1.原生代码：是指一些高级语言，编译，链接后的代码？  2.C， objective-c，都可以产生原生代码？    javascript，也可以产生原生代码么？[/quote] javascript要通过一个解释器来执行,并不是直接依附操作系统运行[/quote]   C， objective-c ？

user: user-6
content: 引用 2 楼 u012561056 的回复:[quote=引用 1 楼 wangdahu888 的回复:] 就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。   1.原生代码：是指一些高级语言，编译，链接后的代码？  2.C， objective-c，都可以产生原生代码？    javascript，也可以产生原生代码么？[/quote] javascript要通过一个解释器来执行,并不是直接依附操作系统运行

user: user-0
content: 引用 1 楼 wangdahu888 的回复:就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。   1.原生代码：是指一些高级语言，编译，链接后的代码？  2.C， objective-c，都可以产生原生代码？    javascript，也可以产生原生代码么？

user: user-6
content: 就是Native Code，编译后可直接依附操作系统运行，不需要经过虚拟机之类的东西。
user-0 提问: static定义变量

回复:
user: user-1
content: 引用 4 楼 abc594986308 的回复:[quote=引用 2 楼 wangdahu888 的回复:] static修饰的变量是静态的,在第一次进入fac时,被初始化为1,以后每次进入fac函数,static修饰的变量都为上次的值.  建议楼主先加强基础知识吧 懂了懂了，突然就懂了，我懂了[/quote] 结合一下阶乘的公式呗

user: user-0
content: 引用 2 楼 wangdahu888 的回复:static修饰的变量是静态的,在第一次进入fac时,被初始化为1,以后每次进入fac函数,static修饰的变量都为上次的值.  建议楼主先加强基础知识吧 懂了懂了，突然就懂了，我懂了

user: user-0
content: 引用 2 楼 wangdahu888 的回复:static修饰的变量是静态的,在第一次进入fac时,被初始化为1,以后每次进入fac函数,static修饰的变量都为上次的值.  建议楼主先加强基础知识吧 这个我知道，但是问题在于我不知道它怎么就把阶乘给算出来了，求阶乘的那个函数真心没搞明白啊，求助

user: user-1
content: static修饰的变量是静态的,在第一次进入fac时,被初始化为1,以后每次进入fac函数,static修饰的变量都为上次的值.  建议楼主先加强基础知识吧

user: user-2
content: static修饰的变量是静态的，也就是只要进程没有结束，它的值一直是有效的！
user-0 提问: 新手提问：函数调用，参数个数不对应。

回复:
user: user-1
content: 可以使用联合体, 函数指针的联合体. 并且函数调用指定stdcall, 这样堆栈平衡就由调用者保证, 函数自已就不用管堆栈平衡了.

user: user-2
content: 引用 5 楼 Caynne_s 的回复:[quote=引用 2 楼 wangdahu888 的回复:] and $0xfffffff0,%esp  ;把esp中的低位的位置零,相当于把esp变小,在栈上分配一下内存空间  剩下的那三条指令,就是依次压栈呗,没什么好说的 请问，在c中，如果遇到像参数个数不匹配的情况，是怎么做处理的呢？[/quote] 参数个数不匹配，直接报编译错误了呀

user: user-0
content: 引用 2 楼 wangdahu888 的回复:and $0xfffffff0,%esp  ;把esp中的低位的位置零,相当于把esp变小,在栈上分配一下内存空间  剩下的那三条指令,就是依次压栈呗,没什么好说的 请问，在c中，如果遇到像参数个数不匹配的情况，是怎么做处理的呢？

user: user-3
content: 先弄清楚__cdecl,__stdcall,__fastcall的区别。

user: user-4
content: 与0xFFFFFFF0想与应该和内存对齐有关吧，取4的整数倍位置存放东西

user: user-5
content: 原因是调用函数时不知道函数原型

user: user-2
content: and $0xfffffff0,%esp  ;把esp中的低位的位置零,相当于把esp变小,在栈上分配一下内存空间  剩下的那三条指令,就是依次压栈呗,没什么好说的

user: user-6
content: mov %esp, %ebp    //先把%esp保存在寄存器%ebp（应该是4字节的） and $0xfffffff0,%esp //%esp &= 0xfffffff0 我理解的应该是这样
user-0 提问: 请问，GUI_MSG_SYSTEM这个消息是如何产生的? 

回复:
user: user-1
content: 多半指点窗口左上角时，shou系统菜单的消息。

user: user-2
content: IDE中，在GUI_MSG_SYSTEM上点鼠标右键，选转到参考。

user: user-3
content: 这是哪个UI框架
user-0 提问: 阿里巴巴笔试题，大家来看看

回复:
user: user-1
content: 不同线程生成的数据可能会互相覆盖，但不影响结果  #define ARRMAX 255 volatile char g_out[ARRMAX]; volatile int g_idx = 0; void *threadfunc(void *p) {   char c = (char *)p;   for(;;){     int idx = g_idx++;     if (idx >= ARRMAX) return NULL;     g_out[idx] = c;     sleep(0);   } }  int main(){   pthread_t th;   char in[] = "abcd";   int i = 0;   for(; i < 4; i++){     if (pthread_create(&th, NULL, threadfunc, (void *)in[i]) < 0) return -1;   }   sleep(10); }

user: user-2

user: user-3
content: LZ首先得纠正个观点，“只利用线程的随机调度特性”也是首先要你能够创建线程，才能利用此特性，如果连线程都不用，怎么利用此特性？ 不要太纠结于“不提供任何相关库函数和工具包”

user: user-0
content: 再顶  引用 6 楼 qq120848369 的回复:1, 首先你明白洗牌法，我们的工作就是封装一个rand方法，用题目的条件。 2, 启动一个线程,让其sleep(1), 主线程保持死循环++i如下: static volatile unsigned int n = 0;  unsigned int rand_function() {  pthread_create(); // 启动一个线程, 线程里sleep(1)后标记n=1并退出 unsigned int i = 0; while (true) {     n++;     if (n) { pthread_join(); return i} } } 这样还是要用到pthread库啊

user: user-4
content: 不知道，帮顶，撸主知道答案后记得通知一下

user: user-5
content: 引用 6 楼 qq120848369 的回复:1, 首先你明白洗牌法，我们的工作就是封装一个rand方法，用题目的条件。 2, 启动一个线程,让其sleep(1), 主线程保持死循环++i如下: static volatile unsigned int n = 0;  unsigned int rand_function() {  pthread_create(); // 启动一个线程, 线程里sleep(1)后标记n=1并退出 unsigned int i = 0; while (true) {     n++;     if (n) { pthread_join(); return i} } }  写错了哈, 是i++

user: user-5
content: 1, 首先你明白洗牌法，我们的工作就是封装一个rand方法，用题目的条件。 2, 启动一个线程,让其sleep(1), 主线程保持死循环++i如下: static volatile unsigned int n = 0;  unsigned int rand_function() {  pthread_create(); // 启动一个线程, 线程里sleep(1)后标记n=1并退出 unsigned int i = 0; while (true) {     n++;     if (n) { pthread_join(); return i} } }

user: user-0
content: 看题目的意思应该就是只使用标准C语言和sleep函数实现，没说可以创建线程

user: user-6
content: 你真实在，，，，，，都说了让你利用线程调度的随机性，，，难道你自己实现一个线程？？  再说了。 线程库是c的一部分，线程不能用，是不是c的库文件lib都不能用呢？？？？？

user: user-0
content: 题目说不可以用任何库啊，所以应该是不能创建线程的

user: user-7
content: 可不可以一个数对应一个线程呢？然后通过sleep控制顺序？

user: user-0
content: 木有人回答啊，自己顶
user-0 提问: 线程问题

回复:
user: user-1
content: 引用 1 楼 ml0719787 的回复:不要用sleep  #include <stdlib.h> #include <stdio.h> #include <pthread.h>  pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; void* func(void *arg) {     printf("%d\n", *(int *)arg);     pthread_mutex_unlock(&mymutex);     return NULL; }  int main() {      int i;     pthread_t p[10] = {0};     pthread_mutex_lock(&mymutex);     for(i = 0; i < 10; i++)     {            pthread_create(&p[i],NULL,func,&i);         pthread_mutex_lock(&mymutex);     }                 pthread_mutex_unlock(&mymutex);              for(i = 0; i < 10; i++)     {            pthread_join(p[i],NULL);     }        return 0; }   在你代码基础上，加了一点，但是感觉还有没必要！

user: user-0
content: 不要用sleep
user-0 提问: 关于IP访问的函数实现

回复:
user: user-1
content: 用hash+lru哈，不懂可以百度这个名词。

user: user-0
content: 引用 1 楼 u011779875 的回复:这样呢 数组的第二维如果不够用怎么办 第一 你第二维大一点不就得了   第二 动态试探申请 先malloc一部分 可以满足基本条件 每次用到时进行判断 是否足够维数 realloc   一些维数 已定义增加维数宏 这个问题暂时不管了，可以给出统计IP访问次数还有老化的算法吗，尽量节约时间，遍历数组次数尽量少些

user: user-2
content: 这样呢 数组的第二维如果不够用怎么办 第一 你第二维大一点不就得了   第二 动态试探申请 先malloc一部分 可以满足基本条件 每次用到时进行判断 是否足够维数 realloc   一些维数 已定义增加维数宏
user-0 提问: 请问以下代码框架有问题吗?

回复:
user: user-1
content: 引用 4 楼 huabinsir 的回复:在 case 语句后， 有的用break, 有的用return 0, 这会有问题吗? case 里面 最后放break 不要随便在case中用 return 0 貌似我学这么久 没这么用过 这种用法是不提倡的

user: user-0
content: 在 case 语句后， 有的用break, 有的用return 0, 这会有问题吗?

user: user-2
content: swtich语句的后面，函数的结束部分，没有return。

user: user-3
content: 如果各个case之间没有别的代码操作的话，可以代码重用下！ 如果有的话，就这样也行！框架问题，片面代码也是看不出来是否存在问题！

user: user-4
content: 感觉就是有的部分可以归纳一下。
user-0 提问: 只会C语言能考什么证么？是不是费点劲

回复:
user: user-1
content: 好好学习c语言吧！

user: user-2
content: 15考时间也紧张啊,别吓搞,专心准备考研吧

user: user-3
content: 软考可以选C语言阿

user: user-4
content: 证有什么用？？？

user: user-5
content: 个人意见： 计算机科学与技术专业的本科学生考计算机相关的证 就和 外语大学英语专业的本科学生考英语四、六级 一样可笑（无用）！

user: user-5
content: 《Linux C编程一站式学习》

user: user-6
content: 国内的证就是浪费时间浪费生命 有时间的话可以考着玩

user: user-7
content: 大二飘过。。。c++数据结构研究中，安卓开始入门

user: user-0
content: 引用 4 楼 u011779875 的回复:不是考那个注册工程师 计算机方面的那个证 你就可以回家数钱去了 第二 证有没有都行 就像你有女朋友 但是从来不想领结婚证的人一样 不代表什么 第三我连大学毕业证刚发下来我就扔家里了 证没用 关键是你有分析问题的能力 谢了，我还是专心准备考研

user: user-0
content: 引用 3 楼 max_min_ 的回复:好好学习c语言吧！ 现在发现语言真挺有意思，整天在寝室敲啊敲，大一就这样我也不用现在这么着急了

user: user-8
content: 不是考那个注册工程师 计算机方面的那个证 你就可以回家数钱去了 第二 证有没有都行 就像你有女朋友 但是从来不想领结婚证的人一样 不代表什么 第三我连大学毕业证刚发下来我就扔家里了 证没用 关键是你有分析问题的能力
user-0 提问: 关于time_after_eq函数

回复:
user: user-0
content: time_after_eq和time_after有哪些不同

user: user-0
content: 引用 2 楼 u011779875 的回复:#define time_after_eq(a,b)    \      (typecheck(unsigned long, a) && \     typecheck(unsigned long, b) && \     ((long)(a) - (long)(b) >= 0))  在宏中，参数 a 是 jiffies 在某个时刻的快照,如果 a 所代表的时间比 b 靠后或者相等，那么返回真 是被包含在库里可以直接引用，还是要自己定义 jiffies可以直接向变量赋值吗

user: user-1
content: 用法 术语应该叫 准确计算间隔时间

user: user-1
content: 这种的东西的用法 例如 windows中 因为Sleep这个东西可以被信号穿透  也和机器的好坏有关 运行不准确 所以就与了如下用法 	  long tickbeign=GetTickCount(); 	  long tickend=GetTickCount();  		  while(tickend - tickbeign <= time_5) // 60 		{ 			tickend=GetTickCount(); 		}

user: user-2
content: 木有文档吗？？？应该有例子吧

user: user-1
content: windows中的取得系统启动到现在运行的时间是 GetTickCount返回（retrieve）从操作系统启动到现在所经过（elapsed）的毫秒数，

user: user-1
content: http://www.cnblogs.com/leaven/archive/2010/08/30/1812338.html 看这个     硬件给内核提供一个系统定时器用以计算和管理时间，内核通过编程预设系统定时器的频率，即节拍率（tick rate),每一个周期称作一个tick(节拍）。Linux内核从2.5版内核开始把频率从100调高到1000（当然带来了很多优点，也有一些缺点）.    jiffies是内核中的一个全局变量，用来记录自系统启动一来产生的节拍数。譬如，如果计算系统运行了多长时间，可以用 jiffies/tick rate 来计算。jiffies定义在文件<linux/jiffies.h>中：

user: user-1
content: #define time_after_eq(a,b)    \      (typecheck(unsigned long, a) && \     typecheck(unsigned long, b) && \     ((long)(a) - (long)(b) >= 0))  在宏中，参数 a 是 jiffies 在某个时刻的快照,如果 a 所代表的时间比 b 靠后或者相等，那么返回真

user: user-0
content: 求大神指点。

user: user-1
content: 引用 9 楼 ml0719787 的回复:time_after_eq和time_after有哪些不同 没什么不同吧 不是eq吗 equal  就是相等的意思 比如> 和>=的区别  <linux/jiffies.h> 这个不是解释了吗 jiffies是内核中的一个全局变量，用来记录自系统启动一来产生的节拍数。 直接头文件引用 直接去可以用   它和errno比较类似吧
user-0 提问: 串口中断接收问题

回复:
user: user-1
content: 仔细看 manual mcu 的官网看看source code

user: user-0
content: 引用 2 楼 JiMoKuangXiangQu 的回复:51单片机吧？使用Keil IDE(MDK)？建议发到 硬件/嵌入开发 板块。 这个得看芯片的规格书。是不是芯片在进入中断的时候会自动禁用中断？但是我还有接收啊，接收也在中断里，它能接收，应该是能进中断吧！

user: user-2
content: 51单片机吧？使用Keil IDE(MDK)？建议发到 硬件/嵌入开发 板块。 这个得看芯片的规格书。是不是芯片在进入中断的时候会自动禁用中断？

user: user-3
content: 推荐使用portmon软件辅助串口通讯程序调试。
user-0 提问: 在线求助：C中结构体碰到的怪问题，求分析解释，附源码和结果，谢谢

回复:
user: user-1
content: 摒弃cin，cout； 使用scanf，printf！

user: user-2
content: 引用 5 楼 z1179675084 的回复:确实如你所说，越界了，这个问题你先这样做一下  	printf("%0x\n",ds.num1); 	printf("%0x\n",ds.num2); 	printf("%0x\n",&ds.num3);  通过打印的地址，手动画你输入的东西在内存中的分布，当然这里ds.num2和&ds.num3中间隔了一个字节是由于内存对齐的问题。最后输出3224115转化为16进制31 32 33对应于字符‘0’，‘1’，‘2’。到这里估计你这个问题就解决了。多动手动脑！ 另外好像你这个C语言和C++分的不是很清楚啊，在C++里面struct本身就是定义一个类了。你这个写法是C的   typedef struct student { 	char num1[5]; 	char num2[6]; 	int num3; }stu;  stu ds;  C++这样就可以   struct stu { 	char num1[5]; 	char num2[6]; 	int num3; };  stu ds;  如果还有什么不清楚的加我Q吧

user: user-2
content: 确实如你所说，越界了，这个问题你先这样做一下  	printf("%0x\n",ds.num1); 	printf("%0x\n",ds.num2); 	printf("%0x\n",&ds.num3);  通过打印的地址，手动画你输入的东西在内存中的分布，当然这里ds.num2和&ds.num3中间隔了一个字节是由于内存对齐的问题。最后输出3224115转化为16进制31 32 33对应于字符‘0’，‘1’，‘2’。到这里估计你这个问题就解决了。多动手动脑！ 另外好像你这个C语言和C++分的不是很清楚啊，在C++里面struct本身就是定义一个类了。你这个写法是C的   typedef struct student { 	char num1[5]; 	char num2[6]; 	int num3; }stu;  stu ds;  C++这样就可以   struct stu { 	char num1[5]; 	char num2[6]; 	int num3; };  stu ds;

user: user-3
content: Try following:  std::cin.getline(ds.num1, 5);  std::cin.getline(ds.num2, 6);

user: user-4
content: 引用 3 楼 zhaoxiatengkong_1 的回复:[quote=引用 2 楼 yulinlang 的回复:] 因为数组越界了  可以这么说吧， 如果输入的字符在提示的字符数范围内则正常显示，  但是为什么越界之后，不自动截断， 而出错这些怪怪的结果呢？[/quote] 首先，C以效率为第一优先，如果程序员需要某种额外的功能，必须自己添加，编译器只负责把程序员写下来的代码转换成最高效率的执行程序。而C++继承自C的指针等内容，也继承相同的设计方式。如果你想要不管你怎么写都能替你自动处理的语言，那就不该学C/C++。 然后，即使它想替你截断，它也没办法截断。对于cin的operator>>操作符重载函数，你给它的是一个由char数组隐式转换而来的char*指针，函数根本就没有接收到任何关于长度的信息，它怎么知道该从第几个字符的地方截断？ 最后，这个问题跟缓存没关系，纯粹是三个数据内存相连，你调用cin修改前两个数据的时候错误的使用它修改了三个数据所在的内存。在这个程序中你输入的第二个字符串所需的内存长度恰好只到num3为止，如果再长的话，连这三个数据所在函数退出的时候都会因为堆栈地址被改写而发生堆栈错误！

user: user-0
content: 引用 1 楼 ak47_wz 的回复:这个我回答不了你。。。同学习中。 个人感觉应该是cout在输出的时候做了特殊的处理，这种库函数是带缓冲的。倘若用系统调用直接输出的话，应该会有不同的结果。 其次是，这个已经知道是错误的情况了，感觉没啥深究的必要啊。如果要深究，应该去看看cout输出流做了什么样的处理，可能这样会好一点。 第二次测试时考虑了缓存的问题， 所以加入了fflush(stdin)； 但是结果依然出错，cout的使用 还没去看MSDN ， 待会去看一下

user: user-0
content: 引用 2 楼 yulinlang 的回复:因为数组越界了  可以这么说吧， 如果输入的字符在提示的字符数范围内则正常显示，  但是为什么越界之后，不自动截断， 而出错这些怪怪的结果呢？

user: user-5
content: 因为数组越界了

user: user-6
content: 这个我回答不了你。。。同学习中。 个人感觉应该是cout在输出的时候做了特殊的处理，这种库函数是带缓冲的。倘若用系统调用直接输出的话，应该会有不同的结果。 其次是，这个已经知道是错误的情况了，感觉没啥深究的必要啊。如果要深究，应该去看看cout输出流做了什么样的处理，可能这样会好一点。
user-0 提问: 求牛人推荐本数据结构的书籍

回复:
user: user-1
content: 《数据结构(c语言版)》  为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

user: user-2
content: 看来看去严蔚敏版《数据结构》一直都以为数据结构就是死记各种数据结构的操作，后来做了配套的上机题（不是学校发的，是我在淘宝买的）之后，才发现。我的妈呀，原来数据结构是用来这样的。

user: user-3
content: 引用 10 楼 u012507762 的回复:[quote=引用 8 楼 ak47_wz 的回复:] 我也不是牛人。 不过有一本书《数据结构（C语言版）》的不错。另外一本叫做《数据结构1000个问题》感觉也不错。 没看过多少。主要还是多用，多思考。 请问哪个出版社？？哪个作者[/quote] 都是外国人，我也忘了。。。

user: user-0
content: 引用 5 楼 u011779875 的回复:算法导论  专业啊 话说我的水平也就看了一章算法导论的水准  太专业的还是别吧~~一步一步来

user: user-0
content: 引用 8 楼 ak47_wz 的回复:我也不是牛人。 不过有一本书《数据结构（C语言版）》的不错。另外一本叫做《数据结构1000个问题》感觉也不错。 没看过多少。主要还是多用，多思考。 请问哪个出版社？？哪个作者

user: user-0
content: 引用 6 楼 max_min_ 的回复:c语言版 数据结构 请问哪个出版社？？哪个作者

user: user-3
content: 我也不是牛人。 不过有一本书《数据结构（C语言版）》的不错。另外一本叫做《数据结构1000个问题》感觉也不错。 没看过多少。主要还是多用，多思考。

user: user-4
content: 《大话数据结构》怎么样？

user: user-5
content: c语言版 数据结构

user: user-6
content: 算法导论  专业啊 话说我的水平也就看了一章算法导论的水准

user: user-7
content: 引用 3 楼 guojing3625 的回复:http://product.dangdang.com/9188635.html#catalog  我不是高手。。

user: user-7
content: http://product.dangdang.com/9188635.html#catalog

user: user-8
content: 俺也不是，接分

user: user-9
content: 俺不是牛人，路过。
user-0 提问: ubuntu怎么做到在程序运行完会自动关闭终端？

回复:
user: user-1
content: 引用 4 楼 ak47_wz 的回复:[quote=引用 2 楼 u011779875 的回复:] [quote=引用 楼主 q390511749 的回复:] ubuntu终端c语言程序，如何实现程序运行结束会自动关闭终端，而不是停留在命令行上？ 我上述方法是错误的 搞定不了 我试了一下 这样可以    #include <stdio.h>    #include <sys/types.h>    #include <signal.h>    #include <unistd.h>    #include <stdlib.h>   int main()    {      printf("hello world\n");      pid_t kill_num;      kill_num  =getppid();      kill(kill_num,4);      return 0;  }    子进程 得到父进程 子进程退出 kill掉父进程[/quote]  system函数相当于是调用一个shell来执行命令，应该是不能实现。这种方法可以。[/quote] 我才发现我回答的问题竟然没分 你说我对了 你却有分 我晕

user: user-2
content: 引用 2 楼 u011779875 的回复:[quote=引用 楼主 q390511749 的回复:] ubuntu终端c语言程序，如何实现程序运行结束会自动关闭终端，而不是停留在命令行上？ 我上述方法是错误的 搞定不了 我试了一下 这样可以    #include <stdio.h>    #include <sys/types.h>    #include <signal.h>    #include <unistd.h>    #include <stdlib.h>   int main()    {      printf("hello world\n");      pid_t kill_num;      kill_num  =getppid();      kill(kill_num,4);      return 0;  }    子进程 得到父进程 子进程退出 kill掉父进程[/quote]  system函数相当于是调用一个shell来执行命令，应该是不能实现。这种方法可以。

user: user-1
content: 引用 楼主 q390511749 的回复:ubuntu终端c语言程序，如何实现程序运行结束会自动关闭终端，而不是停留在命令行上？ 我上述方法是错误的 搞定不了 我试了一下 这样可以    #include <stdio.h>    #include <sys/types.h>    #include <signal.h>    #include <unistd.h>    #include <stdlib.h>   int main()    {      printf("hello world\n");      pid_t kill_num;      kill_num  =getppid();      kill(kill_num,4);      return 0;  }    子进程 得到父进程 子进程退出 kill掉父进程

user: user-1
content: 引用 楼主 q390511749 的回复:ubuntu终端c语言程序，如何实现程序运行结束会自动关闭终端，而不是停留在命令行上？ man 3 system 加上头文件  程序结束时调用 system("exit"); 试试 好使不 我很久没用linux了