Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 函数体内部的大括号离开以后大括号中的定义变量占用的内存会被编译器收回吗

回复:
user: user-1
content: 引用 15 楼 lin5161678 的回复:有没有回收 不重要 重要的是要明白  块结束的时候 变量c 的生命期也结束了   a指向一个无效对象 是野指针 对于一个处心积虑想要从内存中获取敏感信息的黑客来说，有没有回收|清除|覆盖很重要！

user: user-1
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-2
content: 有没有回收 不重要 重要的是要明白  块结束的时候 变量c 的生命期也结束了   a指向一个无效对象 是野指针

user: user-3
content: 答案：会收回  详解：这里的内存是栈内存，而非堆内存。  堆内存的开辟（new malloc）是要手动释放（delete free）的  栈就不一样了，栈是增长的，声明一个局部变量无非是栈增长一点，生命期结束后栈回缩，就相当于回收内存了。接下来栈再增长的话就覆盖先前的位置了

user: user-4
content: 编译器如果发现大括号内栈分配内存并不多，就没必要回收。 你可以试下如果分配很多一个栈，编译器编译好的代码可能就会有pop指令

user: user-5
content: 答案：会收回  详解：这里的内存是栈内存，而非堆内存。  堆内存的开辟（new malloc）是要手动释放（delete free）的  栈就不一样了，栈是增长的，声明一个局部变量无非是栈增长一点，生命期结束后栈回缩，就相当于回收内存了。接下来栈再增长的话就覆盖先前的位置了

user: user-6
content: 所有的局部变量都是在栈或者寄存器中，出了大括号之后，大括号中变量所在位置就不受保护了，有可能被其他的指令修改。 就10楼中的例子，c这个变量，在if语句的括号中被赋予5，出了大括号之后，其位置就可能被printf函数的一些指令修改，printf在输出其值的时候，就不一定会输出5了。

user: user-7
content: 第一个问题，p是个指针，值即它的内容,就是它所指向的对象的地址 00A613E0  mov eax,dword ptr [p] ;//dword ptr [p] 是指针变量p 的的内容， ;//就是指针的值  ; // 对于符号地址p, mov eax,dword ptr [p] 等价于mov eax,dword ptr p   00A613E3  mov ecx,dword ptr[eax];//指针p指向的内容,赋值给ecx;eax当作指针寄存器使用。 00A613E5  push ecx                          ;//ecx内容 压栈 ,实际就是push *p 00A613E6  push offset string "%d" (0A6573Ch)  ;//格式化串（地址）压栈  00A613EB  call dword ptr [__imp__printf (0A682BCh)] ;// 调用 printf 00A613F1  add esp,8                            //清栈

user: user-0
content: 我想知道的是汇编代码中应该是没有{}的   是不是碰到ret就会将之前定义的局部变量的内存释放

user: user-1
content: 不要混淆栈和堆内存的分配释放

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

user: user-8
content: 至于问题2,： 个人感觉没必要从汇编上分析： #include <stdio.h> int main() { 	int *a = NULL; 	int b = 1;  	if (1 == b) 	{ 		int c = 5; 		a = &c;		 	} 	printf("%d\n",*a); 	int f = 7; 	int g = 9;  	return 0; }

user: user-8
content: 问题1： p是一个指针变量，里面储存的是一个地址，p所指向内容的地址。但是，一个指针，它也要占空间，对吧~,汇编需要从内存中找到p所在的位置。。So,。。[p]实际上就是p里面存储的东西。 所以 mov   eax,dword ptr [p]  是把p里面储存的地址赋给eax,.  然后，ecx,dword ptr [eax] 才真正访问到了p指向的内容。  唔。。我语文不好。。~

user: user-9
content: 引用 5 楼 zjtzlqr 的回复:我想知道的是汇编代码中应该是没有{}的   是不是碰到ret就会将之前定义的局部变量的内存释放 请搜索 add         esp,8 add         esp,0FCh  用途

user: user-0
content: dayin(a,g);这个函数使用a指向的内容有没有可能已经被其他变量使用了，变量c是在{}中定义的  已经离开{}了   if (1 == b) { int c = 5; a = &c;	 }

user: user-10
content: 引用 2 楼 zjtzlqr 的回复:[quote=引用 1 楼 user-10 的回复:] 其实编译器不是标准，而且编译器太多种了  用的vs2008，主要想看明白函数调用的实际过程[/quote]  但是你所说的大括号 并不是函数调用呀  如果你想知道编译器是如何看待大括号这个分隔符号的话，你可以去搜一搜相关的编译中的分隔符分析 或者你自己想想如果你要写一个编译器 当你scan到一个大括号 你要怎么做

user: user-0
content: 引用 1 楼 user-10 的回复:其实编译器不是标准，而且编译器太多种了  用的vs2008，主要想看明白函数调用的实际过程

user: user-10
content: 其实编译器不是标准，而且编译器太多种了
user-0 提问: 求c语言算法，小菜鸟，请大神指教

回复:
user: user-1
content: 三维数组太浪费，，。用贪心有种大炮打蚊子的感觉。  储存数据用结构体数组。，然后再循环一边找出最大值就行了。  PS：楼主知道贪心算法是用来干什么的嘛？

user: user-2
content: 三维数组。。。真是高端，大气，上档次

user: user-3
content: 1. 没看懂题 2. 这是一个数据挖掘中的问题
user-0 提问: 不知道是不是溢出？有没有好的测试方法？

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

user: user-2
content: min=min<sum[n] [i+1]? min:sum [n] [i+1];  i可以为4，4+1=5，超过第二维的索引边界，越界访问了

user: user-0
content: 引用 2 楼 bigbaldy 的回复:楼主要学会调适呀，这样就可以不用问了 能简单的介绍一下吗？

user: user-3
content: 当你循环到最后一个数时, n=1, i = 4, 此时的sum[n] [i+1]为sum[1] [5]，已经超出数组的范围了, 该位置的值是不确定的。改成这样，仅供参考： #include <stdio.h> #define M 2 #define N 5 int main() { 	int sum [M][N] = { 		{45,89,12,4,6}, 		{55,68,49,2,9} 	};  	int min; 	for (int n = 0; n < 2; n++)			//二维数组所以循环两次 	{ 		min = sum[n][0]; 		for (int i = 1; i < 5; ++i)		//求数组每个维中的最小值 		{ 			if (sum[n][i] < min) min = sum [n][i]; 			printf("%d\n", min); 		} 	} 	return 0; }

user: user-4
content: 楼主要学会调适呀，这样就可以不用问了

user: user-5
content: min=min<sum[n] [i+1]? min:sum [n] [i+1]; 当i取4的时候，sum[n][i+1]就是sum[n][5]，所以算是溢出。
user-0 提问: 有关于用.idx和.lib制作词典的问题

回复:
user: user-1
content: 引用 2 楼 u014691814 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 英汉汉英字典C源代码支持模糊查询，支持生成生词本。 http://download.csdn.net/detail/zhao4zhong1/4140015 谢谢给的资源。不过，我们要求用.idx和.lib文件，现在我是卡在第一步如何正常读取.lib文件中的信息。用fseek和fread读取出来的全是乱码，本来以为是WATCOM C不支持汉字输出。可是用了汉字库，再用点阵绘制出来还是乱七八糟的东西。[/quote]  there is a thing named "data structure"

user: user-2
content: 引用 2 楼 u014691814 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 英汉汉英字典C源代码支持模糊查询，支持生成生词本。 http://download.csdn.net/detail/zhao4zhong1/4140015 谢谢给的资源。不过，我们要求用.idx和.lib文件，现在我是卡在第一步如何正常读取.lib文件中的信息。用fseek和fread读取出来的全是乱码，本来以为是WATCOM C不支持汉字输出。可是用了汉字库，再用点阵绘制出来还是乱七八糟的东西。[/quote] 谁给你的.idx,.lib，你找他要这些文件的结构。  .lib 你到这里问，一般都以为是静态库，这个和英文字典有什么关系。

user: user-3
content: 谁或哪个软件或哪个公司创建并维护.idx和.lib文件，找谁要文件格式约定或使用文件的具体方法。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:英汉汉英字典C源代码支持模糊查询，支持生成生词本。 http://download.csdn.net/detail/zhao4zhong1/4140015 谢谢给的资源。不过，我们要求用.idx和.lib文件，现在我是卡在第一步如何正常读取.lib文件中的信息。用fseek和fread读取出来的全是乱码，本来以为是WATCOM C不支持汉字输出。可是用了汉字库，再用点阵绘制出来还是乱七八糟的东西。

user: user-3
content: 英汉汉英字典C源代码支持模糊查询，支持生成生词本。 http://download.csdn.net/detail/zhao4zhong1/4140015
user-0 提问: cpu怎样读取数据？

回复:
user: user-0
content: 我当然知道会提高效率，我想知道他是如何提高效率的，他的理论基础是什么

user: user-1
content: 1）提高存取效率；2）节省存储空间  不是一定必须对齐的 引用 7 楼 mousestuman 的回复:原文在这里http://blog.csdn.net/21aspnet/article/details/6729724 我就是看字节对齐才问这个问题的，我就想知道为什么需要字节对齐

user: user-0
content: 原文在这里http://blog.csdn.net/21aspnet/article/details/6729724 我就是看字节对齐才问这个问题的，我就想知道为什么需要字节对齐

user: user-2
content: 在对齐地址，不用Cache的话 ，一个周期可以读取内存中的数据，不过问题是，由于 从DRAM,SDRAM,DDR,DD2,DDR3..etc内存是动态RAM，而不是静态RAM。 第一次读数据比较慢，批量读取比较快。 非对齐数据，需要可能两个周期读写，第一个周期。发出前一部分的地址，后一周期，发第二个数据的地址 由于CPU低位地址，不再采用地址线设置地址， 而是用体信号来识别每个字节的；8体CPU，一次可以读取8个字节，16体一次可以读取16字节。 当启用Cache的时候，各体同时读取，所以其实区别不大，影响很小的。 不对齐的缺陷是，CPU流水线不能迅速更新，因为需要两个读写周期才能读写一个数据，不论是直接读写内存，还是读写Cache。

user: user-3
content: 搜“The Intel 64 and IA-32 Architectures Software Developer's Manual”

