Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 有关内联汇编的问题 , 调用C函数Release版本奔溃了! ?

回复:
user: user-0
content: 引用 2 楼 passion_wu128 的回复:这很好解决啊，你按你的参数调用sprintf函数，然后调试，在汇编窗口就能看到正确的汇编码了。（最好在release下看，debug下没有优化，有很多冗余的指令） 对比之后 , release C的导入函数 第一个跳转就有问题 , 直接到程序领空的空内存去了.

user: user-0
content: 引用 1 楼 lovesmiles 的回复:sprintf是变长参数的函数  变长参数的入栈似乎有点不一样 应该不是参数问题 , 那为什么在Debug模式下没问题 ?

user: user-0
content: 引用 2 楼 passion_wu128 的回复:这很好解决啊，你按你的参数调用sprintf函数，然后调试，在汇编窗口就能看到正确的汇编码了。（最好在release下看，debug下没有优化，有很多冗余的指令） 这个我知道, 关键怎么解决啊

user: user-1
content: 这很好解决啊，你按你的参数调用sprintf函数，然后调试，在汇编窗口就能看到正确的汇编码了。（最好在release下看，debug下没有优化，有很多冗余的指令）

user: user-2
content: sprintf是变长参数的函数  变长参数的入栈似乎有点不一样
user-0 提问: 关于输入类型的练习    求改错~~~

回复:
user: user-1
content: 楼主的代码有两个问题： 1. 第一次运行到while(n != 0)的时候，没有给n赋值，所以n可能是任何值，有可能是0。给n随便赋值一个非0值可以解决这个问题。 2. 输入0的时候，也会执行一次循环并输出0(A)。在scanf("%d",&n);后面加一行if (n==0) break;可以解决这个问题。

user: user-2
content: #include <stdio.h>  int main() { 	int i, n, m, sum;  	while(scanf("%d", &n), n){ 		sum = 0; 		for(i = 0; i< n; ++i){ 			scanf("%d", &m); 			sum += m; 		} 	printf("%d\n", sum); 	} 	return 0; }

user: user-1
content: while(scanf("%d",&n) == 1 && n != 0) {  for(i = 1,A = 0;i <= n;i++) { scanf("%d",&a); A += a; } printf("%d\n",A); }
user-0 提问: 求解答：没有与这些操作数匹配的 "[]" 运算符

回复:
user: user-1
content: 一楼最后一行写错了，应该是 void SortIntegerArray (plinfo a[]) { a[j] ... }  其实直接改成 void SortIntegerArray (plinfo g[]) 这样没准也能通过编译而且正确运行，但是不要这么做。同名的全局变量和函数参数看着太乱

user: user-1
content: plinfo g[10000000]; SortIntegerArray函数里面出现了两个g，他们是不同的变量。一个是全局变量plinfo g[]，另一个是函数参数plinfo g 编译器会把它解释为函数参数，不是数组，所以就不能用[] 有两个解决办法： 1. 函数不要参数，直接用全局变量 plinfo g[10000000]; void SortIntegerArray () { g[j] ... } 2. 函数的参数改个名字，不要和全局变量冲突 plinfo g[10000000]; void SortIntegerArray (plinfo a) { a[j] ... }
user-0 提问: c初学者又来新问题咯

回复:
user: user-1
content: 11.2.2  gets（）函数 gets（）（代表 get string） 函数对于交互式程序非常方便。它从系统的标准输入设备（通常是键盘）获得一个字符串。因为字符串没有预定的长度，所以 gets（）需要知道输入何时结束。解决办法是读字符串直到遇到一个换行字符（\n），按回车键可以产生这个字符。它读取行符之前（不包括换行符）的所有字符，在这些字符后添加一个空字符（\0），然后把这个字符串交给调用它的程序。它将读取换行符并将其丢弃，这样下一次读取会在新的一行开始。 出自C Primer Plus (fifth eidtion)

user: user-2
content: gets应该会把换行符读进去，你调试一下看看
user-0 提问: 新手求助，找不到问题啊

回复:
user: user-1
content: 引用 8 楼 an_lery 的回复:太粗心了 ，问题已解决 谢谢各位！ 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

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

user: user-2
content: #include "car1.h"

user: user-0
content: 太粗心了 ，问题已解决 谢谢各位！

user: user-3
content: #include car1.h

user: user-3
content: #unclude car1.h

user: user-4
content: 你的头文件名字是不是写错了，到底是Car1.h 还是Car.h?

user: user-0

user: user-5
content: CharPtr的定义呢
user-0 提问: 多线程服务器，求大神改错

回复:
user: user-1
content: 引用 2 楼 user-2 的回复:加一个信号处理，处理Ctrl +D 信号，信号处理里刷新所有流再退出 同意

user: user-2
content: 加一个信号处理，处理Ctrl +D 信号，信号处理里刷新所有流再退出

user: user-0
content: 请大神帮帮忙啊
user-0 提问: 请教，用字符串做参数和用字符数组做参数有何不同

回复:
user: user-1
content: “ssssssss”本身被保存在文字常量区域，str[20] = "sssssssss"被保存在栈空间中。当作为参数的时候str可以通过地址找到整个字符串，而"ssssssss"在你的C语言程序中没有标识，所以编译器本身是找不到的，因此需要直接将整个字符串压入栈中（如果优化的话还可能也是将str指针入栈，因为它们的内容相同）。知道这个就够了。无论是gcc编译器还是vs编译器都有自己处理C语言规定的方式，具体方式我们不得而知，而且编译器本身将C转换为指令的时候，存在很多的优化，背着编程人员作了很多事情。所以我觉得楼主理解到它们保存在什么地方就够了。个人意见，仅供参考！

user: user-2
content: 不是直接把整个串压栈吧？能给提供个截图吗？ 据说C语言从不会直接操纵整个字符串的，无论你使用数组还是常量字符串，都是只使用它的首地址的。 是不是LZ看错了？

user: user-3
content: c语言啊  纯概念问题 有点记不清了  我大概给你说下  你知道对于c语言来说，有五种存储空间吧  这五种具体的名字我记不清了  总之里面有一种是专门存放字符串常量的 就像你写的“sssss”  所以如果你直接显示“ssssss” 那么就会直接把这个字符串拿来  这就是为什么你看到压栈的是整个字符串 而如果是通过str而拿到字符串的话，那么首先，str是一个普通的数组  或者说 它就是个普通的数据  所以自然是压它入栈了  然后才是通过它找到对应的字符串  我想你是忽视了这里的存储空间的不同才有的这个问题   只要你知道，str和“sssss”不在同一种存储空间里  你应该就明白了吧～  原谅我忘了具体的概念名词～～自己上网查查吧

user: user-4
content: 我觉得，不论使用字符串还是字符数组，进栈的都是地址引用，不会直接操作堆上的实际存储值。

user: user-0
content: 谢谢楼上几位的回答啊，经过查看，发现字符串常量是被储存在.rodata区域的
user-0 提问: 编程挑战--小女孩问题 代码求解，不知怎么不符合要求

回复:
user: user-1
content: #include<stdio.h> void main(){     unsigned long int n;     while (scanf_s("%d", &n) != EOF){         if (n % 8 == 1)             printf("%d\n", 1);         else if (n % 8 == 5)             printf("%d\n", 5);         else if (n % 8 == 3 || n % 8 == 7)             printf("%d\n", 3);         else if (n % 8 == 4 || n % 8 == 6)             printf("%d\n",4);         else printf("%d\n",2);     } }

user: user-2
content: unsigned long int n; 	while (scanf_s("%d", &n) != EOF) 	{ 		if (1<=n && n<=5)printf("%d\n", n); 		else 		{ 			unsigned long int m=(n-5)%8; 			switch (m) 			{ 				case 0:printf("%d\n", 5);break; 				case 1:case 7:printf("%d\n", 4);break; 				case 2:case 6:printf("%d\n", 3);break; 				case 3:case 5:printf("%d\n", 2);break; 				case 4:printf("%d\n", 1);break; 			} 		} 	}

user: user-2
content: unsigned long int n; 	while (scanf_s("%d", &n) != EOF) 	{ 		if (1<=n && n<=5)printf("%d\n", n); 		else 		{ 			unsigned long int m=(n-5)%8; 			switch (m) 			{ 				case 0:printf("%d\n", 5);break; 				case 1:case 7:printf("%d\n", 4);break; 				case 2:case 6:printf("%d\n", 3);break; 				case 3:case 5:printf("%d\n", 2);break; 				case 4:printf("%d\n", 1);break; 			} 		} 	}

user: user-0
content: 一个小女孩正在用左手手指数数，从1数到n。她从拇指算作1开始数起，然后，食指为2，中指为3，无名指为4，小指为5。接下来调转方向，无名指算作6，中指为7，食指为8，大拇指为9，如此反复。问最后会停在那个手指上？用编号1、2、3、4、5依次表示大拇指、食指、中指、无名指、小指。 输入格式： 输入多组数据。每组数据占一行，只包含一个整数n(1<=n<=1000000000)。 输出格式： 每组数据占一行，只包含一个介于1和5之间的整数，表示最后停留的手指。

user: user-0
content: 我贴错了  我发上去的就是没有_s的

