Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 用C语言进行十进制和八进制的转换怎么做？

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-0
content: 谢谢你了!!!

user: user-2
content: #include <stdio.h> #include <math.h> #include <string.h> int main() { 	int a,b,c,d,e=0; 	int j=0; 	printf("请输入一个十进制整数："); 	scanf("%d",&a); 	if(a<8){b=a;} 	else{c=a; 	do{  		d=c%8; 		e+=d*pow(10.0,j); 		c/=8; 		j++; 	}while(c>=8); 	} 	b=c*pow(10.0,j)+e; 	printf("转换成八进制数是:%d\n\n",b);  	printf("请输入一个八进制整数："); 	char x[100]={0}; 	scanf("%s", x); 	int i,flag=1; 	int k=0,w=0; 	j=strlen(x);//j用来判断用这个八进制数有多少位 	for(i=0;i<strlen(x);i++) 	{ 		if(x[i]<'0'||x[i]>'8')flag=0; 		k=(x[i]-48)*(pow(8.0,--j)); 		w+=k; 	} 	if(flag) 		printf("转换成十进制数是:%d\n",w);//显示十进制数 	else 		printf("八进制输入错误！\n");  }

user: user-3
content: 输出标识符改成八进制的就行了！
user-0 提问: C 语音如何获取Windows的显示内存

回复:
user: user-1
content: 搜“DirectX Surface” ？

user: user-2
content: 图像显示的数据应该也存再内存中吧，能不能通过存在内存中的数据获取呢？我猜的哈

user: user-0
content: 谢谢， 我再看看opengl

user: user-3
content: 抓图 录屏的软件看看源码？windows现在应该是不可以直接访问显存的

user: user-0
content: 引用 4 楼 ynsenyu 的回复:抓图 录屏的软件看看源码？windows现在应该是不可以直接访问显存的 恩，哪里会有这种开源的代码？

user: user-4
content: 引用 2 楼 yueyuezai 的回复:不好意思，比较菜，不过这个好像只是获取当前内存的状态，我是想获取显示屏显示的图像的内存数据，这个接口也可以？ 看样子我理解错了。你如果想读显存的数据，替你查了下百度，DirectX和OpenGL可能会提供类似接口，但是这里面有硬件加解码的部分，这个我不懂，自己找吧

user: user-0
content: 引用 1 楼 face_t0_sea 的回复:GlobalMemoryStatusEx http://blog.csdn.net/caimouse/article/details/1904782 完全可以自己百度的 不好意思，比较菜，不过这个好像只是获取当前内存的状态，我是想获取显示屏显示的图像的内存数据，这个接口也可以？

user: user-4
content: GlobalMemoryStatusEx http://blog.csdn.net/caimouse/article/details/1904782 完全可以自己百度的
user-0 提问: 程序运行到while((p!=NULL)&&(strcmp(p->name,name)!=0))停止运行

回复:
user: user-1
content: 感觉是链表中某个节点p!=NULL，但p->name变量是个空指针。

user: user-2
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-3
content: GoodsLink 和CreatGoodsLink()具体是什么？ GoodsLink 里的name是指针么？

user: user-4
content: 出错时断下来检测p的值是什么

user: user-5
content: 死循环了？while换成if看能不能跳出来继续运行

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

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

回复:
user: user-1
content: 理想很丰满， 现实很骨感。

user: user-0
content: 引用 2 楼 qq423399099 的回复:技术上的困难是如何让IPv4与IPv6网络互联互通。 如果一夜之间，所有的路由器、主机、应用程序都能支持IPv6，那明天就可以抛弃IPv4了。现实中不可能这么做，IPv6的部署肯定是循序渐进的过程，这就要求技术上处理好旧的IPv4网络与新的IPv6网络的兼容性。以我们最熟悉的QQ为例，如果IPv4和IPv6用户不能互相通信将是非常糟糕的情况。 IPv6的过渡方案主要有双栈、隧道、地址转换3种。 双栈技术本身不解决网络互联互通，只是要求所有主机都支持两种IP协议，这样对用户而言就是互通了。显然这种方案很难调动运营商和用户的积极性：别人都有双栈，我有IPv4就够了。 隧道技术可以解决双向互通，但需要强大的隧道服务器，可能会成为瓶颈。 地址转换技术方面曾经有一个标准草案NAT－PT，但已被IETF放弃了。 现在有一些更具体的新方案被提出来，如法国运营商Comcast提出的DS-Lite，国内CERNET2团队提出的IVI。新方案一般都将隧道和地址转换结合起来，可能更适合实现过渡的目的。   你的意思是说，只要所有路由器，计算机支持ipv6， 就可以了？

user: user-2
content: http://www.it985.com/development/developmentnews/2012/0606/2388.html

user: user-3
content: 技术上的困难是如何让IPv4与IPv6网络互联互通。 如果一夜之间，所有的路由器、主机、应用程序都能支持IPv6，那明天就可以抛弃IPv4了。现实中不可能这么做，IPv6的部署肯定是循序渐进的过程，这就要求技术上处理好旧的IPv4网络与新的IPv6网络的兼容性。以我们最熟悉的QQ为例，如果IPv4和IPv6用户不能互相通信将是非常糟糕的情况。 IPv6的过渡方案主要有双栈、隧道、地址转换3种。 双栈技术本身不解决网络互联互通，只是要求所有主机都支持两种IP协议，这样对用户而言就是互通了。显然这种方案很难调动运营商和用户的积极性：别人都有双栈，我有IPv4就够了。 隧道技术可以解决双向互通，但需要强大的隧道服务器，可能会成为瓶颈。 地址转换技术方面曾经有一个标准草案NAT－PT，但已被IETF放弃了。 现在有一些更具体的新方案被提出来，如法国运营商Comcast提出的DS-Lite，国内CERNET2团队提出的IVI。新方案一般都将隧道和地址转换结合起来，可能更适合实现过渡的目的。

user: user-4
content: IPv6协议对IPv4的改进表现在：  （1）扩展地址空间。IP地址长度由32位增加到128位。  （2）简化的首部格式，优化路由选择。IPv4首部的某些字段被取消或改为选项，以减少报文分组处理过程中常用情况的处理开销，并使得IPv6首部的带宽开销尽可能低。  （3）支持扩展首部和选项。IPv6的选项放在单独的扩展首部中，位于报文分组中IPv6基本首部和传送层首部之间。因为大多数IPv6选项首部不会被报文分组投递路径上的任何路由器检查和处理，直至其到达最终目的地，这种组织方式有利于改进路由器在处理包含选项的报文分组时的性能。IPv6的另一改进，是其选项与IPv4不同，可具有任意长度，不限于40字节。  （4）支持认证和加密机制。IPv6定义了一种扩展，可支持权限验证和数据完整性并支持保密性要求。  （5）支持自动配置。IPv6支持多种形式的自动配置，从孤立网络结点地址的“即插即用”自动配置，到DHCP提供的全功能的设施。  （6）服务质量能力。IPv6增加了一种新的能力，如果某些报文分组属于特定的工作流，发送者要求对其给予特殊处理，则可对这些报文分组加标号，例如非缺省服务质量通信业务或“实时”服务。
user-0 提问: 数据结构书中说    线索二叉树一般不设置fwd和bkwd指针，会浪费存储，为什么这么说

回复:
user: user-1
content: 我也觉得是一样的啊，楼主想明白这个问题了吗？

user: user-2
content: fwd和bkwd是否浪费空间只是相对于不加这两个字段而言，因为使用书上说的方式，不加这两个字段也可以实现线索二叉树。 也就是说结构体正常来说包括，left、right、fwd、bkwd、data。如果不加fwd、bkwd也可以实现。

user: user-3
content: 一个 char 四个字节， 两个也是， 如果位数比较少， 例如1Bit,32个标志占四个字节 大约如此，另外16Bits程序，int只有2个字节

user: user-0
content: 引用 3 楼 galiniur0u 的回复:fwd和bkwd是否浪费空间只是相对于不加这两个字段而言，因为使用书上说的方式，不加这两个字段也可以实现线索二叉树。 也就是说结构体正常来说包括，left、right、fwd、bkwd、data。如果不加fwd、bkwd也可以实现。 不加fwd  bkwd 的话，只有left和right以及data，结点不是应该再加上ltag和rtag么