user: user-4
content: i386是32bit的CPU，所以其从总线取数据的话一定是按照4byte对齐的方式获得。从你的描述看上去，貌似是一个16bit的CPU的数据读取方式，但是16bit的CPU是不可能一次性获得32bit的数据的。所以这其中应该有所误会，能否把你描述的原文帖一下先？

user: user-5
content: 引用 2 楼 buyong 的回复:CPU是通过cache读取的，你这个读法是哪来？ 8086 BHE

user: user-6
content: CPU是通过cache读取的，你这个读法是哪来？

user: user-7
content: 因为存在内存对齐机制，只要一次就能读出数据
user-0 提问: 二维数组的地址问题

回复:
user: user-1
content: 答案就在上图中。 二维数组在内存里面存储也是线性的，可以看作是一为数组的数组。二维数组的数组名相当于这个数组第一个元素的的地址，而二维数组的第一个元素又是一个一维数组，即为一个一维数组级别的地址。&a是二维数组的地址，这是一个二维数组级别的地址。那么&a + 1同理也是一个二维数组级别的地址，&a +1表示位移到了二维数组的尾部了（越界了）。*  可以看作是给地址降级，那么就是说*（&a+1）是第四个数组(这个数组不存在，越界)的地址，是一个一维数组级别的地址。我们慢慢分析，*（&a+1）-1表示*（&a+1）先前位移一个一维数组步长，即a+2.。那么*(*（&a+1）-1）就表示第三个数组的第一个元素的地址,**(*（&a+1）-1）不就表示第三个数组的第一个元素吗，就是7啊。  第二个9可以用同样的思路来分析啊。 #include<stdio.h> void main() { 	int a[3][3]={ 				{1,2,3}, 				{4,5,6}, 				{7,8,9} 				}; 	printf("%d\n",**(*(&a+1)-1)); 	printf("%d\n",*(**(&a+1)-1)); 	printf("%p\n",a); 	// 	printf("%p\n",&a[0][0]); 	printf("%p\n\n",&a); 	// 	printf("%p\n",&a+1); 	printf("%p\n\n",&a[2][2]+1); 	//第三个一维数组的第一个元素地址 	printf("%p\n",**(&a+1)-1); 	printf("%p\n\n",&a[2][2]); }

user: user-0
content: 引用 1 楼 user-3 的回复:1.&a是一个数组指针，长度为3*3，&a+1就是*a+9,*(&a+1)也是一个数组指针，长度为3,那么*(&a+1)-1即为*a+9-3,那么最后就是*(*a+6)  2.&a不说了，同上，**（&a+1）是一个指向整形变量的指针，**（&a+1）-1就是*a+9-1,最后*（**（&a+1）-1）就是*(*a+8) 谢谢指点~

user: user-0
content: 引用 2 楼 u012061345 的回复:关键在于指针变量的1个单位到底代表多少个字节。 a是一个3×3的数组，所以&a就是指向一个3×3数组的指针 ，该类指针的1个单位是9个int，所以&a+1就指向a后面的第36个字节（假设一个int占4个字节），也就是指向9后面那个数。 此时取内容*(&a+1)代表什么呢？这个类型实际上跟a是同一个类型，因为前者和*&a某种程度是等价的，只是取内容的值不同。那么a是什么类型呢？数组名实际上就是其数组首元素的地址，因为a是二维数组，所以其首元素是一个一维数组（内含3元素），所以a是一个指向一维数组的指针，那么*(&a+1)也是一个指向一维数组的指针，当然实际上仍然指向9后面那个数。 此时*(&a+1)-1，所以这个时候减掉的1，代表3个int，于是该表达式实际上就指向7了，代表指向以7开头的3元素的数组。第一个*号代表取出该数组的首元素的地址，第二个*号则代表取出该首元素的值，当然是7。  再回到*(&a+1)，它是一个指向一维数组（3元素）的指针，此时再在前面加一个*号，实际上就是指这个数组的首元素的地址，这个数组的首元素是一个整型，所以**(&a+1)是一个指向整型的指针，此时**(&a+1)-1，这个1只表示1个int，所以**(&a+1)-1就指向9了。最后取出内容自然是9。 谢谢分析

user: user-2
content: 关键在于指针变量的1个单位到底代表多少个字节。 a是一个3×3的数组，所以&a就是指向一个3×3数组的指针 ，该类指针的1个单位是9个int，所以&a+1就指向a后面的第36个字节（假设一个int占4个字节），也就是指向9后面那个数。 此时取内容*(&a+1)代表什么呢？这个类型实际上跟a是同一个类型，因为前者和*&a某种程度是等价的，只是取内容的值不同。那么a是什么类型呢？数组名实际上就是其数组首元素的地址，因为a是二维数组，所以其首元素是一个一维数组（内含3元素），所以a是一个指向一维数组的指针，那么*(&a+1)也是一个指向一维数组的指针，当然实际上仍然指向9后面那个数。 此时*(&a+1)-1，所以这个时候减掉的1，代表3个int，于是该表达式实际上就指向7了，代表指向以7开头的3元素的数组。第一个*号代表取出该数组的首元素的地址，第二个*号则代表取出该首元素的值，当然是7。  再回到*(&a+1)，它是一个指向一维数组（3元素）的指针，此时再在前面加一个*号，实际上就是指这个数组的首元素的地址，这个数组的首元素是一个整型，所以**(&a+1)是一个指向整型的指针，此时**(&a+1)-1，这个1只表示1个int，所以**(&a+1)-1就指向9了。最后取出内容自然是9。

user: user-3
content: 1.&a是一个数组指针，长度为3*3，&a+1就是*a+9,*(&a+1)也是一个数组指针，长度为3,那么*(&a+1)-1即为*a+9-3,那么最后就是*(*a+6)  2.&a不说了，同上，**（&a+1）是一个指向整形变量的指针，**（&a+1）-1就是*a+9-1,最后*（**（&a+1）-1）就是*(*a+8)
user-0 提问: 【SWU】分糖果 怎么分

回复:
user: user-1
content: 判断停止的条件，要遍历整个数组，检查是否有不一样的元素。

user: user-0
content: 知道了 哈哈

user: user-0
content: 但是 老师 我那个 判断哪个不会 不知道怎么用语句来判断，a【i】==a【i+1】

user: user-1
content: 另外，要提醒你，我们预订的暗号是[SWU]，而不是【SWU】。细节决定成败。

user: user-1
content: 把每一次要做的操作弄明白就很简单了。每次操作就需要做两件事情： 1. 分一半到右边，注意最后一个要给第一个。这个分一半的过程实际上是两步：分一半，交给右边的人。 2. 遍历，将奇数补成偶数。 建议用文件来存储初始值，不然scanf会让你输入到手抽筋。
user-0 提问: 各位大神帮我看看代码的问题

回复:
user: user-1
content: 引用 1 楼 u013573183 的回复:目测有不少规律  最后一位一定是5 或者6  下一个数是由上一个数和上一个数组成的尾数也可以是1或者0吧

user: user-2
content: 如果是因为计算机无法表示过大的整数，你可以用Java的BigInteger。

user: user-3
content: 目测有不少规律  最后一位一定是5 或者6  下一个数是由上一个数和上一个数组成的
user-0 提问: 关于__attribute__((aligned)) 字节对齐的问题

回复:
user: user-1
content: 谢谢啦…是得这么理解的

user: user-0
content: 刚install g++ ，真的是这样子的，恩，谢谢了……但第二个问题还是一样的

user: user-2
content: 从结果来看, “让编译器根据目标机制采用最大最有益的方式对齐"使用的16字节对齐,C1占32和C2占16字节好理解, C3中成员位置分别为a:0, b:4, c:8, d:12, f:16, f也就是位于16-19, 为了满足16字节对齐,所以20-31被用于对齐了,所以占32字节, 有了这个思路 C4, C5都好理解了

user: user-3
content: 你用的gcc 编译器，C编译器对于空结构还是0. 你用g++编译试试就可以了。
user-0 提问: 新手求解

回复:
user: user-1
content: 编译时要动态链接数学库。应该是gcc sanjiaoxingmianji.c -lm && ./a.out

user: user-2
content: http://blog.csdn.net/hercaffe/article/details/7198563，lz看这个能该好吗？说实话，我是没有弄好，惭愧
user-0 提问: 求C语言代码：定义结构体后，赋值给结构体，然后通过C语言插入mysql数据库。

回复:
user: user-1
content: 中文汉字 处理的方式一样 通过字符串的形式传入 只是在创建mysql的时候 建议使用utf-8的字符集

user: user-0
content: 请问下中文汉子怎么处理啊

user: user-2
content: 呵呵，代码仅供参考，见笑了。。。  #include <stdio.h> #include <stdlib.h> #include <string.h>  #include <mysql/mysql.h>  struct UserInfo {   char user_id[8];   char user_name[32]; };  int main(int argc, char *argv[]) {   MYSQL *conn;   MYSQL_RES *res;   MYSQL_ROW row;    char *server = "localhost";   char *user = "root";   char *passwd = "xxx";   char *database = "test";    conn = mysql_init(NULL);    if (!mysql_real_connect(conn, server, user, passwd, database, 0, NULL, 0))   {     fprintf(stderr, "%s\n", mysql_error(conn));     exit(EXIT_FAILURE);   }    struct UserInfo user_info;   memset(&user_info, 0, sizeof(user_info));   strcpy(user_info.user_id, "0002");   strcpy(user_info.user_name, "Leo");   char sql[256] = {0};   snprintf(sql, sizeof(sql), "insert into demo values('%s', '%s')",user_info.user_id, user_info.user_name);    if (mysql_query(conn, sql))   {     fprintf(stderr, "%s\n", mysql_error(conn));     exit(EXIT_FAILURE);   }    if (mysql_query(conn, "select * from demo))   {     fprintf(stderr, "%s\n", mysql_error(conn));     exit(EXIT_FAILURE);   }   res = mysql_use_result(conn);    while ( (row = mysql_fetch_row(res)) != NULL)   {     printf("%s\t%s\n", row[0], row[1]);   }    mysql_free_result(res);   mysql_close(conn);    return 0; }
user-0 提问: 编程之美 格格取数 自己电脑上运行成功 上传后市RE 求教

回复:
user: user-1

user: user-1

user: user-0
content: 我发现我错了

user: user-2
content: LZ是怎么做的

user: user-0
content: 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给你一个m x n (1 <= m, n <= 100)的矩阵A (0<=aij<=10000)，要求在矩阵中选择一些数，要求每一行，每一列都至少选到了一个数，使得选出的数的和尽量的小。    输入 多组测试数据。首先是数据组数T  对于每组测试数据，第1行是两个正整数m, n，分别表示矩阵的行数和列数。  接下来的m行，每行n个整数，之间用一个空格分隔，表示矩阵A的元素。    输出 每组数据输出一行，表示选出的数的和的最小值。    数据范围 小数据：1 <= m, n <= 5  大数据：1 <= m, n <= 100      样例输入 2 3 3 1 2 3 3 1 2 2 3 1 5 5 1 2 3 4 5 5 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1 样例输出 Case 1: 3 Case 2: 5
user-0 提问: switch开关小问题！

回复:
user: user-1
content: 你看看你是不是英文输入的逗号啊,我不知h道这有没有影响,如果你是用汉语输的,你可以试试

user: user-1
content: 你看我就是这样输入的,用的vs2010,程序和你的一样,没有问题

user: user-0
content: scanf(“%f,%c,%f”,&d1,&op,&d2)  在输入的时候输入：10，+，1这样的数据输入为什么显示的是default的输出语句呢？谢谢

user: user-2
content: 没有清空输入缓存区，他会把你输入的逗号当做op的，所以，一直都是default 可以将输入改成 scanf("％f",dl); fflush(stdin); scanf("％f",dl); fflush(stdin);//清空输入缓冲区

user: user-1
content: 我认为你在输入数据的时候有错误,比如10+1吧,应该10,+,1应该与scanf语句一致 如果 scanf("%f%c%f",&d1,&op,&d2);把scanf中逗号去掉,则应输入10+1,而不能10空格+空格1,负责程序会认为你输的符号为空格而不是加号
user-0 提问: ARM Cortex M3 的开发板的一些问题

回复:
user: user-1
content: VIM 真的只是一个编辑器。。。。。

user: user-0
content: 引用 3 楼 u012586257 的回复:哪一家的开发板？stm 的用IAR，TI的可以用CCS（免费），另外Keil也行吧 Ubuntu支持不就不知道了，没玩过STM 只用IAR吗，用vim 可以吗

user: user-2
content: IAR是编辑器+编译器+调试器 vim只是编辑器

user: user-3
content: 哪一家的开发板？stm 的用IAR，TI的可以用CCS（免费），另外Keil也行吧 Ubuntu支持不就不知道了，没玩过

user: user-0
content: 来个人啊 ~~~

user: user-0
content: 没人  ~~~~~~~~
user-0 提问: C语言       求解，感谢

回复:
user: user-1
content: 归并排序网上搜一搜 很多的

user: user-2
content: 自己实现：  #include <iostream> using namespace std;  #define N 5 int is_asceding(int (&arr)[N]) {     if (sizeof(arr) / sizeof(int) == sizeof(int)) {         return 1;     }     if (arr[1] > arr[0]) {         return 1;     } else {         return 0;     } }  int main() {     int arr1[N] = {1,2,3,4,5};     int arr2[N] = {5,4,3,2,1};     int arr[2*N];     int *p1, *p2;     int i, j, m, n;      if (is_asceding(arr1) != is_asceding(arr2)) { // 两个数组顺序不一致         p1 = arr1;         p2 = arr2 + N -1;         m = 1;         n = -1;       } else {         p1 = arr1;         p2 = arr2;         m = n = 1;     }     i = j = 0;     int *s = arr;     for (; i<N; ++i) {         for (; j<N; ++j) {             if (*p1 >= *p2) {                 *s++ = *p2;                 p2 += n;             } else {                 break;             }         }         *s++ = *p1;         p1 += m;     }      for (i=0; i<2*N; ++i) {         cout << arr[i] << " ";     }     cout << endl;      return 0; } 使用 merge 实现：  #include <iostream> #include <vector> #include <algorithm> using namespace std;  int main() {     int first[] = {1,2,3,4,5};     int second[] = {5,4,3,2,1};     vector<int> v(10);      sort(first, first+5);     sort(second, second+5);     merge(first, first+5, second, second+5, v.begin());     for (vector<int>::iterator it=v.begin(); it!=v.end(); ++it) {         cout << *it << " ";     }     cout << endl;      return 0; }

user: user-3
content: merge()把两个分别由[first1,last1)和[first2,last2)标记的有序序列 合并到一个从 result 开 始的单个序列中 并返回一个 OutputIterator 指向新序列中最后一个元素的下一位置

user: user-4
content: 先对a的第一个数据和b的第一个数据进行比较，小的都放在c的数组里面，然后依次b++

user: user-3
content: std::merge

user: user-5
content: #include <stdio.h>  int a[3] = {1,3,5}; int b[5] = {2,4,6,7,8};  void main() { 	int c[8]; 	int i,j,k; 	/*i=j=0; 	for(;i<3;) 		c[i++] = a[j++];*/ 	i=j=0; 	int m,n; 	for(k=0;k<8;k++) 		if(a[i] <= b[j]) 		{ 			c[k] = a[i]; 			i++; 			if(i==3) 				break; 		} 		else 		{ 			c[k] = b[j]; 			j++; 			if(j==5) 				break; 		} 		k++; 	if(i==3) 		while(k<8) 			c[k++] = b[j++]; 	else 		while(k<8) 			c[k++] = a[i++];  	for(k=0;k<8;k++) 		printf("%d,",c[k]); }

user: user-6
content: 引用 2 楼 u012964281 的回复:插入排序，将a数组的成员一次插入b数组依次

user: user-6
content: 插入排序，将a数组的成员一次插入b数组

user: user-7
content: 合并排序.
user-0 提问: 有关于C语言的

回复:
user: user-1
content: http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装

user: user-2
content: codeblocks和devcpp都比较小。。。

user: user-3
content: 换个角度，为什么要用win8?

user: user-4
content: 推荐devcpp，还不错

user: user-5
content: win8下为何不直接用VS？太大？安装太慢？win平台难道还有比VS更好的选择？

user: user-6
content: win_tc  。

user: user-7
content: 还装着VC6.0是因为许多的书和视频是这个，其实这个并不是很好用

user: user-7
content: 我现在win8.1下，既有C-Free、VC6.0，还有VS2005（因为一些原因，把2012卸了），还有就是Ubuntu虚拟机里的GCC

user: user-7
content: C-Free，可以的，自己下吧——http://www.onlinedown.net/soft/103167.htm VC6.0完整绿色版也可以（需要改改兼容）——http://download.csdn.net/detail/u012421456/6897443 VS也可以，个人推荐2010及以上版本_http://www.microsoft.com/zh-cn/download/details.aspx?id=30678

user: user-8
content: 为什么还用turbo c v2.01,一般都用visual stidio吧,要是想用小一点的有codebloks(gcc可以在windows中用),开源免费的100mb吧,可以试一试
user-0 提问: 请问怎么设置code blocks，让C语言支持引用？

回复:
user: user-1
content: #include <stdio.h>  void fun_size(int (&a)[4])   //引用数组   {       printf("%d\n",sizeof(a));        }   void fun_sizep(int *a) { 	printf("%d\n",sizeof(a)); }   int main() {     int arry[4];     fun_size(arry); 	fun_sizep(arry);     return 0; }  VC6.0通过

user: user-2
content: 请问怎么打扮一个中国人，让他会说意大利语？

user: user-3
content: #include<iostream> using namespace std;

user: user-4
content: C哪来的引用。

user: user-5
content: 引用 楼主 ak47csu 的回复:设置过-std=c99，但类似于 void f(int &a); 这种语句还是编不过 使用g++编译，当成c++编译

user: user-6
content: 楼主C语言没有引用   以前没有  将来也不会用

user: user-7
content: 楼主，不要放弃治疗！
user-0 提问: 如何设置控制台输出

回复:
user: user-1

user: user-2
content: 1楼说得对，写到文件里；毕竟控制台缓冲区的大小是有限的。

user: user-3
content: Windows 可以增加控制台缓冲的行数和列数 这种情况，其实输出到文件最好，文件里的内容是不会覆盖的 而且，输出到文件，比输出到控制太快。
user-0 提问: c语言

回复:
user: user-1
content: #include <stdio.h>  void maopao(int a[10]); void xuanzhe(int a[10]);  void main(void){ 	int a[10] = {6,3,42,23,35,71,98,67,56,38},i; 	/*maopao(a); 	for(i=0;i<10;i++){ 		printf("%d ",a[i]); 	} 	printf("\n");*/ 	xuanzhe(a); 	for(i=0;i<10;i++){ 		printf("%d ",a[i]); 	} }  void maopao(int a[10]){ 	int i,j,m=0; 	for(i=0;i<10;i++) 		for(j=0;j<10-i;j++){ 			if(a[j] > a[j+1]){ 				m = a[j]; 				a[j] = a[j+1]; 				a[j+1] = m; 			} 		} }  void xuanzhe(int a[10]){ 	int i,j,min,m,k; 	for(i=0;i<10;i++){ 		min = a[i]; 		k = i; 		for(j=i;j<10;j++){ 			if(a[j] < min){ 				min = a[j]; 				k = j; 			} 		} 		m = a[i]; 		a[i] = a[k]; 		a[k] = m; 	}  } 随意写了个，应该是对的吧

user: user-1
content: #include <stdio.h>  void maopao(int a[10]); void xuanzhe(int a[10]);  void main(void){ 	int a[10] = {6,3,42,23,35,71,98,67,56,38},i; 	/*maopao(a); 	for(i=0;i<10;i++){ 		printf("%d ",a[i]); 	} 	printf("\n");*/ 	xuanzhe(a); 	for(i=0;i<10;i++){ 		printf("%d ",a[i]); 	} }  void maopao(int a[10]){ 	int i,j,m=0; 	for(i=0;i<10;i++) 		for(j=0;j<10-i;j++){ 			if(a[j] > a[j+1]){ 				m = a[j]; 				a[j] = a[j+1]; 				a[j+1] = m; 			} 		} }  void xuanzhe(int a[10]){ 	int i,j,min,m,k; 	for(i=0;i<10;i++){ 		min = a[i]; 		k = i; 		for(j=i;j<10;j++){ 			if(a[j] < min){ 				min = a[j]; 				k = j; 			} 		} 		m = a[i]; 		a[i] = a[k]; 		a[k] = m; 	}  } 随意写了个，应该是对的吧

user: user-2
content: 感觉像老师给我们出题目。呵呵！！
user-0 提问: 为什么PROC当fetch into 用malloc分配的数组时，只能够查询出一条数据。

回复:
user: user-1
content: 不太懂你的这个程序。不知道怎么fetch

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:struct A* sA = (struct A*)malloc(sizeof(struct A)); 你这里只是分配了一个struct A的空间内存，如果要多个。。。 struct A* sA = (struct A*)malloc(sizeof(struct A)* NUM ); 如你所说，我一次分配10个空间的结构体大小，它也是只fetch出一条。这是为什么？你可以试试。

user: user-1
content: struct A* sA = (struct A*)malloc(sizeof(struct A)); 你这里只是分配了一个struct A的空间内存，如果要多个。。。 struct A* sA = (struct A*)malloc(sizeof(struct A)* NUM );
user-0 提问: 如何使用libHaru生成多种语言混合的PDF？

回复:
user: user-1
content: 中英文混和是可以的，试过了。

user: user-2
content: 引用 1 楼 cdkrrr 的回复:自己顶一下。 昨天想了一下,libharu不支持UTF-8编码，难道一定要自己实现才行吗??  继续请高人指点~~  你去google上面看看：https://groups.google.com/forum/#!forum/libharu libharu是支持utf-8的，一般是一种语言你需要选择和该语言对应的font  另外你用foxit advanced pdf edit 看下就知道了，不同语言的字符使用的字体是不同的。

user: user-0
content: 自己顶一下。 昨天想了一下,libharu不支持UTF-8编码，难道一定要自己实现才行吗??  继续请高人指点~~
user-0 提问: 出现野指针，求大神帮助

回复:
user: user-1
content: 是你函数方式用的不对吧

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

user: user-3
content: 引用 1 楼 user-5 的回复:fopen函数简介 函数功能：打开一个文件 函数原型：FILE * fopen(const char * path,const char * mode); 相关函数：open，fclose，fopen_s[1]，_wfopen 所需库：<stdio.h> 返回值：文件顺利打开后，指向该流的文件指针就会被返回。如果文件打开失败则返回NULL，并把错误代码存在errno 中。 一般而言，打开文件后会做一些文件读取或写入的动作，若打开文件失败，接下来的读写动作也无法顺利进行，所以一般在fopen()后作错误判断及处理。 ---------------------------------------- 建议按标准写法写fopen.  另外 rewind(pfile);     fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6); printf("%6l%6l%6l",num4,num5,num6);  改为： rewind(pfile);     fscanf(pfile,"%6ld%6ld%6ld",&num4,&num5,&num6); printf("%6ld%6ld%6ld",num4,num5,num6); ++

user: user-4
content: 为什么建议使用标准fopen函数，那怎么不能用fopen_s函数呢？c语言入门经典上这本书关于文件这里全部用的是fopen_s啊

user: user-5
content: 引用 2 楼 u014687239 的回复:为什么建议使用标准fopen函数，那怎么不能用fopen_s函数呢？c语言入门经典上这本书关于文件这里全部用的是fopen_s啊只是一个建议，我没看过这本书，不知道里面的fopen_s是怎么实现的。 楼主的问题，只需要把%6l------------->修改为 %6ld  即可。

user: user-5
content: fopen函数简介 函数功能：打开一个文件 函数原型：FILE * fopen(const char * path,const char * mode); 相关函数：open，fclose，fopen_s[1]，_wfopen 所需库：<stdio.h> 返回值：文件顺利打开后，指向该流的文件指针就会被返回。如果文件打开失败则返回NULL，并把错误代码存在errno 中。 一般而言，打开文件后会做一些文件读取或写入的动作，若打开文件失败，接下来的读写动作也无法顺利进行，所以一般在fopen()后作错误判断及处理。 ---------------------------------------- 建议按标准写法写fopen.  另外 rewind(pfile);     fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6); printf("%6l%6l%6l",num4,num5,num6);  改为： rewind(pfile);     fscanf(pfile,"%6ld%6ld%6ld",&num4,&num5,&num6); printf("%6ld%6ld%6ld",num4,num5,num6);
user-0 提问: access数据库怎么用sql语句更改表名