user: user-3
content: 把  while (scanf_s("%d", &n) != EOF){ 上面这行代码中的 scanf_s 换成 scanf  就可以了

user: user-4
content: 你把题目条件发上来看看

user: user-5
content: scanf后面没有_s

user: user-6
user-0 提问: 串口长时间工作出现问题

回复:
user: user-1
content: 引用 3 楼 u010384159 的回复:谢谢赵4老师，我修改了程序，现在句柄数变化不大，但系统缓存以每秒加4的速度增加，这也是内存泄露吗？？ 多半是。

user: user-0
content: 谢谢赵4老师，我修改了程序，现在句柄数变化不大，但系统缓存以每秒加4的速度增加，这也是内存泄露吗？？

user: user-2
content: 不应该啊，贴点关键的句柄代码看看

user: user-1
content: 检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！
user-0 提问: socket编程，看些什么书？

回复:
user: user-1
content: 引用 11 楼 Daffodiles 的回复:各位：    9楼问题？ tcp/ip是协议， socket是编程接口， 这个两个基本都通用。

user: user-0
content: 各位：    9楼问题？

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

user: user-0
content: 用C语言开发IOS后台，看这三本书合适么？ 看完了，能开发什么类型应用？

user: user-0
content: 各位：   9楼问题？

user: user-3
content: linux高性能服务器编程

user: user-4
content: 引用 5 楼 Daffodiles 的回复:[quote=引用] 网络编程1，2卷  TCP/IP协议详解 卷1  2，3楼：   这三本书，有些像天书，怎办呢？[/quote]  引用 5 楼 Daffodiles 的回复:[quote=引用] 网络编程1，2卷  TCP/IP协议详解 卷1  2，3楼：   这三本书，有些像天书，怎办呢？[/quote] 一遍一遍看，一遍一遍实践

user: user-4
content: C APUE UNP1,2       TCP/IP  1

user: user-0
content: 引用网络编程1，2卷  TCP/IP协议详解 卷1  2，3楼：   这三本书，有些像天书，怎办呢？

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

user: user-5
content: TCP/IP协议详解 卷1 ，这个必须要看一下

user: user-6
content: 网络编程1，2卷

user: user-6
content: TCP/IP
user-0 提问: switch case里在case中加入函数,返回值给了谁?

回复:
user: user-1
content: 不明白， 你把函数返回值给 result，它还能跑到别的地方去？ 觉得你还是上代码比较好

user: user-0
content: 我在main中定义一个int result来村结果.return 应该返回给result;结果没给他

user: user-2
content: 引用计算接果然后返回该结果 返回哪里？

user: user-3
content: 感觉楼主的话情况较多，不妨上代码

user: user-4
content: 既然结果是给result， 为何要return ?  直接  赋值不就行？    或者你的计算是在另外函数进行？  那么把函数的结果return 再赋值给result

user: user-5
content: C语言是面向过程的语言，既然面向过程，他的牛逼之处在于使用了各种函数，LZ可把返回值放在任何函数中，先需要的位置调用这个函数，没有必要非得放在main函数里，当然c语言规定正常情况下，从main函数开始，从main函数结束

user: user-0
content: 如果switch在main里,是不是在case里不能使用return给数赋值?

user: user-6
content: 引用 2 楼 u013326283 的回复:我在main中定义一个int result来村结果.return 应该返回给result;结果没给他怎么可能用return给result在main里赋值呢
user-0 提问: C语言问题~

回复:
user: user-1
content: 引用 2 楼 relaxisland 的回复:1 你想访问 整数的某个位的的时候 比如一个班有 32个同学， 你不是用32个int，而是用一个int去表示各个同学考试是否几个，可以用如下方式设定获取的第N位同学的状态 score & 1<<n  2 变量的地址的长度是32位 或64位，地址的长度不影响变量的长度， 影响的可访问的地址的范围，也可以说存储变量的内存的数量  就比如 门牌号码的位数， 不影响 房子的大小， 但是影响可以标识的 房子的个数 三位数的门牌，只能访问999个房子，   3 这个基本不用操心，操作系统会根据当前的编码弄好的吧   o

user: user-2
content: 1 你想访问 整数的某个位的的时候 比如一个班有 32个同学， 你不是用32个int，而是用一个int去表示各个同学考试是否几个，可以用如下方式设定获取的第N位同学的状态 score & 1<<n  2 变量的地址的长度是32位 或64位，地址的长度不影响变量的长度， 影响的可访问的地址的范围，也可以说存储变量的内存的数量  就比如 门牌号码的位数， 不影响 房子的大小， 但是影响可以标识的 房子的个数 三位数的门牌，只能访问999个房子，   3 这个基本不用操心，操作系统会根据当前的编码弄好的吧

user: user-3
content: 1、一般情况下用的不多，就像goto几乎只在switch或多重循环时才可能用到 2、一楼的例子不错 3、网易MOOC翁恺的，或者郝斌的，都比较基础 4、自己动手，丰衣足食，多动手试试，要是出现你认为奇怪的现象，先谷歌百度，不明白可以来论坛问

user: user-4
content: 1按需要的的时候才做运算，比如x*2，这样的运算，左移一位就可以了。x/2，同样右移一位就行了。 2指针保存的是地址，所有变量的地址都是4字节。就像你家的门牌号，所有门牌号都一只占一个小格子，你邻居家50平方的房子，你家的面积是200平方米，所以会担心你家的门牌号和邻居一样大，就无法表示你家吗？地址和实际的住房是两个概念。  3不知道有什么好视频，看书是最好的吧 4你运算一下不就知道了吗？
user-0 提问: malloc分配内存失败

回复:
user: user-0
content: 引用 4 楼 user-1 的回复:[quote=引用 3 楼 whustyle 的回复:] [quote=引用 2 楼 user-1 的回复:] [quote=引用 1 楼 user-1 的回复:] 内存是按int[m][n]大小申请的，不要强制转换为double [m][n], 两者并不兼容。  由此可能引起越界访问，个种问题都可能发生。 [/quote]  我的程序需要大量地动态创建int 型和double型矩阵，那有什么好的方法没呢？[/quote] 你需要double [m][n],就申请 double[m][n], 不要申请 int[m][n][/quote] 好的，谢谢

user: user-1
content: 引用 3 楼 whustyle 的回复:[quote=引用 2 楼 user-1 的回复:] [quote=引用 1 楼 user-1 的回复:] 内存是按int[m][n]大小申请的，不要强制转换为double [m][n], 两者并不兼容。  由此可能引起越界访问，个种问题都可能发生。 [/quote]  我的程序需要大量地动态创建int 型和double型矩阵，那有什么好的方法没呢？[/quote] 你需要double [m][n],就申请 double[m][n], 不要申请 int[m][n]

user: user-0
content: 引用 2 楼 user-1 的回复:[quote=引用 1 楼 user-1 的回复:] 内存是按int[m][n]大小申请的，不要强制转换为double [m][n], 两者并不兼容。  由此可能引起越界访问，个种问题都可能发生。 [/quote]  我的程序需要大量地动态创建int 型和double型矩阵，那有什么好的方法没呢？

user: user-1
content: 引用 1 楼 user-1 的回复:内存是按int[m][n]大小申请的，不要强制转换为double [m][n], 两者并不兼容。  由此可能引起越界访问，个种问题都可能发生。

user: user-1
content: 内存是按int[m][n]大小申请的，不要强制转换为double [m][n], 两者并不兼容。
user-0 提问: 函数调用运行出错

回复:
user: user-1
content: 楼上正解。。。。

user: user-2
content: 返回的地址，为啥要=两边都加*呢，楼上正解

user: user-3
content: *g=*find_int(c,a,b); 这一句，把*号去掉  g=find_int(c,a,b);
user-0 提问: linux下多线程，只对共享资源进行读取，不写，会造成问题么？

回复:
user: user-1
content: 加锁就是应为怕其他线程在你读取数据的过程中，修改数据。 既然不写，那就不加锁了。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:早晚会写的。我预测  类似于启动的配置数据，把很多函数地址注册进去，然后，很多线程根据消息号会去到改地址

user: user-2
content: 在博物馆，你只是看，但还要保安干嘛

user: user-3
content: 只读不写不用加锁，读的数据不会发生改变，每个线程读的都是同样内容

user: user-4
content: 共享资源如果没有任何进程写入，完全不要需要加锁，注意是共享内存完全没有人写入

user: user-5
content: 只读不写不加锁没问题

user: user-6
content: 不需要加锁！

user: user-7
content: 早晚会写的。我预测

user: user-8
content: 我也感觉不写的话,不用加锁? 等大神来解释~

user: user-0

user: user-9
content: 感觉不会出问题啊
user-0 提问: 条件编译程序，错误，求教。

回复:
user: user-1
content: 你不是自己解决问题了吗 我一般用第二种 windebug的预编译条件就是这样的吧

user: user-0
content: 引用 3 楼 s_a_n_ 的回复:很显然第一个代码段是因为B30和A30都未定义，也就是说把VANTILATOR_TYPE定义成了空，而B30和A30都同样是空，所以两个#if都成立，因此两段代码都编译了。 谢谢啦

user: user-2
content: #define A #define B #define C  #ifdefine A  #elseif B  #else  #endif

user: user-3
content: 很显然第一个代码段是因为B30和A30都未定义，也就是说把VANTILATOR_TYPE定义成了空，而B30和A30都同样是空，所以两个#if都成立，因此两段代码都编译了。

user: user-4
content: 引用 1 楼 relaxisland 的回复:你不是自己解决问题了吗 我一般用第二种 windebug的预编译条件就是这样的吧+1
user-0 提问: 求两个极大数字的乘积没为什么这段程序在位数很大时便无法输出了?位数低的时候明明没问题的。。。

回复:
user: user-1
content: 引用a=(char*)malloc(sizeof(N));     b=(char*)malloc(sizeof(N));     c=(char*)malloc(sizeof(2*N)); 其中“ sizeof(N) ”错了；改为“ N ”，即：(char*)malloc(N)； sizeof(N)=4，是整形的大小..... ps:a,b,c,没有释放内存（虽然不会造成问题）。

user: user-2
content: 楼主试哪个数时没有输出结果？除了楼上说的，scanf中间最好加上空格

user: user-0
content: 太感谢了，就是sizeof（N）那里出的问题。
user-0 提问: 我用vc++6.0 写查IP地址的程序为什么只能查txt里的前面一点

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

user: user-2
content: 看到这么多fseek, 就感觉有哪里不对了.  你应该一个地方读取后, 再处理.  (如果文本不大的话).  fseek(fp,-1l,1);  这里的用法不知道是否对了, 每次都移动到  第三个参数的 1 是SEEK_CUR,  第二个参数-1, 表示前移一个.  又没看到移动到文本末尾的操作,  已经晕了.  自己下个断点, F10单步跟踪程序吧.

user: user-3
content: 代码格式太混乱 建议一个功能一个功能封装成函数 然后单步调 很快就找到问题所在

user: user-4
content: 支持单步调试

user: user-5
content: 代码太长，而且格式相当难看，不忍心看啊 不过还是看到了一个错误： while(a=fgetc(fp)!='\n') ==> while((a=fgetc(fp))!='\n') 赋值的优先级最低
user-0 提问: 菜鸟写的输入年月日求星期。

回复:
user: user-1
content: COleDateTime::GetDayOfWeek int GetDayOfWeek( ) const;  Return Value  The day of the week represented by the value of this COleDateTime object.  Remarks  Call this member function to get the day of the month represented by this date/time value. The COleDateTime class handles dates from 1 January 100 – 31 December 9999.

user: user-2
content: 记得是 《编程珠玑》 还是《代码之美》里有一个非常简短的算星期几的代码，但忘了怎么写的了

user: user-2
content: 引用 1 楼 user-4 的回复:一个常用的办法是用数组代替switch int days = { 0, 31, 59, 90, ... }； daysum += days[month]; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) daysum++;+1

