Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 新人求教—有关一道字符串题目的问题

回复:
user: user-0
content: 引用 3 楼 Automation_dmu 的回复:不过出错的 应该是printf的那句，没有'\0' 。  引用 2 楼 Automation_dmu 的回复:name[index][10]=buffer[i];// 这行有问题 今天自己又看了下，发现了问题然后自己改了下，后来成功了 主要问题是：1.二维的字符串没有赋值；2.name[index][10]=buffer[i]这个语句问题； 下面是我自己修改的程序：  输出：  还是要谢谢你，给的思路啊~

user: user-0
content: 引用 1 楼 fq553165833 的回复:现成函数char *strtok(char *str, const char *delim);不是更好麽？ 今天自己又看了下，发现了问题然后自己改了下，后来成功了 主要问题是：1.二维的字符串没有赋值；2.name[index][10]=buffer[i]这个语句问题； 下面是我自己修改的程序：  输出：  还是要谢谢你，给的思路啊~

user: user-0
content: 引用 2 楼 Automation_dmu 的回复:name[index][10]=buffer[i];// 这行有问题 的确是这行有问题，buffer的值赋不进去~~

user: user-1
content: 大概看了下你的代码。printf("%s",name[i][10]);后面的参数只是一个字符，而name[i]才是字符串。其它没怎么看了。还是建议用strtok函数来分割字符串，很方便的。

user: user-2
content: 不过出错的 应该是printf的那句，没有'\0' 。  引用 2 楼 Automation_dmu 的回复:name[index][10]=buffer[i];// 这行有问题

user: user-2
content: name[index][10]=buffer[i];// 这行有问题

user: user-1
content: 现成函数char *strtok(char *str, const char *delim);不是更好麽？
user-0 提问: 字母计数问题

回复:
user: user-0
content: 终于弄明白了，谢谢。

user: user-1
content: 这个差不多 (a | 0x20 ) - ‘a'

user: user-2
content: 比如说输入字母  char b; char index; char *pUp; scanf("%c", &b);  if(b < 'a') {   b += 0x20;   pUp = "大"; } else {   pUp = "小"; }  index = b - 'a' + 1; if(index >= 1 && ret <= 26) {   printf("你输入的是%s写字母\n该字母在字母表中处于的位置是：%d\n", pUp, index); } else {   printf("你输入的不是字母"); }

user: user-3
content: if(x >= 'a' && x <= 'z')  // 小写     printf("x在第%d的位置\n" ,x-'a'+1);  // x所在位置 else if(x >= 'A' && x <= 'Z')  // 大写     printf("x在第%d的位置\n" ,x-'A'+1);  // x所在位置

user: user-4
content: 先判断是大写还是小写，然后再减去'A'或'a'， 然后再加上'A'或'a'的固定位置。不用循环
user-0 提问: 总是出现写入位置发生冲突，到底是怎么回事呢？（线性单链表，一维数组 ，游标）

回复:
user: user-0
content: 该函数是实现（A-B）并（B-A）的，多谢各位，特别是3楼，就是那么一个小小错。。感谢5楼的赵老师的教导

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

user: user-2
content: 引用 3 楼 u010800064 的回复: #include <stdio.h> #include <stdlib.h> #include <malloc.h>  #define MAXSIZE 1000  typedef struct { 	int data; 	int cur; }component, SLinkList[MAXSIZE];  void InitSpace(SLinkList &space) { 	for(int i = 0; i<MAXSIZE-1; ++i)  		space[i].cur = i+1;  	space[MAXSIZE-1].cur = 0; }  int Malloc(SLinkList &space) { 	int i = space[0].cur; 	if(i)  		space[0].cur = space[i].cur;  	return i; }  void Free(SLinkList &space, int k) { 	space[k].cur = space[0].cur; 	space[0].cur = k; }  void difference(SLinkList &space) { 	InitSpace(space); 	int s = Malloc(space); 	 	int r = s; 	int m, n; 	scanf("%d%d",&m,&n);  	for(int i = 0;i < m;++i) 	{ 		int j = Malloc(space); 		scanf("%d",space[j].data);  // 首先这就有错 改为 scanf("%d",&space[j].data); 		space[r].cur = j; 		r = j; 	}  	space[r].cur = 0;  	for(int i = 0;i < n;++i) 	{ 		int b; 		scanf("%d",&b); 		int p = s; 		int k = space[p].cur; 		while(k!=space[r].cur&&space[k].data!=b) 		{ 			p = k;k = space[k].cur; 		} 		if(k==space[r].cur) 		{ 			int j = Malloc(space); 			space[j].data = b; 			space[j].cur = space[r].cur; 			space[r].cur = j; 		} 		else 		{ 			space[p].cur = space[k].cur; 			Free(space,k); 			if(r == k) r=p; 		}  	}  }   int main() { 	SLinkList space; 	difference(space);  	system("pause"); 	 	return 0; }  水平有限看着耗费劲，  // 首先 scanf("%d",space[j].data) 就有错 改为 scanf("%d",&space[j].data);

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <malloc.h>  #define MAXSIZE 1000  typedef struct { 	int data; 	int cur; }component, SLinkList[MAXSIZE];  void InitSpace(SLinkList &space) { 	for(int i = 0; i<MAXSIZE-1; ++i)  		space[i].cur = i+1;  	space[MAXSIZE-1].cur = 0; }  int Malloc(SLinkList &space) { 	int i = space[0].cur; 	if(i)  		space[0].cur = space[i].cur;  	return i; }  void Free(SLinkList &space, int k) { 	space[k].cur = space[0].cur; 	space[0].cur = k; }  void difference(SLinkList &space) { 	InitSpace(space); 	int s = Malloc(space); 	 	int r = s; 	int m, n; 	scanf("%d%d",&m,&n);  	for(int i = 0;i < m;++i) 	{ 		int j = Malloc(space); 		scanf("%d",space[j].data);  // 首先这就有错 改为 scanf("%d",&space[j].data); 		space[r].cur = j; 		r = j; 	}  	space[r].cur = 0;  	for(int i = 0;i < n;++i) 	{ 		int b; 		scanf("%d",&b); 		int p = s; 		int k = space[p].cur; 		while(k!=space[r].cur&&space[k].data!=b) 		{ 			p = k;k = space[k].cur; 		} 		if(k==space[r].cur) 		{ 			int j = Malloc(space); 			space[j].data = b; 			space[j].cur = space[r].cur; 			space[r].cur = j; 		} 		else 		{ 			space[p].cur = space[k].cur; 			Free(space,k); 			if(r == k) r=p; 		}  	}  }   int main() { 	SLinkList space; 	difference(space);  	system("pause"); 	 	return 0; }  水平有限看着耗费劲，

user: user-3
content: 能不能把函数想实现的目的简单说明一下, 比如different函数是坐什么用的，有什么问题

user: user-4
content: 楼主？写入位置冲突是什么意思呢？
user-0 提问: 字符串指针疑问

回复:
user: user-1
content: 在VC上面是相同的地址 常量区

user: user-2
content: "ab"存在于某个区域 p1和p2都指向这个区域

user: user-3
content: .rdata是常量区，不是分配在堆空间。

user: user-4
content: 字符串“ab”分配在堆空间，可以理解为全局变量，指针相同是因为编译器优化的结果

user: user-5
content: 编译器的优化处理，如今多数编译器皆如此

user: user-6
content: 就是一个指针,严格来说应该写成const char* p1 = "xxxx" 两个指针相同就说明指向同一个地址空间呗,有啥不理解的呢? 这是一个编译器的行为,去纠结这个事情没有意义

user: user-7
content: 可以相同 可以不同  为什么你觉得不能相同

user: user-8
content: 因为字符串“abc”是一个放在一个常量地址处。指向该字符串，就是指向该常量地址。

user: user-3
content: 搜“常量折叠”

user: user-9
content: 你把"ab"看成是一个全局变量（静态字符串）即可理解。

user: user-10
content: 相同的字符串常量只会有一个副本，所以p1和p2都指向了相同的地方，你可以改用下面的试试： char p1[] = "ab"; char p2[] = "ab";   引用 楼主 boyhailong 的回复:大家看下面代码 #include <iostream> int main(){ 	char* p1 = "ab"; 	char* p2 = "ab"; 	 }  为什么p1,p2指向为什么是相同的？怎么解释呢？

user: user-11
content: 具体不了解编译器怎么处理，我想为了效率应该如上所说。

user: user-12
content: "ab"会保存在常量区, 一般的编译器都会优化, 相同的常量只保存一份.

user: user-13
content: 编译器有优化，相同常量字符串用只存一次。
user-0 提问: C语言参数入栈顺序为什么是从右向左？

回复:
user: user-1
content: 一是为了支持可变参数 二来猜测即使参数固定，也方便编译器实现

user: user-2
content: 膜拜了，这个问题真心没考虑过

user: user-3
content: http://blog.csdn.net/feixiaoxing/article/details/7521004

user: user-4
content: 这是历史原因造成的。 历史上，C语言的参数个数，并不是固定的。 和Fortran，Basic，Pascal相比  C是函数式的语言，而非命令式的语言。 C除了控制语句外，没有命令，只有声明（定义）和表达式。  C只有函数调用，没有输入输出命令（语句）；输入输出，不是语言的一部分。 早期的Fortran，Basic，Pascal 都有，输入输出命令（语句）；他们是语言的一部分。  C的函数调用，也是一个表达式，即函数调用表达式。  这样C函数，就是仅有的程序结构了。  这样，C 既有不确定类型和个数参数表的 scanf，printf 也有，其他类型的不确定个数参数的函数；  用一个，统一的调用约定处理的话。  自然是，从右向左入栈，调用者清栈比较好。  同时，这样可以保证： 1）第一个参数，是最接近栈顶的。其他，参数依序排列。 2）传递的参数长度过大（参数过多），不会出错。