回复:
user: user-1
content: alter table a rename b

user: user-0
content: access2013是不是不能执行那个操作啊？

user: user-2
content: 引用 1 楼 neolyao 的回复:表名都在系统表SYSOBJECTS里面 update sysobjects set name='' where name='' ++

user: user-2
content: 引用 1 楼 neolyao 的回复:表名都在系统表SYSOBJECTS里面 update sysobjects set name='' where name=''发错版块了吧

user: user-3
content: 表名都在系统表SYSOBJECTS里面 update sysobjects set name='' where name=''
user-0 提问: 请教个问题，通过GDB SI进行调试的时候的问题

回复:
user: user-1
content: 当程序被停住后，可以用continue命令恢复程序的运行直到程序结束，或下一个断点到来。也可以使用step或next命令单步跟踪程序。 continue [ignore-count] c [ignore-count] fg [ignore-count] 恢复程序运行，直到程序结束，或是下一个断点到来。ignore-count表示忽略其后的断点次数。continue，c，fg三个命令都是一样的意思。 step <count> 单步跟踪，如果有函数调用，它会进入该函数。进入函数的前提是，此函数被编译有debug信息。很像VC等工具中的step in。后面可以加count也可以不加，不加表示一条条地执行，加表示执行后面的count条指令，然后再停住。 next <count> 同样单步跟踪，如果有函数调用，它不会进入该函数(很像VC等工具中的step over)。后面可以加count也可以不加，不加表示一条条地执行，加表示执行后面的count条指令，然后再停住。 set step-mode set step-mode on 打开step-mode模式。在进行单步跟踪时，程序不会因为没有debug信息而不停住。这个参数有很利于查看机器码。 set step-mod off 关闭step-mode模式。 finish 运行程序，直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。 until 或 u 当厌倦了在一个循环体内单步跟踪时，这个命令可以运行程序直到退出循环体。 stepi 或 si nexti 或 ni 单步跟踪一条机器指令。一条程序代码有可能由数条机器指令完成，stepi和nexti可以单步执行机器指令。与之一样有相同功能的命令是display/i $pc，当运行完这个命令后，单步跟踪会在显示出程序代码的同时显示出机器指令(也就是汇编代码)。