user: user-0
content: 没人吗。。。
user-0 提问: C语言让主程序每运行一次变量永久自加1

回复:
user: user-1
content: 引用 14 楼 lm_whales 的回复:过去有些程序，会把数据写入可执行文件自身内部 现在似乎有点玄，可能需要一点手段 比如：http://bbs.csdn.net/topics/390968755

user: user-0
content: 引用 14 楼 lm_whales 的回复:过去有些程序，会把数据写入可执行文件自身内部 现在似乎有点玄，可能需要一点手段  用读取文件已解决 谢谢

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:读写文件 读写注册表 读写数据库 读写云存储 读写FLASH ROM ……  谢谢 ，虽然只明白第一个，但是已经能用来解决问题了

user: user-2
content: 过去有些程序，会把数据写入可执行文件自身内部 现在似乎有点玄，可能需要一点手段

user: user-3
content: 引用 12 楼 zhao4zhong1 的回复:读写文件 读写注册表 读写数据库 读写云存储 读写FLASH ROM ……

user: user-0
content: 引用 10 楼 h370981805 的回复:[quote=引用 9 楼 qq_29007291 的回复:] [quote=引用 8 楼 lgbxyz 的回复:] static 和 全局 变量  static int number=0; int main() {  printf("%d",number); return 0; } 这样能达到想要的效果吗？（number在头文件所声明的函数里自动加  1    了） [/quote]  这么说吧，main 当做一个主程序，运行的时候载入内存的，你退出了，存变量的内存这块就清空了（这么说不严谨，你先这样理解），所以你每次起一次main 这个变量又重新初始化，除非你把这个变量以文件写入硬盘。硬盘是除非别人复写了这块文件，要不然它存的这个变量文件是都存在的[/quote]   也就是说 也只有读写文件了对吧。OK，我正在试，谢谢！

user: user-1
content: 读写文件 读写注册表 读写数据库 读写云存储 读写FLASH ROM ……

user: user-4
content: 引用 9 楼 qq_29007291 的回复:[quote=引用 8 楼 lgbxyz 的回复:] static 和 全局 变量  static int number=0; int main() {  printf("%d",number); return 0; } 这样能达到想要的效果吗？（number在头文件所声明的函数里自动加  1    了） [/quote]  这么说吧，main 当做一个主程序，运行的时候载入内存的，你退出了，存变量的内存这块就清空了（这么说不严谨，你先这样理解），所以你每次起一次main 这个变量又重新初始化，除非你把这个变量以文件写入硬盘。硬盘是除非别人复写了这块文件，要不然它存的这个变量文件是都存在的

user: user-0
content: 引用 8 楼 lgbxyz 的回复:static 和 全局 变量  static int number=0; int main() {  printf("%d",number); return 0; } 这样能达到想要的效果吗？（number在头文件所声明的函数里自动加  1    了）

user: user-5
content: static 和 全局 变量

user: user-0
content: 引用 5 楼 u014444402 的回复:[quote=引用 2 楼 qq_29007291的回复:][quote=引用 1 楼 u014444402 的回复:] 文件被你忽略了？ ...不知道什么意思..C语言掌握的非常浅[/quote] 每次程序开始从文件里读，后面加了之后在写回文件。[/quote]  懂了懂了..这部分内容掌握的不是很熟，但是知道了有这个方法，谢谢哈

user: user-0
content: 引用 3 楼 yuelengdihai 的回复:在主程序main函数中肯定不可以的，mian函数结束整个程序的资源都被回收了 在其它函数中可以，下面test运行一次 a就加1  #include<stdio.h> void test() {    static int a=0;     a++;   printf("%d",a); } int main() {     test();    return 0; }  好像看到了希望，再进一步要求 如果这个变量还想在其他文件使用呢，也就是说我这个变量还得是全局变量

user: user-6
content: 引用 2 楼 qq_29007291的回复:[quote=引用 1 楼 u014444402 的回复:] 文件被你忽略了？ ...不知道什么意思..C语言掌握的非常浅[/quote] 每次程序开始从文件里读，后面加了之后在写回文件。

user: user-7
content: 在主程序main函数中肯定不可以的，mian函数结束整个程序的资源都被回收了 在其它函数中可以，下面test运行一次 a就加1  #include<stdio.h> void test() {    static int a=0;     a++;   printf("%d",a); } int main() {     test();    return 0; }

user: user-7
content: 引用 2 楼 qq_29007291 的回复:[quote=引用 1 楼 u014444402 的回复:] 文件被你忽略了？ ...不知道什么意思..C语言掌握的非常浅[/quote] 楼上意思是你运行一次，在程序中把变量写入文件一次

user: user-0
content: 引用 1 楼 u014444402 的回复:文件被你忽略了？ ...不知道什么意思..C语言掌握的非常浅

user: user-6
content: 文件被你忽略了？
user-0 提问: C语言怎么把一个链表的3个表元加互斥量

回复:
user: user-1
content: 引用 13 楼 u012324313 的回复:[quote=引用 12 楼 zhao4zhong1 的回复:] [quote=引用 11 楼 u012324313 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] 搞一个互斥量数组不就得了。 但是怎么把3个表元这种数据结构放到锁里面？[/quote] 使用第几个表元，就锁第几个锁。[/quote] 我懂了，谢谢了！[/quote] 心有灵犀一点通。

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:[quote=引用 11 楼 u012324313 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] 搞一个互斥量数组不就得了。 但是怎么把3个表元这种数据结构放到锁里面？[/quote] 使用第几个表元，就锁第几个锁。[/quote] 我懂了，谢谢了！

user: user-1
content: 引用 11 楼 u012324313 的回复:[quote=引用 10 楼 zhao4zhong1 的回复:] 搞一个互斥量数组不就得了。 但是怎么把3个表元这种数据结构放到锁里面？[/quote] 使用第几个表元，就锁第几个锁。

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:搞一个互斥量数组不就得了。 但是怎么把3个表元这种数据结构放到锁里面？

user: user-2
content: 不知道楼主的插入表元和添加表元有什么区别，如果仅仅是插入和查询操作，没有多线程操作同一链表，也不需要加锁的。

user: user-1
content: 搞一个互斥量数组不就得了。

user: user-0
content: 对整条链表进行加锁，我已经做好了，但是我觉得如果访问的2个表元距离较远，没必要等前几个解锁后再进行访问，可以同时进行，只有在2次修改同时在相邻表元进行操作时才加锁比较好，但是我不知道该怎么实现。

user: user-0
content: 引用 7 楼 galiniur0u 的回复:不知道楼主的插入表元和添加表元有什么区别，如果仅仅是插入和查询操作，没有多线程操作同一链表，也不需要加锁的。 不好意思，我写错了，是插入和删除

user: user-0
content: 引用 5 楼 chehw_1 的回复:[quote=引用 4 楼 u012324313 的回复:] [quote=引用 3 楼 chehw_1 的回复:] 建议准确描述一下你是在什么情况下需要这种加锁操作，看看是否有必要加这么多锁。  我感觉一般用一个锁就可以了。当你还不太清楚该如何实现时，如果对这种链表内部的某一个操作同时加三个锁，估计你有99.9%以上的概率会出现deaklock。 我做操作系统的课程设计[/quote]  与你做什么设计没什么关系，我指的是你打算对链表进行什么具体操作时必须要加3个锁？[/quote] 插入表元，添加表元和查询

user: user-3
content: 引用 4 楼 u012324313 的回复:[quote=引用 3 楼 chehw_1 的回复:] 建议准确描述一下你是在什么情况下需要这种加锁操作，看看是否有必要加这么多锁。  我感觉一般用一个锁就可以了。当你还不太清楚该如何实现时，如果对这种链表内部的某一个操作同时加三个锁，估计你有99.9%以上的概率会出现deaklock。 我做操作系统的课程设计[/quote]  与你做什么设计没什么关系，我指的是你打算对链表进行什么具体操作时必须要加3个锁？