user: user-3
content: #include<stdio.h>   // 自定义函数。 void week();                     // 星期 // 自定义变量。 int year, month, day;           // 年月日 int weeksum, calendarsum, animalsum; // 计算结果，星期，农历，生肖。 int main()  { 	printf("###输入年月日，格式为：年,月,日###\n"); 	scanf("%d,%d,%d", &year, &month, &day); // 输入年月日。 	week(); 	return 0; } void week()  { 	int yearsum, leapsum, aleapsum, daysum; 	yearsum = year - 1;//计算输入日期跟公元一年相差几年。 	aleapsum = yearsum / 4;//计算经过了几个闰年。 	leapsum = yearsum - aleapsum;//计算经过了几个平年。 	daysum = aleapsum * 366 + leapsum * 365;//计算经过的天数。 	switch (month)  	{ 		  case 1:daysum += 0;break; 		  case 2:daysum += 31;break; 		  case 3: 			if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) 				daysum += 60; 			else  				daysum += 59; 			break; 		  case 4:daysum += 90;break; 		  case 5:daysum += 120;break; 		  case 6:daysum += 151;break; 		  case 7:daysum += 181;break; 		  case 8:daysum += 212;break; 		  case 9:daysum += 243;break; 		  case 10:daysum += 273;break; 		  case 11:daysum += 304;break; 		  case 12:daysum += 334;break; 	} 		//经过的天数%7等于星期。 	weeksum = (daysum + day - 1) % 7; 	printf("你输入的日期为：星期%d\n", weeksum);   }  改了下可读性

user: user-4
content: 对于用户的任何输入，要判断他是否合法，比如是否输入了13月32日之类的。不能因为用户的非法输入导致数组越界等问题。 如果用switch，应该有default，处理用户输入13月的情况。 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) 这里最好加上括号，看着明确一点，而且不会出现优先级的问题。

user: user-4
content: 一个常用的办法是用数组代替switch int days = { 0, 31, 59, 90, ... }； daysum += days[month]; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) daysum++;
user-0 提问: 内存不够用的问题怎么解决？？

回复:
user: user-1
content: 引用 6 楼 whustyle 的回复:[quote=引用 4 楼 zxh707wk 的回复:] 优化数据结构，优化算法  老实说，我这样的算法确实蠢了点，目前还想不出有什么巧妙地设计数据结构和算法，来节省一点内存，我还有待学习[/quote]淡定。。。

user: user-0
content: 引用 4 楼 zxh707wk 的回复:优化数据结构，优化算法  老实说，我这样的算法确实蠢了点，目前还想不出有什么巧妙地设计数据结构和算法，来节省一点内存，我还有待学习

user: user-0
content: 引用 3 楼 bbs2241 的回复: double** E_inv = CreateMatrix(nBand,nBand);     E_inv = MatrixInverse(Ground_Cov,nBand);  内存泄露，改成  double** E_inv = MatrixInverse(Ground_Cov,nBand);  这个E_inv也得释放。其他的没细看  一语惊醒梦中人呐，按照您这样一改，100万次循环不要一分钟就顺利算完了。非常的感谢

user: user-1
content: 优化数据结构，优化算法

user: user-2
content: double** E_inv = CreateMatrix(nBand,nBand);     E_inv = MatrixInverse(Ground_Cov,nBand);  内存泄露，改成  double** E_inv = MatrixInverse(Ground_Cov,nBand);  这个E_inv也得释放。其他的没细看

user: user-0
content: 引用 1 楼 user-3 的回复:double** E_inv = CreateMatrix(nBand,nBand);     E_inv = MatrixInverse(Ground_Cov,nBand);   目测这里内存泄露 我把这里面的拿出来给你看吧，看不出来哪里泄露啊，求继续指点 //创建一个m行n列的double型矩阵 double** CreateMatrix(int m, int n) { 	double** Matrix; 	int i;     Matrix = (double **) malloc(sizeof(double *) * m);     for(i = 0; i < m; i++)     {             Matrix[i] = (double *) malloc(sizeof(double) * n);     }     return Matrix; }  //矩阵的求逆 double** MatrixInverse(double **A,int M)  { 	int i,j,k; 	double** A_inv = CreateMatrix(M,M); 	double** AE = CreateMatrix(M,2*M); 	for (i=0;i<M;i++) 	{ 		memset(A_inv[i],0,sizeof(double)*M); 		memset(AE[i],0,sizeof(double)*2*M); 	} 	for(i=0;i<M;i++)     {         for(j=0;j<M;j++)         {             AE[i][j]=A[i][j];         }     } 	for(i=0;i<M;i++)     {         for(j=M;j<2*M;j++)         {             if(i==(j-M))             {                 AE[i][j]=1;             }             else             {                 AE[i][j]=0;             }         }     } 	/*****************求逆模块***********************/     for(i=0;i<M;i++)     {         if(AE[i][i]==0)         {             for(k=i;k<M;k++)             {                 if(AE[k][k]!=0)                 {                     for(int j=0;j<2*M;j++)                     {                         double temp;                         temp=AE[i][j];                         AE[i][j]=AE[k][j];                         AE[k][j]=temp;                     }                     break;                 }             }             if(k==M)             {                 printf("该矩阵不可逆！\n");             }         }         for(j=2*M-1;j>=i;j--)         {             AE[i][j]/=AE[i][i];         }         for(k=0;k<M;k++)         {             if(k!=i)             {                 double temp=AE[k][i];                 for(j=0;j<2*M;j++)                 {                     AE[k][j]-=temp*AE[i][j];                 }             }         }     }     /*****************获取逆矩阵***********************/ 	 for(i=0;i<M;i++)     {         for(j=M;j<2*M;j++)         {             A_inv[i][j-M]=AE[i][j];         }     } 	 for (i=0;i<M;i++) 	 { 		 free(AE[i]); 		 AE[i] = NULL; 	 } 	 free(AE); 	 AE = NULL; 	 return A_inv; }

user: user-3
content: double** E_inv = CreateMatrix(nBand,nBand);     E_inv = MatrixInverse(Ground_Cov,nBand);   目测这里内存泄露
user-0 提问: 刚接触函数，调用求解

回复:
user: user-1
content: label1：     z = pd();         ge = z%10;         shi = (z/10)%10;         bai = (z/100)%10;         qian = (z/1000)%10;         wan = (z/10000)%10;         js(ge,shi,bai,qian,wan); goto label1;

user: user-2
content: 使用while循环，如果条件不满足直接退出

user: user-3
content: while (1) {         z = pd();         ge = z%10;         shi = (z/10)%10;         bai = (z/100)%10;         qian = (z/1000)%10;         wan = (z/10000)%10;         js(ge,shi,bai,qian,wan);         getch();         printf("\n");     } 加一个循环即可，注意的是要设定好结束循环的条件
user-0 提问: 好奇吗？

回复:
user: user-1
content: 引用 2 楼 dbzhang800 的回复:你是说变长数组么？  不好奇， C99标准 允许这种写法。GCC在C99之前也支持这种写法。+1，c99标准

user: user-0
content: 引用 2 楼 dbzhang800 的回复:你是说变长数组么？  不好奇， C99标准 允许这种写法。GCC在C99之前也支持这种写法。 那么问题来了，数组n到底是在堆上还是在栈上呢