user: user-5
content: google calling convention

user: user-6
content: 没有为什么 爱怎么做就怎么做 看谁写的编译器了

user: user-7
content: 引用 楼主 armfpga123 的回复:哪位大虾详细解释下？之前在网上找了不少资料，一直没得到令人信服的理由。 编译器这样做效率高而已

user: user-8
content: 1L说得没错，可变参数最有名的例子就是printf

user: user-9
content: 支持变参可能是原因之一。另外就是传统了。cdecl只是默认，你可以可以选stdcall或pascal呀。

user: user-10
content: 编译出来的c/c++程式的参数压栈顺序只和编译器相关!

user: user-11
content: 引用 楼主 armfpga123 的回复:哪位大虾详细解释下？之前在网上找了不少资料，一直没得到令人信服的理由。 C语言没有规定，是编译器自己定义的 x64下就不是这样子了

user: user-12
content: 看看printf的实现

user: user-13
content: 为了支持可变参数
user-0 提问: VS2012中如何将文件夹及文件添加到动态链接库？

回复:
user: user-1
content: 添加到rc文件中，编译到dll里面。 另外你的资源是很多界面图片吗？如果是这样就不建议加到rc中了。

user: user-2
content: 搜“资源型DLL” ？

user: user-3
content: 看看.rc文件

user: user-4
content: rdb打包工具

user: user-0
content: 引用 3 楼 zhuobattle 的回复:添加到rc文件中，编译到dll里面。 另外你的资源是很多界面图片吗？如果是这样就不建议加到rc中了。 图片不是很多，还有一些.txt文件，以及一些其它文件。
user-0 提问: 除数竟然可以是0？

回复:
user: user-0
content: 谢谢！！！！！！！！！！！！！！！！

user: user-1
content: 具体的编译器有具体的解释。在gcc下会输出-nan  猜测DEV C++处理w[i]=sin((i-14)*0.25*PI)/PI/(i-14);两种可能，一种是当被除数为0，既sin((i-14)*0.25*PI)=0时，不计算除数就输出0；令一种是两个除号分解为sin((i-14)*0.25*PI) * (i - 14) / PI;  自己写两个表达式验证一下就可以了。第一种可以用0/（i-14）；第二种可以验证 0/PI/（i-14）;

user: user-2
content: 编译器也是人写的

user: user-0
content: w[i]=sin((i-14)*0.25*PI)/PI/(i-14); i=14时，i-14=0,0*0.25*PI=0 sin(0)=0,0/PI=0 i-14=0,0/(i-14)不是0/0么？

user: user-3
content: 别逗了好么，你那是浮点数在运算。你怎么得出的0/0.
user-0 提问: 调用API函数，编译后出现链接错误！

回复:
user: user-1
content: http://technet.microsoft.com/zh-cn/library/ee488255  Requirements Header oleauto.h Library oleaut32.lib  有设置链接oleaut32.lib库么？

user: user-2
content: 1，检查一下oleaut32.lib是否确定已经加好了 2，看看那个头文件是否声明C规范 #ifdef  __cplusplus extern "C" { #endif 。。。。。。。。 #ifdef  __cplusplus } #endif

user: user-3
content: 把库指定给指令参与链接就可以了.

user: user-4
content: 很明显是光包含了头文件,而没有引用库,才导致了这样的错误

user: user-0
content: cvi工程的代码源文件就是*.C啊！

user: user-5
content: 把ZDXLCOMM·c后缀改成·cpp也许可以解决问题。 个人意见，仅供参考。

user: user-5
content: 大概是c/c++混合编程引起的吧。
user-0 提问: 这是怎么算出来的?

回复:
user: user-0
content: 恩  ,64位计算器把-1看成0xFFFF FFFF FFFF FFFF就好.不然是算不出正确的结果的.

user: user-1
content: 0xFFFFFF就是16777215, -1*16777215 = -16777215 = 0xFFFFFFFFFF000001

user: user-0
content: 证明: 令 Sum = -1 * 0xFF FFFF, 即 Sum = 0xFFFF FFFF * 0xFF FFFF,两边同时加上0xFF FFFF,得 Sum + 0xFF FFFF = (0xFFFF FFFF + 1) * (0xFF FFFF),即 Sum + 0xFF FFFF = 0 * 0xFF FFFF,即 Sum + 0xFF FFFF = 0,得 Sum = 0 - 0xFF FFFF,即 Sum = 0 + (-0xFF FFFF) 令beta=(-0xFF FFFF) 则beta的反码为0xFF00 0001 代入得Sum = 0 + beta = 0 + 0xFF00 0001 = 0xFF00 0001  有错误没?

user: user-0
content: 呃,那啥  能给个简单的演算过程不...

user: user-2
content: http://baike.baidu.com/link?url=ynNMrFvpANivvuF1mpNlBPFrdtNPo3BvcOVHvBoCQLWDd2bzao6kSBUcXGtdK5rVIjsug9bO8Xn0tSDUJjjWoq
user-0 提问: c语言的windows程序如何访问sqlserver数据库 

回复:
user: user-1
content: LS正解！！

user: user-2
content: 难道一年一度的毕业设计又来了！！！

user: user-3
content: http://msdn.microsoft.com/en-us/library/aa225188(v=SQL.80).aspx
user-0 提问: 紧急求助：文件读写相关，在线等

回复:
user: user-1
content: #include <stdlib.h> #include <stdio.h> #include <string.h>   int main() {         FILE *fp = NULL;         char cmd[256] = "\0";         int ret = 0;         int tmp = 0;         if((fp=fopen("/tmp/host_info_p_phy","r"))==NULL)         {                 printf("File /tmp/host_info_p_phy not exist!\n");                 printf("let's make it!\n");                 snprintf(cmd,256,"touch /tmp/host_info_p_phy");                 system(cmd);                 if((fp=fopen("/tmp/host_info_p_phy","w"))==NULL)                 {                         printf("Error,no file!\n");                         return -1;                 }                 fprintf(fp,"%d",tmp);                 fflush(fp); // 这里应该关闭fp         } // 这里应该以读的方式打开文件         printf("Position:%d\n", ftell(fp));         rewind(fp);         printf("Position:%d\n", ftell(fp));         fread(&ret,sizeof(int),1,fp);         printf("ret is : %d\n", ret);         fscanf(fp,"%d", &ret);         printf("ret is : %d\n", ret);         fclose(fp);         return 0; }

user: user-2
content: When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired.  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-3
content: 引用 6 楼 xhz1234 的回复:已解决，是4楼说的是一个原因。。。主要原因是： 开始/tmp目录下没有host_info_p_phy文件。进入第一个if的语句块中，执行 if((fp=fopen("/tmp/host_info_p_phy","w"))==NULL) ，将123写入文件。之后，从该文件中进行读取数据，此时文件指针fp的性质是“w”，而不是“r”。因此，程序执行第一次时，文件写入成功，但读取错误。没有注意到楼主的打开文件方式，读写操作应该使用w+模式就可以了。

user: user-0
content: 已解决，是4楼说的是一个原因。。。主要原因是： 开始/tmp目录下没有host_info_p_phy文件。进入第一个if的语句块中，执行 if((fp=fopen("/tmp/host_info_p_phy","w"))==NULL) ，将123写入文件。之后，从该文件中进行读取数据，此时文件指针fp的性质是“w”，而不是“r”。因此，程序执行第一次时，文件写入成功，但读取错误。

user: user-4
content: 引用 3 楼 xhz1234 的回复:文件写入正确，从文件中读取不正确 检查下读写函数的返回值！确认下读写数据的时候操作是否正确！

user: user-3
content: 不知道lz是哪次读取不对，lz只往文件里写了一个值，而读取了两次，第二次读的时候文件的指针已经指向文件结束了吧。

user: user-0
content: 文件写入正确，从文件中读取不正确

user: user-5
content: 不好意思，没看到你的rewind，那么现在具体出了什么问题？

user: user-5
content: 你写完如果马上用同一个fp的话，应该要fseek一下回到文件头
user-0 提问: 关于3D导航的实现

回复:
user: user-1
content: http://blog.csdn.net/pizi0475

user: user-1
content: 搜“场景地图平滑切换”

user: user-2
content: 其实我想说的是：先功能，后性能。  功能做出来了之后，也许该怎么优化，就自然而然的出来了。

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:搜网络教程“学OpenGL编3D游戏”。 呵呵，和赵老师的想法一样， 昨天下载了一些Windows 3D游戏开发的资料， 准备从此着手 个人感觉真实3D场景的构建不仅在导航中应用很有前景 虚拟现实的实现有更广阔的应用空间

user: user-1
content: 参考DOOM系列和Quake系列的源代码？

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

user: user-0
content: 引用 14 楼 vipcxj 的回复:[quote=引用 13 楼 N_sev7 的回复:] [quote=引用 12 楼 ForestDB 的回复:] 其实我想说的是：先功能，后性能。  功能做出来了之后，也许该怎么优化，就自然而然的出来了。 我也是这么想的 以前从没有接触过类似的知识 看了一下，这应该属于3D游戏开发中的场景管理吧 其实，我觉得在3D导航中场景没有必要像游戏那样逼真精致， 因为用户在开车时或需要导航时应该不太会注重画面是不是特别逼真 只要能让用户将现实的场景和导航中的场景匹配上就OK了 哎，代码调试完，又来新活了，只能偷偷搞了...[/quote]  我觉得３Ｄ导航最大的问题是你有木有全国各大城市道路交通的３Ｄ模型，还有如果全国各主要城市都要实现３Ｄ导航，那么那么多３Ｄ模型放不放得下，它们所要的储存空间肯定比２维地图大多了，或者用到了再从网上下载？[/quote] 其实，我是这样想的 那些数据肯定会有 只是个时间的问题 而且，我想实现的是当有数据时， 只需要将数据添加进来 就能使用，呵呵！！！

