Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 纯小白求助

回复:
user: user-0
content: 已经解决，今天打开Dev-c++时候提示说一个目录并不存在，不知道是不是这个的原因

user: user-0
content: 引用 4 楼 幻夢之葉的回复:[quote=引用 2 楼 weixin_39116372 的回复:] [quote=引用 1 楼 好大一个土豆的回复:]这样输入试试  20,50,6 一开始就试过了，还是不行。[/quote] 你s输入是6,6/250 == 0 s乘以任何数都是0，结果没错[/quote] 但是一开始输入的是书上的100,20,300结果也是0

user: user-0
content: 引用 4 楼 幻夢之葉的回复:[quote=引用 2 楼 weixin_39116372 的回复:] [quote=引用 1 楼 好大一个土豆的回复:]这样输入试试  20,50,6 一开始就试过了，还是不行。[/quote] 你s输入是6,6/250 == 0 s乘以任何数都是0，结果没错[/quote] 好的，我等会试试再看一下

user: user-1
content: scanf里面最好不要加,号（除非针对专门格式的输入），这样输入几个数的时候之间用空格就可以了。

user: user-2
content: scanf指定输入的数之间要用逗号隔开，所以输入时应该：20,50,6回车  20,50,6回车 f=      6000.0000  你输入方式如下： 20 50 6回车 f=         0.0000

user: user-3
content: 引用 2 楼 weixin_39116372 的回复:[quote=引用 1 楼 好大一个土豆的回复:]这样输入试试  20,50,6 一开始就试过了，还是不行。[/quote] 你s输入是6,6/250 == 0 s乘以任何数都是0，结果没错

user: user-4
content: scanf 里带逗号，你输入的时候没有，那就只有第一个变量(p)赋值了,其他两个(w,s)并没有，是默认值0

user: user-0
content: 引用 1 楼 好大一个土豆的回复:这样输入试试  20,50,6 一开始就试过了，还是不行。

user: user-4
content: 这样输入试试  20,50,6
user-0 提问: c中乘法溢出的疑惑

回复:
user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-2
content: 您的系统是32位系统，整形乘法溢出后只有低32位（只是简单的阶段了高位）：0x15e002c4即十进制：367002308 您在64位下应该是对的，或使用long long 类型

user: user-3
content: 图发不出去…内容是 (2222222222×2222222222) mod 4294967296 = 367002308

user: user-3
content: 如图(｢･ω･)｢嘿(｢･ω･)｢嘿

user: user-3
content: 无符号整数超过最大值就会溢出到0，不断循环，最后结果就是你那个数。
user-0 提问: 小白求助，关于加密问题。

回复:
user: user-1
content: 你要是从密文就能看出是des还是aes，那不牛逼上天了

user: user-2
content: 要是这么容易解密，别个还加密干嘛

user: user-3

user: user-4
content: 要知道如何解密，就需要先了解明文是如何加密的。 加密就是要掩盖明文的意思，通过加密让其他人不能理解和看到明文的意思； 加解密是相对的。

user: user-5
content: 是base64编解码 而不是base64加解密！

user: user-6
content: 这个需要专业的密码学知识吧，在这里问怕是难有结论

user: user-7
content: base64为了把一段二进制的流转为可以在互联网传输的明文字符串。并不是为了什么加密二用的，你把它解码回去，也就是一段二进制的byte数组。 看不懂是正常的。

user: user-8
content: 从密文没办法推断加密方法的
user-0 提问: 请教高手，请问如何将两个txt文本中的字符进行比较？（C语言）

回复:
user: user-1
content: 引用 6 楼 zanfeng 的回复:[quote=引用 5 楼 hdt 的回复:] 我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。h[/quote]  引用 6 楼 zanfeng 的回复:[quote=引用 5 楼 hdt 的回复:] 我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。h[/quote]  引用 6 楼 zanfeng 的回复:[quote=引用 5 楼 hdt 的回复:] 我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。h[/quote]  引用 6 楼 zanfeng 的回复:[quote=引用 5 楼 hdt 的回复:] 我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。h[/quote]  引用 6 楼 zanfeng 的回复:[quote=引用 5 楼 hdt 的回复:] 我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。h[/quote]t

user: user-1
content: 引用 5 楼 hdt 的回复:我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。h

user: user-2
content: 我觉得                                                                                                                                                                                                                                                            那么长时间不回复的，然后突然回复一下，lz 一般不会结帖。

user: user-3
content: 引用 2 楼 village_children 的回复:算   但是源代码怎么写呢？ 将两个文件里的内容先加载到内存（即打开文件，读文件），然后使用字符串比较和解析函数处理。

user: user-4
content: 搜“编辑距离”

user: user-0
content: 算   但是源代码怎么写呢？

user: user-2
content: StXRuYNvRuHoaBbvizXztNwRRuuNNP 这个算吗？
user-0 提问: 高水平的C都需要学那些课程

回复:
user: user-1
content: 《The Intel 64 and IA-32 Architectures Software Developer's Manual》

user: user-2
content: C语言要学习，基础C和系统编程（线程，进程，文件操作，同步，socket编程等）

user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数 http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组 http://edu.csdn.net/course/detail/2517 C语言指针与汇编内存地址-四.三维数组

user: user-3
content: APUE当做参考书多看看

user: user-4
content: 编程的核心是算法和数据结构，C语言只是工具， 单论C语言的话，找几本书看看，关键是多练习，不懂得地方刨根问底搞清楚，逐渐积累。 C语言的工作方向太多了，每一个方向都肯能有其独立性的知识和技巧， 不光要多谢还要多读，有能力看看开源代码，你能发现各种方法和技巧。

user: user-5
content: 估计又是一个基础的不肯干，高端的看不懂的好汉

user: user-6
content: 我就不推荐书了，我觉得还是c基本的都了解了后，然后学习数据结构吧

user: user-7
content: C Primer Plus  C语言程序设计：现代方法：第2版(被誉为"近10年来最好的一部C语言著作") C和指针 或者谭浩强《C程序设计》 以上任选一本就差不多了，以下为参考书： 《深入理解C指针》 《C语言点滴》 《C陷阱与缺陷》 《C专家编程》 《C语言课程设计案例精编》 C语言程序开发范例宝典 C语言经典编程282例

user: user-8
content: 首先，把编程语言基础学好，比如C语言，可以把它说成是一个工具，一个程序最终目标并不是每天敲代码，即码农，最终自己能够设计、理解业务。 当然，编程基本功是要有的，针对C的话，找一本基础的C书看一下，比如谭老师的，或国外的都可以，然后要以看一看高质量C编程相关的，另外，多练外还要多debug，这样才能加深理解。
user-0 提问: 小白求助，关于文件的写入后的读取

回复:
user: user-1
content: 个人的建议是每次输入，都要和你的文件里的登录名都匹配一次，密码一样； 另外，这个也好定位，怎么定位呢，每次从文件里读取的和输入的文件名和密码都输出来。  你这个不匹配很可能是fgets导致，怎么说呢，fgets会将'\n'加入到缓存区里，即myusername缓存里实际上多了'\n',这是fgets本身读取时自动加上去的（前提是读取的字符串长度小于缓存的大小）。 只需要将读取的和输入的打印出来，对比一下就可以了。

user: user-2
content: fflush fclose  When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired.

user: user-0
content: 这是我系统的注册和登陆部分，注册写入文本文件后，登陆系统就找不到用户名，求帮忙！
user-0 提问: 关于有位域的大小端求教