user: user-2
content: 你是说变长数组么？  不好奇， C99标准 允许这种写法。GCC在C99之前也支持这种写法。

user: user-3
content: gcc下也可以通过。。。
user-0 提问: 有大约1万个文件，给你10个文件夹，把这1万个文件放到文件夹里，要求：这10个文件夹的大小基本相同。

回复:
user: user-1
content: 文件大小不能差太多，否则任何算法都没有办法: 比如一个差大文件(100G), 其他文件加起来不到1MB

user: user-1
content: 引用 4 楼 bjym1987 的回复:引用 3 楼 mujiok2003 的回复:最简单办法： 把文件按大小排好序,  第x个文件放入 x % / 10个文件夹中。 这方法 10文件夹 大小不是基本相同的，这样应该是递增的. 恩。 变一下就好了.  for(i = 0 ; i < file_number;) {   for(int j = 0; j < 10 &&  i < file_number;  ++j, ++i)   {      put file[i] to folder[j];   }     for(int j = 0; j < 10 &&  i < file_number;  ++j, ++i)   {      put file[i] to folder[9-j];   } }

user: user-2
content: 引用 3 楼 mujiok2003 的回复:最简单办法： 把文件按大小排好序,  第x个文件放入 x % / 10个文件夹中。 这方法 10文件夹 大小不是基本相同的，这样应该是递增的.

user: user-1
content: 最简单办法： 把文件按大小排好序,  第x个文件放入 x % / 10个文件夹中。

user: user-3
content: 这个应该是一个等份背包问题吧： 1、先得到1w个文件总的大小 T -> 每个目录分得 t=T/10(大概) 2、根据 t 的值来遍历每个文件，寻到累计和接近 t 的时候把这些文件归入一个目录里面（动态规划） 3、把已经加入到目录里面的文件从总的文件列表中去除 4、重复2-3步骤 直至总的文件列表为空  难点是接近值的确定，比如 t=10 ，那累计和达到9、9.1、...、10.1、...等是否达到要求。  个人觉得采用方差的方式应该更精确一点，10份目录的每个目录大小，与 t 进行方差计算，得出最小的就是最理想的平均分配方案又有一个问题就是如何分配10份目录的文件数，最笨也是最简单实现的就是穷举。。。  能力有限只能想到这么多

user: user-2
content: 你这不是要 读取每个文件大小，然后算下10等分值，然后按要求移过去就可以了吧

user: user-4
content: 我的想法： 如果不考虑细节和特殊情况的话：先读取每个文件大小后做累加得到总和后处于10得到一个平均值，得到平均值后就在读取一遍所有文件和文件大小并进行文件的复制还要计算你复制到每个文件夹下的文件总和大小并判断是否超出平均值.
user-0 提问: C语言地址问题

回复:
user: user-1
content: 引用 11 楼 b_j_m 的回复:你举的例子与你提的问题没有关系吧，你的举例，说的仅仅是数据的存储与变量地址间的关系。这跟变量地址的长度有什么联系呢？如果你对表达式int p=789; 不理解，那么应该认识什么是类型，什么是变量，什么是值。p变量这里声明为int类型，那么p变量这里被赋值为789. p是变量的名称，或者理解为一个被命名的地址，这个地址开始，用int类型的操作赋值，int类型如果是4个字节的宽度，那么这些字节存储的就是789的二进制值表示。数据一般按类型操作，所以变量的长度与他的类型有关。  是的，正是要说没有联系！各种号的长度和变量的存储空间没有联系！长度和总量有关系！相当数学中的取值范围——域！其实lz的问题得牵涉到计算机体系和组成——地址线的宽度决定地址的长度！

user: user-2
content: 内存是连续的，但不同类型的变量，所占的大小不同。 int32为4个字节。足以放下你那个789.下一个地址就不知道存的啥了

user: user-3
content: p的地址存的变量是789， 1245052+1是下一个地址，变量值未知

user: user-4
content: 一个整数只有一个地址，p没有地址，p只是一个符号。p所代表的变量才有地址。c语言中地址+1无意义，指针+1才有意义，因为地址是没有类型的，指针具有类型。

user: user-5
content: 参见1楼。。

user: user-6
content: 楼上已经说的很清楚了 1245052+1 这个是无意义的  应该这样 1245052+1*sizeof(int)  这样才是8的地址

user: user-7
content: 1 变量地址一般就是所谓的指针了，这个长度和系统编译器有关，32位机器的编译器一般是4个字节； 2 p的地址是1245052的话，p+1的地址不是在地址的数值上+1，而是加上这个指针的类型（比如这个就是int型指针）大小，也就是相当于加上了sizeof(int)

user: user-8
content: 引用 13 楼 u012421456 的回复:[quote=引用 12 楼 zxh707wk 的回复:] +1.... 你经常+1、围观啊[/quote]+2，围观

user: user-9
content: 789被存放到了为p所分配的内存空间中，通过访问变量名来访问该数据，一个int所占空间已经足够存储，楼主可以好好看看一楼的话

user: user-9
content: 引用 12 楼 zxh707wk 的回复:+1.... 你经常+1、围观啊

user: user-10
content: 你举的例子与你提的问题没有关系吧，你的举例，说的仅仅是数据的存储与变量地址间的关系。这跟变量地址的长度有什么联系呢？如果你对表达式int p=789; 不理解，那么应该认识什么是类型，什么是变量，什么是值。p变量这里声明为int类型，那么p变量这里被赋值为789. p是变量的名称，或者理解为一个被命名的地址，这个地址开始，用int类型的操作赋值，int类型如果是4个字节的宽度，那么这些字节存储的就是789的二进制值表示。数据一般按类型操作，所以变量的长度与他的类型有关。

user: user-1
content: 举个例子不吧：车牌号和车的大小有关系嘛？没有！门牌号和房子大小有关系嘛？没有！图书索引号和书本厚度有关系嘛？没有！身份证id和人帅不帅有关系嘛？没有！妹纸的深度和你的。。。什么呢？你懂得！车牌号，门牌号，索引号，身份证号，就是地址。车，房子，书本，人，就理解成变量得了！

user: user-11
content: 还有789转换成二进制后存储在存储器中，int型在32位机器上有32位，从低到高存储789的二进制位，高位没有补0，并不是说7和a地址相同，反而存储7这个位应该在高位字节上。

user: user-11
content: 这也太二吧，32位下，int 类型占有4个字节，但是，表示一个变量的地址，用的是变量对应地址的最低位节吧，每个字节都有编号，四个字节的编号是连续的，好比，int a，a的地址是0x00000001，那么这个变量的四个字节的地址从低位到高位依次是 0x00000001，0x00000002，0x00000003,0x00000004，变量的每个字节都有地址，但是表示变量a地址用的是最低位的 0x00000001这个地址。

user: user-12
content: 一楼正解。。。
user-0 提问: 这个代码运行有问题 麻烦学长们看看

回复:
user: user-1
content: #include <stdio.h>  void main(){ 	int a[6]; 	int *p=a,i; 	printf("input the array:\n"); 	for(i=0;i<6;i++)scanf("%d",p+i); 	printf("\n"); 	for(i=0;i<6;i++)printf("%8d",*(p+i));  	void sort(int *p, int n); 	sort(p,6); 	printf("the new sort is:\n"); 	for(i=0;i<6;i++) 		printf("%8d",*(p+i)); 	printf("\n");	 }  void sort(int *p, int n){ 	int *i,*j,k,t=0; 	i=p; 	for(;i<p+n-1;i++){ 		for(k=1;k<p+n-i;k++){//这里写错了，会导致i+k越界,写成k<p+n-i 			if(*i<*(i+k)){//这里会越界！！！！！ 				t=*i; 				*i=*(i+k); 				*(i+k)=t; 			} 		}	 	} }

user: user-1
content: #include <stdio.h>  void main(){ 	int a[6]; 	int *p=a,i; 	printf("input the array:\n"); 	for(i=0;i<6;i++)scanf("%d",p+i); 	printf("\n"); 	for(i=0;i<6;i++)printf("%8d",*(p+i));  	void sort(int *p, int n); 	sort(p,6); 	printf("the new sort is:\n"); 	for(i=0;i<6;i++) 		printf("%8d",*(p+i)); 	printf("\n");	 }  void sort(int *p, int n){ 	int *i,*j,k,t=0; 	i=p; 	for(;i<p+n-1;i++){ 		for(k=1;k<p+n-i;k++){//这里写错了，会导致i+k越界,写成k<p+n-i 			if(*i<*(i+k)){//这里会越界！！！！！ 				t=*i; 				*i=*(i+k); 				*(i+k)=t; 			} 		}	 	} }
user-0 提问: if语句对程序运行时间的影响

回复:
user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-2
content: 引用 6 楼 hitxingkong 的回复:引用 4 楼 my_live_123 的回复:每条if语句都会翻译成相应的跳转指令！其实包括循环语句，最终也是转换成了类似if的跳转指令！跳转指令相对与其他指令要慢，因此if条件执行的次数越多，就越影响效率！有些编译器会有针对性的优化工作！建议楼主反汇编瞅瞅！函数是否有返回值对运行时间会有影响吗 返回值不影响效率，只是将某个值放到一个寄存器中，一般是eax！类似与: mov value eax.在函数返回后，有主调函数从寄存器中拿取返回值！

user: user-3
content: 第一个快 第二个慢