user: user-3
content: 引用 13 楼 N_sev7 的回复:[quote=引用 12 楼 ForestDB 的回复:] 其实我想说的是：先功能，后性能。  功能做出来了之后，也许该怎么优化，就自然而然的出来了。 我也是这么想的 以前从没有接触过类似的知识 看了一下，这应该属于3D游戏开发中的场景管理吧 其实，我觉得在3D导航中场景没有必要像游戏那样逼真精致， 因为用户在开车时或需要导航时应该不太会注重画面是不是特别逼真 只要能让用户将现实的场景和导航中的场景匹配上就OK了 哎，代码调试完，又来新活了，只能偷偷搞了...[/quote]  我觉得３Ｄ导航最大的问题是你有木有全国各大城市道路交通的３Ｄ模型，还有如果全国各主要城市都要实现３Ｄ导航，那么那么多３Ｄ模型放不放得下，它们所要的储存空间肯定比２维地图大多了，或者用到了再从网上下载？

user: user-0
content: 引用 12 楼 ForestDB 的回复:其实我想说的是：先功能，后性能。  功能做出来了之后，也许该怎么优化，就自然而然的出来了。 我也是这么想的 以前从没有接触过类似的知识 看了一下，这应该属于3D游戏开发中的场景管理吧 其实，我觉得在3D导航中场景没有必要像游戏那样逼真精致， 因为用户在开车时或需要导航时应该不太会注重画面是不是特别逼真 只要能让用户将现实的场景和导航中的场景匹配上就OK了 哎，代码调试完，又来新活了，只能偷偷搞了...

user: user-0
content: 引用 6 楼 vipcxj 的回复:那当然是一次性将当前块和邻域块都加载，一般游戏的无接缝地图就是这样设计的。而且导航至少某些方面比游戏好做，游戏里是超现实的，如果要实现瞬移，刚刚那个方法弄不好就会出现问题，但现实中可不存在瞬移。 我也是这么想的， 1 1 1 1 2 1 1 1 1 比如当前在2块 就要吧周围八个模块加载进来，看来也只能如此了 因为以前接触过  空间结构存储   想着能不能用结合空间存储结构的特征实现，但是貌似不可行，因为道路的空间存储有点不现实啊 多谢了

user: user-4
content: 学习啦

user: user-3
content: 那当然是一次性将当前块和邻域块都加载，一般游戏的无接缝地图就是这样设计的。而且导航至少某些方面比游戏好做，游戏里是超现实的，如果要实现瞬移，刚刚那个方法弄不好就会出现问题，但现实中可不存在瞬移。

user: user-5
content: 引用 4 楼 N_sev7 的回复:[quote=引用 3 楼 user-5 的回复:] [quote=引用 2 楼 N_sev7 的回复:] [quote=引用 1 楼 user-5 的回复:] http://www.3ds.com// 首先，谢谢！！！ 不过还没有找到相关信息，英语不好，读起来就是慢... 还望版主能给点自己的想法[/quote]  已经有了最佳实践 那么如果我们过度思考就成了浪费时间，这就是如今的互联网时代应该的学习方法  先搜索再研究[/quote] 额，其实，都是英文的，有点懵，看了一整天英文文档了，谢谢！！！回去看[/quote]  不用看  其实就是一家公司的官网。。

user: user-0
content: 引用 3 楼 user-5 的回复:[quote=引用 2 楼 N_sev7 的回复:] [quote=引用 1 楼 user-5 的回复:] http://www.3ds.com// 首先，谢谢！！！ 不过还没有找到相关信息，英语不好，读起来就是慢... 还望版主能给点自己的想法[/quote]  已经有了最佳实践 那么如果我们过度思考就成了浪费时间，这就是如今的互联网时代应该的学习方法  先搜索再研究[/quote] 额，其实，都是英文的，有点懵，看了一整天英文文档了，谢谢！！！回去看

user: user-5
content: 引用 2 楼 N_sev7 的回复:[quote=引用 1 楼 user-5 的回复:] http://www.3ds.com// 首先，谢谢！！！ 不过还没有找到相关信息，英语不好，读起来就是慢... 还望版主能给点自己的想法[/quote]  已经有了最佳实践 那么如果我们过度思考就成了浪费时间，这就是如今的互联网时代应该的学习方法  先搜索再研究

user: user-0
content: 引用 1 楼 user-5 的回复:http://www.3ds.com// 首先，谢谢！！！ 不过还没有找到相关信息，英语不好，读起来就是慢... 还望版主能给点自己的想法

user: user-5
content: http://www.3ds.com//
user-0 提问: 最大公约数与最小公倍数

回复:
user: user-1
content: 因为2个数的最大公约数乘于最小公倍数等于两数之积

user: user-2
content: 这是个数学问题 假设x=abc y=bcd 则最小公倍数为abcd 最大公约数为bc 发现其中 最小公倍数为abcd=最大公约数为bc*x/bc*y/bc =xy/bc 也就是说 最小公倍数=两数之积/最大公约数

user: user-3
content: 一般这种证明 反证法都是可以的

user: user-4
content: 数A,B，其最大公约数为C，最小公倍数为D 则A=Ca B=Cb D=Cab

user: user-5
content: 别把数学研究的太深  那样你会变成。。。。。。疯子。

user: user-6
content: 考虑素数p,分解a后有p的u次方,b中有p的v次方. 于是最大公约数中p的指数是min(u, v),最小公倍数中p的指数是max(u, v),乘积中p的指数是u+v u+v-min(u, v) = max(u, v) 对所有的素数都有上式,于是有结果.

user: user-7
content: 这是数学问题吧，公理，还是定理？ 就像1+1为什么等于2一样...

user: user-8
content: 数论
user-0 提问: C+win32开发的一些疑惑

回复:
user: user-1
content: 引用 9 楼 xiaopo_poxiao 的回复:[quote=引用 8 楼 caozhy 的回复:] 说实话，意义不大。就好比我学计算机的时候，总有一帮好为人师的老家伙语重心长地说，BGI（Borland Graphics Interface）、OWL、DOS编程、80x86汇编什么的才是“基础”，还有什么Windows 3.X不是在DOS上跑么？那么你搞Windows开发能不知道DOS之类的观点。幸亏没有听他们的。  我见过很多很多很优秀的18、9岁的孩子，非常有编程天赋，他们不少对SDK MFC甚至C++ Java这些东西都一无所知。我觉得这一点问题都没有。 如果是为了工作，我想你说的挺对的。如果是单纯的玩计算机，我想学那些没错，包括现在。[/quote]  我觉得SDK一点也不“好玩”。如果你觉得好玩，那么这只能是一种怪癖吧。就好比大多数人喜欢驾驶，但是我见过一个很爱车的人，他喜欢的不是驾驶，而是给普桑换正时皮带和火花塞。

user: user-2
content: 引用 8 楼 caozhy 的回复:说实话，意义不大。就好比我学计算机的时候，总有一帮好为人师的老家伙语重心长地说，BGI（Borland Graphics Interface）、OWL、DOS编程、80x86汇编什么的才是“基础”，还有什么Windows 3.X不是在DOS上跑么？那么你搞Windows开发能不知道DOS之类的观点。幸亏没有听他们的。  我见过很多很多很优秀的18、9岁的孩子，非常有编程天赋，他们不少对SDK MFC甚至C++ Java这些东西都一无所知。我觉得这一点问题都没有。 如果是为了工作，我想你说的挺对的。如果是单纯的玩计算机，我想学那些没错，包括现在。

user: user-1
content: 说实话，意义不大。就好比我学计算机的时候，总有一帮好为人师的老家伙语重心长地说，BGI（Borland Graphics Interface）、OWL、DOS编程、80x86汇编什么的才是“基础”，还有什么Windows 3.X不是在DOS上跑么？那么你搞Windows开发能不知道DOS之类的观点。幸亏没有听他们的。  我见过很多很多很优秀的18、9岁的孩子，非常有编程天赋，他们不少对SDK MFC甚至C++ Java这些东西都一无所知。我觉得这一点问题都没有。

user: user-3
content: 不需要了解具体API（很多东西没什么用，很多东西不限定C就没什么用），但是基本常识要知道。

user: user-4
content: 引用 楼主 u012114301 的回复:小弟陷入了一片迷茫，现在学习C+window sdk 开发应用程序，到底还有没有意义，感觉跟不上时代节奏了，在C#和Java面前感觉这种模式开发很慢，很繁琐.求大牛们解答。（本人已经大三了）  不懂win32/64，你怎么做windows程序员？？？

user: user-0
content: 小弟懂了哈，谢谢

user: user-5
content: 不了解win32 API,很多底层功能没法干

user: user-6
content: #pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> HWND WINAPI GetConsoleWindow(); void HideTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = FALSE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } void ShowTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = TRUE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } int main() {     HWND  hwnd;     HDC   hdc;     HFONT hfont;     int i,x,y;       srand(time(NULL));     system("color F0");     system("cls");     HideTheCursor();     hwnd  = GetConsoleWindow();     hdc   = GetDC(hwnd);     hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");     SelectObject(hdc,hfont);     TextOut(hdc,10,10,"地球人都知道！",14);     MoveToEx(hdc,5,5,NULL);     LineTo(hdc,300,  5);     LineTo(hdc,300, 60);     LineTo(hdc,  5, 60);     LineTo(hdc,  5,  5);     for (i=0;i<100;i++) {         x=rand()%400;         y=rand()%300;         SetPixel(hdc,x,y,0);     }     DeleteObject(hfont);     ReleaseDC(hwnd,hdc);     getchar();     system("color 07");     system("cls");     ShowTheCursor();     return 0; }