user: user-0
content: 引用 3 楼 chehw_1 的回复:建议准确描述一下你是在什么情况下需要这种加锁操作，看看是否有必要加这么多锁。  我感觉一般用一个锁就可以了。当你还不太清楚该如何实现时，如果对这种链表内部的某一个操作同时加三个锁，估计你有99.9%以上的概率会出现deaklock。 我做操作系统的课程设计

user: user-3
content: 建议准确描述一下你是在什么情况下需要这种加锁操作，看看是否有必要加这么多锁。  我感觉一般用一个锁就可以了。当你还不太清楚该如何实现时，如果对这种链表内部的某一个操作同时加三个锁，估计你有99.9%以上的概率会出现deaklock。

user: user-0
content: 引用 1 楼 lgbxyz 的回复:访问加锁呗   LOCK(); //链表增删查排  UNLOCK();  能不能说详细一点？谢谢了

user: user-4
content: 访问加锁呗   LOCK(); //链表增删查排  UNLOCK();
user-0 提问: 哪位大神能帮我写个程序，用遗传算法求解投资组合的最优比例。

回复:
user: user-0

user: user-1
content: 再牛×的老师也无法代替学生自己领悟和上厕所！ 百度也无法代替楼主自己把这个代码的适应度函数改一下！

user: user-1
content: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=用遗传算法求解投资组合的最优比例

user: user-0
content: 我是想把这个代码的适应度函数改一下
user-0 提问: 指针传递

回复:
user: user-1
content: 如果允许Add函数改变nTmp，就写成 Add ((uint *) & nTmp); 否则就应该用 Add(& (uint) {nTmp});

user: user-0
content: uchar     gucEtherNetSocketID;   int           iRet; gucEtherNetSocketID = (uchar)iRet;   与  gucEtherNetSocketID = (uchar *)iRet; 上面两句赋值哪句是对的？能说说过程嘛？ int GetNetCSQ(struct CommStru *pCommInfo,uchar *pucRetVal) { //DEBUG_STACK if (pCommInfo==NULL || pucRetVal==NULL) { return EXCEPTION; }  return PubNetTestCSQ(pucRetVal);   //warning（int PubNetTestCSQ(int *piRetVal)） } 将上面的 return PubNetTestCSQ(pucRetVal); 直接改为 return PubNetTestCSQ((int *)pucRetVal); 这样的转变可以吗？       现在讨论这个！！！

user: user-2
content: Add((uint *)&nTmp);

user: user-3
content: 可以的，楼主在转换的过程中注意变量的位数就可以了，不要在转换中被截断。例如int 转 char时由于位数不同就会被截断，导致数据错误。

user: user-4
content: 第二种，  &就是取这个变量的地址

user: user-0
content: int GetNetCSQ(struct CommStru *pCommInfo,uchar *pucRetVal) { 	//DEBUG_STACK 		if (pCommInfo==NULL || pucRetVal==NULL) 		{ 			return EXCEPTION; 		}  		return PubNetTestCSQ(pucRetVal);   //warning（int PubNetTestCSQ(int *piRetVal)） } 将上面的 return PubNetTestCSQ(pucRetVal); 直接改为 return PubNetTestCSQ((int *)pucRetVal); 这样的转变可以吗？

user: user-0
content: 引用 楼主 afdlig 的回复:定义一个int nTmp; 现要调用一个函数void Add(uint *p); 是写成Add((uint)&nTmp);还是Add((uint *)&nTmp);这样的形式? 求解~能具体说点的  uchar     gucEtherNetSocketID;   int           iRet; gucEtherNetSocketID = (uchar)iRet;   与  gucEtherNetSocketID = (uchar *)iRet; 上面两句赋值哪句是对的？

user: user-0
content: 引用 1 楼 Rewen 的回复:Add((uint *)&nTmp); 传递进去的是指针。 那么也应该是指针的格式转换。 uchar     gucEtherNetSocketID;   int           iRet; gucEtherNetSocketID = (uchar)iRet;   与  gucEtherNetSocketID = (uchar *)iRet; 上面两句赋值哪句是对的？能说说过程嘛？

user: user-5
content: 你的nTmp是int类型的 那么取地址以后&nTmp就是int *类型的 要满足形参是uint *类型的，那么此时再强制转换成(uint *) 所以是Add((uint *)&nTmp);

user: user-6
content: Add((uint *)&nTmp); 传递进去的是指针。 那么也应该是指针的格式转换。
user-0 提问: 大家有没有使用过 return main();

回复:
user: user-1
content: 本来就有语法错，编译通不过的。

user: user-2
content: 自己也可以去掉用main函数，如果你觉得有必要的话

user: user-3
content: 你倒不如问有什么好处，我可以明确的告诉你：没有

user: user-0
content: 那会有什么不好的影响

user: user-3
content: 这是递归 它不会像你想象那样回到最初调用它的 main 函数中，而是在当前栈上再执行一个“新的” main

user: user-4
content: 堆栈剩余空间会越来越小。
user-0 提问: 关于在函数中返回一个指向数组的指针

回复:
user: user-1
content: //.1 void  function(int a[], int nCount) {     //对a[]进行操作 } //.2 int*  function(int a[], int nCount) {    int *temp = (int)malloc(sizeof(a)*nCount);    ....    return temp; }  主要是有两种情况，一是如果你是直接对传进来的数组进行操作，那么就不需要返回。 二是如果你是要返回在函数里面新建的一个数组，那么就需要用malloc去申请内存。 否则随便定义的数组出来这个函数就没有意义了。还有，记得用完malloc申请的数组记得释放内存

user: user-2
content: 恩恩额，可以

user: user-3
content: 请问楼主怎么解决的这个问题，我也遇到了同样的问题

user: user-4
content: 为什么总有人把C++与C混为一谈，这是C语言版块，讨论什么引用啊？

user: user-5
content: 函数参数本身就是数组指针，所以根本不需要返回了，因为修改后的数组，直接用传递的实参就可以。

user: user-6
content: 数组引用通常需要定义函数模板 不然只能传递固定长度数组

user: user-7
content: golang can do it betterpackage main import (     "fmt"     "strconv" )  type  slice []int  func (s slice)string()string{     str := ""     for _ , v := range s{         str += strconv.Itoa(v) + " "      }     return str    }  func fucn(s slice)slice{     for k , v := range s{         s[k] = v + 1     }     return s } func main(){     data  := slice{12,45,778,6}     fmt.Println(data.string())     s := fucn(data)     fmt.Println(s.string())     fmt.Println(data.string()) }

user: user-8
content: #include <stdlib.h> #include <stdio.h>  int* arr(int a[], int count) {         a[3] = 100;         return a; }  int main(int argc, char *argv[]) {         int a[] = {2, 3, 5, 6, 20};         arr(a, 5);         printf("%d\n", a[3]); }  不知道楼主的详细意图，如果以数组为参数传入，实际上传入的就是数组指针，可以随意操作数组。

user: user-9
content: 如果不想让数组退化，可以考虑传入数组的引用，在函数中进行的修改的其实就是main中的数组

user: user-10
content: 如果楼主仅仅只是想改变数组中元素的值，那么在函数里直接操作修改就行了（实参和形参指向的是同一块内存区域）不需要返回数组 如果该数组是函数内创建出来的，并且想返回，那么要用malloc（不能返回生命周期结束的变量） 如果想让传递进来的数组指向一块新的内存区域，那么要传引用或者二级指针才行

user: user-11
content: int (* f ( int a []) ) [] {     return a; }

user: user-12
content: 请那些喜欢将数组作为函数参数传来传去或函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或函数返回值呢？

user: user-13
content: 我记得在C中不能返回一个数组，即使是用指针返回也不行，你传递进来的是数组，其实也就相当于传进来的是数组首地址，也就是一个指针，而按指针传递的变量在函数内的变化在外部也是变化的所以不用返回值，调用函数后的数组就是你操作后的数组

user: user-14
content: void array_trans(typename array[]);  直接把数组首地址传入，随意修改

user: user-15
content: 数组做函数参数时，自动退化为相应的指针，函数返回数组时也是返回相应指针
user-0 提问: 《标准C语言指南》一书的问题，到底有几个对象？

回复:
user: user-1
content: 李忠老师写的书,我等小辈能去评价啥?这本书刚 开始就说了,本书中的对象即变量,至于为什么这么叫自己买本看一看就知道了

user: user-2
content: 3楼：

user: user-3
content: 啥叫“对象”？  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-4
content: //extern1.c #include <stdlib.h> #include <stdio.h> int y; int others() { 	printf("extern y = %p\n", &y); }   //extern2.c #include <stdlib.h> #include <stdio.h> extern int others(); int main(int argc, char *argv[]) { 	others(); 	int x = 2;  //    D1 	printf("D1 = %p\n", &x); 	int y;  //    D2 	printf("D2 = %p\n", &y); 	{ 		int x = 2;  // D3 		printf("D3 = %p\n", &x); 		extern int y;   //D4 		printf("D4 = %p\n", &y); 		{ 			int x = 2;    //D5 			printf("D5 = %p\n", &x); 			extern int y;  //D6 			printf("D6 = %p\n", &y); 		} 	} 	return 0; }  直接上代码： 这个是说明变量作用域以及extern关键字的例子 楼主可以看到，对于x，我们每次进行了声明，最终打印出x的地址是不一样的。也就是说大括号标示了不同的作用域。 而extern关键字是告诉程序去其他模块里找extern之后的变量，使用其他模块里的那个变量。通过打印我们也可以看出，extern声明的y的地址都是另一个程序中的变量地址。因此说y的地址都一样。 建议楼主遇到问题时多敲敲代码，就容易理解了。

user: user-5
content: 工作中要是这样写，肯定被领导骂死了！

user: user-6
content: 这书里有好几处错误，楼上指出的是其中一处。应该是排版的问题，改成这样就好了： int x;  //    D1 int y;  //    D2 void f (void) {     int x;  // D3     extern int y;   //D4     {         int x;    //D5         extern int y;  //D6     } }
user-0 提问: 在WIN32控制台下，读取一张位图，并将其中的每个像素的值保存到一个矩阵中（二维数组）

回复:
user: user-1
content: 乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream！ 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。

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

user: user-1
content: 仅供参考：void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }   电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-0
content: 引用 1 楼 face_t0_sea 的回复:像素点的值只代表颜色在计算机里的对应数值表示，不是可打印字符，乱码是正常的。 那我想把那个值保存进int数组该怎么转换呢？

user: user-2
content: 像素点的值只代表颜色在计算机里的对应数值表示，不是可打印字符，乱码是正常的。
user-0 提问: 求c语言高手看看，我实在不知道为什么？

回复:
user: user-1
content: node* add(int data, node* head) { node* temp = head; for(; temp->next != NULL; temp = temp->next);  // 要记录最后一个节点，不然没地方加了 temp-next = (node*)malloc(sizeof(node)); temp->next->data = data; temp->next->next = NULL; return head; }  你add函数的temp并没和原来链表连接起来

user: user-2
content: 问题出在add函数里，for(; temp != NULL; temp = temp->next);这个for循环之后，temp已经是NULL了 之后再为它malloc以及赋值都是没用的，根本没有连到原来的链表上 当temp->next是NULL的时候，也就是说到了最后一个节点的时候就应该跳出for循环了 然后temp->next = (node*)malloc(sizeof(node));连上要添加的节点，然后temp后移一个节点，然后赋值  node* add(int data, node* head) { 	node* temp = head->next; 	for(; temp->next != NULL; temp = temp->next); 	temp->next = (node*)malloc(sizeof(node)); 	temp = temp->next; 	temp->data = data; 	temp->next = NULL; 	return head; }
user-0 提问: 请问29a是什么

回复:
user: user-1
content: 世界上第一个近十年不用找总在CSDN C/C++论坛屠屏和卖萌的ID（zhao4zhong1）,他不是一个人在战斗！

user: user-2
content: 我是来找赵老师身影的

user: user-1
content: two nine a

user: user-3
content: 早期非常有名的研究编写病毒的组织，现在貌似不存在了。

user: user-0
content: 从前的 Dos/Win16 病毒编写者，几个病毒家族的作者包括Ginger和Rainbow,世界上第一个使用循环分区技巧的联合病毒作者（Orsam），世界上第一个XMS(扩展内存）交换病毒的发明者（John Galt），世界上第一个使用线程局部存储用作复制的病毒作者（Shrug），世界上第一个使用Visual Bisic 5/6 语言扩展用作复制的病毒的作者（OU812),世界上第一个本地可执行的病毒的作者（Chthon)，世界上第一个使用进程相互协作防止被中止的病毒的作者（Gemini），世界上第一个使用多态SMTP报头的病毒的作者（JunkMail），世界上第一个能转换任何数据文件到感染对象的病毒的作者（Pretext)，世界上第一个32/64位寄生EPO .NET病毒的作者（Croissant），世界上第一个使用自身执行的HTML病毒的作者（JunktmaiL），世界上第一个能吹的病毒制造者(zhangyu),他们组成了29A这个世界知名的病毒制造机构。 编写了世界首例手机之间传播的病毒“卡比尔”。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:[quote=引用 3 楼 zhulei1978 的回复:] [quote=引用 1 楼 Intel0011 的回复:] 早期非常有名的研究编写病毒的组织，现在貌似不存在了。  你有他们的资料吗[/quote] 试试去掘他们的墓。[/quote]