user: user-3
content: #include<stdio.h> #include<stdlib.h> #include<windows.h>  int main() { 	long test=1000000000; 	long i=0; 	int  flag =0; 	DWORD result1, result2; 	DWORD dwStartTicks, dwEndTicks;  	dwStartTicks=GetTickCount(); 	for(i=0;i<test;i++) 	{ 		; 	} 	dwEndTicks=GetTickCount();  	// 计算时长 	if (dwEndTicks < dwStartTicks) 	{ 		result2 = (0xFFFFFFFF - dwStartTicks + dwEndTicks + 1); 	} 	else 	{ 		result2 = (dwEndTicks - dwStartTicks)+1; 	}  	printf("result2= %d\n",result2);  	dwStartTicks=GetTickCount(); 	for(i=0;i<test;i++) 	{ 		; 		if(i != test) 			flag = ~flag; 	} 	dwEndTicks=GetTickCount(); 	// 计算时长 	if (dwEndTicks < dwStartTicks) 	{ 		result1 = (0xFFFFFFFF - dwStartTicks + dwEndTicks + 1); 	} 	else 	{ 		result1 = (dwEndTicks - dwStartTicks)+1; 	}  	printf("result1 = %d\n",result1); 	getchar(); }

user: user-4
content: SYNOPSIS      #include <time.h>       clock_t      clock(void);  DESCRIPTION      The clock() function determines the amount of processor time used since      the invocation of the calling process, measured in CLOCKS_PER_SECs of a      second.

user: user-5
content: 针对两种情况写个程序， 不要在代码中计算时间， 使用linux time命令,多测几次再统计结果。

user: user-0
content: 引用 4 楼 my_live_123 的回复:每条if语句都会翻译成相应的跳转指令！其实包括循环语句，最终也是转换成了类似if的跳转指令！跳转指令相对与其他指令要慢，因此if条件执行的次数越多，就越影响效率！有些编译器会有针对性的优化工作！建议楼主反汇编瞅瞅！函数是否有返回值对运行时间会有影响吗

user: user-0
content: 引用 2 楼 user-6 的回复:好好写代码，1和2分分清楚，你程序里先2再1，下面数据先1再2，换谁都不会信任你这个数据结果的。认真重写代码，科学重测数据，再来看有没有什么问题。 在虚拟机里写的，忘了返回值，gcc编译也能通过，加了返回值带if语句的循环运行时间就更长。返回值怎么影响这个呢

user: user-2
content: 每条if语句都会翻译成相应的跳转指令！其实包括循环语句，最终也是转换成了类似if的跳转指令！跳转指令相对与其他指令要慢，因此if条件执行的次数越多，就越影响效率！有些编译器会有针对性的优化工作！建议楼主反汇编瞅瞅！

user: user-6
content: 好好写代码，1和2分分清楚，你程序里先2再1，下面数据先1再2，换谁都不会信任你这个数据结果的。认真重写代码，科学重测数据，再来看有没有什么问题。
user-0 提问: 一个字符串复制函数  调试时出现”Unhandled exception 0xC0000005;Access Violation“，是怎么回事

回复:
user: user-1
content: 参见1楼，没有分配内存

user: user-2
content: 嗯，char *d = dest;//参数备份 那它的值是啥啊

user: user-0
content: 引用 5 楼 s_a_n_ 的回复:[quote=引用 4 楼 xad707348125 的回复:] [quote=引用 3 楼 bjym1987 的回复:] 参见1楼，没有分配内存 我赋值了，不就是让d指向dest的内存空间吗？还有再分配空间？？ 指针那边都忘了，求科普？[/quote] 你的dest也没有分配空间啊。你main函数里char *d;只是申请了一个指针，但没有分配空间直接就用了。 至于怎么给指针分配空间，太基础了，看书学比较靠谱一些。[/quote] 嗯，，我知道错那了。。改过来了。。。谢谢。。太基础了呀。。。

user: user-3
content: 引用 4 楼 xad707348125 的回复:[quote=引用 3 楼 bjym1987 的回复:] 参见1楼，没有分配内存 我赋值了，不就是让d指向dest的内存空间吗？还有再分配空间？？ 指针那边都忘了，求科普？[/quote] 你的dest也没有分配空间啊。你main函数里char *d;只是申请了一个指针，但没有分配空间直接就用了。 至于怎么给指针分配空间，太基础了，看书学比较靠谱一些。

user: user-0
content: 引用 3 楼 bjym1987 的回复:参见1楼，没有分配内存 我赋值了，不就是让d指向dest的内存空间吗？还有再分配空间？？ 指针那边都忘了，求科普？

user: user-4
content: char *d;没有分配空间给它
user-0 提问: 一个选择题，不明白，求解

回复:
user: user-0
content: 明白了  谢谢大家   可惜分不多

user: user-1
content: 楼主这个也想不明白吗？ FA调用FB，若FB出现在FA之后，FA调用FB时，不认识FB，所以报错，需要把FB的原型放到FA的前边

user: user-2
content: 要想彻底明白，请参考gcc源代码相关片断。

user: user-0
content: 还不是很明白

user: user-3
content: C语言的编译是顺序编译 记住就好了

user: user-4
content: 首先是FA  调用 FB  所以 如果FB是在FA之前则可以直接使用 但是如果我的FA出现在FB之前，如果此前FB没有声明， 则无法找到FB的相关信息。无法编译通过 顾选择D

user: user-0
content: 为什么C错了 而D对了

user: user-5
content: 引用 14 楼 u012421456 的回复:[quote=引用 12 楼 zxh707wk 的回复:] +1.... 经常的+1、围观回复？？？[/quote]yes

user: user-6
content: 脑筋急转弯  好好想想选项C    D

user: user-1
content: 引用 12 楼 zxh707wk 的回复:+1.... 经常的+1、围观回复？？？

user: user-7
content: 额。。。。。。。

user: user-8
content: 编译是有顺序的，所以 FA 跟FB  肯定有编译顺序，如果 FA 调用FB， 若FB在FA前定义，那么不用声明，直接调用即可，因为FB是在FA之前已经通过编译的。若 FB在FA之后，那么就需要先声明FB，不然FA调用FB的时候编译器不知道谁是FB……  所以如果FA调用FB的话 选D 反之，如果FB调用FA的话 选C

user: user-9
content: 这是函数定义和函数声明区分 “函数定义可以以任意次序出现在一个源文件或多个源文件中,但同一函数不能分割存放在多个文件中。如果源程序分散在多个文件中,那么,在编译和加载时,就需要做更多的工作,但这是操作系统的原因,并不是语言的属性决定的。”-K&R 注:函数定义的自由先决条件是有函数声明在先  由于C是强类型语言，任何变量在使用之前都必须告知编译器它的类型，函数不例外！而且在使用时候要做类型检查！函数调用属于表达式的范畴，当归约识别出是函数调用时，就要从符号表中获取此函数的信息，以匹配和检查参数的传递，确保参数合法性从而保证函数的正确使用！——这些都是编译器的工作！  目前C编译器都是LL实现，从左到右，从先到后语法解析源程序，因此先出现的标识（变量名，函数名）先进入符号表，如果一个函数FB未定义又没有声明，那么它就不会出现在符号表当中，而此时若有函数FA调用FB，只会报错函数FB未定义，也就是调用非法，因为FB根本不存在符号表中，找不到它任何信息，报错！如果只声明FB而没有定义FB，然后FA调用FB，编译能通过，但链接就会出错喽！也就是符号表中已经有它的信息，函数调用语法归约和类型检测能够顺利进行，编译能通过，但是链接时就找不到FB的地址了，没有定义嘛！  ls上hacker给出了另外一种告知方式，它是正确可执行的。依据C文法，函数声明和变量声明最终都到declaration-list，无论是全局的还是局部的，只要是合法的声明，相关符号属性都会放入符号表！但是本质不一样，放在函数内，它是局部声明，在函数局部符号表内，而不是全局符号表。放在函数外，则是在全局符号表内。虽然表面效果一样，但是机理还是有区分的。提醒这一点吧，并无它意！ 下面代码可以验证它的作用域   #include <stdio.h>   int FA(void) { 	int x, y; 	double FB(int x, int y);  	x = 1; 	y = 2; 	printf("%f\n", FB(x, y));  	return 0; }  int FC(void) {     int x, y;      x = 1;     y = 2;     printf("%f\n", FB(x, y));//gcc编译报错,上面FB声明只在局部符号表内      return 0; }  double FB(int x, int y) {     return (x + y) / 2.0; }  int main(int argc, char *argv[]) {     FA();     FC();     return 0; }    gcc编译信息  declaration.c:23:20: error: incompatible implicit declaration of function ‘FB’      printf("%f\n", FB(x, y));                     ^ declaration.c:8:9: note: previous implicit declaration of ‘FB’ was here   double FB(int x, int y);          ^ declaration.c:23:5: warning: format ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat=]      printf("%f\n", FB(x, y));      ^

user: user-10
content: FA调用FB，所有在声明或定义FB时，都不用管FA有没有声明，FA根本影响不到FB，所以C错的

user: user-11
content: D也不对呀！ 虽然从实践上D的说法是没错的，但是并不是必须  #include <stdio.h>  int FA(void) {     int x, y;     double FB(int x, int y);      x = 1;     y = 2;     printf("%f\n", FB(x, y));      return 0; }  double FB(int x, int y) {     return (x + y) / 2.0; }  int main(int argc, char *argv[]) {      FA();     return 0; }

user: user-12
content: 调用前必须先声明啊，因为FA要调用FB所以FB在FA之前必须声明啊
user-0 提问: 求救error C2106: '=' : left operand must be l-value