user: user-7
content: 你觉得汇编和Win32 API比来哪个开发更快？ 要看你具体的工作需求吧

user: user-8
content: 个人认为，windows sdk是必须的基础。
user-0 提问: 事件对象和全局变量的区别

回复:
user: user-1
content: 《Windows核心编程》

user: user-0
content: 引用 5 楼 lm_whales 的回复:1）事件，可以同步； 全局变量，只能用于指示状态； 不具有线程同步功能。 即使是BOOL，也不是一条指令，就改变的。  2）全局变量，代码是全速运行，循环检查状态，属于忙等待；    CPU处于空忙状态，没有做任何事情，但是一直在忙。        事件锁住以后，线程挂起，不在执行代码。    属于空闲等待。在此期间，其它线程可以做任何事，不受等待线程的影响。  忙等待一直占用CPU； 空闲等待，只有等待时候，不占用CPU。   全局变量，需要循环检测，所以一直在运行； 响应速度快，但是由于空忙，效率太低。    事件挂起线程，需要线程切换，才能重新执行，响应速度慢； 但是，由于，不占用CPU时间，可以给其他，需要CPU的线程，让出CPU； CPU利用率高，所以代码效率高。 非常感谢，讲的比较全面、具体

user: user-2
content: 1）事件，可以同步； 全局变量，只能用于指示状态； 不具有线程同步功能。 即使是BOOL，也不是一条指令，就改变的。  2）全局变量，代码是全速运行，循环检查状态，属于忙等待；    CPU处于空忙状态，没有做任何事情，但是一直在忙。        事件锁住以后，线程挂起，不在执行代码。    属于空闲等待。在此期间，其它线程可以做任何事，不受等待线程的影响。  忙等待一直占用CPU； 空闲等待，只有等待时候，不占用CPU。   全局变量，需要循环检测，所以一直在运行； 响应速度快，但是由于空忙，效率太低。    事件挂起线程，需要线程切换，才能重新执行，响应速度慢； 但是，由于，不占用CPU时间，可以给其他，需要CPU的线程，让出CPU； CPU利用率高，所以代码效率高。

user: user-3
content: 这两个有关系么？

user: user-0
content: 引用 1 楼 user-4 的回复:全局变量操作不是原子操作，event是可以保证原子操作的。 原理上全局变量是会出现多个线程同时进入的情况的。  说的非常有道理。另外windows中，“消息”和“事件”到底有什么区别？它们的概念有定义么？

user: user-0
content: windows中，“消息”和“事件”到底有什么区别？它们的概念有定义么？

user: user-4
content: 全局变量操作不是原子操作，event是可以保证原子操作的。 原理上全局变量是会出现多个线程同时进入的情况的。
user-0 提问: 一道c语言笔试题，请问各位大侠这是实现了什么功能？

回复:
user: user-1
content: 取最新20个数据的平均值。

user: user-2
content: http://baike.baidu.com/link?url=SQeZDt1F0a13DoqVk5BtmRcNfWOlE8VvJwjzDCudAAJ1HQ3HZhzHjw4zwGpSsSv9MeLbONdQJ9HP7TCQ1pZ0lK 用来计算滑动平均值啊，你看看百科这个例子

user: user-3
content: 代码是错误的  buff[i] = buff[i++];未定义行为了

user: user-4
content: 采集一次新的数据，并用最新的数据覆盖旧的数据，然后计算之前的20次采集到的数据的平均值。

user: user-5
content: 新手不明白什么叫滑动平均窗口，难道这是网络应用？

user: user-2
content: 那当然有啦。只是所谓较好是什么个概念？ 他这里有不少无谓的运算浪费了运算力，还有buf的平移，如果只是为了计算滑动平均值，当然没必要他这么复杂。但是如果是其他目的，另当别论。

user: user-0
content: 引用 5 楼 u010599631 的回复:滑动平均窗口，每次前进一个步骤，将最老的数据去掉，将最新的数据加进来，然后求均值。 请问还有没有实现这功能较好的方法啊！

user: user-6
content: 引用 5 楼 u010599631 的回复:滑动平均窗口，每次前进一个步骤，将最老的数据去掉，将最新的数据加进来，然后求均值。+2

user: user-7
content: 引用 5 楼 u010599631 的回复:滑动平均窗口，每次前进一个步骤，将最老的数据去掉，将最新的数据加进来，然后求均值。+1

user: user-2
content: 滑动平均窗口，每次前进一个步骤，将最老的数据去掉，将最新的数据加进来，然后求均值。

user: user-3
content: 每次 舍弃数组第0个数 把newdata填入数组尾部  然后返回 处理之后的数组元素平均数

user: user-0
content: 引用 2 楼 lin5161678 的回复:代码是错误的  buff[i] = buff[i++];未定义行为了 不好意思，写错了是buff[i] = buf[i+1];
user-0 提问: 问一道C语言编程题~~！插头。。。

回复:
user: user-0
content: 上面那个代码，在c-free上不能运行，显示ERROR: array size 200000 exceeded limit 20000 for evaluation edition 是char定义的字符串有最大上限的关系吗？  我是用这个运行的，测试了几个数据貌似都没错，虽然对指针还是一窍不通 #include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXN 200000 int main() {     char *c,*a,*b,*h;     int E,q,n,i,c1,c2,j,k,s;     c=malloc(sizeof(char)*200000);     a=malloc(sizeof(char)*200000);     b=malloc(sizeof(char)*200000);     h=malloc(sizeof(char)*200000);     if(c==NULL||a==NULL||b==NULL||h==NULL)     exit(0);     while(scanf("%d",&n)!=EOF)     {         getchar();         gets(c);         j=0;k=0;         memset(a,0,sizeof(a)); memset(b,0,sizeof(b));         for(i=0;c[i]!='\0';i++)         {             if(c[i]=='1')             {a[j]=c[i];              j++;}              else if(c[i]=='2')              {b[k]=c[i];               k++;}           }           c1=j;c2=k;           memset(c,0,sizeof(c));//?           strcpy(c,a);           strcat(c,b);           s=j+2*k;           memset(h,0,sizeof(h));           if(s<=n)           {E=(1+c1+c2)*(c1+c2)/2;}           else           {i=0;j=0;             while(j<=n-1)             {                 if(c[i]=='1')                 {h[j]='1';i++;j++;c1--;}                 else                 {h[j]='2';h[j+1]='1';j=j+2;i++;c2--;}             }             q=0;             for(i=0;i<n;i++)             {                 if(h[i]=='1'){q++;}             }             E=(1+q)*q/2;             if(h[n-2]=='2'){E+=q*c2;}             else             {                 if(h[n-1]=='1'){E+=q*c1+(q-1)*c2;}                 else{E+=q*(c2+1);}             }         }         if(E<0){E=0;}         printf("%d\n",E);     }     return 0; }
user-0 提问: socket 缓存区大小问题，高手求进

回复:
user: user-0
content: 引用 1 楼 hairetz 的回复:楼主在干嘛？想一次write大于发送缓冲区的数据？你先搞明白阻塞write和非阻塞write的区别，你把cli的代码设置为非阻塞，就可以知道了。  tcp阻塞会阻塞住，直到数据全部写入缓冲区为止，正常情况，都能写入的。  可以看下我这边文章： http://blog.csdn.net/hairetz/article/details/17968383   我不是想一次发送大于接收端的内容，而是，分批次去发，，，， 的

user: user-1
content: “亲，你打错电话了！”

user: user-1
content: 想象一下，打一通电话，假设说话方一直说个不停，听话方脑中最多能缓存多少个字，直到缓存满了忍不住打断说话方？

user: user-2
content: 楼主在干嘛？想一次write大于发送缓冲区的数据？你先搞明白阻塞write和非阻塞write的区别，你把cli的代码设置为非阻塞，就可以知道了。  tcp阻塞会阻塞住，直到数据全部写入缓冲区为止，正常情况，都能写入的。  可以看下我这边文章： http://blog.csdn.net/hairetz/article/details/17968383
user-0 提问: 条件编译与重复定义的问题————————————————

回复:
user: user-1
content: 引用 楼主 u013393674 的回复:假设头文件head.h: #ifndef __S1_H__ #define __S1_H__ void led_init(void); #endif  建立2个文件， 第一个文件为file1.c ，并将头文件包含进去 第二个文件为file2.c ,也将头文件包含进去。 首先编译file1.c，头文件肯定会被包含进去并编译， 接着编译file2.c，头文件会被包含进去并编译吗？  个人认为：编译file2.c，头文件会被包含进去并编译。原因如下： file1.c里面include了head.h 而尽管head.h里面有#define __S1_H__ 事实上，#define 的作用域只限于单个文件，所以__S1_H__在file1.c编译完后就没了，编译file2.c时，#ifndef __S1_H__依然是成立的，因此file2.c会继续 include并编译。条件编译是为了防止同一文件中多次包含的。 --------------------------对吗？？？？ 正确

user: user-2
content: #ifndef __S1_H__  //如果没有定义 __S1_H__  就会包含