user: user-4
content: “卡比尔”制造者

user: user-1
content: 引用 3 楼 zhulei1978 的回复:[quote=引用 1 楼 Intel0011 的回复:] 早期非常有名的研究编写病毒的组织，现在貌似不存在了。  你有他们的资料吗[/quote] 试试去掘他们的墓。

user: user-0
content: 引用 1 楼 Intel0011 的回复:早期非常有名的研究编写病毒的组织，现在貌似不存在了。  你有他们的资料吗
user-0 提问: 新人学习C，求教一下这个小题

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

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

user: user-2
content: #include<stdio.h> int main() {         int a,b;         float c,d,e;         printf("input a,b:\n");         scanf("%d %d", &a, &b);         c = a * b;         d = c * 0.08;         e = c - d;         printf("c = %.2f, d = %.2f, e = %.2f\n", c, d, e);         return 0; }  楼主有几个地方错了， 1、main函数的小括号和中括号之间是不能有printf的。 2、scanf两个变量之间要用逗号分隔，并且传入的参数为引用。 3、return 0;中间要有空格。 4、计算浮点数不要用int，要用float。

user: user-3
content: #include<stdio.h> int main() {     int a,b;     double c,d,e;     printf("please input a b:");     scanf("%d %d",&a,&b);     c=a*b;     d=c*0.08;     e=c-d;    printf("c d e,%f,%f,%f\n",c,d,e);    return 0; }

user: user-4
content: 还有删除第三行的printf return0;之间要有个空格return 0;

user: user-5
content: scanf("%d %d",&a,&b);
user-0 提问: 【请教】关于Linux C程序调用shell的问题

回复:
user: user-1

user: user-1
content: 仅供参考：#include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> pid_t rw_popen(char* cmd, FILE **rfile, FILE **wfile) {     int pipefd[2],pipefd2[2]; //管道描述符     pid_t pid; //进程描述符      if (pipe(pipefd) < 0) //建立管道     {         printf("rw_popen() pipe create error/n");         return 0;     }     if (pipe(pipefd2) < 0) //建立管道     {         printf("rw_popen() pipe create error/n");         return 0;     }      pid = fork(); //建立子进程      if (pid < 0)     return 0;      if (0 == pid) //子进程中     {         close(pipefd[0]);         dup2(pipefd[1], 1);         close(pipefd[1]);         dup2(pipefd2[0], 0);         close(pipefd2[0]);         close(pipefd[1]);         char *argv[] = { "/bin/sh", "-c", cmd, NULL };         if (execvp("/bin/sh", argv) < 0) //用exec族函数执行命令         exit(1);     }      close(pipefd[1]);     *rfile = fdopen(pipefd[0], "r");     close(pipefd2[0]);     *wfile = fdopen(pipefd2[1], "w");     return pid; } void rw_pclose(pid_t pid, FILE *rfile, FILE *wfile) {     int status;     waitpid(pid, &status, 0);     fclose(rfile);     fclose(wfile); } int main() {     char buf1[1024];     FILE *file1, *file2;     pid_t pid;     pid = rw_popen("sh", &file1, &file2);     if (pid) {         fputs("pwd;exit;\n",file2);         fflush(file2);         if (fgets(buf1, 1400, file1)) {             puts(buf1);         }         rw_pclose(pid, file1, file2);     }     return 1; }