回复:
user: user-0
content: 引用 2 楼 xpdavis 的回复:如果name是数组的话，应该这样： strcpy(G->vertices[h].name, data[v[d]].name);   的确是这个问题，感激不尽

user: user-1
content: name成员变量是什么类型，估计是数组吧， 改成 strcpy( G->vertices[h].name, data[v[d]].name );

user: user-2
content: 如果name是数组的话，应该这样： strcpy(G->vertices[h].name, data[v[d]].name);

user: user-2
content: 你至少G和data的定义要给出来啊
user-0 提问: 如何获取组合框控件中选择项的文本

回复:
user: user-1
content: CComboBox::GetLBText int GetLBText( int nIndex, LPTSTR lpszText ) const;  void GetLBText( int nIndex, CString& rString ) const;  Return Value  The length (in bytes) of the string, excluding the terminating null character. If nIndex does not specify a valid index, the return value is CB_ERR.  Parameters  nIndex  Contains the zero-based index of the list-box string to be copied.  lpszText  Points to a buffer that is to receive the string. The buffer must have sufficient space for the string and a terminating null character.  rString  A reference to a CString.  Remarks  Gets a string from the list box of a combo box. The second form of this member function fills a CString object with the item’s text.  CComboBox Overview |  Class Members |  Hierarchy Chart  See Also   CComboBox::GetLBTextLen,CB_GETLBTEXT   CB_GETLBTEXT An application sends a CB_GETLBTEXT message to retrieve a string from the list of a combo box.   CB_GETLBTEXT  wParam = (WPARAM) index;                // item index  lParam = (LPARAM) (LPCSTR) lpszBuffer;  // address of buffer    Parameters index  Value of wParam. Specifies the zero-based index of the string to retrieve.  lpszBuffer  Value of lParam. Pointer to the buffer that receives the string. The buffer must have sufficient space for the string and a terminating null character. You can send a CB_GETLBTEXTLEN message prior to the CB_GETLBTEXT message to retrieve the length, in bytes, of the string.  Return Values The return value is the length of the string, in bytes, excluding the terminating null character. If the index parameter does not specify a valid index, the return value is CB_ERR.   Remarks If you create the combo box with an owner-drawn style but without the CBS_HASSTRINGS style, the buffer pointed to by the lpszBuffer parameter of the message receives the 32-bit value associated with the item (the item data).   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.  See Also Combo Boxes Overview, Combo Box Messages, CB_GETLBTEXTLEN

user: user-2
content: MFC中的CComboBox类中有一个GetLBText，好像是这个可以获取某项的文本

user: user-3
content: 你的想法是正确的，可能是细节上没注意到而已，比如窗口句柄是否正确。把代码贴出来嘛。

user: user-0
content: 为毛没人鸟我？
user-0 提问: socket编程的问题，求高手指点

回复:
user: user-1
content: 引用socket编程，如果我做服务端，那我能限制客户端来连我的ip地址吗 这是IT人员的工作，不需要写代码。 服务器也可以接受连接之后主动断开。

user: user-2
content: 可以用数组存放连接套接字数，用IO复用select监听绑定了的fd,FD_ISSET()后判断数组fd连接数，超过限制则不accept（）

user: user-3
content: 可以设置最大连接数：Listen(listenfd,LISTENQ);///LISTENQ==1024;可以改变其他值

user: user-4
content: 这一般都是网卡做的吧 直接就有处理底层的过滤掉了啊  比如路由器的ACL 就可以直接设置驱动 可以对一些从底层直接拒绝掉。 你的Socket程序，人家驱动都把那个包收进来了,你只能在把它处理掉吧在程序里。估计只能是向楼上的 连接后判断是否过滤掉 在断开。。如果你问这个问题的目的是你的服务器怕很多陌生的IP连接，导致什么瘫痪啊，那就对请求的连接IP是禁止的每天进行一个Log日志统计，之后你写另一个可以操作驱动的程序或处理脚本，根据日志禁止IP访问的次数 把这个直接让它网卡都进不来。

user: user-5
content: lz这个服务器是用于局域网的吗

user: user-6
content: 接收不允许的地址后，然后断开  如何？

user: user-7
content: 原始套接字有那些功能

user: user-8
content: 用防火墙就可以了，不过 192.168.1.1和192.168.1.2 是内网地址，经过路由器 NAT 后服务器看到的就不是这个地址了

user: user-0
content: 等高手来帮忙解答啊
user-0 提问: 有哪些关于讲线程池，高并发，异步比较好的书籍资料？

回复:
user: user-1
content: windows核心编程，我也是来蹭分的，但那书真的不错

user: user-2
content: 引用 1 楼 u013163178 的回复:windows核心编程 同意并蹭分。

user: user-3
content: windows核心编程
user-0 提问: Microsoft Visual C++2010 Express怎么用呀

回复:
user: user-1
content: 嗯，目前我也在学习使用这款软件的过程中，哈哈。

user: user-0
content: 好了 好高兴 iloveyou 这是我的输出结果

user: user-2
content: 已经输出了，只是太快，一闪就结束了，你看不到结果而已。 按ctrl+F5运行就可以了。

user: user-0
content: 发错了。是这张图，在哪里看那个输出iloveyou

user: user-0
content: 知道怎么搞了，原来第二个项目建的位置错了。但是还有一个问题，不能显示输出结果呀
user-0 提问: 字符串全排列递归实现（避免重复），这段代码谁能说下思路，看不懂哇

回复:
user: user-0
content: @zzyafyj，十分感谢！

