Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言：写入某位置时，冲突，可能不止一处，希望有人帮我看看

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  #define STACK_INIT_SIZE 100; #define STACK_INCREMENT 10;  typedef struct Stack {     int *base;     int *top;     int stacksize; }Stack,*PStack;  /********???????********  *     第一个错误  *S作为参数传递 会造成浅拷贝  *初始化对象变成了拷贝对象而  *不是S本身，使用&引用，是对  *S本身进行操作，不会产生拷  *贝对象  ********???????********/ void Init_Stack(PStack &S); int StackEmpty(PStack S); void Push(PStack S,int e); void Pop(PStack S,int *e); void Detection(PStack S);  int main() {     PStack S=NULL;     int e=0;     int *c=NULL;     Init_Stack(S);     printf("请输入一行字符包含[](){}：");     e=getchar();     while(StackEmpty(S))     {         switch(e)         {             case '{':Push(S,e);break;             case '[':Push(S,e);break;             case '(':Push(S,e);break;             case '}':Pop(S,c);break;             case ']':Pop(S,c);break;             case ')':Pop(S,c);break;         }     }     if(StackEmpty(S))     {         printf("括号匹配成功!\n");     }     else printf("括号匹配不成功!\n");     return 1; }  void Init_Stack(PStack &S) {     /********???????********     *        第二个错误     *S为空指针 不能直接使用使用     ********???????********/     S = new  Stack;//申请空间          S->base=(int*)malloc(sizeof(int));          if(!S->base)     {         printf("内存分配失败！\n");         exit (0);     }     S->top=S->base;     S->stacksize=STACK_INIT_SIZE; }  int StackEmpty(PStack S) {     if(S->base==S->top) return 1;     else return 0; }  void Push(PStack S,int e) {     if(S->top-S->base>=S->stacksize)     {         S->base=(int*)realloc(S->base,(S->stacksize+10)*sizeof(int));//这里为何不能用STACK_INCREMENT代替10？         S->stacksize=S->stacksize+STACK_INCREMENT;     }     *(S->top)=e;     S->top++; }  void Pop(PStack S,int *e) {     if(S->base==S->top)     {         printf("空栈使用！\n");         exit (0);     }     S->top--;     e=S->top; }

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

回复:
user: user-1
content: 引用 9 楼 Azkrale 的回复:warning能消除最好，主要是我不知道她为什么要warning  改成3.0f也不行？

user: user-0
content: warning能消除最好，主要是我不知道她为什么要warning

user: user-2
content: 真的是，warnning嘛，又不是error

user: user-3
content: 可能是你编译器的问题吧，我用vc6.0能通过。

user: user-0
content: 谢了，搞明白了 但是为什么我第六行f1=fun(3.0) 没加f就没有提示warning啊

user: user-1
content: 把3.0与0.8分别写成3.0f与0.8f  如果不加f，常量默认当double处理

user: user-4
content: 只是一个warning而已~

user: user-5
content: 换成double 试试

user: user-6
content: #include<stdio.h> float fun(float x); int main() {     float f1,f2;     f1=fun(3.0f);     f2=fun(0.8f);     printf("f1=%f,f2=%f\n",f1,f2);     return 0; } float fun(float x) {     float y;     y=(x*x)+(4.0f*x)-5.0f;     return(y); }  常量也有类型： C++ Floating-Point Constants Floating-point constants specify values that must have a fractional part. These values contain decimal points (.) and can contain exponents.  Syntax  floating-constant :  fractional-constant exponent-partopt floating-suffixopt digit-sequence exponent-part floating-suffixopt  fractional-constant :  digit-sequenceopt . digit-sequence digit-sequence .  exponent-part :  e signopt digit-sequence E signopt digit-sequence  sign : one of  + –  digit-sequence :  digit digit-sequence digit  floating-suffix :one of  f l F L  Floating-point constants have a “mantissa,” which specifies the value of the number, an “exponent,” which specifies the magnitude of the number, and an optional suffix that specifies the constant’s type. The mantissa is specified as a sequence of digits followed by a period, followed by an optional sequence of digits representing the fractional part of the number. For example:  18.46 38.  The exponent, if present, specifies the magnitude of the number as a power of 10, as shown in the following example:  18.46e0      // 18.46 18.46e1      // 184.6  If an exponent is present, the trailing decimal point is unnecessary in whole numbers such as 18E0.  Floating-point constants default to type double. By using the suffixes f or l (or F or L — the suffix is not case sensitive), the constant can be specified as float or long double, respectively.  Although long double and double have the same representation, they are not the same type. For example, you can have overloaded functions like  void func( double );  and   void func( long double );

user: user-7
content: 你用的是什么编译器，我用tcc 0.9.26 -win64 的编译不会出错呀， f1=16.000000，f2=-1.160000
user-0 提问: 求 C99 资料!!

回复:
user: user-0
content: 引用 2 楼 paschen 的回复:参看：http://download.csdn.net/detail/computerclpp/7536039 谢谢

user: user-1
content: 参看：http://download.csdn.net/detail/computerclpp/7536039

user: user-2
content: 有官方标准文档吧。
user-0 提问: 在函数定义中能否使得一个结构体中的成员作为形式参数？

回复:
user: user-0
content: 谢谢诸位，同志

user: user-0
content: 引用 3 楼 akirya 的回复:成员变量指针 typedef struct A {     int S; }B ;  void func( int (B::*p) ) { 	B x; 	(x.*p) = 3; 	printf( "%d",x.S); }  int main ()  { 	int (B::*p) = &B::S;//没必要添加吧！ 	func(&B::S);     return 0; }  int (B::*p) = &B::S;//没必要添加吧！

user: user-1
content: 引用 4 楼 CjavaC01 的回复:[quote=引用 3 楼 akirya 的回复:] 成员变量指针 typedef struct A {     int S; }B ;  void func( int (B::*p) ) { 	B x; 	(x.*p) = 3; 	printf( "%d",x.S); }  int main ()  { 	int (B::*p) = &B::S;//没必要添加吧！ 	func(&B::S);     return 0; }  int (B::*p) = &B::S;//没必要添加吧！[/quote] 没必要，只是顺手写上去的。

user: user-1
content: 成员变量指针 typedef struct A {     int S; }B ;  void func( int (B::*p) ) { 	B x; 	(x.*p) = 3; 	printf( "%d",x.S); }  int main ()  { 	int (B::*p) = &B::S; 	func(&B::S);     return 0; }

user: user-2
content: #include <stdio.h>  typedef struct A{ 	int s; }B;  /*你用形参就是传地址*/ void la(int *t){ 	printf("%d\n",*t); } int main(void){ 	B b; 	b.s=10; 	la(&(b.s)); 	return 0; }

user: user-3
content: void la(int S) {     //.... }  调用时假如a是该结构体对象： la( a. S );
user-0 提问: 最后剩下的是几号，求大神指导，最好每一步都解析一下

回复:
user: user-1
content: 仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }

user: user-2
content: #include<stdio.h> #include<stdlib.h> void main() { 	int m,n; 	int i = 0 ; 	int *start; 	int *p; 	int sum = 0; 	int j; 	printf("please input m\n"); 	scanf("%d",&m); 	printf("please input n\n"); 	scanf("%d",&n); 	start = malloc(m * sizeof(int)); 	if(start ==NULL) 		exit(1); 	 	/* 	**全部赋值为1 	*/ 	for(p = start,j = 0;j < m;j++) 	{ 		*p++ = 1; 	} 	 	 	while(i < m) 	{ 		for(j = 0,p = start;j < m;p++,j++) 		{ 			sum = sum + *p; 			if(sum ==n) 			{ 				i++; 				printf("%d\n",j+1); 				sum = 0; 				*p = 0; 			} 		} 		sum = n-1; 	} }  供参考，这里是m个人，n为周期
user-0 提问: 求Sn=a+aa+aaa+⋯+aa⋯aaa（有n个a）之值，其中a是一个数字。例如：2+22+222+2222+22222（n=5），n由键盘输入。

回复:
user: user-1
content: 原来二维码还可以表示一个字符！涨姿势了！！

user: user-1
content: 引用 9 楼 mewiteor 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] [quote=引用 6 楼 fly_dragon_fly 的回复:] 我记得这有个坑, a不一定是个位数, 如果a=10了 10是一个数字吗？[/quote]那万一a不是十进制数字呢？[/quote] 万一a是一亿进制数呢？哪找一亿个不同的字符表示其各位数字呢？！

user: user-2
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 6 楼 fly_dragon_fly 的回复:] 我记得这有个坑, a不一定是个位数, 如果a=10了 10是一个数字吗？[/quote]10有2位, 它应该是一个数字吧, 好吧, 题目要求确实不明确, 可能确实只要一位数

