Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 返回结构体指针类型，出错

回复:
user: user-1
content: 引用 4 楼 qingtianjushi 的回复:[quote=引用 3 楼 lming_08 的回复:] MyFile * MyFileOpen(char * fname, char * ftype)  { MyFile * ss; int a=100; short Mlevel=100; int Mflag=987; int * Mbuffer=&a;    ss->level=Mlevel; ss->flag=Mflag; ss->buffer=Mbuffer;       return ss; 这个里面的ss一离开{}，就被销毁了；要使用malloc申请 另外，建议调整下函数，将MyFile的申请放在函数外面申请，然后将指针传到MyFileOpen()里面，这样的好处是外面申请后不会忘记释放  嗯，是的，如果在内部申请，离开就会被销毁。但是多传入一个参数，导致这个函数参数有点复杂了。 	return ss; 	free(ss); 先返回，再销毁，这样应该没问题吧？[/quote] 这样就大错特错了！ return ss;  //执行完这句就返回了，后面的free(ss)根本就不会执行！ free(ss); 另外，你需要弄清楚栈内存和堆内存的区别，如果在内部申请，离开就会被销毁这句话不对，离开{}作用域会被销毁只是针对栈内存，用malloc申请是在堆内存，申请堆内存不会自动释放，必须手动释放free()。

user: user-0
content: 引用 3 楼 lming_08 的回复:MyFile * MyFileOpen(char * fname, char * ftype)  { MyFile * ss; int a=100; short Mlevel=100; int Mflag=987; int * Mbuffer=&a;    ss->level=Mlevel; ss->flag=Mflag; ss->buffer=Mbuffer;       return ss; 这个里面的ss一离开{}，就被销毁了；要使用malloc申请 另外，建议调整下函数，将MyFile的申请放在函数外面申请，然后将指针传到MyFileOpen()里面，这样的好处是外面申请后不会忘记释放  嗯，是的，如果在内部申请，离开就会被销毁。但是多传入一个参数，导致这个函数参数有点复杂了。 	return ss; 	free(ss); 先返回，再销毁，这样应该没问题吧？

user: user-1
content: MyFile * MyFileOpen(char * fname, char * ftype)  { MyFile * ss; int a=100; short Mlevel=100; int Mflag=987; int * Mbuffer=&a;    ss->level=Mlevel; ss->flag=Mflag; ss->buffer=Mbuffer;       return ss; 这个里面的ss一离开{}，就被销毁了；要使用malloc申请 另外，建议调整下函数，将MyFile的申请放在函数外面申请，然后将指针传到MyFileOpen()里面，这样的好处是外面申请后不会忘记释放

user: user-2
content: MyFile * MyFileOpen(char * fname, char * ftype)  ss没有分配内存是个野指针，赋值会导致出现内存异常

user: user-3
content: 要用malloc给ss先分配内存。  引用 楼主 qingtianjushi 的回复://返回结构体指针类型，出错. #include<stdio.h> typedef struct Fdata { 	short level; 	unsigned int flag; 	int * buffer; }MyFile; MyFile * MyFileOpen(char * fname, char * ftype) ; int main() { 	MyFile *fp=MyFileOpen("",""); 	printf("level is %d \n",fp->level); //应该等于100 	printf("flag is %d \n",fp->flag);//应该等于987 	printf("buffer ADD is %x \n",fp->buffer);//应该输出a的地址   	return 0; } MyFile * MyFileOpen(char * fname, char * ftype)  { 	MyFile * ss; 	int a=100; 	short Mlevel=100; 	int Mflag=987; 	int * Mbuffer=&a; 	  	 	ss->level=Mlevel; 	ss->flag=Mflag; 	ss->buffer=Mbuffer;       	return ss; }
user-0 提问: C语言新人  求大神

回复:
user: user-0
content: 谢谢各位大神 0.0

user: user-1
content: 代码有两个错误，不能运行，第一个好改，在main（）前边加一个int,最后加一个return 0即可，第二个有些难度，得再看看

user: user-2
content: IOputData(&List); 中的&应去掉，List已经是LN *类型

user: user-3
content: IOputData(&List);   换成IOputData(List);

user: user-4
content: 我也是新人啊
user-0 提问: 彩票问题（1到36中选7个不同的数）

回复:
user: user-1
content: //1到36中选7个不同的数 #include <stdio.h> #include <stdlib.h> #include <time.h> int d[37]; int i,n,a,b,t; int main() {     srand(time(NULL));     n=36;     for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */     for (i=n;i>1;i--) {/* 打乱1～n */         a=i;b=rand()%i+1;         if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}     }     for (i=1;i<=7;i++) printf("%d ",d[i]);/* 输出1～7 */     printf("\n");     return 0; }

user: user-2
content: 不重复 ：36选1，35选1，.。。。。。。。。。30选1； 可重复 ：36选1，36选1，36选1，。。。。。。。。；

user: user-3
content: 你的程序问题很多，首先大循环不能保证一定能产生7个数字，相同数字的判定也有问题；我的程序你参考一下# include <stdio.h> # include <stdlib.h> # include <time.h> int main() { 	int arr[7]; 	int val[37] = {0};//记录数字的标志位；1表示已有该数字 	int i = 0; 	int num;  	srand((unsigned)time(NULL)); 	while(i < 7) 	{ 		num = rand() % 36 + 1; 		if(val[num] == 0) 		{ 			val[num] = 1; 			arr[i] = num; 			i++; 		} 	} 	for(i = 0; i < 7; i++) 		printf("arr[%d] = %d\n", i, arr[i]); return 0; }
user-0 提问: 软件破解

回复:
user: user-1
content: 引用 3 楼 user-3 的回复:去看雪论坛学 同意。 学不会的话，还可以掏钱请我破解。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:[quote=引用 3 楼 user-3 的回复:] 去看雪论坛学 同意。 学不会的话，还可以掏钱请我破解。[/quote]  不要这样啊，我也是工作需要才去破解的，并不是想专门去破解别人的劳动万里的！

user: user-2
content: 主要是反汇编

user: user-3
content: 去看雪论坛学

user: user-0
content: 引用 1 楼 merlinfang 的回复:主要是反汇编  具体步骤是什么?
user-0 提问: [SWU] putty  中文乱码

回复:
user: user-1
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-2
content: 选择正确的字体和正确的编码
user-0 提问: 关于C语言指针的问题，求大神指点

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> int main() { 	void *p = NULL ; 	 	printf("p = %p\n",p); 	printf("(int *)p[1] = %p\n",&((int*)p)[1] ); 	printf("(double *)p[i] = %p\n",&((double*)p)[1]);  //	printf("(void *)p[i] = %p",&p[1]); 此处编译错误，因为p是void*类型， //p[1]的值无法计算，[ ]符号是根据指针类型来计算便宜地址，更正之前回复中的错误  	return 0 ; }

user: user-2
content: A[B]等价于*(A+B)

user: user-3
content: 楼主显然不懂 指针和数组的区别和关系呢！

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-0
content: 我的代码中，输出错了吗？感觉应该没错啊，但是输出的结果不对啊

user: user-0
content: 可是我的代码就是这么写的，为什么这个输出不对呢？

user: user-1
content: scanf("%d",(此处为地址)); p[i]是变量名，&p[i]就是p[i]的地址咯 // [ ] 是计算便宜地址的符号，int a[3];  a[i] 的地址是 a的地址 + i * sizeof(int) ; pd是指针变量，它的值是一个地址，p[i]的地址是 p的值 + sizeof(指针指向的数据类型（此处为double）)

user: user-4
content: 举个例子哈 数组 int b[5]; 数组名 p就是一个指针常量 所以 *b=b[0];  b=&b[0]    要是在定义一个指针 int *p； p可以这么用 p=a; 结果呢 p[i]就可以等于b[i]啦     数组其实和指针某些方面 可以互用的 还有你说的两个疑惑地地方 是你理解错了 pd[i]是数组 不是指针 我也在学C语言 一起加油哈 坚持！！！

user: user-5
content: 数组的[]操作符代表的意义就是 : a[i] = *(a+i),a代表数组的首地址，及对首地址取i的地址偏移量，最后取地址里的内容

user: user-6
content: pd[i]  = *(pd+i)   所以我记得c++里 还可以这么写 i[pd]
user-0 提问: 快速排序，找不到错误了，希望大神们给找一下

回复:
user: user-0
content: 引用 6 楼 wang0635 的回复: int main() {      printf("待排数组为：\n");      for(int i=0;i<LEN;i++)      {           printf("%d,",a[i]);      }      printf("\n");       QuickSort(a,0,LEN); //应该是 LEN - 1 吧 }我晕。。。谢谢！！！

user: user-1
content: int main() {      printf("待排数组为：\n");      for(int i=0;i<LEN;i++)      {           printf("%d,",a[i]);      }      printf("\n");       QuickSort(a,0,LEN); //应该是 LEN - 1 吧 }

user: user-2
content: 楼上说的对，你的交换函数就错了，应该应用指针传递而不是值传递，这样交换的只是拷贝的值，可以这样修改： void Swap(int *a,int *b) {     int temp=0;     temp=*a;     *a=*b;     *b=temp; } 或者直接使用algorithme库中的swap()函数 另外几点小错误，35行while（true）中true ，c是不支持bool类型的,可以换成1,但我认为你应该修改你的逻辑 以及for(int i = 0;;)你在for语句中定义变量是不被vc6.0支持的，gcc添加 -std=c99 关于你的快排函数有点逻辑混乱，建议你单步调试，看看课本上的代码吧。

user: user-0
content: 引用 3 楼 wang0635 的回复:C语言函数参数是值参数。仔细看看课本，这一段都讲得很详细，一般也拿swap函数做例子确实swap函数有问题，但是结果现在成了 待排数组为： 5,2,4,7,1,3,2,6, 当前P的值是：5 当前Q的值是：5 2,2,4,0,1,3,5,6, 当前P的值是：2 当前Q的值是：2 0,1,2,4,2,3,5,6, 当前P的值是：0 当前Q的值是：0 0,1,2,4,2,3,5,6, 当前P的值是：4 当前Q的值是：4 0,1,2,3,2,4,5,6, 当前P的值是：3 当前Q的值是：3 0,1,2,2,3,4,5,6, 当前P的值是：6 当前Q的值是：6 0,1,2,2,3,4,5,6, 请按任意键继续. . . 我的7去哪了

user: user-1
content: C语言函数参数是值参数。仔细看看课本，这一段都讲得很详细，一般也拿swap函数做例子

user: user-0
content: 引用 1 楼 wang0635 的回复:至少Swap函数不对，没有真正对换。用指针做参数Swap函数应该对吧，为什么不对呢？

user: user-1
content: 至少Swap函数不对，没有真正对换。用指针做参数
user-0 提问: 【C语言程序】：关于输入日期输出星期的程序问题

回复:
user: user-1
content: COleDateTime::GetDayOfWeek int GetDayOfWeek( ) const;  Return Value  The day of the week represented by the value of this COleDateTime object.  Remarks  Call this member function to get the day of the month represented by this date/time value.  Valid return values range between 1 and 7, where 1=Sunday, 2=Monday, and so on. If the status of this COleDateTime object is not valid, the return value is AFX_OLE_DATETIME_ERROR.  For information on other member functions that query the value of this COleDateTime object, see the following member functions:   GetDay   GetMonth   GetYear   GetHour   GetMinute   GetSecond   GetDayOfYear  COleDateTime Overview |  Class Members |  Hierarchy Chart  See Also   COleDateTime::COleDateTime, COleDateTime::SetDateTime, COleDateTime::operator =, COleDateTime::GetStatus
user-0 提问: VS2012 C语言程序 找不到标识符是怎么回事儿？

回复:
user: user-1
content: 1、把函数定义搬到前面，或者在前面加上函数声明。 2、 #include <iostream>  using namespace std;  //---------------------------------------------------------- // 快速排序 O(NlogN)  // 返回调整后基准数的位置 int partition(int data[], int low, int high) { 	int i = low, j = high; 	int x = data[low]; 	while (i < j) 	{ 		// 从右向左找小于x的数来填data[i] 		while(i < j && data[j] >= x) 			j--;  		if(i < j) 		{ 			data[i] = data[j]; // 将data[j]填到data[i]中，data[j]就形成了一个新的坑 			i++; 		}  		// 从左向右找大于或等于x的数来填data[j] 		while(i < j && data[i] < x) 			i++;  		if(i < j) 		{ 			data[j] = data[i]; // 将data[i]填到data[j]中，data[i]就形成了一个新的坑 			j--; 		} 	}  	// 退出时，i等于j。将x填到这个坑中。 	data[i] = x;  	return i; }  void quickSort(int data[], int low, int high) { 	if (low < high) 	{ 		int pivot = partition(data, low, high); 		quickSort(data, low, pivot - 1); 		quickSort(data, pivot + 1, high); 	} }  int main() { 	int array[] = {9, 6, 3, 8, 7, 1, 5, 2, 4}; 	int count = sizeof(array) / sizeof(array[0]);  	quickSort(array, 0, 8);  	for(int i = 0; i < count; ++i) 		cout << array[i] << " ";  	cout << endl;  	return 0; }

user: user-2
content: 引用 2 楼 gcy77 的回复:引用 1 楼 user-2 的回复:把swap函数定义挪到partition函数前面去有用！swap和partition都需要移到quicksort前面，还有其他解决办法吗？提醒：这个程序的结果不对，刚运行了一下。。。 其他方法就是追加函数声明 程序运行结果不对，你需要做的是单步调试，看看到底是哪里不对

user: user-0
content: 引用 1 楼 user-2 的回复:把swap函数定义挪到partition函数前面去有用！swap和partition都需要移到quicksort前面，还有其他解决办法吗？提醒：这个程序的结果不对，刚运行了一下。。。

user: user-2
content: 把swap函数定义挪到partition函数前面去
user-0 提问: 一道题，请大家帮我看看为什么vs2013下执行不了，谢谢啦

回复:
user: user-1
content: 好像找到原因了，你在VS2013中把scanf的 _s 去掉试试

user: user-1
content: 在VS2012下也可以用，并且是可以连续输入，即计算完输入的两个数后程序不会退出，还可以继续输入两个数，这个会不会是VS2013的问题啊，这些新东西一般都好有些问题，如果不是因为这个，那我就不清楚了，看楼下吧

user: user-0
content: 出来这个东西，在vc中是可以执行的

user: user-0
user-0 提问: 刚看了文件映射，有些不明白的地方，求助

回复:
user: user-1
content: 这里的不必执行IO操作，是指用户不必显式的执行IO操作，系统会帮你完成这个工作。 映射就是系统将文件的内容与内存的某个区域相关联，系统会将对内存的读写转换成对文件的读写操作。
user-0 提问: C语言字符串中间插入的问题

回复:
user: user-1
content: 使用snprintf，合成字符串吧

user: user-2
content: 我也犯过同样的问题， char * a = "I have a %s question";是字符串常量，注意是常量，是不能修改的 char  a[] = "I have a %s question";是字符数组，是可修改的， 并且也要注意内存存储的位置，这两个字符串是存在不同内存区的

user: user-3
content: 仅供参考#include <stdio.h> #include <string.h> #include <locale.h> char s[256]; char *p; int r,n,i; int main() {     setlocale(LC_ALL,"chs");     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //

user: user-4
content: 不用现成函数的想法是不对的。  这个问题先准备一个通常足够大的buffer，做snprintf并得到返回值，如果返回值小于buffer的大小那么格式化完整，否则动态分配一个返回值+1那么大buffer，然后放心的snprintf进去即可。

user: user-5
content: a首先要有那么大的空间， 比如a[100] =  "I have a %s question"; char *b = "incomprehension"; sprintf(a,b); 就可以了

user: user-6
content: 直接写在代码中的"I have a %s question"是一个常量数组，很多编译器会直接把它放在只读内存区，任何对其内容的修改都是不允许的，很有可能导致程序崩溃——当然重要的不是崩溃不崩溃，而是你不该改变它

user: user-5
content: 引用 2 楼 Keneth_cs 的回复:[quote=引用 1 楼 merlinfang 的回复:] a首先要有那么大的空间， 比如a[100] =  "I have a %s question"; char *b = "incomprehension"; sprintf(a,b); 就可以了 这个我知道，我现在知道的是 假如是直接用字符串直接初始化的指针，能不能也实现替换一段替换后长度比之前长的字符串，会越界吗？？ [/quote] 会的

user: user-0
content: 引用 1 楼 merlinfang 的回复:a首先要有那么大的空间， 比如a[100] =  "I have a %s question"; char *b = "incomprehension"; sprintf(a,b); 就可以了 这个我知道，我现在知道的是 假如是直接用字符串直接初始化的指针，能不能也实现替换一段替换后长度比之前长的字符串，会越界吗？？
user-0 提问: 结构体数组溢出

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

user: user-2
content: index[i]在运行时其实是这样的：*(idex +i),即在idex的基础上在正向偏移i*（12）个字节的位置（这个12字节，其实就是struct index的大小），再取其中的值，由于你的index之定义了1个元素，那么对于i》=1的情况，所做的诸如 index[i].start赋值，都是在修改index界外的内容；溢出的时，出现什么情况是不一定的，比如你的溢出操作修改了其他进程中正在使用的变量，就会出现问题了，比如造成了空指针操作，程序需肯定就崩溃了。

user: user-3
content: 主要了解一下进程的”虚拟地址空间“概念，你操作的内存如果恰好已被分配，那么读写它是不会出现”段错误“的

user: user-4
content: 个人认为与数组类似，当数组溢出时如果其下一个地址没有存放对于整个系统来说比较重要的数据那么溢出后将下一个地址所存放的数据破坏后，运行是不会出现异常的，同样这样的Bug也是比较难发现的，但一旦有问题或者运行时间长了后所造成的结果将会是致命的。
user-0 提问: 关于软件工程专业大三实习

回复:
user: user-1
content: 这个世界上就没有精通C这回事！！

user: user-2
content: 可以找吧，我出了学校就是半吊子的C水平，其他各种不会，在深圳找了个公司实习，1600/月

user: user-3
content: 引用 楼主 RJGCSS 的回复:本人大三马上就要面临找工作了。 大三下学期就结束了大学课程，所以想要在暑假找个单位实习。    我想找个关于C程序设计的工作， 希望在Linux环境下。 请问各位， 要找这样一份工作需要具备什么知识呢？ Linux下用C主要做什么开发呢？ 开了一些招聘单位的要求“精通C”， 我想知道到底要超什么方向去努力。     我知道自己现在水平很浅， 薪资方面没有太多要求。 就是希望有一个实习的机会。     实习和正式找工作的流程都一样吗？ 希望各位给些建议。 谢谢！  不知道你C水平咋样，或者说不知道你对计算机和操作系统体系理解程度咋样。 如果你仅仅是C学的好，找个像样的实习工作还是比较难的，毕竟没有太多公司愿意培养新人。不过做一些相对简单的上层后台应用没问题。

user: user-4
content: 《Linux C编程一站式学习》

user: user-0
content: 引用 7 楼 mxgsgtc 的回复:很多啊， 我就是系统方向， 主要是参与编程   请问薪资方面怎么样， 谢谢

user: user-5
content: 很多啊， 我就是系统方向， 主要是参与编程

user: user-0
content: 引用 4 楼 mxgsgtc 的回复:[quote=引用 3 楼 RJGCSS 的回复:]     [quote=引用 2 楼 mxgsgtc 的回复:] 不知道楼主c现在是什么水平，精通的话应该不是针对应届生吧，最好自己搞过点小东西，比如在linux在自己开发过小程序，那样比较好找   你指的是Linux上的图形界面程序， qt方面的还是网络方面的？[/quote] 看自己想干什么方向的，我说的是网络和系统编程方面的[/quote]   Linux C 的应用多吗？ 应届生找网络和系统编程方面的工作怎么样？  的确对这方面了解不多。

user: user-6
content: 个人感觉大学森不要在简历里写“精通”→_→ 网上搜索下嵌入式课程，按照那课程表参考着自学就行了，一搜一大把。

user: user-5
content: 引用 3 楼 RJGCSS 的回复:[quote=引用 2 楼 mxgsgtc 的回复:] 不知道楼主c现在是什么水平，精通的话应该不是针对应届生吧，最好自己搞过点小东西，比如在linux在自己开发过小程序，那样比较好找   你指的是Linux上的图形界面程序， qt方面的还是网络方面的？[/quote] 看自己想干什么方向的，我说的是网络和系统编程方面的

user: user-0

user: user-0
content: 引用 2 楼 mxgsgtc 的回复:不知道楼主c现在是什么水平，精通的话应该不是针对应届生吧，最好自己搞过点小东西，比如在linux在自己开发过小程序，那样比较好找   你指的是Linux上的图形界面程序， qt方面的还是网络方面的？

user: user-5
content: 不知道楼主c现在是什么水平，精通的话应该不是针对应届生吧，最好自己搞过点小东西，比如在linux在自己开发过小程序，那样比较好找
user-0 提问: 函数中返回static变量引用的疑惑

回复:
user: user-1
content: 静态变量只被初始化1次。

user: user-2
content: static int t=x; 因为这个语句只执行一次。   改成这样试试: static int t ; t = x;

user: user-3
content: 引用 3 楼 xgqxgqxx 的回复:[quote=引用 1 楼 mujiok2003 的回复:] static int t=x; 因为这个语句只执行一次。   改成这样试试: static int t ; t = x;  第二次调用的时候t变成5了 但是一返回引用有变回1了这是为啥？？[/quote] 没有改变，还是5，    int t=f(5);     cout<<x<<endl; 因为你输出的是x，输出t就是5;

user: user-4
content: 引用 楼主 xgqxgqxx 的回复:#include <iostream> #include <vector> #include <string> using namespace std;  static int& f(int x) {     static int t=x;     cout<<t<<".."<<x<<endl;     return t; }  int main() {     int x=f(1);     cout<<x<<endl;     int t=f(5);     cout<<x<<endl; }   为啥都是输出1  为什么不是第二次覆盖第一次 而是 第一次覆盖第二次？？？ 代码问题： 1. 为什么要使用static？C++中尽量不要使用static，除非用于类成员和类方法，如果想定义常量，请使用enum或者const；如果想定义全局变量，最好使用未命名的namespace； 2. 引用最好用于占内存较大的对象或结构，也许你只是想试试引用的用法

user: user-2
content: 引用 5 楼 xgqxgqxx 的回复:[quote=引用 4 楼 mujiok2003 的回复:] [quote=引用 3 楼 xgqxgqxx 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] static int t=x; 因为这个语句只执行一次。   改成这样试试: static int t ; t = x;  第二次调用的时候t变成5了 但是一返回引用有变回1了这是为啥？？[/quote]  #include <iostream> //#include <vector> //#include <string> using namespace std;  static int& f(int x) {     static int t;      t=x;     cout<<t<<".."<<x<<endl;     return t; }  int main() {     int &x=f(1);     cout<<x<<endl;     f(5);     cout<<x<<endl; } [/quote] 为啥第二次这样写就改变了？？？您能详细的解释下吗？？[/quote]  因为main中x是f中的t的引用

user: user-0
content: 引用 4 楼 mujiok2003 的回复:[quote=引用 3 楼 xgqxgqxx 的回复:] [quote=引用 1 楼 mujiok2003 的回复:] static int t=x; 因为这个语句只执行一次。   改成这样试试: static int t ; t = x;  第二次调用的时候t变成5了 但是一返回引用有变回1了这是为啥？？[/quote]  #include <iostream> //#include <vector> //#include <string> using namespace std;  static int& f(int x) {     static int t;      t=x;     cout<<t<<".."<<x<<endl;     return t; }  int main() {     int &x=f(1);     cout<<x<<endl;     f(5);     cout<<x<<endl; } [/quote] 为啥第二次这样写就改变了？？？您能详细的解释下吗？？

user: user-2
content: 引用 3 楼 xgqxgqxx 的回复:[quote=引用 1 楼 mujiok2003 的回复:] static int t=x; 因为这个语句只执行一次。   改成这样试试: static int t ; t = x;  第二次调用的时候t变成5了 但是一返回引用有变回1了这是为啥？？[/quote]  #include <iostream> //#include <vector> //#include <string> using namespace std;  static int& f(int x) {     static int t;      t=x;     cout<<t<<".."<<x<<endl;     return t; }  int main() {     int &x=f(1);     cout<<x<<endl;     f(5);     cout<<x<<endl; }

user: user-0
content: 引用 1 楼 mujiok2003 的回复:static int t=x; 因为这个语句只执行一次。   改成这样试试: static int t ; t = x;  第二次调用的时候t变成5了 但是一返回引用有变回1了这是为啥？？
user-0 提问: linux下怎么发送syslog到相应的服务器

回复:
user: user-1
content: 请问楼主，问题解决了没有？我现在也遇到这个问题了。。 我是ubuntu14.04    /etc/rsyslog.conf 文件最后一行 加入了： *.*        @ip   重启了服务  但windows7 系统上 安装的 kiwi_syslog 服务端接收不到ubuntu发来的消息，可以接受到本机的syslog日志。。

user: user-0
content: 引用 2 楼 gigglesun 的回复:ftp首选 也可考虑用scp对方测试 只要求我们设备能发送syslog协议的日志  他们使用Kiwi_Syslogd作为服务器能接收到就可以通过，问题是我的linux系统设备该怎么发送syslog协议的报文，谢谢

user: user-0
content: 引用 1 楼 zmlovelx 的回复:email   ftp   scp   socket ==对方测试 只要求我们设备能发送syslog协议的日志  他们使用Kiwi_Syslogd作为服务器能接收到就可以通过，问题是我的linux系统设备该怎么发送syslog协议的报文，谢谢

user: user-0
content: 引用 楼主 chezzz 的回复:大家好！由于需要，我需在linux下把一些日志信息以syslog协议的标准发送到相应的服务器，我想请教下，该怎么做。网上看到一些说在/etc/rsyslog.conf文件中加入服务器IP即可，我查看了我们设备下的linux，没有此配置文件，因为是小设备linux是裁剪的。想要移植的话该怎么做，哪个能帮助下，谢谢。对方测试 只要求我们设备能发送syslog协议的日志  他们使用Kiwi_Syslogd作为服务器能接收到就可以通过，问题是我的linux系统设备该怎么发送syslog协议的报文，谢谢

user: user-2
content: ftp首选 也可考虑用scp

user: user-3
content: email   ftp   scp   socket ==
user-0 提问: 求大神看看为什么这个程序没法执行，急求

回复:
user: user-1
content: #include<stdio.h> void fun(int*a,int*b) {     int t;     if(*a>*b) {         t=*a;         *a=*b;         *b=t;     } } int main() {     int x=8,y=4;     printf("%d%d\n",x,y);     fun(&x,&y);     printf("%d%d",x, y);     return 0; }

user: user-0
content: 已经找到原因了

user: user-2
content: 把指针好好看下吧
user-0 提问: 请问一下如何求得整数1489各位上的数值

回复:
user: user-1
content: 引用 5 楼 romabdwy 的回复:[quote=引用 2 楼 u012421456 的回复:] # include <stdio.h> # include <windows.h>  void fun(int n)//函数不要返回值 { 	int a, b, c, e ; 	a = n%10 ; 	b = n/10%10 ; 	c = n/100%10 ; 	e = n/1000 ; 	printf("a = %d\nb = %d\nc = %d\ne = %d\n", a, b, c, e) ;//在这里输出printf } int main()  ///////////////////////// { 	int num = 1489 ; 	fun(num) ;//直接调用就行,不用printf了  	system("pause"); 	return 0;////////////////// }  lz你给的网址上那个稍微改改就能用， 改的地方是这样/////////////////////////////  晕死，用你这个可行，我又跑回去原来的网址，重新把那个第二个答案给复制粘贴了一下发现又正常了，可能是我的VC装的有问题，哎奇了怪了，不过还是要非常感谢[/quote] 不客气

user: user-0
content: 第二行和最后二行在VC6中确实可以不要，原来给的百度的那个第二个答案可行，4楼对于我来说似乎困难了点儿啊，不过我会看一下，一并谢谢

user: user-0
content: 引用 2 楼 u012421456 的回复:# include <stdio.h> # include <windows.h>  void fun(int n)//函数不要返回值 { 	int a, b, c, e ; 	a = n%10 ; 	b = n/10%10 ; 	c = n/100%10 ; 	e = n/1000 ; 	printf("a = %d\nb = %d\nc = %d\ne = %d\n", a, b, c, e) ;//在这里输出printf } int main()  ///////////////////////// { 	int num = 1489 ; 	fun(num) ;//直接调用就行,不用printf了  	system("pause"); 	return 0;////////////////// }  lz你给的网址上那个稍微改改就能用， 改的地方是这样/////////////////////////////  晕死，用你这个可行，我又跑回去原来的网址，重新把那个第二个答案给复制粘贴了一下发现又正常了，可能是我的VC装的有问题，哎奇了怪了，不过还是要非常感谢

user: user-2

user: user-1
content: 那个第二行和倒数第二行去掉也没事，它的功能就是暂停，如果在VC6.0那样的编译器下，不加都行，但在VS下，不加的话黑色底框就会一闪而逝

user: user-1
content: # include <stdio.h> # include <windows.h>  void fun(int n)//函数不要返回值 { 	int a, b, c, e ; 	a = n%10 ; 	b = n/10%10 ; 	c = n/100%10 ; 	e = n/1000 ; 	printf("a = %d\nb = %d\nc = %d\ne = %d\n", a, b, c, e) ;//在这里输出printf } int main()  ///////////////////////// { 	int num = 1489 ; 	fun(num) ;//直接调用就行,不用printf了  	system("pause"); 	return 0;////////////////// }  lz你给的网址上那个稍微改改就能用， 改的地方是这样/////////////////////////////

user: user-3
content: 编译连接的时候总是有问题 把问题贴出来啊，要不别人怎么帮你看
user-0 提问: 【SWU]  

回复:
user: user-0
content: 引用 3 楼 Falleyes 的回复:直接gets，然后处理字符串吧  具体怎么操作？

user: user-1
content: 直接gets，然后处理字符串吧

user: user-1
content: 比如 char a[1000]; gets(a); 得到参数的一个数组，比如你的输入的时候每个参数是用‘，’分隔开的，那么就使用split函数将分隔的结果存到字符串数组中。 最后，将这些字符串转化成你需要的数据类型。

user: user-0
content: 这个我觉得很麻烦，有没有更简单的

user: user-2
content: 可以while (scanf())循环读取。
user-0 提问: 我定义的函数表为什么不对？

回复:
user: user-1
content: #include <stdio.h>  int f0() {     return 3; }  char f1() {     return 'a'; }  int main() {     void *pa[2];     int a = f0();     char b = f1();     pa[0] = (void*)(&a);     pa[1] = (void*)(&b);     int* myint = (int*)pa[0];     char* mychar = (char*)pa[1];     printf("%d\n",*myint);     printf("%c\n",*mychar);     return 0;      /*int (*p)() = f0;     printf("%d",p());*/ } 试试这个

user: user-2
content: #include <stdio.h>   int f0() {     return 3; }   char f1() {     return 'a'; }   void main() {     void *pa[2];     pa[0] = f0;     pa[1] = f1;     int myint = (int)pa[0]();     char mychar = (char)pa[1]();     printf("%d\n",myint);     printf("%c\n",mychar);  }

user: user-3
content: 你用void*是无类型，只是方便你收纳不同的函数，后头使用时得正确转回原来类型... //int myint = (int)pa[0]; int myint = ((int (*)())pa[0])(); //char mychar = (char)pa[1]; char mychar =(((char (*)())pa[1])();  觉得函数类型很绕，就事先typedef简化一下... typedef int (*fx)(); typedef char (*fy)(); ... int myint = ((fx)pa[0])(); char mychar =(((fy)pa[1])();

user: user-0
content: 我用的就是函数指针数组呀，打印的也不是函数的地址，而是函数的返回值

user: user-4
content: 为什么不使用函数指针数组，为什么要当作char和int打印函数的地址。

user: user-5
content: 参数与返回值都必须一致才可以，最好用typedef定义

user: user-6
content: 你的Pa[]在那里声明了？怎么声明的？这个指针数组的声明类型和函数类型不一致。 typedef int(*)() ptr_func;  ptr_func pa[2];  这样定义你的函数指针。不过还是给它赋char (*)()指针时还是会有错的，你需要做指针强制转换。

user: user-7
content: int f0() {     return 3; } char f1() {     return 'a'; }  不是同种类型的函数 怎么定义成数组。 int (*p)() 是第一个函数的函数指针形式  char (*p1)()是第一个函数的函数指针形式

user: user-8
content: int myint = (int)*pa[0];     char mychar = (char)*pa[1];   这样试试吧

user: user-0
content: 我是要使用在数组中的函数指针，而不是分开的单个的函数指针

user: user-9
content: #include <stdio.h> int f0() {     return 3; } char f1() {     return 'a'; }   int main() {     int (*pi) () =f0;     char (*pc) ()=f1;     int myint=(int)pi();     char mychar=(char)pc(); /*   	pa[0] = f0;     pa[1] = f1;     int myint = (int)pa[0];     char mychar = (char)pa[1]; */     printf("%d\n",myint);     printf("%c\n",mychar);   /*   	int (*p)() = f0;     printf("%d",p()); */ }  error: invalid conversion from `int (*)()' to `void*' 要声明函数指针，错误显示指针类型不对
user-0 提问: 求助：C语言链栈Pop输出不对劲，输出的是菱形符号

回复:
user: user-0
content: 但是，就不出结果了 .显示.exe不能正常工作了

user: user-1
content: void InitStack(LinkStack &top)   void Push(LinkStack &top, char x)   void Pop(LinkStack &top,char &x)
user-0 提问: EOF问题

回复:
user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:Windows：Enter，Ctrl+Z，Enter Linux：Ctrl+D这下对了。谢谢老师。

user: user-1
content: 引用 10 楼 zhao4zhong1 的回复:Windows：Enter，Ctrl+Z，Enter Linux：Ctrl+D 引用 10 楼 zhao4zhong1 的回复:Windows：Enter，Ctrl+Z，Enter Linux：Ctrl+D +1

user: user-2
content: ctrl+z不是undo的意思吗

user: user-3
content: 引用 10 楼 zhao4zhong1 的回复:Windows：Enter，Ctrl+Z，Enter Linux：Ctrl+D 赵老师说的对，不过在输入完成后要先按下回车（ENTER），再按下 Ctrl + Z才行。

user: user-4
content: char ch;应改为int ch;

user: user-4
content: Windows：Enter，Ctrl+Z，Enter Linux：Ctrl+D

user: user-3
content: 引用 5 楼 u012523688 的回复:引用 4 楼 niceworkteam 的回复:难道不能用EOF吗，如果用EOF,我该怎么用呢  EOF 是文件结尾标识，用于读取磁盘上的文件的。这里并不适用。在控制台应用程序里，从用户使用的情况来看，一般以回车键位终止输入，这是用户习惯，所以检查是否读取了 '\r' 或者 '\n'这两个标识。

user: user-0
content: 引用 6 楼 wwwzys 的回复:CTRL + C我加了system（“pause”）运行窗口好像是有结果，但是也还是闪退了。

user: user-0
content: 引用 6 楼 wwwzys 的回复:CTRL + C运行窗口直接闪退了

user: user-5
content: CTRL + C

user: user-0
content: 引用 4 楼 niceworkteam 的回复:难道不能用EOF吗，如果用EOF,我该怎么用呢

user: user-3

user: user-3
content: #include <stdio.h> #include <ctype.h> int main(void) { 	char ch; 	int lower = 0,upper = 0; //	while((ch = getchar()) != EOF) 	while((ch = getchar()) != '\n') 	{ 		if ( islower(ch) ) lower++; 		if ( isupper(ch) ) upper++; 	} 	printf("lower: %d, upper: %d\n",lower,upper); 	return 0; }  EOF 是文件结尾标识，这里用 '\n' 代表换行

user: user-0
content: 引用 1 楼 niceworkteam 的回复:楼主上代码看看#include <stdio.h> #include <ctype.h> int main(void) { 	char ch; 	int lower = 0,upper = 0; 	while((ch = getchar()) != EOF) 	{ 		if ( islower(ch) ) lower++; 		if ( isupper(ch) ) upper++; 	} 	printf("lower: %d, upper: %d\n",lower,upper); 	return 0; }不好意思，我怎么给忘了。

user: user-3
content: 楼主上代码看看
user-0 提问: c++容器vector的初始化问题

回复:
user: user-1
content: 可参考 《Working Draft, Standard for Programming Language C++》等类似的c++规范文档的Declaratros --> Initializers章节 获得更多细节。

user: user-1
content: 是的，需要编译器支持c++ 11特性。

user: user-2
content: 是C++11的内容 VS的话需要2013
user-0 提问: 请教各位如何做不能被用户卸载的软件

回复:
user: user-1
content: 木马类做法，多个程序互相监控，被杀就启动对方，进入内核级，伪装进程，嵌入到其它进程  ==

user: user-2
content: 直接断网不就完了，费这劲干啥

user: user-3
content: 固化在bios里，自己做板子

user: user-4
content: 做不到...
user-0 提问: C我的困惑，需要您的建议，谢谢

回复:
user: user-1
content: 同意楼上的观点，“先糊口”，踏实地干一段时间再说！

user: user-2
content: 引用 1 楼 user-8 的回复:先糊口，语言其实真的不是那么重要。  个人建议，仅供参考。 嗯，+1，我只是个新手，想问问lz访问过这样的网站吗——http://www.job592.com/tag/cn_400.html

user: user-3
content: 搞嵌入式需要一些基础，建议你去搞Linux，那是c语言的用武之地！

user: user-4
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-5
content: 那就赶紧换嵌入式行业。  引用 楼主 u014113806 的回复:我是14年的 毕业生，我很喜欢C，并且在网上经常看到这样的文章，计算机的主要核心还是C，可我还要工作赚钱啊养活自己，在现在看来C的就业也没有java什么的 高，我很纠结，又想深入的了解人类从一无所知到用代码来控制机器，指挥，达到目的，我想学习他的根本，现在真的不知道怎么去走，希望有资深的大大能够给我一些建议，带我走出这个困圈。

user: user-6
content: 想当初我对计算机这个东西感兴趣的时候，也想过把计算机从硬件层一直到软件层都弄清楚（其实已经不是出于软件开发的兴趣了）。最后怎么了，啥能糊口学啥。

user: user-7
content: 引用 楼主 u014113806 的回复:我是14年的 毕业生，我很喜欢C，并且在网上经常看到这样的文章，计算机的主要核心还是C，可我还要工作赚钱啊养活自己，在现在看来C的就业也没有java什么的 高，我很纠结，又想深入的了解人类从一无所知到用代码来控制机器，指挥，达到目的，我想学习他的根本，现在真的不知道怎么去走，希望有资深的大大能够给我一些建议，带我走出这个困圈。  嵌入式开发很多需要C,主要是看你的C能力如何

user: user-8
content: 先糊口，语言其实真的不是那么重要。  个人建议，仅供参考。
user-0 提问: 求助：思考了很久还是想不出为什么结果是这样的，希望大家能指点指点，谢谢~

回复:
user: user-1
content: 请参考置顶帖 传送门~http://bbs.csdn.net/topics/370153775

user: user-2
content: 具体的执行顺序由编译器自行决定！禁制同一变量在一个语句中多次改变！

user: user-3
content: 月经贴。。真不知道哪个公司还会出这种面试题。。

user: user-4
content: 不必纠结，现实中编程不允许这样的代码存在。实现的差异，结果也可能存在差异。
user-0 提问: 关于for循环的层数问题

回复:
user: user-1
content: 引用 3 楼 u014100290 的回复:把M当做一个固定值就行了，前提是肯定要进行赋值或者从其他地方得到它的值+1

user: user-2
content: 用栈（用递归就是用栈，也可以不用递归，自己整一个栈结构来处理。）

user: user-3
content: 用个动态数组，来模拟看看 实在不行直接用递归

user: user-4
content: 个人建议用递归，可以用M作为边界判定值

user: user-5
content: 引用 5 楼 WizardOz 的回复:用栈（用递归就是用栈，也可以不用递归，自己整一个栈结构来处理。） 英雄所见略同。

user: user-6
content: 把M当做一个固定值就行了，前提是肯定要进行赋值或者从其他地方得到它的值

user: user-0
content: 就比方说要求1--m的排列，m是个不确定的值，这种情况 应该怎么处理

user: user-7
content: for 层数怎么不确定法 你写个不确定层数的for循环出来？
user-0 提问: 求解-  -

回复:
user: user-1
content: 你哪个学校的？

user: user-2
content: [code=c ]#include<stdio.h> int main(void) {int(n,n2,n3);//不需要"" n=5; n2=n*n; n3=n2*n; printf('n=%d,n squared=%d,n cubed=%d\n",n.n2,n3);//这里 return 0; }[/code]

user: user-3
content: 第三行，还有倒数第三行，lz你好好看看一楼的代码 说起来lz你的这些代码都是从哪儿弄的啊？怎么老是出这样的错误，你看哪本书啊？就是谭浩强的书好像都没这样的  首先lz需要知道一个简单的代码需要注意什么，语句最后加分号，stdio.h需要尖括号等等，这些如果不明白，怎么敲代码啊？ 我个人的学习建议是，有问题了自己好好看看，不会了看书，认真点，仔细点，实在不行了谷歌百度，再不行了再来论坛，lz你看你前后问的这几个问题，

user: user-4
content: 怎么写的这么不规范

user: user-5
content: #include <stdio.h>  int main(void) {     int n,n2,n3;     n = 5;     n2 = n * n;     n3 = n2 * n;     printf("n=%d,n squared=%d,n cubed=%d\n", n, n2, n3);     return 0; }
user-0 提问: c语言关于字符串的几个问题，求前辈解答

回复:
user: user-0
content: 可是还没有学到字符串，用指针函数，scanf怎么写呢

user: user-1
content: 18. #include <stdio.h> #include <stdlib.h>  int word_length(const char *p) { 	int length = 0; 	for (; isalpha(*p++); ++length); 	return length; }  void output(const char *p, int length) { 	while (length-- > 0) 		fputc(*p++, stdout); }  int main(void) { 	char input[100]; 	char *p = input; 	char *longest = input; 	int length = 0; 	 	fgets(input, 100, stdin);  	while (*p) 	{ 		int len = word_length(p); 		if (len > length) 		{ 			longest = p; 			length = len; 		}  		++p; 	}  	output(longest, length);  	return 0; }

user: user-1
content: 17..  #include <stdio.h> #include <stdlib.h>  int main(void) { 	int count = 0; 	int in_word = 0; 	char line[100]; 	char *p = line;  	fgets(line, 100, stdin);  	while (*p) 	{ 		if (isalpha(*p)) 		{ 			if (!in_word) 			{ 				in_word = 1; 				++count; 			} 		} 		else 		{ 			in_word = 0; 		}  		++p; 	}  	printf("Total %d words.\n", count);  	return 0; }

user: user-0
content: 求高手速度解答呀，坐等！！！
user-0 提问: 实在看不懂这段位运算了

回复:
user: user-1
content: 就是一个状态机 (threes twos ones)当1出现的次数是0,1,2,3次时取值分别为 (0 0 0) (1 0 1) (1 1 0) (0 0 0) 然后循环。这样出现3次的元素都会被清0, 只有非3次的元素才能保留。 但是这个代码有一个bug, 就是题目没有说那个非3次的元素出现了1次还是2次. 所以结果应该是return threes;
user-0 提问: 求助宏中的展开顺序

回复:
user: user-1
content: #define _STR(s)      #s  #define STR(s)       _STR(s)           // 转换宏  void main() {       enum { a = 121321}; printf("%s\n", STR(a)); // 这个似乎是，输出121321 }

user: user-2
content: printf("%s\n", STR(121321));

user: user-3
content: 跟宏扯不上关系，想输出121321，直接用printf("%d\n",a);   引用 楼主 wuyangzu01 的回复:#define _STR(s)      #s  #define STR(s)       _STR(s)           // 转换宏  void main() {       	int a = 121321; 	printf("%s\n", STR(a));  } 不明白为什么答应的结果还是a而不是121321??
user-0 提问: c语方如何实现字符串转变为变量名称

回复:
user: user-1
content: 引用 楼主 surepretty 的回复:目前是这样的，希望根据当前的一些信息，来动态的确认加载哪个变量数据。  具体如下，  已知信息char aaa[128] ="MN3456";  希望如果用他来动态确认或转成变量 int MN3456_HAHA;  在没有办法的时候是通过switch case处理的，但随着支持的东西越来越多。。case N很大了，加载的东西也很多了。 希望能找到个更合适的方法。  求大牛来指教。谢谢  lz这个想法是错误的，编译后，程序中不存在任何的变量名或函数名，他们都被转换为内存地址 你一个功能实现可以使用数组或者使用一个分支判断  if(条件1成立) ｛ a=MN3456_HAHA; ｝ else if(条件2成立) { a=MN3456_BEBE; } ...... char aaa[128] ="MN3456";

user: user-2
content: 简单说就是 写代码生成代码

user: user-3
content: 语言本身应该没法实现你说的字符串转变量名的。功能实现上可以采用map来存储结构信息

user: user-1
content: 变量经过编译之后，名称信息就消失，每个变量都转换成了程序的逻辑地址，使用普通的变量是无法实现lz的功能的 但可以使用一个结构{名称，值} 然后使用一个数组保存这样的结构，加载的时候将“名称-值”存入数组，删除的时候从中删除  或者使用map数据结构，本身的一个名称-值对的结构

user: user-4
content: 这种工作是无法省的，数据量再大也不会增加复杂度，维护起来简单，而用switch的话后面的维护会让人抓狂； 另外还有一种更有弹性的做法，就是把变化的部分放到lua脚本中去，C这边驱动脚本即可。  引用 3 楼 surepretty 的回复:[quote=引用 1 楼 turingo 的回复:] 用查表的方式去做，就是建立一个常量的结构体数组。  [quote=引用 楼主 surepretty 的回复:] 目前是这样的，希望根据当前的一些信息，来动态的确认加载哪个变量数据。  具体如下，  已知信息char aaa[128] ="MN3456";  希望如果用他来动态确认或转成变量 int MN3456_HAHA;  在没有办法的时候是通过switch case处理的，但随着支持的东西越来越多。。case N很大了，加载的东西也很多了。 希望能找到个更合适的方法。  求大牛来指教。谢谢[/quote] 嗯，这样是可以实现 的，但这样处理，还是需要罗列全部的数据到大的结构体里。[/quote]

user: user-0
content: 引用 1 楼 turingo 的回复:用查表的方式去做，就是建立一个常量的结构体数组。  [quote=引用 楼主 surepretty 的回复:] 目前是这样的，希望根据当前的一些信息，来动态的确认加载哪个变量数据。  具体如下，  已知信息char aaa[128] ="MN3456";  希望如果用他来动态确认或转成变量 int MN3456_HAHA;  在没有办法的时候是通过switch case处理的，但随着支持的东西越来越多。。case N很大了，加载的东西也很多了。 希望能找到个更合适的方法。  求大牛来指教。谢谢[/quote] 嗯，这样是可以实现 的，但这样处理，还是需要罗列全部的数据到大的结构体里。

user: user-5
content: 很多是多多？ 个人意见：不超过10000继续用switch case 真超过10000，可以考虑改用map<string,int> name2value;

user: user-4
content: 用查表的方式去做，就是建立一个常量的结构体数组。  引用 楼主 surepretty 的回复:目前是这样的，希望根据当前的一些信息，来动态的确认加载哪个变量数据。  具体如下，  已知信息char aaa[128] ="MN3456";  希望如果用他来动态确认或转成变量 int MN3456_HAHA;  在没有办法的时候是通过switch case处理的，但随着支持的东西越来越多。。case N很大了，加载的东西也很多了。 希望能找到个更合适的方法。  求大牛来指教。谢谢
user-0 提问: 风格比较

回复:
user: user-1
content: 感觉C语言更精简写； Pascal更容易读懂；

user: user-2
content: 每个人喜好不同

user: user-3
content: 楼主不妨试试用Pascal重写一下这个。 http://bbs.csdn.net/topics/380157851

user: user-4
content: 引用 楼主 zcfloder 的回复:软件从小程序时代向大规模软件工程方向发展是个历史的趋势。仅从程序风格上讲，Pascal更加易读，便于编程者了解他人的思想，加快开发的速度和降低维护难度，更加利于交流合作。另外比较二者的风格也要看用武之地，如果写的多是格式化流程化的东西，Pascal接近自然语言，输入速度快（至少不用经常切换上档键去找符号），如同写文章般一样自然优雅；对于写一些短小技巧性强的程序，C会更为灵动，能体现算法的精妙。    个人很喜欢Pascal的语法，清晰严谨，优雅易读。即使对于一个陌生的代码，也多能像读信一样，纵览一遍便能知其八九。Pascal的语法中有严格的数学意义，如前面有位朋友提到:=赋值，其实这种设计比C更加严谨。=表示左右两边的相互等价，1个馒头=5角钱，反过来不一定成立。  萝卜青菜各有所爱，每种语言都是一工具，无他，唯手熟尔

user: user-5
content: 赞同！  引用 楼主 zcfloder 的回复:软件从小程序时代向大规模软件工程方向发展是个历史的趋势。仅从程序风格上讲，Pascal更加易读，便于编程者了解他人的思想，加快开发的速度和降低维护难度，更加利于交流合作。另外比较二者的风格也要看用武之地，如果写的多是格式化流程化的东西，Pascal接近自然语言，输入速度快（至少不用经常切换上档键去找符号），如同写文章般一样自然优雅；对于写一些短小技巧性强的程序，C会更为灵动，能体现算法的精妙。    个人很喜欢Pascal的语法，清晰严谨，优雅易读。即使对于一个陌生的代码，也多能像读信一样，纵览一遍便能知其八九。Pascal的语法中有严格的数学意义，如前面有位朋友提到:=赋值，其实这种设计比C更加严谨。=表示左右两边的相互等价，1个馒头=5角钱，反过来不一定成立。

user: user-6
content: 不了解 Pascal，  我们一开始是学C语言，而后是C++，现在是JAVA，都只是浅谈辄止，唉
user-0 提问: 算法求助

回复:
user: user-1
content: 如果真不怕浪费空间，排序做到O(N)都是可以的

user: user-2
content: 第一个时间O(N)，空间O(N) Bits 或者bool 数组记录每个数字是否出现过 第二个 O(N^2)不确定有没有，可能没有。 第三个和快排的实现有关，其中据说，实用的O(NlogN) 算法是, 快排递归深度到一定的时候，转为堆排序，可以保证是O(NlogN)  由于随机数生成器的问题，据说随机的快排算法，不是实用的算法。  就像O(N) 的选择算法中，五数中值的中值，那个算法一样不实用。 具体要看有没有人，真的做出来，并应用了随机的快排算法，就知道了。
user-0 提问: 这是什么意思！！！从调用函数来看，函数传递的是数组，所以函数的形参应为指针

回复:
user: user-1
content: 在同一个文件中　对一维数组来说　数组和指针是等价的　所以没有问题　你写成s[100]没有问题

user: user-2
content: 顶3楼~~~~~~~~

user: user-3
content: you can also write void fun(char s[], char t[])

user: user-4
content: 数组的传递，其实就是地址的传递！

user: user-5
content: 对于void fun(char s[100], char t[100]); 编译器也会转换为 void fun(char *, char *);

user: user-5
content: 两种方式一样的，只不过根据个人的习惯吧了

user: user-6
content: 在作为函数的参数时，数组和指针是等价的。 所以两种写法没有区别。

user: user-0
content: 可是我写void fun(char s[100], char t[100]); 答案说我是错的，我装的计算机二级考试系统
user-0 提问: 求高手详解一下设备环境句柄的含义 困扰很多天了

回复:
user: user-1
content: DC句柄，对应一个DC对象，对象内部是一个数据结构。 包含该DC的驱动程序相关的一些数据结构，比如驱动的函数指针，硬件相关的数据结构等等。  设备环境指的是，对应的硬件参数和驱动程序软件参数。 是对设备硬件的一种抽象。  比如GDI 有屏幕DC和打印机DC等至少两种DC。 都是和图形输出相关的。  需要详细了解的话，请看《Windows 图形编程》，和Window驱动开发方面的书籍。

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

user: user-3
content: 引用 2 楼 cyycxz 的回复:引用 1 楼 user-4 的回复:楼主说的是图形么？DC?正是，还有不明白的是为什么获取名柄之后要释放才行。。。 就像申请内存， 你就一直申请，不释放 内存资源是不是就越来越少， 后面再申请就获取不到了吧

user: user-2
content: Device Contexts Home |  Overview |  How Do I |  Tutorial  A device context is a Windows data structure containing information about the drawing attributes of a device such as a display or a printer. All drawing calls are made through a device-context object, which encapsulates the Windows APIs for drawing lines, shapes, and text. Device contexts allow device-independent drawing in Windows. Device contexts can be used to draw to the screen, to the printer, or to a metafile.  CPaintDC objects encapsulate the common idiom of Windows, calling the BeginPaint function, then drawing in the device context, then calling the EndPaint function. The CPaintDC constructor calls BeginPaint for you, and the destructor calls EndPaint. The simplified process is to create the CDC object, draw, and destroy the CDC object. In the framework, much of even this process is automated. In particular, your OnDraw function is passed a CPaintDC already prepared (via OnPrepareDC), and you simply draw into it. It is destroyed by the framework and the underlying device context is released to Windows upon return from the call to your OnDraw function.  CClientDC objects encapsulate working with a device context that represents only the client area of a window. The CClientDC constructor calls the GetDC function, and the destructor calls the ReleaseDC function. CWindowDC objects encapsulate a device context that represents the whole window, including its frame.   CMetaFileDC objects encapsulate drawing into a Windows metafile. In contrast to the CPaintDC passed to OnDraw, you must in this case call OnPrepareDC yourself.   Mouse Drawing Most drawing in a framework program—and thus most device-context work—is done in the view’s OnDraw member function. However, you can still use device-context objects for other purposes. For example, to provide tracking feedback for mouse movement in a view, you need to draw directly into the view without waiting for OnDraw to be called.   In such a case, you can use a CClientDC device-context object to draw directly into the view.   What do you want to know more about? Device contexts in Win32 documentation   Drawing   Drawing tutorial   Mouse drawing   Mouse drawing tutorial   Lines and curves   Filled shapes   Fonts and text   Colors   Coordinate spaces and transformations

user: user-4
content: 这个应该是引用计数的原因吧，呵呵，我也不是高手 GetDC一次，引用计数+1，ReleaseDC -1，引用计数为0的时候，才会去释放资源。 类似于java和.net的回收机制。

user: user-0
content: 引用 1 楼 user-4 的回复:楼主说的是图形么？DC?正是，还有不明白的是为什么获取名柄之后要释放才行。。。

user: user-4
content: 楼主说的是图形么？DC?
user-0 提问: 这两个错误提示如何解释呢？

回复:
user: user-0
content: [quote=引用 1 楼 user-2 的回复:] 非常感谢！！！

user: user-1
content: 没有main函数吧

user: user-2
content: #include <stdio.h>   int f1(int *a){  *a=5;  return 0;}  int main() { return 0; }
user-0 提问: 求破FFMpeg推送RTMP流至Red5服务器的思路，源文件是本地Flv文件

回复:
user: user-1
content: 楼主怎么解决这个问题的？求一份demo。邮箱：592386141@qq.com

user: user-0
content: 第一次发帖 就沉了？  时间都去哪了    大神都去哪了。。。。。
user-0 提问: 用 n/4 = 1 - 1/3 + 1/5 - 1/7 + ... 公式求n。

回复:
user: user-0
content: #include <stdio.h> #include <math.h> main() { 	int j=1;     double i=1.0, n=0.0;    for(;fabs(1/i)>1e-6;i=+2.0, j++)  {  if(j%2==0)          n=n-1/i;    else      n=n+1/i;    }    n=n*4;    printf("n=%lf\n",n); }

user: user-0
content: 我加了一个fabs（1/i)>1e-6以后还是不行啊

user: user-0
content: 我就是不知道那个语句怎么写，所以空在那里了

user: user-1
content: 晕，你这个循环没有退出条件

user: user-2
content: double pi=0, f  ,eps = 1e-6; for (i = 5; fabs(  f  = 1.0/ i - 1.0/(i+2)) >eps; i+=4)        pi +=  f;

user: user-3
content: #include<stdio.h> #include<math.h>  int main(int argc, char *argv[]) {     int i,j;     double n, sum = 0.0, con;      for (i = 1,j = 1; ; i=i+2, ++j) {         if (j % 2 == 0) {                 con = -1.0 / i;         } else {                 con = 1.0 / i;         }         sum = sum + con;          if (fabs(con) < 1e-6) {                 break;         }     }     n = sum * 4;      printf("n=%f\n",n); }
user-0 提问: 求推荐几部学习C语言的书籍

回复:
user: user-1
content: 看了小谭的书，确实不够。

user: user-2
content: 也可以看看这里 http://blog.csdn.net/thefutureisour/article/details/7598775

user: user-3
content: 看看 都是蛮好的书籍阿

user: user-4
content: c primer plus 这本书写的非常给力！想学好c，可以买一本好好看看！

user: user-5
content: 看看数据结构方面的吧

user: user-6
content: C和指针 C语言入门经典

user: user-7
content: C 和指针不错，可以看下，做下后面的习题，然后学习下数据结构。

user: user-8
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm
user-0 提问: 怎样读取TTF字体，把输入的汉字转化成64*64点阵位图，或者生成二维数组也行。

回复:
user: user-1
content: C源代码:显示指定字符在指定字体中对应的由直线段和Bezier曲线段组成的笔划形状的命令行工具FontPath  http://download.csdn.net/detail/zhao4zhong1/6588091

user: user-2
content: freetype2能够胜任

user: user-3
content: http://milker.iteye.com/blog/1326218
user-0 提问: 关于《C语言程序设计：现代方法》第八章第9题编程问题

回复:
user: user-0
content: 虽然不是最好的方案，但是我不再纠结这个问题了，还是谢谢楼上兄弟了。

user: user-1
content: 引用 4 楼 zergor 的回复:我看了你的代码，你的思路也是在边界死胡同的时候通过多次尝试来判定出路，不过我运行了你的代码，还是有问题的。 明显还有路可走，只是到了边界而已。 42行改为  if (n>20000) {//钻入死胡同 再试试？

user: user-0
content: 我看了你的代码，你的思路也是在边界死胡同的时候通过多次尝试来判定出路，不过我运行了你的代码，还是有问题的。 明显还有路可走，只是到了边界而已。

user: user-0
content: 先自己顶一个

user: user-1
content: 仅供参考#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXX 10 #define MAXY 10 void main() {     char MAP[MAXX][MAXY];     char str;     int x,y,z,f,n;      for (x=0;x<MAXX;x++) {         for (y=0;y<MAXY;y++) {             MAP[x][y]='.';         }     }      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n");      srand((unsigned) time(NULL)); RETRY:     x=0;y=0;str='A';MAP[x][y]=str;      for (str='B';str<='Z';str++) {         n=0;         f=1;         while (1) {             n++;             z=rand()%4;             switch (z) {                 case 0: if (y+1<MAXY && MAP[x  ][y+1]=='.') {y++;MAP[x][y]=str;f=0;} break;                 case 1: if (x+1<MAXX && MAP[x+1][y  ]=='.') {x++;MAP[x][y]=str;f=0;} break;                 case 2: if (y-1>0    && MAP[x  ][y-1]=='.') {y--;MAP[x][y]=str;f=0;} break;                 case 3: if (x-1>0    && MAP[x-1][y  ]=='.') {x--;MAP[x][y]=str;f=0;} break;             }             if (f==0) break;             if (n>20) {//钻入死胡同                 for (x=0;x<MAXX;x++) {                     for (y=0;y<MAXY;y++) {                         MAP[x][y]='.';                     }                 }                 goto RETRY;             }         }//while         if (x==MAXX-1 || y==MAXY-1) break;     }//for      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n"); }

user: user-2
content: 吊死没有那本书
user-0 提问: 链表通过文件读写计算两个多项式之积

回复:
user: user-0
content: 求大神解答啊=^= 请问有人可以帮忙看看吗

user: user-1
content: 改了一部分供参考 typedef struct polyn {   int coef; //如果要用double,则需要把fscanf和printf中的"%d"改为"%lf"。  double coef;   int e; //double e;   struct polyn *next; }POLYN;  POLYN *creatpolyn(char *file_name); //改 POLYN *creatpolyn();//创建多项式  int main() {    POLYN *ha,*hb,*hc;    ha = creatpolyn("F:\\file1.txt");//改 ha = creatpolyn();   polynout(ha,"ha;");    hb = creatpolyn("F:\\file2.txt");//改 hb = creatpolyn();   polynout(hb,"hb;");    Clearlist(ha);   Clearlist(hb);    return 0; }   POLYN *creatpolyn(char *file_name) //改 POLYN *creatpolyn() {   POLYN *phead = NULL;   POLYN *pnode = NULL;   phead = (struct polyn*)malloc(LEN);   if (NULL== phead)     return NULL;    phead ->coef = 0;   phead->e = -1;   phead->next = NULL;    POLYN polyn;    FILE *fp1;   fopen_s(&fp1,file_name,"rt"); //改 fopen_s(&fp1,"F:\\file1.txt","rt");   if(!fp1)    {     printf("Error!Cannot open file.");      return 0;   }    while(fscanf(fp1,"%d %d\n",&polyn.coef,&polyn.e)==2)   {     //删POLYN *polynmulti = new POLYN;     //删memcpy(polynmulti,&polyn,LEN);     pnode=(struct polyn*)malloc(LEN);     if (NULL == pnode)       break;      pnode->coef = polyn.coef;     pnode->e = polyn.e;     pnode->next = NULL;      InsertPolyn(phead,pnode);//改 InsertPolyn(phead,pnode);     //删printf("coef1:%d,e1:%d\n",*phead,*pnode);     //移下 fclose(fp1);    }   fclose(fp1);//移到此处  /*删. 以下代码将只返回第2个多项式的head. 可以用以上代码完成相同功能.   FILE *fp2;   fopen_s(&fp2,"F:\\file2.txt","rt");   if(!fp2)    {     printf("Error!Cannot open file.");      return 0;   }   while(fscanf(fp2,"%d %d\n",&polyn.coef,&polyn.e)==2)   {     POLYN *polynmulti= new POLYN;     pnode=(struct polyn*)malloc(LEN);     if (NULL == pnode)       break;      pnode->coef = polyn.coef;     pnode->e = polyn.e;     pnode->next = NULL;      InsertPolyn(phead,pnode);     printf("coef2:%d,e2:%d\n",*phead,*pnode);     fclose(fp2);   } */   return phead; }  void InsertPolyn(POLYN *phead, POLYN* s) {   POLYN *p = NULL;   POLYN *q = NULL;   POLYN *r = NULL;   if(NULL == phead||NULL==s)     return;   if(NULL == phead->next)   {     phead->next = s;     return;   }    p = phead->next;   r = phead; //加   q = s;   while(p!= NULL)   {     if(p->e == q->e)     {       p->coef += q->coef;       return;     }     //删p=p->next;    //删}   //删p = p->next;   if(p->e > q->e)   {     q->next = p;      r->next = q;//改 phead->next = p;     return;   }   else   {   //删while(p!=NULL){     //删if(p->e > q->e)     //删  break;     r = p;     p = p->next;   }   //删q->next = r->next;   //删r->next = q;   }   r->next = q;//加 }

user: user-2
content: add breakpoint
user-0 提问: C语言能做出如何做出像QQ这种商用软件的界面？

回复:
user: user-1
content: 必须很可以 找一个C语言的图形库 比如ＧＴＫ

user: user-2
content: 搜搜看，应该有不少模拟QQ界面的源代码供下载。

user: user-3
content: UI library

user: user-4
content: 貌似QQ使用MFC吧，你可以百度一下，具体我不清楚（说错勿喷）。不过我看到在 win32平台下，使用duilib库做的仿QQ的界面，几乎和QQ一摸一样。楼主可以尝试一下界面库。

user: user-5
content: 用MFC吧，查下MSDN就可以写窗口程序

user: user-6
content: 腾讯这种大公司一般都会有自己的库 如果想试试，MFC,QT都可以

user: user-7
content: 这个。。C语言据说号称什么软件都能做，你可以看看这个——http://wenku.baidu.com/view/b68727fdc8d376eeaeaa31b6.html 这个看起来好复杂，唉，我是不会
user-0 提问: c语言嵌套结构体赋值问题

回复:
user: user-1
content: { { { 0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0} } }从里往外理解就可以了： { 0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0}是对数组s6_addr[16]初始化 { { 0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0} }是对结构体struct in6_addr的初始化(谁让它只有一个成员呢) { { { 0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0} } ......}就是对struct sockaddr_in6 serv1的整体初始化

user: user-0
content: 你说：{ { { 0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0} } }可以表示为结构体？

user: user-2
content: C 語言中结构体变量 可以直接 互相赋值

user: user-2
content: http://www.cnblogs.com/user-2/p/default_in_switch.html
user-0 提问: 新手求助，c语言随机数组定义问题

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复://定义一个特殊的随机二维数组，比如A[10][10]，其中的元素只有0和1，而且0的个数给定，有50个 #include <stdio.h> #include <stdlib.h> #include <time.h> int d[100]; int i,n,a,b,t; int c,j; int A[10][10]; int main() {     srand(time(NULL));     n=100;     for (i=0;i<n;i++) d[i]=i;/* 填写0～99 */     for (i=n;i>0;i--) {/* 打乱0～99 */         a=i-1;b=rand()%i;         if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}     }      for (i=0;i<10;i++) {         for (j=0;j<10;j++) {             A[i][j]=(d[i*10+j]>=50)?1:0;             printf("%d ",A[i][j]);         }         printf("\n");     }     return 0; } //1 0 0 1 1 0 1 1 0 1 //0 1 0 0 0 0 1 0 1 0 //0 1 1 1 1 0 1 1 0 0 //1 1 0 1 1 1 1 1 0 0 //1 1 1 0 0 0 1 1 0 1 //0 1 0 0 0 0 1 1 1 0 //0 0 1 0 0 1 0 0 1 1 //0 0 0 0 1 1 0 0 0 0 //1 1 0 0 0 1 0 1 0 1 //1 1 1 1 1 0 0 0 1 1 //    回的有点晚了，不过非常感谢您，虽然自己也编了个算法，感觉您的更好！受教了！

user: user-0
content: 回的有点晚了，不过非常感谢您，虽然自己也编了个算法，感觉您的更好！受教了！

user: user-1
content: //定义一个特殊的随机二维数组，比如A[10][10]，其中的元素只有0和1，而且0的个数给定，有50个 #include <stdio.h> #include <stdlib.h> #include <time.h> int d[100]; int i,n,a,b,t; int c,j; int A[10][10]; int main() {     srand(time(NULL));     n=100;     for (i=0;i<n;i++) d[i]=i;/* 填写0～99 */     for (i=n;i>0;i--) {/* 打乱0～99 */         a=i-1;b=rand()%i;         if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}     }      for (i=0;i<10;i++) {         for (j=0;j<10;j++) {             A[i][j]=(d[i*10+j]>=50)?1:0;             printf("%d ",A[i][j]);         }         printf("\n");     }     return 0; } //1 0 0 1 1 0 1 1 0 1 //0 1 0 0 0 0 1 0 1 0 //0 1 1 1 1 0 1 1 0 0 //1 1 0 1 1 1 1 1 0 0 //1 1 1 0 0 0 1 1 0 1 //0 1 0 0 0 0 1 1 1 0 //0 0 1 0 0 1 0 0 1 1 //0 0 0 0 1 1 0 0 0 0 //1 1 0 0 0 1 0 1 0 1 //1 1 1 1 1 0 0 0 1 1 //

user: user-0
content: 自己给自己顶一个，各位大神帮帮忙！
user-0 提问: 在WM_PAINT中使用StretchBlt 刷新不成功

回复:
user: user-0
content: 问题已经解决

user: user-1
content: CreateCompatibleBitmap

user: user-2
content: 可能系统判定你那个区域不需要更新，所以没效果，试试在m_uBtnState改变时主动调用InvalidateRect通知需要更新的区域...

user: user-0
content: 自己顶顶，求解答