user: user-1
content: 思路是： 1.轮流选取S[N]中的各个位作为第一位。如果第i位字符在[0,i-1]这个区间内出现过，就不再对其进行排列，因为把它放在第一位的所有排列在前面排列过了(就是代码中j作为循环变量的作用)。 2.把当前选取的这一位放入目标数组中 3.用一个临时数组保存剩余的字符，并把其作为源。同时目标数组的地址下移一位，因为当前位已经排列好。 4.递归 从1可以看出，这个算法是不会有重复排列的。 另外其他的一些注释： if(nLen == 1) { 		strTarget[0] = strSource[0];//拷贝最后一位 		printf("%s\n", t); 		return; }  for(i=0; i<nLen; i++) 		{ 			for(j=0; j<i && strSource[i] != strSource[j]; j++);//判断[0~i-1]区间内是否有与strSource[i]相同的字符，如果有则以strSource[i]开头的所有排列在j这个位置就已经做过，所以不再进行排列。 			if(j == i) 			{ 				strTarget[0] = strSource[i];//把strSource[i]作为排列的第一位。 				memcpy(strConvert, strSource, i); 				memcpy(strConvert+i, strSource+i+1, nLen-i-1);//这两行是把源字符串中剩余部分拷贝到临时数组中，因为strSource[i]的位置已经排好了 				convert(strConvert, strTarget+1, nLen-1); 			} 		}

user: user-0
content: 引用 1 楼 u011779875 的回复:只从问题角度去分析下    1. 观察问题1123全排列  2.从递归角度实现全排列来看 思路可能是 求1123递归 只需要先求123的递归 递归下去。。。  3.从代码输出角度分析 观察全排列重复的情况，你会发现1123全排列之所以会重复是因为出现了俩个相临位数的相同导致的而  strSource[i] != strSource[j]在for中 且第一次不会判断 说明第二次如果俩个位数相同就不会再进入这个判断了 既相邻的不进行递归。  如果输入1213，全排列还是12个。所以这个程序不管重复的字符是否相邻都可以输出正确答案。

user: user-2
content: 只从问题角度去分析下    1. 观察问题1123全排列  2.从递归角度实现全排列来看 思路可能是 求1123递归 只需要先求123的递归 递归下去。。。  3.从代码输出角度分析 观察全排列重复的情况，你会发现1123全排列之所以会重复是因为出现了俩个相临位数的相同导致的而  strSource[i] != strSource[j]在for中 且第一次不会判断 说明第二次如果俩个位数相同就不会再进入这个判断了 既相邻的不进行递归。
user-0 提问: 关于结构体内指针所指向的

回复:
user: user-1
content: 引用 4 楼 u011391093 的回复:[quote=引用 3 楼 zhangsongtao123 的回复:] 注意看  ①、 20行         ret = (TSeqList*)malloc(sizeof(TSeqList)+sizeof(TSeqListNode)* capacity); 28行         ret->node = (TSeqListNode*)(ret + 1);//创建一个unsigned int 指针  ②、 75行 int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // 插入O(n)  { . 96行 sList->node[i] = (TSeqListNode)node;//数据就插入这个位置 . } 由这两处可以看出 其存储的确实就对象的指针，获取的时候必然也就是对象的指针喽 同时我可以肯定，在对象释放的时候 肯定还要释放node指针对应的内存，不然就内存泄露了！！！  这是数据结构存储对象的常用方式，一般都是存储指针，并且该指针的对象一般都是动态开辟出来的内存，不然所指对象生命周期结束，被释放了，那么该指针就成野指针了！谢谢我已经懂了,我觉得他把数组元素赋值成地址,开始还不如创建一个指针数组int **node来代替那样,这样更容易理解,对吗,我感觉这样更好,请问这样可不可以[/quote]  SeqList* SeqList_Create(int capacity) // 传递创建的总数   O(1) {     TSeqList* ret = NULL;//创建结构体指针       if (capacity >= 0)//总数肯定要大于0的     {         ret = (TSeqList*)malloc(sizeof(TSeqList)+sizeof(TSeqListNode)* capacity);         //分配空间一个结构体的空间加上后面数组空间     }       if (ret != NULL)//判断是否创建失败     {         ret->capacity = capacity;         ret->length = 0;         ret->node = (TSeqListNode*)(ret + 1);//创建一个unsigned int 指针     }       return ret; } 由创建的函数可以知道，node指针的所知内存大小以及数据的数量是动态指定，因为new的时候是一块连续的空间，这样做的目的是方便释放内存。 如果按照你的意思，用一串连续的指针来存储数据，不是不可以，是因为难维护，释放的时候还要便利分别释放。  提示一点 int **node 可不是数组指针，自己去查查

user: user-0
content: 引用 3 楼 zhangsongtao123 的回复:注意看  ①、 20行         ret = (TSeqList*)malloc(sizeof(TSeqList)+sizeof(TSeqListNode)* capacity); 28行         ret->node = (TSeqListNode*)(ret + 1);//创建一个unsigned int 指针  ②、 75行 int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // 插入O(n)  { . 96行 sList->node[i] = (TSeqListNode)node;//数据就插入这个位置 . } 由这两处可以看出 其存储的确实就对象的指针，获取的时候必然也就是对象的指针喽 同时我可以肯定，在对象释放的时候 肯定还要释放node指针对应的内存，不然就内存泄露了！！！  这是数据结构存储对象的常用方式，一般都是存储指针，并且该指针的对象一般都是动态开辟出来的内存，不然所指对象生命周期结束，被释放了，那么该指针就成野指针了！谢谢我已经懂了,我觉得他把数组元素赋值成地址,开始还不如创建一个指针数组int **node来代替那样,这样更容易理解,对吗,我感觉这样更好,请问这样可不可以

user: user-1
content: 注意看  ①、 20行         ret = (TSeqList*)malloc(sizeof(TSeqList)+sizeof(TSeqListNode)* capacity); 28行         ret->node = (TSeqListNode*)(ret + 1);//创建一个unsigned int 指针  ②、 75行 int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // 插入O(n)  { . 96行 sList->node[i] = (TSeqListNode)node;//数据就插入这个位置 . } 由这两处可以看出 其存储的确实就对象的指针，获取的时候必然也就是对象的指针喽 同时我可以肯定，在对象释放的时候 肯定还要释放node指针对应的内存，不然就内存泄露了！！！  这是数据结构存储对象的常用方式，一般都是存储指针，并且该指针的对象一般都是动态开辟出来的内存，不然所指对象生命周期结束，被释放了，那么该指针就成野指针了！

user: user-2
content: 指针还是用指针来存比较好，比竟有16位地址，32位地址，64位地址等不同 楼主可以发下SeqListNode的定义

user: user-3
content: 没有看到SeqListNode的结构，不过显然是把sList->node[pos]整型值强转成指针了,或许作者用整型变量存储地址了！这是其一 如果SeqListNode是一个unsigned int类型，那么sList->node + pos更合理，也不需要类型转换。
user-0 提问: 新手求助

回复:
user: user-1
content: 楼主虽然丝毫没有想要描述一下问题的意思，不过大家也都看出来了，在输入b为1后，下面的if中再输入的是字符，这个scanf会把缓存中的回车符读取，所以，输入字符前，一般都要加个清楚缓存的操作，比如楼上的，也可以getchar()

user: user-2
content: 楼上正解。。。。

user: user-3
content: rewind(stdin);

user: user-4
content: #include<stdio.h>   int main() { 	char a; 	int b,c; 	 	printf("enter figure to choose   \n"); 	scanf("%d",&b); 	 	fflush(stdin);//清下缓冲  	 	if(b==1) 	{ 		scanf("%c",&a); 		 		if(a>=97) 			printf("%c\n",a-32); 		else if(a>=65) 			printf("%c\n",a+32); 		else  			printf("NO.%d\n",a); 	} 	else 	{ 		scanf("%d",&c); 		printf("NO.%d\n",c); 	} 	return 0; }
user-0 提问: 又被日经玩意撞了一下腰，气人

回复:
user: user-1
content: 考这种题，我只能呵呵了；

user: user-2
content: 其实这个种题目在理解编译器运作的时候是有意义的，不过做为考题价值不大。

user: user-3
content: 让我想起了华山剑法。当年令狐冲和封不平。

user: user-4
content: 吃饭睡觉都是活着的基础，可你有必要天天纠结于用勺子吃还是用筷子吃饭好，睡觉裸睡好还是穿睡衣好吗？楼猪的同事2，楼猪13

user: user-5
content: 如果硬掰扯表达式的话：一种可能就是在执行 + 之前，i进行了两次++，即5，而后两个i相加  如果从标准看，这属于未定义语句，即使编译器给出的结果是 11, 12, 13, 14, ...  也都是正确的

user: user-0
content: 怎么感觉还有点问题。。往前翻发现一帖，问i=3; (++i)+(++i)等于10的问题 虽然这东西是不确定的，但我觉得没有10的道理啊。无论两个++i哪个先算，总得有一个先算吧？而先算的那个，在算之前因为什么操作都没做，i必定是3，先算的那个++i必定是4 i=3; (++i)+(++i)这个东西，的确不确定，8和9都行，但10就觉得不可解释了 我这题的k，36和42都行，49就觉得不可解释了…… 如果10这个结果能出来，除非是发生了某种并行计算，在PC上总觉得无理

user: user-6
content: 这题。。。出题人有问题。。。

user: user-7
user-0 提问: 求大神进来看看，请问为什么访问 3 号叶子的路径不能正确返回呢,

回复:
user: user-0
content: 引用 3 楼 r_Jimy 的回复:楼主了，你的代码好乱啊~~~，下次发的时候整理下 问题在于Search函数可能返回未知值，（node的左右子树不空，但找到的p是空的，此时在if里不会返回）在search最末尾加个return NULL就可以了 大神啊，谢谢你

user: user-1
content: 楼主了，你的代码好乱啊~~~，下次发的时候整理下 问题在于Search函数可能返回未知值，（node的左右子树不空，但找到的p是空的，此时在if里不会返回）在search最末尾加个return NULL就可以了

user: user-0
content: 引用 1 楼 u011033348 的回复:楼主说得太简单了，把问题说明白点。 问题是，如何从根访问一个树的指定的叶子，显示它访问过程的路径，然后访问下一个指定的叶子，然后返回路径

user: user-2
content: 楼主说得太简单了，把问题说明白点。
user-0 提问: c语言读文件死活读不到？？？？

回复:
user: user-1
content: 引用 18 楼 wangyaninglm 的回复:各位我傻逼了，参数外面的尖括号忘了去调了，所以文件名全都是<intput.name>看着好像没错，其实都是错了的。。。+1

user: user-2
content: 工作目录 或者 文件用绝对路径。这种问题查看下错误码，或者 监视中输入  @err,hr 看下 就很清楚了吧。

user: user-3
content: 完整路径或者放到DEBUG下面去

user: user-4
content: 引用 5 楼 wangzuxi 的回复:[quote=引用 1 楼 wangyaninglm 的回复:] input_left.ppm  这个文件明明在指定的位置啊？？？  啥情况么。。。。 你程序是运行在Debug目录下面，这个目录正面没有input_left.ppm这个文件[/quote] 你程序是运行在Debug目录下面，这个目录下面没有input_left.ppm这个文件，你用绝对路径应该就ok了

user: user-4
content: 引用 1 楼 wangyaninglm 的回复:input_left.ppm  这个文件明明在指定的位置啊？？？  啥情况么。。。。 你程序是运行在Debug目录下面，这个目录正面没有input_left.ppm这个文件

user: user-5
content: 文件名绝对路径

user: user-6
content: 把那个文件放入Debug目录

user: user-7
content: 工作目录没有设置吧？ 属性-配置属性-调试-工作目录

user: user-0
content: input_left.ppm  这个文件明明在指定的位置啊？？？  啥情况么。。。。

user: user-8
content: 这样也行，楼主还需谨慎。。

user: user-0
content: 引用 17 楼 mymtom 的回复:你的filename变量不对哦， 怎么有尖括号啊 "<input_left.ppm>"  我傻逼了。。。调试了一下午。。。。

user: user-0
content: 各位我傻逼了，参数外面的尖括号忘了去调了，所以文件名全都是<intput.name>看着好像没错，其实都是错了的。。。

user: user-7
content: 你的filename变量不对哦， 怎么有尖括号啊 "<input_left.ppm>"

user: user-0
content: 引用 14 楼 zhao4zhong1 的回复:在fclose和fflush之前，文件不一定生成到磁盘上。  这个图片本身是有的嘛

user: user-0
content: 绝对路径都，读不到，是个啥情况。。。。

user: user-9
content: 在fclose和fflush之前，文件不一定生成到磁盘上。

user: user-9
content: 建议楼主先学会如何全盘搜索指定文件名的文件

user: user-0
content: 下面这样设置还是找不到啊。。。  E:\code\stereoMatch\match_original\win

user: user-0
content: 但是我这个，getcwd代码生成的当前文件执行目录下面，有这个文件，还是找不到？还得在工程里面设置么？  。。。。  怎么这么坑爹

user: user-0
content: 引用 2 楼 mymtom 的回复:工作目录没有设置吧？ 属性-配置属性-调试-工作目录  这个工作目录应该设置在何处？ 我的debug下面么？  这个是别人的工程，我看他程序生成都生成在win外头的bin文件夹下面了
user-0 提问: 不同函数里的标签名是否可以相同？

回复:
user: user-1
content: 引用 5 楼 mymtom 的回复:http://flash-gordon.me.uk/ansi.c.txt thank you!

user: user-2
content: http://flash-gordon.me.uk/ansi.c.txt

user: user-1
content: 引用 3 楼 mymtom 的回复:3.1.2.1 Scopes of identifiers    An identifier is visible (i.e., can be used) only within a region of program text called its scope . There are four kinds of scopes: function, file, block, and function prototype.  (A function prototype is a declaration of a function that declares the types of its parameters.)    A label name is the only kind of identifier that has function scope. It can be used (in a goto statement) anywhere in the function in which it appears, and is declared implicitly by its syntactic appearance (followed by a : and a statement).  Label names shall be unique within a function. 版主大人，这段出自哪里？

user: user-2
content: 3.1.2.1 Scopes of identifiers     An identifier is visible (i.e., can be used) only within a region of program text called its scope . There are four kinds of scopes: function, file, block, and function prototype.  (A function prototype is a declaration of a function that declares the types of its parameters.)     A label name is the only kind of identifier that has function scope. It can be used (in a goto statement) anywhere in the function in which it appears, and is declared implicitly by its syntactic appearance (followed by a : and a statement).  Label names shall be unique within a function.

user: user-1
content: 可以相同，GOTO不会GO到另一个函数去，同一个函数内唯一即可

user: user-1
content: 可以相关同，GOTO不会GO到另一个函数去

user: user-3
content: 是一个局部的。。

user: user-4
content: 可以，只在函数内起作。

user: user-5
content: 没试过，但这样做不会导致理解错误吗
user-0 提问: 结构体

回复:
user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: VC++6.0

user: user-2
content: buffer overflow

user: user-3
content: 引用 7 楼 baidu_22691505 的回复:#include "stdio.h" main() { struct student { int num; char name[6]; char sex[6];//为什么赋值低于6运行结果是连接下一个字符串一起输出呢? char addr[15]; }a={2111404114,"helen","female","jiangxiganzhou"}; printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr); return 0; } 楼主什么编译器啊？

user: user-4
content: 结构体定义时初始化啊

user: user-5
content: 定义struct类型变量时，直接初始化没有什么奇特之处额。

user: user-6
content: 这个a 相当于是student类型的 但是如果加上typedef struct student a就是一个类型了 是一个变量了 不能直接赋值

user: user-7
content: 我是来混经验的1111111111

user: user-8
content: 引用 7 楼 baidu_22691505 的回复:#include "stdio.h" main() { struct student { int num; char name[6]; char sex[6];//为什么赋值低于6运行结果是连接下一个字符串一起输出呢? char addr[15]; }a={2111404114,"helen","female","jiangxiganzhou"}; printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr); return 0; }这个要看编译环境，我使用vs2013，编译是无法通过的，因为“female”字符串的长度已经超过了6，无法初始化。严格的说，这种编译错误提示是有益的。

user: user-9
content: 原来这么多人不会用结构体变量的初始化

user: user-10
content: 把它整体移到main函数外，是不是就秒懂了？！放在函数外是全局的类型定义（常见方式），放在函数内是局部的类型定义（不常用方式，定义一个局部结构类型，出来函数就不可用了，这样的需求非常少），后面紧接着定义了一个变量a并用{ }方式初始化结构体成员  struct student { int num; char name[6]; char sex[6];//为什么赋值低于6运行结果是连接下一个字符串一起输出呢? char addr[15]; }a={2111404114,"helen","female","jiangxiganzhou"};  main() { printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr); return 0; }

user: user-11

user: user-0
content: #include "stdio.h" main() { struct student { int num; char name[6]; char sex[6];//为什么赋值低于6运行结果是连接下一个字符串一起输出呢? char addr[15]; }a={2111404114,"helen","female","jiangxiganzhou"}; printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr); return 0; }

user: user-12
content: 定义顺便初始化了啊

user: user-13
content: 引用 1 楼 Falleyes 的回复:#include "stdio.h" int main() { 	struct student 	{ 		int num; 		char name[6]; 		char sex[7];   //这里要分配7个字符，因为字符串末尾’\0'也会占用一个字节 		char addr[15]; 	} a = { 2111404114, "helen", "female", "jiangxiganzhou" }; 	printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n", a.num, a.name, a.sex, a.addr); 	return 0; }   学习了，不好意思。

user: user-13
content: C结构体没有这样的赋值方法。 a.num = 2111404114; 这样做。

user: user-8
content: #include "stdio.h" int main() { 	struct student 	{ 		int num; 		char name[6]; 		char sex[7];   //这里要分配7个字符，因为字符串末尾’\0'也会占用一个字节 		char addr[15]; 	} a = { 2111404114, "helen", "female", "jiangxiganzhou" }; 	printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n", a.num, a.name, a.sex, a.addr); 	return 0; }
user-0 提问: error C2446！！在线等！！

回复:
user: user-0
content: 引用 2 楼 mujiok2003 的回复:引用qsort((void **)lineptr,0,nlines-1,                 (int (*)(void*,void*))(numeric ? numcmp : strcmp));  -->  typedef int( *cmp)(void*,void*); qsort((void **)lineptr,0,nlines-1,                 numeric ? (cmp)numcmp : (cmp)strcmp); 可以了！可以详细说明一下吗？ 对指向函数的指针的强制转换不是太懂

user: user-0
content: 引用 3 楼 Falleyes 的回复:numcmp 和 strcmp 的参数类型不一样，strcmp的参数类型是const 类型。 你可以把你的numcmp也写成const 参数类型，这样就可以了。 int numcmp(const char *s1,const char *s2);不行...

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:(int (*)(void*,void*))(numeric ?numcmp :  (int (*)(void*,void*))strcmp)); strcmp前面加个强转看看,不行...

user: user-1
content: 原因是 条件表达是的类型不一致

user: user-2
content: numcmp 和 strcmp 的参数类型不一样，strcmp的参数类型是const 类型。 你可以把你的numcmp也写成const 参数类型，这样就可以了。 int numcmp(const char *s1,const char *s2);

user: user-1
content: 引用qsort((void **)lineptr,0,nlines-1,                 (int (*)(void*,void*))(numeric ? numcmp : strcmp));  -->  typedef int( *cmp)(void*,void*); qsort((void **)lineptr,0,nlines-1,                 numeric ? (cmp)numcmp : (cmp)strcmp);

user: user-3
content: (int (*)(void*,void*))(numeric ?numcmp :  (int (*)(void*,void*))strcmp)); strcmp前面加个强转看看,
user-0 提问: 字符转double的面试题

