Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 程序运行错误 显示 “process exited with return value 3221225725”

回复:
user: user-1
content: 以下2行： struct convert part[(mesh/sampling+1)*(mesh/sampling+1)]; struct bccinput input[Ymax+1][Xmax+1]; 试加上static： static struct convert part[(mesh/sampling+1)*(mesh/sampling+1)]; static struct bccinput input[Ymax+1][Xmax+1]; 以解决数组很大时出现的问题。

user: user-2
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-3
content: 程序非正常退出了吧！ (mesh/sampling+1)*(mesh/sampling+1)] 再看看这句话是不是可能引起问题的！

user: user-4
content: 编译用-g参数，用gdb排查

user: user-5
content: mesh 这都是什么啊 程序又不全  根本不可能帮你debug 程序 没注释  比我写的还乱 我推荐你看看代码大全 如果不用调试一眼就看出你程序问题所在 那真是高手  错误提示 “process exited with return value 3221225725”.   程序非正常退出  检查方法 debug查看具体出错位置分析  我个人认为 应该是库函数异常退出你自己 debug试试 否则你就贴完整可运行代码
user-0 提问: C数组问题

回复:
user: user-1
content: #include <stdio.h> int main() { 	int i; 	int a[5]; 	for(i = 0;i <= 5;i++) 	{ 		a[i] = -1-i; 		printf("%d\n",a[i]); 	} 	return 0; }  一般来说上面的程序会出问题，无限循环。越界访问了a[5]就是i,因为被改写了，所以会无限循环，当然这个不一定。具体要看编译器怎么做了

user: user-1
content: 有限制，但是你得自己注意。你这里越界了

user: user-2
content: 引用 3 楼 fengyunsen4 的回复:那是不是以后码代码应该避免这样的情况，或者如果非要这样用必须要做出判断？ 是的我告诉你如何判断 成为高手 #include<assert.h>  assert(0 <= idx && idx < sizeof(a) /sizeof(a[0])); a[idx] 就是安全的   调试好程序后加上#DEBUG 这样可以自动避免 等写好程序在都去掉assert

user: user-0
content: 那是不是以后码代码应该避免这样的情况，或者如果非要这样用必须要做出判断？

user: user-3
content: 引用 1 楼 u011779875 的回复:char name[3]; 这个数组是线性存储的 它会随机找零散的线性内存区域 满足你的name[3]空间 如果name[4]后面的内存区域没与人在用 或者不是系统保护的地方 你是可以访问到的 但不代表你的程序每次运行都可以访问到 有可能会出段错误  比如你输入100多个j 你看看 必会出段错误  大一菜鸟飞飞又学到了

user: user-2
content: char name[3]; 这个数组是线性存储的 它会随机找零散的线性内存区域 满足你的name[3]空间 如果name[4]后面的内存区域没与人在用 或者不是系统保护的地方 你是可以访问到的 但不代表你的程序每次运行都可以访问到 有可能会出段错误  比如你输入100多个j 你看看 必会出段错误
user-0 提问: C语言指针问题

回复:
user: user-1

user: user-2
content: 引用 9 楼 Luisfan 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 取出内存地址0x40011400开始的4个字节对应的unsigned long值。  正[/quote]

user: user-3
content: 引用 2 楼 zhao4zhong1 的回复:取出内存地址0x40011400开始的4个字节对应的unsigned long值。  正

user: user-0
content: 感谢各位啦

user: user-4
content: 看起来应该是强制转换，再读取指针内容。

user: user-5
content: 强制转换，再解指针

user: user-6
content: 1.将地址0x40011400强制转成volatile unsigned long*类型 2.对它进行解引用，就得到unsigned long类型的内容。 然后你可以把结果赋给unsigned long类型的变量了。

user: user-7
content: (*((volatile unsigned long*)0x40011400)) 用1个unsigned long*指针指向地址0x40011400里的内容，volatile表示每次都会重新进行读取，可能这块内存的数据会变化。

user: user-8
content: 引用 3 楼 z1179675084 的回复:把0x40011400转化为（unsigned long *）的，前面那个*表示对其取值，就是从0x40011400开始连续读取8个字节的数据。至于volatile表示这个内存空间中的值可能会发生变化，每次取的时候都要重新读取这篇内存！ 上面有点问题是读取4个字节

user: user-8
content: 把0x40011400转化为（unsigned long *）的，前面那个*表示对其取值，就是从0x40011400开始连续读取8个字节的数据。至于volatile表示这个内存空间中的值可能会发生变化，每次取的时候都要重新读取这篇内存！

user: user-2
content: 取出内存地址0x40011400开始的4个字节对应的unsigned long值。

user: user-9
content: 百度啊 有多是答案的 http://blog.sina.com.cn/s/blog_65861d3f0100xsz0.html
user-0 提问: 大学初学者，c语言关于奇偶的问题。

回复:
user: user-1
content: #include <stdio.h>  int main(void) {     int number;     while (EOF != scanf("%d", &number))         puts(number % 2 ? "Yes" : "No");     return 0; }

user: user-0
content: 引用 2 楼 max_min_ 的回复:动态数组！ malloc / free    new/delete ([])  版主大人   这个怎么做啊

user: user-0
content: 来个人 啊

user: user-0
content: 一个很简单的题目。就是输入一组整数，判断奇偶，奇数输出no偶数输出yes。老师留得作业，昨天搞了半夜，这题卡住了。

user: user-2
content: 动态数组！ malloc / free    new/delete ([])

user: user-3
content: 不知道具体问题是什么  所谓“不限定个数”，用动态分配内存吧； 比如  char *p = (char*) malloc(sizeof(c));         ...........;         free(p);  之类的，可以动态分配一个指针，指向一块内存， 最后需要用free函数释放这个区域；

user: user-4
content: 六楼的就可以啊。

user: user-5
content: 将 while (EOF != scanf("%d", &number))改为 while (1 == scanf("%d", &number))更友好些

user: user-6
content: 随便输 如果想要节省内存 那就需要 malloc 和realloc 动态试探 申请内存  #define MAX_SIZE 1024 int elem[MAX_SIZE]; int num; int i; scanf("%d",&num);  for(i = 0; i < num;i++) scanf("%d",&elem[i]);

user: user-0
content: 引用 6 楼 Kenier 的回复:#include <stdio.h>  int main(void) {     int number;     while (EOF != scanf("%d", &number))         puts(number % 2 ? "Yes" : "No");     return 0; }  谢谢。

user: user-7
content: 引用 3 楼 u012541661 的回复:一个很简单的题目。就是输入一组整数，判断奇偶，奇数输出no偶数输出yes。老师留得作业，昨天搞了半夜，这题卡住了。 用一个字符串接收，然后自己分解成多个数，然后判断输出
user-0 提问: 求教： C语言如何对已写入文件中的数据加以修改？

回复:
user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。 原来这里面还转到一道弯，系统自动生成文件b？学习了！谢谢赵哥！

user: user-1
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。

user: user-0
content: 多谢各位指点和提供内存对齐的知识！我对代码做了修改：  //change data written in a file  #include <stdio.h> #include <stdlib.h>  #define SIZE 41 #define MAX  81  struct person{     char name[SIZE];     unsigned int age;     char address[MAX];     char job[SIZE]; };  int main(void) {     struct person info;     struct person rec;     //struct person turnout;     FILE * fp;    //long fl;      if((fp = fopen("info.dat","w+b")) == NULL)     {         fprintf(stderr, "Error opening %s", "info.dat");         exit(EXIT_FAILURE);     }     printf("Name: ");     fgets(info.name, SIZE, stdin);     printf("\nAge: ");     scanf("%u", &info.age);     getchar();     printf("\nAddress: ");     fgets(info.address, SIZE, stdin);     printf("\nJob: ");     fgets(info.job, SIZE, stdin);     fwrite(&info, sizeof (struct person), 1, fp);     puts("\nOriginally:");     printf("Name: %s", info.name);     printf("\nAge: %u",info.age);     printf("\nAddress: %s", info.address);     printf("\nJob: %s", info.job);    // fl = ftell(fp);     fseek(fp, -(long)sizeof(struct person), SEEK_CUR);     if(fread(&rec, sizeof (struct person), 1, fp) == 1)     {         puts("\nRec:");         printf("Name: %s", rec.name);         printf("\nAge: %u",rec.age);         printf("\nAddress: %s", rec.address);         printf("\nJob: %s", rec.job);     }     else     {     	fputs("\nError writing data.\n", stdout);     	exit(1);     }     puts("\nAltering ...");     /*printf("\nName: ");     fgets(rec.name, SIZE, stdin);*/     printf("\nAge: ");     scanf("%u", &rec.age);     getchar();     /*printf("\nAddress: ");     fgets(rec.address, SIZE, stdin);     printf("\nJob: ");     fgets(rec.job, SIZE, stdin);*/     //fl = ftell(fp);     fseek(fp, -(long)sizeof(struct person), SEEK_CUR);     if(fwrite(&rec, sizeof (struct person), 1, fp) == 1)     {     	fseek(fp, -(long)sizeof(struct person), SEEK_CUR);     	if(fread(&rec, sizeof (struct person), 1, fp) == 1) 		{     		puts("\nNew:");     		printf("Name: %s", rec.name);     		printf("\nAge: %u", rec.age);     		printf("\nAddress: %s", rec.address);     		printf("\nJob: %s", rec.job); 		}     	else     	{     		fputs("\nError reading data.\n", stdout);     		exit(1);     	}     }     else     {     	fputs("\nError writing data.\n", stdout);     	exit(1);     }      fclose(fp);     puts("\nBye!");      return 0; }  运行结果正常了。