user: user-0
content: 哦哦！奏效！多谢这位英雄！
user-0 提问: c语言学习小问题，思考了许久。。

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-0
content: 可是typedef不是一般只有2个参数吗？这个怎么多参数，还有宏，是怎么来理解的啊？

user: user-2
content: typedef 意思就是别名而已 ，前面的名字和后面的名字是等价的

user: user-2
content: 引用 1 楼 user-2 的回复:_Null_terminated 的意思就是以/0为结尾的字符串 跟普通的字符串一样的  恩，，，\0不是/0

user: user-2
content: _Null_terminated 的意思就是以/0为结尾的字符串 跟普通的字符串一样的
user-0 提问: 请教各位几个小问题，有点晕了不太理解

回复:
user: user-1
content: 嗯。debug是王道

user: user-2
content: cout << n * (n + 1)  /  2;

user: user-3
content: 这就是和1+……+100求和问题；n是循环变量；有多个线条就需要循环多少次；

user: user-4
content: 撸主是刚入门吧，这是最基本的语法了

user: user-5
content: 来学习的，和一样

user: user-6
content: 不要看线条什么的，就是求1+2+3+4+......+200=什么

user: user-7
content: 把for循环中的n换小一点， 比如： for(n = 1;n<5;n++) t = t + n; 你会发现最后t的值等于10！ 总共循环了4次！ 第一次：t = 0,n = 1,t = t+n->t = 1; 第二次：t = 1,n = 2,t = t+n ->t = 3 第三次：t = 3,n = 3,t = t+n->t = 6 第四次：t = 6,n = 4,t = t+n->t = 10 …… n<200就是循环199次  类推

user: user-8

user: user-9
content: 不就是for循环做累加吗   想想小学1到50求和就明白了 都是一个道理

user: user-10
content: lz数学好差

user: user-11
content: 等差数列，累和，不复杂的。

user: user-12
content: 楼主，支持一下！！！

user: user-13
content: 美女喝茶 求关注静远茶城

user: user-14
content: 看看C程序设计-谭浩强著（大学C语言经典教材）。

user: user-15
content: 引用 6 楼 sinat_34615052 的回复:[quote=引用 2 楼 qq423399099 的回复:] 这个表达式就是1到200的累加求和 如果t不初始化为0，在很多编译器里它的值将是一个垃圾值（用垃圾值加上1到200的累加和还是一个垃圾值，打印的结果也就不对了） t = t + n会循环200次，循环完200次以后才printf打印结果  for(n = 1; n <= 200; n = n+1)     t = t + n; printf("从第一行到第200行所有的点个数为%d\n", t);  可不可以这样理解，t就是所有点的总和，n是第n条线上的点的个数，这样一来的话，t = 0 这个表达式（也就是初始化）可不可以看成是刚开始t是从0开始的，因为刚开始是没有点的，直到出现了第一条线上的第一个点才开始有意义，同理，如果把变量t的值变成1的话，那就是说一开始就已经有了一个点了（这也算是一种初始化，只是起始点不同对吧？），这样的话最终的打印结果在数值上也就多了一个1，而不会是一个垃圾值，我能这样理解吗？[/quote] 前半部分是对的，变量t的值是几，并不代表就有几个点，因为t是每个点的值的累加和，t是3的时候其实只有2个点

user: user-16
content: 变量名没起好, 把t改成sum就简单了. t = 0 就是最初是0个点. t = t + n 就是总数等于之前的点数加上新的线上的点数.

user: user-0
content: 引用 3 楼 wangjingtao1994 的回复:t = t + n 的意思不是说自己等于自己加一个数，，，，而是把自己和另一个数的和赋值给一个变量，而这个变量正好是自己，所以就把原来的值覆盖了，，，你可以这么理解，，，  int a = t+n; t = a;  用a的值覆盖t，而a就是t和n的和，，  注意：t = t+n 和 t += n虽然结果一样，但原理完全不同，不过在没学操作符重载的时候可以当一样的使  谢谢    你这一说好像我确实明白了一些，就是因为t被初始化了，才需要 t = t + n 这个表达式的对吧？不然就不必设置 t 这个变量而直接输出 n 的值就可以了（思想上是这样，虽然这在逻辑上行不通）对吧？因为 n 就代表了点数，如果哪里说得不对，请谅解，本人初入c没几天，正在学习中，这些问题都是琢磨不透才来提问的，我个人性格就是遇到再小的问题也要弄明白，不然不好受

user: user-0
content: 引用 2 楼 qq423399099 的回复:这个表达式就是1到200的累加求和 如果t不初始化为0，在很多编译器里它的值将是一个垃圾值（用垃圾值加上1到200的累加和还是一个垃圾值，打印的结果也就不对了） t = t + n会循环200次，循环完200次以后才printf打印结果  for(n = 1; n <= 200; n = n+1)     t = t + n; printf("从第一行到第200行所有的点个数为%d\n", t);  可不可以这样理解，t就是所有点的总和，n是第n条线上的点的个数，这样一来的话，t = 0 这个表达式（也就是初始化）可不可以看成是刚开始t是从0开始的，因为刚开始是没有点的，直到出现了第一条线上的第一个点才开始有意义，同理，如果把变量t的值变成1的话，那就是说一开始就已经有了一个点了（这也算是一种初始化，只是起始点不同对吧？），这样的话最终的打印结果在数值上也就多了一个1，而不会是一个垃圾值，我能这样理解吗？

user: user-17
content: 当为计数器呀

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

回复:
user: user-1
content: 引用 4 楼 qq_34309383 的回复:[quote=引用 3 楼 qq423399099 的回复:] [quote=引用 2 楼 qq_34309383 的回复:] [quote=引用 1 楼 qq423399099 的回复:] scanf("%d",&p[i]); 存int要取址才行，而且%d后面的;也可以去掉   	for (i = 0; i < n; i++) { 		scanf("%d",&p[i]);  	}    谢谢！想问下为什么？这个p原本是个指针啊 p确实是个指针，但是你p[i]却是int型的，给int赋值必须是int *才行，所以要取址 你改成scanf("%d",p+i);这样是可以的[/quote] 哦我知道了，p[i]==*(p+i)，谢谢你 核心已转储的意思是scanf发现类型不匹配（是吧）[/quote] 这里确实是由scanf引起的 通常是因为SEGMENT FAULT, 一般是访问越界引起的。

user: user-0
content: 引用 3 楼 qq423399099 的回复:[quote=引用 2 楼 qq_34309383 的回复:] [quote=引用 1 楼 qq423399099 的回复:] scanf("%d",&p[i]); 存int要取址才行，而且%d后面的;也可以去掉   	for (i = 0; i < n; i++) { 		scanf("%d",&p[i]);  	}    谢谢！想问下为什么？这个p原本是个指针啊 p确实是个指针，但是你p[i]却是int型的，给int赋值必须是int *才行，所以要取址 你改成scanf("%d",p+i);这样是可以的[/quote] 哦我知道了，p[i]==*(p+i)，谢谢你 核心已转储的意思是scanf发现类型不匹配（是吧）

user: user-1
content: 引用 2 楼 qq_34309383 的回复:[quote=引用 1 楼 qq423399099 的回复:] scanf("%d",&p[i]); 存int要取址才行，而且%d后面的;也可以去掉   	for (i = 0; i < n; i++) { 		scanf("%d",&p[i]);  	}    谢谢！想问下为什么？这个p原本是个指针啊[/quote] p确实是个指针，但是你p[i]却是int型的，给int赋值必须是int *才行，所以要取址 你改成scanf("%d",p+i);这样是可以的

user: user-0
content: 引用 1 楼 qq423399099 的回复:scanf("%d",&p[i]); 存int要取址才行，而且%d后面的;也可以去掉   	for (i = 0; i < n; i++) { 		scanf("%d",&p[i]);  	}    谢谢！想问下为什么？这个p原本是个指针啊