回复:
user: user-0
content: 结贴, 结论是 大小端单个字节中的8位也是顺序相反的  struct tcphdr { 	__be16	source; 	__be16	dest; 	__be32	seq; 	__be32	ack_seq; #if defined(__LITTLE_ENDIAN_BITFIELD) 	__u16	res1:4, 		doff:4, 		fin:1, 		syn:1, 		rst:1, 		psh:1, 		ack:1, 		urg:1, 		ece:1, 		cwr:1; #elif defined(__BIG_ENDIAN_BITFIELD) 	__u16	doff:4, 		res1:4, 		cwr:1, 		ece:1, 		urg:1, 		ack:1, 		psh:1, 		rst:1, 		syn:1, 		fin:1; #else #error	"Adjust your <asm/byteorder.h> defines" #endif	 	__be16	window; 	__sum16	check; 	__be16	urg_ptr; };

user: user-1
content: http://www.cnblogs.com/chencheng/archive/2012/06/19/2554081.html

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-3
content: 在内存中，字节是最小的内存单位。位域是比字节更小，即一个字节8位，而位域的变量是占一个字节里的某几个位，或者一个变量的多个位（比如int类型的20位，总共32位）；位域也是有大小的，比如4位，那么它的范围就是一个字节的前4个位用于标识一个变量； test1_t类型的结构体，大小是1个字节，var1和var2占该字节的高4字节和低4字节。对于，那个是占高字节，那个占低字节，要看是大端系统还是小端系统；对于小端系统，var1占低4位，var2占高4位。

user: user-2
content: 仅供参考：#include <stdio.h> #pragma pack(push,1) union U {     unsigned char byte;     struct BF {         unsigned int b0:1;//a         unsigned int b1:1;//b         unsigned int b2:1;//c     } bf; } u; #pragma pack(pop) unsigned char bt; int a,b,c; int main() {     for (bt=0;bt<8;bt++) {         u.byte=(unsigned char)bt;         a=u.bf.b0;         b=u.bf.b1;         c=u.bf.b2;         printf("byte 0x%02x -- c:%d b:%d a:%d\n",bt,c,b,a);     }     for (c=0;c<2;c++)     for (b=0;b<2;b++)     for (a=0;a<2;a++) {         u.bf.b0=a;         u.bf.b1=b;         u.bf.b2=c;         bt=u.byte;         printf("c:%d b:%d a:%d -- byte 0x%02x\n",c,b,a,bt);     }     return 0; } //byte 0x00 -- c:0 b:0 a:0 //byte 0x01 -- c:0 b:0 a:1 //byte 0x02 -- c:0 b:1 a:0 //byte 0x03 -- c:0 b:1 a:1 //byte 0x04 -- c:1 b:0 a:0 //byte 0x05 -- c:1 b:0 a:1 //byte 0x06 -- c:1 b:1 a:0 //byte 0x07 -- c:1 b:1 a:1 //c:0 b:0 a:0 -- byte 0x00 //c:0 b:0 a:1 -- byte 0x01 //c:0 b:1 a:0 -- byte 0x02 //c:0 b:1 a:1 -- byte 0x03 //c:1 b:0 a:0 -- byte 0x04 //c:1 b:0 a:1 -- byte 0x05 //c:1 b:1 a:0 -- byte 0x06 //c:1 b:1 a:1 -- byte 0x07

user: user-0
content: 大神都哪去了
user-0 提问: 题目：删除文件中的注释：将C语言程序test.c中的注释删除后存入另一个文件new_test.c中；

回复:
user: user-1
content: for( i = 0; i < n; i++ ) i应该是从1开始，要不然s1[i-1]可能越界  还有诸如下面的形式，你的成员能正常跑出结果吗？  print("sdads//fdfmd");  int a/*, b*/, c;  /* Function: func Parameter: x */

user: user-0
content: 最后再一个人的博客上看到了解释和解决方法 在读完文件的最后一个字符后，fp->flag仍然没有被置为_IOEOF，因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作，feof()才能探测到文件结尾。这样就多执行了一次。 对于feof()这个函数, 它是先读再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断。 而我们经常这样把它使用在循环中： int c; while(!feof(fp)) { c = fgetc(fp); printf("%x\n",c); } 它是先判断==>再读(可能这时就是文件尾了, 读不出东西了) 所以正确的代码应该是 int c;  c = fgetc(fp); while(!feof(fp)) { printf("%x\n",c); c = fgetc(fp);  } 原博地址： http://blog.sina.com.cn/s/blog_a3e571160101irii.html

user: user-0
content: 引用 2 楼 user-2 的回复:最后读到文件尾，会先写入，再判断循环条件是否成立。i=0时，i-1越界吧 那该怎么修改判断语句呢，我试了下用fscanf和fgets ！= EOF 不能解决问题

user: user-2
content: 最后读到文件尾，会先写入，再判断循环条件是否成立。i=0时，i-1越界吧
user-0 提问: c语言读取文件的时候，读出来的文本不一样

回复:
user: user-1

user: user-2
content: 关于c语言的文件读写函数用法详解，可参考一下这个资料 http://blog.csdn.net/libing403

user: user-1

user: user-1

user: user-3
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-4
content: c的库函数中有一个现成的可以解析有规律的文件的函数，就是fscanf（）函数。 不需要自己写作无用功 可以参考： http://blog.csdn.net/liangxanhai/article/details/8026496

user: user-5
content: 对于这样有格式的文本文件，建议使用fscanf/fprintf对文件进行读写； fscanf(fp, "%s %d %s\n", newStud[i].net_name,&newStud[i].distance, newStud[i].next_routing)  另外，scanf的参数net_name,和next_routing本身就是数组名，即地址。不需要前面在加&
user-0 提问: 批量处理，写分析完结果到txt

回复:
user: user-1
content: 引用 3 楼 maychard1121 的回复:发现要是自己新建文件夹AAA就可行了，奇怪 file不是自动新建文件夹么 文件可以通过打开方式，比如w写的形式打开一个文件，若文件不存在自动创建；对于目录（文件夹）不能自动创建的，再说目录是不能直接存放数据的，目录下创建文件才可以存放数据的吧

user: user-2
content: 引用 3 楼 maychard1121 的回复:发现要是自己新建文件夹AAA就可行了，奇怪 file不是自动新建文件夹么 谁告诉你的？

user: user-0
content: 发现要是自己新建文件夹AAA就可行了，奇怪 file不是自动新建文件夹么

user: user-0
content: Error	2	fatal error C1057: unexpected end of file in macro expansion  这样必然不行呀

user: user-3
content: "e:\\AAA\" 最后一个斜杠去掉，后面需要加文件名或者路径的时候，在后续加上斜杠。你这样编译应该就会出问题的吧

user: user-4
content: CString FileSavePath = _T("e:\\AAA\");  改成：  CString FileSavePath = _T("e:\\AAA\\");
user-0 提问:  c   中使用 minixml  出现   undefined reference to

回复:
user: user-1
content: 如果是gcc的话 编译加上 -static 选项

user: user-2
content: 可以参考： http://blog.csdn.net/shenwansangz/article/details/47155521

user: user-3
content: 这些都是mxml的接口函数，应该是编译时没有加-lmxml，即编译时没有链接动态库。 了解更多，可以参考一下这个博主的文章： http://www.cnblogs.com/liunianshiwei/p/6086577.html
user-0 提问: 求大神解答啊 错在哪里啊 程序运行报错

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

user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-2
content: char x; printf("输入你的结果:"); scanf_s("%s", &x);  x是char类型，因此不能用%s输入，需要用%c，并且在scanf_s之前，加getchar();用于吸收上面输入后残留在输入缓冲区里的回车符；  char x; printf("输入你的结果:"); getchar(); scanf_s("%c", &x);
user-0 提问: 求助！求大神找出错误3*4矩阵输入1~12后结果不对啊

回复:
user: user-0
content: 引用 2 楼 战在春秋 的回复：for(j=0;j<4;j++);  // 多了一个分号，小心一些就好了    应该是：  for (i = 0; i < 3; i++) 		for (j = 0; j < 4; j++) 			scanf("%d", &a[i][j]); 用心回答每个问题，如果有帮助，请采纳答案好吗，谢谢~~~谢谢帮助两年后我已经转战python了

user: user-0
content: 引用 3 楼 自信男孩 的回复：#include <stdio.h>  int main() {     int a[3][4];     int i,j,row,col,min;      for(i=0;i<3;i++)         for(j = 0;j<4;j++)             scanf("%d", &a[i][j]);      for(i=0;i<3;i++)     {         for(j=0;j<4;j++)             printf("%d ", a[i][j]);         printf("\n");     }      min = a[0][0];     row = 0;col=0;     for(i=0;i<3;i++)         for(j=0;j<4;j++)             if(min > a[i][j])             {                 min = a[i][j];                 row = i;                 col=j;             }     printf("min=%d,row=%d,col=%d",min,row,col); }  多了一个分号，另外，注意coding style.输出时，数据间加一个空格，会让输出结果更好的分析谢谢帮助两年后我已经转战python了

user: user-0
content: 引用 1 楼 天糊土 的回复：逻辑是正确的，注意下细节谢谢帮助两年后我已经转战python了

user: user-1
content: 逻辑是正确的，注意下细节

user: user-2
content: #include <stdio.h>  int main() {     int a[3][4];     int i,j,row,col,min;      for(i=0;i<3;i++)         for(j = 0;j<4;j++)             scanf("%d", &a[i][j]);      for(i=0;i<3;i++)     {         for(j=0;j<4;j++)             printf("%d ", a[i][j]);         printf("\n");     }      min = a[0][0];     row = 0;col=0;     for(i=0;i<3;i++)         for(j=0;j<4;j++)             if(min > a[i][j])             {                 min = a[i][j];                 row = i;                 col=j;             }     printf("min=%d,row=%d,col=%d",min,row,col); }  多了一个分号，另外，注意coding style.输出时，数据间加一个空格，会让输出结果更好的分析

user: user-3
content: for(j=0;j<4;j++);  // 多了一个分号，小心一些就好了    应该是：  for (i = 0; i < 3; i++) 		for (j = 0; j < 4; j++) 			scanf("%d", &a[i][j]); 用心回答每个问题，如果有帮助，请采纳答案好吗，谢谢~~~
user-0 提问: c语言中出现函数不接受 2 个参数

回复:
user: user-1
content: 程序有至少两处错误： 1.调用QuickSort的实参个数少一个； 2. 第一个参数（实参）应直接传a.   #include <stdio.h> #include <stdlib.h>  #define N 6  int partition(int arr[], int low, int high) {     int key;      key = arr[low];     while(low<high) {         while(low <high && arr[high]>= key )             high--;         if(low<high)             arr[low++] = arr[high];         while( low<high && arr[low]<=key )             low++;         if(low<high)             arr[high--] = arr[low];     }     arr[low] = key;     return low; }  void quick_sort(int arr[], int start, int end) {     int pos;     if (start<end) {         pos = partition(arr, start, end);         quick_sort(arr,start,pos-1);         quick_sort(arr,pos+1,end);     }     return; }  int main(void) {     int i;     int arr[N]={32,12,7, 78, 23,45};     printf("排序前 \n");     for(i=0;i<N;i++)         printf("%d\t",arr[i]);     quick_sort(arr,0,N-1);     printf("\n 排序后 \n");     for(i=0; i<N; i++)         printf("%d\t", arr[i]);     printf ("\n");      return 0; } 参考一下这个快速排序算法；

user: user-2
content: QuickSort(a[], num); void QuickSort(int a[], int begin, int end)

user: user-3
content: #include <stdlib.h>         void qsort(void *base, size_t nmemb, size_t size,                   int (*compar)(const void *, const void *));
user-0 提问: error C2664 怎么处理？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:要看你的那行代码了，给strcmp的第二个参数是什么类型？  谢谢您，大神。 我好想发现问题了，右括号位置弄错了。

user: user-0
content: 引用 1 楼 user-1 的回复:要看你的那行代码了，给strcmp的第二个参数是什么类型？ #pragma warning(disable:4996) #include<stdio.h> #include<string.h> int main() { 	char *pstr[5], name[5][20];//这里的*pstr[5]其实就是一个二维指针，因为数组是用来存放指针的，指针前面在加一个 *  	char **p; 	int i; 	for (i = 0; i < 5; i++) 	{ 		pstr[i] = name[i]; 	} 	for (i = 0; i < 5; i++) 	{ 		scanf("%s", pstr[i]); 	} 	for (i = 0; i < 5; i++) 	{ 		printf("%s\n", pstr[i]); 	} 	return 0; 	void sort(char**p); 	p = pstr; 	sort(p); 	for (i = 0; i < 5; i++) 	{ 		printf("%s\n", *(p + i)); 	} 	return 0; } void sort(char**p) { 	int i, j; 	for (i = 0; i < 5-1; i++) 	{ 		int sign = i; 		for (j = i + 1; j < 5; j++) 		{ 			if (strcmp(*(p + i), *(p + j)>0))//错误。 				sign = j; 		} 		if (sign != i) 		{ 			char *temp; 			temp = *(p + i); 			*(p + i) = *(p + sign); 			*(p + sign) = temp; 		} 	} }

user: user-1
content: 要看你的那行代码了，给strcmp的第二个参数是什么类型？
user-0 提问: 请教大神：C语言提取时间问题

回复:
user: user-0
content: 谢谢各路大神！！学习了

user: user-1
content: 百度搜索“C 格式化字符串”

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-3
content: char tm_str[16] = "00:02:14"; int hour, min, sec; sscanf(tm_str, "%d:%d:%d", &hour, &min, &sec); printf("%02d%02d%02d\n", hour, min, sec); snprintf(tm_str, 16, "%02d%02d%02d", hour, min, sec); puts(tm_str);  若在转回字符串，可以使用sprintf/snprintf

user: user-3
content: char tm_str[] = "00:02:14"; int hour, min, sec; sscanf(tm_str, "%d:%d:%d", &hour, &min, &sec); printf("%02d%02d%02d\n", hour, min, sec);
user-0 提问: 输出给定区间的随机偶数和随机奇数,当前区间为[0,9]，大家帮忙看一下

回复:
user: user-0
content: 谢谢各位前辈们，看来我还需要多加强学习！

user: user-1
content: 你可以查一下rand的使用说明。

user: user-2
content: 注意2 * rand();的到值可能是一个负值，因为2 * rand();得到的值可能超过了int表示的范围。 所以，先对rand();的值做一个取余操作。

user: user-3
content: 1.计算方法错误 ( 8 / (2 * rand())) 只有 在rand()返回1~3才不为0, rand()随机范围是int, 落再1~3的几率约等于0 2.未使用 srand()函数设置seed,每次rand返回值都是相同的,要想得到不同的随机值seed每次也不能一样 3.正确的程序  #include <stdio.h> #include <stdlib.h> #include <time.h>  /* 输出给定区间的随机偶数和随机奇数,当前区间为[0,9]*/ int main(void) { 	int even, odd; 	srand(time(NULL)); 	even = 2 * (rand() % 5); 	odd = 1 + 2 * (rand() % 5); 	printf("%d %d\n", even, odd); 	return 0; }

user: user-4
content: rand()返回值太大了，以至于 8 / (2 * rand()) 等于0
user-0 提问: 32位浮点数的表示问题

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: http://www.cnblogs.com/qlwy/archive/2012/08/17/2644470.html

user: user-3
content: http://blog.csdn.net/biblereader/article/details/819428 参考一下别人的博客，浮点数的表示方法和int,char等等不一样，因为其有小数部分

user: user-4
content: https://wk.baidu.com/view/3f855dc9f705cc175527098f?pcf=2#1
user-0 提问: 怎么从一个开源框架中找到一个变量定义在哪里

回复:
user: user-1
content: 果断选si工具呀！上手后很好用的！

user: user-2
content: notepad++就适合看单个文件吧 si确实不错，但是门槛略高，直接用VS吧  如果开源库没有VS工程文件，那给你出个主意，先用everything把所有头文件和cpp文件搜索出来，直接拖拽到VS里面（VS需要有VAX插件）。就可以很愉快的阅读代码了（通常情况下无法编译）

user: user-3
content: 用sourceInsight。不过既然你知道vs有这个功能，为什么不用vs呢？

user: user-4
content: 工具不行就换一个工具 Notepad好用但是不适合较大的项目代码的阅读

user: user-5
content: 建议使用sourceInsight工具，查找变量和函数定义，声明都是比较方便；

user: user-6
content: 改用Source Insight软件查看大型项目的源代码。  VS IDE中，在不明白的符号上点鼠标右键，选转到定义。
user-0 提问: popen使用案例 求大神指点下

回复:
user: user-0
content: 引用 3 楼 cfjtaishan 的回复:引用 2 楼 qq_23980007 的回复:那会不会有情况进入不了if语句，导致当次产生的句柄没被关闭  [quote=引用 1 楼 cfjtaishan 的回复:] pclose这个地方就是回收句柄的。这样写对于回收句柄来讲没问题。 谢谢回复，会不会有情况进入不了if语句，从而导致当次的句柄没被关闭呢？ 有可能进不了if语句块，但是if不满足，那就是创建句柄fp不成功，即popen返回NULL，那么此时也不用pclose了。所以，句柄在成功返回后，一般会pclose回收句柄。 为了确定句柄是否真的释放，可以判断pclose的返回值[/quote]谢谢了

user: user-1
content: 引用 2 楼 qq_23980007 的回复:那会不会有情况进入不了if语句，导致当次产生的句柄没被关闭  引用 1 楼 cfjtaishan 的回复:pclose这个地方就是回收句柄的。这样写对于回收句柄来讲没问题。 谢谢回复，会不会有情况进入不了if语句，从而导致当次的句柄没被关闭呢？ 有可能进不了if语句块，但是if不满足，那就是创建句柄fp不成功，即popen返回NULL，那么此时也不用pclose了。所以，句柄在成功返回后，一般会pclose回收句柄。 为了确定句柄是否真的释放，可以判断pclose的返回值

user: user-0
content: 那会不会有情况进入不了if语句，导致当次产生的句柄没被关闭  引用 1 楼 cfjtaishan 的回复:pclose这个地方就是回收句柄的。这样写对于回收句柄来讲没问题。 谢谢回复，会不会有情况进入不了if语句，从而导致当次的句柄没被关闭呢？

user: user-1
content: pclose这个地方就是回收句柄的。这样写对于回收句柄来讲没问题。
user-0 提问: C 中用一个 int 中间量传递地址给一个指针 px，然后 *px 报错

回复:
user: user-0
content: csdn 好难用啊

user: user-0
content: 引用 6 楼 T20091 的回复:貌似都没说到点上，楼主可以试下打印下，sizeof(int*) 和 sizeof(int)各占几个字节。 这个代码编成32位的运行程序是完全没问题的，最多有几个warning。 编成64位的运行程序就会出现非法地址访问问题。 就说到这，好好体会～～  厉害了，我今天听课时听到指针类型占 8 个字符就隐约感觉问题在这。 你这一说就豁然开朗了，哈哈    1 #include <stdio.h>   2    3 int main()   4 {   5     int a = 1;   6     int *pa = &a;   7    8     long b = &a;   9     int *pb = b;  10   11     printf("a: %d\n", a);  12     printf("*pa: %d\n ",*pa);  13       14     printf("pa: %#x\n",pa);  15       16     printf("pb: %#x\n",pb);  17       18     printf("*pb: %d\n",*pb);  19       20     return 0;  21 }   以上是我修改后的代码，将 中间量 b 的类型变更为 long 类型，然后就能完整的保存指针的数据了。 我再赘言几句，由于 32 位中指针类型是 4 个字节，所以用 int 型是可以的。 在 64 位中指针类型是 8 个字节，所以需要用 8 个字节的 long 型。  多谢各位，这个问题解决了。 @T20091 @Cy_Chance   之后我又有一个小想法，在 64 位中使用 int 型 b 作为中间量，那么这个 b 中保存的值会是怎样的。 于是我使用 gdb 进行调试，结果如下。  (gdb) p &a $8 = (int *) 0x7fffffffe424 (gdb) p &b $7 = (int *) 0x7fffffffe434 (gdb) p/x b $9 = 0x7fff (gdb) x/2xw 0x7fffffffe434  // 获取 b 首地址后 8 个字节的内容 0x7fffffffe434: 0x00007fff      0xffffe424  结论：指针 8 个字节的数据已经依次保存进去了，只不过由于 b 只是 int 型只保存了前 4 个字节的数据。在之后进行 * 操作符时，取的就是 0x7fff 地址的数据，于是报错了。

user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数 http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组 http://edu.csdn.net/course/detail/2517 C语言指针与汇编内存地址-四.三维数组

user: user-2
content: 1，Crash是访问非法内存导致的，非法的内存地址是因为截断形成的。 2，pb,pc的地址和pa不一样的。输出的一样，只是printf函数的%#x格式刚好取的是32位的整数地址作为输出看上去相同而已。 3， 指针数据类型，在64位和32位下的大小是不一样的。  4，你肯定是在64位系统下进行的这个测试，第一个pa形成的是一个64位的地址，后续的过程都在用32位的int进行操作。  最后，你可以用指针数据类型大小的整数进行转化测试，比如64位下，用uint64_t；或者，尝试%p的输出方式。

user: user-3
content: 本来是两种不同的东西。分析这些毫无意义。就像问这样的问题：猪八戒变成孙悟空后，是否也会七十二变？

user: user-4
content: 貌似都没说到点上，楼主可以试下打印下，sizeof(int*) 和 sizeof(int)各占几个字节。 这个代码编成32位的运行程序是完全没问题的，最多有几个warning。 编成64位的运行程序就会出现非法地址访问问题。 就说到这，好好体会～～

user: user-5
content: 指针变量和普通变量，首先都是变量，都是在内存中有自己独立的空间（内存分配），不同的地方是指针变量里存放的是别人的地址，对于指针变量指向的区域有多大，这是跟指针变量的类型来确定的。比如int *指针，那么他指向的区域是4个字节的内存空间，在做引用时，即*p时，它是取出指向区域（首地址）开始的4个字节里存放的值。若是char *指针，则是取出指向区域开始的一个字节的内存空间里的值。 普通变量，根据其类型不同在内存中占用的字节数也不一样。比如char a = 1和int b = 1;虽然都是值1，但是在内存中占用的字节数不一样，第一个是char类型的1，第二个是int类型的1.一个是占1个字节，一个是占4个字节。

user: user-6
content: http://blog.csdn.net/IAlexanderI/article/details/69668556?locationNum=1&fps=1

user: user-6
content: #include <stdio.h> int main() { 	int a = 1; 	int *pa = &a;  	int b = a; 	int *pb = &b;  	int c = *pa; 	int *pc = &c;  	printf("*pa: %d\n ",*pa);  	printf("pa: %#x\n",pa);  	printf("pb: %#x\n",pb); 	printf("pc: %#x\n",pc);  	printf("*pc: %d\n",*pc); 	printf("*pb: %d\n",*pb);  	return 0; }

user: user-0
content: @幻夢之葉  我用的是 gcc 4.8.5 版本，直接在 centos 上进行编译的  待我用其它的测试一下

user: user-7
content: 指针值就是一个值，一个无符号的值，并没有你说的还有什么大小的问题。 比如你是int* p; 那么用p取指针的内容，取多大？sizeof(int)大小。多大的内存取决于要解析成什么类型  我是挺好奇的你是什么编译器能编译通过啊，int* 和 int是没有隐式转换的吧      int b = (int)&a;     int *pb = (int*)b;      int c = (int)pa;     int *pc = (int*)c;
user-0 提问: 初学C语言，使用什么软件好，请各路大神指教！！！

回复:
user: user-1
content: vc++6.0

user: user-2
content: codeblocks或者VS吧~都挺好上手

user: user-3
content: 引用 1 楼 qvjunping的回复:如果是Linux/macOS入门推荐使用vim，学C的同时把vim也学了，不错的开始。如果是windows，学校老师一般推荐codeblocks，但我觉得vscode更好点。 你要知道vscode配置需要折腾

user: user-4
content: 引用 16楼Paul_roux 的回复:[quote=引用 1 楼 qvjunping的回复:]如果是Linux/macOS入门推荐使用vim，学C的同时把vim也学了，不错的开始。如果是windows，学校老师一般推荐codeblocks，但我觉得vscode更好点。 你要知道vscode配置需要折腾[/quote]我知道啊，难道折腾的过程不是进步？

user: user-5
content: 其实不用纠结这点，你是要学C语言，什么软件都可以，每个编译器，IDE支持的C都是一样的，你只要知道当前IDE支持C的那个标准，是老一点的C89呢，还是新一点的C11，这个你可以从C的官方网站了解，因为不同时期标准是一点点差别的，注意，官方网站都是英文的。  另外，对于IDE的选择，要看你使用什么平台开发，是windows呢，还是linux， mac os，这三大操作系统上用的开发工具都有很多，windows上你可以选用VS，至于那个版本，我认为哪一个都可以。Linux下一般都会带gnu gcc编译器的，直接用就可以了， mac os上也有linux上的gcc编译器，用法类似。

user: user-6
content: vs2015 即把c语言学习了，也可以熟悉下vs的开发环境 以后用的着

user: user-7
content: 在linux下学习c语言会更好，用vim，gcc，gdb等工具。 c语言参考资料可以看一下这个http://blog.csdn.net/libing403?viewmode=contents

user: user-8
content: 用Visual Studio啊，推荐用新版本，比如2017。下一个社区版就行，免费的，和专业版功能差得不多。

user: user-9
content: 从微软的vs的开发环境开始

user: user-10
content: 建议vs系列，基于windows平台没有超越者

user: user-11
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-12
content: vc6.0，入门经典

user: user-13
content: 我个人用的vs系列，vs2010，12，vs2013，2015，2017都不错。但是越往后程序越大，安装时间基本越长。主要还是看楼主自己

user: user-14
content: 初学者建议用VS 最好不要用linux/vim，那样你会花费很大精力在环境和工具的使用上

user: user-15
content: vs2015 个人感觉 在window上 用vs是最方便的

user: user-16
content: codeblocks ！我现在在自学c# 就是用的这个 慢慢来 这个简单 我觉得一样一样的学好在学高级的

user: user-17
content: codeblocks短小精悍 ，不过建议vs

user: user-18
content: Dev-C++ 最简单的

user: user-19
content: 如果对嵌入式开发比较感兴趣，建议装Ubuntu，使用系统的vi编辑器，也可以安装vim和插件。编译直接用系统带的gcc编译器。

user: user-4
content: 如果是Linux/macOS入门推荐使用vim，学C的同时把vim也学了，不错的开始。如果是windows，学校老师一般推荐codeblocks，但我觉得vscode更好点。
user-0 提问: i++难道不应该是本条语句结束才执行吗？

回复:
user: user-1
content: 引用 1 楼 战在春秋的回复:逻辑或运算符 || 表达式的计算遵循如下原则：   第一个操作数将完全计算，并且在继续计算逻辑“或”表达式之前将完成所有副作用。 仅当第一个操作数的计算结果为 false (0) 时才计算第二个操作数。 在逻辑“或”表达式为 true 时，这将消除对第二个操作数的不必要的计算。  题目中或运算符左端 a = b-- <= a 已经为真，就不再对右端进行计算了。  用心回答每个问题，如果有帮助，请采纳答案好吗，谢谢~~~ 左端是真的吗？左端先算b--<=a为0，为什么会是真呢？

user: user-2
content: a = b-- <= a || a + b != c你不加括号，运算符的优先级你搞的明白？极有可能不是按照你理解的运算顺序来做运算的。另外，i++是i先做运算，然后i+1。

user: user-3
content: a = b-- <= a当a = b--将b的值赋值给a之后，b的值就自减1；

user: user-4
content: 搜“逻辑短路”

user: user-5
content: i++应该是先执行，然后返回值为i吧。 ++i的返回值是i+1。

user: user-6
content: 逻辑或运算符 || 表达式的计算遵循如下原则：   第一个操作数将完全计算，并且在继续计算逻辑“或”表达式之前将完成所有副作用。 仅当第一个操作数的计算结果为 false (0) 时才计算第二个操作数。 在逻辑“或”表达式为 true 时，这将消除对第二个操作数的不必要的计算。  题目中或运算符左端 a = b-- <= a 已经为真，就不再对右端进行计算了。  用心回答每个问题，如果有帮助，请采纳答案好吗，谢谢~~~
user-0 提问: 字符指针内容赋值给字符数组

回复:
user: user-1
content: 在局部变量前面加static

user: user-2
content: 如果你的数组是函数中的局部变量，函数结束后就销毁了  你说返回的指针可以应该是你指针指向的字符串是在常量区的

user: user-3
content: 注意变量的生命周期！

user: user-4
content: 是不是指针变量是局部变量？生命周期到了，你还在使用？如果是这样换成全局变量试试，或者new申请一下内存试试看

user: user-5
content: 从函数里返回字符指针能打印内容，但是把指针的内容赋值给字符数组后，数组的内容就是乱码了 strcpy,strncpy,memcpy都试过了  楼主，我猜测你的代码  “从函数里返回字符指针能打印内容”-》printf （函数的返回值）。返回的字符指针是在函数内定义的，属于栈变量，在函数返回后，字符指针指向的空间会被释放。指针的指向的空间内容可能正常，也可能被其他数据覆盖。  建议：想调用函数得到某个字符串值，一般传入一个字符指针变量作为出参。调用函数后可以以该指针变量作为返回值，或者直接使用该变量进行下一步操作。

user: user-6
content: 引用 3 楼 cfjtaishan 的回复:返回的指针指向的数据是在函数栈上的，函数执行结束后栈被自动释放了，即指针指向的区域数据已经不可用了 很可能是这个原因。刚刚返回时，栈上的东西还没有被完全覆盖；再调用其他函数，栈上基本上没什么原先的痕迹了

user: user-7
content: 要根据你的代码才能更好的帮你解决问题。只是从你的描述去分析问题，可能性就会比较多。比如，返回的指针指向的数据是在函数栈上的，函数执行结束后栈被自动释放了，即指针指向的区域数据已经不可用了。还有可能是拷贝字符串时，没有加字符串的结束标记'\0'等等。 要能够正确分析的问题，还需要你贴出对应的code.

user: user-8
content: 上码                                        ~

user: user-9
content: 你的代码？？？？ 或者 程序的编码问题？
user-0 提问: 数据存储

回复:
user: user-1
content: 引用 5 楼 paschen 的回复:写到文件就行，把6字节的数据写到文件并不会变成10字节，没懂你疑虑在哪 那没准。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 写到文件就行，把6字节的数据写到文件并不会变成10字节，没懂你疑虑在哪

user: user-1
content: 引用 2 楼 zhao4zhong1 的回复: fopen wb fwrite fclose  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-0
content: 就上面这个，应该有7个字节

user: user-3
content: 引用 7 楼 iliangwei0 的回复:赵老师，我将字节写入进去。文件占用空间会变大.  #include<stdio.h>      main()      {          unsigned char s[7]={0xff,0x34,0x45,0xcd,0x00,0x03,0x04};            int i=617;                               FILE *fp;                                fp=fopen("test1.da", "w+");              // fputs("Your score of TOEFLis", fp);          // fputc(':', fp);                         // fprintf(fp, "%d/n", i);       		  for (i=0;i<7;i++)           fprintf(fp, "%s", s[i]);                    fclose(fp);                   /*关闭文件*/      }  为啥运行停止  文件占用大小和文件系统有关，即文件最小占用大小决定文件系统的一个cluster或扇区大小。您可以使用任何编辑器，如写字板，仅仅保存4个字节，然后看文件大小。

user: user-0
content: 赵老师，我将字节写入进去。文件占用空间会变大.  #include<stdio.h>      main()      {          unsigned char s[7]={0xff,0x34,0x45,0xcd,0x00,0x03,0x04};            int i=617;                               FILE *fp;                                fp=fopen("test1.da", "w+");              // fputs("Your score of TOEFLis", fp);          // fputc(':', fp);                         // fprintf(fp, "%d/n", i);       		  for (i=0;i<7;i++)           fprintf(fp, "%s", s[i]);                    fclose(fp);                   /*关闭文件*/      }  为啥运行停止

user: user-4
content: 写入盘，就是要写文件了。根据你的开发环境，选择对应的文件读写接口将数据写入文件。不论什么环境下的读写文件，流程都基本一样的，打开文件--->根据读写格式使用不同的读写接口读写数据至文件--->关闭文件。

user: user-3
content: 引用 楼主 iliangwei0 的回复:比如我下载有一个一维十六进制的数组 a= [0x23,0xff,0xd5,0x34,0x4d,0x55]；刚好6个字节。我现在想要把这个一维数组a存盘。也刚好是6个字节。请问怎么操作  两种情况： 1）如果不考虑不同平台，即假设写操作平台和读操作同平台，楼上已经回了。fopen/fread/fwrite或CreateFile/WriteFile/ReadFile等都可以。 2）如果是不同平台，或因为上下位机的情况、或网络传输数据。如写的系统的Intel PC平台，而读是另一平台，如摩托罗拉的MC68K一类，就要考虑大小端情况；此时不能用以上方法（实际正规的读写操作都是这样，尤其嵌入平台）；此时采用基于流的方式读写。这样保存的数据不会有大小端问题

user: user-1
content: fopen wb fwrite fclose

user: user-5
content: 就当文件一样的存啊~
user-0 提问: c语言小白，大小写转换问题字符的读取不知道哪里出了问题求帮看！

回复:
user: user-1
content: #include<stdio.h> int main() {     int i;     char c;	     i = c;       printf("请输入要转化大小写的字母：");     scanf("%c", &c);          if((c>='A')&&(c<='Z'))         printf("%c转换为小写字母是%c",c, c + ('a' - 'A'));	     else          printf("%c转换为大写字母是%c", c, c - ('a'-'A'));      return 0; } 'a'与'A'相差32

user: user-2
content: 大转小  c-'A'+'a' 小转大  c-'a'+'A'

user: user-3
content: #include<stdio.h> int main() { 	int i; 	char c; 	 	 	printf("请输入要转化大小写的字母："); 	scanf("%c", &c); 	i = (int)c;  	if ((c >= 65) && (c <= 90)) 		printf("小写%c", c + 32); 	else 		printf("大写%c", c - 32);   	return 0; } 字符型的变量转变为整型要强制装换

user: user-4
content: 教你一个简单的大小写字符转换公式  大写字母 = 小写字母 | 0x20; 小写字母 = 大写字母 & 0xDF;
user-0 提问: 请问大神们，这个程序怎么测试单词计数，实在是没有测试出来

回复:
user: user-1
content: 引用 5 楼 program_Three3 的回复:谢谢，好像就是赋值这个错误吧，但是我怎么运行了还是没有出结果了。我还是很疑惑，应该就是输入几个单词就可以测试了，我输入几个单词之后没有输出结果。 没有输出结果的原因可能是你没有输入EOF，没有退出循环。怎么输入EOF呢，那就是借助键盘的组合键，在Linux下使用ctrl+z，在Windows下使用ctrl+z

user: user-0
content: 谢谢，好像就是赋值这个错误吧，但是我怎么运行了还是没有出结果了。我还是很疑惑，应该就是输入几个单词就可以测试了，我输入几个单词之后没有输出结果。

user: user-2
content: 测试就是 运行之后 输入几个单词

user: user-1
content: #include<stdio.h>  #define  IN  1 #define  OUT 0  /* 统计输入的行数、单词数与字符数*/ int main() {     int c, n1, nw, nc, state;      state = OUT;     n1 = nw = nc = 0;     while ((c = getchar ())!= EOF)     {         ++nc;         if (c == '\n')             ++n1;         if (c == ' ' || c == '\n' || c == '\t')             state = OUT;         else if (state == OUT)    /*应该是判断语句，不是赋值语句*/         {             state = IN;             ++nw;         }     }     printf("%d %d %d\n",n1,nw,nc);      return 0; } 一个小的语法错误。==和=区别，尤其是在判断时

user: user-0
content: 谢谢你，我也是知道这个程序是统计行数（回车）、空格，但是我不知道用什么测试，你有时间可以帮忙运行下吗？ 再次感谢，第一次发帖，谢谢关照！

user: user-2
content: 只是计算输入的 空格 tab 回车 个数
user-0 提问: 请教 expected contstructor,destructor,or type conversion before '('token

回复:
user: user-1
content: 语法错误； 函数的定义，不建议使用你这种方式；这种方式可能某些编译器可以识别，但是通过这个错误可以看出，目前你用的编译器不识别你这种编写格式。  #include <stdio.h>  void ddff(int e[], int n) {      int i,k,m,t;     m = (n-1)/2;     for(i=0;i<=m;i++) {         k=n-i-1;         t=e[i];         e[i]=e[k];         e[k]=t;     }      return; }     main(){   int a[10]={3,7,9,11,0,6,7,5,4,18};  int h;  ddff(a,10);  for(h=0;h<10;h++)     printf("%d ",a[h]); } 改了一下你的程序，去掉了error

user: user-2
content: 文件扩展名改成 .c 这是哪一本古董书上的？
user-0 提问: 上位机 步进电机 控制程序

回复:
user: user-1
content: 引用 3 楼 ld18191259463 的回复:就是用串口通信，但是现在搞不懂通信协议、单片机的解析和接收，都不懂 百度搜相关关键字。

user: user-0
content: 就是用串口通信，但是现在搞不懂通信协议、单片机的解析和接收，都不懂

user: user-1
content: 百度搜相关关键字。

user: user-2
content: 上位机通过指令让单片机控制步进电机，比如双发用串口通讯。
user-0 提问: 一个简单的C语言问题（结构体方面的）

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

user: user-0
content: 引用 8 楼 js_gary 的回复:你对结构体初始化不太了解，Plan1 = { 1,"LeeCookies","2015220902026",100 };这也不是对结构体中的每一个成员赋值，更不是初始化，初始化的写法： struct	Plan Plan1 = { 1,"LeeCookies","2015220902026",100 }; 即在定义时用{}方式对其成员做初始化。如果你非要先定义一个结构变量，再初化，那你只以逐个对成员赋值，Plan1.number=1;... 谢谢您

user: user-2
content: 你对结构体初始化不太了解，Plan1 = { 1,"LeeCookies","2015220902026",100 };这也不是对结构体中的每一个成员赋值，更不是初始化，初始化的写法： struct	Plan Plan1 = { 1,"LeeCookies","2015220902026",100 }; 即在定义时用{}方式对其成员做初始化。如果你非要先定义一个结构变量，再初化，那你只以逐个对成员赋值，Plan1.number=1;...

user: user-3

user: user-4
content: stdio.h包含2遍? 可能与struct语句后面有无分号有关

user: user-5
content: 试试定义时进行初始化

user: user-6
content: 结构体变量可以在定义时初始化，若在定义时不初始化不等于结构体变量没有值，而是系统给其为随机值。 另外，结构体赋值，要么一个元素一个元素赋值，要么结构体变量给结构体变量赋值。或者下面的一种赋值方法： #include<stdio.h> int main(void) {     struct Plan     {         int Number;         char Name[20];         char StudentID[20];         float Grades;     };     struct Plan Plan1, Plan2;      Plan1 = (struct Plan){ 1,"LeeCookies","2015220902026",100 };      Plan2 = Plan1;      printf("%d\n", Plan2.Number);     printf("%s\n", Plan2.Name);     printf("%s\n", Plan2.StudentID);     printf("%.0f\n", Plan2.Grades);      return 0; } 即 Plan1 = (struct Plan){ 1,"LeeCookies","2015220902026",100 };

user: user-7
content: 可能和预编译有关。你把结构体的声明写在.h文件里，然后在在.cpp文件里用结构体。此时编译器会先把.h文件进行预编译。

user: user-8
content: 使用结构体变量时，在定义时初始化是个好的编程习惯。

user: user-9
content: 说实在的，第一种情况也不应该允许。那不是初始化，是赋值。 注意初始化与赋值的区别。
user-0 提问: 在大端设备上使用snprintf和memset时对于字节序的困惑

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:printf系列的函数是把各种类型的数据都转换成字符，snprintf(buf, sizeof(buf), "%d", status); 后，buf中的东西是"1\0\0\0\0"，而 memcpy(buf, &status, sizeof(status)); 后，buf中的东西是"\0\0\0\1\0"，注意，一个有'1'，一个有'\1'，编码不同 --> 66的，说的很清楚了，printf系列的函数是把各种类型的数据都转换成字符，所以，整数1就变为了字符‘1’ 存入字符数组，而此时是与大小端字节序无关的，因为字符数组的存储就是一个字节一个字节的从开始的低地址开始存储。而  memcpy(buf, &status, sizeof(status));  是对内存进行拷贝，而整型 status 在内存中的四字节存储是按照大端字节序进行存储，所以是 "\0\0\0\1" ，内存拷贝时也就让 buf 里的字节序是大端字节序了

user: user-1
content: printf系列的函数是把各种类型的数据都转换成字符，snprintf(buf, sizeof(buf), "%d", status); 后，buf中的东西是"1\0\0\0\0"，而 memcpy(buf, &status, sizeof(status)); 后，buf中的东西是"\0\0\0\1\0"，注意，一个有'1'，一个有'\1'，编码不同
user-0 提问: 求大神指点关于scanf的应用

回复:
user: user-0
content: 引用 5 楼 cfjtaishan 的回复:注意main拼写错误，float类型，应该以%f格式输入。 scanf("%f", &jiage); 谢谢您的指点 这个我确实写错了

user: user-0
content: 谢谢各位的指点 谢谢1楼的答案  引用 1 楼 user-4 的回复:这样试试 #include<stdio.h>  int main(void) {   float jiage=0.0f;    printf("请输入手机的价格：          美元\b\b\b\b\b\b\b\b\b\b\b\b\b\b");   scanf("%f",&jiage);   return 0; }

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

user: user-2
content: 注意main拼写错误，float类型，应该以%f格式输入。 scanf("%f", &jiage);

user: user-0
content: 谢谢谢谢各位的指点 ，我去试试。不过2楼说的控制台函数我还没学过！现在还看不懂，但还是谢谢你的指点

user: user-1
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-3
content: 只能使用控制台函数 打印完美元符号后，将光标移动美元字符前面  #include <stdio.h> #include <windows.h>  int main(void) { 	float jiage = 0.0f; 	HANDLE hOutput; 	CONSOLE_SCREEN_BUFFER_INFO info;  	printf("请输入手机的价格: ___ 美元");  	hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 	GetConsoleScreenBufferInfo(hOutput, &info); 	info.dwCursorPosition.X -= 8; 	SetConsoleCursorPosition(hOutput, info.dwCursorPosition); 	scanf("%f", &jiage);  	printf("jiage = %f\n", jiage); 	getchar();  	return 0; }

user: user-4
content: 这样试试 #include<stdio.h>  int main(void) {   float jiage=0.0f;    printf("请输入手机的价格：          美元\b\b\b\b\b\b\b\b\b\b\b\b\b\b");   scanf("%f",&jiage);   return 0; }
user-0 提问: 一开始学习操作系统，求解释，普及下，下面这段代码是什么意思，涉及的知识点是？

回复:
user: user-1
content: 《The Intel 64 and IA-32 Architectures Software Developer's Manual》

user: user-2
content: 如果刚开始学习操作系统，应该先看 uCOSII 和 30天自制操作系统

user: user-0
content: 膜拜大神，我还只是个孩子。现在估计连入门都不算。但是有计算机的基础。

user: user-3
content: 语言本身这段代码只有位域需要注意：  /* Gate descriptors for interrupts and traps */  struct gatedesc {     unsigned gd_off_15_0 : 16;        // low 16 bits of offset in segment     unsigned gd_ss : 16;            // segment selector     unsigned gd_args : 5;            // # args, 0 for interrupt/trap gates     unsigned gd_rsv1 : 3;            // reserved(should be zero I guess)     unsigned gd_type : 4;            // type(STS_{TG,IG32,TG32})     unsigned gd_s : 1;                // must be 0 (system)     unsigned gd_dpl : 2;            // descriptor(meaning new) privilege level     unsigned gd_p : 1;                // Present     unsigned gd_off_31_16 : 16;        // high bits of offset in segment   但是最好看一些硬件相关的（所以推荐了See MIPS Run），因为在嵌入系统，可能需要顾及大小端问题。只是好在ucore这类OS都比较简单，代码都不大-----不像Linux源码都几十M，我看Linux核心代码用了三年，还只是一遍没全部看完。所以稍稍用心读一下，很容易搞懂的

user: user-3
content: 这应该是ucore中有关中断的代码，语言本身不会有太复杂 ----- 这类小系统一般语言上都很简单，可以看看RTOS的书： 1）邵贝贝的uCOS 2）eCos有一本书，书名忘掉了 3）See MIPS Run可以参考一下 其他课本中有关中断的章节。这个只是小系统，这类书不是很多。如果想了解复杂系统可以看Linux相关的（但这个时候早了一些）  深入理解Linux内核，英文好像是Understand Linux kernal Linux设备驱动程序 两本都是奥莱利的书，书名记不准了

user: user-4
content: 给几个变量赋值能有什么意思
user-0 提问: CSAPP第四章处理ret时，流水线寄存器F设置成暂停的问题

回复:
user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！
user-0 提问: C语言访问一个CAE软件的数据库

回复:
user: user-0
content: 引用 1 楼 cfjtaishan 的回复:根据error的提示信息，前两个提示函数已经定义，即重定义了。  请问后面的error怎么解决

user: user-0
content: 前两个问题已解决，主要是这些”未声明的外部变量“怎么解决： CAccessCalls.obj : error LNK2001: unresolved external symbol _DbFPostResultsLoad CAccessCalls1.obj : error LNK2001: unresolved external symbol _DbFPostResultsLoad ....... 是不是程序中的函数没有与我要访问的数据库没有连接好。

user: user-1
content: 可能重复包含了

user: user-2
content: 根据error的提示信息，前两个提示函数已经定义，即重定义了。
user-0 提问: C语言写出文件信息失败

回复:
user: user-1
content: 关于文件的读写，参考一下这个资料 http://blog.csdn.net/libing403

user: user-2
content: //03900001 4 125 75000 1:29:37 22/10/1994 fscanf_s(pFile, "%*d%d%d%d", &Lead, &SampleRate, &WaveLen);//75000之后的没有被处理掉 //03900001.dat 212x4 2000 / mV 12 0 - 58 - 20264 0 III fscanf_s(pFile, "%*[^\n]%*c"); //此处还是在第一行 //此处才开始处理第二行的数据 fscanf_s(pFile, "\r\n%*s%d%d%*s%d%*d%*d%*d%*s", &Method, &Gain1, &Baseline);

user: user-3
content: 使用fgets获取一整行之后，再根据空格拆分，然后就是你想要的结果了。

user: user-0
content: 不会是空格的 问题 我想知道的是这个写法怎么修改能得到我想要的结果

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

user: user-5
content: 怀疑是在换行这些地方出的错 调试这些你可以把忽略的字段放开，读进来打印出来看看 这样就知道读到哪里去了  建议你每次读一行到char数组中， 然后用sscanf读入数据，这样至少行不会混乱

user: user-6
content: fscanf_s(pFile, "\r\n%*s%d%d%*s%d%*d%*d%*d%*s",&Method,&Gain1, &Baseline); 读取的时候，是不是格式不对呢，文件里数据的格式是有空格的，你读取时没有加空格呢
user-0 提问: 关于enum的赋值方式的问题

回复:
user: user-1
content: 搜bit mask

user: user-2
content: 看上去比较直观吧，比如1<<4就知道第4位是1，其他是0  很明显这个enum是作为一个标记，标记间可以进行位运算

user: user-3
content: 左移作为枚举变量的值，这是考虑到某个值可能同时表示枚举的多个值。比如3，即二进制是11，就是DISCOVERY和SECURED,

user: user-4
content: 各占一个bit位，互不干扰，方便组合。对于组合，可以方便地通过按位与知道组合内有谁无谁。

user: user-5
content: 能方便的表示它跟第几位上的1相对应
user-0 提问: 单链表拆分中的几个问题

回复:
user: user-1
content: 看你的split 程序是将一个链表以不同的方法同时变成两个链表； 即链表的next的节点指向两个地方，这是不可能的。 如果是将L链表，根据不同的条件拆分成两个链表，这样的需求是可以实现的。
user-0 提问: 新手求教

回复:
user: user-0
content: 嗯，谢谢了，刚刚学，不太懂这些

user: user-1
content: 排序有多种，比较基础的排序方法，比如冒泡，选择，合并等，快排也是效率比较高的方法，但是不是很好理解，因此有专门的函数接口qsort，只要学会了如何传递qsort的参数就可以很好的使用该排序方法解决问题；  http://c.biancheng.net/cpp/html/2443.html 网上对于排序的方法和介绍都很多，建议从网上搜一下把
user-0 提问: 想要输出N个同学的排序后的平均成绩，但是不知道问题出在哪？？

回复:
user: user-1
content: 你的输入有问题，scanf是格式化输入，在输入成绩时，要加上逗号，因为程序里scanf要求是有逗号的哦。 如果想保持输入的格式，可以去掉逗号。例如：  #include<stdio.h>  #define N 2 struct student {     char num[10];     char name[8];     int score[3];     float ave; }s[N];  void main() {     int i,j;     for(i=0;i<N;i++)     {         scanf("%s",s[i].name);         scanf("%s",s[i].num);         scanf("%d%d%d", &s[i].score[0], &s[i].score[1], &s[i].score[2]);         s[i].ave=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3.0;              }     for(i=0;i<N;i++)         for(j=1;j<N-1;j++)             if(s[i].ave<s[j].ave) {                 float temp;                 temp = s[i].ave;                 s[i].ave=s[j].ave;                 s[j].ave=temp;         }     for(i = 0; i < N; i++) {         printf("%.3f\n",s[i].ave);     }  }
user-0 提问: 一个结构体的，为什么p1->a的值是134525040 ， p1->b的值是13；

回复:
user: user-1
content: 引用 4 楼 yi19861209 的回复:mi函数是1，2，3，去掉3   共 13个数。 那你的需求就是约瑟夫环，建议看一下别人的例子： http://www.cnblogs.com/wangyuli/articles/4672561.html

user: user-2
content: 单步跟踪程序运行，观察变量变化情况，分析原因

user: user-0
content: mi函数是1，2，3，去掉3   共 13个数。

user: user-1
content: 函数mi的逻辑搞不懂你要做什么，建议你将需求说一下； mm函数没问题。但是最后申请的一个节点要释放，因为最后申请的节点并没有链入链表中。 struct jk *mm(void) {     int m;     struct jk *head,*p1,*p2;     head = NULL;      p1 = p2 = (struct jk *)malloc(XIN);     p1->a=1;     p1->b=1;     for(m=1;m<=n;m++)     {         if(m==1)             head = p1;         else             p2->c = p1;          p2 = p1;         p1 = (struct jk *)malloc(XIN);         p1->a = p1->b = m + 1;     }     p2->c = NULL;     free(p1);      p1 = head;     while(p1!=NULL)     {         printf("%5d%5d\n",p1->a,p1->b);         p1 = p1->c;     }     return (head); } 另外，函数声明建议放在main函数之外，代码风格建议改一下，循环变量一般使用i, j, k等。函数名和变量名尽量做到见名知义。

user: user-3
content: 然后设断点或单步调试。

user: user-3
content: 在IDE中，Watch（监视）窗口监视相关变量。
user-0 提问: 数组在栈中越界和在堆中越界有何不同

回复:
user: user-0
content: 引用 5 楼 paschen 的回复:没报错不代表是正常的，只能说是运气好而已 嗯，谢谢~

user: user-0
content: 引用 4 楼 cfjtaishan 的回复:很明显的越界操作，就比如拿一个1L的瓶子，去装4L，10L的水，那么瓶子肯定是装不了的，装不了自然会溢出了。 对于栈空间，首先它是很少的，主要靠它的循环利用和换页操作才满足我们对于它的需求。 对于堆空间，首先相对于栈空间，它还是很丰富的，并且是一块比较大的空间供我们的程序调用和手动释放。 对于栈空间，比较稀缺，所以需要多少就分配多少，你的程序里需要1个字节，那么也就分配一个字节，想往一个字节空间里放10个字节，那么其他9个字节就要占用（覆盖）其他空间，其他空间不是属于自己的，那么就会出错；  堆空间呢，申请1个字节，但是分配会多于一个字节（包括用于存放申请信息），虽然这样不会出错，但是不等于数据一直是对的，因为不是某个变量申请的空间，但占用了这部分空间，这部分空间还是未分配状态，那么其他变量一样可以申请这部分空间，一旦新申请的变量往里写数据了，就会覆盖上次溢出的数据。因此不能保证数据的正确性。  最后，数据空间以适当足够为宜，数据空间要求大的建议在堆上申请，或者在数据段上申请（全局或静态变量） 非常感谢，已经关注你了，晚上下班了再去看你的文章。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533 谢谢赵老师！

user: user-1
content: 没报错不代表是正常的，只能说是运气好而已

user: user-2
content: 很明显的越界操作，就比如拿一个1L的瓶子，去装4L，10L的水，那么瓶子肯定是装不了的，装不了自然会溢出了。 对于栈空间，首先它是很少的，主要靠它的循环利用和换页操作才满足我们对于它的需求。 对于堆空间，首先相对于栈空间，它还是很丰富的，并且是一块比较大的空间供我们的程序调用和手动释放。 对于栈空间，比较稀缺，所以需要多少就分配多少，你的程序里需要1个字节，那么也就分配一个字节，想往一个字节空间里放10个字节，那么其他9个字节就要占用（覆盖）其他空间，其他空间不是属于自己的，那么就会出错；  堆空间呢，申请1个字节，但是分配会多于一个字节（包括用于存放申请信息），虽然这样不会出错，但是不等于数据一直是对的，因为不是某个变量申请的空间，但占用了这部分空间，这部分空间还是未分配状态，那么其他变量一样可以申请这部分空间，一旦新申请的变量往里写数据了，就会覆盖上次溢出的数据。因此不能保证数据的正确性。  最后，数据空间以适当足够为宜，数据空间要求大的建议在堆上申请，或者在数据段上申请（全局或静态变量）

user: user-3
content: 如果是“跳”着越界，就连数据断点也无能为力！

user: user-3
content: 不能指望是否报错来判断是否越界；要指望是否触发数据断点： #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-3
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
user-0 提问: 求教，输出字符串数组，为何无法正常显示？

回复:
user: user-1
content: switch (iTempNum)         {         case 1:             chPoker[i] = "A";             break;           case 11:             chPoker[i] = "J";             break;           case 12:             chPoker[i] = "Q";             break;           case 13:             chPoker[i] = "K";             break;           case 14:             chPoker[i] = "Joker1";             break;           case 15:             chPoker[i] = "Joker2";             break;           default:             chPoker[i] = (char)iTempNum;             break;         } switch中，所有的赋值都是有问题的。因为字符串不支持直接赋值，需要借用字符出函数来实现，比如strcpy，strlen; 以下是我的修改，做了一个参考吧：  #include <stdio.h> #include <string.h>  int main() {     char chPoker[54][10] = {{0}};     int i = 0;     int iTempNum = 0;     int flag = 1;      //初始化54张牌     for (; i < 54; i++)     {         if (i % 4 == 0)         {             iTempNum = iTempNum + 1;         }         switch (iTempNum)         {         case 1:             strcpy(chPoker[i], "A");             break;          case 10:             strcpy(chPoker[i],  "10");             break;          case 11:             strcpy(chPoker[i],  "J");             break;          case 12:             strcpy(chPoker[i],  "Q");             break;          case 13:             strcpy(chPoker[i],  "K");             break;          case 14:             if (flag) {                 strncpy(chPoker[i], "Joker1", strlen("Joker1"));                 flag = 0;             } else {                 strncpy(chPoker[i], "Joker2", strlen("Joker2"));             }             break;          default:             chPoker[i][0] = iTempNum + '0';             chPoker[i][1] = 0;             break;         }     }      //输出54张牌     for (i = 0; i < 54; i++)     {         printf("%s \t", chPoker[i]);     }     putchar(10);     return 0; }

user: user-2
content: 1楼说的是正确的，另外，是10是算两个字符的，不能用char来存，而且10的ACCIC值是LF。楼主你这个算法是不行的

user: user-3
content: 楼上说的都没错，最后输出五十四张牌，printf chpoker五十四次，用的是%s，究竟是想挨个输出还是怎么的，感觉是想写%c，chpoker[i]，而且字符数组一个位置存不下joker1这么长的数据，只能存单个字符

user: user-4
content: chPoker[i] = (char)iTempNum; 有问题，应该改为 chPoker[i] = (char)(iTempNum+'0'); 把数字转成ascii码  还有，chPoker[i] = "Joker2";这两句也有问题 一个char只能保存一个字节数据，放不下这么多的
user-0 提问: C语言提取txt中的信息

回复:
user: user-0
content: 谢谢大家的帮助，在同事的帮助下已经解决问题了。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:有偿提供帮助。 支付宝:zhao4zhong1@163.com 不想和你说话

user: user-0
content: 引用 1 楼 kaijkl 的回复:参考：http://zhouhaiyan1012.blog.163.com/blog/static/1231972432011750305769/ 谢谢大兄弟的帮助，已经解决了。

user: user-1
content: 看文件的内容是二进制的形式写入的，或者是编码问题。 建议了解一下文件是什么方式写入的，若是格式化写入的，可以使用fscanf/fprintf操作文件，若是二进制形式写入的，考虑使用fread/fwrite

user: user-2
content: 看十六进制，判断用了什么编码

user: user-3
content: 有偿提供帮助。 支付宝:zhao4zhong1@163.com

user: user-4
content: 参考：http://zhouhaiyan1012.blog.163.com/blog/static/1231972432011750305769/
user-0 提问: GLCM灰度共生矩阵C代码调试问题：异常0xC0000005

回复:
user: user-1
content: 引用 5 楼 cfjtaishan 的回复:int* histImage = (int*)malloc(width*height); 这句是不是应该改成这样： int* histImage = (int*)malloc(width*height * sizeof(int)); 如果不改成这样，会导致使用histimage越界吧  正解，是越界了

user: user-2
content: int* histImage = (int*)malloc(width*height); 这句是不是应该改成这样： int* histImage = (int*)malloc(width*height * sizeof(int)); 如果不改成这样，会导致使用histimage越界吧

user: user-0
content: 没用啊老师  引用 2 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-0
content: width = bWavelet->width; 	height = bWavelet->height; 	int* histImage = (int*)malloc(width*height); 大小就等于图像的长宽相乘 引用 1 楼 tomsoft 的回复:histImage的大小是多少？看起来像是写越界

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-1
content: histImage的大小是多少？看起来像是写越界
user-0 提问: 求问computational function如何运行

回复:
user: user-1
content: 引用 楼主 weixin_38194305 的回复:我用一个软件自动生成C程序 结果生成了一样computational function和一个standalone function。 Standalone的可以运行 但是computational function的没有main 函数。但是导师希望我让computational 的运行起来。 求大神指导 针对C/C++语言，不同的系统一定是有个主程序入口（main或WinMain），在程序完成初始化后，其会跳转到该入口：其表明主程序入口，所以没有main(或其他类似WinMain)的程序是一定不能不能直接运行的；我对您导师的用意理解是，因为考虑到代码可复用性，他希望您将"computational function"独立出来，即这个程序中是没有main的。因此，您为了他这个要求，可以在外部构造一个宿主程序，这个宿主程序仅仅提供运行“computational function”的外围条件。 当然如果您是在某个嵌入系统，情况会稍有不同。此时您可能需要将“computational function”生成为相对某个地址的二进制可执行代码，然后在另一个程序（也许是个Shell或类似的代码中），直接调用。当然此时又可能根据您的系统有一些不同的处理方式。

user: user-1
content: computational function程序是什么文件？如果只是C语言格式有几种方法：1）将该文件变成一个静态库（Windows和Linux会有差别）;2)编译成动态库。这样computational function仍是独立的 然后再写一个宿主程序，其中是包含main，在宿主程序中调用computational function的函数

user: user-2
content: 百度搜相关关键字。