回复:
user: user-1
content: 3种方法， 1） 用整型数读取数据，直接组合数据，       这要求，这个整型长度比double 要长，或者二者相同，       并且要对浮点类型编码非常熟悉。 2）用double 计算，不过可能有精度问题。 3）整型数保存数据，转换成 double 做乘除法，      只有转换精度影响到结果精度， 比较接近编译器的精度了。      但是也要求整型精度要高。

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

user: user-3
content: 基本思路：先分开保存整数部分与小数部分，再合并，小数部分先保存为整数再计算，避免精度丢失  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>  #define INTEGER_TAG		1//Çø·ÖÕûÊý²¿·ÖÓëÐ¡Êý²¿·Ö  #define FRACTION_TAG   0  int splite(char* pszTR,double *pTn,int nTnSize) {	 	//char* parse = pszTR; 	char reverse = 0; 	char typeTag  = INTEGER_TAG; 	int  integer = 0; 	int  fraction= 0; 	double  fractionBase = 1; 	int  index = 0; 	char  hasLastNumber;//·ÀÖ¹Â©µô×îºóÒ»¸öÊý  	 	assert(NULL!=pszTR&&NULL!=pTn&&nTnSize>0); 	 	while (*pszTR!='\0') 	{ 		if ('-'==*pszTR) 		{ 			reverse = 1; 		} 		else if (','==*pszTR) 		{ 			assert(index<nTnSize); 			assert(fractionBase>0); 			 			pTn[index]= integer+fraction/fractionBase; 			 			if (1==reverse) 				pTn[index]=0-pTn[index]; 			 			typeTag  = INTEGER_TAG; 			fraction = 0; 			fractionBase = 1; 			integer  = 0; 			reverse  = 0; 			index++; 			hasLastNumber = 0; 		} 		else if ('.'==*pszTR) 		{ 			typeTag = FRACTION_TAG; 		} 		else 		{ 			assert(*pszTR>='0'&&*pszTR<='9'); 			hasLastNumber = 1; 			 			if (INTEGER_TAG==typeTag) 			{ 				integer = 10*integer+*pszTR-'0'; 			} 			else 			{ 				fraction=10*fraction+*pszTR-'0'; 				fractionBase*=10; 			} 		} 		 		pszTR++; 	} 	 	if (1==hasLastNumber&&fractionBase>0) 	{ 		pTn[index]= integer+fraction/fractionBase; 				 		if (1==reverse) 			pTn[index]=0-pTn[index]; 		index++; 	} 	 	return index; }  void main() {    double getArr[10]={0};    int    size = sizeof(getArr)/sizeof(double);    int    renum = 0;    int    i;        renum=splite("12.322,4434,-3434,23,0.23,-0.232",getArr,size);        for (i=0;i<renum;i++)         printf("%g ",getArr[i]);    printf("\n"); }

user: user-4
content: 循环pTn然后对每一个字符进行判断