user: user-3
content: .h 可以被 .h 包含，也可以被.c 包含 如果 .h 和.c 都包含了某个.h 则这个共同包含的文件被重复包含； 一个.h 也可能被一个.c 单独 包含若干次。  那么用了 #ifndef __S1_H__ #define __S1_H__ 。。。。。。。 #endif  那种方法以后， 。。。。这部分 就只有一次包含被编译，另一次(n-1次)被忽略，不再编译第二次。  这就是，防止重复包含的意义。 这是利用，所有编译器，一定支持的技术实现的，算是一种技巧。  #pragma once作用类似。  不过需要编译器支持该预编译指令； 编译器实现的时候，需要记录，头文件是否已经编译。  对于不同的.c,.cpp ，编译器是分别编译的，所以互不相干。  有些编译器，为了加快编译速度， 会对某些头文件,专门进行独立的预编译， 然后所有.c,.cpp 等,实现文件编译时； 利用预编译头文件的成果，加快编译速度。  BCB 是 #include 在某些区域时， 对包含的头文件，进行独立的预编译。  VC 是 对 stdafx.h 或者设定的头文件 该头文件，包含许多文件，在项目中许多.c,.cpp 都要用到 进行独立的预编译。

user: user-4
content: yes,所以如果那个.h里有一个全局变量就会重复定义。

user: user-5
content: #ifndef __S1_H__ #define __S1_H__ //你的数据定义处 #endif

user: user-6
content: #ifndef __S1_H__ #define __S1_H__  #endif  类似于#pragma once 是防止重复包含的  条件编译是类似于： #ifdef ___AAA #define AAA AAAS #endif

user: user-7
content: 引用 8 楼 zhao4zhong1 的回复:事实上，#define 的作用域不限于单个文件。 LZ指的单个文件应该是单个编译单元，所谓include其实就是个复制黏贴，把头文件的内容复制到include的地方。 一个源文件会包含很多头文件，这些头文件有的会包含其他头文件，导致最终一个源文件包含了重复的头文件，那个#define就能保证这些重复头文件中只有一个的内容是有效的，其他都被忽略。同样，这些头文件里的#define的东西也只在这一个源文件里有效。若希望其他源文件中也有相同的宏定义，只要在那些源文件中再次包含相应的头文件即可。否则那些源文件就不存在此宏定义。 总而言之，LZ的说法应该是对滴

user: user-8
content: 事实上，#define 的作用域不限于单个文件。

user: user-9
content: #include 只是单纯的复制而已 就是在预处理的时候把head.h的内容复制到两个点c里 编译只是编译点c文件 然后看makefile是先编译file1还是先编译file2 然后#define也是编译之前预处理的时候就会做的 这样写是不会被编译两次的
user-0 提问: （困惑）数组和二维指针的关系

回复:
user: user-1
content: //在堆中开辟一个4×5的二维int数组 #include <stdio.h> #include <malloc.h> int **p; int i,j; void main() {     p=(int **)malloc(4*sizeof(int *));     if (NULL==p) return;     for (i=0;i<4;i++) {         p[i]=(int *)malloc(5*sizeof(int));         if (NULL==p[i]) return;     }     for (i=0;i<4;i++) {         for (j=0;j<5;j++) {             p[i][j]=i*5+j;         }     }     for (i=0;i<4;i++) {         for (j=0;j<5;j++) {             printf(" %2d",p[i][j]);         }         printf("\n");     }     for (i=0;i<4;i++) {         free(p[i]);     }     free(p); } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19

user: user-2
content: 在这里zip[0]代表一个指针，代表指向一个一维数组（zip[0][0], zip[0][1]），它的值是与2维数组第一个元素的地址是一样的 即: &zip[0][0] zip也是一个指针，代表指向整个2维数组 它的值也与2维数组的第一个元素地址是一样的 即 &zip[0][0] 既然 zip[0]代表指向一唯数组，那么就类似于 int a[4]; 那么 a 与 &a 得值不也一样么？

user: user-3
content: int zip[4][2];  zip是一个数组，有4个成员，每个成员是一个数组，所以zip是一个指向2两个int数组的指针。 int (*int2ptr)[2] = zip;  zip[0] 是一个数组，有2个成员，每个成员是一个int，数组可以退化成指针。int *ptr = zip[0];

user: user-0
content: 引用 1 楼 dizuo 的回复:int zip[4][2];  zip是一个数组，有4个成员，每个成员是一个数组，所以zip是一个指向2两个int数组的指针。 int (*int2ptr)[2] = zip;  zip[0] 是一个数组，有2个成员，每个成员是一个int，数组可以退化成指针。int *ptr = zip[0]; 谢谢回复，你说的我可以理解，我现在的困惑是：对于zip[0]他的内存地址是不是就等于他存储的数值？

user: user-4
user-0 提问: 猜数字游戏，各位帮忙看下怎样才可以在用户输入‘y’以后继续游戏。

回复:
user: user-1
content: printf("答对了~再来吗(y/s)？\n");前面添加一行代码：getchar()或者fflush(stdio);

user: user-0
content: 太好了~问题解决了~谢谢各位哦。 我的解决方法是： 1、    把    b=0;    a = (rand()%10)+1;    放到    printf("开始：");    的下一行 2、在最后一个scanf("%c",&ch);    之前增加    fflush(stdin); 可是我不知道 fflush(stdin);是怎么起作用的...还有...怎么在帖子里向人提问...？

user: user-2
content: printf("答对了~再来吗(y/s)？\n"); scanf("%c",&ch); if(ch=='y')    continue; else    break; }while(1);

user: user-3
content: 改用getch()试试看。  引用 楼主 qun31 的回复:这是源代码： # include <stdio.h> # include <stdlib.h> # include <time.h>  int main(void) { 	int a,b,c; 	char ch; 	b=0; 	 	srand(time(NULL)); 	a = (rand()%10)+1; 	 	do 	{ 		printf("开始："); 		while(a!=c) 		{ 			++b; 			scanf("%d",&c); 			if(a>c&&b<4) 				printf("太小了。\n"); 			if(a<c&&b<4) 				printf("太大了。\n"); 			if(b>=4) 			{ 				printf("机会用完了，拜拜~\n"); 				break; 			} 		} 			printf("答对了~再来吗(y/s)？\n"); 			scanf("%c",&ch); 	}while(ch=='y'); 	 	return 0; }  这个编译以后，猜对的话程序就结束了，并没有出现请求键入的那一步，我一直都想不明白怎么让它输入‘y’继续，所以只能求助各位了，在此先谢谢各位的帮忙了~

user: user-4
content: 如果是vc scanf("%c",&ch); 之前增加 fflush(stdin);  如果是其他编译器, 增加的语句改成 while ( (ch = getchar()) != '\n' && ch != EOF ) ;

user: user-4
content: b=0; a = (rand()%10)+1; 要放到 printf("开始："); 以后

user: user-5
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
user-0 提问: C语言：VC6.0中重复定义：int i=0 ; 居然编译连接运行都能运行

回复:
user: user-1
content: LZ两个文件里面都没有引用i,试一试看都引用看下。报不报错。

user: user-2
content: 谁让你用vc6了。vc6是标准前的东西。 for(int x = 0;...) {... }  x++; // x 还活着

user: user-3
content: 引用 3 楼 ForestDB 的回复:因为你的代码中没有引用i，i就是个弱引用，没有引起冲突而已。 编译器特定的优化实现，只能这样解释了。 +1   引用 6 楼 baipv008 的回复:[quote=引用 4 楼 u012571406 的回复:] 头文件没有包含#include<stdio.h>,文件2可以用printf?????求解  有的编译器自动默认包含stdio.h[/quote] 我认为主要是是默认去链接std库,不包含头文件vs08会给出warning

user: user-4
content: 这确实跟强引用和弱引用有关系，而且还跟编译器的实现有关系，不用过分纠结。本身头文件就建议除某些特殊情况下只包含声明，你来个int i = 0;非要跟他过不去

user: user-5
content: 引用 6 楼 baipv008 的回复:[quote=引用 4 楼 u012571406 的回复:] 头文件没有包含#include<stdio.h>,文件2可以用printf?????求解  有的编译器自动默认包含stdio.h[/quote] C89支持隐式声明，根本不需要一定包含。

user: user-5
content: VC6莫名中枪。 没记错的话链接时才能发现的重定义不要求都报错。对于C++也类似。至于是不是挂了就不能指望了（大概对于C是UB，C++是ill-formed）。 顺便，如果去掉 = 0，放在同一个文件写两遍，就算写一个文件里都能过。这是C的特产：tentative definition。C++不支持这种糟粕。

user: user-6
content: 引用 4 楼 u012571406 的回复:头文件没有包含#include<stdio.h>,文件2可以用printf?????求解  有的编译器自动默认包含stdio.h

user: user-7
content: 因为你的代码中没有引用i，i就是个弱引用，没有引起冲突而已。 编译器特定的优化实现，只能这样解释了。

user: user-8
content: 编译器的bug？？

user: user-9
content: vs2005编译失败，重定义

user: user-10
content: 引用 4 楼 u012571406 的回复:头文件没有包含#include<stdio.h>,文件2可以用printf?????求解还是说我以前的理解就是错的？

user: user-10
content: 头文件没有包含#include<stdio.h>,文件2可以用printf?????求解
user-0 提问: VS2013生成程序问题

回复:
user: user-0
content: 试过了，还是没有用的。并且没有中过毒 引用 4 楼 KenZhang1031 的回复:如果不是中毒，那么是因为： vs2013编译器默认情况下生成的exe会默认只支持vista及以上版本的windows系统，解决办法： 右击相应的项目，选择“属性”，在项目属性页中的“配置属性”下面的“常规”里面，把“平台工具集”，由“Visual Studio 2013”改成“Visual Studio 2013 - Windows XP”，确定之后，重新生成项目即可。