user: user-2
content: unsigned int age;  scanf("%u", &info.age); 要是定义short  会报警告的   fwrite(&info, sizeof (struct person), 1, fp); 这个不支持直接写结构体吧 你不可以写4句吗 一个一个写进去 这句话有问题

user: user-3
content: if((fp = fopen("info.dat","wb")) == NULL) //改成，   if((fp = fopen("info.dat","wb+")) == NULL)  // 建议检查每个函数的返回值！

user: user-4
content: google, 看看别人如何操作文件的

user: user-2
content: 内存对齐造成的  详情请看 http://bbs.csdn.net/topics/390209790
user-0 提问: linux下卸载挂载点，还能remove成功么？

回复:
user: user-1
content: 我感觉会报6、EIO I/O 存取错误。 剩下的就是你的实验了

user: user-1
content: 相应定义错误查看 man page  相应函数的errno   remove  错误代码： 1、EROFS 欲写入的文件存在于只读文件系统内。 2、EFAULT 参数pathname 指针超出可存取内存空间。 3、ENAMETOOLONG 参数pathname 太长。 4、ENOMEM 核心内存不足。 5、ELOOP 参数pathname 有过多符号连接问题。 6、EIO I/O 存取错误。  你试一下不就知道了 取返回值 之后进行比较  swirch(errno){ case 1: case 2: case 3: case 4: case 5: case 6: }

user: user-2
content: 坚决消灭零恢复.
user-0 提问: 有比椭圆最小二乘拟合更优的椭圆拟合算法吗？

回复:
user: user-0
content: 谔谔 忘了 百度的,大多数能下的都大同小异。就百度 最小二乘椭圆拟合 就能找得到。

user: user-1
content: 你好  我想问一下 你这个 文档是在哪下的呀  最近在研究这个 不是很懂呢
user-0 提问: 关于杭电OJ 1002的探讨

回复:
user: user-0
content: 非常感谢   大神啊！！！！！

user: user-1
content: 格式不对要报错.请修改以下4行:       printf("Case %d:\n",c);//printf("case %d:\n",c);     printf("%s + %s = ",s1,s2);	//printf("%s + %s =",s1,s2);    printf("Case %d:\n",c);//printf("case %d:\n",c);   printf("%s + %s = ",s1,s2);//printf("%s + %s =",s1,s2);
user-0 提问: 求教 两道题

回复:
user: user-1
content: 海量数据操作，看看这里

user: user-2
content: 第一题按字节查表累加，不过数据很大，大概需要用long long 第二题计数排序，开2^32大小的内存计数，最后遍历下查看大于1的即可

user: user-3
content: 问题1） 1.1）程序不能分析自身，如果32Bits程序，整个空间不足4G，计算就不准确了。 1.2）不能分析动态数据，前面计算过了，他后面就给你改了，计算就不准确了。 你要确保不会出现以上两种情况，那么是可以的。否则不能统计准确。 问题2） 开 2^32/4字节的内存，每个数据对应2Bits初始化为0 ，对每个数，对应位置的2Bits 自增，超过2等于2. 最后数数，输出等于2的位置。
user-0 提问: STL源码中的 obj * volatile * my_free_list  是什么意思啊

回复:
user: user-1
content: 引用 3 楼 supermegaboy 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 等价于volatile obj **my_free_list？  连指针基础都未过关[/quote] 不然我后面为啥加“？”

user: user-0
content: 找到答案了哈。  这个声明原来的形式是：obj** my_free_list，这样的话*my_free_list（空闲的内存块指针数组中的一个元素）可能被优化到寄存器中，从而使库代码无法lock住对它的读调用（如果在寄存器中则另一个线程可能会无意中修改该寄存器的值，而在内存中由于另一个线程没有访问权力所以不能修改）。 要声明变量必须在内存中就要用volatile修饰，这里修饰的是*my_free_list，是free_list数组中的一个元素，而不是数组指针，所以volatile放在两个*中间。

user: user-2
content: 引用 4 楼 u011317643 的回复:[quote=引用 3 楼 supermegaboy 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 等价于volatile obj **my_free_list？  连指针基础都未过关[/quote]  你觉得应该怎么理解啊？[/quote]  偶把这个问题交给1楼的未定义行为大师回答。

user: user-0
content: 引用 3 楼 supermegaboy 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 等价于volatile obj **my_free_list？  连指针基础都未过关[/quote]  你觉得应该怎么理解啊？

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:等价于volatile obj **my_free_list？  连指针基础都未过关

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:等价于volatile obj **my_free_list？  有可能，但是不确定是不是这个意思

user: user-1
content: 等价于volatile obj **my_free_list？
user-0 提问: 变量分配内存的时机

回复:
user: user-1
content: 只在寄存器中有个名字 而没有具体指定这个栈中变量的具体位置! 当初始化的时候才确定这个名字的变量在哪段内存中存放~

user: user-2
content: 全局量是在main之前就初始化的~

user: user-3
content: 虽然不知道你们在说些什么，但感觉好厉害的样子。

user: user-4
content: 1）地址和内存分配： 1.1）外部变量，和静态变量，编译后地址就是确定的。      ----生成的代码里，只是有个表，列出变量和地址的对应关系。---      程序加载时，分配内存。 1.2）函数局部变量，有 函数参数，和内部定义的变量两种。    函数参数，是编译时确定地址的相对位置，和初始化代码。    函数调用时，分配内存。        函数内部定义的变量有三种，    其中局部静态变量，是一种静态变量，按照静态变量的方式，分配内存，并初始化。                              函数内部定义的自动变量，寄存器变量        编译时确定地址的相对位置，或者寄存器，和初始化代码。     函数调用时，分配内存，或者寄存器，并初始化。    ---有可能用到才会分配内存，并初始化。---     2）初始化 2.1）C外部变量，和静态变量，初始化一般是在加载时初始化的。           C++ 外部变量，和静态变量初始化，有些是在加载时初始化的，     有些初始化代码里初始化的，函数内部的局部静态变量，     可能是在,函数第一次运行时初始化的。  2.2) 函数参数,参数传递时，初始化      函数内部定义的， 自动变量，寄存器变量，函数调用时，代码运行中，初始化。      C代码里没有初始化,不会初始化。      C++ 类对象，没有显式初始化的，可能也会初始化。

user: user-5
content: 楼主你也说了是只申明的，但是你打印人家的地址什么的不是使用这个变量了吗？有地址很奇怪吗？你想验证你的说法，看下面程序  #include <stdio.h>  int main() { 	int a; 	int b; 	int c; 	printf("%0x\n",&a); 	printf("%0x\n",&b);			//屏蔽掉这句试试  	printf("%0x\n",&c); 	return 0; }  全局变量是要你申明了就一定会占用内存； 局部变量的话，编译器可能会做优化，对未使用的变量不分配空间 对于外部变量的话空间是分配了的，只不过你申明的时候不会另外分配空间而已（只是引用源文件中变量的地址）也许这个对你有点用http://blog.csdn.net/z1179675084/article/details/8331952

user: user-6
content: 不同的语言，不同的环境对这句话的理解也是不同的。  单纯从C语言和目前大多数的开发执行环境下，你的理解是完全没有问题的，这句话也是不确切的。  另外，顺便顶一下5楼。

user: user-4
content: ----函数作用域静态函数--- 应为 ---函数作用域静态变量。

user: user-4
content: C，C++全局变量和静态变量，是在程序加载的时候分配空间的。 C全局变量和静态变量，是在程序加载的时候初始化的。 C++，全局变量，有些加载时候，有些是在程序初始化的时候。  C++静态变量，有些程序加载的时候分配空间的，有些是在程序初始化的时候，有些---函数作用域静态函数---可能是在函数的第一次调用的时候，初始化的， 而 函数参数是在，参数传递时定义空间和初始化的。  函数的局部自动变量和寄存器变量，是在函数的运行时，分配空间和初始化的，  自动变量的相对位置（相对偏移量），是在编译时确定的，寄存器变量是存储在那个寄存器中，还是当作自动变量处理，也是编译时就决定了的。

user: user-7
content: 楼主可以具体看下声明和定义的区别. 相信看完就懂了·！~

user: user-8
content: 引用 楼主 lgbxyz 的回复:有下面这样一句话,大家看看有没有问题  很多时候一个变量，只是声明不分配内存空间，直到具体使用时才初始化，分配内存空间，如外部变量。  我知道 外部变量就是别的文件中定义的全局变量,全局变量在程序编译时已经完成赋值.  那么 完成编译时都完成赋值了,还可能没有分配空间吗? 在vs2008试了一下申请一个全局变量,刚进入main函数这个全局变量就有值,能取到地址。 Linux下也是一样。  "很多时候一个变量，只是声明不分配内存空间，直到具体使用时才初始化"这个使用是指变量区别于定义的时候分配空间和使用时分配空间，使用不是指运行

user: user-9
content: 小伙子,你的想法是正确的

user: user-10
content: 有个技术叫写时拷贝，有点楼主说的这个意思 全局变量是在main函数之前初始化
user-0 提问: 浙大ACM1002  为什么一直编译错误。。。。

