Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c语言结构要在函数内部初始化的时候参数为什么要传二级指针？

回复:
user: user-1
content: 引用 2 楼 stormier 的回复:[quote=引用 1 楼 derekrose 的回复:] int a = 10; 你要改变a的值 是call func(a)呢 还是func(&a);  指针同理 一级指针可以理解，二级指针不明白为什么[/quote]  int* a = 0x12345678; 你如果想改a的值怎么办

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对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-3
content: 传的都是值，你要初始化指针，就要给指针所在地址附别的地址值

user: user-0
content: 引用 1 楼 derekrose 的回复:int a = 10; 你要改变a的值 是call func(a)呢 还是func(&a);  指针同理 一级指针可以理解，二级指针不明白为什么

user: user-1
content: int a = 10; 你要改变a的值 是call func(a)呢 还是func(&a);  指针同理
user-0 提问: 新手c语言scanf函数问题求解！

回复:
user: user-1
content: 不需要\n11

user: user-2
content: lz可以看看这个——http://blog.csdn.net/u012421456/article/details/18501309

user: user-3
content: 1 scanf 不需要\n的 2 处理下每次输入的回车符！

user: user-4
content: 同楼上。 另外，请检查scanf函数的返回值。

user: user-5
content: scanf别写什么 \n 作死
user-0 提问: 循环跳不出去！！！！求前辈们指点。

回复:
user: user-0
content: 引用 2 楼 luobinshan 的回复:一般在fgets循环中, 增加一个 if ( input[0] == 'q' ) break; 这样按q就可以退出了.  由键盘产生EOF也行. windows Ctrl+Z linux   Ctrl+d  这解决办法不错。但为什么跳不出来呢？

user: user-0
content: 引用 3 楼 u012889234 的回复:stdio 不是标准输入吗？  while永远为真。 在循环内给结束条件(在if里加break)  为什么输入流就永远为真呢？

user: user-0
content: 引用 1 楼 user-7 的回复:stdin是你的文件指针？  输入流。

user: user-1
content: Enter，Ctrl+Z，Enter

user: user-2
content: stdin是输入流的话，fgets 读入回车算成功不返回失败 怎么按回车也不结束啊~ 要结束就像2楼说的那样产生EOF

user: user-3
content: 你可以捕获fgets的返回值 调试看看 为什么一直不等于NULL

user: user-4
content: Linux ^D Windows ^Z 产生EOF

user: user-5
content: stdio 不是标准输入吗？  while永远为真。 在循环内给结束条件(在if里加break)

user: user-6
content: 一般在fgets循环中, 增加一个 if ( input[0] == 'q' ) break; 这样按q就可以退出了.  由键盘产生EOF也行. windows Ctrl+Z linux   Ctrl+d

user: user-7
content: stdin是你的文件指针？
user-0 提问: 请大家指点迷津。这个数组里保存的怎么是一样的数据？

回复:
user: user-0
content: 引用 8 楼 buyong 的回复:自己动手单步调试 你何必跑来占个位置？

user: user-1
content: 自己动手单步调试

user: user-0
content: 新的一天，新的起点，新的气象！！！！

user: user-0
content: 引用 4 楼 ForestDB 的回复:是。。。。。 这样结果没有任何变化？

user: user-2
content: 是。。。。。

user: user-0
content: 引用 1 楼 user-3 的回复:57行malloc返回值给谁了？ Infotable[i] = (Info*)malloc(sizeof(Info)); 这样吗。。

user: user-0
content: 引用 1 楼 user-3 的回复:57行malloc返回值给谁了？ 这里是想为Infotable数组分配内存空间并初始化。

user: user-3
content: 57行malloc返回值给谁了？

user: user-0
content: 哎，来人瞧一瞧哦！！！
user-0 提问: 如何用c语言调用摄像头

回复:
user: user-1
content: 引用 9 楼 u013749006 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 用OpenCV不超过10行语句。 那10行语句是什么呢？[/quote] 《学习OpenCV（中文版）》

user: user-2
content: 引用 3 楼 zhao4zhong1 的回复:用OpenCV不超过10行语句。 那10行语句是什么呢？

user: user-1
content: 引用 6 楼 wdekifjr 的回复:还想问一下，监控视频传输时时一张一张图片传，还是整个视频传。 传的是比如mp4或H.264压缩格式的视频流，我猜。

user: user-3
content: 引用 楼主 wdekifjr 的回复:如何用c语言调用摄像头，并且每隔几帧储存在文件中。  首先你的摄像头得有驱动,然后驱动允许你读数据

user: user-0
content: 还想问一下，监控视频传输时时一张一张图片传，还是整个视频传。

user: user-4
content: 要找相应的库或者接口。

user: user-5
content: c语言没有这么高级的功能。如果是windows下可以使用vfw(比较古老的一个多媒体操作库，video for window)，简单实用

user: user-1
content: 引用 3 楼 zhao4zhong1 的回复:用OpenCV不超过10行语句。 别忘了OpenCV 1.0好象是纯C语言。

user: user-6
content: 引用 1 楼 starytx 的回复:c语言没有这么高级的功能。如果是windows下可以使用vfw(比较古老的一个多媒体操作库，video for window)，简单实用

user: user-1
content: 用OpenCV不超过10行语句。
user-0 提问: QQ好友列表是什么控件做的？Treeview吗？

回复:
user: user-0
content: 引用 3 楼 zhuobattle 的回复:spy++抓不到了，应该是自绘了。  豪迪软件好像可以抓到句柄

user: user-1
content: spy++抓不到了，应该是自绘了。

user: user-2
content: 以前那种卷起来的好像是“抽屉”控件，现在应该不是了吧

user: user-3
content: 应该是自绘, 无句柄.  有点类似于duilib那种完全自己贴图.
user-0 提问: 从小到大输出10个整数，程序没报错误啊，但显示编译器已停止工作

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

user: user-2
content: 不好意思啊，刚才断网了，要不按12楼的试试吧，感觉lz代码有点乱

user: user-3
content: 引用 5 楼 no_Talent 的回复: p = array[0]; q = array[n-1];  这里p,q都是指针，因该为：  p = &array[0]; q = &array[n-1];  这样不行么？

user: user-0
content: 引用 10 楼 u012421456 的回复:# include <stdio.h>  int main() { 	void like(int array[],int n); 	int i,j; 	int fan[10]; 	printf("请输入10个整数: "); 	for(i=0;i<10;i++) 		scanf("%d",&fan[i]); 	like(fan,10); 	for(j=0;j<10;j++) 		printf("%3d\n",fan[j]);  	return 0; } void like(int array[],int n) { 	int *p,*q; 	int x,y; 	int love; 	p=array[0];   //22行，不能把 int 型数据改为 int * 	q=array[n-1]; 	for(x=0;x<n;x++,p++) 	{ 		for(y=n-1;y>0;y--,q--) 		{ 			if(*p>*q) 			{ 				love=*p; 				*p=*q; 				*q=love; 			} 		} 	} } 22行，有问题啊那该怎样改啊？

user: user-2
content: # include <stdio.h>  int main() { 	void like(int array[],int n); 	int i,j; 	int fan[10]; 	printf("请输入10个整数: "); 	for(i=0;i<10;i++) 		scanf("%d",&fan[i]); 	like(fan,10); 	for(j=0;j<10;j++) 		printf("%3d\n",fan[j]);  	return 0; } void like(int array[],int n) { 	int *p,*q; 	int x,y; 	int love; 	p=array[0];   //22行，不能把 int 型数据改为 int * 	q=array[n-1]; 	for(x=0;x<n;x++,p++) 	{ 		for(y=n-1;y>0;y--,q--) 		{ 			if(*p>*q) 			{ 				love=*p; 				*p=*q; 				*q=love; 			} 		} 	} } 22行，有问题啊

user: user-0
content: 引用 1 楼 misakamm 的回复:排序代码完全错了，建议先用好了数组再玩指针

user: user-0
content: 引用 6 楼 u012421456 的回复:lz你确定没错？ 我这里怎么是这种情况——我这真心没error,只有4个警告

user: user-0
content: 引用 2 楼 u010957746 的回复:指针问题。是指针我感觉也是，刚刚学指针，想试试效果

user: user-2
content: lz你确定没错？ 我这里怎么是这种情况——

user: user-3
content: p = array[0]; q = array[n-1];  这里p,q都是指针，因该为：  p = &array[0]; q = &array[n-1];

user: user-0
content: 引用 3 楼 bedynamic 的回复:简单的排序……。冒泡会不……搞这么麻烦，还有这样的代码谁愿意看？乱七八糟的。 新手，没必要这么打击吧，我知道你很牛逼！！！！！

user: user-4
content: 简单的排序……。冒泡会不……搞这么麻烦，还有这样的代码谁愿意看？乱七八糟的。

user: user-5
content: 指针问题。是指针

user: user-6
content: 排序代码完全错了，建议先用好了数组再玩指针
user-0 提问: for循环嵌套if判断语句时间复杂度的计算

回复:
user: user-1
content: 引用 楼主 mary__lin 的回复:for里面有if怎么算时间复杂度？if判断语句中的条件也要算进去吗？  这种情况下就不仅仅是算法复杂度的问题了，还需要加上概率论的知识，正因为类似应用的存在，不少高校的计算机专业课程也包括概率论。

user: user-2
content: 一般都是执行一半吧，就是执行次数除以二

user: user-3
content: 循环本身，如果有和规模相关的控制条件的话，可以判断基本操作的执行的次数 if  语句，可以提前终止循环，从而可以缩小基本操作的执行的次数。。。比只考虑循环时候执行的次数要少。  同样是排序。  内部排序，内存读写，比较属于基本操作。  外部排序，外设的读写操作，才是基本操作。