user: user-1
content: http://www.baidu.com/s?ie=utf-8&bs=%22rep+movsq%22&f=8&rsv_bp=1&rsv_spt=3&wd=%22rep+movsq%22+site%3Aintel.com&rsv_sug3=12&rsv_sug4=63&inputT=10672

user: user-0
content: 0x7fffeea7173d <_Z32_THLGMTwoFor1To1GWS_+29>    rep movsq %ds:(%rsi),%es:(%rdi)   其中 “ rep movsq %ds:(%rsi),%es:(%rdi) ”是什么意思呢？  引用 1 楼 zhao4zhong1 的回复:当程序被停住后，可以用continue命令恢复程序的运行直到程序结束，或下一个断点到来。也可以使用step或next命令单步跟踪程序。 continue [ignore-count] c [ignore-count] fg [ignore-count] 恢复程序运行，直到程序结束，或是下一个断点到来。ignore-count表示忽略其后的断点次数。continue，c，fg三个命令都是一样的意思。 step <count> 单步跟踪，如果有函数调用，它会进入该函数。进入函数的前提是，此函数被编译有debug信息。很像VC等工具中的step in。后面可以加count也可以不加，不加表示一条条地执行，加表示执行后面的count条指令，然后再停住。 next <count> 同样单步跟踪，如果有函数调用，它不会进入该函数(很像VC等工具中的step over)。后面可以加count也可以不加，不加表示一条条地执行，加表示执行后面的count条指令，然后再停住。 set step-mode set step-mode on 打开step-mode模式。在进行单步跟踪时，程序不会因为没有debug信息而不停住。这个参数有很利于查看机器码。 set step-mod off 关闭step-mode模式。 finish 运行程序，直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。 until 或 u 当厌倦了在一个循环体内单步跟踪时，这个命令可以运行程序直到退出循环体。 stepi 或 si nexti 或 ni 单步跟踪一条机器指令。一条程序代码有可能由数条机器指令完成，stepi和nexti可以单步执行机器指令。与之一样有相同功能的命令是display/i $pc，当运行完这个命令后，单步跟踪会在显示出程序代码的同时显示出机器指令(也就是汇编代码)。
user-0 提问: 向各位请教一个C语言问题

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E  理解和讨论之前请先学会观察！在VC下看的预处理后的代码是 int x = --1;

user: user-1
content: 不要写连自己也预测不了结果的代码！

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-2
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E  理解和讨论之前请先学会观察！

user: user-3
content: 有这么理解的？负负得正好吗

user: user-0
content: 人工自顶置顶

user: user-4
content: 真的有个 空格

user: user-5
content: 楼上正解，观察的真仔细

user: user-6
content: zjf@zjf-desktop:~/桌面$ cc 1.c -E # 1 "1.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "1.c" void main() {  int x=- -1; }  zjf@zjf-desktop:~/桌面$ cc 1.c -E # 1 "1.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "1.c" void main() {  int x=-(-1); }  GCC出来的结果，中间有个空格

user: user-7
content: 引用 6 楼 u010298226 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E  理解和讨论之前请先学会观察！在VC下看的预处理后的代码是 int x = --1;[/quote]  仔细看，是： int x = - -1; 注意两个-之间的空格！

user: user-8
content: #define a (-1)

user: user-9
content: #define   (符号常量的)标识符  字符串 1、宏名及它的阐述都无类型，只是一个符号代表。 2、字符串可以是任何类型的数据。//字符串只是替代源程序书写中的某个符号，在源程序中不同的位置，就代表不同的数据类型。 3、宏替换属于预处理命令，它不是C语言本身的组成部分，它在编译之前进行宏替换处理。  百度出来的... http://hi.baidu.com/ken2232/item/679ff0ce37cb5c240831c639
user-0 提问: fork创建固定5个进程处理业务

回复:
user: user-1
content: 不只5个吧！！！

user: user-2
content: 我怎么感觉就是创建了5个子进程呢，因为每个子进程都是都用while一直在那循环并没有退出，父进程也会一直等待某个子进程的结束，然而5个子进程一直循环不结束，也就是说主进程也一直不会结束。