回复:
user: user-0
content: 多谢啦~用了C++就编译过去了，不过还是有一些小错误，现在发一下AC了的，再次感谢各位哈~ #include<stdio.h> #include<stdbool.h> void fun (int n,int depth); bool fun_find(int i,int j,int n);  int num=0; int max=0; char map[4][4]; int main(void){  int n; scanf("%d",&n); while(n!=0){ 	for(int i=0;i<n*n;i++) 	scanf(" %c",&map[i/n][i%n]); 	fun(n,0); 	printf("%d\n",max); 	scanf("%d",&n); 	max=0; }	 return 0;	   } void fun (int n,int depth){ if(num>max)max=num; if(depth>=n*n)return ; int i=depth/n,j=depth%n; if(fun_find(i,j,n)) { map[i][j]='o'; num+=1; fun(n,depth+1); map[i][j]='.'; num-=1; } fun(n,depth+1);    } bool fun_find(int i,int j,int n){ if(map[i][j]!='.') return false; for(int a=i-1;a>=0;a--){ if(map[a][j]=='o') return false; if(map[a][j]=='x'||map[a][j]=='X') break; }  for(int c=j-1;c>=0;c--){ if(map[i][c]=='o') return false; if(map[i][c]=='x'||map[i][c]=='X') break; }  return true;  }

user: user-1
content: 看到底下标签是C就觉得那啥啥了，选C++吧少年

user: user-2
content: LZ程序要选C++编译。

user: user-3
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-4
content: 编译错误，按提示修改
user-0 提问: 求教，关于栈的操作

回复:
user: user-1
content: 就是楼上两位说的问题！

user: user-2
content: 1，S->top没有初始化 2，int Pop(stackseq *S) {   if(S->top==-1)      { printf("underflow");        return 0;      }    else      {S->top--;//错了       return S->data[S->top+1];//      }

user: user-3
content: top没有初始化
user-0 提问: 推荐学习C语言的书籍

回复:
user: user-1
content: 学习中，谢谢推荐！

user: user-2
content: 学习 了

user: user-3
content: 引用 2 楼 max_min_ 的回复:好好消化下面这基本数，按顺序来！第一本好好啃下，里面的例程有时间的话都敲敲 c和指针 http://download.csdn.net/detail/max_min_/6333711 c陷阱和缺陷 http://download.csdn.net/detail/max_min_/6333741 c语言程序设计 http://download.csdn.net/detail/max_min_/6333663 c专家编程 http://download.csdn.net/detail/max_min_/6333785 c和指针这本书没有学过汇编和其他语言看得懂么？我怕打击信心。

user: user-4
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm

user: user-5
content: 2L基本列出了。只要这几本认真看过两三本，按说在语法层面上，是不会有问题的。

user: user-6
content: c语言圣经 the c programming Language

user: user-7
content: 重要是边看边练··！~

user: user-8
content: 仔细看 the c programming Language 如果觉得哪方面需要加强，在看相应的书籍

user: user-9
content: 引用 5 楼 wangdahu888 的回复:当属<<C primer plus>> 楼主才大二吧，上面那些书都是很好的，但是你还是应该把这本书显好好看看，一步步慢慢来。

user: user-10
content: 当属<<C primer plus>>

user: user-11
content: 引用 2 楼 max_min_ 的回复:好好消化下面这基本数，按顺序来！第一本好好啃下，里面的例程有时间的话都敲敲 c和指针 http://download.csdn.net/detail/max_min_/6333711 c陷阱和缺陷 http://download.csdn.net/detail/max_min_/6333741 c语言程序设计 http://download.csdn.net/detail/max_min_/6333663 c专家编程 http://download.csdn.net/detail/max_min_/6333785

user: user-12
content: c语言程序设计  这本书先看吧

user: user-13
content: 好好消化下面这基本数，按顺序来！第一本好好啃下，里面的例程有时间的话都敲敲 c和指针 http://download.csdn.net/detail/max_min_/6333711 c陷阱和缺陷 http://download.csdn.net/detail/max_min_/6333741 c语言程序设计 http://download.csdn.net/detail/max_min_/6333663 c专家编程 http://download.csdn.net/detail/max_min_/6333785

user: user-14
content: C程序设计语言 C标准库 C和指针 陈正冲 石虎 C语言深度剖析 俞甲子 石凡 潘爱民 程序员的自我修养 Uinx 环境高级编程 深入理解计算机体系机构 C语言的495个问题 C陷阱与缺陷
user-0 提问: linux内核源码编译错误

回复:
user: user-1
content: 哎呀，真巧，前两天刚遇上，要重新配置下kernel，具体： 1) Select “Enable loadable module support”, then “Module signature verification (EXPERIMENTAL)”. Disable it. 2) Then go back to the main menu, select “Cryptographic API” then “In-kernel signature checker (EXPERIMENTAL)” and disable that one too.

user: user-0
content: 换9.04的系统 问题依旧 换12.04的系统 问题解决

user: user-0
content: 编译linux2.6.28内核 没其它东西

user: user-2
content: 你的脚本语言可能有语法错误。 你的系统里是不是有/bin/sh，然后看看其它行是不是有错误

user: user-3
content: makefile 设置了内核 make -C 跳到内核源码执行 make的路径写对了吗 最外层的那个make
user-0 提问: 紧急求助！有懂盘点机（品牌、开发）的吗？？？

回复:
user: user-1
content: 需要根据你应用的场合，你的需求来购买合适的盘点机。因为盘点机硬件搭配不同，价格不同。可以根据具体使用情况来选择最合适的。国外的普遍比较贵，使用起来其实并不一定适合中国人的习惯，但是国外的质量确实不错。 国内的普遍比较便宜，那比起国外的不是一般的便宜，其实功能也很够用，盘点机其实就几个比较重要的部位：扫描头质量，WIFI质量。所以只要这两项质量OK，基本上整机质量还是没问题的。 再一个就是看盘点机的驱动是否方便使用。 软件开发使用技术也是千差万别。有的很落后的使用读写TXT，高级点的使用读写本地数据库，再高级点的利用TCP与服务器后台通信。而我们就使用微软最新的WCF技术，通信速度快，稳定，安全，程序开发效率高。 下载一般都是用C#语言进行开发，但是很多人开发出来的程序，运行效率低，卡，崩溃，死机，不稳定。 上层应用程序卡，慢，死机，有可能跟上层应用程序有关，也可能跟盘点机的驱动和系统有关。 盘点机的系统是可以裁剪的，如果系统裁剪少，系统占用的内存多，那么跑上层应用程序就会相对要慢，要卡一点。 如果系统裁剪的好，系统占用内存小，那么就会让出更多的内存跑上层应用程序，那么上层应用程序就会跑起来会快，稳定，效率高。所以选择一款好的盘点机需要从硬件到软件多方面来分析。 如果有需要可以联系我。

user: user-2
content: 不懂  假如我遇到这个问题  我的思考如下    盘点机不就是条形码识别之类的东西吗 一个物资管理系统 C C++都其他语言都能写 一个识别条形码的程序 API 人家做好的 或者自己开发 原理把一些点存在二维空间 按一定的数学排列 解析二维空间的数学排序 得出特定的信息
user-0 提问: 求个小程序 

回复:
user: user-0
content: 引用 1 楼 stereoMatching 的回复: int hour, min, sec, command;     sscanf(strs.c_str(), "%d:%d:%d+%d", &info.wHour, &info.wMinute, &info.wSecond, &command); 太简单了 我怎么没想到这么写 2分钟就搞定了

user: user-1
content: char const *strs = "0:15:24+1"; sscanf(strs, "%d:%d:%d+%d", &info.wHour, &info.wMinute, &info.wSecond, &command);   忘了删除多余的代码 想要更快的速度可考虑boost::spirit

user: user-2
content: char数组转CString再取子串

user: user-1
content: int hour, min, sec, command;     sscanf(strs.c_str(), "%d:%d:%d+%d", &info.wHour, &info.wMinute, &info.wSecond, &command);
user-0 提问: 关于malloc（）的实现

回复:
user: user-0
content: 引用 6 楼 z1179675084 的回复:楼主像u-boot了，内核之类的东西一个函数可能有多个的，多找几个啊 仔细找过了，source insight找过，linuxe下grep命令找过，没找着，感到很奇怪，我在怀疑是不是他将malloc定义成一个宏定义，指向别的函数。不如你帮我试试找找

user: user-1
content: 引用 7 楼 realbank 的回复:[quote=引用 6 楼 z1179675084 的回复:] 楼主像u-boot了，内核之类的东西一个函数可能有多个的，多找几个啊 仔细找过了，source insight找过，linuxe下grep命令找过，没找着，感到很奇怪，我在怀疑是不是他将malloc定义成一个宏定义，指向别的函数。不如你帮我试试找找[/quote] http://wuxizazhi.cnki.net/Search/DNBC200922011.html

user: user-2
content: 此处并没有去真正的申请内存，只是形象的让人好理解而已。 一般的，我们写代码时是不是要 将结构体初始化啊，结构体指针 申请内存啊，以便后面的操作。 这里写成这样 就是告诉你已经初始化了，可以操作了。

user: user-1
content: 楼主像u-boot了，内核之类的东西一个函数可能有多个的，多找几个啊

user: user-2
content: 注意你看的是u-boot 的源码。

user: user-3
content: 先google 篇文章看看 malloce 的设计思想

user: user-4
content: 这个可以参考下 http://blog.csdn.net/lxmky/article/details/6909060

