Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 冒泡排序 报错看不懂求救！

回复:
user: user-1
content: #include<stdio.h> void Bubble(int num[8]) { 	int i,j,t; 	for (i=0;i<7;i++) 	{ 		for (j=i+1;j<8;j++) 		{ 			if (num[j]<num[i]) 			{ 				t=num[j]; 				num[j]=num[i]; 				num[i]=t; 			} 		} 	} }  int Output(int num[8]) { 	int i; 	for(i=0;i<8;i++) 	{ 		printf("%d",num[i]); 	} 		printf("\n"); 		return num[i]; }  int main(void) { 	int num[8],i; 	printf("输入8个整数:\n"); 	for (i=0;i<8;i++) 		scanf("%d",&num[i]); 	Bubble(num);     Output(num); 	return 0; }

user: user-1
content: #include<stdio.h> void Bubble(int num[8]) { 	int i,j,t; 	for (i=0;i<7;i++) 	{ 		for (j=i+1;j<8;j++) 		{ 			if (num[j]<num[i]) 			{ 				t=num[j]; 				num[j]=num[i]; 				num[i]=t; 			} 		} 	} }  int Output(int num[8]) { 	int i; 	for(i=0;i<8;i++) 	{ 		printf("%d",num[i]); 	} 		printf("\n"); 		return num[i]; }  int main(void) { 	int num[8],i; 	printf("输入8个整数:\n"); 	for (i=0;i<8;i++) 		scanf("%d",&num[i]); 	Bubble(num);     Output(num); 	return 0; }

user: user-2
content: #include<stdio.h> void Bubble(int num[])/////////////////// { 	int i,j,t; 	for (i=0;i<7;i++) 	{ 		for (j=i+1;j<8;j++) 		{ 			if (num[j]<num[i]) 			{ 				t=num[j]; 				num[j]=num[i]; 				num[i]=t; 			} 		} 	} } int Output(int num[])/////////////////////////// { 	int i; 	for(i=0;i<8;i++) 	{ 		printf("%4d",num[i]);/////////要不然输出的数字会连在一起 	} 	printf("\n"); 	return num[i]; } int main() { 	int num [8],i; 	printf("输入8个整数:\n"); 	for (i=0;i<8;i++) 	{ 	 	scanf("%d",&num[i]); 	} 	Bubble(num);/////////////////////  	Output(num);//////////////////////// 	return num[i]; } 数组名可以在一定情形下看作指针，楼主可以看看///////////部分

user: user-3
content: 引用 5 楼 qq_22753521 的回复:[quote=引用 3 楼 linux_hsylar 的回复:] 是这个样子吗 void Bubble(int num[],int 8) Bubble(num); 因为指针还没有学到所以不太懂( ▼-▼ ) 你也太猛了， void Bubble(int num[],int  size) size在main函数通过函数调用穿进去的 你也可以设置默认参数值 如： void  Bubble(int num[],int size=8), 这样的话在main中可以用 bubble(num)，第二个参数有默认值也可以

user: user-4
content: 倒数第二三行修改下 Bubble(num); Output(num); 输出没问题

user: user-0
content: [quote=引用 3 楼 linux_hsylar 的回复:] 是这个样子吗 void Bubble(int num[],int 8) Bubble(num); 因为指针还没有学到所以不太懂( ▼-▼ )

user: user-0
content: 引用 3 楼 linux_hsylar 的回复:数组做形参时候，最好这样写： void Bubble/Output(int num[],int size])//size是数组的大小 还有下面的传参： Bubble(num);//把数组的首地址穿进去就OK了。     Output(num); //还有你编译结果警告的意思是： 形参 int num[8]编译器会将其作为指针int*看待，而你传进去的是num[i]是int类型。 还有一点你不知道： 数组作为形参时候会退化成指针  我自己看下吧 谢谢

user: user-3
content: 数组做形参时候，最好这样写： void Bubble/Output(int num[],int size])//size是数组的大小 还有下面的传参： Bubble(num);//把数组的首地址穿进去就OK了。     Output(num); //还有你编译结果警告的意思是： 形参 int num[8]编译器会将其作为指针int*看待，而你传进去的是num[i]是int类型。 还有一点你不知道： 数组作为形参时候会退化成指针

user: user-0
content: [quote=引用 楼主 qq_22753521 的回复:] 真正运行之后输出的只有一串莫名其妙的数字

user: user-5
content: 有什么问题吗？
user-0 提问: 递归调用

回复:
user: user-1
content: 对于编译器来数， 递归调用不难， 和非递归一样， 不过是一个函数调用而已  现代CPU有堆栈指令，所以编译器实现递归和非递归是一样的  递归的逻辑也很简单，就是函数以某种方式调用自己。  真正需要能清楚的是，你的程序逻辑，以及有没有必要使用递归

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

user: user-3
content: 递归，直接或间接的调用自身，楼主可以先看看简单的递归例子弄明白后再看稍微复杂的例子 http://blog.csdn.net/u012421456/article/details/32931999

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

user: user-5
content: 借用赵老师一句话，代码终归是自己分析出来的

user: user-6
content: 断点跟踪，一步一步走，走了几次就明白了