user: user-1
content: 如果不是中毒，那么是因为： vs2013编译器默认情况下生成的exe会默认只支持vista及以上版本的windows系统，解决办法： 右击相应的项目，选择“属性”，在项目属性页中的“配置属性”下面的“常规”里面，把“平台工具集”，由“Visual Studio 2013”改成“Visual Studio 2013 - Windows XP”，确定之后，重新生成项目即可。

user: user-1
content: 你确定你的文件不是中了毒？

user: user-0
content: 试过了，没用的。况且64位的电脑不是可以用兼容模式运行32位程序的吗？ 引用 1 楼 turingo 的回复:要用64位来编译。

user: user-2
content: 要用64位来编译。  引用 楼主 u013480034 的回复:我使用VS2013静态编译C语言win32控制台程序，在本机编译运行没问题后，我把Debug文件夹中生成的EXE发给别人运行却显示“不是有效的win32应用程序”，不能运行，怎么回事？ 我的操作系统是windows8.1 32位，别人的是windows xp 64位。难道说我就不能生成可以在别的电脑上运行的程序吗？像商业软件一样具有通用性，可以兼容多种系统运行环境？求给予解答。 我是按照这个方法静态编译的：在项目菜单中，选择“属性”，在项目属性中的“配置属性”中的“C/C++”下面的“代码生成”一项，由默认的“多线程调试DLL(/MDd)”，改成“多线程 (/MT)”。 不知道是不是还要设置什么才可以在别的普通电脑上无障碍运行？
user-0 提问: 求汇编语言与机器语言、C语言、JAVA执行效率

回复:
user: user-1
content: 我还想多说几句： 没有绝对意义上最快的程序  我们知道，一个程序往往需要在时间和空间两者做出妥协，即如果一个程序要快，那么它占用的存储就多。然而，现实是，我们的硬件没有无限的存储，而且硬件的存储访问速度是有等级的（寄存器快过L1缓存，L1缓存快过L2缓存，L2缓存快过L3缓存（如果有），最慢的是内存）。因此如果一个程序太大，那么它非但不快，反而更慢，因为它需要访问更慢的存储器。现在的问题就是，我们需要优化程序中哪些地方，显然程序中访问最频繁，调用次数最多的地方更值得我们多“浪费”一些存储器，而其余地方，宁可牺牲一点速度，写得更紧凑，这样总体的性能更好。但是问题来了，我们怎么知道程序中什么地方访问最频繁，调用次数最多（学术上叫做程序的热点）？我们只有反复运行程序，从统计意义上分析，或者根据经验总结。但是我们知道，程序的一次运行，存在偶然性，这和它的输入数据、外部环境都有关系，是不可预知的。所以我们可能写出大多数情况下很快的程序，但是不能写出次次都运行很快的程序。  再者我前面说了，你可以写出在你的电脑上运行很快的程序，或者在大多数人电脑上很快的程序，但是很难写出在所有人的电脑上都运行很快的程序。

user: user-2
content: 用数值衡量不出来，只能说1+1这样简单的操作，除了java要慢点，其它三个是一样的。因为java要经过JVM去操作，java的和平台无关是需要付出代价的。对于复杂的操作，也是java慢点，其它三者，看程序员怎么写代码了，假设写程序的人是天才，不考虑他写的代码没有编译器优化的好的话，假设他可以无限优化的话，那肯定是越接近机器的代码有更大的优化空间，机器代码>汇编>C，然而实际情况是一般人写的代码未必有编译器优化得好，所以用C就可以了。算法上的优化远比选择C还是汇编要更重要。 那什么时候用汇编呢？一是对运行时间要求比较苛刻的代码段，比如要精确延时，因为汇编可以算出每条代码用多少指令周期，因此可以精确计算代码的执行时间；二是有一些操作，C无法做到的也要用汇编，比如读取时间戳记数器TSC。 引用 楼主 u012909623 的回复:比如有道题要算1+1=？，那么分别用JAVA、C语言、ASM、机器语言编写后执行程序，那么这4个程序之间的运行速度之比大概是多少呢？只需要说个大概就行，题目也不一定是1+1，但要说出数值，不要说ASM稍微比机器语言慢一点点这种没有度量标准的话。

user: user-1
content: 估计你可能完全没有概念，因为看得出，你的问法非常业余。我再多说几句，没有很高深的理论。  你可以下载一个叫super pi的软件，这个小程序可以计算圆周率。 我希望你手边有不止一台计算机，最好它们CPU的型号还能有所差异。  我们可以做这样两个实验： 实验1，在相同的处理器上，我们设置不同的内存频率，运行100万位计算，我们观察运行所需要的时间。 我用我的计算机做了一个实验，结果如下： 同样都是 Intel Celeron E1200 @ 2.13GHz CPU，设置DDR400和DDR800，运行1M运算，分别用时36秒和31秒。相差超过10%。  实验2，在不同的处理器上运行100万位计算和3200万位计算，观察时间，结果如下： Intel Celeron E1200 @ 2.13GHz 1M 31秒。32M 29分钟。 Intel Pentium E5200 @ 2.5GHz 1M 21秒。32M 25分钟。 我们看到，E5200在1M规模下的运算优势将近50%，而在32M位运算上，只领先了16%。  如果你有兴趣，你也可以做类似的实验。  这说明了即便对于一个已经确定的程序，在不同的硬件上运行，花费的时间长短也是差异巨大的。  我们还可以再做一个实验： 运行WinRAR 5.0自带的性能测试，下面是对比 Intel Celeron E1200 @ 2.13GHz 结果 940KB/s AMD Athlon 64 X2 5200+ @ 2.7GHz 结果 1420KB/s 运行Super Pi 1M运算，下面是对比 Intel Celeron E1200 @ 2.13GHz 结果 31秒 AMD Athlon 64 X2 5200+ @ 2.7GHz 结果 36秒  很明显，Intel的处理器在第一个项目中大幅落后AMD的处理器，但是在第二个项目，则反倒领先。  因此，你是一个程序的开发者，你能够脱离具体的硬件说你的处理器运行时间定量的运行效率是多少么？

user: user-1
content: 对于简单的逻辑，Java、C产生的汇编代码和手工写的机器代码完全一样，所以运行速度是1:1:1。 但是Java运行之初有一个将字节码转化为机器代码的过程，会消耗一个固定的时间，这个时间远远比做一个加法要大得多，所以程序的运行时间可能相差很多很多倍。  一般来说，现代的处理器非常非常复杂，很少有一般的程序员可以手工写出比C/C++编译器更好的机器代码，所以对于一般情况下来说，用C++写程序会比直接写汇编效率更高一些。更重要的是，不同处理器的差异（缓存容量不同、指令集不同、分支预测机制不同）使得对于同样的程序，很难做到在不同的处理器上都保持高效，这方面，Java相比较C++更有优势，因为它在程序运行的时候才做针对特定硬件的代码优化，而C++必须产生所有处理器都可以运行并且综合效率较高的程序。因此，Java程序在某些情况下，效率要比C程序更高，但是总体上说，C程序的效率要好于Java，但是这种局面可能会在未来逆转。目前C#编译器的效率已经超过了原生的C++编译器（微软的JIT和C++编译器出自同一团队）。
user-0 提问: 查找数组里面重复次数最小的数值。

回复:
user: user-0
content: 引用 1 楼 KenZhang1031 的回复:需求不明确，有可能一百万个数全不相同（重复次数全为0），那结果不是有一百万个？ 引用 楼主 u012805870 的回复:RT，查找一个数值里面重复次数最小的数值。 那就取第一个呗！

user: user-1
content: 抛砖引玉！  int myArray[LENGTH];//是你的数组  	//map的第一个int是数字，第二个它的数量 	map<int,int> amountOfEveryNum;  	for(int i=0; i!=LENGTH; i++) 	{ 		amountOfEveryNum[myArray[i]]++; 	}  	//将map键值翻转，map会自动排序第一个就是数量最少的了 	map<int,int> swapKeyAndValue; 	map<int,int>::iterator begin=amountOfEveryNum.begin(); 	map<int,int>::iterator end=amountOfEveryNum.end(); 	while(begin!=end) 	{ 		swapKeyAndValue[begin->second]=begin->first; 		begin++; 	} 	cout<<swapKeyAndValue.begin()->second<<endl;

user: user-2
content: 是数组 还是 数值？？

user: user-3
content: 需求残缺不全 拿回去重写

user: user-4
content: 逻辑上最简单的办法是 对数组排序，然后遍历 逻辑上比较复杂但是效率比较高的办法... 坐等...

user: user-5
content: 是指单一数字？还是相邻的组合数字也算？

user: user-6
content: 需求不明确，有可能一百万个数全不相同（重复次数全为0），那结果不是有一百万个？ 引用 楼主 u012805870 的回复:RT，查找一个数值里面重复次数最小的数值。
user-0 提问: getchar（）

回复:
user: user-0
content: 我这就是上面还有一个回车吃的··scanf  没有贴出来 不好意思··

user: user-1
content: 引用 7 楼 huoqingna2332 的回复:[quote=引用 6 楼 JieWinli 的回复:] 我不知道getchar()对你而言有什么意义？ [/quote] 我也不知道，LZ到底想干嘛？

user: user-1
content: 引用 6 楼 JieWinli 的回复:我不知道getchar()对你而言有什么意义？

user: user-2
content: 在gets()前面加个getchar()，这是从哪儿学的武功秘籍？ LZ 弄懂为什么会有个回车在那儿了没？

user: user-3
content: 看完问题 我也一头雾水啊

user: user-4
content: 我不知道getchar()对你而言有什么意义？