user: user-5
content: 这个才是malloc的源码。   void *malloc (unsigned int size)   {       char *caddr;          if (!malloc_ptr)           return NULL;       if ((malloc_ptr + size + sizeof(int)) > malloc_top) {           prom_printf("malloc failed\n");           return NULL;       }       *(int *)malloc_ptr = size;       caddr = malloc_ptr + sizeof(int);       malloc_ptr += size + sizeof(int);       last_alloc = caddr;       malloc_ptr = (char *) ((((unsigned int) malloc_ptr) + 3) & (~3));       return caddr;   }

user: user-6
content: 这个应该不是吧！ 看看这个 http://bbs.csdn.net/topics/280055567
user-0 提问: 关于mysql多线程访问串行与并行的问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:1. InitConnection (4);          //初始化连接池，放入4个mysql句柄 for(int i=0;i<4;i++) { mysql = GetConnection ();  //获取一个MYSQL句柄 Insert (mysql ,"insert children values(6,'yantai',40)"); //执行插入 } 没用过这个库。判断是否为串行，就用一个慢速查询语句，很快返回的就是并发执行。 另外就是看返回的方式，如果是并发执行（异步）则要回调函数来获取返回结果，一般比较少见。 所以假设为串行（同步）。  2.InitConnection (4);     for(int i=0; i<4;i ++) { mysql = GetConnection (); for( int i = 0; i < 5; i ++) { pthread_create(&thread_id [i], NULL, Testinsert ,mysql); } for(int i = 0; i <  5; i ++) { pthread_join(thread_id [i], NULL); } }         那么这四个连接是并行还是串行？四个连接并行？四个连接并行五次？ 如果是串行（同步），这么做可能不安全，一般是一个线程一个数据库连接。  3.InitConnection (4);     for(int i=0; i<1;i ++) { mysql = GetConnection (); for( int i = 0; i < 1; i ++) { pthread_create(&thread_id [i], NULL, Testinsert ,mysql); } for(int i = 0; i <  1; i ++) { pthread_join(thread_id [i], NULL); } }         这应该是4个连接并行一次，这和第一个程序有区别么？ 这个不是并行，原因是大循环里包含了pthread_join，它会等子线程执行完成在继续循环。 应该这样： InitConnection (4);     for(int i=0; i<4;i++){   mysql = GetConnection ();   pthread_create(&thread_id[i], NULL, Testinsert ,mysql); } for(int i = 0; i < 4; i++){   pthread_join(thread_id[i], NULL); } 嗯，谢谢你的回答。非常感谢。

user: user-1
content: 1. InitConnection (4);          //初始化连接池，放入4个mysql句柄 for(int i=0;i<4;i++) { mysql = GetConnection ();  //获取一个MYSQL句柄 Insert (mysql ,"insert children values(6,'yantai',40)"); //执行插入 } 没用过这个库。判断是否为串行，就用一个慢速查询语句，很快返回的就是并发执行。 另外就是看返回的方式，如果是并发执行（异步）则要回调函数来获取返回结果，一般比较少见。 所以假设为串行（同步）。  2.InitConnection (4);     for(int i=0; i<4;i ++) { mysql = GetConnection (); for( int i = 0; i < 5; i ++) { pthread_create(&thread_id [i], NULL, Testinsert ,mysql); } for(int i = 0; i <  5; i ++) { pthread_join(thread_id [i], NULL); } }         那么这四个连接是并行还是串行？四个连接并行？四个连接并行五次？ 如果是串行（同步），这么做可能不安全，一般是一个线程一个数据库连接。  3.InitConnection (4);     for(int i=0; i<1;i ++) { mysql = GetConnection (); for( int i = 0; i < 1; i ++) { pthread_create(&thread_id [i], NULL, Testinsert ,mysql); } for(int i = 0; i <  1; i ++) { pthread_join(thread_id [i], NULL); } }         这应该是4个连接并行一次，这和第一个程序有区别么？ 这个不是并行，原因是大循环里包含了pthread_join，它会等子线程执行完成在继续循环。 应该这样： InitConnection (4);     for(int i=0; i<4;i++){   mysql = GetConnection ();   pthread_create(&thread_id[i], NULL, Testinsert ,mysql); } for(int i = 0; i < 4; i++){   pthread_join(thread_id[i], NULL); }
user-0 提问: 有序连表的归并

回复:
user: user-1
content: http://bbs.csdn.net/topics/390335073

user: user-2
content: http://wenku.baidu.com/view/dd566809f78a6529647d53aa.html