user: user-7
content: 自己可以把程序的cow改为2 或者3 用笔写出递归的结果 看看跟执行的结果是不是一样 不是一样的就重来 然后你就会理解了
user-0 提问: 从TYPE *creat(int n){这里开始没看懂，请教

回复:
user: user-1
content: 给一个参数n，创建n个链表结点，输入各个节点的数据num和age，组成链表，返回指向第一个节点的指针。 malloc申请节点的空间。         if(i==0)pf=head=pb ;         else pf->next=pb ;         pb->next=NULL ;         pf=pb ; 这几行处理节点上的next指针。每添加一个节点，就把现在的链表尾部节点的next指向新申请的节点，而新申请的节点的next指向NULL。

user: user-2
content: #define NULL 0 #define TYPE struct stu #define LEN sizeof (struct stu) struct stu  {     int num ;     int age ;     struct stu*next ; } ; TYPE*creat(int n) {     struct stu*head,*pf,*pb ;     int i ;     for(i=0;i<n;i++)     {         pb=(TYPE*)malloc(LEN);         printf("input Number and  Age\n");         scanf("%d%d",&pb->num,&pb->age);         if(i==0)pf=head=pb ;         else pf->next=pb ;         pb->next=NULL ;         pf=pb ;     }     return(head); }
user-0 提问: 新手求助一个文档替换问题，请大神们帮帮。。。

回复:
user: user-1
content: findstr

user: user-1
content: sed awk

user: user-0
content: 是文档太多，一个一个很麻烦，所以如果能写代码，把文档往里面一扔就搞定的话，就快的多。 并不麻烦的事，希望有好心人帮一下。。。。

user: user-2
content: 晕倒，这样的工作需要编程实现吗？ 你知道notepad++这个工具吗？ 它有搜索文件夹中所有包括目标字符的文件，并将需要的替换成需要字符的工能。  你要做的事情，随便找个工具分分钟能完成。现在是什么时候了，还写代码。
user-0 提问: 拉手网笔试题目 

回复:
user: user-1
content: 子串算吗？如果不算子串我真不明白这题目有什么意义。

user: user-2
content: 如果包含子串，算法如下：  #include <stdio.h> #include <assert.h>  int main() {     char *A[3] = {"Basc","BcDcGf","Vcgddx"};     int i;     int   index;     char  targetStr[10] = {0};     char* chp=NULL;          for (i=0;i<sizeof(A)/sizeof(char*);i++)     {         chp=A[i];         index = 0;                  while ('\0'!=*chp)         {             assert(index<sizeof(targetStr));//确保不会溢出              if (index>0)             {                 targetStr[index] = *chp;                 index++;                 if ('C'==*chp||'c'==*chp)                 {                     targetStr[index] = '\0';                     printf("%s\n",targetStr);                 }             }                          if (0==index&&('B'==*chp||'b'==*chp))             {                 targetStr[index] = *chp;                 index++;             }                          chp++;         }     }          system("PAUSE");     return 0; } 输出： Basc Bc BcDc

user: user-2
content: 如果不包括子串，代码其实只要一行就可以了，包括子串就麻烦一点了，等我想想哈  #include <stdio.h> #include <string.h>  int main() {     char *A[3]={"Basc","BcDcGf","Vcgddx"};     printf("%s",A[0]);     return 0; }

user: user-3
content: 这么简单? 题目不完整吧?

user: user-4
content: #include <stdio.h> #include <string.h> char *A[3]={"Basc","BcDcGf","Vcgddx"}; int i; int main() {     for (i=0;i<3;i++) {         if ((A[i][0]=='B'||A[i][0]=='b')         && (A[i][strlen(A[i])-1]=='c'||A[i][strlen(A[i])-1]=='c'))             printf("%s\n",A[i]);     }     return 0; }
user-0 提问: 怎么把一帧帧的视频数据写入文件，然后播放？

回复:
user: user-1
content: 1.硬件或设备获取到的数据，肯定是可以通过接口获取的，你需要使用接口获取到原始数据A 2.判断数据A的格式，如果是普通的格式，否则考虑进行解码，解码要用到解码器，这个ffmpeg是个好东西，但是很复杂，看有没有现成的可用，解码后得到的B，B是可以被系统支持的格式 3.如果A不需解码，调用系统API播放A，如果A经过解码，调用系统API播放B

user: user-2
content: 看ffmpeg库的例子代码？
user-0 提问: 关于延时问题

回复:
user: user-1
content: 同意2楼。使用全局变量作为延时变量。接到重复命令时 直接在中断处理程序里重新初始化你的延时变量 即可 实现。不过延时函数里面两次赋值200只要任意一处就可以了。

user: user-2
content: 将uint z_x 定义 成全局变量，并赋初值。 void delay(uint z_z)    //延时子程序 {  uint z_x,z_y;  for(z_x=200;z_x>0;z_x--)//去掉红色的  {    for(z_y=z_z;z_y>0;z_y--)    {      _nop_();     if(x_r==1) break;    }    if(x_r==1)    break;  }  z_x =200;//在延时完之后将将它回复到200，以便 下一次延时用。 }  这样，在计算延时的过程中，只要外部重新将z_x=200赋值，就可以使得delay重新开始延时2s,而无须停机。

user: user-3
content: 给你个思路吧： 方法1：在延时函数加个全局的reset标志，在最里层的循环不断判断标志，标志置位时，重置外层z_x为初始值200;               当外面判断需要再次延时时，将这个标志置位，延时的内层函数 方法2：用定时器来延时，需要再次延时时，重置定时器的计数就可以了，比如定时器超时一次为20ms,2秒即计数超时100次，               计数到80的时候，需要重新延时，此时重置计数为0就可以了，用定时器延时比较准
user-0 提问: 新手问一个Print Graphics Problerm ，初学，求解答。

回复:
user: user-1
content: if (a%2==0)条件成立时为偶数，你往这里面看，底下的printf(" ");就用来输出空格 而奇数走的是下面的这些语句：      else     {         for(i=1;i<=a;i++)         {             for (j=1;j<=a;j++)             {             if (j<a)                 printf("+");                       }         }     }  这里没地方输出空格，问题就在这里，补上空格吧（貌似楼上代码就是，你测试下）

user: user-2
content: #include <stdio.h> int main() { 	int a,i,j; 	scanf("%d",&a); 	if (a%2==0) 	{ 		for(i=1;i<=a;i++) 		{ 			for(j=1;j<=a+i-1;j++) 			{ 				if(j<=a-i) 				{ 					printf(" "); 				} 				else printf("+"); 			} 			printf("\n"); 		} 	} 	else 	{ 		for(i=a;i>=1;i--) 		{ 			for(j=1;j<=a+i-1;j++) 			{ 				if(j<=a-i) 				{ 					printf(" "); 				} 				else printf("+"); 			} 			printf("\n"); 		} 	}  	return 0; }
user-0 提问: 读取txt的问题

回复:
user: user-0
content: 引用 1 楼 xpdavis 的回复:你要随机读取的话，就用二进制来打开 void Read() {     FILE *file = fopen("abc.txt","rb");     fseek(file,0,SEEK_END);     long n = ftell(file);     ;//去掉最后的回车换行     char *list =new char[n+1];     rewind(file);     fread(list,sizeof(char),n,file);     list[n]='\0';     cout<<list; } 引用 2 楼 zhao4zhong1 的回复:不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  fseek是按二进制读取的，回车0d 0a会读成2个字符（回车存时就是存成0d 0a ），但是以文本形式打开时，fread将0d 0a 读成1个字符，所以会多读几个内存，出现乱码，就是这样吧

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

user: user-2
content: 你要随机读取的话，就用二进制来打开 void Read() {     FILE *file = fopen("abc.txt","rb");     fseek(file,0,SEEK_END);     long n = ftell(file);     ;//去掉最后的回车换行     char *list =new char[n+1];     rewind(file);     fread(list,sizeof(char),n,file);     list[n]='\0';     cout<<list; }
user-0 提问: 调用SSL_shutdown关闭SSL连接时pagefault

回复:
user: user-0
content: 是因为没有捕捉PIPE信号SIGPIPE。设置忽略此信号后，运行正常。signal(SIGPIPE, SIG_IGN);

user: user-1
content: Close的时候，handle创建成功了吗？

user: user-2
content: 可能需要加mutex
user-0 提问: 0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突

回复:
user: user-0
content: CSDN果然牛逼.就是万恶的验证码阻碍了他的发展

user: user-0
content: 感谢，万分感谢

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: #include<stdio.h> #include<malloc.h> struct BTNode{ 	char data; 	struct BTNode *pLchild; 	struct BTNode *pRchild; };  struct BTNode * CreateBTree(void){ 	struct BTNode * pA=(struct BTNode *)malloc(sizeof(struct BTNode)); 	struct BTNode * pB=(struct BTNode *)malloc(sizeof(struct BTNode)); 	struct BTNode * pC=(struct BTNode *)malloc(sizeof(struct BTNode)); 	struct BTNode * pD=(struct BTNode *)malloc(sizeof(struct BTNode)); 	struct BTNode * pE=(struct BTNode *)malloc(sizeof(struct BTNode)); 	pA->data='A'; 	pB->data='B'; 	pC->data='C'; 	pD->data='D'; 	pE->data='E';  	pA->pLchild=pB; 	pA->pRchild=pC; 	pB->pLchild=pB->pRchild=NULL; 	pC->pLchild=pD; 	pC->pRchild=NULL;///////////////////////// 	pD->pLchild=NULL; 	pD->pRchild=pE; 	pE->pLchild=pE->pRchild=NULL; 	return pA; }  void PreTraverseBTree(struct BTNode * pT) { 	if(pT!=NULL) { 		printf("%c ",pT->data); 		PreTraverseBTree(pT->pLchild); 	    PreTraverseBTree(pT->pRchild); 	}   } int main(void) { 	struct BTNode * pT=CreateBTree(); 	PreTraverseBTree(pT);      system("pause");  }
user-0 提问: 枚举型常量在预处理命令中的使用

回复:
user: user-1
content: 引用 4 楼 humianzhou 的回复:[quote=引用 1 楼 LINUX2012LINUX 的回复:]         编译预处理阶段处理的内容有限，我猜测问题不在于你的定义值是多少，而是在于你的判相等操作符 == 问题，根据结果分析，编译预处理阶段根本无法处理这个符号，因此编译器在该阶段可能会随机的给一个值或者指定一个值，所以也就看到了你上面的结果。这个问题我也遇到过，和你的结果相同。         另外，编译预处理严格的说不属于编译阶段的事情，而是在编译前面，它具体能做什么，我们只能凭借编译预处理命令通过程序测试，毕竟我们不知道编译预处理阶段的处理代码是如何进行具体实现的。        个人意见，仅供参考！ 我觉得在处理“==”时，预处理时可以识别的，我觉得2楼说的比较有道理，你可以参考一下，具体正确与否我得验证一下[/quote]恩，你考虑下我的疑问，我的疑问是：既然在与处理阶段看不到定义的话，那么枚举变量的符号应该也是看不到的，这不就应该在编译预处理阶段出错吗？而你的编译预处理代码： #if (2u == XENUM_NUM)应该正常通过了吧，这个怎么解释呢？

user: user-0
content: 引用 1 楼 LINUX2012LINUX 的回复:编译预处理阶段处理的内容有限，我猜测问题不在于你的定义值是多少，而是在于你的判相等操作符 == 问题，根据结果分析，编译预处理阶段根本无法处理这个符号，因此编译器在该阶段可能会随机的给一个值或者指定一个值，所以也就看到了你上面的结果。这个问题我也遇到过，和你的结果相同。         另外，编译预处理严格的说不属于编译阶段的事情，而是在编译前面，它具体能做什么，我们只能凭借编译预处理命令通过程序测试，毕竟我们不知道编译预处理阶段的处理代码是如何进行具体实现的。        个人意见，仅供参考！ 我觉得在处理“==”时，预处理时可以识别的，我觉得2楼说的比较有道理，你可以参考一下，具体正确与否我得验证一下

user: user-0
content: 引用 2 楼 user-2 的回复:既然你知道这是预处理，那么此时是看不过枚举的。 也就是说在在进行预处理的时候，根本没有如下定义？也就是说XENUM_NUM这个枚举常量压根就不存在，所以预处理阶段进行判定时XENUM_NUM是处于未定义状态，所以其值不确定？还是默认当做0？ typedef enum {     XENUM_ONE = 0u,     XENUM_TWO = 1u,     XENUM_NUM = 2u }Xenum_Type;

user: user-2
content: 既然你知道这是预处理，那么此时是看不过枚举的。

user: user-1
content: 编译预处理阶段处理的内容有限，我猜测问题不在于你的定义值是多少，而是在于你的判相等操作符 == 问题，根据结果分析，编译预处理阶段根本无法处理这个符号，因此编译器在该阶段可能会随机的给一个值或者指定一个值，所以也就看到了你上面的结果。这个问题我也遇到过，和你的结果相同。         另外，编译预处理严格的说不属于编译阶段的事情，而是在编译前面，它具体能做什么，我们只能凭借编译预处理命令通过程序测试，毕竟我们不知道编译预处理阶段的处理代码是如何进行具体实现的。        个人意见，仅供参考！
user-0 提问: 请问将指针传给函数,是不是malloc所以内存被回收?

回复:
user: user-1
content: #include <stdio.h>  //从第m个字符开始全部复制为另一个字符串. void cpy(char *s, char **d, int m) {     *d = s+m; }  int main(void) {     char *s = "hello world";     char *r = NULL;     cpy(s, &r, 5);     printf("[%s]\n", r);//[ world]     return 0; }

user: user-2
content: 跟malloc没关系，第一个用参数返回结果无效所以错误。

user: user-3
content: 调用函数改变一个指针的值，请用指向指针的指针
user-0 提问: ！！急求！！C语言中结构体链表问题(在线坐等)

回复:
user: user-0
content: 非常感谢各位大神，我已经明白了，多谢！

user: user-1
content: 如果是存的字符串就strcpy，否则用memcpy(n.a, b, sizeof(b))。 最好用memcpy，用strcpy可能会使你的程序崩掉，因为如果不是字符串strcpy就找不到\0，就会一直复制

user: user-2
content: 首先实例化一个结构体对象LNode struct node { char a[30]; struct node *next; }LNode;  一种方法为for循环可以一个一个复制。 另外一种方法就是用#include<string.h> 里面的strcpy函数。 strcpy(LNode.a,b);

user: user-3
content: struct node n; strcpy(n.a, b); 或者用strncpy、strcpy_s之类的也行
user-0 提问: 成员name是个字符型指针变量啊，咋还没分配地址空间就赋值了？

回复:
user: user-1
content: 引用 5 楼 mujiok2003 的回复: void foo(){ char* p = (char*)malloc(10); free(p); }  p的空间在栈上， 它指向的空间在队上。  队上--> 堆上

user: user-1
content: void foo(){ char* p = (char*)malloc(10); free(p); }  p的空间在栈上， 它指向的空间在队上。

user: user-2
content: 常量字符串"Zhang ping"的空间已经被编译器在常量区.rdata里面分配好了。

user: user-3
content: 这样没有问题相当于把“zhang ping” 这个字符串的地址给了name。字符跟字符串是有区别的

user: user-4
content: name分配的是指针变量的空间， 那个赋值只是把字符串地址值赋给name指针变量

user: user-5
content: 这样的赋值是可以的，但是通常用malloc后strcpy
user-0 提问: 函数的指针变量编译出现的问题

回复:
user: user-0
content: 是的，原本是想让他在switch语句输出，后来发现可以在子函数中输出，看了半天不知道错哪了……

user: user-1
content: switch(e) { case 1: {fun(a,b,max);printf("%d",max);break;} case 2: {fun(a,b,min);printf("%d",min);break;} case 3: {fun(a,b,sum);printf("%d",sum);break;}  } 感觉 switch语句里的printf语句好多余啊

user: user-0
content: 好厉害，膜拜

user: user-2
content: switch(e) 	{ 	case 1: 		{fun(a,b,max);printf("%d",max);break;} 	case 2: 		{fun(a,b,min);printf("%d",min);break;} 	case 3: 		{fun(a,b,sum);printf("%d",sum);break;}  	} printf 打印的是 如printf("%d",max)  打印的是max地址的int型 数值（保存的函数地址的32位值如果是int 4字节）
user-0 提问: 郁闷得想Die——求解：怎样才能把二维数组作为参数传进函数？

回复:
user: user-0
content: 引用 6 楼 mujiok2003 的回复:想爹(die)干啥你爹去死（Go to die, your dad）!

user: user-1
content: 用脚后跟思考一下为什么没人将整个互联网内容作为函数参数传来传去呢？

user: user-2
content: 想爹(die)干啥

user: user-3
content: 引用 3 楼 call_from_dream 的回复:[quote=引用 1 楼 zgangz 的回复:] 1.二维数组可以作用函数参数，但不能这样定义 一维可省，但二维不可省 void sort2(char arr[][222],int l); 2.                 tem=arr[i];                 arr[i]=arr[j];                 arr[j]=tem; 不能这样直接交换 为啥不能直接交换，能具体点儿吗，大侠？[/quote] 数组类型不能被赋值，作为数组名的数组指针不能被赋值，

user: user-0
content: 引用 2 楼 user-4 的回复:1. 把所谓的 [][] 或 [5][] 都改成 [][20]  2. sort2 里面的用于交换的3条语句必须改成 strcpy 或类似的东西。谢谢，大侠！

user: user-0
content: 引用 1 楼 zgangz 的回复:1.二维数组可以作用函数参数，但不能这样定义 一维可省，但二维不可省 void sort2(char arr[][222],int l); 2.                 tem=arr[i];                 arr[i]=arr[j];                 arr[j]=tem; 不能这样直接交换 为啥不能直接交换，能具体点儿吗，大侠？

user: user-4
content: 1. 把所谓的 [][] 或 [5][] 都改成 [][20]  2. sort2 里面的用于交换的3条语句必须改成 strcpy 或类似的东西。

user: user-3
content: 1.二维数组可以作用函数参数，但不能这样定义 一维可省，但二维不可省 void sort2(char arr[][222],int l); 2.                 tem=arr[i];                 arr[i]=arr[j];                 arr[j]=tem; 不能这样直接交换
user-0 提问: glib库中的链表 问题？算不算bug

回复:
user: user-1
content: 引用 2 楼 wangzuxi 的回复:g_slist_alloc函数里面应该已经把内存清零了。 多半是这样

user: user-2
content: 引用 楼主 xiaopohaibebo 的回复:红色部分 给链表赋值后没有给给slist->next赋值。应该给它赋值为null吧 g_slist_insert_before (GSList  *slist, 		       GSList  *sibling, 		       gpointer data) {   if (!slist)     {       slist = g_slist_alloc ();       slist->data = data;       g_return_val_if_fail (sibling == NULL, slist);       return slist;     }   else     {       GSList *node, *last = NULL;        for (node = slist; node; last = node, node = last->next) 	if (node == sibling) 	  break;       if (!last) 	{ 	  node = g_slist_alloc (); 	  node->data = data; 	  node->next = slist;  	  return node; 	}       else 	{ 	  node = g_slist_alloc (); 	  node->data = data; 	  node->next = last->next; 	  last->next = node;  	  return slist; 	}     } }  GSList * g_slist_concat (GSList *list1, GSList *list2) {   if (list2)     {       if (list1) 	g_slist_last (list1)->next = list2;       else 	list1 = list2;     }    return list1; }  g_slist_alloc函数里面应该已经把内存清零了。

user: user-3
content: 红色在哪里，没看到
user-0 提问: 请教个视频帧处理的问题~~先谢谢啦

回复:
user: user-1
content: 好多关于这方面的文章，搜搜YUV格式就出来啦，附图的能让你看得更明白 如：详解YUV420p数据格式  至于你说的采样不是4的倍数…不知道

user: user-0
content: 引用 6 楼 FancyMouse 的回复:看来你啥基础都没啊。连yuv420都不懂。如果帧的采样Y不是4的倍数怎么办？

user: user-0
content: 引用 6 楼 FancyMouse 的回复:看来你啥基础都没啊。连yuv420都不懂。知道不给我讲点

user: user-0
content: 引用 3 楼 max_min_ 的回复:ffmpeg？ 目的是啥？为什么把一帧数据拆开？处理解码出来的幀数据啊，首先针对frame->data[0]的数据来说，如何取出右边一半数据？求指导求方法，感谢…

user: user-2
content: 看来你啥基础都没啊。连yuv420都不懂。

user: user-0
content: 引用 3 楼 max_min_ 的回复:ffmpeg？ 目的是啥？为什么把一帧数据拆开？你要我的目的做什么？ 简单说就是处理帧数据， 解码出来的YUV格式也不是很懂， 为什么存Y的data[0]是width*height而U的data[1]和V的data[2]都是Y的1/4，它们又是如何的对应关系？

user: user-0
content: 引用 1 楼 q339659207 的回复:这你不就要用循环来做了。width*height*channel。取width/2*channel来截断咯。channel是什么？不用循环用什么处理？原本的获取每一帧的数据就是一个循环，再在里面嵌套循环是处理速度跟不上么？

user: user-3
content: ffmpeg？ 目的是啥？为什么把一帧数据拆开？

user: user-4
content: 遍历所有的，把需要的部分取出来，循环height，每个取width*channel/2~width*channel。仅供参考

user: user-5
content: 这你不就要用循环来做了。width*height*channel。取width/2*channel来截断咯。
user-0 提问: 可否使用一个字节来保存浮点数？

回复:
user: user-1
content: C语言一个字节只能存整数

user: user-2
content: 这个问题让我想起上家公司的一个逗逼同事，他是想把整数装进char里面还不损失精度，去问技术总监，总监说不行的，他拍桌子说总监技术不行。。。其实这逗逼为什么要这么搞呢，因为让他做的事情是把数据发给串口

user: user-0
content: 引用 7 楼 ForestDB 的回复:自己仿IEEE 754定个1字节的浮点数的规范， 然后自己再根据这个规范和IEEE 754的规范，写出标准浮点数和一字节浮点数的互转例程，搞定。 看来要想满足要求，只能如此了，再没有更简便的方法了

user: user-3
content: 自己仿IEEE 754定个1字节的浮点数的规范， 然后自己再根据这个规范和IEEE 754的规范，写出标准浮点数和一字节浮点数的互转例程，搞定。

user: user-4
content: 引用 2 楼 xiao88yan 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 1位符号，2位阶码，5位尾数 ？ http://bbs.csdn.net/topics/390676437 需要手动修改吗？我只是想把一个float型的值直接存到一个字节里面去[/quote] 想想就好， 不要实践，害人害己。

user: user-5
content: 一个字节才多大，你存浮点数还要考虑小数吧，这样放的就更小了..

user: user-0
content: 引用 3 楼 r_Jimy 的回复:[quote=引用 2 楼 xiao88yan 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 1位符号，2位阶码，5位尾数 ？ http://bbs.csdn.net/topics/390676437 需要手动修改吗？我只是想把一个float型的值直接存到一个字节里面去[/quote] 直接赋值，就是没尾数而已，比如：      double test=3.92;     char ch=test;  上面代码中ch存的是3[/quote] 这个精度损失有点大，呵呵

user: user-6
content: 引用 2 楼 xiao88yan 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 1位符号，2位阶码，5位尾数 ？ http://bbs.csdn.net/topics/390676437 需要手动修改吗？我只是想把一个float型的值直接存到一个字节里面去[/quote] 直接赋值，就是没尾数而已，比如：      double test=3.92;     char ch=test;  上面代码中ch存的是3

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:1位符号，2位阶码，5位尾数 ？ http://bbs.csdn.net/topics/390676437 需要手动修改吗？我只是想把一个float型的值直接存到一个字节里面去

user: user-7
content: 1位符号，2位阶码，5位尾数 ？ http://bbs.csdn.net/topics/390676437
user-0 提问: 这样的指针用法错在哪？？

回复:
user: user-1
content: 没有错，但是只是野指针或者悬浮指针，很不安全，×p是个指针变量，对指针的加减操作是不安全的

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

user: user-3
content: 这不是悬挂指针吗，推荐楼主看《C陷阱与缺陷》

user: user-4
content: *p未初始化，是野指针，指向不确定，其他没什么

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

user: user-6
content: *p-2没有赋值，也就没有修改内存上的值，是安全的，只是没有意义。

user: user-6
content: 引用 2 楼 zilin0110 的回复:那如果 我定义  int stuff[10];  int *p; p = stuff + 2;  让输出 printf ( "  % d ", * p - 2);  有错吗，错在哪？谢谢你！！！！  没有语法错误，*p相当于stuff[2]。但是stuff[10]没有初始化，*p-2的值是未知的。

user: user-7
content: % d中间怎么有空格

user: user-8
content: 操作空 指针。。未初始化

user: user-0
content: 找 syntax error， 别人问的一道题，说有syntax error，我糊涂了。。。

user: user-9
content: 引用 2 楼 zilin0110 的回复:那如果 我定义  int stuff[10];  int *p; p = stuff + 2;  让输出 printf ( "  % d ", * p - 2);  有错吗，错在哪？谢谢你！！！！ 语法OK， 功能未知。 你要干啥啊？

user: user-0
content: 那如果 我定义  int stuff[10];  int *p; p = stuff + 2;  让输出 printf ( "  % d ", * p - 2);  有错吗，错在哪？谢谢你！！！！

user: user-10
content: int stuff[10] = {0}; int *p; p = stuff[0]; printf ( "  % d ", * p - 2);

user: user-11
content: 指针未初始化 你这样写代码是很危险的 这时的指针里是个garbage value 如果这个garbage value 刚好指向内存中 且该内存有重要数据 后面的 p*-2 就更改了内存的内容

user: user-5
content: 声明时的前缀*（表示后面是一个指针变量） 和 运行时的*（表示取后面指针所指的内容） 不是一回事！

user: user-12
content: 引用 6 楼 zilin0110 的回复:[quote=引用 5 楼 r_Jimy 的回复:] 指针未初始化，它的值没有定义，如果访问到不能读的区域，会报错，即使读到了也没意义  如果我让 p= stuff + 2,   这样还会有问题吗？什么问题呢？谢谢你[/quote] 初始化后就没问题了

user: user-0
content: 引用 5 楼 r_Jimy 的回复:指针未初始化，它的值没有定义，如果访问到不能读的区域，会报错，即使读到了也没意义  如果我让 p= stuff + 2,   这样还会有问题吗？什么问题呢？谢谢你

user: user-12
content: 指针未初始化，它的值没有定义，如果访问到不能读的区域，会报错，即使读到了也没意义
user-0 提问: 请教哈希函数双散列是如何计算的？

回复:
user: user-1
content: 双散列函数为h(k,i)=(k mod 11 + i(1+k mod 9)) mod 11，其实就是 h(k,i) = (k % 11 + i * ( 1 + k % 9 )) % 11， 把k和i带进去就可以算出来了，i表示计算hash的次数，如果算出来的h已经被占用就说明hash冲突，需要再次计算hash，i就加1，直到算出来的hash没有冲突为止
user-0 提问: 新人想学网络编程，求大神捎上道

回复:
user: user-1
content: 学习使用抓包软件比如wireshark  不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-2
content: 先研究一下linux方面的吧

user: user-3
content: 入门的话，可以看《Linux程序设计》的第3章和15章。 接着看《UNIX环境高级编程》和《UNIX网络编程》，把基础打扎实。 然后呢，可以看一下Libevent、muduo这些网络库
user-0 提问: 应用程序错误问题

回复:
user: user-1
content: 内存访问越界。指定的地址0xccccccc不允许你读取，但是你的指令00x404a3尝试读取该地址上存储的数据。 通常是由于使用指针不当造成的。

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-3
content: 百分之99是空指针或者野指针引起的。

user: user-4
content: 未分配内存。

user: user-5
content: 基本上是你使用了未初始化的指针
user-0 提问: 华为面试题一道

回复:
user: user-1
content: 引用 3 楼 wanguser-2 的回复:[quote=引用 2 楼 smartjeckk 的回复:]  1、最好不要添加删除语句 ============================ 没添加删除语句啊，只是把第34、35行修改成下面这两句而已啊  first_file = first_file ? first_file : file; last_file = last_file ? (last_file->pnext = file) : file; [/quote] 最后面一句不对，假如last_file不为NULL，那么last_file = (last_file->pnext=file)，也就是last_file = last_file->next = file，这肯定不对

user: user-2
content: 引用 4 楼 s_a_n_ 的回复:[quote=引用 3 楼 wanguser-2 的回复:] [quote=引用 2 楼 smartjeckk 的回复:]  1、最好不要添加删除语句 ============================ 没添加删除语句啊，只是把第34、35行修改成下面这两句而已啊  first_file = first_file ? first_file : file; last_file = last_file ? (last_file->pnext = file) : file; [/quote] 最后面一句不对，假如last_file不为NULL，那么last_file = (last_file->pnext=file)，也就是last_file = last_file->next = file，这肯定不对[/quote] 你再想想

user: user-2
content: first_file = first_file ? first_file : file; last_file = last_file ? (last_file->pnext = file) : file;  这个还不对？

user: user-2
content: 引用 2 楼 smartjeckk 的回复:1、最好不要添加删除语句 ============================ 没添加删除语句啊，只是把第34、35行修改成下面这两句而已啊  first_file = first_file ? first_file : file; last_file = last_file ? (last_file->pnext = file) : file;

user: user-0
content: 1、最好不要添加删除语句 ============================
user-0 提问: 关于C语言浮点数快速计算

回复:
user: user-1
content: 引用 11 楼 shinerise 的回复:引用 10 楼 DelphiGuy 的回复:可以参考：http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Bcffigdj.html我用的是cotex m3，不带vfp。sigh。。。  VFP没有，NEON也没有，那你就别搞什么优化了，用语言本身实现的浮点仿真库就行了。

user: user-0
content: 引用 10 楼 DelphiGuy 的回复:可以参考：http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Bcffigdj.html我用的是cotex m3，不带vfp。sigh。。。

user: user-1
content: 可以参考：http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Bcffigdj.html

user: user-1
content: 引用 6 楼 shinerise 的回复:[quote=引用 5 楼 DelphiGuy 的回复:] 这种简单运算,你直接f = f1 + f2;就可以了，非要写的话：  float f_add(float f1, float f2) {   __asm{     fld dword ptr f2     fadd dword ptr f1   } }  也可以用SSE指令movss、addss，但是在32位代码中这样做有些得不偿失，计算结果还要压入FPU栈。多谢。我是ARM平台，不支持浮点指令。[/quote]  新一些的ARM也支持浮点（VFP）和SIMD（NEON）指令，你的不会是ARM v6架构吧。

user: user-2
content: 《算法心得——高效算法的奥秘》

user: user-3
content: 我也不知道但是之前遇到过浮点数计算是把一个浮点数拆分成两部分 一部分是小数部  一部分是整数部 进行计算的

user: user-0
content: 引用 7 楼 jerry_dqh 的回复:[quote=引用 6 楼 shinerise 的回复:] [quote=引用 5 楼 DelphiGuy 的回复:] 这种简单运算,你直接f = f1 + f2;就可以了，非要写的话：  float f_add(float f1, float f2) {   __asm{     fld dword ptr f2     fadd dword ptr f1   } }  也可以用SSE指令movss、addss，但是在32位代码中这样做有些得不偿失，计算结果还要压入FPU栈。多谢。我是ARM平台，不支持浮点指令。[/quote] arm构架不是很了解，如果cpu没有特别的加速指令，我估计性能都是差不多了[/quote]看到说用Q格式快速计算，自己写了个example，结果计算总是错误，搞不懂啊。

user: user-4
content: 引用 6 楼 shinerise 的回复:[quote=引用 5 楼 DelphiGuy 的回复:] 这种简单运算,你直接f = f1 + f2;就可以了，非要写的话：  float f_add(float f1, float f2) {   __asm{     fld dword ptr f2     fadd dword ptr f1   } }  也可以用SSE指令movss、addss，但是在32位代码中这样做有些得不偿失，计算结果还要压入FPU栈。多谢。我是ARM平台，不支持浮点指令。[/quote] arm构架不是很了解，如果cpu没有特别的加速指令，我估计性能都是差不多了

user: user-0
content: 引用 5 楼 DelphiGuy 的回复:这种简单运算,你直接f = f1 + f2;就可以了，非要写的话：  float f_add(float f1, float f2) {   __asm{     fld dword ptr f2     fadd dword ptr f1   } }  也可以用SSE指令movss、addss，但是在32位代码中这样做有些得不偿失，计算结果还要压入FPU栈。多谢。我是ARM平台，不支持浮点指令。

user: user-1
content: 这种简单运算,你直接f = f1 + f2;就可以了，非要写的话：  float f_add(float f1, float f2) {   __asm{     fld dword ptr f2     fadd dword ptr f1   } }  也可以用SSE指令movss、addss，但是在32位代码中这样做有些得不偿失，计算结果还要压入FPU栈。

user: user-4
content: 帮顶一下，一直也没有怎么用过浮点数，也想了解一下。快速算法是基于什么原理呢？
user-0 提问: 怎么在O（1）的时间复杂度下找到数组的最大值？

回复:
user: user-1
content: 这是CRCI里面讲到的一道题。  参考     最小换成最大，一样的效果。

user: user-2
content: 引用 11 楼 mymtom 的回复:原理上不行吧，需要有序的才行啊++

user: user-3
content: 空间换取时间

user: user-0
content: 引用 11 楼 mymtom 的回复:原理上不行吧，需要有序的才行啊 5楼的想法不错

user: user-0
content: 引用 5 楼 user-11 的回复:保存(data_,max_)这样一对的数据。 比如，入栈1 4 2 5 3 实际上保存的是(1,1), (4,4), (2,4), (5,5), (3,5) 这应该是个不错的办法！

user: user-4
content: 引用 5 楼 user-11 的回复:保存(data_,max_)这样一对的数据。 比如，入栈1 4 2 5 3 实际上保存的是(1,1), (4,4), (2,4), (5,5), (3,5) 靠谱

user: user-5
content: 引用 5 楼 user-11 的回复:保存(data_,max_)这样一对的数据。 比如，入栈1 4 2 5 3 实际上保存的是(1,1), (4,4), (2,4), (5,5), (3,5) 正解，如果只用一个栈，最大值可用数组来存，还得保存数组当前索引 如果不用数组，只用一个值保存，每次出入栈都要对所有元素重新计算最大值

user: user-4
content: 引用 9 楼 zhouqinghe24 的回复:[quote=引用 8 楼 mujiok2003 的回复:] [quote=引用 7 楼 zhouqinghe24 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] [quote=引用 2 楼 zhouqinghe24 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] 每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。[/quote] 每次更新栈包括入栈和出站。[/quote]  出栈遍历一遍就是O(n)了 不是O(1)[/quote] 要求的不是出站吧， 是max?[/quote]   这样的话  可以先都pop 出来，求到max 再push进去，保存max的值，用max 函数来返回这个值。也算O(1)？[/quote] 显然不算， 你对max使用提出额外的要求，max的复杂度是O(n)

user: user-6
content: 进栈的时候就用最小堆？-。-

user: user-7
content: 原理上不行吧，需要有序的才行啊

user: user-8
content: 5楼不错。。。

user: user-9
content: 栈的底层实现用大顶堆，这样堆顶元素就是最大值

user: user-10
content: 引用 8 楼 mujiok2003 的回复:[quote=引用 7 楼 zhouqinghe24 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] [quote=引用 2 楼 zhouqinghe24 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] 每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。[/quote] 每次更新栈包括入栈和出站。[/quote]  出栈遍历一遍就是O(n)了 不是O(1)[/quote] 要求的不是出站吧， 是max?[/quote]   这样的话  可以先都pop 出来，求到max 再push进去，保存max的值，用max 函数来返回这个值。也算O(1)？

user: user-4
content: 引用 7 楼 zhouqinghe24 的回复:[quote=引用 3 楼 mujiok2003 的回复:] [quote=引用 2 楼 zhouqinghe24 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] 每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。[/quote] 每次更新栈包括入栈和出站。[/quote]  出栈遍历一遍就是O(n)了 不是O(1)[/quote] 要求的不是出站吧， 是max?

user: user-10
content: 引用 3 楼 mujiok2003 的回复:[quote=引用 2 楼 zhouqinghe24 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] 每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。[/quote] 每次更新栈包括入栈和出站。[/quote]  出栈遍历一遍就是O(n)了 不是O(1)

user: user-10
content: http://blog.csdn.net/zhouqinghe24/article/details/40558195

user: user-11
content: 保存(data_,max_)这样一对的数据。 比如，入栈1 4 2 5 3 实际上保存的是(1,1), (4,4), (2,4), (5,5), (3,5)

user: user-11
content: 引用 3 楼 mujiok2003 的回复:[quote=引用 2 楼 zhouqinghe24 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] 每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。[/quote] 每次更新栈包括入栈和出站。[/quote] 出栈的时候更新，需要把整个栈重新扫一遍，效率不太高。 空间换时间，把每次入栈的max_历史记录保存下来，这样出栈更新就很快了。

user: user-4
content: 引用 2 楼 zhouqinghe24 的回复:[quote=引用 1 楼 mujiok2003 的回复:] 每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。[/quote] 每次更新栈包括入栈和出站。

user: user-10
content: 引用 1 楼 mujiok2003 的回复:每次更行栈的时候，更新成员max_, 而max函数直接返回成员max_   你这个不行。 出栈后 就不能确定是否为最大值了，这个需要借助双栈。
user-0 提问: 请教一个结构体的问题

回复:
user: user-1
content: 定义学生数目 #define INF (30)  定义学生结构体： typedef struct _stu {     unsigned o;//年龄     unsigned w;//体重     unsigned t;//身高 }stu;  定义班级结构体： typedef struct _cls {     stu st[INF];//学生     int w,h;//行列数 }cls;  初始化的话，如果想单独赋值就这么做： void init(cls& c) {     for ( int i = 0; i < INF; i++)     {         memset(&c.st[i], 0, sizeof(stu));     }      c.w = c.h = 1;     return; }  如果要是都赋值成0的话，就这么做就行了： cls c; memset(c, 0, sizeof(cls));

user: user-2
content: 引用 4 楼 csdn324t9 的回复:[quote=引用 3 楼 xihu1364 的回复:]  const int FILEPATH_MAX_LEN = 256; 表示看不懂，能有简单点儿的不[/quote]  怎么会看不懂呢？ 你是C选手还是C++选手？  如果是C选手，就不知道构造函数了  那这样  const int INF = 3; //定义一个变量 跟 #define INF 3 是一样的  typedef struct CLS  {     int *stu[INF];     int w,h; }cls,*Pcls;   //这里的*Pcls   就是跟cls一样 这里只是指针类型  //初始化的时候 void main() {     cls a;     a.stu[0] = NULL;     a.stu[1] = NULL;     a.stu[2] = NULL;     a.h = 0;     a.w = 0; //这里就是初始化      //也可以一步到位     //memset(&a,0,sizeof(cls)); }

user: user-0
content: 引用 1 楼 user-3 的回复:得先定义一个该结构体类型的变量已经定义好了啊，我那样的不行么？  然后再实现 （总共有四列的话，原本是顺序1，2，3，4）改成1，3，2，4的座位顺序

user: user-0
content: 引用 3 楼 xihu1364 的回复: const int FILEPATH_MAX_LEN = 256; 表示看不懂，能有简单点儿的不

user: user-2
content: const int FILEPATH_MAX_LEN = 256;

user: user-2
content: 请参考...  typedef struct MODIFYFILE_REQ { 	char szFilePath[FILEPATH_MAX_LEN]; 	char szFileName[FILEPATH_MAX_LEN]; 	char szNewFileName[FILEPATH_MAX_LEN];  	MODIFYFILE_REQ() 	{ 		memset(this,0x00,sizeof(MODIFYFILE_REQ)); 	} }ModifyFile_Req,*PModifyFile_Req;  typedef struct MODIFYFILE_RESP { 	unsigned int nResult;  	MODIFYFILE_RESP() 	{ 		memset(this,0x00,sizeof(MODIFYFILE_RESP)); 	} }ModifyFile_Resp,*PModifyFile_Resp;

user: user-3
content: 得先定义一个该结构体类型的变量
user-0 提问: c中如何用一个for循环求最小数

回复:
user: user-0
content: 基础不太好，多多包涵

user: user-1
content: 晕死，这和求最大数一个样，只是把大于改成小于。

user: user-0
content: 谢谢各位大神，你们的解答很好，我不会求最小的，可能因为数组与循环那里学的不太好，回去会好好研究的

user: user-2
content: /*************************************************************************     > File Name: min.cpp     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年10月29日 星期三 20时02分45秒  ************************************************************************/  #include<iostream> #include<random> #include<vector> using namespace std;  int main() { 	vector<unsigned> v; 	int tmp; 	uniform_int_distribution<unsigned> u(2,99); 	default_random_engine e; 	for(size_t i =0; i < 20; ++i) 	{ 		tmp = u(e); 		v.push_back(tmp); 	} 	//下面代码求最小值 	int min; 	min = *v.begin(); 	for(auto a : v) 	{ 		cout << a << ' '; 		if(a < min) 			min = a; 	} 	cout<< endl;  	cout << "The min is : "<< min << endl;  	return 0; }

user: user-3
content: 引用 1 楼 Deng_W_W 的回复: int get_minimum(int a[],int length) {     int minimum = a[0];     for(int i = 1; i < length; i ++)     {         if(minimum <= a[i])         {            minimum = a[i];         }     }     return minimum; }  不好意思，写错了  if(minimum >= a[i])         {            minimum = a[i];         }

user: user-4
content: 都会求最大数了， 还不会求最小数？

user: user-3
content: int get_minimum(int a[],int length) {     int minimum = a[0];     for(int i = 1; i < length; i ++)     {         if(minimum <= a[i])         {            minimum = a[i];         }     }     return minimum; }
user-0 提问: 钩子如何屏蔽win键和菜单键的释放消息？

回复:
user: user-1
content: 是否要用到全局钩子，dll 形式。

user: user-2
content: 楼主应该去改键盘驱动。

user: user-0
content: 是这样的：我在编写一个汉字输入法软件。汉字输入法软件，可以只针对某个窗口的。 如果你默认的汉字输入法是搜狗拼音输入法，那么你在某个记事本窗口中选择了五笔字型输入法的时候并不意味着其它窗口也选改成了五笔字型输入法，而仍然是默认的搜狗拼音输入法，你刚才选择的输入法改变仅在你刚才改变的那个窗口中有效，你如果要其它的窗口也改变，你就给一个一个去改。如果你安装了12个输入法，你可以为你的12个窗口各选一个不同的输入法。 底层键盘钩子也能这样吗？如果不能，那我就没有必要用底层钩子了，自然也就不用去钻研了。

user: user-0
content: 看来上面的问题很难没人能答出。现在把问题改一下：  底层键盘钩子，是不是总是全局的？ 就是说，针对所有应用程序的？ 讲的更具体一些：是不是说，我一旦用底层键盘钩子把A改为B，那么所有的窗口，例如记事本、world、浏览器、股票交易软件、电子游戏等等，打A都出来B？能不能只针对notepad.exe的某个窗口而其他窗口不改？

user: user-3
content: LRESULT CALLBACK KeyboardCtl(int nCode, WPARAM wParam, LPARAM lParam) { 	if (nCode == HC_ACTION) 	{ 		if ((GetAsyncKeyState(VK_RWIN) & 0x8000) || (GetAsyncKeyState(VK_RCONTROL) & 0x8000) 		    || (GetAsyncKeyState(VK_RMENU ) & 0x8000) ||  (GetAsyncKeyState(VK_RALT ) & 0x8000)) 		{ 			return TRUE; 		} 	}  	return CallNextHookEx(hHook, nCode, wParam, lParam); }

user: user-2
content: 因为处理win键和菜单键的程序逻辑不在HookAPI能控制的范围内？
user-0 提问: 求助。 ATM机的代码

回复:
user: user-1
content: 另外，楼主应该用数据库的

user: user-1
content: 追求效率，空间足够的话，另外建立一个文件来存吧，遇到要删除的跳过 空间有限的话，只能用fseek来回定位慢慢移了，就是定位到要删除的行首后，用下一行的字符填充，结束加EOF
user-0 提问: char 转 int 的一个问题 char = -1 的问题

回复:
user: user-1
content: 我昨天晚上读书看到了类似的问题，int arry[] = {23, 34, 12, 17, 204, 99, 16};  #define TOTAL_ELEMENTS (sizeof(arry) / sizeof(arry[0]))  int main() { int d = -1; /* ...   */   if(d < = TOTAL_ELEMENTS -2) x = arry[d+1];  } 这里if表达式的值却不是真的，因为sizeof()的返回值是 unsigned int ，d的只是signed int，导致d 被转换成一个很大的正整数。楼主的和这个也差不多

user: user-2
content: 引用 10 楼 mujiok2003 的回复:char a = -1;  int b = (signed char)a; // -1 int c = (unsigned char)a; //1   int c = (unsigned char)a; //255

user: user-2
content: char a = -1;  int b = (signed char)a; // -1 int c = (unsigned char)a; //1

user: user-3
content: whether a ``plain'' char is treated as signed is implementation-defined.

user: user-4
content: 要解决移植问题，你可以直接用 signed char 或 unsigned char  用char的话，可以赋值给int时，加个到signed char或 unsigned char 的类型转换。

user: user-5
content: 跟补码有关系，char里面的二进制换算成十进制是255， 你这种情况应该是在IOS里面转换的时候，在前面填充的都是1， 在android中应该填充的都是0.所以显示数字不同。

user: user-6
content: 移植的時候是不是標頭檔要定義先

user: user-7
content: 应该是有一个char被当作unsigned char 了。  在ios下面用这个代码：  ios下 unsigned char a = -1; int b = a; 这里的b = 255

user: user-8
content: 引用 3 楼 qq_22545711 的回复:跟补码有关系，char里面的二进制换算成十进制是255， 你这种情况应该是在IOS里面转换的时候，在前面填充的都是1， 在android中应该填充的都是0.所以显示数字不同。+1

user: user-9
content: 显式类型转换

user: user-10
content: 直接指明是signed char还算unsigned char  另外，避免不同类型的初始化或赋值操作。

user: user-11
content: 应尽量避免不同类型互相赋值，一般情况下： 如果 char b=-5; int    a=(unsigned char)b; a的值为251 而int    a=(signed char)b; a的值为-5; 如果以上办法行不通，那么可用如下方法  	int a = 0xff; 	char b = -5; 	 	if (b<0) 	{ 		a=-1; 		a&=b; 	} 	else 	{ 		a=0; 		a&=b; 	}
user-0 提问: C语言初学者 斐波那契数列求和

回复:
user: user-1
content: 楼上的代码看起来是递归，其实不是，不过他体现了递归的思想，运行起来应该比递归快

user: user-1
content: 我以前写的 /*************************************************************************     > File Name: fb.cpp     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年10月17日 星期五 18时00分28秒  ************************************************************************/ #include<vector> #include<iostream> using namespace std; int main() { 	long fib(int,vector<int>&); 	vector<int> v1; 	for(int i=0;i<=60;i++) 	{ 		v1.push_back(fib(i,v1)); 	} 	for(auto s:v1) 		cout<< s <<endl; 	return 0; } long fib(int n,vector<int> &v) { 	if(n==0 || n==1) 		return 1; 	else 		return v[n-2] + v[n-1]; }

user: user-2
content: #include <stdio.h>  int fib(int i) {     if (i == 0 || i == 1) {         return i;     } else {         return fib(i - 1) + fib(i - 2);     } }  int main(int argc, char *argv[]) {     int i, n;      n = 30;     for (i = 0; i < n; ++i) {         printf("F(%d)=%d\n", i, fib(i));      }      return 0; }

user: user-3
content: #include<iostream> #include<stdio.h> using namespace std; int f(int i) { 	if(i==1||i==2) 		return 1; 	else 		return f(i-1)+f(i-2); } int main() { 	int i; 	for(i=1;i<=20;i++) 	{ 		printf("%8d",f(i)); 		if(i%5==0) 			printf("\n"); 	} 	return 0; }

user: user-4
content: 引用 楼主 yangqcjason 的回复:想用递归，但是学长说我用的不伦不类，不知道最普通的递归怎么做，求解答。   你这不是递归的问题吧，感觉你需要好好补补的是C语言的基础。

user: user-5
content: //1 1 2 3 5 8 13 21 34 55 89  1   1                                              2    1+1                                       3    (1+1)+2                                        4     (1+1+2)+3 5     (1+1+2+3)+5 6     (1+1+2+3+5)+8  fun(1)==1 fun(2)==fun(1)+1 fun(3)==fun(2)+2 fun(4)==fun(3)+3 fun(5)==fun(4)+5 fun(6)==fun(5)+8  sumfun(0)==0 sumfun(1)==sumfun(0)+1 sumfun(2)==sumfun(1)+1 sumfun(3)==sumfun(2)+2 sumfun(4)==sumfun(3)+3 sumfun(5)==sumfun(4)+5 sumfun(6)==sumfun(5)+8 可以看到，sumfun求和递归时，应是前一个求和值加一个斐波那契数列，数列生成用如下递归 fiber(1)==1 fiber(2)==1 fiber(3)==fiber(1)+fiber(2) fiber(4)==fiber(2)+fiber(3) fiber(5)==fiber(3)+fiber(4) 即fiber(1)=1,fiber(2)=1,n>2则fiber(n)=fiber(n-1)+fiber(n-2) 因此，sumfun的递归表述为:sumfun(0)=0,n>0则sumfun(n)==sumfun(n-1)+fiber(n) 原理如下，代码你自己来，祝你成功
user-0 提问: 美国大学c语言题 高手进 在线等

回复:
user: user-1
content: (*(long *)(&x+3))^=(*(long *)(&x+7))^((*(long *)(&x+7))^=(*(long *)(&x+3))^(*(long *)(&x+7)));

user: user-1
content: 引用 2 楼 user-2 的回复:[quote=引用 1 楼 wangzuxi 的回复:]  (*(long *)(&x+3))^=(*(long *)(&x+7))^((*(long *)(&x+7))^=(*(long *)(&x+3))^(*(long *)(&x+7)));  原理是很简单，就是栈区里保存的a()地址和b()地址调换一下。但是具体编译器不一样，a函数地址可以通过x地址来确定，保存b函数地址的栈地址就不好确定了，还是要看具体编译器，楼上的只能在gcc下正确通过，vc下会不正确。[/quote] 嗯，我只在gcc下测了，vc可能不对，原理比较简单，就是把a()调用b后返回的eip和b()调用c后返回的eip调换了一下；抛砖引玉，我也想看看有没有其他方法。

user: user-2
content: 引用 1 楼 wangzuxi 的回复: (*(long *)(&x+3))^=(*(long *)(&x+7))^((*(long *)(&x+7))^=(*(long *)(&x+3))^(*(long *)(&x+7)));  原理是很简单，就是栈区里保存的a()地址和b()地址调换一下。但是具体编译器不一样，a函数地址可以通过x地址来确定，保存b函数地址的栈地址就不好确定了，还是要看具体编译器，楼上的只能在gcc下正确通过，vc下会不正确。
user-0 提问: 求助，不知道为什么char[]不能通过%s输出。可能是指针问题？

回复:
user: user-1
content: i...........

user: user-2
content: printf("temp->name = %s\n",i, temp->name)中缺少了一个控制符哈

user: user-3
content: printf("temp->name = %s\n",i, temp->name);//********************for testing 少了 i 对应的输出格式，变成成%s和i对应了所以乱码

user: user-4
content: printf("temp->name = %s\n",i, temp->name);  楼上的确实说对了，为什么人的代码还有个i在里面？是copy进没有改好吧

user: user-5
content: 没看懂。。。
user-0 提问: opencv2.1 + vs2010 编译的问题！

回复:
user: user-1
content: 看最后问题表述，貌似你的TBB版本与你的操作系统不匹配，你看下是否可以下载到支持你当前 操作系统的的TBB或者有没有兼容方式可以运行
user-0 提问: linux下C+gtk编程调用数据库问题

回复:
user: user-0
content: 第一个问题无意中解决了，但是想知道一下原因？

user: user-1
content: sprintf(query,"select * from info where rec like '%c%s%c'",'%',gtk_entry_get_text(GTK_ENTRY(Sentry)),'%'); 也行

user: user-2
content: 引用 1 楼 lklshr 的回复:第一个问题无意中解决了，但是想知道一下原因？  晕倒，这是%转义符的用法。要输入%,就要用两个%
user-0 提问: VC编程如何把十六进制数转换为点分法表示的IP地址？

回复:
user: user-1
content: typedef unsigned char BYTE; BYTEstr[20] = {0}; sprintf(str,"%u.%u.%u.%u",(BYTE)IP[0],(BYTE)IP[1],(BYTE)IP[2],(BYTE)IP[3]);

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。
user-0 提问: 无符号数小的减去大的应该怎么算？

回复:
user: user-1
content: 这个数据会比较大 小的减去大的 这个是补码的问题

user: user-2
content: 这和是计算机组成原理的知识啊 /*************************************************************************     > File Name: unsigned.c     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年11月02日 星期日 10时28分51秒  ************************************************************************/  #include<stdio.h> int main() { 	unsigned a =1; 	unsigned b =2; 	printf("%u\n",a-b); 	printf("%d\n",a-b); 	return 0; }

user: user-2
content: 不停的借位啊，结果还是无符号数

user: user-3
content: 得到一个如下所示的结果： #include <stdio.h>  int main() { 	unsigned int i,j,k; 	 	i = 3; 	j = 7; 	k = i - j; 	 	printf("%#x - %#x = %#x",i,j,k);//0x3 - 0x7 = 0xfffffffc 	return 0; } 0xfffffffc用带符号整数的意义来解释是-4，用无符号数的意义来解释是一个很大的数字4294967292

user: user-4
content: 《组成原理》

user: user-5
content: 微机原理：加法器

user: user-6
content: 减法运算其实就是小数加上大数的补码，然后最高位不解释为符号位，就得到结果。 #include<stdio.h> int main(){    unsigned int x=1,y=2,z;    z=x-y;    printf("%u\n",z);  //4294967295    z=-1;    printf("%u\n",z);  //4294967295    return 0; }

user: user-7
content: unsigned int a=1,b=2; a-b=2^32-(b-a);
user-0 提问: 0x54AF00B4 (msvcr110d.dll) (作业3.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x00000000 时发生

回复:
user: user-1
content: scanf_s("%d",&(a->i)); 注意，要把输入的东西放到一个地址里 a->i是一个数，对应的地址通常是不能访问的

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 求教大神关于错误检测编码算法的c语言实现

回复:
user: user-1
content: http://wenku.baidu.com/link?url=NtGhU-Jq0lt5zT7Cf3T68L6wZoty9kkeu4qVuQwAGrmcc9-oTjO-b7AhrsB9ISuURT3TSbP8lZnx_Kc77h1ctJmd1iNV_WqP21yMFftQKQ7

user: user-2
content: 奇偶校验，1位错可发现，2位错不可发现（奇数个错可发现，偶数个错不可发现） CRC校验，奇数或偶数个错均能发现
user-0 提问: 响应头回馈信息  最后怎么还有几个数字字母～～～～～～

回复:
user: user-1
content: 下面应该是相应头的内容吧

user: user-2
content: 引用 2 楼 rui___ 的回复:rver: squid/3.4.1 Date: Mon, 27 Oct 2014 12:00:40 GMT Content-Type: text/html; charset=GB2312 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Expires: Mon, 27 Oct 2014 12:01:40 GMT Cache-Control: max-age=60 Vary: Accept-Encoding X-Cache: MISS from shanghai.qq.com  3ecc <!doctype html>  <html>  <head>   <meta charset="gb2312"> 这响应头 3ecc  啥个意思      想截除包头  只留下下面的文本的   谁知道还有个3ecc Transfer-Encoding: chunked这行已经很明显了，是chunked编码，3ecc是十六进制的chunked长度

user: user-3
content: 不知道。。。。

user: user-0
content: rver: squid/3.4.1 Date: Mon, 27 Oct 2014 12:00:40 GMT Content-Type: text/html; charset=GB2312 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Expires: Mon, 27 Oct 2014 12:01:40 GMT Cache-Control: max-age=60 Vary: Accept-Encoding X-Cache: MISS from shanghai.qq.com  3ecc <!doctype html>  <html>  <head>   <meta charset="gb2312"> 这响应头 3ecc  啥个意思      想截除包头  只留下下面的文本的   谁知道还有个3ecc

user: user-0
content: 引用 楼主 rui___ 的回复:TTP/1.1 200 OK Server: squid/3.4.1 Date: Mon, 27 Oct 2014 11:24:31 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Expires: Mon, 27 Oct 2014 11:39:31 GMT Cache-Control: max-age=900 X-Cache: MISS from shanghai.qq.com 3f32   人呢   顶 人工顶     3f32   到底是啥呀
user-0 提问: free()出错

回复:
user: user-1
content: 引用 2 楼 lovesmiles 的回复:并不是将hello copy给p所指的内存，而是改变了p的值 这句是重点，楼主对指针不太熟悉，可以去看一些相关的资料

user: user-2
content: int x = 3, y = 6; char *p = NULL; p = (char*)malloc(25); p = "hello";//这一句，并不是将hello copy给p所指的内存，而是改变了p的值，free 自然出错了。 cout << p << f(); free(p); cout << "abc" << f();  改成下面的代码  int x = 3, y = 6; char *p = NULL; p = (char*)malloc(25); strcpy(p,"hello"); cout << p << f(); free(p); cout << "abc" << f(); getchar();

user: user-3
content: p = "hello";  strcpy_s(p, 25, "hello");
user-0 提问: 键盘钩子截获消息时如何得知是哪个窗口的消息？

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:FindWindow FindWindowEx 这个方法更难吧？我查到原型是： 函数原型 HWND FindWindowEx(     HWND hwndParent, // handle to parent window [父窗体句柄]     HWND hwndChildAfter, // handle to child window [子窗体句柄]     LPCTSTR lpszClass, // class name [窗体类名]     LPCTSTR lpszWindow // window name [窗体名] ); 这参数我哪知道？

user: user-1
content: GetWindowThreadProcessId The GetWindowThreadProcessId function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window.   DWORD GetWindowThreadProcessId(   HWND hWnd,             // handle to window   LPDWORD lpdwProcessId  // address of variable for process identifier );   Parameters hWnd  Handle to the window.  lpdwProcessId  Pointer to a 32-bit value that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the 32-bit value; otherwise, it does not.  Return Values The return value is the identifier of the thread that created the window.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Windows Overview, Window Functions    CreateToolhelp32Snapshot   Process32First   Process32Next  CloseHandle

user: user-1
content: 引用 3 楼 tm1mc2 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] FindWindow FindWindowEx 这个方法更难吧？我查到原型是： 函数原型 HWND FindWindowEx(     HWND hwndParent, // handle to parent window [父窗体句柄]     HWND hwndChildAfter, // handle to child window [子窗体句柄]     LPCTSTR lpszClass, // class name [窗体类名]     LPCTSTR lpszWindow // window name [窗体名] ); 这参数我哪知道？[/quote] 先FindWindow，用其返回的值作为FindWindowEx的参数。 GetForegroundWindow The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working). The system assigns a slightly higher priority to the thread that creates the foreground window than it does to other threads.   HWND GetForegroundWindow(VOID)   Parameters This function has no parameters.   Return Values The return value is a handle to the foreground window.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Windows Overview, Window Functions, SetForegroundWindow

user: user-1
content: FindWindow FindWindowEx

user: user-0
content: 我知道了：只要把wParam和lParam修改之后， return CallNextHookEx(hHook,nCode,wParam,lParam); 就可以了 但是问题不那么简单。 因为我编的钩子需要调用一些系统函数，这些系统函数的参数中有窗口句柄。我真不知道该如何是好。
user-0 提问: C语言应用程序可以连接到Tomcat服务器吗？

回复:
user: user-0
content: JNI看了一下视频，可能是我基础薄弱，没太听懂。现在打算利用把C程序输出的数据保存在文本中，再用java把数据读出来，大家觉得怎么样啊？

user: user-0
content: 我做的事是这样的：我用android客户端连接到Tomcat服务器，向服务器发送指令，服务器接到指令后，然后传给电脑客户端（用C语言已经开发好了），电脑客户端再通过串口把指令传给**库，**库就会把相应的数据返回过来。现在最主要的问题是Tomcat服务器如何把指令（就是简单的字母：A、B、C之类的）传给C编写的客户端，其他的问题都已经解决了。大神看到后帮帮忙啊，我完全是新手啊！

user: user-1
content: 有一种技术较JNI JNI可实现的功能： 1.java可调c接口； 2.c可调Java接口。 依LZ的需求： 1.android客户端与Tomcat通信LZ可自己实现； 2.Tomcat与C端通信，中间可以考虑加一步java程序，然后利用JNI，用C去掉java的接口。

user: user-2
content: socket 编程  connnect  一般tomcat默认端口号是8080  就能连上  如果是要连lz自己写的，部署在tomcat上的服务器程序， 那么lz自己监听的端口号是多少就连多少

user: user-3
content: tomcat都服务器了，你想干嘛，写个客户端？？

user: user-4
content: 我没看懂，但是你电脑客户端c是怎么写的？服务器和电脑客户端协议对应起来不就行了，这不是应该和android客户端和服务器连接一样的办法么？还是因为你无法确保服务器是否连通了电脑客户端？而且C语言理论上是万能的！

user: user-5
content: 还请LZ先解释清楚连上去了做什么，大家才好猜LZ所谓的连过去是怎么一回事。

user: user-6
content: 引用 2 楼 lxnh1221 的回复:我是想在原有的C代码里面，继续开发新的功能（可以和Tomcat服务器通信：数据之间的传递）。你回答的不是我想要的，不好意思  Tomcat服务器通信 跑JAVA 那个吗？  不按套路走，比较困难，网络通信一个都socket编程，然后在上面跑你遵循的协议。

user: user-0
content: 我是想在原有的C代码里面，继续开发新的功能（可以和Tomcat服务器通信：数据之间的传递）。你回答的不是我想要的，不好意思

user: user-7
content: Tomcat服务器是什么意思？你是想和服务器进行http通信吗？流程如下： 1用socket和服务器建立tcp连接 2通过这个tcp连接发送http文件命令。 3获得的http数据就是你打开http网页的代码。
user-0 提问: 大神们，求救！C语言%g（%G）是如何选择%f或者%e（%E）进行输出的……

回复:
user: user-0
content: 大家好……我貌似找到了解决办法了……这是我刚刚在《C陷阱与缺陷》上看到的。 1：%g用于打印浮点型数据时，会去掉多余的零，至多保留六位有效数字 2：当%g用于打印超过6位的浮点型数据时，对于所有格式说明符都一样会遇到这样的问题，因为精度问题，%f不得不输出一个不精确的超过六位的数字，%e也是同样，而%g此时会选择%e格式进行输出，并且按第一条要求，去掉多余的零，并且四舍五入到6位数字。这是《C Primer Plus》中所说的超过精度的时候的情况。 3：当一个数字的绝对值很小的时候，要表示这个数字所需要的字符数目就会多到让人难以接受。举例而言，如果我们把π*10^-10写作0.00000000000314159就会显得非常丑陋不雅，反之，如果我们写作3.14159e-10，就不但简洁而且易读好懂，党支书是-4时，这两种表现形式大小相同。对于比较小的数值，除非该数的指数小于或者等于-5，%g才会采用科学技术发来表示，即，以%e的格式进行输出。 这下看来，我们可以讲谭书与《C Primer Plus》上所说的统一起来……让我们向Andrew Koenig先生致敬吧！

user: user-1
content: http://www.cplusplus.com/reference/cstdio/printf/

user: user-2
content: 你既然能看C primer plus了，还看老谭的书作甚。 老谭的书就是一本改错习题集

user: user-3
content: double输入时必须%lf，但输出时可以%f 按我的理解， %g      根据数值不同自动选择 %f 或 %e ，%e 格式在指数小于-4或者大于等于精度时使用。 这里的%f指的是浮点数，已经大于精度了，所以这本其实也没错

user: user-0
content: 引用 2 楼 mujiok2003 的回复:http://www.cplusplus.com/reference/cstdio/printf/ 如果按这么说来，谭浩强书上说的是对的嘛……可是C Primer Plus 为什么要这么说啊……难以理解还是……
user-0 提问: 自己琢磨了很久的排序搞定了，大家指点指点！

回复:
user: user-1
content: 冒泡排序吗，可以将变量n和k去掉，只要用i和j就可以了，内层循环如下：          for (i = j+1; i < (number-1); i++)         {             if (temp < va[i])             {                 temp = va[i];                 va[i] = va[j];                 va[j] = temp;             }         }
user-0 提问: 北大ACM1007，为什么会这样"0X004014al"指令引用的“0xccccccc"内存不能为”written"?？

回复:
user: user-1
content: 很明显是指针没有分配内存。  是dna[i]。

user: user-2
content: 楼主想实现什么功能，代码先简单介绍下吧