user: user-3
content: 如果基本操作就是比较，那么一条if 语句的计数为1 如果比较不是基本操作，相对基本操作，比较的时间可以忽略，那么只需要对基本操作计数 if 语句中，不执行基本操作的不计数，执行的计数。  时间复杂度是针对基本操作来说的； 一般循环的判断，计数，以及if 的比较操作，不计算在内，除非比较，循环计数，就是基本操作。  以各种基于比较的排序为例，有两种基本操作：  1）比较元素的大小的比较操作 2）交换元素的位置；  很多时候，由于这两种操作，的耗时时间差距不大，都是不可忽略的，所以都属于基本操作。 那么，以这两种操作的，时间复杂度最高的，计算时间复杂度。  如果，比较只是针对，大对象的一个比较小的键值的操作， 那么比较也是可以忽略的，可以不用计算他的时间复杂度。  这个排序过程中，还会执行循环变量的比较，和递增递减操作，不过和前面两种操作比较起来，耗时可以忽略。。。 特别是对象比较大的时候，所以他们不是基本操作。  基本操作，就是解决一个问题的主要操作，往往是耗时最长的操作，而且执行次数，往往和数据规模相关。

user: user-4
content: 引用 2 楼 caozhy 的回复:你有程序要算复杂度很简单，在最内侧加上一个计数器变量，每执行1次加1。 在程序运行完后记录下这个计数器的值。  改变程序的规模（比如输入数组的长度），重复这个过程。  然后你得到了很多 程序规模-计数器 的值对。  在一张纸上描点画图。看曲线是什么类型的即可。其实很难定义“最内侧”，就算是“最内侧”也不一定是执行次数最多的代码，不过也有估算价值 改变程序的规模直接测运行时间也可以做估算  但是如果你要较准确的时间复杂度，那最好阅读算法导论

user: user-5
content: 你有程序要算复杂度很简单，在最内侧加上一个计数器变量，每执行1次加1。 在程序运行完后记录下这个计数器的值。  改变程序的规模（比如输入数组的长度），重复这个过程。  然后你得到了很多 程序规模-计数器 的值对。  在一张纸上描点画图。看曲线是什么类型的即可。

user: user-4
content: 具体情况具体分析
user-0 提问: socket accept error

回复:
user: user-0
content: 引用 2 楼 boygo1982 的回复:fork如果创建失败了，你的错误处理后while会继续循环执行，但是accept的第一个参数servfd已经在你的错误处理里被关闭了。 应该是fork失败了，因为我没有在su下运行程序，菜鸟表示很蛋疼

user: user-1
content: fork如果创建失败了，你的错误处理后while会继续循环执行，但是accept的第一个参数servfd已经在你的错误处理里被关闭了。

user: user-2
content: str_echo(clifd); 这一句出的问题吗？
user-0 提问: 汇编！！！  大家帮忙解决下，关于movdqa的使用

回复:
user: user-1
content: 虽然是array[16]，但传进去的只是array，你可以通过“数据类型 PTR 地址表达式 ”强制转换

user: user-0
content: 引用 1 楼 user-2 的回复:movdqa xmm0, OWORD PTR array   能不能说下为什么用OWORD？我查了很多有dword，qword，没有见过oword 谢谢。

user: user-2
content: align用法没有问题，只是要注意align只对下一个变量定义起作用，如果要定义多个需要对齐的变量，每个变量定义前都要用align

user: user-2
content: movdqa xmm0, OWORD PTR array
user-0 提问: linux c socket，求助

回复:
user: user-0
content: 你不是说makefile tab被改成空格了？makefile中不能有空格吗？貌似我把这句注释了，就可以了,我实在看不出这句有啥错误啊 bin_PROGRAMS = configd_test

user: user-1
content: if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) //.goto close_err;  if没有注释掉, 导致后面的逻辑错误

user: user-0
content: error: extended registers have no high halves 这种错误感觉不是语法错误啊，你刚回复过我的makefile的帖子，我感觉是哪个makefile弄的

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

user: user-2
content: 引用 4 楼 littlelocker 的回复:不是注释的这个问题，我光用gcc指令编译是可以过的，估计是makefile的问题 提醒：makefile里面的Tab字符必须是Tab字符本身，不能用空格代替。

user: user-0
content: 不是注释的这个问题，我光用gcc指令编译是可以过的，估计是makefile的问题
user-0 提问: 对一个数列求取峰值，求C代码编写算法

回复:
user: user-1
content: 点搞，我现在也在做峰峰值算法，我先做的滤波，滤波之后就不知道怎么弄了

user: user-2
content: 先低通，再FFT看看主信号的间隔点数，算峰值的时候注意间隔，最后找出峰值位置，没试过，不知道效果咋样。

user: user-3
content: 请问楼主解决问题了吗？我也遇到同样的问题，求楼主能提供具体的解决方案，定当酬谢

user: user-0
content: 引用 18 楼 vipcxj 的回复:我但土办法就是求导，导数接近0的就是峰值，当然对于拐点，导数也是0，所以还得求下2次导数。不过因为是离散点，所以求出的导出误差比较大，阀值难以掌控，所以说是土办法。  说的很在理

user: user-4
content: 还是采集点加个滤波吧。

user: user-5
content: 搜“低通滤波”

user: user-0
content: 引用 12 楼 lpcads 的回复:法1：计算 X[i-n] 到 X[i+n] 这 2n+1 个点的平均值，作为 Y[i] 的值； 法2：计算积分（可以用梯形法），再求导（中心差分法），结果和法1应该差不多。 因为你说“采样频率合适，有足够的数据点，而且数据点时间距离可以看成是“绝对均匀”的”，而且从图上看，噪音的幅度和持续实现较短，因此使用这两种滤波法效果应该还不错。  法1应该是不合适的。求这2n+1个点的平均值，肯定比真实的峰值小。

user: user-0
content: 引用 11 楼 bbs2241 的回复:拟合下我觉得是可以的，拟合后噪声的影响就去掉了  具体如何拟合？请简要说说方法，谢谢。

user: user-6
content: 额，没看到噪音，其实你先去噪后在用LS的办法取峰值就行了，当然这会导致误差又大了点。我去噪还是土办法，取临近N个点取平均~

user: user-6
content: 我但土办法就是求导，导数接近0的就是峰值，当然对于拐点，导数也是0，所以还得求下2次导数。不过因为是离散点，所以求出的导出误差比较大，阀值难以掌控，所以说是土办法。

user: user-7
content: 突发性的噪声用中值滤波啊。

user: user-8
content: 引用 14 楼 cjfdqchwh 的回复:[quote=引用 12 楼 lpcads 的回复:] 法1：计算 X[i-n] 到 X[i+n] 这 2n+1 个点的平均值，作为 Y[i] 的值； 法2：计算积分（可以用梯形法），再求导（中心差分法），结果和法1应该差不多。 因为你说“采样频率合适，有足够的数据点，而且数据点时间距离可以看成是“绝对均匀”的”，而且从图上看，噪音的幅度和持续实现较短，因此使用这两种滤波法效果应该还不错。  法1应该是不合适的。求这2n+1个点的平均值，肯定比真实的峰值小。 [/quote] 那就加个权 1,2,4,2,1 之类的。 既然是滤波，精确要求就得放低。

user: user-8
content: 引用 7 楼 cjfdqchwh 的回复:[quote=引用 6 楼 reFreever 的回复:] 如果只是计算峰值点个数，可以试着先进行滤波将数据平滑处理，将噪声的波幅减小。  现在内存上存在这么一段数列，通过什么方法，实现“先进行滤波将数据平滑处理，将噪声的波幅减小”的目的？谢谢[/quote] 法1：计算 X[i-n] 到 X[i+n] 这 2n+1 个点的平均值，作为 Y[i] 的值； 法2：计算积分（可以用梯形法），再求导（中心差分法），结果和法1应该差不多。  因为你说“采样频率合适，有足够的数据点，而且数据点时间距离可以看成是“绝对均匀”的”，而且从图上看，噪音的幅度和持续实现较短，因此使用这两种滤波法效果应该还不错。

user: user-9
content: 拟合下我觉得是可以的，拟合后噪声的影响就去掉了

user: user-10
content: 如果你数据点足够多可以进行再采样, 比如你这段数据有上W个点的话就适用.数据点少的话就不用了。 至于平滑处理的方法有很多， 简单的均值滤波，中值滤波，5点3次平滑滤波等。复杂点的FFT,小波都行。不过平滑滤波多是对于含有高频噪声进行滤波的，你这种噪声滤波的意义不会太大。只能适当的将噪声减小，如果噪声与有效数据的差别很大的话， 也可以过度平滑将噪声减到最小。

user: user-0
content: 引用 8 楼 user-11 的回复:1.首先你得保证采样率合适，即有足够的数据点； 2.噪声是什么类型的噪声，高斯白噪声？有没有突发噪声？ 3.判断峰值干嘛用呢？能判断出高低电平还不够？ 问的好 首先，采样频率合适，有足够的数据点，而且数据点时间距离可以看成是“绝对均匀”的； 2. 不是高斯白噪声，这种噪声绝大多数都是突发噪声，由于外力影响导致的； 3. 解决方案就是要提取出峰值，提取峰值就是唯一的目标。

user: user-11
content: 1.首先你得保证采样率合适，即有足够的数据点； 2.噪声是什么类型的噪声，高斯白噪声？有没有突发噪声？ 3.判断峰值干嘛用呢？能判断出高低电平还不够？

user: user-0
content: 引用 6 楼 reFreever 的回复:如果只是计算峰值点个数，可以试着先进行滤波将数据平滑处理，将噪声的波幅减小。  现在内存上存在这么一段数列，通过什么方法，实现“先进行滤波将数据平滑处理，将噪声的波幅减小”的目的？谢谢

user: user-10
content: 含有噪声的图片在实际环境中的原始数据是这样显示的吗？ 这噪声频率有点低，貌似还是挺有规律的、 可以根据已知的波幅大小与波峰之间的距离设置阀值：当前峰值点离上个峰值点的横向最小距离与纵向最小距离，若找到一个峰值首先判断横纵距离是否大于最小阀值。 如果只是计算峰值点个数，可以试着先进行滤波将数据平滑处理，将噪声的波幅减小。