user: user-3
content: 用创建线程的方法不是很简单明了吗？

user: user-4
content: 主进程要保存五个子进程的pid，循环检查子进程是否存活，死一个补一个 子进程要在while中调用exit，或在出while循环后调exit

user: user-0
content: 引用 2 楼 max_min_ 的回复:显然这里不至5个进程阿！第二次循环就有2个进程分别再fork进程了，第三次就已经超过5个进程了！ 不能这么循环搞 一共肯定不止5个进程,但是其他的进程都执行退出了,那怎么创建保留5个进程?

user: user-5
content: 显然这里不至5个进程阿！第二次循环就有2个进程分别再fork进程了，第三次就已经超过5个进程了！ 不能这么循环搞

user: user-6
content: 在子进程里把pid打出来看看就知道有多少进程被创建了

user: user-7
content: 创建了5个子进程，子进程不会自己递归fork的。
user-0 提问: 关于闰年年份统计的问题

回复:
user: user-1
content: // v6.cpp : Defines the entry point for the console application. //  #include "stdafx.h"  #include "stdio.h" int num=0; int LeapYear(int year) {     if((year%400==0)||(year%100!=0)&&(year%4==0))     {                  num++; return 1;     }     else     {         return 0;     } } int main() {     int year1,year;     scanf("%d",&year);     for(year1=1;year1<year;year1++)     {         if(LeapYear(year1)==1)         {             printf("%d ",year1);         }               }     printf("\n");     printf("%d\n",num); 	return 0; }

user: user-2
content: int num是不是多次一举呢，直接printf("%d\n",year1)就可以了

user: user-3
content: 1楼是正解。

user: user-2
content: 第8行代码应该调到第4行，这样无论return返回什么值，调用函数LeapYear时都会执行num++

user: user-4
content: 结果肯定不一样啊，无论你输出了几个闰年，num总是等于零，因为return 1让函数结束了，num++永远不会执行

user: user-0
content: 即使是将两句对调也没用，结果一样

user: user-5
content: return 1;         num++; 原因是没有执行到num++,return之后的语句是不会执行的。

user: user-6
content: 第七八句反了
user-0 提问: 运行窗口和命令行窗口执行有关文件程序的问题

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

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:in.txt不在你生成文件Exe的同一个目录下  在一个目录下也是了 不行

user: user-2
content: in.txt不在你生成文件Exe的同一个目录下
user-0 提问: 一道算法题，求大神指点

回复:
user: user-1
content: 也是感觉这个思路有点问题，比如矩阵： 2 7  3 9 最小的数是2，去掉2所在的行和列，剩下9，最小数就是9，这样得到的结果是11。  而正确结果应是3+7=10

user: user-2
content: 引用 4 楼 Gonefar 的回复:先找出整个矩阵中最小的数，然后去掉该数据处在的行与列，找子矩阵的最小数，然后去掉子矩阵的最小数所在的行与列，继续找最小数，如此做max（m，n）次，就可以找到最小和的一组数。 感觉这个思路有点问题，比如矩阵： 2 7 3 9 最小的数是2，去掉2所在的行和列，剩下9，最小数就是9，这样得到的结果是11。 而正确结果应是3+7=10。

user: user-3
content: 先找出整个矩阵中最小的数，然后去掉该数据处在的行与列，找子矩阵的最小数，然后去掉子矩阵的最小数所在的行与列，继续找最小数，如此做max（m，n）次，就可以找到最小和的一组数。

user: user-4
content: 与和尽量大的题目类似，前些天有个这样的贴

user: user-5

user: user-5

user: user-5

user: user-6
content: 编程之美资格赛的题哈！要过小数据的代码么？

user: user-7
content: 典型的带下界容量的费用流。
user-0 提问: 关于x－code编写c语言程序

回复:
user: user-1
content: LZ还知道控制台？ 这种命令行的程序需要在命令行下执行。

user: user-0
content: 泪决不爱！竟然没有人为我解惑！

user: user-0
content: 不知道，如果要在命令行下执行，那要如何操作啊？谢谢！

user: user-0
content: 不行，我的问题没有解决，我需要自己把帖子顶上去！

user: user-0
content: 就是这样，build没有问题，但就是run不了

user: user-0
content: 不是的，我之前在win上用vc6.0写过同样的程序，但是那里面能运行，如今却不能，是函数的原因？

user: user-2
content: getchar()不能读文件 getc()才行 xcode当然没问题
user-0 提问: 求解，这个for的判断条件该写什么

回复:
user: user-1
content: 引用 3 楼 starytx 的回复:1: i<= len/2; 2 arr[i] = arr[len - 1 - i]; len是未知的...

user: user-0
content: 引用 3 楼 starytx 的回复:1: i<= len/2; 2 arr[i] = arr[len - 1 - i]; 没有=

user: user-2
content: len=sizeof(arr)/sizeof(int)

user: user-3
content: 版主英明！

user: user-4
content: 1: i<= len/2; 2 arr[i] = arr[len - 1 - i];

user: user-5
content: i < sizeof(arr)/ sizeof(arr[0])

user: user-6
content: len=sizeof(arr)/sizeof(int)
user-0 提问: 救急： 在sigaction的信号函数中调用dlopen

回复:
user: user-0
content: 谢谢各位！ 如果有什么新的想法，在做更新

user: user-1
content: dlopen 应该不是 signal safe 的..

user: user-2
content: 没啥问题，不过你都立即执行了，还用LAZY模式啊

user: user-3
content: 不建议这样, 信号处理函数实现不确定，最好只在里面标记，并在主循环里做处理。
user-0 提问: 大神帮忙解一下，变量储存不下了啊。。。

回复:
user: user-1
content: 引用 4 楼 u014554552 的回复:[quote=引用 1 楼 jerry_dqh 的回复:] 为啥变量存储不下？一个unsigned int 就可以存储了。 引用 2 楼 buyong 的回复:unsigned int & >> 引用 3 楼 u013163178 的回复:2^32四个字节就可以了，用unsigned int类型  那要怎么输出啊， 我这样写 unsigned int num = pow(2,32); 输出结果为0呐[/quote] 题目要求是小于2^32次方的数。

user: user-1
content: unsigned int 最大是2^32 -1 吧。

user: user-2
content: 2^32四个字节就可以了，用unsigned int类型

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:为啥变量存储不下？一个unsigned int 就可以存储了。 引用 2 楼 buyong 的回复:unsigned int & >> 引用 3 楼 u013163178 的回复:2^32四个字节就可以了，用unsigned int类型  那要怎么输出啊， 我这样写 unsigned int num = pow(2,32); 输出结果为0呐

user: user-3
content: unsigned int & >>

user: user-4
content: 为啥变量存储不下？一个unsigned int 就可以存储了。
user-0 提问: 单链表问题,附带二进制文件读入读写的问题（带函数）！求教