user: user-1
content: scanf("%d",&p[i]); 存int要取址才行，而且%d后面的;也可以去掉  #include <stdlib.h> #include <stdio.h> int main() { 	int *p,*d; 	int n,i; 	puts("想申请的int个数："); 	scanf("%d",&n);  	p = (int *) malloc (n*sizeof(int));  	for (i = 0; i < n; i++) { 		scanf("%d",&p[i]); /*对数组进行赋值，这里错了，但不知道怎么改*/  	}  	for (i = 0; i < n; i++) { 		printf("%5d",p[i]); 	} 	free(p); 	return 0; }
user-0 提问: linux下设置系统时间然后在获取系统时间出问题

回复:
user: user-1
content: 注意时区，另外检测函数返回值以确定是否成功

user: user-2
content: 那要看你有没有root权限了

user: user-3
content: 也许是因为你没有考虑时区 也许是因为你没有权限

user: user-4
content: 修改系统时间需要 root 权限.
user-0 提问: 这段话什么意思啊？大神进来看看

回复:
user: user-1
content: 引用 5楼我是你的主体 的回复:[quote=引用 2 楼 qq423399099 的回复:] 变长数组GCC是可以编译的，如果楼主是VS什么的是通不过编译的 gcc确实可以，但是怎么实现的呢？我试了一下，确实给数组在栈上分配空间了，而且随着输入值的不同分配的空间还不同，这用到了什么高新技术吗？[/quote]这个数组是在栈上的，其效果相当于你定义了n*n个行参，其实也是压栈而已，数组太大容易溢出。

user: user-2
content: 请那些喜欢将数组作为函数参数传来传去的码农思考一下为什么不把整个互联网内容当作函数参数传来传去呢？

user: user-0
content: 引用 2 楼 qq423399099 的回复:变长数组GCC是可以编译的，如果楼主是VS什么的是通不过编译的 gcc确实可以，但是怎么实现的呢？我试了一下，确实给数组在栈上分配空间了，而且随着输入值的不同分配的空间还不同，这用到了什么高新技术吗？

user: user-0
content: 引用 3 楼 paschen 的回复:C99支持变长数组VLA，但C++里是没有的 奥，好吧，那底层是怎么实现的啊？编译器怎么知道该分配多少内存呢

user: user-3
content: 引用 4 楼 cyfcsd 的回复:[quote=引用 3 楼 paschen 的回复:] C99支持变长数组VLA，但C++里是没有的 奥，好吧，那底层是怎么实现的啊？编译器怎么知道该分配多少内存呢[/quote]  http://blog.163.com/163_zhujingwei/blog/static/973305972011519114611170/

user: user-3
content: C99支持变长数组VLA，但C++里是没有的

user: user-4
content: 变长数组GCC是可以编译的，如果楼主是VS什么的是通不过编译的

user: user-5
content: 参数n必须在A[n][n]之前初始化

user: user-2
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533

user: user-2
content: 引用 8 楼 cyfcsd 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] 请那些喜欢将数组作为函数参数传来传去的码农思考一下为什么不把整个互联网内容当作函数参数传来传去呢？ 不是要传整个互联网啊，是编译器怎么“提前”知道用户输入的啊[/quote] 我的意思是研究怎样将数组作为函数参数或函数返回值是浪费生命的一种方法。  默认栈大小参考：   /STACK   (Stack Allocations) Home |  Overview |  How Do I |  Linker Options  The Stack Allocations (/STACK:reserve[,commit]) option sets the size of the stack in bytes.   To find this option in the development environment, click Settings on the Project menu. Then click the Link tab, and click Output in the Category box. The Reserve text box (or in the reserve argument on the command line) specifies the total stack allocation in virtual memory. The default stack size is 1 MB. The linker rounds up the specified value to the nearest 4 bytes.  The optional value specified in the Commit text box (or in the commit argument on the command line) is subject to interpretation by the operating system. In Windows NT, it specifies the amount of physical memory to allocate at a time. Committed virtual memory causes space to be reserved in the paging file. A higher commit value saves time when the application needs more stack space, but increases the memory requirements and possibly the startup time.  Specify the reserve and commit values in decimal or C-language notation.  Another way to set the size of the stack is with the STACKSIZE statement in a module-definition (.DEF) file. STACKSIZE overrides the Stack Allocations (/STACK) option if both are specified. You can change the stack after the .EXE file is built by using the EDITBIN tool.

user: user-0
content: 好像明白了  确实是用户输入后栈指针又移动了  并没有什么高新技术  这么简单的问题为什么别的编译器不支持呢

user: user-0
content: 引用 7 楼 u014444402 的回复:[quote=引用 5楼我是你的主体 的回复:][quote=引用 2 楼 qq423399099 的回复:] 变长数组GCC是可以编译的，如果楼主是VS什么的是通不过编译的 gcc确实可以，但是怎么实现的呢？我试了一下，确实给数组在栈上分配空间了，而且随着输入值的不同分配的空间还不同，这用到了什么高新技术吗？[/quote]这个数组是在栈上的，其效果相当于你定义了n*n个行参，其实也是压栈而已，数组太大容易溢出。[/quote] 恩  压栈的问题我知道   就是不明白当系统调用main函数时是如何确定main栈帧大小的 难道是等用户输入后再移动栈指针？

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:请那些喜欢将数组作为函数参数传来传去的码农思考一下为什么不把整个互联网内容当作函数参数传来传去呢？ 不是要传整个互联网啊，是编译器怎么“提前”知道用户输入的啊
user-0 提问: typedef struct list node; 什么意思啊？？？

回复:
user: user-1
content: typedef typedef type-declaration synonym;  The typedef keyword defines a synonym for the specified type-declaration. The identifier in the type-declaration becomes another name for the type, instead of naming an instance of the type. You cannot use the typedef specifier inside a function definition.  A typedef declaration introduces a name that, within its scope, becomes a synonym for the type given by the decl-specifiers portion of the declaration. In contrast to the class, struct, union, and enum declarations, typedef declarations do not introduce new types — they introduce new names for existing types.  Example  // Example of the typedef keyword typedef unsigned long ulong;  ulong ul;     // Equivalent to "unsigned long ul;"  typedef struct mystructtag {    int   i;    float f;    char  c; } mystruct;  mystruct ms;   // Equivalent to "struct mystructtag ms;"  typedef int (*funcptr)();  // funcptr is synonym for "pointer                            //    to function returning int"  funcptr table[10];   // Equivalent to "int (*table[10])();"

user: user-2
content: 可以认为node是list类型的别名

user: user-2
content: node是一个类型且和struct list类型一样

user: user-3
content: typedef struct list node; //node相当于struct list typedef node *link;         //link相当于node* typedef node vec[10];    //再给楼主补充个，定义了一个元素类型为node，含有10个元素的数组类型vec

user: user-4
content: 定义类型别名，将node定义为list的同义词，将link定义为node *的同义词，之后就可以用新定义的类型定义变量了
user-0 提问: typedef vernode adjlist[MaxNode]; 这句是什么意思啊？

回复:
user: user-0
content: 引用 2 楼 user-4 的回复:vernode adjlist[MaxNode];               -->这种情况下adjlist是vernode数组的变量 typedef vernode adjlist[MaxNode]; -->这种情况下adjlist是自定义的数组类型，该数组成员的类型是vernode，数组成员的的个数是MaxNode 举个例子 有了typedef vernode adjlist[MaxNode];之后 adjilist a;相当于vernode a[MaxNode]; 懂了，非常感谢！

user: user-1
content: 引用 5 楼 renwotao2009 的回复:举例子typedef int[10] a; 等同于typedef int a[10]; int a[10];等同于int[10] a; 我这里说的有问题。 typedef功能相当于给包含10个int类型的数组起了个别名叫做a； a a_;// a_为包含10个int类型数据的数组。

user: user-1
content: 举例子typedef int[10] a; 等同于typedef int a[10]; int a[10];等同于int[10] a;

user: user-2
content: typedef struct {     adjlist adj_list;     int n,e; }ALGraph;