user: user-0
content: 在算法处理上，本人粗陋浅薄，恳请大家不吝指教，非常感谢！
user-0 提问: 这里人多,继续来借人气!

回复:
user: user-1
content: 热情帮顶!!!

user: user-2
content: 接10分！楼主别小气啊！

user: user-3
content: 记得是。。。

user: user-0
content: 问题已解决快来占楼散粉!

user: user-4
content: 不明觉厉

user: user-5
content: 问题好复杂的样子
user-0 提问: makefile求助

回复:
user: user-1
content: 提醒：makefile里面的Tab字符别让无良编辑器给替换成空格了。

user: user-0
content: 我写了个socket的程序，在函数结尾处，gcc老爆错误 error: extended registers have no high halves 怎么回事啊？  IPCHandle ipc_client_init(char *server_ip, unsigned short port) { 	int fd; 	struct sockaddr_in addr; 	struct in_addr server;  	fd = socket(AF_INET, SOCK_STREAM, 0); 	if (fd < 0) 		goto err;  	memset(&addr, 0, sizeof(addr)); 	addr.sin_family = AF_INET; 	addr.sin_port = htons(port);  	if (server_ip) { 		//if (inet_aton(server_ip, &server) == 0) 			//goto close_err; 		addr.sin_addr.s_addr = server.s_addr; 	} else 		addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);  	if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) 		//.goto close_err; 	sock_keepalive(fd); 	return fd;  close_err: 	close(fd); err: 	return -1; }

user: user-2
content: 16进制看看你的回车对不对。
user-0 提问: 不知道怎么构建数据结构

回复:
user: user-1
content: 三角网属于水准网吧.  三角网的每个点的数据,就是坐标和高程,坐标是经度纬度,高程是海拔高度.

user: user-2
content: 那个 WINDOWS游戏编程大师技巧 和 DirectX 9.0 3D游戏开发编程基础   DirectX 里面  就有类似关于三角形点的结构体定义吧 你看看适合你不
user-0 提问: glibc 库函数变量没有定义

回复:
user: user-1
content: LZ都是在哪些目录下找定义？

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:[quote=引用 2 楼 u011751581 的回复:] 可是glibc里确实没有这些类型的定义啊。楼上谷歌的那个.h文件在glibc里压根就没有 unix不是linux[/quote]   麻烦楼上的说清楚点嘛。真心猜不透你说的啥呀

user: user-0
content: 麻烦楼上的说清楚点嘛。真心猜不透你说的啥呀

user: user-2
content: 引用 2 楼 u011751581 的回复:可是glibc里确实没有这些类型的定义啊。楼上谷歌的那个.h文件在glibc里压根就没有 unix不是linux

user: user-0
content: 可是glibc里确实没有这些类型的定义啊。楼上谷歌的那个.h文件在glibc里压根就没有

user: user-2
content: https://www.google.com.hk/#newwindow=1&q=vm_prot_t&safe=strict

user: user-0
content: 引用 6 楼 user-3 的回复:#include <sys/mman.h>  void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);    为啥要看全部源码？ 部分代码可能不在glibc，而在内核。  哥哥，内核中也没有这个类型的定义。

user: user-2
content: 引用 5 楼 u011751581 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] [quote=引用 2 楼 u011751581 的回复:] 可是glibc里确实没有这些类型的定义啊。楼上谷歌的那个.h文件在glibc里压根就没有 unix不是linux[/quote]   麻烦楼上的说清楚点嘛。真心猜不透你说的啥呀 [/quote] 搜索结果里面不是说这是unix源代码里面的吗？

user: user-3
content: #include <sys/mman.h>  void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);    为啥要看全部源码？ 部分代码可能不在glibc，而在内核。
user-0 提问: 一段程序,ubuntu 12.04下编译运行提示段错误 (核心已转储),windows下正常

回复:
user: user-1
content: 引用 2 楼 xuch318 的回复:那在代码里怎么修改可以使t[]放在可以执行的内存区呢？  通过mprotect()修改页属性

user: user-0
content: gdb下出错是在call *%rax，也就是在跳转到t所在地址时出错，指令有错误的话应该是跳转过去后再出错的吧

user: user-2
content: 引用 1 楼 truelance 的回复:在linux下,可能t[]所在的内存页没有设置可执行权限, 因此你试图把它当代码执行, 就会触发错误 这可能是一个原因。 另外，可能你这些指令执行序列本身就有问题。

user: user-0
content: 那在代码里怎么修改可以使t[]放在可以执行的内存区呢？

user: user-1
content: 在linux下,可能t[]所在的内存页没有设置可执行权限, 因此你试图把它当代码执行, 就会触发错误

user: user-0
content: 引用 5 楼 truelance 的回复:[quote=引用 2 楼 xuch318 的回复:] 那在代码里怎么修改可以使t[]放在可以执行的内存区呢？  通过mprotect()修改页属性[/quote] 谢谢,可行
user-0 提问: 求助，十六进制字符转为字符串的问题，有代码，请问错误原因。

回复:
user: user-1
content: 学习了，

user: user-2
content: 我自己试了一下，并没有出现你所说的那种情况（0xF5做sprintf后，token获得结果为“FFFFFFF5”）  我是这么做的：#include <stdio.h> #include <string.h>  #define LEN 2  int main(int argc, char** argv) { 	int nums[LEN] = {0x02, 0xf5};  	char tmp[] = "00"; 	char result[512] = {0};  	for(int i=0; i<LEN; ++i) 	{ 		sprintf(tmp, "%02x", nums[i]); 		strcat(result, tmp); 	}  	return 0; }

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:sprintf(token, "%02X", (unsigned char)Hex[i]);  确实是这个问题呀，看到FFFFFF我怎么没想到呢。 非常感谢

user: user-3
content: sprintf(token, "%02X", (unsigned char)Hex[i]);

user: user-3
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-4
content: int i = 0; char token[3] = {0,0,0}; for (...) {   sprintf(token, "%02X", Hex[i]); token[2] = '\0'   result[i*2] = token[0];   result[i*2+1] = token[1]; }  试试  token[2] = '\0'  不一定需要
user-0 提问: 关于不同文件之间的值传递

回复:
user: user-1
content: 你这交叉包含了……新手代码结构设计不好经常的，用全局变量吧……简单点。

user: user-2
content: 个人意见，不如用全局变量来的简单直接。

user: user-3
content: include b.c中这个函数所在的头文件就能调用该函数了

user: user-4
content: 引用 3 楼 q422513331 的回复:其实感觉主要是我这边逻辑有点乱了，我这样问吧，假如我在a.c文件中的某个函数中跑了    LocalDateTime(StartTime, &StartDate);得到了StartDate的值需要用在b.c文件中，那我应该怎么做，StartTime又是a.c文件中某个模块的局部变量，应该没法直接调用到另一个文件中的吧？就像写一个接口直接把StartDate的值传递过去，这接口逻辑上要怎么写？  谢谢 如果你没使用多线程技术，那么你所有的代码都是顺序执行的，两个函数之间只有先后顺序，跟它们是否处在一个文件中没有任何关系 所有的模块都是由main函数直接调用或间接调用的，调用第一个模块时返回那个局部变量保存在main函数的一个变量里，调用第二个模块时把这个变量传进去

user: user-0
content: 其实感觉主要是我这边逻辑有点乱了，我这样问吧，假如我在a.c文件中的某个函数中跑了    LocalDateTime(StartTime, &StartDate);得到了StartDate的值需要用在b.c文件中，那我应该怎么做，StartTime又是a.c文件中某个模块的局部变量，应该没法直接调用到另一个文件中的吧？就像写一个接口直接把StartDate的值传递过去，这接口逻辑上要怎么写？  谢谢

user: user-5
content: 不明白你的疑问在哪里？直接引用b.c里边的函数不就完了（顶多加个函数声明）

user: user-4
content: int x = a(); b( x );

user: user-6
content: //b.h int getVar();  //its implementation is in b.c    //a.c #include <b.h>  void foo() {    //....    int v = getVar();    //.... }
user-0 提问: socket通信，client显示send成功但是server收不到任何东西??

回复:
user: user-1
content: server 好像不是c/c++

user: user-2
content: 请注意成功地完成send()调用并不意味着数据传送到达。 5.1.19 send() 简述：    向一个已连接的套接口发送数据。       #include <winsock.h>       int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);       s：一个用于标识已连接套接口的描述字。    buf：包含待发送数据的缓冲区。    len：缓冲区中数据的长度。    flags：调用执行方式。     注释：    send()适用于已连接的数据报或流式套接口发送数据。对于数据报类套接口，必需注意发送数据长度不应超过通讯子网的IP包最大长度。IP包最大长度在WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。如果数据太长无法自动通过下层协议，则返回WSAEMSGSIZE错误，数据不会被发送。    请注意成功地完成send()调用并不意味着数据传送到达。    如果传送系统的缓冲区空间不够保存需传送的数据，除非套接口处于非阻塞I/O方式，否则send()将阻塞。对于非阻塞SOCK_STREAM类型的套接口，实际写的数据数目可能在1到所需大小之间，其值取决于本地和远端主机的缓冲区大小。可用select()调用来确定何时能够进一步发送数据。    在相关套接口的选项之上，还可通过标志位flag来影响函数的执行方式。也就是说，本函数的语义既取决于套接口的选项也取决于标志位。后者由以下一些值组成：  值      意义  MSG_DONTROUTE   指明数据不选径。一个WINDOWS套接口供应商可以忽略此标志；参见2.4节中关于SO_DONTROUTE的讨论。  MSG_OOB     发送带外数据（仅适用于SO_STREAM；参见2.2.3节）。     返回值：    若无错误发生，send()返回所发送数据的总数（请注意这个数字可能小于len中所规定的大小）。否则的话，返回SOCKET_ERROR错误，应用程序可通过WSAGetLastError()获取相应错误代码。     错误代码：    WSANOTINITIALISED：在使用此API之前应首先成功地调用WSAStartup()。    WSAENETDOWN：WINDOWS套接口实现检测到网络子系统失效。    WSAEACESS：要求地址为广播地址，但相关标志未能正确设置。    WSAEINTR：通过一个WSACancelBlockingCall()来取消一个（阻塞的）调用。    WSAEINPROGRESS：一个阻塞的WINDOWS套接口调用正在运行中。    WSAEFAULT：buf参数不在用户地址空间中的有效位置。    WSAENETRESET：由于WINDOWS套接口实现放弃了连接，故该连接必需被复位。    WSAENOBUFS：WINDOWS套接口实现报告一个缓冲区死锁。    WSAENOTCONN：套接口未被连接。    WSAENOTSOCK：描述字不是一个套接口。    WSAEOPNOTSUPP：已设置了MSG_OOB，但套接口非SOCK_STREAM类型。    WSAESHUTDOWN：套接口已被关闭。一个套接口以1或2的how参数调用shutdown()关闭后，无法再用sned()函数。    WSAEWOULDBLOCK：    WSAEMSGSIZE：套接口为SOCK_DGRAM类型，且数据报大于WINDOWS套接口实现所支持的最大值。    WSAEINVAL：套接口未用bind()捆绑。    WSAECONNABORTED：由于超时或其他原因引起虚电路的中断。    WSAECONNRESET：虚电路被远端复位。

user: user-3
content: 请先学会使用抓包软件比如wireshark

user: user-0
content: 没人吗？？。。。。。
user-0 提问: 一个错误程序带来的问题~~求指点~~

回复:
user: user-1
content: 引用 4 楼 huoqingna2332 的回复:明显是多了一个回车符，如果要别人的结果的话，代码增加处理回车符的程序。  while((ch=getchar())!='#') 		{  			if(ch!='\n') 				printf("Step 1\n"); 			else 				continue; 			if(ch=='b') 				break; 			else if(ch!='c') 			{ 				if(ch!='g') 					printf("Step 2\n"); 				printf("Step 3\n"); 			} 		}   增加如果遇到回车符，就continue，这样执行结果就是别人做出来的结果了。

user: user-1
content: 明显是多了一个回车符，如果要别人的结果的话，代码增加处理回车符的程序。  while((ch=getchar())!='#') 		{  			if(ch!='\n') 				printf("Step 1\n"); 			else 				continue; 			if(ch=='b') 				break; 			else if(ch!='c') 			{ 				if(ch!='g') 					printf("Step 2\n"); 				printf("Step 3\n"); 			} 		}

user: user-2
content: 需要吸收回车符，你每次输入一个字符然后有还有一个回车符

user: user-3
content: #include<stdio.h> int main(void) {     char ch;     while((ch=getchar())!='#')     {         if(ch!='\n')             printf("Step 1\n");         if(ch=='b')             break;         else if(ch!='c')         {             if(ch!='g')                 printf("Step 2\n");                 printf("Step 3\n");         }         while((ch = getchar()) != '\n') 	    ;     }     printf("Done!\n");     return 0; }

user: user-4
content: 比如，你输入的是q，然后回车，即输入了两个字符：'q' + '\n'。'\n'就会打印"Step 2"和"Step 3"。
user-0 提问: 各位大神有没有打包的适合c语言初学着敲的程序代码，求支援啊

回复:
user: user-1
content: 书上的示例程序就可以，多看书，多敲代码。我基本上都是多看书的，因为书上的代码出错率低

user: user-0
content: 引用 3 楼 oYinGui1 的回复:把书看了，课后习题做了就够。。要编好的你去背代码？知一不知二有什么意思不是背代码，我背那玩意干嘛，练敲代码的速度

user: user-2
content: 引用 5 楼 u013720580 的回复:引用 3 楼 oYinGui1 的回复:把书看了，课后习题做了就够。。要编好的你去背代码？知一不知二有什么意思不是背代码，我背那玩意干嘛，练敲代码的速度 你这个有点像中国足协搞得体能测试，测试踢足球的跑步速度。

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

user: user-4
content: 引用 5 楼 u013720580 的回复:引用 3 楼 oYinGui1 的回复:把书看了，课后习题做了就够。。要编好的你去背代码？知一不知二有什么意思不是背代码，我背那玩意干嘛，练敲代码的速度 把书上的敲个几十遍，速度就上去了。

user: user-4
content: 把书看了，课后习题做了就够。。要编好的你去背代码？知一不知二有什么意思

user: user-0
content: 我现在才刚学没两天，自己编还不会，我想要编好的，我直接输，就像练打字一样

user: user-5
content: 当当网《C++程序设计案例分析》，很多C程序： 第1章c++语言程序设计起步 　案例一自然数e的计算 　案例二产生10个随机数 　案例三求等式中方框里的数 　案例四四渠注水 第2章基本算法策略 　案例一鸡兔同笼问题 　案例二完全数 　案例三货币兑换问题 　案例四勾股数 　案例五打印年历 　案例六字符串的复制和连接 　案例七求支付方法的种类 第3章数据的组织(数组、指针、函数、结构体) 　案例一自由落体 　案例二回文数猜想 　案例三大赛评分 　案例四八进制、十进制、十六进制数之间的直接转换 　案例五姓名查找 　案例六电影票房排行榜 　案例七兔子繁殖问题 　案例八汉诺塔问题 　案例九学生信息管理系统 第4章数据的组织(类和对象、继承)  第4章开始C++程序。
user-0 提问: ZJU pat1012 通不过，求帮助

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:if (i==N)	printf("N/A"); 改为 if (i==N)	printf("N/A\n"); 即可AC.  太感谢了，我检查了好久，没想到就差了一个细节

user: user-1
content: if (i==N)	printf("N/A"); 改为 if (i==N)	printf("N/A\n"); 即可AC.
user-0 提问: 有没有知道树的序列化与反序列化

回复:
user: user-1
content: 《算法精解（C语言实现）》

user: user-2
content: 是。。。。。

user: user-3
content: 比如:     _30_    /    \      10    20  /     /  \ 50    45  35 就可以输出：30 10 50 # # # 20 45 # # 35 # #  反序列话的时候可以利用递归构造。

user: user-3
content: 你按照顺序打印就好了（先序、中序、后序），之后按顺序取回数据然后重新构造下，如果左\右节点为空，可以输出特殊字符表示。  至于Java直接输出对象，的确是我孤陋寡闻了。

user: user-0
content: 之前找到过那篇代码。我只想要个思路。。晓得怎么存，然后怎么重建，代码得自己写。。。

user: user-3
content: 看下这个吧：http://blog.chinaunix.net/uid-24981687-id-351667.html

user: user-3
content: 作为对象存？？啥意思？存些啥？类型信息，然后用反射重新构造该对象？  不是应该像反序列化Json一样，把字符串反过来构造成对象么？存的时候是字符串输出到文件上啊！！

user: user-0
content: 谢谢解答。但是怎么作为一个对象存啊？

user: user-4
content: 可以这么实现，不过严格来讲存的应该是一个object，像Java一样 纯属个人理解
user-0 提问: 求大神帮助，关于fopen的一点问题

回复:
user: user-1
content: 不懂的问，不过记得给分

user: user-1
content: 还有第三点，fgets函数的参数你用错了

user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  #define MAXSIZE 1000  int main() {     FILE *fp;     char input[MAXSIZE];     char output[MAXSIZE];     int in_len=0,ou_len=0;     fp=fopen("answer","r");      if(fp == NULL)     {         perror("fopen");         return 1;     }           while( fgets(input,MAXSIZE,fp)!=NULL )     {         in_len=strlen(input);         printf("number %d\n",in_len);         if(in_len>ou_len)         {             strcpy(output,input);             ou_len=in_len;             output[ou_len]='\0';         }     }      printf("%s,%d",output,ou_len);     fclose(fp);     return 0; } 以上是正确的代码。你的逻辑基本没有问题，但是小的细节有错 1）计算长度最好用strlen()函数 2）字符数组最后的字符为‘\0’或者0

user: user-2
content: output[ou_len]='0'这一句改不改成‘\0’都没问题

user: user-2
content: 改为fgets(input,MAXSIZE,fp)， fp=fopen("D:\\abc.txt","r+"); 这样可以免得无文件读取，刚弄出来，有人已经发了，

user: user-3
content: while( fgets(input,MAXSIZE, fp)!=NULL ) /*   **    你写错了! 其他的没仔细看。  */

user: user-4
content: FILE *fp=NULL;

user: user-5
content: 仅供参考#include <stdio.h> #include <string.h> #define MAXLEN 1000 char ln[MAXLEN]; FILE *f; int i,z; int b,n,L; int main(int argc,char **argv) {     if (argc<2) {         printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);         return 1;     }     f=fopen(argv[1],"r");     if (NULL==f) {         printf("Can not open file [%s]!\n",argv[1]);         return 2;     }     z=0;     b=0;     n=0;     L=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         L=strlen(ln);         if ('\n'==ln[L-1]) {             if (0==z) {                 for (i=0;i<L-1;i++) {                     if (!(' '==ln[i] || '\t'==ln[i])) break;                 }                 if (i<L-1) z=1;//当前行不是空行             }             if (0==z) b++; else n++;             z=0;         } else {             if (0==z) {                 for (i=0;i<L;i++) {                     if (!(' '==ln[i] || '\t'==ln[i])) break;                 }                 if (i<L) z=1;//当前行不是空行             }         }     }     fclose(f);     if (L>0 && '\n'!=ln[L-1]) {         if (0==z) b++; else n++;//最后一行末尾无'\n'也计算     }     printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n);     return 0; }

user: user-6
content: output[ou_len]='0'; 应该改为 output[ou_len]= '\0'; 其他的没细看
user-0 提问: 用C/C++如何生成特定值的不重复的随机数？

回复:
user: user-1
content: 不懂

user: user-2
content: 思路就是使用在循环中 使用rand()%5产生一个随机索引，将其值与第i个数组值互换（循环结束后，数组顺序已被打乱）

user: user-3
content: 引用 2 楼 z84616995z 的回复:[quote=引用 1 楼 misakamm 的回复:] int map[] = {1,4,7,10,13}; while (xxx) {     i = rand() % 5;     xxx = map[i];     xxxxx; } 美女！ 首先谢谢你给我提供了一个思路，其次有没有不用数组保存的方法啊？如果用数组保存，那就要另外开辟内存空间增加了内存消耗。因为我的代码中已经有一个数组了，而我实际的想法是就在这个数组中，1,4,7,10,13这几个数随机赋值给array[1],array[4],array[7],array[10],array[13]，也就是数组下标和他的值范围都是在这5个数1,4,7,10,13中[/quote] 那你(rand() % 5) * 3 + 1不就好了？

user: user-0
content: 引用 1 楼 misakamm 的回复:int map[] = {1,4,7,10,13}; while (xxx) {     i = rand() % 5;     xxx = map[i];     xxxxx; } 美女！ 首先谢谢你给我提供了一个思路，其次有没有不用数组保存的方法啊？如果用数组保存，那就要另外开辟内存空间增加了内存消耗。因为我的代码中已经有一个数组了，而我实际的想法是就在这个数组中，1,4,7,10,13这几个数随机赋值给array[1],array[4],array[7],array[10],array[13]，也就是数组下标和他的值范围都是在这5个数1,4,7,10,13中

user: user-3
content: int map[] = {1,4,7,10,13}; while (xxx) {     i = rand() % 5;     xxx = map[i];     xxxxx; }
user-0 提问: 为什么要开辟内存空间？

回复:
user: user-0
content: 引用 6 楼 FrankHB1989 的回复:[quote=引用 2 楼 starytx 的回复:] person.name = "weidu23"， 这样只是让这个结构体对象的成员指针name指向了一个常量字符串，如果这个name只是只读，也未尝不可。  person->name="weidu23"; 首先要保证这个person指针是有效的（也就是要指向一个可用的对象），Person *person 只这样定义一个指针，就直接person->name是不可以的，因为这个指针person没有指向一个可用的东西，是野指针 字符串字面量不保证是常量。 Person *person是半个声明，不一定是定义。 另外在C的语境下常量不是强调不可修改的意思。  引用 3 楼 baichi4141 的回复:你申请的内存在你释放之前都归你使用 不是你申请的内存即使你用指针指向它，它什么时候被用来干什么也不受你控制  例如person.name = "weidu23"这条语句，你的name指针的确指向了一块内存，但这块内存在大多数编译器上是不可写的 例如person.name = 5，你的name指针的确指向了内存中地址为5的一块内存，但这块内存随时可能被用来做任何事情，你读出来的数据随时都可能和之前不同，你写进去的数据可能下一秒钟就会被覆盖  不是强迫你必须用指针，而是不用指针有些事你就做不到。 person.name = "weidu23"是表达式不是语句。 [/quote]  原来如此 ！！！

user: user-1
content: 指针要有所指，就这么简单。

user: user-2
content: 学java的 应该也知道栈 堆 静态区的区别吧

user: user-3
content: 引用 2 楼 starytx 的回复:person.name = "weidu23"， 这样只是让这个结构体对象的成员指针name指向了一个常量字符串，如果这个name只是只读，也未尝不可。  person->name="weidu23"; 首先要保证这个person指针是有效的（也就是要指向一个可用的对象），Person *person 只这样定义一个指针，就直接person->name是不可以的，因为这个指针person没有指向一个可用的东西，是野指针 字符串字面量不保证是常量。 Person *person是半个声明，不一定是定义。 另外在C的语境下常量不是强调不可修改的意思。  引用 3 楼 baichi4141 的回复:你申请的内存在你释放之前都归你使用 不是你申请的内存即使你用指针指向它，它什么时候被用来干什么也不受你控制  例如person.name = "weidu23"这条语句，你的name指针的确指向了一块内存，但这块内存在大多数编译器上是不可写的 例如person.name = 5，你的name指针的确指向了内存中地址为5的一块内存，但这块内存随时可能被用来做任何事情，你读出来的数据随时都可能和之前不同，你写进去的数据可能下一秒钟就会被覆盖  不是强迫你必须用指针，而是不用指针有些事你就做不到。 person.name = "weidu23"是表达式不是语句。

user: user-3
content: 具体到LZ的问题，字符串字面量"weidu23"是具有静态存储的数组类型对象，仍然不是“不用分配”——它的存储是预先分配好的。 但是修改字符串字面量也是UB，程序行为无法预测。如果你要改，当然得另外分配空间了。不能静态确定要多少并且以后可能要改的，对C来说首先就考虑malloc。

user: user-3
content: 根本原因在于C提供不了让你随便能用的抽象。 指针抽象的内容从实现角度来说一般就是地址空间。C的实现一般没法要给你独占存储——对于宿主实现（操作系统）可能有共享内存，对于独立实现可能有I/O寄存器映射——而且不同实现之间行为差异可以很大，因此C根本没办法规范出随便一个指针指向的东西就能用，没分配的乱间接操作下场就是undefined了事。 而Java这类语言的GC是建立在更严格受限的宿主环境（例如应用虚拟机）上的，完全不给你这种层次上的抽象，也不考虑这种问题了。

user: user-4
content: 你申请的内存在你释放之前都归你使用 不是你申请的内存即使你用指针指向它，它什么时候被用来干什么也不受你控制  例如person.name = "weidu23"这条语句，你的name指针的确指向了一块内存，但这块内存在大多数编译器上是不可写的 例如person.name = 5，你的name指针的确指向了内存中地址为5的一块内存，但这块内存随时可能被用来做任何事情，你读出来的数据随时都可能和之前不同，你写进去的数据可能下一秒钟就会被覆盖  不是强迫你必须用指针，而是不用指针有些事你就做不到。

user: user-5
content: person.name = "weidu23"， 这样只是让这个结构体对象的成员指针name指向了一个常量字符串，如果这个name只是只读，也未尝不可。  person->name="weidu23"; 首先要保证这个person指针是有效的（也就是要指向一个可用的对象），Person *person 只这样定义一个指针，就直接person->name是不可以的，因为这个指针person没有指向一个可用的东西，是野指针

user: user-6
content: 因为指针只是一个地址，不使用new的话无法引发构造函数，那么person对象就是不存在的。
user-0 提问: 如何用C编写程序用SOCKET通信通过服务器转发信息。

回复:
user: user-0
content: 引用 5 楼 kernel2010 的回复:楼主的问题解决了吗？？？我也遇到了类似的问题，求指导啊 才看见，你的应该解决了吧，如果解决了，可以再指导一下。

user: user-1
content: 楼主的问题解决了吗？？？我也遇到了类似的问题，求指导啊

user: user-0
content: 引用 2 楼 ovoovo 的回复:http://blog.chinaunix.net/uid-10747583-id-2984318.html 这个也可以，学会网上找资料。 这个连接里的是简单的用那几个函数啊，能不能用些select什么的，还有send recv时不要指定1024什么的吧？因为你都不知道你要收多少就写1024，这是给初学者的例子吧，我现在是想要实现那种准确的收发包。组包什么的，详细到发送接收，验证，都怎么做呢？

user: user-2
content: 建议先学会使用抓包软件比如wireshark

user: user-3
content: http://blog.chinaunix.net/uid-10747583-id-2984318.html 这个也可以，学会网上找资料。

user: user-3
content: 组包参考这个： http://bbs.chinaunix.net/thread-1955264-1-1.html  其它流程跟socket建立连接，发送信息一样。
user-0 提问: c语言的函数不懂，求帮助

回复:
user: user-1
content: 楼主仔细阅读代码，静下心来调试。

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

user: user-3
content: sardata* const* src_list到底是个什么类型的指针？ 就像sardata **src_list一样，就是一个指向src_list的指针的指针。先当const不存在  Const加在你里面是什么作用呢，是指*src_list不能修改。
user-0 提问: 语句不懂

回复:
user: user-1
content: 引用 8 楼 redcat0858 的回复:这个.... 标准的送分贴么。来晚了 +1 楼主是不是睡着了…………。

user: user-2
content: 缺少分号。

user: user-3
content: Pmax等于P加j加5乘以i

user: user-4
content: 这个.... 标准的送分贴么。来晚了

user: user-5
content: 就是这样，喵

user: user-6
content: 引用 楼主 u013761183 的回复:pmax=p+5*i+j pmax是最大值？

user: user-7
content: 引用 2 楼 u012421456 的回复:[quote=引用 1 楼 user-10 的回复:] 一个算数表达式，还能如何不懂。。。 这有啥不懂啊？ p的值加上5乘以i的值再加上j的值，最终将总和赋给pmax[/quote] 难道我看错了

user: user-8
content: *这个运算符分为两种，作为单目运算符时和指针有关，*两边都有值的时候就是作为普通的乘号

user: user-9
content: 是指针与二维数组吗？

user: user-7
content: 引用 1 楼 user-10 的回复:一个算数表达式，还能如何不懂。。。 这有啥不懂啊？ p的值加上5乘以i的值再加上j的值，最终将总和赋给pmax

user: user-10
content: 一个算数表达式，还能如何不懂。。。
user-0 提问: 有个问题想不明白，windows程序设计第4章

回复:
user: user-0
content: 茅塞顿开，忘记了一个重要的东西，输出进行对比！  谢谢各位的回复！

user: user-1
content: 在调用SetScrollPos函数之前，你调用GetScrollPos 函数的返回值时不会变的，因为你更新的新位置的值没有同步到控件中去

user: user-2
content: 打印哈　GetScrollPos (hWnd,SB_VERT)　的值同时打印　iScrollPos　看看不就知道了！

user: user-3
content: 你怎么确定GetScrollPos返回的就是这个iScrollPos的值？
user-0 提问: 为什么这样做下标不越界啊？

回复:
user: user-1
content: 大家来帮忙看看啊

user: user-2
content: printf("%d\n",testArr[6]);  这里虽然越界, 但编译器不会报, 因为它不检查. 再有,这里虽然你幸运的能访问, 但以后并不保证仍能正常工作, 并且值是未知的,随机的. 并且, 这里仅仅是读取, 所以出现问题的可能性还小些, 如果你是越界写入. 那结果就不知道了. 你可以这样试试. int main(void) {     int a=0,b=1,c=2;    int testArry[3];    int d=3,e=4,f=5;    testArry[4] = 10;    testArry[-1] = 30;    testArry[5] = 40;    //到这里,你再输出a,b,c,d,e,f的值,看看它们发生了什么变化吧. }

user: user-3
content: 1. C编译器不会检查数组越界 2. sizeof是在编译时就被计算的。编译器只知道a是一个声明的定义在其他文件中的一个数组，你让它求sizeof，太难为机器了吧？

user: user-4
content: 越界了 谁说没越界的

user: user-5
content: C本来的标准中并没有规定编译器必须检查数组边界，超过的部分在内存中按 下标*元素字节数 偏移而访问。

user: user-6
content: 在main.cpp这个编译单元看到的testArr只知道是个数组，但是不知道对应的维数，这样的类型 被称为 incomplete type，不能用于sizeof运算的。  虽然不知道维数，但是知道元素类型，所以可以按索引去访问其中的元素。
user-0 提问: ACM 趣题 知道答案 求给why

回复:
user: user-0
content: 引用 6 楼 misakamm 的回复:[quote=引用 5 楼 u011488256 的回复:] [quote=引用 4 楼 misakamm 的回复:] [quote=引用 2 楼 u011488256 的回复:] 众所周知，WL大神有个用来卖萌的昵称叫做Araleii，此外，他还有个英文名叫做Bill。然而，随着WL大神被越来越多的人膜拜景仰，他的两个名字都想获得WL大神的冠名权，并由此展开了一场旷日持久的争夺战。 最终，Araleii和Bill决定用一种古老的方式进行决战——取石子。由于他们两个都不想占对方便宜，于是他们决定用计算机等概率随机生成两个[1,N]范围内的整数，并找来两堆石子，数量分别为刚才生成的两个数。然后，他们开始轮流取石子，每次他们可以任意挑选其中一堆石子并从中取出任意多个（取过的石子就不能再取了），当一个人没石子可取时他就输了。 他们约定Araleii作为先手（即Araleii先取，然后Bill取，再然后Araleii取……），现在，Bill想知道自己获胜的概率是多少（由于Araleii和Bill都是WL大神的名字，继承了WL大神的无上智慧，所以他们每次取石子时都会采取最优策略）。 这无非就是求生成的两个数相等的概率，貌似输出1/n就肯定对了[/quote] 为什么啊为什么  求解释！ 我感觉题目都没怎么读懂[/quote] 先想想为啥不相等就是先手胜呗[/quote]  我看题目说两堆石头，那么就应该输入两个数字，分别代表石头的个数，但是程序输入只有一个数字！这是我第一个纳闷的地方！              2.两堆石头，他说一个人可以取任意个，那么就是如果第一堆石头谁拿走最后一个，另外一个可以直接把另外一堆石头全部拿完，那么输赢就定了 是这样分析么？

user: user-1
content: 引用 5 楼 u011488256 的回复:[quote=引用 4 楼 misakamm 的回复:] [quote=引用 2 楼 u011488256 的回复:] 众所周知，WL大神有个用来卖萌的昵称叫做Araleii，此外，他还有个英文名叫做Bill。然而，随着WL大神被越来越多的人膜拜景仰，他的两个名字都想获得WL大神的冠名权，并由此展开了一场旷日持久的争夺战。 最终，Araleii和Bill决定用一种古老的方式进行决战——取石子。由于他们两个都不想占对方便宜，于是他们决定用计算机等概率随机生成两个[1,N]范围内的整数，并找来两堆石子，数量分别为刚才生成的两个数。然后，他们开始轮流取石子，每次他们可以任意挑选其中一堆石子并从中取出任意多个（取过的石子就不能再取了），当一个人没石子可取时他就输了。 他们约定Araleii作为先手（即Araleii先取，然后Bill取，再然后Araleii取……），现在，Bill想知道自己获胜的概率是多少（由于Araleii和Bill都是WL大神的名字，继承了WL大神的无上智慧，所以他们每次取石子时都会采取最优策略）。 这无非就是求生成的两个数相等的概率，貌似输出1/n就肯定对了[/quote] 为什么啊为什么  求解释！ 我感觉题目都没怎么读懂[/quote] 先想想为啥不相等就是先手胜呗

user: user-0
content: 引用 4 楼 misakamm 的回复:[quote=引用 2 楼 u011488256 的回复:] 众所周知，WL大神有个用来卖萌的昵称叫做Araleii，此外，他还有个英文名叫做Bill。然而，随着WL大神被越来越多的人膜拜景仰，他的两个名字都想获得WL大神的冠名权，并由此展开了一场旷日持久的争夺战。 最终，Araleii和Bill决定用一种古老的方式进行决战——取石子。由于他们两个都不想占对方便宜，于是他们决定用计算机等概率随机生成两个[1,N]范围内的整数，并找来两堆石子，数量分别为刚才生成的两个数。然后，他们开始轮流取石子，每次他们可以任意挑选其中一堆石子并从中取出任意多个（取过的石子就不能再取了），当一个人没石子可取时他就输了。 他们约定Araleii作为先手（即Araleii先取，然后Bill取，再然后Araleii取……），现在，Bill想知道自己获胜的概率是多少（由于Araleii和Bill都是WL大神的名字，继承了WL大神的无上智慧，所以他们每次取石子时都会采取最优策略）。 这无非就是求生成的两个数相等的概率，貌似输出1/n就肯定对了[/quote] 为什么啊为什么  求解释！ 我感觉题目都没怎么读懂

user: user-1
content: 引用 2 楼 u011488256 的回复:众所周知，WL大神有个用来卖萌的昵称叫做Araleii，此外，他还有个英文名叫做Bill。然而，随着WL大神被越来越多的人膜拜景仰，他的两个名字都想获得WL大神的冠名权，并由此展开了一场旷日持久的争夺战。 最终，Araleii和Bill决定用一种古老的方式进行决战——取石子。由于他们两个都不想占对方便宜，于是他们决定用计算机等概率随机生成两个[1,N]范围内的整数，并找来两堆石子，数量分别为刚才生成的两个数。然后，他们开始轮流取石子，每次他们可以任意挑选其中一堆石子并从中取出任意多个（取过的石子就不能再取了），当一个人没石子可取时他就输了。 他们约定Araleii作为先手（即Araleii先取，然后Bill取，再然后Araleii取……），现在，Bill想知道自己获胜的概率是多少（由于Araleii和Bill都是WL大神的名字，继承了WL大神的无上智慧，所以他们每次取石子时都会采取最优策略）。 这无非就是求生成的两个数相等的概率，貌似输出1/n就肯定对了

user: user-0
content: 请问 L上 misaka 我的上一 道题目为什么那样做？ 是什么数学问题啊 想不通原理

user: user-0
content: 众所周知，WL大神有个用来卖萌的昵称叫做Araleii，此外，他还有个英文名叫做Bill。然而，随着WL大神被越来越多的人膜拜景仰，他的两个名字都想获得WL大神的冠名权，并由此展开了一场旷日持久的争夺战。 最终，Araleii和Bill决定用一种古老的方式进行决战——取石子。由于他们两个都不想占对方便宜，于是他们决定用计算机等概率随机生成两个[1,N]范围内的整数，并找来两堆石子，数量分别为刚才生成的两个数。然后，他们开始轮流取石子，每次他们可以任意挑选其中一堆石子并从中取出任意多个（取过的石子就不能再取了），当一个人没石子可取时他就输了。 他们约定Araleii作为先手（即Araleii先取，然后Bill取，再然后Araleii取……），现在，Bill想知道自己获胜的概率是多少（由于Araleii和Bill都是WL大神的名字，继承了WL大神的无上智慧，所以他们每次取石子时都会采取最优策略）。

user: user-1
content: 题目不完整，补一下题目
user-0 提问: 单片机串口通信会造成数码管显示抖动，请高手指教

回复:
user: user-1
content: 那是因为串口通信花了较长时间，而你的数码管又是靠分时扫描来显示的，所以会闪烁。 你可以把分时扫描的部分放到Timer中断去做，主循环只是单纯的printf并改变显示的值而已。  引用 楼主 xiaoqiaoliushui12308 的回复:以下是主要程序内容，T1中断作为通信中断程序，写入单片机后，每次与电脑通信都会造成数码管抖动，请指教解决方法，不胜感谢。 void main(void) {	       Init();  //初始化中断函数 	while(1) 	{ 		 Feng_Xiang();	//获得风向值 		 Feng_Su();	  //获得风速值 		 if(flag_chuankou==1) 		 { 			 ES=0;//关闭串口中断 			   TI=1;//发送结束 			   printf("The fengxiang is \n",Wind); 			   //printf("The fengsu \n",x); 			   while(!TI); 			   TI=0; 			   ES=1; 			  flag_chuankou=0; 		 } 	 	 Display();  //数码管显示函数 	}				 } void Timer1() interrupt 4 { 	if (RI) //接收到字节 	{ 		RI = 0; //手动清零接收中断标志位 	   flag_chuankou=1;	 	} }

user: user-2
content: 从你的程序中，仅仅看到是定时通过串口更新要显示的数据，闪烁和发送数据快慢没有关系。 因为你给的信息不够，不知道你使用的数码管显示方式是动态显示的还是静态显示的，如果是动态的，那么刷新速率慢可能会闪烁（注意：是显示刷新速率，不是你更新数据的速率），如果是静态的，那可能是别的原因。

user: user-0
content: [quote=引用 2 楼 turingo 的回复:] 那是因为串口通信花了较长时间，而你的数码管又是靠分时扫描来显示的，所以会闪烁。 你可以把分时扫描的部分放到Timer中断去做，主循环只是单纯的printf并改变显示的值而已。  程序共三个中断，T0负责记录脉冲个数，T1中断函数，T2计数1秒，请问放到哪个中断里面，跪求指教

user: user-0
content: 回复于： 2014-02-25 11:44:39 那是因为串口通信花了较长时间，而你的数码管又是靠分时扫描来显示的，所以会闪烁。 你可以把分时扫描的部分放到Timer中断去做，主循环只是单纯的printf并改变显示的值而已。  程序共三个中断，T0负责记录脉冲个数，T1中断函数，T2计数1秒，请问放到哪个中断里面，跪求指教

user: user-3
content: 楼上很有道理

user: user-4
content: 推荐使用portmon软件辅助调试串口通讯程序。
user-0 提问: ACM 趣题求解

回复:
user: user-1
content: 某人攀登天梯，有时一步上1级，有时一步上2级，高兴了还一步跨上3级。 现在求登上n级阶梯，共有多少种不同的走法？ 1级阶梯，只有1种走法。 2级阶梯，2种走法，可以每步上1级，也可以一步上2级。 3级阶梯有4种走法。可以每步上1级；可以先上1级再一步上2级；可以先一步上2级再上1级；可以一步上3级。 4级阶梯共7种走法。可以先上1级，在第1级基础上再向上走3级，有4种走法；可以先一步上2级，在第2级基础上再向上走2级，有2种走法；可以先一步上3级，在第3级基础上再向上走1级，有1种走法。 …… n级阶梯共有m种走法。因为可以先上n-3级，在第n-3级基础上再向上一步走3级；可以先上n-2级，在第n-2级基础上再向上一步走2级；可以先上n-1级，在第n-1级基础上再向上一步走1级。  输入样例： 输入：4     输出：7                    输入：10    输出：274  code        1 #include<iostream.h>       2        3 int main(){       4 long long num[73];       5 int i,n;       6 for(num[0]=num[1]=1,num[2]=2,i=3;i<73;i++){       7 num[i]=num[i-1]+num[i-2]+num[i-3];       8 }       9 while(std::cin>>n)std::cout<<num[n]<<std::endl;      10 return 0;      11 }   给分吧

user: user-2
content: 这个和超级台阶的思路是一样的，简单的动态规划问题。

user: user-3
content: 引用 10 楼 FancyMouse 的回复:[quote=引用 6 楼 misakamm 的回复:] [quote=引用 5 楼 lin5161678 的回复:] [quote=引用 1 楼 misakamm 的回复:] dp（听说最少六字） 字数不够可以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk[/quote] [/quote]你好，球关注，球勾搭。

user: user-4
content: 引用 10 楼 FancyMouse 的回复:[quote=引用 6 楼 misakamm 的回复:] [quote=引用 5 楼 lin5161678 的回复:] [quote=引用 1 楼 misakamm 的回复:] dp（听说最少六字） 字数不够可以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk[/quote] [/quote]

user: user-5
content: 引用 6 楼 misakamm 的回复:[quote=引用 5 楼 lin5161678 的回复:] [quote=引用 1 楼 misakamm 的回复:] dp（听说最少六字） 字数不够可以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk[/quote]

user: user-6
content: 引用 8 楼 u011488256 的回复:[quote=引用 2 楼 Automation_dmu 的回复:] 设n升的次数为f(n),可列出递归式： f(n) = f(n-1)+f(n-2)+f(n-3);  (n>0)        1                   ;  (n=0)        0                   ;  (n<0) 实现上可以做张表记录f(n)的值避免递归时计算重复子问题。 我想问的是 为什么n 等于前面3个数相加？[/quote]动态规划的方法分解问题： n升，第一口喝掉1升，剩下n-1升，可以把n-1升看成一个新问题，它的解是f(n-1);2、3升同理。 所以f(n)= f(第一口喝掉1升的情况)+f(第一口喝掉2升的情况)+f(第一口喝掉3升的情况) = f(n-1)+f(n-2)+f(n-3);

user: user-0
content: 引用 2 楼 Automation_dmu 的回复:设n升的次数为f(n),可列出递归式： f(n) = f(n-1)+f(n-2)+f(n-3);  (n>0)        1                   ;  (n=0)        0                   ;  (n<0) 实现上可以做张表记录f(n)的值避免递归时计算重复子问题。 我想问的是 为什么n 等于前面3个数相加？

user: user-0
content: 引用 6 楼 misakamm 的回复:[quote=引用 5 楼 lin5161678 的回复:] [quote=引用 1 楼 misakamm 的回复:] dp（听说最少六字） 字数不够可以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk[/quote] dp 是什么 ··其实程序知道 只是不知道为什么这么做

user: user-4
content: 引用 5 楼 lin5161678 的回复:[quote=引用 1 楼 misakamm 的回复:] dp（听说最少六字） 字数不够可以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk

user: user-7
content: 引用 1 楼 misakamm 的回复:dp（听说最少六字） 字数不够可以加各种格式

user: user-8
content: 一个简单的递归 f(n) = f(n-1) + f(n-2) + f(n-3) 初始条件 f(1)=1, f(2)=2, f(3)=4

user: user-9
content: 变形斐波拿契数列30不大，递归＋大数应该就可以？

user: user-6
content: 设n升的次数为f(n),可列出递归式： f(n) = f(n-1)+f(n-2)+f(n-3);  (n>0)        1                   ;  (n=0)        0                   ;  (n<0) 实现上可以做张表记录f(n)的值避免递归时计算重复子问题。

user: user-4
content: dp（听说最少六字）
user-0 提问: 输出三个数的最大数

回复:
user: user-1
content: 引用 6 楼 u013761183 的回复:新人不知道怎么回复，1楼12行不能后定义，其他的很好，2楼第10行不懂哪位大神能解释下，4楼你的回答不准确<3里不能取到3.使用引用，被引用的楼层的人就可以看到了。 这是一个二元表达式，比如a=A?x:y;意思就是说，判断A，A为真，就a=x，如果A为假，就b=x。

user: user-2
content: 引用 2 楼 Falleyes 的回复:#include<stdio.h> void main() { 	int i, max = -32728; 	int a[3]; 	printf("请输入三个整数:\n"); 	for (i = 0; i<3; i++) 	{ 		scanf("%d", &a[i]); 		max = max>a[i] ? max : a[i]; 	} 	printf("最大的数是:%d\n", max); }+1

user: user-3

user: user-4
content: 一楼的第12行意思是假设最大值max是第一个，即a[0]，然后用这个max 分别与a[1],a[2]比较，将比较后大的值放在 max中，这样每次比较完后，max中保存的都是最大值。  至于2楼的第10行 max = max>a[i] ? max : a[i]; 意思也很简单，就是一个三目运算符，如果max>a[1]成立的话，就执行max=max;不成立的话，max=a[i];其实跟1楼没区别，懂了没！

user: user-4
content: 一楼的第12行意思是假设最大值max是第一个，即使[0]，然后用这个max 分别与a[1],a[2]比较，将比较后大的值放在 max中，这样每次比较完后，max中保存的都是最大值。  至于2楼的第10行 max = max>a[i] ? max : a[i]; 意思也很简单，就是一个三目运算符，如果max>a[1]成立的话，就执行max=max;不成立的话，max=a[i];其实跟1楼没区别，懂了没！

user: user-0
content: 新人不知道怎么回复，1楼12行不能后定义，其他的很好，2楼第10行不懂哪位大神能解释下，4楼你的回答不准确<3里不能取到3.

user: user-0
content: 第12行有错，不能后定义

user: user-5
content: 第一个for循环语句出错了。 按照for(i=0;i<3;i++) 这里就有a[0],a[1],a[2],a[3]，四个数需要输入了。 同理第二个for循环语句也错了,应该为for(i=0;i<2;i++) 最后的if(a[i]<a[i+1])  a[i]=a[i+1]也出现了错误。这里可以设一个全局变量max,通过max与数组里面的数比较然后得到最大的值

user: user-6
content: 楼上的正解，可以看看排序算法，这样的问题还是比较简单的。

user: user-1
content: #include<stdio.h> void main() { 	int i, max = -32728; 	int a[3]; 	printf("请输入三个整数:\n"); 	for (i = 0; i<3; i++) 	{ 		scanf("%d", &a[i]); 		max = max>a[i] ? max : a[i]; 	} 	printf("最大的数是:%d\n", max); }

user: user-7
content: #include<stdio.h> void main() { int i; int a[3]; printf("请输入三个整数:\n"); for(i=0;i<3;i++) { scanf("%d",&a[i]);  } int max_a = a[0] ; for(i=1;i<3;i++) { if(max_a<a[i]) max_a=a[i]; printf("最大的数是:%d\n",max_a); } }
user-0 提问: 求一个简单程序，用C编写程序自动填写网页表单并提交 构建HTTP数据包的方式

回复:
user: user-1
content: 帮你顶一下，多查查资料，先把问题想清楚，抓住问题的重点，分解成小问题再去问。

user: user-0
content: 不懂解决问题啊，自顶到能明白为止

user: user-0
content: 引用 4 楼 hdt 的回复:http://msdn.microsoft.com/zh-cn/library/vstudio/sb35xf67%28v=vs.110%29.aspx不好意思。。研究半天也不知道怎么是用，能再讲多一点吗

user: user-2
content: http://msdn.microsoft.com/zh-cn/library/vstudio/sb35xf67%28v=vs.110%29.aspx

user: user-0
content: 引用 2 楼 hdt 的回复:干嘛不直接用WinInet都不知道那是什么，在一间公司实习，给这个任务后就不管了，有什么相应的书能参考参考嘛

user: user-2
content: 干嘛不直接用WinInet

user: user-0
content: 没人吗，很急啊
user-0 提问: 关于sizeof的疑问

回复:
user: user-1
content: 建议楼主这辈子不用sizeof

user: user-2
content: 确定是9不是10？ "123456789"的类型是char[10]。 另外，printf类型不匹配UB。size_t用%zu，如果不支持就转成unsigned然后%u。

user: user-3
content: 引用 1 楼 lin5161678 的回复:"123456789"是一个数组  数组不是指针  结果是10，运行出来的。数组最后有个\0，也要算的

user: user-4
content: sizeof 是关键字而不是函数，你完全可以写一个：  int i;  sizeof i;

user: user-5
content: printf("%d",sizeof("123456789"));运行结果是10，而且"123456789"是字符串数组作为参数传递.

user: user-6
content: 引用 11 楼 u012963125 的回复:cha* str="123456789"; printf("%d\n",sizeof(str));//4,sizoef求指针时始终是4 printf("%d\n",sizeof("123456789"));//10,你之所以得9，是忽略了'\0'，字符串都以'\0'结尾，在这里不能将 "123456789"看做是指针，它存在于只读常量区，而指针的地址是可以改变的。求sizeof("123456789")时只能一个一个的加，不要漏了'\0'就行了 ding

user: user-7
content: cha* str="123456789"; printf("%d\n",sizeof(str));//4,sizoef求指针时始终是4 printf("%d\n",sizeof("123456789"));//10,你之所以得9，是忽略了'\0'，字符串都以'\0'结尾，在这里不能将 "123456789"看做是指针，它存在于只读常量区，而指针的地址是可以改变的。求sizeof("123456789")时只能一个一个的加，不要漏了'\0'就行了

user: user-8
content: 综合1楼和2楼的说法基本就比较全面了。

user: user-9
content: 123456789是一个char型数组的9个元素，所以结果是9

user: user-10
content: 引用 6 楼 u013606574 的回复:是一个int型的数组，123456789是一个int型数组中的一个元素对于C是一个 char数组  对于 C++是一个 const char 数组 反正不会是int数组

user: user-9
content: 是一个int型的数组，123456789是一个int型数组中的一个元素

user: user-11
content: 引用 楼主 Mr_warm 的回复:我是这样想的，"123456789"实质上代表的是一个char*指针，照这样想，应该是4才对呀！  不是char*，而是char const [10]

user: user-12
content: "123456789"是个字符数组你这测出来的是这个数组的大小。再说这个测出来不是9是10.应为数组后面还有“/0”的结束标志。'12'这个才是字符常量啊这个测出来的就是4。但是char的范围有限啊！

user: user-13
content: 这儿应该是10而不是9吧？

user: user-14
content: sizeof 不是函数调用所以数组名不会退化为指针

user: user-10
content: "123456789"是一个数组  数组不是指针
user-0 提问: 如何比较两个程序的效率和所占资源

回复:
user: user-1
content: 只是三个数找最大的，显然第二个容易理解，这就够了。

user: user-2
content: clock_t start=clock(); 	int n=10000000; 	while (n--) 	{ 		max(1,2,3); 	} 	clock_t finish=clock(); 	double duration=(double)(finish-start)/CLOCKS_PER_SEC; 	printf("%f\n",duration);

user: user-3
content: 使用top命令。

user: user-4
content: 如果比较简单的，自己循环一万遍，在开始和结束的时候调用计时函数即可。 当然复杂的话，也可以用正规的工具测试。

user: user-0
content: 引用 1 楼 user-5 的回复:试试valgrind 愿闻其详

user: user-5
content: 试试valgrind
user-0 提问: 自++

回复:
user: user-1
content: sizeof不是函数，在编译时已经ok

user: user-2
content: sizeof在编译期大小已经定了的

user: user-3
content: 当表达式作为sizeof的操作数时，它返回表达式的计算结果的类型大小，但是它不对表达式求值！

user: user-4
content: sizeof不是函数,是编译的时候执行的。

user: user-5
content: 不管如何你i等于几，i都是个整数，相当于sizeof(int)，当然j就等于4了。

user: user-0
content: 引用 3 楼 richyhuang 的回复:sizeof不是函数,是编译的时候执行的。我想起来了，sizeof()是关键字

user: user-6
content: //看下代码对应的汇编你就更清楚了 int i=3;//对应汇编 001B209E  mov         dword ptr [i],3   int j; j = sizeof(++i+ ++i); //对应汇编，看到了吧，直接=4,i根本没计算。 001B20A5  mov         dword ptr [j],4    原因楼上已经说了。

user: user-7
content: sizeof的结果是类型的长度啊

user: user-8
content: sizeof不是函数

user: user-9
content: sizeof的东西并不真正运算
user-0 提问: 接口与实现

回复:
user: user-1
content: 由于1003.1标注定义了一个接口(interface)而不是一种实现(implementation)，所以并不区分系统调用和库函数。标准中所有的例程都成为函数。    因此，POSIX的本质是接口。接口就是两种事物的一种沟通方式。POSIX接口连接了OS和应用程序。符合POSIX接口的OS和应用程序就可以无缝交流。vfs是OS的一部分，它符合了POSIX接口。所以我们的文件系统只要满足了VFS，就符合了POSIX标准。但是具体的实现与POSIX无关。
user-0 提问: 面试题，关于递归的

回复:
user: user-1
content: foo(x*x , n/2);比这里x*x来看，应该可以猜测出是a, 面试题的话，用2，3这样的数字代入验证下。

user: user-2
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-3
content: 选a，举个简单的数，在心里跑一遍就出来了

user: user-4
content: 选择：(a) x^n (x的n次幂) 举两个数字想着跑一遍就行了

user: user-5
content: 选A吧。。。。。

user: user-6
content: A 。。。。。。。。。。

user: user-7
content: A is right

user: user-8
content: 选(a) x^n (x的n次幂)
user-0 提问: 矩阵向量相乘出现很多-1#IND,是哪里出了问题?

回复:
user: user-1
content: y中元素的值超过了float的最大值，改为double

user: user-2
content: 你的数组分配的太大了，在堆上分配连续那么多float类型长度的内存，是很有可能失败的。

user: user-3
content: m 文件可以直接编译成C，matlab好像有这个功能。

user: user-4
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。

user: user-4
content: 不是你说的“在matlab中有命令A=orth（A'）'，可以有正交化的结果”吗？ 你不会 用C/C++编写将要算的数据保存到纯文本文件比如data.txt中，启动matlab并运行一段matlab程序，功能为读文件data.txt中的数据，进行orth运算，将结果保存到纯文本文件比如result.txt中，退出matlab，C/C++发现matlab退出，就读文件result.txt的内容 吗？

user: user-0
content: 我把N从10000缩小到了100，就没有IND了， 不是很明白

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 谢谢回答，但是我的程序全部是C/C++编写的啊
user-0 提问: 设置问题。

回复:
user: user-1
content: 参考http://www.eshuba.com/soft/16436.htm  引用 楼主 u013571362 的回复:我在VC6.0中，界面中所有的东西都是用控件做的，然后通过代码实现去功能。界面如图：  我想给界面弄张图片作为背景，请问怎么弄。
user-0 提问: c语言   结构体 用fwrite存储问题

回复:
user: user-0
content: 错误原因我大致明白了，可是当我用fp=fopen("f:\\student.txt","w")时，发现结果是一样的，

user: user-1
content: 因为除了可见字符之外的数据在文本里以文本方式查看肯定都是乱码. 因为你保存的是二进制数据.

user: user-0
content: 重新写了下实例，求解：为何存储的是乱码呢？ #include "stdio.h" #include "stdlib.h" typedef struct student { char num[10]; char name[15]; int cgrade; int mgrade; int egrade; int total; float ave; int mingci; }; //定义每条记录或节点的数据结构，标记为：node typedef struct node { struct student data; struct node *next; }Node,*Link; void main() { Node *p; FILE *fp; p=(Node*)malloc(sizeof(Node)); strcpy(p->data.num,"2014"); strcpy(p->data.name,"wangyun"); p->data.cgrade=34; p->data.mgrade=54; p->data.egrade=67; p->data.total=p->data.cgrade+p->data.mgrade+p->data.egrade; p->data.ave=(float)(p->data.total/3); p->data.mingci=0; p->next=nullptr; if((fp=fopen("f:\\student.txt","wb+"))==nullptr) { printf("fp error!"); return; } while(p) { fwrite(p,sizeof(Node),1,fp); p=p->next; } fclose(fp); getchar(); }

user: user-0
content: 恩，多谢，我写错了！你知道那个存储乱码的问题怎么解决吗？

user: user-2
content: p->data.num[10]='yu'; p->data.name[15]='li'; 给数组赋值不是这样的，使用strncpy之类的函数

user: user-3
content: 呵呵，帮顶  http://bbs.csdn.net/topics/330233222

user: user-0
content: 问题解决了， 参考了http://bbs.csdn.net/topics/330233222，多谢，多谢！
user-0 提问: 求助。程序不长，但不是自己编的，看不懂。求注释，求讲解

回复:
user: user-1
content: 你描述再清晰点。  不然看着头疼

user: user-2
content: 看代码最累了，我看不下来！

user: user-3
content: 进来了，只是看不懂

user: user-4
content: void split(NODE **head){ //分割链表   int i,sum,most,mostidx,hasbigger;   NODE *p,*q;   LISTNODE *listnodep;   for(i=0,most=0;;i++){ //找最大位和1最多的位     hasbigger=0;     for(p=*head,sum=0;p;p=p->next){       sum+=((p->num&(1<<i))>0);       if((p->num)>>i)hasbigger=1;     }     if(sum>most){       most=sum;       mostidx=i;     }     if(hasbigger==0)break;   }   listnodep=malloc(sizeof(LISTNODE));   add_listnode(listnodep);   listnodep->listhead=NULL;   for(p=*head;p;p=p->next){     if((p->num&(1<<mostidx))==0){ //将1最多位为0的数加入另一链表       if(p==*head){         *head=p->next;         add_node(&listnodep->listhead,p);         p=*head;       }else{         for(q=*head;q->next!=p;q=q->next);         q->next=p->next;         add_node(&listnodep->listhead,p);         p=q;       }     }   } } int count_maxbit(NODE *head){ //计算链表中所有数字的二进制最大位   NODE *p;   int i,hasbigger;   for(i=0;;i++){     hasbigger=0;     for(p=head;p;p=p->next){       if((p->num)>>i)hasbigger=1;     }     if(hasbigger==0)break;   }   return i; } 举手之劳！