user: user-3
content: 引用 11 楼 zhao4zhong1 的回复:[quote=引用 9 楼 mewiteor 的回复:] [quote=引用 8 楼 zhao4zhong1 的回复:] [quote=引用 6 楼 fly_dragon_fly 的回复:] 我记得这有个坑, a不一定是个位数, 如果a=10了 10是一个数字吗？[/quote]那万一a不是十进制数字呢？[/quote] 万一a是一亿进制数呢？哪找一亿个不同的字符表示其各位数字呢？！[/quote]                                                                            100000000

user: user-4
content: int main(int argc, char *argv[]) {     int i = 0;     int n = 0;     int a = 0;     unsigned long long t = 0;     unsigned long long s = 0;      while (1) {         printf("请输入 a 和 n：\n");         scanf("%d %d", &a, &n);         if (a < 1 || a > 9) {             printf("数字 a 不合法！\n");             continue;         }         if (n < 1 || a > 18) {             printf("数字 n 不合法！\n");             continue;         }         break;     }      while (i++ < n) {         t *= 10;         t += a;         printf("%llu%c", t, i < n ? '+' : '=');         s += t;     }     printf("%llu\n", s);          return 0; }

user: user-2
content: 我记得这有个坑, a不一定是个位数, 如果a=10了

user: user-3
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 6 楼 fly_dragon_fly 的回复:] 我记得这有个坑, a不一定是个位数, 如果a=10了 10是一个数字吗？[/quote]那万一a不是十进制数字呢？

user: user-1
content: 引用 6 楼 fly_dragon_fly 的回复:我记得这有个坑, a不一定是个位数, 如果a=10了 10是一个数字吗？

user: user-5
content: 你上面那个应该是%d%d

user: user-3
content: 最后一个代码中：a=a*10+a;之后,a就不是一位数了，而上一个代码中b=b*10+a;中的a一直没有变，一直是一位数。

user: user-3
content: sum和s没有初始化

user: user-0
content: #include <stdio.h> void main() {  double a,b,sn=0;  int i,n;  printf("please input a:");  scanf("%lf",&a);  printf("please input n:");  scanf("%d",&n);  b=a;  for(i=1;i<=n;i++){   sn+=b;   b=b*10+a;  }   printf("Sn=%.0lf",sn); 这是对的

user: user-0
content: #include <stdio.h> void main() {  double a,b,sn=0;  int i,n;  printf("please input a:");  scanf("%lf",&a);  printf("please input n:");  scanf("%d",&n);   for(i=1;i<=n;i++){   sn+=a;   a=a*10+a;  }   printf("Sn=%.0lf",sn); 这是错的
user-0 提问: 初学C语指针 这个例题如何解答？求大神！谢！