user: user-5
content: 你为什么要吃掉回车呢，这是输出啊，去掉getchar（）就对了。  你可能跟输入混了，输入的时候，输完可以加个getchar()把缓冲区中的\n吃掉，但这里是输出，\n会清空缓冲区的，而你加个getchar()就必须要输入一个字符啊，就跟楼上说的不需要输入字符才奇怪呢。

user: user-6
content: 这里不是吃掉一个回车，是吐出来一个回车

user: user-0
content: 引用 1 楼 user-8 的回复:第二次循环没有了回车符呗！   怎么第二次 回车符 就没了？ 纳闷了

user: user-7
content: 这代码里getchar不该要，要了要求输入一个字符是正常的，不要求输入字符反而才是不正常的。

user: user-8
content: 第二次循环没有了回车符呗！
user-0 提问: 关于变量赋值问题

回复:
user: user-1
content: double x = 3.14; 	unsigned int z = x;  像这样，明显会丢失小数部分的，所以编译器会给予警告。 但是如果这样  double x = 3.1415; 	unsigned int z = (unsigned int)x;  就是在告诉编译器，我知道这么做为丢失数据，不要给我警告。

user: user-1
content: int main() { 	int a = 128; 	char c; 	c = a; 	printf("c=%d", c);  	return 0;  }  这是一个隐式类型转换，在赋值语句中，如果右操作数与左操作数的类型不一致，总是将右操作数转换为左操作数的类型，因为5在char(-128~127)的范围内，所以不会丢失数据。但是如果像上面一样，将a设为128，结果就不正确

user: user-2
content: 引用 17 楼 learner520 的回复:[quote=引用 14 楼 zhao4zhong1 的回复:] 试试release版 ？  试过了，没有看出来有啥区别的？  要怎么看呢？谢谢[/quote] 再试试release版，优化选项由Speed改为Size

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

user: user-3
content: 你换成大于128的数试试

user: user-0
content: 引用 14 楼 zhao4zhong1 的回复:试试release版 ？  试过了，没有看出来有啥区别的？  要怎么看呢？谢谢

user: user-0
content: 弄清楚这些数据在内存中是怎么存储的后，就搞懂了，谢谢大家了

user: user-4
content: char存数范围0到255  超过就有问题了

user: user-2
content: 试试release版 ？

user: user-5
content: 总觉得有时候解释一件事情是很困难的。

user: user-6
content: 一个字节8bite 5就是00000101，赋值给c还是不变

user: user-7
content: 5太小了  换大的就装不下了

user: user-8
content: 起始是“整形提升” 在作怪，这正式printf 的 %d 能正确输出好几个类型的值如char short的原因。

user: user-9
content: printf用%d打印char没什么问题的，是多少都能打印出来，这相当于把char值赋给整型，不会溢出和截断，反过来char=int则会被截断。

user: user-0
content: 上面是： c=a；  意思明白了，但是详细的处理过程不了解，大家能详细地说明这里存储过程吗？

user: user-10
content: 换个稍微大点数试试

user: user-11
content: 引用 楼主 learner520 的回复:c = d;//这个a吧。。 引用 1 楼 u011569364 的回复:c=d;//这里改成c=a；这里改成c=a

user: user-12
content: d是怎么来的

user: user-13
content: 一个Byte有8个bite的！

user: user-11
content: 5这个数太小了，你用1000试试； c=d;这个赋值的时候只是简答的把d截断，把一个字节赋值给c，打印的时候又转化成了整型，在前面补了三个字节0，所以最后打印结果是5
user-0 提问: struct中有char *成员变量，无法赋值，求解

回复:
user: user-1
content: 引用 10 楼 u013431701 的回复:引用 7 楼 u010800064 的回复: #include <stdlib.h> #include <stdio.h>  struct name {         char *p;         char *w; }na;  int  main(int argc, char **argv) {         char *test;         test = (char*)malloc(sizeof(test));          *test = 'a';          na.p = (char*)malloc(sizeof(test));         na.p[0] = 'A';          printf ("%c\n", na.p[0]);         return 0; }   代码没问题，注意释放自己分配的内存  [quote=引用 3 楼 u010800064 的回复:] 很老的编译器了，不要纠结这种问题了楼主···  用什么编译器啊,[/quote] Liunx下：gcc/g++  windows下，用visual studio 2005/8/10··· 最好下一个最新的破解版本，支持c++11

user: user-0
content: 引用 7 楼 u010800064 的回复: #include <stdlib.h> #include <stdio.h>  struct name {         char *p;         char *w; }na;  int  main(int argc, char **argv) {         char *test;         test = (char*)malloc(sizeof(test));          *test = 'a';          na.p = (char*)malloc(sizeof(test));         na.p[0] = 'A';          printf ("%c\n", na.p[0]);         return 0; }   代码没问题，注意释放自己分配的内存  引用 3 楼 u010800064 的回复:很老的编译器了，不要纠结这种问题了楼主···  用什么编译器啊,

user: user-1
content: 引用 5 楼 u013431701 的回复:[quote=引用 3 楼 u010800064 的回复:] 很老的编译器了，不要纠结这种问题了楼主···  那现在你们都用什么新的编译器啊，告诉我一下被，我也下载一个，多谢！[/quote] Liunx下：gcc/g++  windows下，用visual studio 2005/8/10··· 随便下一个继承环境

user: user-2
content: int main() {	 	struct name 	{ 		char * p; 		char * w; 	}na; 	 	na.p=(char*)malloc(4); 	na.p[0]='A'; 	 	printf("%c\n",na.p[0]); 	return 1;		  }

user: user-3
content: 对C而言，你粘贴的代码用了很多中文的括号和分号，把这些符号改过来后，用vs2012试了，没你说的问题，另外，na.p[0]建议加括号写成(na.p)[0]，最后一定要free掉。

user: user-1
content: #include <stdlib.h> #include <stdio.h>  struct name {         char *p;         char *w; }na;  int  main(int argc, char **argv) {         char *test;         test = (char*)malloc(sizeof(test));          *test = 'a';          na.p = (char*)malloc(sizeof(test));         na.p[0] = 'A';          printf ("%c\n", na.p[0]);         return 0; }   代码没问题，注意释放自己分配的内存  引用 3 楼 u010800064 的回复:很老的编译器了，不要纠结这种问题了楼主···

user: user-0
content: 引用 3 楼 u010800064 的回复:很老的编译器了，不要纠结这种问题了楼主···  那现在你们都用什么新的编译器啊，告诉我一下被，我也下载一个，多谢！

user: user-0
content: 引用 1 楼 user-5 的回复:LZ你个疯子，所有标点符号都是中文的，能编译过才怪，除了这个，程序语法没有任何问题。（malloc了却不free造成内存泄漏是另一回事）如果还不行，换个编译器，vc6.0已经老掉牙了  哈哈，我是手动打的，没有用这个编译， 但是编译的程序和这个是一样的，就是不能赋值，不明白怎么回事了.

user: user-1
content: 很老的编译器了，不要纠结这种问题了楼主···

user: user-4
content: na.p[0] = "A";//

user: user-5
content: LZ你个疯子，所有标点符号都是中文的，能编译过才怪，除了这个，程序语法没有任何问题。（malloc了却不free造成内存泄漏是另一回事）如果还不行，换个编译器，vc6.0已经老掉牙了
user-0 提问: 使用C语言创建文件夹遇到的问题

回复:
user: user-0
content: 引用 5 楼 Code_Fly 的回复:应该是转义的作用 恩恩 谢谢啊

user: user-1
content: 应该是转义的作用

user: user-0
content: 引用 3 楼 lx458004975 的回复:第一个\是告知后面那个\就是\，不转义 恩恩 知道了 谢谢

user: user-2
content: 第一个\是告知后面那个\就是\，不转义

user: user-0
content: 引用 1 楼 lx458004975 的回复:  sprintf(filename2,"md D:\\AB\\%s",filename); 可是电脑上不都是一个\么  两个\的话，为什么D:\不会出错，AB成功创建在D盘下

user: user-2
content: sprintf(filename2,"md D:\\AB\\%s",filename);
user-0 提问: fulpath1=&NewAddfulpath1[0]; 和	fulpath1=&NewAddfulpath1; 应是一样吧?

回复:
user: user-1
content: 为什么不fulpath1=(char *)NewAddfulpath1; 呢？

user: user-0
content: 请问 fulpath1=&NewAddfulpath1[0]; 和	fulpath1=&NewAddfulpath1;   fulpath1 值是一样的吧? (这样写, 不会有什么问题吧)

user: user-2
content: 引用 2 楼 huabinsir 的回复:[quote=引用 1 楼 user-3 的回复:] 值是一样的，但是不能这样去认为  请问, 为什么?[/quote]  一个是取数组指向的首地址，一个是取数组本身的地址！当是指针的时候两个值就是不同的了！

user: user-3
content: 引用 2 楼 huabinsir 的回复:[quote=引用 1 楼 user-3 的回复:] 值是一样的，但是不能这样去认为  请问, 为什么?[/quote]  反证法，如果是相同的 即&NewAddfulpath1[0]==&NewAddfulpath1 由于[]优先级较高 那么可以推出 &(NewAddfulpath1[0])==&(NewAddfulpath1) 即(NewAddfulpath1[0])==(NewAddfulpath1) 显然错误，反证不成立，原命题为假。  语义上来讲，第一个表达式对数组第一个元素求地址，第二个表达式对数组名求地址 含义不同

user: user-0
content: 引用 1 楼 user-3 的回复:值是一样的，但是不能这样去认为  请问, 为什么?

user: user-3
content: 值是一样的，但是不能这样去认为
user-0 提问: 获取网卡的IP(兼容两种类型)