回复:
user: user-1
content: void Delete() { char *Nu=NULL; StudentNode *p; int flag=0; while(!flag) { printf("请输入要删除的学号信息:\n"); scanf("%s",Nu); 这里，Nu只是个指针，没有给字符串分配空间，scanf的时候肯定出问题。改成Nu[32]固定分配个空间试试

user: user-0
content: 那个问题等会发 没有人来帮一下吗= = 我纠结了四五个小时实在没办法啦
user-0 提问: 线程和进程间的通信

回复:
user: user-1
content: signal就可以吧，可以通过发信号做到。

user: user-2
content: 没必要通信，信号量就能解决 线程中 HANDLE WINAPI CreateEvent(   _In_opt_  LPSECURITY_ATTRIBUTES lpEventAttributes,   _In_      BOOL bManualReset,   _In_      BOOL bInitialState,   _In_opt_  LPCTSTR lpName ); 主线程WaitForSingleObject

user: user-3
content: C++用的是windows消息机制吧。那么线程在完成数据时，给主进程（窗口句柄）发送一个消息即可。 如果用的不是windows窗口，那么可以使用信号量或者事件进行同步，方法有很多种呢。  另外linux系统你可以自定义信号处理也是可以的。
user-0 提问: VS2010里用C++拼接图像  要代码  大神求救

回复:
user: user-0
content: 引用 1 楼 bigwatercar 的回复:看把你美的，这拼接很简单的。  所有图像 假设 image[0-n]  申请一个 Σ(0,n) width  Σ(0,n)height  bitmap  然后一个一个bitblt到这个bitmap上就好了啊！！ 不懂呀，具体一点呗，大神 具体的代码和引用的库

user: user-0
content: 引用 3 楼 jmppok 的回复:推荐你用CxImage库            http://blog.csdn.net/jmppok/article/details/18794623  CxImage t_img1,t_img2,t_img3;   需要怎么引用CxImage库啊，我把CxImage库下载下来了，但不知道要引用哪一个

user: user-0
content: 引用 5 楼 bobo928843007 的回复:就简单的把图像接起来？还是全景拍摄那种拼接？ 简单的拼接就可以，航拍，把定时拍的照片拼起来

user: user-1
content: 就简单的把图像接起来？还是全景拍摄那种拼接？

user: user-2
content: 到底是c语言还是c++

user: user-3
content: 推荐你用CxImage库            http://blog.csdn.net/jmppok/article/details/18794623  CxImage t_img1,t_img2,t_img3;  int t_h1,t_w1,t_h2,t_w2,t_h3,t_w3,t_bpp;  t_img1.Load(L"test00222.jpeg");  t_img2.Load(L"test00111.jpeg");  t_h1=t_img1.GetHeight();  t_w1=t_img1.GetWidth();  t_h2=t_img2.GetHeight();  t_w2=t_img2.GetWidth();  t_h3=t_h1;  t_w3=t_w1+t_w2;  t_bpp=t_img1.GetBpp();  t_img3.Create(t_w3,t_h3,t_bpp);  t_img3.MixFrom(t_img1,0,0);  t_img3.MixFrom(t_img2,t_w1,0);  t_img3.Save(L"3.jpeg",CXIMAGE_FORMAT_JPG);

user: user-4
content: 引用 1 楼 bigwatercar 的回复:看把你美的，这拼接很简单的。  所有图像 假设 image[0-n]  申请一个 Σ(0,n) width  Σ(0,n)height  bitmap  然后一个一个bitblt到这个bitmap上就好了啊！！  总长和总高表示的有点儿问题， 反正就那个意思啦

user: user-4
content: 看把你美的，这拼接很简单的。  所有图像 假设 image[0-n]  申请一个 Σ(0,n) width  Σ(0,n)height  bitmap  然后一个一个bitblt到这个bitmap上就好了啊！！
user-0 提问: 参数类型是  int&，这是什么意思啊？是整形地址的意思吗

回复:
user: user-1
content: 引用！也就是需要对参数本身作操作，而不是拷贝复制的那一份！

user: user-2
content: 参数为引用传递，不同于值传递。 只有在面向对象语言，像C++，C#当中存在。 C语言只有指针传递和值传递。 引用传递类似于C当中的指针传递。

user: user-3
content: 引用，C++语言中才有，C语言没有

user: user-4
content: 别名， 传入是你原变量拷贝
user-0 提问: 关于#define的疑问

回复:
user: user-1
content: 你用gcc编译器试试，是可以通过的。VS不能通过。最根本的还是应该看看C标准是怎么说的。然后再看看各编译器的说明文档是怎么说的。

user: user-2
content: Error	1	error C2105: '--' needs l-value	d:\my documents\visual studio 2010\projects\opencvtest\opencvtest\opencvtest.cpp	251	1

user: user-2
content: 处理方式不一样，不用太纠结，编译器就这样按照语法来编译，你可以看看帮助文档，应该有详细的解释。

user: user-0
content: 引用 1 楼 user-4 的回复:因为a不在符号表里面 所以你引用a这个符号是无效的  看不懂=0= 能说具体点吗？

user: user-3
content: #define只是在相应的地方展开，不是定义

user: user-4
content: 因为a不在符号表里面 所以你引用a这个符号是无效的
user-0 提问: 基于linux下服务端创建的多线程id号都是一样的，为什么？

回复:
user: user-1
content: 引用 7 楼 lubyam 的回复:[quote=引用 6 楼 qq120848369 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要频繁创建销毁线程，请使用线程池。  说的对，且行且珍惜。[/quote] 对[/quote] 对，请珍惜

user: user-2
content: pthread_self()  获取线程ID

user: user-3
content: pthread_t 是线程ID。

user: user-4
content: 应该是你看错了，如果两个线程都活着不可能一样啊，

user: user-5
content: 不要频繁创建销毁线程，请使用线程池。

user: user-6
content: 或者是你没成功创建出两个线程

user: user-7
content: 线程ID是每个线程的唯一标识, 不可能相同. 只可能是你打错了.

user: user-8
content: 引用 6 楼 qq120848369 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 不要频繁创建销毁线程，请使用线程池。  说的对，且行且珍惜。[/quote] 对

user: user-9
content: 引用 5 楼 zhao4zhong1 的回复:不要频繁创建销毁线程，请使用线程池。  说的对，且行且珍惜。

user: user-10
content: 看起来像打 pid 去了...

user: user-11
content: 贴源代码看看。
user-0 提问: 将Name Mangling 后的名称还原为可读的形式？

回复:
user: user-1
content: c++filt

user: user-0
content: 引用 1 楼 user-2 的回复:extern "C" 用于防止name mangling 你说的很对，问题是现在第三方提供的动态链接库，做的时候并没有 extern "C" 规范。所以我才提出了这个问题

user: user-2
content: extern "C" 用于防止name mangling
user-0 提问: 求助！！！uvaoj 489：hangman judge 为何就是无法AC……

回复:
user: user-0
content: 我大概知道怎么回事了。 题目没说清楚啊。 我以为是一并输入后，统一输出。 结果竟然是每一回合都输入并分开输出……
user-0 提问: C语言里这种表达方式普遍吗？合适吗？

回复:
user: user-1

user: user-2
content: 库代码出现这种情况是正常的。  库代码，通常可能不遵守，宏，枚举常量必须大写这个习惯，因为库函数可以直接编写成函数，也可以用宏实现。 统一使用大写，并不能让宏常量，枚举常量，的意义更加明确，从而拉开名字的心理距离。  另外，很多编程约定，都不是针对库的，而是针对使用编译器和库的用户的。  而且，库函数，不需要可以移植，需要移植的时候，在目标系统上实现库函数即可。

user: user-3
content: 不太容易看懂,也就是不太直观,我觉的宏还是不要带括号

user: user-4
content: _osfile(fh) 我估计是生成了一个变量名，比如  #define _osfile(fh) osfile_##fh int _osfile(as)=100; 第二句就相当于是 int osfile_as=100; 其中_osfile(as)就是连接osfile_和as  ——————————————————————————  使用宏很普遍，这样连接两个字符串也很普遍，但是这样产生变量名，我感觉不是很好。

user: user-5
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。

user: user-6
content: 带参数的宏很普遍，但一般宏都要大写，和函数区别开来。 C语言中函数是不能被赋值的(C++某些情况下可以,不过基本没什么意义,一般不会这样用)，看到这种用法就应该想到是宏 写C标准库的都是大神，大神怎么写都是对的~~

user: user-7
content: 每天回帖即可获得10分可用分！小技巧：教您如何更快获得可用分

user: user-8
content: 就像这样： #define max(a,b) ((a) > (b) ? (a) : (b))

user: user-9
content: 他问的是 _osfile(fh) 吧，带参数的宏，用的算是普遍的

user: user-10
content: 有见到过，但不多

user: user-11
content: 函数的错觉啥意思？  这种用法很普遍， 比如 i += 1； 等价于 i = i + 1;  PS： 答题要被采纳了才有分的。。。     PPS: 给点分呗。
user-0 提问: 关于   访问超数组上标数据遇到的奇异的问题。（个人猜想是编译器问题）

回复:
user: user-1
content: 在比较老一点的编译器，数据顺序存放，并且是按照定义顺序存放，如果数据之间没有缝隙的话--比如VC不采用debug模式，也不用增量编译，你的这状况，恰好会出现。 因为老一点的编译器，内存比较少，也有没有多线程可以使用，所以一般是按照扫描到的变量定义顺序，存储数据。 就像汇编语言定义数据那样，依序存储。 新的编译器，由于各种技术，思想的问题，再加上C,C++语言标准，没有定义数据存储顺序，所以就各种方式的都有。

user: user-2
content: int count = 0; //初始化为0再看看。

user: user-3
content: #include <stdio.h> int main() {     int count;     int a[5]={1,2,3,4,5};     printf("%d",a[5]);    //数组越界了     for(count=0;count<6;count++)     {         printf("%d ",a[count]);  //但是，在count=5且输出a[count]时，数组越界     }     return 0; } 数组越界了，讨论这个没有意义啊

user: user-4
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-5
content: 引用 6 楼 starytx 的回复:不要干越界访问的事情就行了，至于看到的结果，研究起来也没意义对

user: user-0
content: 引用 16 楼 supermegaboy 的回复:[quote=引用 13 楼 u011636566 的回复:] 贴子标题已经明确标出了，这是一个在数组越界访问时出现的一个状况，不过因为这个状况有规律可循，所以决定有意思就发了上来。多谢前几位网友的解答。至于那些仅仅为了说明这是个越界访问，研究没意义的网友，我不置可否。反正我认为，对于出现的状况能搞懂其原理是再好不过的了。至于那些说越界方法会出现不可预料的结果的网友，我想说，我知道这个理论，不过目前这个现象明显不是不可预料的，是有规律的，所以我发了上来，让有经验的网友指教。综上所述：感谢第一类网友的帮助，请第二类网友看准帖子标题在选择是否浏览，不要浪费大家时间，请第三类网友斟酌发言意义。  其实认为“出现不可预料结果”的朋友也是正确的，你的理解有误。那个count值其实只是在你的编译器的当前环境下出现的结果，不同编译器或者即使同一个编译器的不同环境下结果就可能不一样了。[/quote]  不错，我在标题中也有标出猜想是编译器问题。不过还是想了解更透彻点，所以贴了上来。

user: user-1
content: 引用 1 楼 supermegaboy 的回复:这不是奇异问题，只不过由于你使用的编译器把count排在a之前，且在当前对齐系数下count与a之间没有空隙所致，a[5]访问到的其实是count。 ++ 这个明显是很正常现象，只要越界访问，什么事情都会出。。

user: user-6
content: 引用 13 楼 u011636566 的回复:贴子标题已经明确标出了，这是一个在数组越界访问时出现的一个状况，不过因为这个状况有规律可循，所以决定有意思就发了上来。多谢前几位网友的解答。至于那些仅仅为了说明这是个越界访问，研究没意义的网友，我不置可否。反正我认为，对于出现的状况能搞懂其原理是再好不过的了。至于那些说越界方法会出现不可预料的结果的网友，我想说，我知道这个理论，不过目前这个现象明显不是不可预料的，是有规律的，所以我发了上来，让有经验的网友指教。综上所述：感谢第一类网友的帮助，请第二类网友看准帖子标题在选择是否浏览，不要浪费大家时间，请第三类网友斟酌发言意义。  其实认为“出现不可预料结果”的朋友也是正确的，你的理解有误。那个count值其实只是在你的编译器的当前环境下出现的结果，不同编译器或者即使同一个编译器的不同环境下结果就可能不一样了。

user: user-4
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-7
content: 都越界了， 什么样的结果都要接受啊。

user: user-8
content: 不要干越界访问的事情就行了，至于看到的结果，研究起来也没意义

user: user-0
content: 回复zhao4zhong1：多谢这位网友，你说的更深一点，并且也多次回答我的问题，感谢下~

user: user-0
content: 回复supermegaboy：不错，的确是count 的数值。多谢~

user: user-0
content: 贴子标题已经明确标出了，这是一个在数组越界访问时出现的一个状况，不过因为这个状况有规律可循，所以决定有意思就发了上来。多谢前几位网友的解答。至于那些仅仅为了说明这是个越界访问，研究没意义的网友，我不置可否。反正我认为，对于出现的状况能搞懂其原理是再好不过的了。至于那些说越界方法会出现不可预料的结果的网友，我想说，我知道这个理论，不过目前这个现象明显不是不可预料的，是有规律的，所以我发了上来，让有经验的网友指教。综上所述：感谢第一类网友的帮助，请第二类网友看准帖子标题在选择是否浏览，不要浪费大家时间，请第三类网友斟酌发言意义。

user: user-9
content: 1楼正解 初始化一下count  或者改变一下你的数组最后一个元素的值  你就会发现其中的秘密！！！ 所以说，在一个函数内部，只要定义一个变量的指针， 就能用这个指针访问修改所有变量的值

user: user-10
content: 会输出乱码么？应该是一个数字吧？

user: user-11
content: 你换个编译器试试？

user: user-6
content: 这不是奇异问题，只不过由于你使用的编译器把count排在a之前，且在当前对齐系数下count与a之间没有空隙所致，a[5]访问到的其实是count。
user-0 提问: 为什么队列不应该反向遍历？

回复:
user: user-1
content: 书上这种说法漏了一个条件，用单链表易于实现单端队列，不便于实现双端队列。所谓“队列绝不反向遍历”，是由于单端队列只会从一端插入元素，另一端取出，这种情形用单链表是很容易实现的。
user-0 提问: 语法分析器的编写

回复:
user: user-0
content: 结贴结贴结贴

user: user-1
content: LEX+YACC FLEX+BISON

user: user-0
content: 引用 9 楼 caozhy 的回复:int 就是 i-n-t-分隔符 数字就是 数字(+)-分隔符   while((ch=getchar())!=EOF) 　　switch(state) 　　　　case 1 :if ch=="/",state=2,break; 　　　　case 2: if ch=="*",state=3 　　　　　　　　else state=1;break; 　　　　case 3:.......... 　　　　case 4:..........   http://www.cnblogs.com/yanlingyin/archive/2012/04/17/2451717.html 我看了这篇文章，这篇文章写的就是没法改变，要是想改变要怎么办呢？

user: user-0
content: 引用 9 楼 caozhy 的回复:int 就是 i-n-t-分隔符 数字就是 数字(+)-分隔符 还是不理解， 如果我有int和double，还有可能有integer，do等，那么我应该怎么确定待比较的字符串要和哪些进行比较呢？ 还有就是状态应该怎么用代码表示呢？各个状态在代码中是什么呢？

user: user-2
content: int 就是 i-n-t-分隔符 数字就是 数字(+)-分隔符

user: user-0
content: 引用 7 楼 caozhy 的回复:[quote=引用 6 楼 qilinno 的回复:] [quote=引用 4 楼 caozhy 的回复:] 不知道你说的“不能自定义语法”是什么意思。  词法分析无非就是构造NFA DFA，任何一本编译原理上都有。 但是有些地方还是想不太明白，就是我可以分析出<数字>0这种的词法，但是int这种的怎么分析呢？简单的比较？   还有就是我在网上看到的大多数都是直接定义好的，没见到词法分析的代码，都是直接拿定义好的词法用的[/quote]  如果你不懂NFA，根本看不懂词法分析的代码。[/quote] 我看过NFA了，但是要怎么分析int这种的关键字呢，要怎么做才能让它能用？

user: user-2
content: 引用 6 楼 qilinno 的回复:[quote=引用 4 楼 caozhy 的回复:] 不知道你说的“不能自定义语法”是什么意思。  词法分析无非就是构造NFA DFA，任何一本编译原理上都有。 但是有些地方还是想不太明白，就是我可以分析出<数字>0这种的词法，但是int这种的怎么分析呢？简单的比较？   还有就是我在网上看到的大多数都是直接定义好的，没见到词法分析的代码，都是直接拿定义好的词法用的[/quote]  如果你不懂NFA，根本看不懂词法分析的代码。

user: user-0
content: 引用 4 楼 caozhy 的回复:不知道你说的“不能自定义语法”是什么意思。  词法分析无非就是构造NFA DFA，任何一本编译原理上都有。 但是有些地方还是想不太明白，就是我可以分析出<数字>0这种的词法，但是int这种的怎么分析呢？简单的比较？   还有就是我在网上看到的大多数都是直接定义好的，没见到词法分析的代码，都是直接拿定义好的词法用的

user: user-0
content: 引用 2 楼 user-3 的回复:编译原理，递归下降分析 但是有些地方还是想不太明白，就是我可以分析出<数字>0这种的词法，但是int这种的怎么分析呢？简单的比较？

user: user-2
content: 不知道你说的“不能自定义语法”是什么意思。  词法分析无非就是构造NFA DFA，任何一本编译原理上都有。

user: user-0
content: 引用 1 楼 caozhy 的回复:你说的这个是词法分析而不是语法分析 对不起，是写错了， 请问下要怎么做呢？

user: user-3
content: 编译原理，递归下降分析

user: user-2
content: 你说的这个是词法分析而不是语法分析
user-0 提问: 写一个用逗号分割string对象的split函数

回复:
user: user-0
content: 已经实现，感谢版主  void splitdou(string s,vector<string>& ret)   {   	size_t last = 0; 	size_t index=s.find_first_of(',',last); 	while (index!=std::string::npos) 	{ 		ret.push_back(s.substr(last,index-last)); 		last=index+1; 		index=s.find_first_of(',',last); 	} 	if (index-last>0) 	{ 		ret.push_back(s.substr(last,index-last)); 	} }

user: user-1
content: 使用find找到分隔符，取出子串 重复以上过程
user-0 提问: 写的栈程序代码，编译通不过。

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

user: user-0
content: 引用 7 楼 bobo928843007 的回复:[quote=引用 5 楼 Forthe2012 的回复:] [quote=引用 3 楼 bobo928843007 的回复:] STACK   [quote=引用 1 楼 user-6 的回复:] 语法都不对啊，你确定 struct Stack 前面没有typedef？ +1  STACK 是Stack的结构体变量，不是变量类型，怎么能STACK  S呢！[/quote] 还有本科其实我是法学的。。[/quote]你干嘛转行呢[/quote]  不喜欢法学。

user: user-2
content: 先学关键字和基本语法吧。 就像学英语，你基本单词和基本的句子都看不懂。照着抄了一遍Obama演讲稿，肯定好多错误。

user: user-3
content: #include <stdio.h> #include<stdlib.h> typedef struct Node { 	int data; 	struct Node * pNext; }NODE,*PNODE; typedef struct Stack { 	PNODE pTop; 	PNODE pBottom; }STACK,*PSTACK; void init(PSTACK); void push(PSTACK,int); void traverse(PSTACK); int main() {     STACK S;     init(&S);     push(&S,1);     push(&S,2);     push(&S,3);     push(&S,4);     push(&S,5);     push(&S,6);     traverse(&S);     return 0; } void init(PSTACK pS) { 	pS->pTop=(PNODE)malloc(sizeof(NODE)); 	if(NULL==pS->pTop) 	{ 		printf("动态内存分配失败！\n"); 		exit(-1); 	} 	else{ 		pS->pBottom=pS->pTop; 		pS->pTop->pNext=NULL; 	} } void push(PSTACK pS,int val) { 	PNODE pNew=(PNODE)malloc(sizeof(NODE)); 	pNew->data=val; 	pNew->pNext=pS->pTop; 	pS->pTop=pNew; 	return; } void traverse(PSTACK pS) { 	PNODE p=pS->pTop; 	while(p!=pS->pBottom) 	{ 		printf("%d ",p->data); 		p=p->pNext; 	} 	printf("\n"); 	return; }   楼主写代码要细心啊

user: user-4
content: 引用 5 楼 Forthe2012 的回复:[quote=引用 3 楼 bobo928843007 的回复:] STACK   [quote=引用 1 楼 user-6 的回复:] 语法都不对啊，你确定 struct Stack 前面没有typedef？ +1  STACK 是Stack的结构体变量，不是变量类型，怎么能STACK  S呢！[/quote] 还有本科其实我是法学的。。[/quote]你干嘛转行呢

user: user-4
content: 引用 4 楼 Forthe2012 的回复:[quote=引用 1 楼 user-6 的回复:] 语法都不对啊，你确定 struct Stack 前面没有typedef？ 谢谢，我决定照版主的 换个编译器。 然后请教一下怎么学数据结构？我把链表、排序、二叉树、栈，或看视频 或看书，或看别人的代码（我下了个C程序105例），主要代码大体敲了一遍。好歹排序是我边背边理解着自己敲下来了，但马上就忘了。二叉树遍历啥的纯背。图的代码我一看吓了一跳，就先没弄。我知道后面还有红黑树啥的，觉得学起来好痛苦。。以后打算JAVA，但觉得不如先深入一门语言。  引用 2 楼 caozhy 的回复:所以一定要用一个好的编译器。好的编译器（比如VC++2010以上）给出的错误提示明确而一目了然。垃圾的编译器（比如VC6.0和gnucc 3.x，以及BCB的早期版本，错误提示一塌糊涂） 。[/quote]这个要理解，不理解背不下来的，通过画结构图来理解，一点一点的分析。

user: user-0
content: 引用 3 楼 bobo928843007 的回复:STACK   [quote=引用 1 楼 user-6 的回复:] 语法都不对啊，你确定 struct Stack 前面没有typedef？ +1  STACK 是Stack的结构体变量，不是变量类型，怎么能STACK  S呢！[/quote] 还有本科其实我是法学的。。

user: user-0
content: 引用 1 楼 user-6 的回复:语法都不对啊，你确定 struct Stack 前面没有typedef？ 谢谢，我决定照版主的 换个编译器。 然后请教一下怎么学数据结构？我把链表、排序、二叉树、栈，或看视频 或看书，或看别人的代码（我下了个C程序105例），主要代码大体敲了一遍。好歹排序是我边背边理解着自己敲下来了，但马上就忘了。二叉树遍历啥的纯背。图的代码我一看吓了一跳，就先没弄。我知道后面还有红黑树啥的，觉得学起来好痛苦。。以后打算JAVA，但觉得不如先深入一门语言。  引用 2 楼 caozhy 的回复:所以一定要用一个好的编译器。好的编译器（比如VC++2010以上）给出的错误提示明确而一目了然。垃圾的编译器（比如VC6.0和gnucc 3.x，以及BCB的早期版本，错误提示一塌糊涂） 。

user: user-4
content: STACK   引用 1 楼 user-6 的回复:语法都不对啊，你确定 struct Stack 前面没有typedef？ +1  STACK 是Stack的结构体变量，不是变量类型，怎么能STACK  S呢！

user: user-5
content: 所以一定要用一个好的编译器。好的编译器（比如VC++2010以上）给出的错误提示明确而一目了然。垃圾的编译器（比如VC6.0和gnucc 3.x，以及BCB的早期版本，错误提示一塌糊涂）

user: user-6
content: 语法都不对啊，你确定 struct Stack 前面没有typedef？
user-0 提问: 求支持cbc模式的blowfish加密算法（单个c文件）

回复:
user: user-0
content: 在网上找到C语言版本了，有C/C++/Java三个版本 http://blog.csdn.net/ishow99/article/details/4270854 需要注意的是，它的解密函数的输入是字符串格式的十六进制（例如："0913BFD01E9F7BC7D7AECF93C7FB4988"），在内部会把2个字符转成其对应的一个字节的数值（例如："09" --> 0x09）
user-0 提问: 将一个字符串拷贝到一维的指针数组中，指定的位置

回复:
user: user-0
content: memcpy(               recv_s2++i2*512,               recv_s2,               510               );  这样吗？ 好像不行啊。也报错，不过还没找到错误的原因。我以为这样可以呢 大侠们。帮我看看吧

user: user-1
content: 用memcpy

user: user-2
content: 你应该用memcpy吧

user: user-3
content: 显然是buffer不够大啊。 从s1+i2*512 这开始，放不下你的recv_s2 或者recv_s2中的510字节

user: user-0
content: 谢谢大侠们啦。 这个问题是不是很有实用性啊
user-0 提问: 通过GDB调试C和C++程序，得出的结果有些疑问，请教大家。

回复:
user: user-1
content: 引用 9 楼 lgmsyy 的回复:[quote=引用 8 楼 myepoch 的回复:] 你多实验几次，地址一定是变化的。这个可以保证。 恩，我实验了几次，确实变化了。那请问下gdb $1 = (unsigned char *) 0x7ffffff875a0 "BM\312=\a"    BM\312=\a 这个打印出来的是什么意思。是图片的什么信息吗[/quote]  打印出来的是什么，你试下就知道了。  另外，同样的内容，放在不同的地方，意义可能是不一样 的。所以不要只拿“内容”说事！？！

user: user-2
content: 引用 9 楼 lgmsyy 的回复:[quote=引用 8 楼 myepoch 的回复:] 你多实验几次，地址一定是变化的。这个可以保证。 恩，我实验了几次，确实变化了。那请问下gdb $1 = (unsigned char *) 0x7ffffff875a0 "BM\312=\a"    BM\312=\a 这个打印出来的是什么意思。是图片的什么信息吗[/quote]  你的 unsigned char *pImage;  不就是字符数组(字符串)的指针么？ 打印的就是它的内容，遇到0截断

user: user-0
content: 引用 8 楼 myepoch 的回复:你多实验几次，地址一定是变化的。这个可以保证。 恩，我实验了几次，确实变化了。那请问下gdb $1 = (unsigned char *) 0x7ffffff875a0 "BM\312=\a"    BM\312=\a 这个打印出来的是什么意思。是图片的什么信息吗

user: user-3
content: 你多实验几次，地址一定是变化的。这个可以保证。

user: user-0
content: 引用 5 楼 dbzhang800 的回复:[quote=引用 4 楼 lgmsyy 的回复:] [quote=引用 2 楼 gigglesun 的回复:] 打印的不是一个标量，打印的是地址，下次运行和这次运行打出来的都不会一样，何况C/C++ BM\312=\a" 打印出来的又是什么呢？？？ [/quote] 字符串，0 前面的部分[/quote]  gdb $1 = (unsigned char *) 0x7ffffff875a0 "BM\312=\a"   1.假如 0x7ffffff875a0  是地址，那么 "BM\312=\a"  是什么，这个和图片有什么关系。 2.如果是地址，为什么每次运行都是一样的地址

user: user-0
content: 引用 2 楼 gigglesun 的回复:打印的不是一个标量，打印的是地址，下次运行和这次运行打出来的都不会一样，何况C/C++  但我每次运行都的确是一样的啊？？？

user: user-2
content: 引用 4 楼 lgmsyy 的回复:[quote=引用 2 楼 gigglesun 的回复:] 打印的不是一个标量，打印的是地址，下次运行和这次运行打出来的都不会一样，何况C/C++ BM\312=\a" 打印出来的又是什么呢？？？ [/quote] 字符串，0 前面的部分

user: user-0
content: 引用 2 楼 gigglesun 的回复:打印的不是一个标量，打印的是地址，下次运行和这次运行打出来的都不会一样，何况C/C++ BM\312=\a" 打印出来的又是什么呢？？？

user: user-4
content: 正常情况！太正常了

user: user-5
content: 打印的不是一个标量，打印的是地址，下次运行和这次运行打出来的都不会一样，何况C/C++

user: user-1
content: 打印的就是地址呀！
user-0 提问: ADT实现多种数据类型之使用void *的疑问

回复:
user: user-1
content: 引用 6 楼 u014541584 的回复:[quote=引用 5 楼 supermegaboy 的回复:] [quote=引用 3 楼 u014541584 的回复:] 况且联合很有局限性，没void *自由灵活  错误。用void*存在类型转换，而除了普通指针到void*等少数情况外，C/C++是不保证转换到void*后再转换回原来的类型仍能保证其值不变。说白了，用void*存在安全隐患。  联合没有这样的问题。[/quote] 但是adt是无法访问函数实现细节的，所以联合不行[/quote]  无论联合也好，void*也好，栈的底层结构都是被封装起来的，用户本来就不需要知道细节，这是ADT的本来目的。你应该是不熟悉作为联合如何实现栈，以为需要访问细节。

user: user-0
content: 引用 5 楼 supermegaboy 的回复:[quote=引用 3 楼 u014541584 的回复:] 况且联合很有局限性，没void *自由灵活  错误。用void*存在类型转换，而除了普通指针到void*等少数情况外，C/C++是不保证转换到void*后再转换回原来的类型仍能保证其值不变。说白了，用void*存在安全隐患。  联合没有这样的问题。[/quote] 但是adt是无法访问函数实现细节的，所以联合不行

user: user-1
content: 引用 3 楼 u014541584 的回复:况且联合很有局限性，没void *自由灵活  错误。用void*存在类型转换，而除了普通指针到void*等少数情况外，C/C++是不保证转换到void*后再转换回原来的类型仍能保证其值不变。说白了，用void*存在安全隐患。  联合没有这样的问题。

user: user-0
content: 说错了，是无法用联合

user: user-0
content: 况且联合很有局限性，没void *自由灵活

user: user-0
content: 引用 1 楼 supermegaboy 的回复:这个方法不好，用联合更好。 我知道不好，但也要讨论下，就事而论吧

user: user-1
content: 这个方法不好，用联合更好。
user-0 提问: 为什么the standard C library这么说fgetc和getc的区别？

回复:
user: user-1
content: 因为getc往往是用宏实现的，而fgetc是函数实现的。前者优化得更好，所以性能更强。 不过如果你是读标准输入，因为人输入速度比计算机慢得多，所以没什么差别。 此外fgetc可以读地址，也允许i++这样的参数。因为getc是宏实现的，它可能会多次引用参数
user-0 提问: 怎样编译各运行包括多个文件的程序

回复:
user: user-1
content: 建工程 把.cpp 跟.h的文件拉到工程里 在用到****.h的.cpp文件开头加入#include“*****.h”  （用“ ”而不能用<>） 如果需要用到其他文件里面的函数的话，在文件开头声明使用外部函数 extern 【函数返回值】 【  函数名】【（形参）】；

user: user-2
content: VC适合初学者，因为有ide. linux下推荐code::blocks

user: user-3
content: 初学者可以从cmake入手,请搜"cmake"

user: user-4
content: 什么意思？没看懂

user: user-5
content: 引用 4 楼 u014517899 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 搜“跟我一起写makefile”  好吧  我承认没看懂   对于一个刚开始自学c语言的我来说  难！    哦对了  问题错了个字，应是：怎样运行和编译包括多个文件的程序[/quote] 你不知道有IDE这个东西？你不知道可以在IDE里建立工程，makefile什么的给你一次到位？

user: user-6
content: 引用 5 楼 u014517899 的回复:[quote=引用 2 楼 N_sev7 的回复:] 在我们刚一开始学习编程的时候或许我们的工程里面基本上都是一个.cpp和一个.h， 随着工程的规模以及功能的分割等原因我们可能会创建多个CPP.....   不是真的是我上面那样的问题吧   嗯  是滴  今天看到全局变量的时候，书上有这样的例子  但我不知道编译和运行包含多个文件程序的方法，求指教[/quote] 给你推荐个连接，去看看吧http://bbs.csdn.net/topics/360195917

user: user-7
content: 引用 4 楼 u014517899 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 搜“跟我一起写makefile”  好吧  我承认没看懂   对于一个刚开始自学c语言的我来说  难！    哦对了  问题错了个字，应是：怎样运行和编译包括多个文件的程序[/quote] 有时候学习就需要有“霸王硬上弓”的精神！

user: user-0
content: 引用 2 楼 N_sev7 的回复:在我们刚一开始学习编程的时候或许我们的工程里面基本上都是一个.cpp和一个.h， 随着工程的规模以及功能的分割等原因我们可能会创建多个CPP.....   不是真的是我上面那样的问题吧   嗯  是滴  今天看到全局变量的时候，书上有这样的例子  但我不知道编译和运行包含多个文件程序的方法，求指教

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:搜“跟我一起写makefile”  好吧  我承认没看懂   对于一个刚开始自学c语言的我来说  难！    哦对了  问题错了个字，应是：怎样运行和编译包括多个文件的程序

user: user-7
content: 搜“跟我一起写makefile”

user: user-6
content: 在我们刚一开始学习编程的时候或许我们的工程里面基本上都是一个.cpp和一个.h， 随着工程的规模以及功能的分割等原因我们可能会创建多个CPP.....   不是真的是我上面那样的问题吧
user-0 提问: 通过nm命令和通过readelf命令，我想查找到SO中提供的函数

回复:
user: user-1
content: 搜“Name Mangling in C++”

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:搜“Name Mangling in C++” 还是没说明    通过nm命令和通过readelf命令 得出的函数有什么不同
user-0 提问: C语言程序求高手解答，答案是对的，但是通过不了oj

回复:
user: user-1
content: 不应使用连续的if 而应使用 if else if else if else

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:不应使用连续的if 而应使用 if else if else if else 照你的改了还是通过不了在线测试系统。问题应该不在这儿吧