回复:
user: user-1
content: 我觉得好像在输出的时候改一下 伪代码 for(int i=0; i<NUM-2;i++)   if(a[i]为字符&&a[i+1]为字符）输出a[i]#   else 输出a[i] 输出a[NUM-1] 判断是否字符std空间中有此函数

user: user-2
content: 先malloc足够的内存，copy字符串到 *p ,strlen求长度，在从后往前插，比如： *(p+len+1)=*p(len);len--  以此类推知道len=1;   len初始为len=strlen(p).  我理解这样写最好，望高手指点

user: user-3
content: 这样连*p 的使用都省了 完全满足需求O(∩_∩)O

user: user-4
content: char a[NUM],*p;     p =a;     while(~(*p=getchar())){         if(*p==' '||*p=='\n') {             *--p ='\0';             p =a;             printf("%s\n",a);             continue;         }         if(p!=a) p[-1] ='#';         p+=2;     }

user: user-5
content: 不能存为新数组吧？

user: user-6
content: //从键盘输入字符串以回车键结束，在每两个字符间插入一个“#”构成新的字符串。例如输入abc，输出a#b#c #include <string.h> #include <stdio.h> int main() {     char a[2];     //不允许再定义新的变量     a[0]=getchar();     while (1) {         if (a[0]=='\n') {             putchar(a[0]);             break;         } else {             a[1]=getchar();             if (a[1]=='\n') {                 putchar(a[0]);                 putchar(a[1]);                 break;             } else {                 putchar(a[0]);                 putchar('#');                 a[0]=a[1];             }         }     }     return 0; } //输入：回车 //输出：回车 // //输入：1回车 //输出：1回车 // //输入：12回车 //输出：1#2回车 // //输入：123回车 //输出：1#2#3回车 //

user: user-7
content: 应该没办法存为新的数组吧， 是不是直接在打印的时候遍历并穿插#呢

user: user-7
content: 引用 2 楼 paschen的回复: int main() { 	char a[100]; //输入的字符串 	scanf("%s", a); 	char b[200]; //修改后的字符串 	char* p; 	p = a; 	int i; 	i = 0; 	while(*p) 	{ 		b[i++] = *p++; 		b[i++] = '#'; 	} 	b[i-1] = '\0'; 	printf("\n%s", b); 	return 0; }  他不让定义新的变量

user: user-8
content: int main() { 	char a[100]; //输入的字符串 	scanf("%s", a); 	char b[200]; //修改后的字符串 	char* p; 	p = a; 	int i; 	i = 0; 	while(*p) 	{ 		b[i++] = *p++; 		b[i++] = '#'; 	} 	b[i-1] = '\0'; 	printf("\n%s", b); 	return 0; }

user: user-9
content: 简单的办法就是插入咯。从后往前差
user-0 提问: 打印函数名,函数名前加n个*为什么结果相同?

回复:
user: user-1
content: C11 draft n1570 6.3.2.1 Lvalues, arrays, and function designators 4 A function designator is an expression that has function type. Except when it is the operand of the sizeof operator, the _Alignof operator, or the unary & operator, a function designator with type ‘‘function returning type’’ is converted to an expression that has type ‘‘pointer to function returning type’’.  6.5.3.2 Address and indirection operators 4 The unary * operator denotes indirection. If the operand points to a function, the result is a function designator; if it points to an object, the result is an lvalue designating the object. If the operand has type ‘‘pointer to type’’, the result has type ‘‘type’’. If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined.  function designator 会自动转换成 pointer to function, 加一个 * 之后变成 function designator ，然后又自动转换成 pointer to function，周而复始，无论你加多少 * ，最后拿到的还是一个 pointer to function 。

user: user-2
content: typedef void (*FUNC) (); FUNC p =func; 你可以想想上面的代码 函数会转换成它的指针类型 就像数组会变成指针一样
user-0 提问: c语言求大神指点，提交题目时出现了问题，数组访问越界

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

user: user-2
content: 人家要求1000你只有100当然越界
user-0 提问: C语言字符串查找函数问题

回复:
user: user-0
content: 已经知道了 谢谢老师  fgets 读入字符串 默认会把回车一起读进去 导致关键字后面跟个回车。。。。。。 所以提取不出来

user: user-1
content: 引用 2 楼 qq_31741093 的回复:调半天了  就是不知道 那里出问题 只要关键字位置 不要出现在第一个位置 就没事 否则就出不来 有时不将“调用函数名字＋各参数值，进入函数后各参数值，中间变量值，退出函数前准备返回的值，返回函数到调用处后函数名字＋各参数值＋返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的，包括捕获各种异常、写日志到屏幕、单步或设断点或生成core文件、……这些方法都不行！ 写日志到文件参考下面： #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef WIN32     #include <windows.h>     #include <io.h> #else     #include <unistd.h>     #include <sys/time.h>     #include <pthread.h>     #define  CRITICAL_SECTION   pthread_mutex_t     #define  _vsnprintf         vsnprintf #endif //Log{ #define MAXLOGSIZE 20000000 #define MAXLINSIZE 16000 #include <time.h> #include <sys/timeb.h> #include <stdarg.h> char logfilename1[]="MyLog1.log"; char logfilename2[]="MyLog2.log"; static char logstr[MAXLINSIZE+1]; char datestr[16]; char timestr[16]; char mss[4]; CRITICAL_SECTION cs_log; FILE *flog; #ifdef WIN32 void Lock(CRITICAL_SECTION *l) {     EnterCriticalSection(l); } void Unlock(CRITICAL_SECTION *l) {     LeaveCriticalSection(l); } #else void Lock(CRITICAL_SECTION *l) {     pthread_mutex_lock(l); } void Unlock(CRITICAL_SECTION *l) {     pthread_mutex_unlock(l); } #endif void LogV(const char *pszFmt,va_list argp) {     struct tm *now;     struct timeb tb;      if (NULL==pszFmt||0==pszFmt[0]) return;     _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);     ftime(&tb);     now=localtime(&tb.time);     sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);     sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );     sprintf(mss,"%03d",tb.millitm);     printf("%s %s.%s %s",datestr,timestr,mss,logstr);     flog=fopen(logfilename1,"a");     if (NULL!=flog) {         fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);         if (ftell(flog)>MAXLOGSIZE) {             fclose(flog);             if (rename(logfilename1,logfilename2)) {                 remove(logfilename2);                 rename(logfilename1,logfilename2);             }         } else {             fclose(flog);         }     } } void Log(const char *pszFmt,...) {     va_list argp;      Lock(&cs_log);     va_start(argp,pszFmt);     LogV(pszFmt,argp);     va_end(argp);     Unlock(&cs_log); } //Log} int main(int argc,char * argv[]) {     int i; #ifdef WIN32     InitializeCriticalSection(&cs_log); #else     pthread_mutex_init(&cs_log,NULL); #endif     for (i=0;i<10000;i++) {         Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);     } #ifdef WIN32     DeleteCriticalSection(&cs_log); #else     pthread_mutex_destroy(&cs_log); #endif     return 0; } //1-78行添加到你带main的.c或.cpp的那个文件的最前面 //81-85行添加到你的main函数开头 //89-93行添加到你的main函数结束前 //在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中

user: user-1
content: 贴完整的代码上来，不要贴截图。

user: user-0
content: 调半天了  就是不知道 那里出问题 只要关键字位置 不要出现在第一个位置 就没事 否则就出不来

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

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

user: user-1
content: C#入门经典，多看书多思考多实践，编程经验需要积累，只要有兴趣，学编程并不难

user: user-2
content: 紧跟MSDN中的C#入门教程一步一个脚印走。
user-0 提问: 关于注释

回复:
user: user-1
content: /* */   可以跨越多行，这两个符号之间的都算注释的内容 //  这个只是从此符号开始，到该行结束部分做为注释  注释只是为了让人读的，方便更好的去理解代码，不影响程序的执行，编译时注释均会被忽略

user: user-2
content: 要注释why 不要注释what、how、who、when
user-0 提问: C语言如何从外部，屏蔽掉调用API时所抛出的消息提示框

回复:
user: user-1
content: 引用 2 楼 chen_zhi_heng 的回复:[quote=引用 1 楼 paschen的回复:]后台线程监视，如果找到该窗口，发消息关闭之 可是这个api会报很多不同的消息框，请问我该如何获得它的句柄？句柄是固定的吗？仅仅用活动窗口去取句柄会不会有问题？[/quote]  也可以根据窗口名，FindWindow

user: user-2
content: 改为用WinExec("xxx.exe e ... ",SW_HIDE);调用命令行版本的xxx.exe解压。

user: user-0
content: 引用 1 楼 paschen的回复:后台线程监视，如果找到该窗口，发消息关闭之 可是这个api会报很多不同的消息框，请问我该如何获得它的句柄？句柄是固定的吗？仅仅用活动窗口去取句柄会不会有问题？

user: user-1
content: 后台线程监视，如果找到该窗口，发消息关闭之

user: user-1
content: 引用 5 楼 chen_zhi_heng 的回复:[quote=引用 4 楼 paschen的回复:][quote=引用 2 楼 chen_zhi_heng 的回复:] [quote=引用 1 楼 paschen的回复:]后台线程监视，如果找到该窗口，发消息关闭之 可是这个api会报很多不同的消息框，请问我该如何获得它的句柄？句柄是固定的吗？仅仅用活动窗口去取句柄会不会有问题？[/quote]  也可以根据窗口名，FindWindow[/quote] 感谢。再追问一下，findwindow这个函数传入的标题名称必须完全匹配。有没有方法只匹配一部分？比如我要屏蔽的报错窗口标题都是（unlha32。。。。）开头。[/quote]  那就需要用EnumWindow遍历窗口然后进行判断

user: user-0
content: 引用 4 楼 paschen的回复:[quote=引用 2 楼 chen_zhi_heng 的回复:] [quote=引用 1 楼 paschen的回复:]后台线程监视，如果找到该窗口，发消息关闭之 可是这个api会报很多不同的消息框，请问我该如何获得它的句柄？句柄是固定的吗？仅仅用活动窗口去取句柄会不会有问题？[/quote]  也可以根据窗口名，FindWindow[/quote] 感谢。再追问一下，findwindow这个函数传入的标题名称必须完全匹配。有没有方法只匹配一部分？比如我要屏蔽的报错窗口标题都是（unlha32。。。。）开头。
user-0 提问: 问

回复:
user: user-1
content: 合法字符为 字母,数字,下划线, 不能以数字开头, 不能用保留字, 大小写敏感

user: user-2
content: 注意是大写，C中的关键字是for

user: user-2
content: 第一个和第四个都不是字符或_开头，第二个是关键字
user-0 提问: 浮点数float的范围分析有疑惑

回复:
user: user-1
content: http://bbs.csdn.net/topics/390676437

user: user-2
content: 问题在于阶码不能全为1, 全为1用于特殊用途, 尾数0则为INF, 不为0则为NAN float 最大时阶码为127, 尾数全1, 应该就是2^127*(二进制小数)(1.1111...(小数点后23位1) 略接近于2^128

user: user-0
content: 我已经理解了，具体分析在博客：http://blog.csdn.net/changlishuang/article/details/49853327  简单描述原因就是：根据IEEE754规定，第一种是规约数，第二种是非规约数       规约数尾数前面默认加1，非规约数尾数前面默认加0      而且指数为1-254，不是0-255，实际指数就是-126-127      在而且非规约数的指数偏移值比规约数小1；规约数最小有偏移指数1，对应实际值-126；那么非规约数最小有偏移指数为0，对应实际值-126        float的最大绝对值:0111  1111  0111  1111 1111 1111 1111  1111 (规约数)       即              + (1.1..1)  *      (2^127)    ≈   (2-2^-23) * 2^128   ≈    3.4 * 10^38        float的最小绝对值:0000  0000  0000  0000  0000 0000 0000 0001 (非规约数)       即              +(0.0...1)  *      (2^-126）≈   (1*2^-23) * 2^-126 = 2 ^-149  ≈  1.4 * 10^-45  其实最终的原因都是归于IEEE754规定设定来的。

user: user-3
content: 1) 指数部分 FF 被用来表示 Infinity （无穷大）。正常数字指数部分只到 FE 。  2) 指数部分 00 用来 0.0， -0.0 和 denormalized number 。denormalized number 表示方法与其它正常数字不同，即它开始的一位并不是一个隐含的1，而是0.  +(0.0..01)  *    (2^-127)   ≈    1  *  (2^-149)

user: user-4
content: 最大绝对值肯定不会后面全是1啊，全是1指数就是负数了

user: user-5
content: 测试一下  #include<iostream> #include <limits> using namespace std;  int main() {     cout<<endl<<endl;     cout<<"float:  \t"<<sizeof(float)<<"  字节";     cout<<"\t值 域   +-  "<<(numeric_limits<float>::max)();     cout<<"\t……    " <<(numeric_limits<float>::min)()<<endl;     cout<<"double: \t"<<sizeof(double)<<"  字节";     cout<<"\t值 域   +-  "<<(numeric_limits<double>::max)();     cout<<"\t……    "<<(numeric_limits<double>::min)()<<endl;     cout<<"long double:\t"<<sizeof(long double)<<"  字节";     cout<<"\t值 域   +-  "<<(numeric_limits<long double>::max)();     cout<<"\t……    "<<(numeric_limits<long double>::min)()<<endl;     return 0; }
user-0 提问: 麻烦大神们看一下，很简单的一道题。代码正确，但是输入好像有问题

回复:
user: user-0
content: 我还一本正经的找了半天资料，真无语，多谢

user: user-1
content: scanf("%d-%month-%day",&year,&month,&day); 这句应该改成 scanf("%d-%d-%d",&year,&month,&day); 吧
user-0 提问: 宏调用实现小写转大写的问题

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

user: user-2
content: 宏展开后是这个样子：buf2[i] = ((*p++)>='a'&&(*p++)<='z'?(*p++)+('A'-'a'):(*p++));

user: user-2
content: 用内联函数吧，用宏很容易出错，你宏中的每一处c都会换成*p++，执行时p会执行多次p++操作，估计并不是楼主想要的
user-0 提问: 构建二叉链表（报错！）

回复:
user: user-0
content: 还不行，我再想想，先记录下。  #include <stdio.h> #include <string.h> #include <stdlib.h>  typedef struct BiNode { 	char data;  	BiNode* LChild; 	BiNode* RChild;	 }BiNode,*BiTree;  BiTree Trans(char *preorder,char *inoreder,int len) { 	char *p,*q; 	BiTree root; 	int i=0;  	if(len<=0) 		return NULL;   	root->data = preorder[0];   	root->LChild = NULL;  	root->RChild = NULL;   	while(i<len)  	{   		if(inoreder[i]==preorder[0])    			break;   		i++;  	}  	p = preorder+1;                   	q = inoreder;                 	root->LChild = Trans(p,q,i);    	p = preorder+i+1;                 	q = inoreder+i+1;             	root->RChild = Trans(p,q,len-i-1);    	return root; }  void PreOrder(BiNode* R) { 	if(R!=NULL) 		{ 			printf("%d",R->data); 			PreOrder(R->LChild); 			PreOrder(R->RChild); 		} }  void InOrder(BiNode* R) { 	if(R!=NULL) 		{ 			InOrder(R->LChild); 			printf("%d",R->data);			 			InOrder(R->RChild); 		} }  void PostOrder(BiNode* R) { 	if(R!=NULL) 		{			 			PostOrder(R->LChild); 			PostOrder(R->RChild); 			printf("%d",R->data); 		} }   void main() { 	BiTree root; 	char *start,*medium,*end; 	int i,n,num; 	printf("-------------以先序和中序建立二叉树-----------------\n"); 	printf("Please input the number of nodes in the binary tree\n"); 	scanf("%d",&num); 	start=(char*)(malloc (num*sizeof(char))); 	medium=(char*)(malloc (num*sizeof(char))); 	printf("Please input the preorder of the binary tree \n"); 	for(i=0;i<num;i++) 	{ 		scanf("%d",&start[i]); 	} 	printf("Please input the inoreder of the binary tree\n"); 	for(i=0;i<num;i++) 	{ 		scanf("%d",&medium[i]); 	}		 	 	root=Trans(start,medium,num); 	printf("The postorder of the binary tree is:\n"); 	PostOrder(root); 	}

user: user-1
content: 最前面的结构体应该改成这样吧，因为你BiTree是做一种类型：   typedef struct BiNode { 	char data;  	BiNode* LChild; 	BiNode* RChild;    }BiNode,*BiTree;
user-0 提问: Glibc提供的TCP相关API

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:参看：http://download.csdn.net/download/jinlxz/4669382  多谢

user: user-1
content: 参看：http://download.csdn.net/download/jinlxz/4669382
user-0 提问: 离散最大似然解码运行不能，似乎是栈的问题

回复:
user: user-1
content: 栈大小通常是1M，可以设置默认栈大小 不过对于大数组建议使用动态分配

user: user-1
content: 数组太大了，栈内存已经不够
user-0 提问: VC++6.0如何基于对话框在模态编辑框中输入四个数值点击确定按钮按大小依次显示在主对话框四个静态文本中？

回复:
user: user-1
content: 引用 3 楼 lxf129 的回复:[quote=引用 1 楼 paschen的回复:]添加一个对话框，在上面摆放需要的控件，为对话框关联一个类，在需要的地方使用DoModal方法创建一个模态对话框，在对话框中的按钮点击消息中实现比较与输出 比较和输出，大神能在详细些吗？[/quote]  GetDlgItemText取得字符串 _ttoi转成数值 比较，然后SetDlgItemText设置回去

user: user-0
content: 引用 1 楼 paschen的回复:添加一个对话框，在上面摆放需要的控件，为对话框关联一个类，在需要的地方使用DoModal方法创建一个模态对话框，在对话框中的按钮点击消息中实现比较与输出 比较和输出，大神能在详细些吗？

user: user-2
content: 利用GetDlgItemText(控件ID，接收控件字符串的Cstring)  然后解析EDIT内容中的字符串拆分来看。  利用 SetDlgItemText(控件ID，设置字符串） 来进行设置静态编辑框

user: user-1
content: 添加一个对话框，在上面摆放需要的控件，为对话框关联一个类，在需要的地方使用DoModal方法创建一个模态对话框，在对话框中的按钮点击消息中实现比较与输出
user-0 提问: C语言数组初始化问题咨询

回复:
user: user-1
content: 不要在看老谭的了，书挺老的了，可能那本书在当时很权威，但是语法更新了几代，换本书看吧

user: user-2
content: 就是说如果是 int* p = new int[10]这种方式申请的就不行

user: user-2
content: 这里的静态是指在栈上分配的，相对于动态在堆上分配的 而不是static的意思

user: user-3
content: 静态存储的静态不是static的意思吧

user: user-0
content: 书是老谭第一版，第82页一维数组初始化，编译器TC2.0，不是gcc，像各位说的应该是有问题，像C primer plus这书没规定说要静态存储，谢谢各位。

user: user-4
content: 说明语法更新了~ 不要纠结这种没有意义的事情

user: user-5
content: 你这说的很抽象啊，是一个函数，还是一个模块呢？

user: user-6
content: 就因为你现在还看老谭的书
user-0 提问: C 一例疑惑 请大侠解答程序运行的步骤 不甚感谢！！！

回复:
user: user-1
content: 估计是这些case 1: putchar(c + 4);后面没有加break的原因。。。输出的内容让你疑惑了。。。

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

user: user-3
content: 看来看去不知道  你在问什么

user: user-4
content: 1 输入遇回车结束 2 输入   输出    0       2   1        3   2        66    3       77    4       88    5       99    其它 c+2 (不知道是什么)
user-0 提问: 菜鸟求问关于题目，删除字符串中的子串

回复:
user: user-1
content: 引用 7 楼 paschen 的回复:The strcat function appends strSource to strDestination and terminates the resulting string with a null character. The initial character of strSource overwrites the terminating null character of strDestination. The behavior of strcat is undefined if the source and destination strings overlap.  你执行strcat时，源字符串与目的字符串区域有一部分是重合的，行为是不确定的  你单步调试你的代码后会发现，stract后，字符串没有以\0结尾了，以致后面的操作出错，原因如上所述

user: user-2
content: 仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     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-1
content: The strcat function appends strSource to strDestination and terminates the resulting string with a null character. The initial character of strSource overwrites the terminating null character of strDestination. The behavior of strcat is undefined if the source and destination strings overlap.  你执行strcat时，源字符串与目的字符串区域有一部分是重合的，行为是不确定的

user: user-0
content: 引用 3楼github_27756899 的回复:while(strstr( a, b)!=NULL){//比如a为thisisatest b为is    front=strstr( a, b);//front指向搜索出a中第一个字符的位置    rear=front+cnt;  //rear等于去掉子字符串的开始 isatest   *front='\0';    //修改的部分   strcat( a, rear);//复制之后a为thisatest    //修改的部分    }编译通过了，然后一运行就停止运行了，不止一次了，是不是编译器有问题？

user: user-3
content: a=strcat( a, rear);//复制之后a为thisatest  你的a不是指针，不能直接赋值。

user: user-0
content: 木有人吗，求大神解答

user: user-0
content: 引用 4 楼 paschen 的回复:a=strcat( a, rear); 改成 strcat( a, rear); 拼接后的字符串已经在a中了  如果你要一个用其返回值，可以这样写：  char* s; s = strcat( a, rear);  照你说的改了，编译通过了，然后一运行就停止运行了，不止一次了，是不是编译器有问题？

user: user-1
content: a=strcat( a, rear); 改成 strcat( a, rear); 拼接后的字符串已经在a中了  如果你要一个用其返回值，可以这样写：  char* s; s = strcat( a, rear);

user: user-4
content: while(strstr( a, b)!=NULL){//比如a为thisisatest b为is    front=strstr( a, b);//front指向搜索出a中第一个字符的位置    rear=front+cnt;  //rear等于去掉子字符串的开始 isatest   *front='\0';    //修改的部分   strcat( a, rear);//复制之后a为thisatest    //修改的部分    }
user-0 提问: 计算机原理中的位向量表示集合的原理是什么？

回复:
user: user-1
content: 引用 5 楼 BlueBloodSpider 的回复:[quote=引用 楼主 Last_stardust的回复:]如题，书上给出的例子是这样的： a=[01101001]表示{0，3，5，6} b=[01010101]表示{0，2，4，6} 最终a&b={01000001}={0，6}  谁能解释一下这8位二进制是如何表示集合的呢？ 深入理解计算机系统[/quote] fud软工硕士考纲指定教材

user: user-2
content: 引用 楼主 Last_stardust的回复:如题，书上给出的例子是这样的： a=[01101001]表示{0，3，5，6} b=[01010101]表示{0，2，4，6} 最终a&b={01000001}={0，6}  谁能解释一下这8位二进制是如何表示集合的呢？ 深入理解计算机系统

user: user-3
content: 向量的位置，和集合的元素在等于1的时候对应  以题目的例子来讲，a=[01101001]，从右边数起，第0、3、5、6位是1，所以就表示了0、3、5、6这4个数，b的话同理，对应的是0、2、4、6这4个数。之后的并集就不用再说了吧。

user: user-4
content: 右边是最低位，1表示存在，0表示不存在

user: user-5
content: 参考：集合的特征函数

user: user-6
content: 第 i 位 为 1 表示 i 在 集合里。
user-0 提问: 有没有谁会求Huffman树的非递归算法

回复:
user: user-1
content: http://blog.csdn.net/sinat_26106275/article/details/49867493

user: user-2
content: http://blog.csdn.net/zhangxiangdavaid/article/details/37696533

user: user-0
content: 忘了说是求WPL，哈哈
user-0 提问: C语言问题

回复:
user: user-1
content: http://www.cppblog.com/woaidongmao/archive/2009/09/25/97245.html

user: user-0
content: 什么鬼，求解啊

user: user-2
content: 少年不如我帮你写吧٩(๑`^´๑)۶
user-0 提问: 建立子窗口问题

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！

user: user-0
content: 设置了一下属性:WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW 窗口是出来了，可运行几秒可，程序死机了，崩溃了.

user: user-2
content: 用spy++看一下

user: user-0
content: 哪位帮看看，谢谢

user: user-0
content: 引用 1 楼 user-3 的回复:看 GetLastError 谢谢，用此函数查看得出： (1410)- 类别已存在。  应该是类名问题，char szClass[] = "Class9";   1.  我这函数是写在dll中的，发现第一调用没问题，再次调用就会报1410错误号，调用程序结束后，这个注册类还是在内存中存在，没有释放,我的推断， 2.  首次调用时输出ok,成功调用，但并没有出现子窗口，什么原因?

user: user-3
content: 看 GetLastError
user-0 提问: 在一个排好序的数组中添加一个数使它按原来的顺序输出   运行结果有问题  大神帮帮我

回复:
user: user-1
content: 引用 3 楼 qq_30931153 的回复:#include<stdio.h>  void add(int num[6]);   int main() { 	int i;     int num[6]={2 , 4 , 6 , 8 , 9};      add (num);     for(i=0;i<6;i++) 	{     printf("%d",num[i]); 	}  	return 0; } void add(int num[6]) {     int i , j , a ,k ;      printf( "输入要插入的数=\n" ) ;     scanf_s( "%d" , &a );      for(i=0;i<5;i++)     {         if(a<num[i])         break;     }     for(j=5;j>=i+1;j--)     {   k=j-1;        num[j]=num[k];      }  	num[i]=a; }           // 但是运行结果最后一个数总是5  没有啊，可以正常运行，插入数后重新排列好

user: user-2
content: #include<stdio.h>  void add(int num[6]);   int main() { 	int i;     int num[6]={2 , 4 , 6 , 8 , 9};      add (num);     for(i=0;i<6;i++) 	{     printf("%d",num[i]); 	}  	return 0; } void add(int num[6]) {     int i , j , a ,k ;      printf( "输入要插入的数=\n" ) ;     scanf_s( "%d" , &a );      for(i=0;i<5;i++)     {         if(a<num[i])         break;     }     for(j=5;j>=i+1;j--)     {   k=j-1;        num[j]=num[k];      }  	num[i]=a; }           // 但是运行结果最后一个数总是5

user: user-0
content: 那应该怎么改呢

user: user-3
content: 数组越界。  你的数组只有 5 个位置，再插入一个数就不够用了。
user-0 提问: Visual Studio编译win32控制台程序时总是弹出两个cmd窗口

回复:
user: user-0
content: 嗯嗯 版主在我们眼里都是大的

user: user-1
content: 嗯嗯，另外我只是小版主

user: user-0
content: 引用 1 楼 user-1 的回复:什么叫先后弹出两个控制台窗口，不会啊，有具体代码？ 多写大版主关心。问题解决了。是杀毒软件avast的问题。我把avast停了后就okey了。 代码很简单。我是用helloworld测试的。 IDE：vs2010 文件：helloworld.c 代码： #include<stdio.h>  int main() { 	printf("hello,world\n"); 	getchar(); }

user: user-1
content: 什么叫先后弹出两个控制台窗口，不会啊，有具体代码？
user-0 提问: c语言中**.exe已触发了一个断点

回复:
user: user-1
content: 请判断fscanf函数的返回值。

user: user-0
content: 引用 2楼赵4老师 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。我一步一步调试，他说我栈溢出，但是我查找了一下，发现栈没有溢出的

user: user-0
content: 引用 1楼user-2 的回复:这样呢？  if ((fp = fopen(f, "rt")) == 0) { printf("\n\n error!"); return; }这样子还是不行，

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

user: user-2
content: 这样呢？  if ((fp = fopen(f, "rt")) == 0) { printf("\n\n error!"); return; }
user-0 提问: c语言 从文件中读取数据 

回复:
user: user-1
content: 直接：  fscanf(fp, "%s%s%d%d%d", a[i].number, a[i].name, &(a[i].score[0]), &(a[i].score[1], &(a[i].score[2])));

user: user-2
content: for(i=0;i<5;i++)  {             fscanf(fp,"%d%s",&a[i].number,a[i].name);        for(j=0;j<3;j++)         {   fscanf(fp,"%d",&a[i].score[j]);          }  }   printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
user-0 提问: 求大神解释一下，我知道是求1到20的阶乘和，但是不明白n=n*j;什么意思

回复:
user: user-1
content: n=n*j;  每种语言都有这种表达式，就是用n的旧值乘以 j 结果赋值给 n； C,C++一般简化为 n *= j; 具体在程序里的作用，就是实现i 的阶乘。因为循环种 j 分别为i，。。。1； 不过，程序可能是错误的。 因为 n应该对于每个i初始化为1， 开始计算阶乘。

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

user: user-3
content: 添加printf语句，查看~，即可理解

user: user-4
content: 内层循环求阶乘，外层循环求和，n=n*j;  就是让n依次乘每个数啊 比如你 i 为10 的时候，循环完相当于 n = 10*9*8*...*1
user-0 提问: 求大神给我解释这些代码。。。

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

user: user-2
content: for(int i=1;i<=20;i++) { for(int j=i;j>=1;j--) { n=n*j; } s=s+n; } i=1时，j=i=1初始化内层for, 判断j>=1是否成立，成立就执行花括号{}内的语句n=n*j;(右边运算完后把结果赋给左边的变量n） 如果j>=1不成立，for语句结束，执行下面（for语句下面）的语句s=s+n; 外层的for语句执行流程与内层for一样。

user: user-3
content: 内层循环求阶乘，外层循环求和，n=n*j;  就是让n依次乘每个数啊 比如你 i 为10 的时候，循环完相当于 n = 10*9*8*...*1
user-0 提问: 被编译器和内存对齐搞死了，求救

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

user: user-2
content: 引用 1 楼 elimio 的回复:知道了，是内存对齐的问题，这个编译器好坑！8bit的数据类型都是按16位对齐的  这个参数可以设置的

user: user-3
content: 你这种情况我遇到过，可以尝试原来的工程的编译器吧，不然工程量会很大的。

user: user-0
content: 知道了，是内存对齐的问题，这个编译器好坑！8bit的数据类型都是按16位对齐的
user-0 提问: 高斯消去法用c语言 编程，可是不知那错了，求高手指点。。。

回复:
user: user-0
content: for循环有3个，还有k 的，输出也有错

user: user-1
content: 高斯消元吗？ 公式: M[i] - (i * M[i]) = 0 (i == 1)
user-0 提问: 有关哈夫曼树的编码程序问题求解

回复:
user: user-1
content: 试修改以下3行：        else cd[--start]='1';//改 else cd[--start]=='1';  int main() {   HuffmanTree HT;   HuffmanCode HC;   int *w;   int n,i;   //移到下面 HC=(HuffmanCode)malloc(n*sizeof(HuffmanCode));   //移到下面 w=(int *)malloc(n*sizeof(int));   printf("请输入结点个数：");   scanf("%d",&n);   HC=(HuffmanCode)malloc(n*sizeof(HuffmanCode));//移到这里   w=(int *)malloc(n*sizeof(int));//移到这里
user-0 提问: C语言小BUG（已找到错误代码，，在线等  急，）

回复:
user: user-0
content: 已解决      找到问题所在了

user: user-0
content: 引用 1 楼 user-1 的回复:scanf("%c", &cha1);取地址忘了    不过还是有错，

user: user-1
content: scanf("%c", &cha1);
user-0 提问: 小弟写了一个文件的读写程序 有点小问题 求指导

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

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

user: user-2
content: 换个编译器吧，可能是getw, putw不兼容的问题？

user: user-0
content: 引用 3 楼 u012033027 的回复:换个编译器吧，可能是getw, putw不兼容的问题？ 发帖的时候用的是DEV-C 然后换成VC++6.0 还是一样的

user: user-0
content: 引用 1 楼 u012033027 的回复:我试了一下，没有问题啊。 可能是你最后没有输出换行符号，结果被覆盖了。 你尝试在      while((number = getw(f3)) != EOF)      printf("%4d",number);  之后再加一个 printf("\n"); 吧。  我试了一下 还是一样的结果呢 不知道为什么 纠结了一晚上了

user: user-2
content: 我试了一下，没有问题啊。 可能是你最后没有输出换行符号，结果被覆盖了。 你尝试在      while((number = getw(f3)) != EOF)      printf("%4d",number);  之后再加一个 printf("\n"); 吧。
user-0 提问: C语言问题

回复:
user: user-1
content: 引用 6 楼 dsq2753919456 的回复:最后要将字符串前后调换才能实现进制转化，可是你的代码中并没有体现。  只是帮你改了你代码中一些问题，没具体看你怎么实现，你可以在此基础上改进

user: user-0
content: 最后要将字符串前后调换才能实现进制转化，可是你的代码中并没有体现。

user: user-1
content: 你程序很多问题，不一 一说了，帮你改好了，你自己看，不明白再问：   # include <stdio.h> # define N 100 char* itob(int n, char s[], int b); int main() { 	char a[N]; 	int x; 	int y; 	printf("请输入一个十进制数"); 	scanf_s("%d", &x); 	printf("请输入一个不小于2不大于35的数"); 	scanf_s("%d", &y); 	printf("%s", itob(x, a, y)); 	return 0; } char* itob(int n, char s[], int b) { 	int i = 0; 	while (n >0) 	{ 		if(n>=b) 			s[i] = (n%b>9)?n%b-10+'A':n%b; 		if (n < b) 			s[i] =(n>9)?n-10+'A':n; 		s[i] = s[i] + '0'; 		i++; 		n = n / b; 	} 	s[i] = '\0'; 	return s; }

user: user-2
content: 引用 3 楼 dsq2753919456 的回复:程序可以运行 ，可是运行出来的是一个奇怪的图形，求大神指教，楼上几位实在是太酱油了。  itob(x, a, y); printf("%c", itob); 这里写的有问题，itob是一个函数名，代表这个函数的地址，用printf("%c",itob);打印肯定就是把一个地址按照%c的方式打印，肯定就错了。我想你应该是printf("%s", a);前面的a[N]初始化为0就好了。

user: user-0
content: 程序可以运行 ，可是运行出来的是一个奇怪的图形，求大神指教，楼上几位实在是太酱油了。

user: user-3
content: 调用函数不应该放在主函数里面定义吗？

user: user-4
content: 编译器肯定会告诉你那里错了啊。 然后调试
user-0 提问: 程序哪里不对，总打印出错

回复:
user: user-1
content: 着实没有看明白你的程序为什么要这么写~~~~

user: user-0
content: 每次循环merge都会增加2个字节的内存，每次循环只输入一个字符，怎么会内存过小 追问：realloc函数第二个参数比原内存大，element3每次都加一

user: user-0
content: 每次循环merge都会增加2个字节的内存，每次循环只输入一个字符，怎么会内存过小 追问：realloc函数第二个参数比原内存大，element3每次都加一

user: user-2
content: 你将 merge放入循环，每次都要把它重新分配内存，分配的内存过小。
user-0 提问: C语言新手问题

回复:
user: user-1
content: 引用 2 楼 qq_31741093 的回复:tmp = pArray[i] 不是就指向一个实体 结构体吗 ?  为什么不能定义成指针?  首先 （pArray[i]） 是一个实体，不是指针 其次你可以这样写：struct Teacher* tmp;  tmp = &pArray[i];  这种写法是对的，只是你要实现的是交换两个对象，所以你要产生一个临时的中间对象来作中转，如果你定义一个指针指向原来的对象，你就没法实现交换，这取决于你想要实现的功能

user: user-0
content: tmp = pArray[i] 不是就指向一个实体 结构体吗 ?  为什么不能定义成指针?

user: user-1
content: pArray是指针，pArray[i]就不是指针了，是按索引取到的对应元素，(&pArray[i]) 可以作为指针  第二个问题：tmp如果你定义成指针，也要让他指向一个实际结构体才行啊，不然仅仅是一个指针
user-0 提问: C语言问题

回复:
user: user-0
content: 太棒了，圆满解决了我的问题

user: user-1
content: htoi 函数返回的是s[i] ， 只是一个字符，而且返回时 i 的值已经是-1了，相当于返回 s[-1]的值了

user: user-2
content: 1、调用了两次htoi(a)函数，所以输出两个1010； 2、在htoi(a)结束时返回了s[i]，但i此时为-1，所以实际返回的是一个越界的值（值不确定)，所以printf函数打印出了-52。
user-0 提问: FILE p和FILE *p有什么区别？

回复:
user: user-1
content: 前一个是声明类对象，后一个是声明一个可指向类对象的指针

user: user-2
content: FILE p和FILE *p。 大概可以这么理解: 1 . 前一个p指文件型变量，后一个p指文件地址型变量。 2 . 前一个p的内存地址已定，后一个p内存地址未定。

user: user-3
content: 学习了

user: user-4
content: 引用 5 楼 u010165006 的回复:[quote=引用 4 楼 u010165006 的回复:] FILE是一个结构体，比较复杂，http://www.cnblogs.com/svking/archive/2012/08/08/FILE.html FILE *p 就是定义一个指向FILE结构体变量的指针，一般的 FILE *fopen(const char *filename, const char *mode); 函数都是构造一个FILE结构体并返回这个结构体地址即FILE *指针，可以用p=fopen(...)得到这个指针值。 以后的文件操作都需要这个p指向的FILE信息。[/quote] fclose(p)释放这块结构体内存。

user: user-4
content: 引用 4 楼 u010165006 的回复:FILE是一个结构体，比较复杂，http://www.cnblogs.com/svking/archive/2012/08/08/FILE.html FILE *p 就是定义一个指向FILE结构体变量的指针，一般的 FILE *fopen(const char *filename, const char *mode); 函数都是构造一个FILE结构体并返回这个结构体地址即FILE *指针，可以用p=fopen(...)得到这个指针值。 以后的文件操作都需要这个p指向的FILE信息。

user: user-4
content: FILE是一个结构体，比较复杂，http://www.cnblogs.com/svking/archive/2012/08/08/FILE.html FILE *p 就是定义一个指向FILE结构体变量的指针，一般的 FILE *fopen(const char *filename, const char *mode); 函数都是构造一个FILE结构体并返回这个结构体地址即FILE *指针，可以用p=fopen(...)得到这个指针值。

user: user-5
content: 一个是结构体，一个是指针
user-0 提问: dhcp option 20 c语言怎么编写处理函数？forwarding non-local source routing datagrame?

回复:
user: user-1
content: 可以看下dhcpd 源码，里面是否有支持，如果支持的话或许只需打开某个flag，  没有的话就得深入看了。

user: user-0
content: 大神在哪里？

user: user-0
content: 求个大概思路就可以
user-0 提问: 怎么把结构体里面的数据复制到一个数组里面

回复:
user: user-1
content: #include <stdio.h> typedef unsigned char uchar; typedef struct { uchar year  ;//年,芯片以2000年为基数,如2014年,只需要赋值14即可 uchar month ;//月 uchar day   ;//日 uchar hour  ;//时 uchar minute;//分 uchar second;//秒 uchar weekn ;//星期几(星期日0) }TDS1302; TDS1302 a; uchar b[7]; int main() {     a.year  =15;     a.month =11;     a.day   =13;     a.hour  =12;     a.minute=43;     a.second=56;     a.weekn = 5;     b[0]=a.year  ;     b[1]=a.month ;     b[2]=a.day   ;     b[3]=a.hour  ;     b[4]=a.minute;     b[5]=a.second;     b[6]=a.weekn ;     printf("20%d-%02d-%02d %02d:%02d:%02d 星期%.2s\n",         b[0],         b[1],         b[2],         b[3],         b[4],         b[5],         "日一二三四五六"+2*b[6]);     return 0; } //2015-11-13 12:43:56 星期五 //

user: user-2
content: 没看懂啥意思， 数组要同类型数据的啊，结构体里又不是都像这个一样都是相同的， 有没有大师点播我一下

user: user-3
content: 同一类型的，可以不过不靠谱 毕竟依赖预编译器的实现特性 虽然编译器都是这么实现的，但是不知道有没有成为标准。

user: user-4
content: memcp就行了

user: user-1
content: 不能用memcpy函数，因为有对齐问题。参考下面： #include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 // //A1.a 0 //A1.b 4 //A1.c 17 // //A2.a 0 //A2.b 4 //A2.c 18 // //A4.a 0 //A4.b 4 //A4.c 20 // //A8.a 0 //A8.b 4 //A8.c 24 // //A16.a 0 //A16.b 4 //A16.c 24 // //

user: user-0
content: 引用 楼主 qq_31880427 的回复:typedef struct { 	uchar year;    //年,芯片以2000年为基数,如2014年,只需要赋值14即可 	uchar month;   //月 	uchar day;     //日 	uchar hour;    //时 	uchar minute;  //分 	uchar second;  //秒 	uchar weekn;   //星期几(星期日0) }TDS1302;   复制这个结构体，并打印出来  能不能用memcpy函数。
user-0 提问: 起步新手一枚，请教前辈一个赋值问题

回复:
user: user-0
content: 这个问题现在弄明白了   跟大家分享下  是我gcc路劲错误，大家也要注意

user: user-1
content: 引用 5 楼 wzting 的回复:[quote=引用 3 楼 paschen 的回复:] 程序没问题，不知你说什么意思 好吧   版主大大 我用codeblocks显示上面截图  用vs2008则正常  一样的代码  是不是编译器的问题？[/quote]  我没试哦，你卸载了重新安装一下，不知什么原因

user: user-0
content: 引用 3 楼 paschen 的回复:程序没问题，不知你说什么意思 好吧   版主大大 我用codeblocks显示上面截图  用vs2008则正常  一样的代码  是不是编译器的问题？

user: user-0
content: 引用 3 楼 paschen 的回复:程序没问题，不知你说什么意思 就是正常的应该是我build后输入俩个变量 然后程序判断输出结果  但是照上面的程序build后没有输入变量这个过程了，直接显示上面截图所示的

user: user-1
content: 程序没问题，不知你说什么意思

user: user-0
content: 引用 1 楼 u012033027 的回复:scanf是需要输入的，你没有输入啊。 输入了啊   照视频输入的是变量a和b俩个数啊

user: user-2
content: scanf是需要输入的，你没有输入啊。
user-0 提问: 链表操作问题

回复:
user: user-1
content: malloc分配失败表示的是内存中已经无法获得满足你需要大小的连续空间了，链表结点通常不会发生

user: user-2
content: 线性表链式存储基本是不会出现表满情况的，除非结点多到计算机无法承受，不能再给一个新结点动态分配内存，就是堆满了。这个时候如果不判断链表是否为满然后做出处理的话，而是让他继续逼着分配内存，那就不是程序出错这么轻松了。应该会是计算机的崩溃。 和顺序线性表的表满判断还是有区别的。  这是我个人的理解，并没有尝试过。如果有说的不对的地方希望大神指出，虚心学习。

user: user-3
content: 这个表示堆空间已满，无法开辟新的空间来储存链表结点了。

user: user-0
content: 嗯 这里是我之前的理解有误，这里的意思是无法分配内存放节点为真，注释有些误导。 感谢各位。
user-0 提问: switch 语句没有default 分支会怎么处理？

回复:
user: user-1
content: 引用 4 楼 u010165006 的回复:[quote=引用 3 楼 paschen 的回复:] 另推荐看《C++反汇编与逆向分析中》对switch反汇编的分析 汇编不熟，只有n年前微机原理8086汇编的一点印象不过我了解结果就可以了。 我看到有人说switch语句是顺序往下执行，default在最后，我把default分支放在最前面，default也不会被先执行，跟放在后面也是一样的。不知道switch反汇编处理各个case的方法。[/quote]  一样可以看，看了就知编译器在后面都做了什么事了

user: user-1
content: 引用 8 楼 u010165006 的回复:[quote=引用 4 楼 u010165006 的回复:] [quote=引用 3 楼 paschen 的回复:] 另推荐看《C++反汇编与逆向分析中》对switch反汇编的分析 汇编不熟，只有n年前微机原理8086汇编的一点印象不过我了解结果就可以了。 我看到有人说switch语句是顺序往下执行，default在最后，我把default分支放在最前面，default也不会被先执行，跟放在后面也是一样的。不知道switch反汇编处理各个case的方法。[/quote] 我想反汇编是顺序比较、执行、跳转，编译的时候default分支始终被放到最后？ [/quote]  defualt是在最后，其他选项按你定义的排 switch在分支大于3之后就不会一一比较了，会进行优化，跟据你的选项是否是线性的，相差是否大于255等用不同的方法，通过查表来取得对应的跳转地址，在多路选择时效率会比 if 好

user: user-0
content: 引用 4 楼 u010165006 的回复:[quote=引用 3 楼 paschen 的回复:] 另推荐看《C++反汇编与逆向分析中》对switch反汇编的分析 汇编不熟，只有n年前微机原理8086汇编的一点印象不过我了解结果就可以了。 我看到有人说switch语句是顺序往下执行，default在最后，我把default分支放在最前面，default也不会被先执行，跟放在后面也是一样的。不知道switch反汇编处理各个case的方法。[/quote] 我想反汇编是顺序比较、执行、跳转，编译的时候default分支始终被放到最后？

user: user-0
content: 引用 4 楼 u010165006 的回复:[quote=引用 3 楼 paschen 的回复:] 另推荐看《C++反汇编与逆向分析中》对switch反汇编的分析 汇编不熟，只有n年前微机原理8086汇编的一点印象不过我了解结果就可以了。 我看到有人说switch语句是顺序往下执行，default在最后，我把default分支放在最前面，default也不会被先执行，跟放在后面也是一样的。不知道switch反汇编处理各个case的方法。[/quote] 我想反汇编是顺序比较、执行，编译的时候default分支始终被放到最后？

user: user-2
content: 就不会执行switch语句了

user: user-0
content: 引用 3 楼 paschen 的回复:另推荐看《C++反汇编与逆向分析中》对switch反汇编的分析 汇编不熟，只有n年前微机原理8086汇编的一点印象不过我了解结果就可以了。 我看到有人说switch语句是顺序往下执行，default在最后，我把default分支放在最前面，default也不会被先执行，跟放在后面也是一样的。不知道switch反汇编处理各个case的方法。

user: user-0
content: 引用 1 楼 user-3 的回复:为什么不亲自试试 试了，想确定一下。

user: user-1
content: 跳到switch最后，和defualt: break一样

user: user-1
content: 另推荐看《C++反汇编与逆向分析中》对switch反汇编的分析

user: user-3
content: 为什么不亲自试试
user-0 提问: vc编译器哪里下载?

回复:
user: user-0
content: 引用 1 楼 paschen 的回复:建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 大哥给的连接2010不能下载。

user: user-0
content: 引用 7 楼 paschen 的回复:[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 csdnxinshou2 的回复:] [quote=引用 1 楼 paschen 的回复:] 建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 下载不了好象。。。[/quote]  你要下载哪个版本[/quote]  你下载VS2010吧，XP可以用[/quote] 又可以下载了。。。

user: user-0
content: 引用 7 楼 paschen 的回复:[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 csdnxinshou2 的回复:] [quote=引用 1 楼 paschen 的回复:] 建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 下载不了好象。。。[/quote]  你要下载哪个版本[/quote]  你下载VS2010吧，XP可以用[/quote] 大哥给的  引用 8 楼 fly140554 的回复:可以去msdn itellyou下载 msdn上怎么下载英文不好。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt 带MSDN吗?MSDN怎么安装?

user: user-0
content: 引用 3 楼 paschen 的回复:[quote=引用 2 楼 csdnxinshou2 的回复:] [quote=引用 1 楼 paschen 的回复:] 建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 下载不了好象。。。[/quote]  你要下载哪个版本[/quote] XP哪个版本可以用?大哥。

user: user-1
content: 可以去msdn itellyou下载

user: user-2
content: 引用 3 楼 paschen 的回复:[quote=引用 2 楼 csdnxinshou2 的回复:] [quote=引用 1 楼 paschen 的回复:] 建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 下载不了好象。。。[/quote]  你要下载哪个版本[/quote]  你下载VS2010吧，XP可以用

user: user-3
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 引用 2 楼 csdnxinshou2 的回复:[quote=引用 1 楼 paschen 的回复:] 建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 下载不了好象。。。[/quote]  你要下载哪个版本

user: user-0
content: 引用 1 楼 paschen 的回复:建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得 下载不了好象。。。

user: user-2
content: 建议楼主用VS2010  http://blog.csdn.net/cometnet/article/details/19551125  下载后直接安装就行，一路下一步到完成  MSDN可以在VS中的帮助菜单下获得