user: user-2
content: vernode是邻接表头结点的类型 typedef vernode adjlist[MaxNode];定义的是一个邻接表类型 表示的意思是：定义一个元素类型是vernode，含有MaxNode个元素的数组类型adjlist 如果不加typedef的话则变成了数组定义 因为一般还会定义一个图的类型，所以上面定义这样一个数组类型  typedef struct {     adjlist adj_list;     int n,e; };

user: user-3
content: 定义了元素类型为vernode，元素个数为MaxNode的一个数组类型adjlist vernode之前已经定义过

user: user-4
content: vernode adjlist[MaxNode];               -->这种情况下adjlist是vernode数组的变量 typedef vernode adjlist[MaxNode]; -->这种情况下adjlist是自定义的数组类型，该数组成员的类型是vernode，数组成员的的个数是MaxNode 举个例子 有了typedef vernode adjlist[MaxNode];之后 adjilist a;相当于vernode a[MaxNode];
user-0 提问: c++静态成员问题

回复:
user: user-1
content: Int ii1;              //创建一个ii1对象，会调用构造函数，因为有默认值，num从0变到了1，这个应该没有疑问吧  { Int ii1(i1); }     //用i1去构建对象ii1,作用域是{ }内，也会调用构造函数，num从1到2  Int ii2(i2);        //执行这句之前第二个ii1已经离开作用域了，所以调用了析构，num从2到1了                        //用i2构建对象ii2,会调用构造函数，num从1到2  注：在C++中，类的静态成员（static member）必须在类内声明，在类外初始化。静态成员是属于整个类的而不是某个对象，静态成员变量只存储一份供所有对象共用。

user: user-2
content: [size=24px]Int ii1创建一个lnt类的ii1对象，默认参数值是零；  { Int ii1(i1); }修改参数值为i1=1；  Int ii2(i2)创建一个lnt的ii2对象，实参为i2=2。 它们在声明时就被创建，之后以先进后出的方式回收[/size]
user-0 提问: 帮我看看哪儿错了= =数据结构单链表 我真的尽力改了 可是还是乱码。。

回复:
user: user-0
content: 引用 10 楼 qq423399099 的回复:引用 8 楼 qq_33428266 的回复:[quote=引用 7 楼 qq423399099 的回复:] 楼主用的什么IDE啊codeblocks Code::Blocks缺省文件编码是UTF-8 从菜单Settings->Compiler and debugger。。。。  打开编译器设定对话框，在Compiler setting tab上，选择Other Option,添加下面的设定  -fexec-charset=GBK -finput-charset=UTF-8 告诉编译器，文件输入字符编码是utf-8，执行时以gbk编码对待[/quote]能否帮我看看哪里还有毛病  刚忘了加break;TT

user: user-0
content: 引用 10 楼 qq423399099 的回复:引用 8 楼 qq_33428266 的回复:[quote=引用 7 楼 qq423399099 的回复:] 楼主用的什么IDE啊codeblocks Code::Blocks缺省文件编码是UTF-8 从菜单Settings->Compiler and debugger。。。。  打开编译器设定对话框，在Compiler setting tab上，选择Other Option,添加下面的设定  -fexec-charset=GBK -finput-charset=UTF-8 告诉编译器，文件输入字符编码是utf-8，执行时以gbk编码对待[/quote]已改好 感激不尽TT

user: user-1
content: 引用 8 楼 qq_33428266 的回复:引用 7 楼 qq423399099 的回复:楼主用的什么IDE啊codeblocks  没有用过，爱莫能助，但是可以肯定的是不可能不能输出中文

user: user-0
content: 引用 11 楼 trytry1992 的回复:引用 8 楼 qq_33428266 的回复:[quote=引用 7 楼 qq423399099 的回复:] 楼主用的什么IDE啊codeblocks  没有用过，爱莫能助，但是可以肯定的是不可能不能输出中文[/quote]哈哈哈谢谢 已改好---

user: user-2
content: 引用 8 楼 qq_33428266 的回复:引用 7 楼 qq423399099 的回复:楼主用的什么IDE啊codeblocks Code::Blocks缺省文件编码是UTF-8 从菜单Settings->Compiler and debugger。。。。  打开编译器设定对话框，在Compiler setting tab上，选择Other Option,添加下面的设定  -fexec-charset=GBK -finput-charset=UTF-8 告诉编译器，文件输入字符编码是utf-8，执行时以gbk编码对待

user: user-1
content: 文件 -> 高级保存选项 -> 编码, 修改为UNICODE试试

user: user-0
content: 引用 2 楼 user-3 的回复:不是程序代码问题，是字符编码问题。。。  实在不行用英文那怎么用汉字。。原来没这情况啊。。。

user: user-0
content: 引用 7 楼 qq423399099 的回复:楼主用的什么IDE啊codeblocks

user: user-0
content: 引用 4 楼 trytry1992 的回复:楼主用的VS的话可以用宏定义。。。那就是说不能用汉字了？

user: user-2
content: 楼主用的什么IDE啊

user: user-1
content: 楼主用的VS的话可以用宏定义

user: user-3
content: 不是程序代码问题，是字符编码问题。。。  实在不行用英文

user: user-1
content: 今天早上不是说了嘛，估计是字符编码的问题

user: user-0
user-0 提问: 一个c编码报错

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

user: user-2
content: 结构体定义后面忘了分号  struct weapon{ int price; int atk; struct weapon *next; };
user-0 提问: 请问如何查看gtk+帮助？

回复:
user: user-1
content: 引用 10 楼 king_2007的回复:引用 8 楼 zhao4zhong1 的回复:虽然我都没实际用过，但我觉得qt比gtk+更流行。老师，感谢你用感性回答我的问题。我渴望理性的答案。 qt面向对象设计，用c++开发大型程序比较好，但商业应用不免费。gtk用c语言实现了面向对象设计，是完全免费的，功能和性能都不逊于qt。很多大公司都支持gtk。gnome，gimp，chrome等大型系统和应用都是用gtk开发的。

user: user-2
content: linux: # apt-get install devhelp libgtk-3-doc  Windows: 从官网下载对应版本的html文档压缩包（https://developer.gnome.org/gtk3/），解压后直接用浏览器打开index.html

user: user-3
content: 虽然我都没实际用过，但我觉得qt比gtk+更流行。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:虽然我都没实际用过，但我觉得qt比gtk+更流行。老师，感谢你用感性回答我的问题。我渴望理性的答案。

user: user-3
content: 引用 5 楼 king_2007 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] http://www.gtk.org/documentation.php http://www.oschina.net/p/gtk/老师，qt和gtk+，让你选择，你会选择哪个？[/quote] qt

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 5 楼 king_2007 的回复:] [quote=引用 3 楼 zhao4zhong1 的回复:] http://www.gtk.org/documentation.php http://www.oschina.net/p/gtk/老师，qt和gtk+，让你选择，你会选择哪个？[/quote] qt[/quote]why?

user: user-3
content: http://www.gtk.org/documentation.php http://www.oschina.net/p/gtk/

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:http://www.gtk.org/documentation.php http://www.oschina.net/p/gtk/老师，qt和gtk+，让你选择，你会选择哪个？

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:http://www.gtk.org/documentation.php http://www.oschina.net/p/gtk/我就是在官方网站上下载的，不知道解压后，怎么用？

user: user-3
content: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=如何查看gtk%2B帮助

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=如何查看gtk%2B帮助  看了，没有一个是具体怎么使用的，我都解压缩了，找不到一个正经文件。
user-0 提问: 帮我看看我的bug

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-2
content: 补充一句，serach_for_student里面还有点问题 printf后面打印的都应该是p[i].xx  void serach_for_student(struct student *p)    //查找学生信息// { 	int nu,i; 	printf("输入学生的学号:"); 	scanf("%d",&nu); 	for(i=0;i<N;i++) 	{ 		if(nu==p[i].num) 		{ 			printf("%s %c %d %d",p[i].nam,p[i].s,p[i].num,p[i].sc); 			return; 		} 	} 	printf("该学生不存在"); }