user: user-3
content: 你写的程序太乱了 错误百出 实在调不起 List 你typedef这个类型了吗  你就用List  你这个函数是这样声明的 void Mergelist(List La,List Lb,List &Lc){ 你却这样调用 Mergelist(La,Lb);  你自己慢慢调试 吧 用#if 0 和#endif 注释掉Mergelist函数 慢慢调 在注释掉main函数里面的一句句来过 就算我帮你这次下次呢
user-0 提问: 求大神推荐c语言嵌入式的视频教程或者书籍，还有c语言系统编程的书籍或者视频

回复:
user: user-1
content: 1，C++钱能的教材，李春葆的教程 2，至于C++视频教程，就用C++教程网的视频吧，他们还提供下载，我看过，还不错

user: user-0
content: 843172966@qq.com

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-3
content: 留下你的邮箱 我有很多资料 直接给你发过去 嵌入式方面的知识实在太多 太杂  东西都在我电脑里
user-0 提问: 两个一元多项式相加输出总出问题

回复:
user: user-0
content: 我知道哪里错了，谢谢你！

user: user-0
content: /* main2-7.c 检验bo2-7.c的主程序 */  #include"c1.h"  #include"c2-6.h"  #include"bo2-7.c"  void main()  {    polynomial p,q;    int m;    fflash(stdin);     printf("请输入第1个一元多项式的非零项的个数：");    scanf("%d",&m);    CreatPolyn(&p,m);    printf("请输入第2个一元多项式的非零项的个数：");    scanf("%d",&m);    CreatPolyn(&q,m);    AddPolyn(&p,&q);    printf("2个一元多项式相加的结果：\n");    PrintPolyn(p);    printf("请输入第3个一元多项式的非零项的个数：");    scanf("%d",&m);    CreatPolyn(&q,m);    AddPolyn1(&p,&q);    printf("2个一元多项式相加的结果(另一种方法)：\n");    PrintPolyn(p);     DestroyPolyn(&p);  }哪里有问题？

user: user-1
content: 看main函数中输入钱是否fflash(stdin);
user-0 提问: linux c socket读取问题，我实在是搞不明白了。

回复:
user: user-0
content: 非常谢谢。  但是如果我直接c_recv_len==-1，这样判断，它又可以

user: user-1
content: size_t 是无符号数，无符号数没有 -1，和 -1 的二进制内容相同的值是 0xffffffff, 4294967295 这个数是大于 0 的。
user-0 提问: 请问c语言能编写操作系统引导程序吗？

回复:
user: user-1
content: 引用 4 楼 zjq9931 的回复:可以得，参见：30天自制操作系统。 《30天自制操作系统》

user: user-2
content: 楼主可以下载一个u-boot源码看看，比较不错的bootloader 不过当然了，汇编和c肯定都有的，用什么汇编就看你用在什么架构上了 bootloader也可以是一个小型系统，可能比你想像中要强大一些 如果想针对某一款cpu写一个引导某一款os的bootloader，估计比较简单 楼主可以自己写一个，主要是不需要考虑移植性，加油哦

user: user-3
content: 引用 10 楼 super_admi 的回复:其实楼主问错问题了，你应该问：C语言不能写什么？  这个才是真会C语言的人

user: user-0
content: 那现在的c语言难道就不能调用bios中断吗？那些还原系统都是用什么语言编写的？《30天自制操作系统》 这本书我在今年的夏天在书店看到，当时看的我是热血沸腾，想买，可后来一想我的汇编8086学的不扎实，跟这本书的作者水平差一大截呢，所以也就没有买。请问下高手操作系统的引导程序原理是不是都是一样的？代码固定不变的。另外我想问下bios系统选择加载驱动器后，后面又做了那些工作才进入的操作系统自检程序？

user: user-4
content: 理论上可以但不合适，实际都是用汇编

user: user-5
content: 已经有人说了grub之类的东西，LZ可有去看？

user: user-6
content: 用c语言嵌入汇编，毕竟，像int 18这种指令，要自己写才行，呵呵呵  你要恢复系统，只能尽量往前，在mbr，嵌入自己程序，就像病毒一样

user: user-7
content: 这个书不是国人写的，是日本一个少年写的

user: user-8
content: 引用 13 楼 zhao4zhong1 的回复:[quote=引用 12 楼 king_2007 的回复:] 都说能写，具体的代码呢？我都不知道你们的依据是什么？我说的都是针对x86电脑，请问下如果不依赖操作系统，那么能编写开机启动自检后编写窗体吗？另外我想知道如何控制启动计算机的顺序？如何获取硬盘或者处理器的权限？ 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… [/quote]11年刚学编程的时候就看到这窜东西了= =自己写过一个arm板子的bootloader...要汇编+一点硬件知识...x86架构没写过...国人好像就出过类似的一本书,楼上说了,叫30天什么来着

user: user-1
content: 引用 12 楼 king_2007 的回复:都说能写，具体的代码呢？我都不知道你们的依据是什么？我说的都是针对x86电脑，请问下如果不依赖操作系统，那么能编写开机启动自检后编写窗体吗？另外我想知道如何控制启动计算机的顺序？如何获取硬盘或者处理器的权限？ 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-9
content: 其实楼主问错问题了，你应该问：C语言不能写什么？  然后，我就可以回答： 1.不能写美女肉体； 2.。。。

user: user-10
content: 引用 楼主 king_2007 的回复:请问c语言能编写操作系统引导程序吗？另外我想一开机自检后就进入一个菜单界面该如何编写？用汇编还是c语言？有源代码就更好了。 两者都可以，参考grub或LILO

user: user-0
content: 都说能写，具体的代码呢？我都不知道你们的依据是什么？我说的都是针对x86电脑，请问下如果不依赖操作系统，那么能编写开机启动自检后编写窗体吗？另外我想知道如何控制启动计算机的顺序？如何获取硬盘或者处理器的权限？

user: user-11
content: x86还是arm？

user: user-1
content: 用汇编

user: user-12
content: 引用 1 楼 u011779875 的回复:系统引导程序 你知道是什么  加载cpu的 rom 里面的8k程序 ，启动boot程序 初始化内存 初始化硬盘 把启动代码拷贝到内存 加载操作系统 boot实现 这里面的东西太多了 不是你想写就能写得 再说必然会用到汇编啊 这个东西是人家厂商做好的 是在实现了读驱动 和写驱动 及读内存和写内存写好的汇编 之上设计的  不是说你想盖楼 就能盖的至少得有砖块吧 +1

user: user-0
content: 是不是所有的还原系统的软件都的调用硬盘中断呢？请问如果有的话，哪里可以查找相关的硬盘中断资料呢？

user: user-0
content: 请问，编写引导程序不依托操作系统可以吗？哪些编写还原软件是不是都是依赖操作系统呢？难道不是靠调用bois中断吗？请问哪里有下载引导程序的源代码的地方？那些还原软件在系统崩溃或者损坏的情况下在重启系统的时候是如何调用系统资源的？

user: user-13
content: C语言的底层实现 是汇编写的驱动 底层API 又叫系统级的编程  比如内核中的printk等函数  不可能完全用C实现来实现  你要写引导程序 你启动的时候连标准库什么的你都已经用不了了 你必须自己用手写汇编 或者C嵌入汇编写 那些串口等读写的驱动 你还得把你写的程序down到电脑固定的硬盘上  有源代码啊 windows的 你可能很难找到 但是linux和Unix很多 linux内核详解  教你写操作系统 什么磁盘管理啊 内存管理 和IO 文件系统  乱七八糟  最后有教你如何写引导

user: user-14
content: 可以得，参见：30天自制操作系统。
user-0 提问: 关于字符串的问题

回复:
user: user-0
content: 谢谢啦，我试试

user: user-1
content: #include<stdio.h> #include<string.h>  int main(void) { 	char a[100], b[100]; 	int i, k, n; 	scanf("%s", a); 	n = strlen(a); 	for(i = 0; i < n; i++) 	{ 		if (a[i] != ',') 		{ 			b[i] = a[i]; 		} 	} 	b[i] = 0;    //这儿需要加上字符串结束标识符哦 	printf("%s\n", b);    //这儿应该就是去掉","之后的字符串哦 }

user: user-2
content: for(i=0,j=0;i<n;i++)  {if(a[i]!=',')  {b[j]=a[i];     j++; }  }

user: user-3
content: b没有初始化，所有b[1]可能0    //输入"1,111"  for(i=0;i<n;i++)  {if(a[i]!=',')  {    b[i]=a[i];  }  //else ??

user: user-3
content: #include<string.h> #include<stdio.h>  int main() {  char a[100],b[100],*p; p = b; int i,n; scanf("%99s",a); n=strlen(a); for(i=0;i<n;i++)  {    if(a[i] != ',')    {      *p++ = a[i];    }  }  *p = 0;   printf("%s\n",b);  return 0; }

user: user-3
content: #include<string.h> #include<stdio.h>  int main() {  char a[100],b[100],*p; p = b; int i; scanf("%99s",a); n=strlen(a); for(i=0;i<n;i++)  {    if(a[i] != ',')    {      *p++ = a[i];    }  }  *p = 0;   printf("%s\n",b);  return 0; }  格式化，缩进
user-0 提问: 关于AOV网的拓扑排序

回复:
user: user-0
content: 请看下三楼，有什么合适的方法解决吗？谢谢。

user: user-0
content: 引用 1 楼 user-1 的回复:连数个数都是#P-Complete的。别想了硬搜吧。 好吧，其实我问这个问题是想解决另外一个。关于教学计划安排，因为有学分的限制，只找一种拓扑排序好像不行吧？ 附图

user: user-1
content: 连数个数都是#P-Complete的。别想了硬搜吧。
user-0 提问: 二叉树的非递归后序遍历遇到的问题？只能访问叶子节点？！

回复:
user: user-0
content: 哈哈，问题解决了！   原来问题出在43行和52行左右，应该在43行的后面加上一句s.Push(*cur);并且在52行的后面加上一句s.Pop(&cur);。这样问题就解决了。按照我以前的写法会造成上一层的根节点被释放，无法留在栈中。所以只能输出最下一层的叶子节点。

user: user-1
content: 1. pre无用且有错 2. s.Pop(&cur); 后面进入else分支,还要重新push进去

user: user-0
content: 补充一下，46行和53行都是我在调试的时候写的，没别的用途。
user-0 提问: 数据采集后 过滤的问题

回复:
user: user-0
content: 引用 2 楼 u011779875 的回复:总有一种过滤方法适合你 http://blog.csdn.net/jungsagacity/article/details/7398338 谢谢 ~

user: user-1
content: 总有一种过滤方法适合你 http://blog.csdn.net/jungsagacity/article/details/7398338

user: user-1
content: 这要看趋势了 这个值如果是连续的 且开始与结束的时间很短 而正常取值的时候值很多 那么就好办了取这些值中出现最多的那个值 在取这个值中与最多值偏差为很小的值 在进行取平均值 如果开始 和正常 和结束它们都很短的话 那就需要考虑去掉一些特点值后在进行取平均值
user-0 提问: 大数

回复:
user: user-1
content: 仅供参考#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110
user-0 提问: C语言#define和const问题

回复:
user: user-1
content: const在c++中是常量, 在c中是readonly的变量. 因此在c中要求输入常量的地方不能用const变量, c++中就没有问题

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

user: user-3
content: 引用 9 楼 worldy 的回复:const int LIM = 3;  	static int data1[LIM*2];   也是没有问题 C++可以 因为对C++来说 LIM是常量  C不行 因为对C来说 LIM*2是变量 对应VLA 而VLA 不允许static

user: user-4
content: 引用 9 楼 worldy 的回复:const int LIM = 3;  	static int data1[LIM*2];   也是没有问题 你是用的C++的编译器吧

user: user-5
content: const int LIM = 3;  	static int data1[LIM*2];   也是没有问题

user: user-5
content: #define  COUNT 3 static int a[COUNT];   vs2008下没有问题，估计你是设置了什么编译选项了

user: user-3
content: 引用 6 楼 wangdahu888 的回复:const变量在C++是编译期常量，在C中是运行时的常量。所以以下代码在C++中能编译通过。在C中不行。  const int LEN = 100; char str[LEN + 1];  C中也行 VLA 不是全局变量不是static 没初始化的时候 可以那样写 吧const去掉都可以

user: user-4
content: const变量在C++是编译期常量，在C中是运行时的常量。所以以下代码在C++中能编译通过。在C中不行。  const int LEN = 100; char str[LEN + 1];

user: user-6
content: 比如 const int LIM = 3; 只要这样一些 int（LIM）这个值貌似就可以改变了 所以编译器认为这种结果是无定义的 是不可预测的

user: user-3
content: static int data2[LIM]={1,2,3}; 不合法是因为 VLA 要求不能初始化 不是static  2个禁忌都犯了  const int LIM3 = 2 * LIM; 不合法是const初始化 需要常量  LIM不是常量  LIM是一个左值

user: user-3
content: 哪一版的C primer plus ??

user: user-6
content: static int data2[LIM];//  不合法是因为当声明一个数组的时候，要求数组的长度是一个常量； 虽然可以用const来定义一个变量，使得它的值不被改变。但是，改变量也不能变成一个常量。

user: user-7
content: 坚决消灭令恢复。
user-0 提问: c语言在vc6.0中如何建立自己的函数库

回复:
user: user-0
content: 嗯，同学也是这么建议的。谢谢啊！

user: user-1
content: 先保存为源代码：   对函数分类，存入相应的 .c 文件，并为其编写相应的 .h文件，

user: user-2
content: 维护或发布一个函数库不如维护或发布一组源代码。

user: user-0
content: 可以再详细点吗？谢谢了！求原谅，

user: user-0
content: 表示不懂，不过谢谢了。

user: user-3
content: 直接编译成静态库或动态库就行了 顺便说下,都快vs2013了,还用vc6.0呢,赶紧换vs2012吧
user-0 提问: 关于getch（）函数头文件的问题.

回复:
user: user-1
content: 不太可能不需要头文件的，有可能是被别的头文件间接包含了。 话说，getch()好像还不是标准库函数呢。。。

user: user-2
content: “编译无错”、“链接无错”、“运行结果看上去无错”和“运行结果实际上无错”不是一回事！

user: user-3
content: 看是什么版本的编辑器决定了 在程序中使用函数之前 必须先对它进行声明。最简单的方法是把一个头文件包含都程序中 该文件声明了某种类别的所有库函数，头文件可以定义任何相关类型定义和宏。头文件与函数本身都是库的组成部分。 理论上 凡是标准库都需要加头文件，一个标准库的实现 有时候是不会让一个标准库 包含已实现标准库的头文件的  这样实现是总会有纰漏和问题的。 标准头文件 以下就这些 分别处理一些类似功能的集合 <assert.h> <ctype.h> <errno.h> <float.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdarg.h> <stddef.h> <stdio.h> <stdlib.h> <string.h> <time.h>

user: user-4
content: getch()好像必须要写头文件吧？ getch()还不行，必须是_getch()，才可以。 楼主不会说的是getchar()吧？这两个是很不同的。
user-0 提问: 关于FOR循环的执行顺序

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:1->2->A->3 // 第一次循环  ->2->A->3 循环下去，直到不满足2这个条件了~ 最后的验证方法， 单步调试，看看那每次执行的位置！  谢谢了。。

user: user-1
content: 1->2->A->3 // 第一次循环  ->2->A->3 循环下去，直到不满足2这个条件了~ 最后的验证方法， 单步调试，看看那每次执行的位置！
user-0 提问: C语言的书都快翻烂了，但还是有许多疑问，希望前辈们解答一下！！！

回复:
user: user-1
content: 我个人觉得，楼主之所以迷茫于C语言，是因为你还没看清楚C语言的本质。 在此，我个人发表一点自己的拙见。  1.C语言是什么？ “C语言”这个词语，核心是“语言”两个字，“C”是用来修饰语言的。那么，什么是语言，估计大家都明白，不过真要究其本质，可能大家又都不明白了。我的看法是，语言是一种工具，一种手段，一种用来沟通两个独立对象的手段。语言的重点，在于“沟通”两个字。所以，C语言只是你和计算机交流的一种手段。那么，有人要说了，你点点鼠标，敲几个命令，不也是和计算机交流么？我想说的是，这是不一样的。点鼠标，敲命令，是按规定好的方式，做固定的交流，具有很大的局限性。比如上课的时候，老师说：上课，然后大家起立，说“老师好”，坐下。这算得上说老师和学生真正意义上的交流么？  2.C语言是简单的。 C语言就其本身来说，是很简单的，就那几十个（教科书上通常说的是32个）关键字，包含了一些基本数据类型和操作，一些流程控制指令，再加个复合数据类型，函数，完了。C语言没有太多的很复杂的规则，是很自由的。  3.C语言是复杂的。 说C语言复杂，其实是人太复杂，这个世界太复杂，因为这个世界有太多的变数。 C语言的复杂，我个人认为，主要体现在两个方面： 1）逻辑实现的复杂。 因为我们的需求是很复杂的，而C语言的规则又很简单。用简单的规则来描叙复杂的需求，那么我们必然有一个复杂的规则建立过程，最后也会得到一套复杂的逻辑规则。 2）C语言描述的对象本身很复杂。 比如，用C语言来处理图像什么的，那么图像的存储，渲染，灰度，色彩......等等，都是很复杂的东西。用C语言来做游戏，游戏中的对象，也都是很复杂的。  4.C语言是抽象的 语言是什么？前面俺说了，他是一种手段，你可以用一些文字将其规则描述出来，但实际上，它始终是看不见，摸不着的。它不像一部手机，能实实在在摆在你的面前。C语言说白了，也就是一套规则。 当你有具体的应用时，比如将C语言运用于操作系统，那么你就需要了解操作系统的规则；将C语言运用于游戏，那么你就需要了解游戏的规则；... 说白了，语言和具体的应用，并没有直接的关联。你用C语言写游戏，写操作系统，别人用Z语言难道不行？最大的区别，可能是两套规则的融合程度不一样而已。C语言因为简单直接，所以和其它领域的规则融合都非常好。  5.你接下来的重点应该是什么？ 这在于你选择什么样的领域。

user: user-2
content: 现在在学objective－c，想做ios开发，之前c的基础没打好，所以现在在返工＝ ＝  OC就是介于C和C++之间，折腾起来纯属因为买了台macbook，太喜欢Xcode。 做游戏的话最好是对图形学有比较深的了解，类似OpenGL这种库，有建模基础的话会有一定帮助，至少知道怎么用。

user: user-3
content: 搜网络教程“学OpenGL编3D游戏”。

user: user-4
content: 召唤zhao4

user: user-5
content: 先C,再C++,然后汇编逆向,最后你会发现转到其他高级语言如j#,java,c#,vb之类的都是<30天精通某某高级语言>,但是比较原始的,比如lisp除外.

user: user-6
content: 不做项目 很难看出问题

user: user-7
content: 引用 2 楼 u011779875 的回复:我毕业4个月刚刚 学了DirectX 3D  Unity 3D opencv kinect tcp udp 串口通信 做游戏的话得需要一个类似Unity 3D的引擎 编写的语言是C#  JavaScript 脚本 我现在没事写个魔塔 还有太空飞机 还有坦克大战 如果是你自己开发游戏 你还需要会3Dmax  玛雅 这些建模工具 加上一套学习视频 照着一点点做 但是 游戏比较是游戏 它感觉已经脱离了计算机这个行业 做到最后也许只会是个工具开发  所以我现在除了上班 弄弄 还是踏踏实实写1年代码 看1年数据结构  学会如何快速掌握API 这样不论做什么 都会很快  毕业4个月就行了这么多，这是什么节奏啊

user: user-0
content: 希望可以往Linux方向发展！！通用性强点的！！

user: user-8
content: c语言较多用于偏底层一点的开发的，而且Linux下，大多数都是用的c语言开发来的！ c++多游戏引擎的开发了！c++比较复杂多化，慢慢来，切勿急躁！有毅力，坚持就好！ 建议：先把c++基础知识学好 c++  primer (这本基础，而且是c++经典，多看，多思考，几乎涵盖了c++所有的基础知识) 侯捷的c++标准库 设计模式，代码大全，重构这些看看！这些应该属于编程基础类的 后期就再看看游戏编程方面的书籍了：游戏编程入门，Windows游戏编程大师技巧等这些偏重点的了！ 一步一步来，打好前面的基础，才深入， 当然如果学习的同时，能够有相关项目开发可以实际锻炼能力的话，就更好了！这个成长的更快！

user: user-9
content: 游戏大体部分貌似都用c++，局部对性能要求特别高时才会用到c（更有可能直接汇编）。多看书，打好c++基础，再去做点项目实践，理论需要实践去认证，实践需要理论去指导。

user: user-10
content: 我毕业4个月刚刚 学了DirectX 3D  Unity 3D opencv kinect tcp udp 串口通信 做游戏的话得需要一个类似Unity 3D的引擎 编写的语言是C#  JavaScript 脚本 我现在没事写个魔塔 还有太空飞机 还有坦克大战 如果是你自己开发游戏 你还需要会3Dmax  玛雅 这些建模工具 加上一套学习视频 照着一点点做 但是 游戏比较是游戏 它感觉已经脱离了计算机这个行业 做到最后也许只会是个工具开发  所以我现在除了上班 弄弄 还是踏踏实实写1年代码 看1年数据结构  学会如何快速掌握API 这样不论做什么 都会很快

user: user-11
content: 别一下子就说想做游戏啊, 先打好linux开发基础, 找个工作先入入行.

user: user-12
content: 光翻书没多大用,做项目去实践才是王道!
user-0 提问: 左值和右值问题

回复:
user: user-1
content: 引用 3 楼 liuhongwei110 的回复:楼上要表达的应该是赋值语句“=”吧，左值必须是变量，如a = 8,是将8赋值给a，a必须能够储存8这个值，所以a必须是变量。而8 = a 是不行的。如果是关系表达式“==”的话，只是判断两者之间的关系，8 == a与 a == 8都是可以的。  如果是重载的== 应该不能写 8==a的形式吧 我经常是定义一个宏， #define Is ==  if(a Is 8) { }

user: user-2
content: 这个和左值，右值没有关系的吧！  只是一个判断符号的哦！ 至于真正的左值，右值问题，推荐个supermageboy的博客去看看 http://blog.csdn.net/code_crash/article/details/7038343

user: user-0
content: 引用因为%d 不能正确处理十六进制的输入  你应该用scanf("%i", &a); 你能给我讲讲那个第二个if的 判断过程不？

user: user-3
content: 引用 6 楼 C49556 的回复:那这个#include<stdio.h> main() { 		int a; 		scanf("%d",&a);                 if(a=0xA|a>12)          		if(011&10==a)printf("%d",a);          		else printf("r %d",a);                 else	                 printf("wrong"); }为甚么a输入0x14和输入20结果不同？ 因为%d 不能正确处理十六进制的输入  你应该用scanf("%i", &a);

user: user-0
content: 那这个#include<stdio.h> main() { 		int a; 		scanf("%d",&a);                 if(a=0xA|a>12)          		if(011&10==a)printf("%d",a);          		else printf("r %d",a);                 else	                 printf("wrong"); }为甚么a输入0x14和输入20结果不同？

user: user-3
content: 没区别 而且也和左值右值没关系

user: user-4
content: 两者是等价的,只能说,这是一个良好编程习惯.

user: user-5
content: 楼上要表达的应该是赋值语句“=”吧，左值必须是变量，如a = 8,是将8赋值给a，a必须能够储存8这个值，所以a必须是变量。而8 = a 是不行的。如果是关系表达式“==”的话，只是判断两者之间的关系，8 == a与 a == 8都是可以的。

user: user-6
content: 正确写法情况下是没有区别的。 但是a==8;和8==a，如果写错，比如写成，a=8,8=a， a=8这成这样，编译不会报错， 8=a写成这样，编译期间会报错，所以习惯上，我们一般会写成8==a,防止不小心少写了一个=号，这样编译器也会报错，从实际感受来说，当写代码时，确实容易这样犯错。

user: user-7
content: 把常数写在前面是防止写判断“==”时写成了“=”，那么前者不报错，后者报错。所以这是一个写程序的好习惯。

user: user-8
content: supermegaboy 的博客
user-0 提问: 结构体中的成员项的存储地址是连续的吗？

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

user: user-2
content: 是连续的，起码我们看到的虚拟地址是连续的哦。

user: user-3
content: 根据编译 和机器的不同 采取的对齐方式可能会有偏差 结果也会有一定出入  存在4字节对齐 和机器对齐吧 估计我已经忘了

user: user-4
content: 应该是尽量 但不是一定

user: user-5
content: 不保证连续

user: user-6
content: 这和结构对齐没什么关系吧, 结构Key本身是对齐的(4byte的指针和4byte的int), 就是指针偏移(指针步长)的问题.

user: user-7
content: 地址是连续的，但其中可能有因为对齐而插入的padding

user: user-8
content: 我实在不知道楼主的结果怎么来的！楼主你自己发明创造的吧  程序运行结果：  p=158,a=123  p=158,a=124  p=162,a=456  p还可能等于158,162？还能搞出158这么低的地址来这是低端内存，而你所有的东西是在栈空间的。另外万一中的万一p真的了158了，++p之后p就加4？这可是指针运算啊p + 1等价于（（unsigned int p） + sizeof (*p)）而sizeof（*p）是多大，还真不好说，默认情况下32位机应该为8,64位机上为16（至于为什么是8或16建议楼主查一下字节对齐）。但是无论任何情况下也不可能等于4。 至于你说a为什么是123和456，p指向了kd[0] p->kveno不就是对其取值吗？不是kd[0].kveno = 123吗？ a=++p->keyno 首先p指向了kd【1】.之后。。。 楼主基础真的很薄弱，不要崇拜什么大神！程序要多调多想，多练

user: user-9
content: p=kd；  相当于p指向了数组里面的第一个元素   a=p->keyno; 取出数组第一个元素里面的整型元素赋值给a，所以a=123    a=(++p)->keyno;指针指向数组里的第二个元素，取出第二个元素里的整型元素a，所以a=456 我用的是gcc编译器。。。p的结果和你的不一样。。

user: user-10
content: 因为涉及到对齐。所以地址加了8，当然就指向第二个结构体

user: user-11
content: 成员按照定义时的顺序依次存储在连续的内存空间。但并不是像数组那样的连续 struct stu3  　　{  　　char c1;//偏移量为0符合要求  　　int i;//偏移量为4， 结构体变量中成员的偏移量必须是成员大小的整数倍（0被认为是任何数的整数倍），  　　char c2;//偏移量为8（偏移量4+int大2小4），符合要求  　　}

user: user-10
content: p是地址 a=p->keyno; a是指向其中的成员 也就是第一个结构体的第二个成员也就是123

user: user-0
content: 没有大神解释一下吗？
user-0 提问: 数据结构 严蔚敏 直接插入排序问题

回复:
user: user-0
content: 太谢谢了，懂了！

user: user-0
content: 这个LT()在这儿具体代码是什么，我在数据结构源代码中没找到。 求大神帮忙！谢谢！

user: user-1
content: 从调用上看，是一个函数或一个宏

user: user-2
content: LT=lessthan LT(a,b)就是 C++的operator<(a,b); 即  a<b
user-0 提问: 求推荐算法视频！！！！

回复:
user: user-0
content: 引用 10 楼 wangdahu888 的回复:[quote=引用 9 楼 hacker_viking 的回复:] [quote=引用 8 楼 wangdahu888 的回复:] 这儿有个更好的演示;http://www.cnblogs.com/lazycoding/archive/2012/12/03/2800265.html 谢谢你哈，这个我有，我这次考试是分为C语言和数据结构，我现在是想要搞定C语言编程题这一块。[/quote] 那就找些难度级别低的ACM,做些吧,找找感觉[/quote] 好的，谢谢推荐。

user: user-1
content: 引用 9 楼 hacker_viking 的回复:[quote=引用 8 楼 wangdahu888 的回复:] 这儿有个更好的演示;http://www.cnblogs.com/lazycoding/archive/2012/12/03/2800265.html 谢谢你哈，这个我有，我这次考试是分为C语言和数据结构，我现在是想要搞定C语言编程题这一块。[/quote] 那就找些难度级别低的ACM,做些吧,找找感觉

user: user-0
content: 引用 8 楼 wangdahu888 的回复:这儿有个更好的演示;http://www.cnblogs.com/lazycoding/archive/2012/12/03/2800265.html 谢谢你哈，这个我有，我这次考试是分为C语言和数据结构，我现在是想要搞定C语言编程题这一块。

user: user-1
content: 这儿有个更好的演示;http://www.cnblogs.com/lazycoding/archive/2012/12/03/2800265.html

user: user-1
content: 引用 6 楼 hacker_viking 的回复:[quote=引用 5 楼 wangdahu888 的回复:] [quote=引用 4 楼 hacker_viking 的回复:] [quote=引用 1 楼 wangdahu888 的回复:] 麻省理工学院公开课：算法导论 http://v.163.com/special/opencourse/algorithms.html 额。。。感觉这个好理论啊。。我是为了应付考试。[/quote] 算法这东西,其实看视频没多大用,并不是教你做个小软件,跟着按步骤调用api就行了,学算法得多练习,多领悟才行.说白了,考试的时候,就算给你讲算法的那本教科书,你该不会,还是不会!![/quote] 我现在是看书，书上那些变量全是i,j,k而且还没注释，比较难懂，我想着视频会把思路讲清楚，有了思路就容易弄明白了。[/quote] 这里有个数据结构和算法Flash动画演示打包下载的,以动画的形式,形象的演示算法的处理过程 http://www.cppblog.com/humanchao/archive/2008/07/24/57063.aspx 希望对你有帮助

user: user-0
content: 引用 5 楼 wangdahu888 的回复:[quote=引用 4 楼 hacker_viking 的回复:] [quote=引用 1 楼 wangdahu888 的回复:] 麻省理工学院公开课：算法导论 http://v.163.com/special/opencourse/algorithms.html 额。。。感觉这个好理论啊。。我是为了应付考试。[/quote] 算法这东西,其实看视频没多大用,并不是教你做个小软件,跟着按步骤调用api就行了,学算法得多练习,多领悟才行.说白了,考试的时候,就算给你讲算法的那本教科书,你该不会,还是不会!![/quote] 我现在是看书，书上那些变量全是i,j,k而且还没注释，比较难懂，我想着视频会把思路讲清楚，有了思路就容易弄明白了。

user: user-1
content: 引用 4 楼 hacker_viking 的回复:[quote=引用 1 楼 wangdahu888 的回复:] 麻省理工学院公开课：算法导论 http://v.163.com/special/opencourse/algorithms.html 额。。。感觉这个好理论啊。。我是为了应付考试。[/quote] 算法这东西,其实看视频没多大用,并不是教你做个小软件,跟着按步骤调用api就行了,学算法得多练习,多领悟才行.说白了,考试的时候,就算给你讲算法的那本教科书,你该不会,还是不会!!

user: user-0
content: 引用 1 楼 wangdahu888 的回复:麻省理工学院公开课：算法导论 http://v.163.com/special/opencourse/algorithms.html 额。。。感觉这个好理论啊。。我是为了应付考试。

user: user-0
content: 引用 2 楼 user-2 的回复:那c语言的估计是你有基础了的吧！ 没有什么基础的话，直接看算法这些方面视频的话，效率会比较低的！ 所以建议先自己搞搞数据结构，再大致学点算法方面基础，再看相关视频吧！ 额，是这样的，我现在需要考研究生，专业课有C语言，最后的编程题占很大的比重，找了些书，书上的变量让人头疼，所以想看看有没有相关的视频。

user: user-2
content: 那c语言的估计是你有基础了的吧！ 没有什么基础的话，直接看算法这些方面视频的话，效率会比较低的！ 所以建议先自己搞搞数据结构，再大致学点算法方面基础，再看相关视频吧！

user: user-1
content: 麻省理工学院公开课：算法导论 http://v.163.com/special/opencourse/algorithms.html
user-0 提问: 关于float类型

回复:
user: user-1
content: 引用 9 楼 N_sev7 的回复:[quote=引用 5 楼 lm_whales 的回复:] 曾经出现过的浮点数格式： 32Bits，40Bits，48Bits，64Bits，80Bits 不知道，有没128Bits，160Bits 或 更长一些的。 16Bits 的浮点数格式，似乎没有出现过。自己定义的除外。 具体点： TC，BC，BCB ：float 32,double 64,long double 80。 VC          ：float 32,double 64,long double 64。 有一种硬件平台，大概是DSP吧，曾经有40Bits浮点数，双符号位。 pascal 有一种48Bits浮点数。 另外实数---小数----还可以用定点数表示，不一定都是浮点数。 浮点数具体格式，搜一下IEEE 浮点数就可以了。 float16  又称半精度浮点型，一般在计算机图形学中存放坐标的一种数据类型，具体可见2#给出来的连接[/quote] 这样啊，那么只有最多3位的十进制精度了， 也就是大概是2～3位的十进制精度了。 不过用于图像计算，基本就够了。

user: user-2
content: 可以用指数和尾数来表示: 1.54287 可以表示为154287* e-5,所保存(154287,5)就可以避免序列化和反序列化过程中的误差。  不过浮点数过程中的误差是避免不了的。

user: user-2
content: 引用 楼主 N_sev7 的回复:现在又这样两个数据，1.54287和1.34039，如果按照float16类型来存，存到文件中之后发现变成了1.545312和1.342187，怎么样能不损失精度呢？（除了不扩大倍数之后再存）。 在线等了解的老师解答！！！  浮点数都有误差。

user: user-1
content: 曾经出现过的浮点数格式： 32Bits，40Bits，48Bits，64Bits，80Bits 不知道，有没128Bits，160Bits 或 更长一些的。 16Bits 的浮点数格式，似乎没有出现过。自己定义的除外。 具体点： TC，BC，BCB ：float 32,double 64,long double 80。 VC          ：float 32,double 64,long double 64。 有一种硬件平台，大概是DSP吧，曾经有40Bits浮点数，双符号位。 pascal 有一种48Bits浮点数。 另外实数---小数----还可以用定点数表示，不一定都是浮点数。 浮点数具体格式，搜一下IEEE 浮点数就可以了。

user: user-0
content: 引用 5 楼 lm_whales 的回复:曾经出现过的浮点数格式： 32Bits，40Bits，48Bits，64Bits，80Bits 不知道，有没128Bits，160Bits 或 更长一些的。 16Bits 的浮点数格式，似乎没有出现过。自己定义的除外。 具体点： TC，BC，BCB ：float 32,double 64,long double 80。 VC          ：float 32,double 64,long double 64。 有一种硬件平台，大概是DSP吧，曾经有40Bits浮点数，双符号位。 pascal 有一种48Bits浮点数。 另外实数---小数----还可以用定点数表示，不一定都是浮点数。 浮点数具体格式，搜一下IEEE 浮点数就可以了。 float16  又称半精度浮点型，一般在计算机图形学中存放坐标的一种数据类型，具体可见2#给出来的连接

user: user-3
content: 用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10) 同理，用二进制小数也不能精确表示某些10进制小数。

user: user-0
content: 引用 2 楼 turingo 的回复:参考http://en.wikipedia.org/wiki/Half-precision_floating-point_format  [quote=引用 楼主 N_sev7 的回复:] 一般float类型占用四个字节 现在有一种float16类型，占用两个字节， 那么这样的存储类型最多能表示小数点后几位呢？ 比如现在内存中有这样两个字节，表示一个float16类型的数据为：C5 3F 转化成float类型后是多少呢？ 现在又这样两个数据，1.54287和1.34039，如果按照float16类型来存，存到文件中之后发现变成了1.545312和1.342187，怎么样能不损失精度呢？（除了不扩大倍数之后再存）。 在线等了解的老师解答！！！[/quote] 多谢，现在明白了

user: user-4
content: 如果没有更多的信息，可以写程序验证，   lz 也可以参阅 深入理解计算机系统

user: user-5
content: 参考http://en.wikipedia.org/wiki/Half-precision_floating-point_format  引用 楼主 N_sev7 的回复:一般float类型占用四个字节 现在有一种float16类型，占用两个字节， 那么这样的存储类型最多能表示小数点后几位呢？ 比如现在内存中有这样两个字节，表示一个float16类型的数据为：C5 3F 转化成float类型后是多少呢？ 现在又这样两个数据，1.54287和1.34039，如果按照float16类型来存，存到文件中之后发现变成了1.545312和1.342187，怎么样能不损失精度呢？（除了不扩大倍数之后再存）。 在线等了解的老师解答！！！

user: user-6
content: 不是很了解的
user-0 提问: libevent接收数据超长就会没有反映 

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html 感谢指点

user: user-1
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

user: user-0
content: 有人知道问题吗？

user: user-0
content: 引用 2 楼 max_min_ 的回复:抓包看看吧！确认是发送问题，还是接收问题！ 是服务器端发送的问题，服务器已经可以接收了，但是不能返回数据

user: user-2
content: 抓包看看吧！确认是发送问题，还是接收问题！

user: user-3
user-0 提问: 为什么输出16进制a是会是冒号？

回复:
user: user-1
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-2
content: 十进制转换成十六进制的话，我认为哈，不是用相除求余这样来的。因为十六进制的数根本没有无符号之后，十六进制就是一个数，一堆的‘0’和‘1’组成的，所以要将一个十进制数转换成十六进制数的思路应该是将4位二进制合成一个一位的十六进制数。相除求余不太好，我觉得甚至是错误的方法。

user: user-0
content: if(r<=10)应为if(r<10)

user: user-3
content: 你这代码在vs2010里完全正常呀!

user: user-4
content: 87--->65 a=97 A=65

user: user-5
content: 单步跟踪，看看哪一步与你的想法不同

user: user-6
content: 应该是这样吧：  if(r<=10)             b = r + '0';         else             b = r + 'A';  引用 楼主 mousestuman 的回复:void d2h(int num) { 	char *s = (char*)malloc(11); 	char b; 	int r,i=0; 	while(num>0) 	{ 		r = num%16; 		num = num/16; 		 		if(r<=10) 			b = r + 48; 		else 			b = r + 87; 		 		*(s+i) = b; 		i++; 	} 	for(--i;i>=0;i--) 	printf("%c",*(s+i));  } 用此代码将十进制数转换为16进制数，为什么转换后16进制数中的a会是冒号呢？我是在虚拟机中编译的。
user-0 提问: C语言实现List，出现错误，但是不知在哪里，求助一下。

回复:
user: user-0
content: 引用 3 楼 modyaj 的回复:/* 查找到表尾结点并完成插入 */ else{ struct sNode *p = NULL; while(p->next != NULL){ p = p->next; } struct sNode *p = NULL;不是等于NULL吧 应该是你表的头结点谢谢你的回答，你说的是对的，吧那个节点改成头节点就行了，谢谢你的回答。

user: user-0
content: 引用 3 楼 modyaj 的回复:/* 查找到表尾结点并完成插入 */ else{ struct sNode *p = NULL; while(p->next != NULL){ p = p->next; } struct sNode *p = NULL;不是等于NULL吧 应该是你表的头结点那应该怎么改，谢谢了，

user: user-1
content: /* 查找到表尾结点并完成插入 */ else{ struct sNode *p = NULL; while(p->next != NULL){ p = p->next; } struct sNode *p = NULL;不是等于NULL吧 应该是你表的头结点

user: user-0
content: 引用 1 楼 user-2 的回复:自己debug,没有人比你更了解自己的想法 这个是链表的基本操作，在链表的最后插入一个元素，但是不知道错误在哪里

user: user-2
content: 自己debug,没有人比你更了解自己的想法
user-0 提问: 求解

回复:
user: user-1
content: 请检查scanf_s函数的返回值！

user: user-2
content: char hph='y'; scanf_s("%c",hph); 这么分明少了个取地址 你要把这个值传入它所原先的地址中 但是你却直接把值写入了 hph这个值作为地址 操作系统前多少个地址有的地方是受操作系统保护的  所以就段错误了

user: user-2
content: scanf_s("%c",hph); 这句话 改成scanf_s("%c",&hph); 帮助别人是我的荣幸 希望采纳

user: user-3
content: 单步调试看看问题出在哪里。  引用 楼主 u012433862 的回复:#include<stdio.h> #include<math.h> #include<stdlib.h> 	float k(float,float,float,float); 	float m(float,float); 	float n(float,float); 	float l(float,float,float,float); int main() { 	float x1,x2,y1,y2; 	char php; 	char hph='y'; 	do 	{ 		printf("请输入你喜欢的坐标值\n"); 		scanf_s("x1=%f,x2=%f,y1=%f,y2=%f",&x1,&x2,&y1,&y2); 		printf("请输入大写字母ABCD，分别对应所要求的两点的斜率，中点横坐标，中点纵左标，以及两点间距离\n"); 		php=getchar(); 		php=getchar(); 		switch(php) 		{ 		case'A':k(x1,x2,y1,y2);break; 		case'B':m(x1,x2);break; 		case'C':n(y1,y2);break; 		case'D':l(x1,x2,y1,y2);break; 		default:printf("蛋疼\n"); 		} 		printf("I wonder if want to do again?please input y or n\n"); 		scanf_s("%c",hph); 		hph=getchar(); 	} 	while(hph!='n'); 		system("pause>>NUL"); 		return 0; } 	 float k(float a,float b,float c,float d) { 	printf("所求的斜率k=%f\n",(d-c)/(b-a)); 	return 0; } float m(float a,float b) { 	printf("所求的中点横坐标=%f\n",(a+b)/2); 	return 0; } float n(float c,float d) { 	printf("所求的中点纵坐标=%f\n",(c+d)/2); 	return 0; } float l(float a,float b,float c,float d) { 	printf("所求的两点间距离=%f\n",sqrt((b-a)*(b-a)+(d-c)*(d-c))); 	return 0; } 在运行的时候会出现下面的错误，是为什么？怎么解决 0x5655C8AF (msvcr110d.dll) (Project3.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x00000079 时发生访问冲突。