回复:
user: user-0
content: 引用 2 楼 derekrose 的回复:所以你的问题是什么  在 h_adddrtypr = AF_INET6的时候  怎么来处理ip地址(ipv6), 也就是怎么保存下来。。。 有定义一个结构体。 typedef struct st_ip_type {     unsigned char type;     union     {         unsigned char ip_v6[IPV6_ADDR_LEN];         unsigned int ipv4;     }; }Ip_address;

user: user-0
content: 引用 1 楼 ml0719787 的回复:SF 帮顶 再看  在 h_adddrtypr = AF_INET6的时候  怎么来处理ip地址(ipv6), 也就是怎么保存下来。。。 有定义一个结构体。 typedef struct st_ip_type {     unsigned char type;     union     {         unsigned char ip_v6[IPV6_ADDR_LEN];         unsigned int ipv4;     }; }Ip_address;

user: user-0
content: 引用 1 楼 ml0719787 的回复:SF 帮顶 再看  回顶。。。！！！！

user: user-1
content: 所以你的问题是什么

user: user-2
content: SF 帮顶 再看
user-0 提问: 线性表顺序存储运行时出错，什么原因？

回复:
user: user-0
content: 灰常感谢，

user: user-1
content: 引用 3 楼 starytx 的回复:Print函数中这句： while(p != q) printf("%d",L.elem[i++]); p和q少个++吧？ while(p++ != q++) printf("%d",L.elem[i++]);大意了，q不用自增

user: user-2
content: 把楼主的代码修改了下，修改地方会注释 所有。运算符的地方我都改成了->，因为这里用的是指针  #include <stdio.h> #include <stdlib.h> #include <malloc.h>//这里我调整了位置，不知道你的行不行，我看着舒服这样 #define LIST_INIT_SIZE 100 #define LISTINCREMENT  10 typedef struct{ int *elem; int length; int listsize; }sqlist;  int Initlist(sqlist *L)//这里改成指针 {     L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));     if(!L->elem) exit(-2);     L->length = 0;     L->listsize = LIST_INIT_SIZE;     return 1; }  int Insert(sqlist *L,int i,int e)//这里改成指针 {     if(i<1||i>L->length + 1)return 0;     if(L->length>=L->listsize)     {         int * newbase = (int *)realloc(L->elem,(L->listsize + LISTINCREMENT)*sizeof(int));         if(!newbase) exit(-2);         L->elem = newbase;         L->listsize += LISTINCREMENT;     }     int *q = &(L->elem[i-1]);     int *p = &(L->elem[L->length - 1]);     for(; p>=q;--p) *(p+1) = *p;     *q = e;     L->length ++;     return 1; }  int Delete(sqlist *L,int i)//这里改成指针 {     if(i<1||i>L->length) return 0;     int *q = &(L->elem[i-1]);     int *p = &L->elem[L->length - 1];     for(;q != p;++q) *q = *(q+1);     --L->length;     return 1; }  void Print(sqlist *L)//这里改成指针 {     int i=0;     int *p = L->elem;     int *q = L->elem + L->length;//这里改了，所以最后的一句输出不需要了     while(p != q)     {         printf("%d",L->elem[i++]);         p++;//这里添加了一句     } }  int main() {     sqlist *L;     L = (sqlist *)malloc(sizeof(sqlist));     Initlist(L);     int i = 0,j = 1;     while(scanf("%d",&i) != EOF) Insert(L,j++,i);     Print(L);     free(L->elem);//建议楼主这个地方在写一个destory函数用来释放Initlist开辟的空间。这里用free有点四不象。     free(L);     return 0; }

user: user-0
content: 好吧，失误，但是为什么还是出错呢，依然是那样的

user: user-1
content: 引用 4 楼 coincidenceWQ 的回复:受教！那个free加在最后可以么？你说呢？都return 0;了，你后边的free还能执行到吗？

user: user-0
content: 受教！那个free加在最后可以么？

user: user-1
content: Print函数中这句： while(p != q) printf("%d",L.elem[i++]); p和q少个++吧？ while(p++ != q++) printf("%d",L.elem[i++]);

user: user-0
content: 我用的VS,怎么调试？其实我是感觉顺序存储的原因，不是代码错了。。想知道这个顺序存储的一些利弊。

user: user-1
content: 按F5，调试一下
user-0 提问: linux平台下的email邮件库移植到android平台问题？

回复:
user: user-0
content: 引用 3 楼 ForestDB 的回复:所谓移植不就是交叉编译么？ 用android平台下的编译器arm-linux-androideabi-gcc、头文件android-ndk-r6/platforms/android-8/arch-arm/usr/include、lib文件android-ndk-r6/platforms/android-9/arch-arm/usr/lib/ 将linux下面能够发送和接收邮件的email源代码重新编译成libemail4android.a，能够让libemail4android.a在android平台发送和接收邮件。 但是找了些开源的email邮件库，编译时会依赖很多的别的诸如curl、db-4.5、sasl2、expat等.a文件。这就带来了不小麻烦，android下面不存在这些.a,交叉编译他们非常麻烦，错误一大堆，简直让人抓狂，所以在寻找没有什么依赖的邮件库。

user: user-0
content: 引用 2 楼 paopaozai 的回复:mutt+msmtp ？ smtp和pop3，发送和接收邮件就可以了。

user: user-0
content: 引用 1 楼 mofabang 的回复:先顶起，研究中，如果能够找到合适的email库，移植成功了，就分享出来，让有需要的朋友借鉴。 好多依赖啊，交叉编译也是编译不过。头大。

user: user-1
content: 所谓移植不就是交叉编译么？

user: user-2
content: mutt+msmtp ？

user: user-3
content: 交叉编译？？我学嵌入式的时候用过。。。

user: user-0
content: 先顶起，研究中，如果能够找到合适的email库，移植成功了，就分享出来，让有需要的朋友借鉴。
user-0 提问: 新手求助：用C语言打开文本并将一行字符列成数行

回复:
user: user-1
content: 请无视5楼。 //打开一个文本，里边有一行字符，将这些字符列成每行四个字符并排成数行 #include <stdio.h> #include <string.h> char ln[101],*p; FILE *f; int L; int main() {     f=fopen("in.txt","r");     if (NULL==f) {         printf("Can not open file in.txt!\n");         return 1;     }     while (1) {         if (NULL==fgets(ln,101,f)) break;         L=strlen(ln);         p=ln;         while (1) {             printf("%.4s\n",p);             p+=4;             if (p-ln>=L) break;         }         if ('\n'==ln[L-1]) break;     }     fclose(f);     return 0; }

user: user-1
content: 仅供参考：//输入一个小于200的字符串，将该字符串以“_”分割成小于20的字串。请输出原串和子串。 //请注意以下测试用例： //·输入空串 //·输入长度为9的字符串 //·输入长度为19的字符串 //·输入长度为20的字符串 //·输入长度为38的字符串 //·输入长度为205的字符串 //·理论上还应该考虑输入串中包含_如何处理的逻辑（这个在我的代码中没有体现） #include <stdio.h> #include <string.h> char s[201]; char d[11][21]; int i,L,n; void main() {     fgets(s,201,stdin);     L=strlen(s);     if ('\n'==s[L-1]) {s[L-1]=0;L--;}     for (i=0;i<L;i++) {         d[i/19][i%19]=s[i];         if (i!=L-1 && 18==(i%19)) {             d[i/19][19]='_';             d[i/19][20]=0;         }     }     d[i/19][i%19]=0;     if (i>0 && 0==(i%19)) {         n=i/19;     } else {         n=i/19+1;     }     printf("s=\"%s\"\n",s);     for (i=0;i<n;i++) {         printf("d[%2d]=\"%s\"\n",i,d[i]);     } }

user: user-2
content: 乱写的，看看行不行 #include<stdio.h> void main() { 	char ch; 	char a[100]; 	int i=0; 	FILE *fp=fopen("win.txt","r"); 	while((ch=getc(fp))!=EOF) 	{ 		a[i]=ch; 		i++; 	} 	fp=fopen("win.txt","w"); 	for(int j=0;j<=i;) 	{	 		for(int k=0;k<4;k++) 		{ 			fprintf(fp,"%c",a[j]); 			j++; 			if(j>=i)break; 		} 		fprintf(fp,"\n"); 	} }

user: user-3
content: 打开文件。 循环，每次读四个字符，写出来。直到文件结尾。 要注意，你未必能拿到四个。fread可以知道你实际拿到了几个。 关闭文件。

user: user-4
content: 关键看你的文本是怎么个样子，空格算不算字符，还是需要跟详细的要求啊

user: user-5
content: for(int i=0; i<4; ++i) ...
user-0 提问: 为什么 VC6.0中编写的函数不用声明就能使用啊

回复:
user: user-1
content: 可以但是不推荐这样用，最好extern一下。  引用 楼主 u013393674 的回复:在VC6.0中新建一个工程， 添加第一个源文件file1.c： #include<stdio.h> void main() {func(); printf("hello world");} 添加第二个源文件file2.c: #include<stdio.h> void func(void) {printf("this is function1");}  主函数main()和自定义函数func()分别在同一个工程的2个源文件里。 为什么主函数中不用声明func()就能够编译、链接、运行啊？

user: user-2
content: 这是c标准的一部分, 对于未声明的函数, 认为是 int ...;

user: user-3
content: C可以 C++不可以

user: user-4
content: http://blog.csdn.net/ostnm/article/details/17800395

user: user-5
content: 这个还真难解释啊……我想跟这种情况是一样的吧！ #include<stdio.h> void func(void) {printf("this is function1");} void main() {func(); printf("hello world");}