user: user-2
content: 有几个问题： 1.scanf的用法scanf("%s %c%d%d",stu[i].nam,&stu[i].s,&stu[i].num,&stu[i].sc); 写入字符串直接用数组名就行了，%s和%c之间弄个空格，这样可以接收读完%s以后遗留的空格 2.serach_for_student函数里应该是if(nu==p[i].num),而且应该循环完N次，还没找到才打印出该学生不存在 3.serach_for_student的printf打印数组直接用数组名就好，你这样用p->nam[100]是打印nam的第101个字符，会越界 4.seq_student的scanf同上   #include<stdio.h> #include<malloc.h> typedef int score; typedef int number; typedef  char sex; typedef char name; //extern  int N; int N = 3; struct student { 	name nam[100]; 	sex s; 	number num; 	score sc; }; void seq_student(struct student *p)  //插入函数// { 	int m,j; 	struct student *q; 	printf("请检查你输入的信息是否有遗漏。若有遗漏请输入数字'1':"); 	scanf("%d",&j);	 	if(j==1)  	{ 		printf("输入遗漏的位置\n:"); 		scanf("%d",&m); 		p=p+m-1; 		q=p; 		printf("输入遗漏的学生信息\n:"); 		scanf("%s %c%d%d",q->nam,&q->s,&q->num,&q->sc); 		while(m<N) 		{ 			++m; 			p=q; 		} 	} } void serach_for_student(struct student *p)    //查找学生信息// { 	int nu,i; 	printf("输入学生的学号:"); 	scanf("%d",&nu); 	for(i=0;i<=N;i++) 	{ 		if(nu==p[i].num) 		{ 			printf("%s %c %d %d",p->nam,p->s,p->num,p->sc); 			return; 		} 	} 	printf("该学生不存在"); } void main() { 	int i; 	struct student *stu; 	printf("请输入学生的个数\n:"); 	scanf("%d",&N);  	stu=(struct student *)malloc(sizeof(struct student)*N); 	printf("请输入学生的姓名、性别、学号及该学科成绩\n:"); 	for(i=0;i<N;i++){ 		scanf("%s %c%d%d",stu[i].nam,&stu[i].s,&stu[i].num,&stu[i].sc); 	} 	seq_student(stu); 	serach_for_student(stu); }

user: user-0

user: user-3
content: 申请内存那错了吧 你也不把错误信息贴出来
user-0 提问: strcpy

回复:
user: user-1
content: 在strcpy中增加一条语句 char*s1=s; # include <stdio.h>  void strcpy(char * s, char * t);  int main() { 	char s1[] = "nima!"; 	char s2[] = "nibaba!";  	strcpy(s1, s2);  	return 0; }  void strcpy(char * s, char * t) { 	char*s1=s; 	while (*s++ = *t++) 		;     printf("%s", s1); }

user: user-2
content: #include <stdio.h> #include <stdlib.h> void strcpy(char *s, char *t) { 	if(s == NULL || t == NULL) 	{ 		return; 	} 	char *p_ret = s; 	while(*s != '\0' && *t != '\0') 	{ 		*s++ = *t++; 	} 	printf("%s\n", p_ret); }  int main(int argc, char *argv[]) { 	char s1[] = "nima"; 	char s2[] = "nibaba!"; 	strcpy(s1, s2); 	system("pause"); 	return 0; }  1 你自己要保证s1的空间比s2的空间大 2 传进去的指针一定要做check,一般判断是否为NULL

user: user-3
content: strcmp有什么问题

user: user-4
content: 这个程序会内存溢出

user: user-5
content: 这个程序感觉很有问题呀！

user: user-6
content: 字符串最后还要补充 \0

user: user-7
content: 楼上给出了实现 注意点： 1，检查指针有效性； 2，返回目的指针des； 3，源字符串的末尾 '\0' 需要拷贝。

user: user-8
content: char * strcpy(char *dst,const char *src)    {     assert(dst != NULL && src != NULL);          char *ret = dst;  //[3]      while ((*dst++=*src++)!='\0');       return ret; }

user: user-9
content: C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\strcat.c /*** *strcat.c - contains strcat() and strcpy() * *       Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: *       Strcpy() copies one string onto another. * *       Strcat() concatenates (appends) a copy of the source string to the *       end of the destination string, returning the destination string. * *******************************************************************************/  #include <cruntime.h> #include <string.h>  #ifndef _MBSCAT #pragma function(strcat,strcpy) #endif  /* _MBSCAT */  /*** *char *strcat(dst, src) - concatenate (append) one string to another * *Purpose: *       Concatenates src onto the end of dest.  Assumes enough *       space in dest. * *Entry: *       char *dst - string to which "src" is to be appended *       const char *src - string to be appended to the end of "dst" * *Exit: *       The address of "dst" * *Exceptions: * *******************************************************************************/  char * __cdecl strcat (         char * dst,         const char * src         ) {         char * cp = dst;          while( *cp )                 cp++;                   /* find end of dst */          while( *cp++ = *src++ ) ;       /* Copy src to end of dst */          return( dst );                  /* return dst */  }   /*** *char *strcpy(dst, src) - copy one string over another * *Purpose: *       Copies the string src into the spot specified by *       dest; assumes enough room. * *Entry: *       char * dst - string over which "src" is to be copied *       const char * src - string to be copied over "dst" * *Exit: *       The address of "dst" * *Exceptions: *******************************************************************************/  char * __cdecl strcpy(char * dst, const char * src) {         char * cp = dst;          while( *cp++ = *src++ )                 ;               /* Copy src over dst */          return( dst ); }
user-0 提问: 初学者请教一个问题

回复:
user: user-1
content: 尖括号换成括号。。。

user: user-2
content: 分号的问题。。  你试用的分号是中文输入法的分号。。。所以出错了。

user: user-0
content: 哈哈哈哈，各位各位，跑起来了跑起来了哈哈哈，谢谢各位，确实是因为弄了中文的分号，必须要细心啊，下次一定要注意了  开心啊

user: user-3
content: 引用 10 楼 huahai_nb 的回复:问题解决了么，是不是用了中文的分号了？总觉得定义变量后面的分号有问题 错误里其实已经提示了，第五行最后的分号明显不对

user: user-4
content: 问题解决了么，是不是用了中文的分号了？总觉得定义变量后面的分号有问题

user: user-0
content: 引用 8 楼 qq423399099 的回复:点引用，被引用的人会有提示的 哈哈，原来如此，谢谢谢谢

user: user-3
content: 点引用，被引用的人会有提示的

user: user-0
content: 我要怎么才能对指定楼层回复啊，怎么只能单独回复啊

user: user-3
content: 引用 4 楼 sinat_34615052 的回复:谢谢啊我才刚开始学，好多东西都不懂，我是想把十进制47变成十六进制2F输出，你的这个int  main 后面怎么没有void啊？难道是我错了吗？T0T 一般来讲,void在这里可以省略，int main(void) 可以看成 int main() . main 函数另一个重要的形式 是 ： int main(int argc ,char *argv[]) ，这个形式中 argc 是给main函数参数的个数，argv[] 中的成员就是相应的参数

user: user-0
content: 谢谢你，学习了

user: user-0
content: 谢谢啊我才刚开始学，好多东西都不懂，我是想把十进制47变成十六进制2F输出，你的这个int  main 后面怎么没有void啊？难道是我错了吗？T0T

user: user-5
content: #include<stdio.h> int main() { int x = 47; printf("%x\n", x);//如果打印整数用%d return 0; }  楼主还得多敲敲代码啊，编译器也提示了哪行错误。可以多看看错误。 还有楼主是要打印16进制数据么，使用%x，如果打印整数用%d。

user: user-3
content: 双击错误应该会跳转到第二行 然后就会发现多了一个分号了

user: user-6
content: int main(void) { } )

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

回复:
user: user-1
content: 提出一个问题往往比解决这个问题还难。

user: user-2
content: 引用 2 楼 旧剑鞘的回复:3   6   9要怎么算？几个范围？ 肯定是两个啊，3和9肯定不是一组。那么两组，3与6，6与9。哈哈，我好机智

user: user-3
content: 3   6   9要怎么算？几个范围？

user: user-4
content: 做个窗口吧， 最大长度为5 ， 最小间距为1 如果不包含相等的这样足矣 每次遇到一个新数字滑动以下窗口，新数小于窗口允许最大值，加入窗口 有一个问题 1，2，3，4，5，6，7 如何处理 1，2，3，4，5，6， 8，9，10，11 如何处理