Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: setwritemode

回复:
user: user-1
content: http://www.baidu.com/s?wd=setwritemode&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&inputT=3063  http://www.easyx.cn

user: user-2
content: 函数调用方式为 void setwritemode()(int mode); 说明： 参数mode只有两个取值0和1，若mode为0，则新画的线将复盖屏幕上原有的图形，此为缺省画线输出模式。如果mode为1，那么新画的像素点与原有图形的像素点先进行异或(XOR)运算，然后输出到屏幕上，使用这种画线输出模式，第二次画同一图形时，将擦除该图形。调用setwritemode()设置的画线输出模式只影响函数line(),lineto(),linerel(),rectangle()和drawpoly()。 setwritemode()函数对应的头文件是graphics.h 返回值： 无 例： 设置画线输出模式为0： setwritemode(0);
user-0 提问: unsigned table_id: 8;这是啥意思

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> char buf[17]; union U {   unsigned short int aa;   struct S {     unsigned int bb:7;//(bit 0-6)     unsigned int cc:6;//(bit 7-12)     unsigned int dd:3;//(bit 13-15)   } s; } u; void main() {                 //bbbbbbbbbbbbbbbb                 //iiiiiiiiiiiiiiii                 //tttttttttttttttt                 //111111                 //5432109876543210                 //::::::::::::::::     u.aa=0xE07F;//1110000001111111     printf("bb==%d,cc==%d,dd==%d\n",u.s.bb,u.s.cc,u.s.dd);     u.s.bb=0x41;     u.s.cc=0x21;//dddccccccbbbbbbb     u.s.dd=5;   //1011000011000001     printf("aa==0x%04X==%016s(2)\n",u.aa,itoa(u.aa,buf,2)); } //bb==127,cc==0,dd==7 //aa==0xB0C1==1011000011000001(2)

user: user-1
content: #include <stdio.h> #pragma pack(push,1) union U {     unsigned char byte;     struct BF {         unsigned int b0:1;//a         unsigned int b1:1;//b         unsigned int b2:1;//c     } bf; } u; #pragma pack(pop) unsigned char bt; int a,b,c; int main() {     for (bt=0;bt<8;bt++) {         u.byte=(unsigned char)bt;         a=u.bf.b0;         b=u.bf.b1;         c=u.bf.b2;         printf("byte 0x%02x -- c:%d b:%d a:%d\n",bt,c,b,a);     }     for (c=0;c<2;c++)     for (b=0;b<2;b++)     for (a=0;a<2;a++) {         u.bf.b0=a;         u.bf.b1=b;         u.bf.b2=c;         bt=u.byte;         printf("c:%d b:%d a:%d -- byte 0x%02x\n",c,b,a,bt);     }     return 0; } //byte 0x00 -- c:0 b:0 a:0 //byte 0x01 -- c:0 b:0 a:1 //byte 0x02 -- c:0 b:1 a:0 //byte 0x03 -- c:0 b:1 a:1 //byte 0x04 -- c:1 b:0 a:0 //byte 0x05 -- c:1 b:0 a:1 //byte 0x06 -- c:1 b:1 a:0 //byte 0x07 -- c:1 b:1 a:1 //c:0 b:0 a:0 -- byte 0x00 //c:0 b:0 a:1 -- byte 0x01 //c:0 b:1 a:0 -- byte 0x02 //c:0 b:1 a:1 -- byte 0x03 //c:1 b:0 a:0 -- byte 0x04 //c:1 b:0 a:1 -- byte 0x05 //c:1 b:1 a:0 -- byte 0x06 //c:1 b:1 a:1 -- byte 0x07

user: user-2
content: unsigned 等同unsigned int  table_id: 8，表示占位8bit
user-0 提问: 求大神帮忙  有关结构体指针作为函数参数的问题

回复:
user: user-0
content: 我不知道楼上和的那个编绎器，我用了C——FREE也过不了。。。。

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

user: user-0
content: 我晕倒了我，我这里用DEVC\C++提示了N 个错误出来。。。。。。。。

user: user-0
content: 结构体定义大括号后边的那个分号我也忘打了，代码中都是有的。

user: user-2
content: 代码没有问题啊，我这里编译可以通过

user: user-0
content: 对不起各位大哥们，刚我在发帖的时候那个分号忘打上去了，还有代码中的scanf我也没有拼错拉，对不起哦。

user: user-3
content: scnaf("%d %s %.2f",&p[i].no,p[i].name,&p[i].score); 也拼错了。scanf

user: user-3
content: struct student {     unsigned int no;     char name[16];     float score; };  void input(struct student *p);  后面要加分号
user-0 提问: fgetc（）或者getc（）问题请教

回复:
user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 6 楼 cjy0000 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了 那就说是不是我应该用后者，fopen("...","...b") ？？？[/quote] 楼主心有灵犀！[/quote] Thanks，我试试！

user: user-0
content: 引用 7 楼 lm_whales 的回复:[quote=引用 3 楼 cjy0000 的回复:] [quote=引用 2 楼 lm_whales 的回复:] 如果用 ch==EOF 判断文件结束，而ch 是unsigned char类型的，就会出现这种情况 此时ch用 int 类型比较好。 因为fget或者getc 返回int 类型， 包含除了字符(一个字节数据)之外的额外信息，可以用来判断文件是否结束。 unsigned char只有一个字节，不能判断文件是否结束。 除非，刻意用一个字节的数据，表示文件结束。、  那就说我可以将ch直接定义为int型，然后再直接用fgetc或者getc读取字符？ 另外再追问一下，那如果我将ch直接定义为char的话可以嘛？会不会读出的数据有错误的？谢谢[/quote] 如果是二进制文件，一般就可以了。 如果是别的格式，要考虑如何打开文件，以及如何解析读出来的字符。[/quote] 好的，谢谢，我先试试

user: user-1
content: 引用 6 楼 cjy0000 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了 那就说是不是我应该用后者，fopen("...","...b") ？？？[/quote] 楼主心有灵犀！

user: user-2
content: 引用 3 楼 cjy0000 的回复:[quote=引用 2 楼 lm_whales 的回复:] 如果用 ch==EOF 判断文件结束，而ch 是unsigned char类型的，就会出现这种情况 此时ch用 int 类型比较好。 因为fget或者getc 返回int 类型， 包含除了字符(一个字节数据)之外的额外信息，可以用来判断文件是否结束。 unsigned char只有一个字节，不能判断文件是否结束。 除非，刻意用一个字节的数据，表示文件结束。、  那就说我可以将ch直接定义为int型，然后再直接用fgetc或者getc读取字符？ 另外再追问一下，那如果我将ch直接定义为char的话可以嘛？会不会读出的数据有错误的？谢谢[/quote] 如果是二进制文件，一般就可以了。 如果是别的格式，要考虑如何打开文件，以及如何解析读出来的字符。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了 那就说是不是我应该用后者，fopen("...","...b") ？？？

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

user: user-0
content: 对了，这个是raw格式的文件，不是dat类型的~

user: user-0
content: 引用 2 楼 lm_whales 的回复:如果用 ch==EOF 判断文件结束，而ch 是unsigned char类型的，就会出现这种情况 此时ch用 int 类型比较好。 因为fget或者getc 返回int 类型， 包含除了字符(一个字节数据)之外的额外信息，可以用来判断文件是否结束。 unsigned char只有一个字节，不能判断文件是否结束。 除非，刻意用一个字节的数据，表示文件结束。、  那就说我可以将ch直接定义为int型，然后再直接用fgetc或者getc读取字符？ 另外再追问一下，那如果我将ch直接定义为char的话可以嘛？会不会读出的数据有错误的？谢谢

user: user-2
content: 如果用 ch==EOF 判断文件结束，而ch 是unsigned char类型的，就会出现这种情况 此时ch用 int 类型比较好。 因为fget或者getc 返回int 类型， 包含除了字符(一个字节数据)之外的额外信息，可以用来判断文件是否结束。 unsigned char只有一个字节，不能判断文件是否结束。 除非，刻意用一个字节的数据，表示文件结束。

user: user-0
content: 这样读取的字符数目就始终是全部字符的一半，所以我怀疑字符没有读取完整

user: user-3
content: int ch; 应该这样定义ch。

user: user-4
content: 希望你的ch的类型是int

user: user-5
content: 该说的都说了，我就打打酱油算了
user-0 提问: linux 程序设计上的一个例子，打印当前目录下的文件名，文件夹

回复:
user: user-1
content: 就是指定了一个缩进为 4 的宽度，你换成别的也行，显示的格式问题

user: user-2
content: 引用 3 楼 ForestDB 的回复:这是如果碰到子目录时，多4个空格的缩进。 ++

user: user-3
content: 这是如果碰到子目录时，多4个空格的缩进。

user: user-4
content: printf("%*s%s/\n",depth,"",entry->d_name);  这一举的depth " "空格  就是有几个空格  目录1     目录1.1         目录1.1.1
user-0 提问: 代码应该这样写

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

user: user-2
content: 楼主你的原始代码怎么不用代码格式啊，看着不方便

user: user-3
content: 对于这种刚发的帖子，我总是毫不犹豫的顶了。如果火了就是个前排，可以混个脸熟，说不定谁好心就给粉了…稳赚不赔；如果沉了就感觉是我弄沉的，很有成就感，还能捞经验。

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

user: user-5
content: 没仔细看.看不出区别
user-0 提问: putchar()参数问题

回复:
user: user-0
content: 谢谢各位，懂了，涨姿势了

user: user-1
content: '0'和0不是一回事。

user: user-2
content: putchar接收的是ascii码, '0' 的ascii码是48, 所以putchar(48)输出'0' 类似地pubchar(49)输出'1',  也就是 putchar('0'+1)输出'1'  如果直接putchar(1)那输出的肯定不对了.

user: user-3
content: putchar函数要求一个int型参数 这个参数代表ASCII码； 根据楼主的代码，putchar(r),输入的r显然在0-9范围内 那就是输出ASCII码值为0-9的控制字符显然不符合楼主的逻辑 putchar('0'+r)相当于putchar(48+r); 也就是48-57对应0-9字符。 我提供一下我写的代码供楼主参考  #include <stdio.h> int main() { 	void conversion(int, int); 	int num, mode, flag = 1; 	do 	{ 		printf("请输入要转换的数值和进制(输入n退出)："); 		if (scanf("%d%d", &num, &mode) == 2) 		{ 			printf("结果是："); 			if (num < 0) 			{ 				num = -num; 				putchar('-'); 			} 			conversion(num, mode); 			putchar('\n'); 		} 		else 			flag = 0; 	} while (flag); 	return 0; } void conversion(int num, int mode) { 	int quotient, remainder; 	quotient = num / mode; 	remainder = num%mode; 	if (quotient != 0) 		conversion(quotient, mode); 	if (remainder > 9) 		putchar(55 + remainder); 	else 		putchar('0' + remainder); }
user-0 提问: void(*x(int,void(*y)(int)))(int);大家看看这个，

回复:
user: user-1
content: //char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*x000)[5];//返回值     char (*(x00)())[5];//函数原型，参数为空，返回值为指针     char (*(*x0)())[5];//数组的元素，是个函数指针     char (*(*x[3])())[5];//是个数组，大小为3      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-2
content: #include <typeinfo> #include <iostream>  typedef void(*PF)(int); PF foobar(int a, PF pf) {   pf(a);   return pf; }   int main() {   void (*  x(        int, void(*y)(int)       ) )     (int);   std::cout << typeid(x).name() << std::endl;   std::cout << typeid(foobar).name() << std::endl;   return 0; } /* void (__cdecl*__cdecl(int,void (__cdecl*)(int)))(int) void (__cdecl*__cdecl(int,void (__cdecl*)(int)))(int) */   所以x和foobar一样， 是一个函数， 其第一个参数是int,第二个参数是函数指针void(*)(int)； 其返回值是一个函数地址void(*)(int)  推荐使用typedef， 增加代码可读性， 就像foobar那样。

user: user-3
content: typedef void (*fun1)(int); typedef  fun1 fun2( int, fun1 ); fun2 x;

user: user-4
content: void (*x(int,void(*y)(int)))(int); x是一个函数，它有两个参数，第一个参数的类型是int，第二个参数的类型是一个函数指针，该函数指针所指向的函数只有一个int类型的参数，返回类型是void 函数x的返回类型也是一个函数指针，其类型与它的第二个参数类型一致，即该函数指针所指向的函数只有一个int类型的参数，返回类型是void 验证代码为 #include <stdio.h>  void f1(int a) {    printf("f1\n"); }  void f2(int a) {    printf("f2\n"); }  void (*x(int a,void(*b)(int)))(int c) {    b(1);    return &f2; }  int main(void) {     x(1, f1)(1);     return 0; }

user: user-5
content: 这是一个函数声明 x函数 他的参数有两个：第一个是一个int型，第二个是指向函数的指针，此函有一个int型参数，无返回值 x函数的返回值为：指向函数的指针，此函数有一个int型参数，无返回值

user: user-5
content: 当个参考吧 因为我也不确定我说的具体准确

user: user-0
content: 再补充下代码：void(*x(int,void(*y)(int)))(int);
user-0 提问: 时间复杂度为什么是O(nlgn)

回复:
user: user-1
content: 二分搜索一次复杂度O(lgn)，搜索之后一次遍历复杂度最坏情况下是n，然后每次搜索之后每次都要遍历。就是O(nlgn)
user-0 提问: CObject* (PASCAL* m_pfnCreateObject)();

回复:
user: user-1
content: pascal calling convention

user: user-2
content: PASCAL是一种调用惯例。

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

user: user-4
content: PASCAL 是一个宏，就是 __stdcall, 指明这个函数的参数传递以及平栈方式
user-0 提问: 新手求帮忙

回复:
user: user-1
content: 有个置顶贴，可以一看。  个人不建议研究即书写这样的代码。

user: user-2
content: 用 DEBUG 调试

user: user-3
content: 引用 楼主 qq_17586651 的回复:如有 int i=3,j; j=(++i)+(++i)+--i; 执行后i,j的值是多少    这题给详细过程及说明，每一步都要  和使用编译器有关， 死扣这些没啥意义， 多学点别的知识吧

user: user-4
content: 这根本不算一个题，出题的人显然对C语言是无知的。  科普下：http://www.guokr.com/blog/471312/

user: user-5
content: 引用 楼主 qq_17586651 的回复:如有 int i=3,j; j=(++i)+(++i)+--i; 执行后i,j的值是多少 这题给详细过程及说明，每一步都要 编译，设置断点，单步调试，查看汇编代码，如下：  4:        int i=3,j; 00401028   mov         dword ptr [ebp-4],3       //设置i为3 5:        j=(++i)+(++i)+--i; 0040102F   mov         eax,dword ptr [ebp-4]    00401032   add         eax,1                                 //自增1，为4 00401035   mov         dword ptr [ebp-4],eax 00401038   mov         ecx,dword ptr [ebp-4] 0040103B   add         ecx,1                                 //自增1，为5 0040103E   mov         dword ptr [ebp-4],ecx 00401041   mov         edx,dword ptr [ebp-4] 00401044   add         edx,dword ptr [ebp-4]     //计算加法 00401047   mov         eax,dword ptr [ebp-4] 0040104A   sub         eax,1                                 //自减1 0040104D   mov         dword ptr [ebp-4],eax 00401050   add         edx,dword ptr [ebp-4]     //计算加法 00401053   mov         dword ptr [ebp-8],edx 6:        printf("%d\t%d\n", i, j); 00401056   mov         ecx,dword ptr [ebp-8] 00401059   push        ecx 0040105A   mov         edx,dword ptr [ebp-4] 0040105D   push        edx 0040105E   push        offset string "%d\t%d\n" (00422e80) 00401063   call        printf (0040d690) 00401068   add         esp,0Ch

user: user-6
content: http://bbs.csdn.net/topics/370153775
user-0 提问: 看不懂下面这个小程序

回复:
user: user-1
content: 输出0-999 #define在编译的时候就全部替换掉了

user: user-2
content: 打了一遍 感觉真的是bt的啊

user: user-3
content: 没想法,真的是没想法

user: user-4
content: 一共是三层，就是10的m³

user: user-4
content: 楼主，这个可以把跳用替换过程看做多叉树的遍历，只是不清楚是深度优先，还是广度优先；按照嵌套替换规则的话，应该是深度优先

user: user-5
content: 要不要这么为难编译器啊

user: user-6
content: 宏替换而已，没什么大不了的

user: user-7
content: 本来想贴展开后的代码的，不过貌似超过字符限制了。 那么自己用gcc -E执行下把。

user: user-8
content: A(printf("%d ",n++)); A(printf("%d ",n++));	 A(printf("%d ",n++));	 A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));	 A(printf("%d ",n++));	 A(printf("%d ",n++));	 A(printf("%d ",n++)); A(printf("%d ",n++));	 A(printf("%d ",n++));	 A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));	 A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++)); A(printf("%d ",n++));  上门所有100个A(printf("%d ",n++));再用printf("%d ",n++);替换十次，总共10*100个printf("%d ",n++); 写个for循环搞定的事情为啥要搞这么变态···· 哪里找来的问题···

user: user-9
content: 这是考试题目吗？只有考试题目才会出这些。。。

user: user-10
content: 估计又是哪个的测试题目吧

user: user-11
content: 宏嵌套。给编译器找麻烦。。。

user: user-12

user: user-13
content: 宏替换而已。

user: user-0
content: 暴力输出0-999,。 一下子真还看不懂吧？  哈哈

user: user-14
content: 哈哈，经过测试，确实是输出0-999个数字，楼主加个空格或换行啊，满满一屏幕。

user: user-15
content: 每一个x，相当于一个printf("%d ",n++)，所以打印出来是10的3次方个数字，编号从0开始

user: user-16
content: 这个程序确实很变态。 最后结果是输出0-999个数。 先将内层A展开，是10个printf 再将第二层A展开，是10*10个printf 再将第三层展开，是10*10*10个printf.

user: user-17
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-18
content: 这程序这变态呢?  直接把 #define A(x) x;x;  这么改了  把A(x) 的格式替换为 x;x;
user-0 提问: 新手求帮忙

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

user: user-0
content: 是不是如果 x=x-(++n) 条件如上题 x=6,n=6

user: user-2
content: 自加或自减括不括号无所谓，楼主需要明白是使用前自加（++i）还是使用后自加（i++）

user: user-3
content: n++ 本身的定义,就是先使用n的值    然后将n的值再加1
user-0 提问: 我是初学者，求大牛帮我看一下哪里错了？

回复:
user: user-1
content: #include <iostream> void main() {    int a=0,b=0,z=0;   std::cin>>a>>b;   z=((a>=b)?a:b);   std::cout<<z<<std::endl; }

user: user-2
content: 你要注意的你输入，代码没有问题，在输入 scanf() 函数的时候要明白 scanf 的格式，你这里用的是逗号作为分隔符，所以在输入时要严格按照 scanf 的格式输入。然后就是在写代码的时候要注意中文标点符号，随便出现一个都会报错。

user: user-3
content: 我觉得，你编译的时候有提示吧。。。而且很明显。。。。。对于这种逗号，分号在大程序中用错了就是要命。。。因为很难找出来。。。。。。。注意啦。。。 LZ

user: user-4
content: 修改上楼 printf("Max=%d\n",max( *a, *b ) );改为printf("Max=%d\n",max( &a, &b ) );  按错了。。

user: user-4
content: #include <stdio.h> int max( int* a, int* b) {     return *a > *b ? *a : *b; } int main() {    int a=0,b=0;     printf("请输入2个数\n");     scanf("%d,%d",&a,&b);     printf("Max=%d\n",max( *a, *b ) );     return 0; } 这个代码是最简洁的，没有值的传递，直接操作地址，效率最快。

user: user-5
content: 改过的代码： #include<stdio.h> //主函数 void main() { int max(int x,int y);                 //此处的分号改为英文的分号 int a,b,c; scanf("%d,%d",&a,&b);         c=max(a,b); printf("max=%d\n",c); } //求两个整数中的较大的max函数 int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z); }

user: user-6
content: 我觉得还有一点就是你的int max函数的定义应该放在main函数之前，因为C语言是顺序执行的，它不象C++当系统遇到一个函数调用时会自动寻找。  在大型程序要么就是在main函数之前先声明，然后就可以在任意位置去定义，要么就是声明和定义都放在要调用这个函数的代码之前，这个习惯可以避免好多未知的错误

user: user-7
content: 编译通过了么？没通过，就按错误提示进行修改。要是编译过了，那你要关注一下scanf格式串中的那个逗号，你在输入的时候必须给它匹配一个逗号，其他地方感觉不出有错。

user: user-8
content: int max(int *x,int *y) { int z; if(*x>*y)z=*x; else z=*y; return(z); } c=max(&a,&b);

user: user-9
content: 有个分号是中文的？ 明显和其它的不一样

user: user-10
content: #include<stdio.h> //主函数 void main() { int max(int x,int y)；最后的那个；是中文的，因该改写成英文的;（这种错误在编译之前就会报错） int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); }

user: user-11
content: 主函数当中的声明语句：int max(int x,int y)；，最后一个分号用英文的，不要用中文全角
user-0 提问: 求助。。大神在哪

回复:
user: user-1
content: lz不是找大神吧，找人做作业

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

user: user-0
content: 引用 4 楼 lmrblue 的回复:[quote=引用 2 楼 yangyunzhao 的回复:] lz不是找大神吧，找人做作业 人艰不拆。。 = =大神你会做这道题吗？[/quote] 应该是你知道我的代码为什么出这个错嘛。。

user: user-0
content: 引用 2 楼 yangyunzhao 的回复:lz不是找大神吧，找人做作业 人艰不拆。。 = =大神你会做这道题吗？

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

回复:
user: user-0
content: 好的，谢谢指导！

user: user-1
content: 如果要比较字符串是否相等，是要逐个字符比较的，而不是比较指针，标准库函数是strcmp函数，在string.h头文件中有声明，楼主感兴趣可以看看strcmp的实现源码，网上一堆。

user: user-0
content: 首先，这个不是我自己写的程序，我是在看测试题目。 题目要求是写出返回值，我自己判定错了，所以来这儿求解。  其次，你们真的太牛的！分析得很透彻。  最后，感谢各位的知道。 看来这题目考查的内容蛮多的。有指针、数组、指针地址。  再次感谢！

user: user-1
content: "abc"这是一个常量字符串，这个字符串在编译后，是放在可执行程序的常量数据段里面的，你可以先理解为"abc"放在一段固定的4个字节空间里(还有后面的'\0'，所以是4个)，我们假设它的空间地址为0x1000。 而char str1[] = "abc"；这条语句的意思是，申请一个指针数组，空间大小和字符串"abc"的一样大(4个字节)，我们假设它的起始地址为0x2000，然后把字符串"abc"拷贝到该空间去，即从0x1000这个地址拷贝4个字节到0x2000这个地址去。 同样，char str2[] = "abc"；这条语句的意思是，申请一个指针数组，空间大小和字符串"abc"的一样大(4个字节)，我们假设它的起始地址为0x3000，然后把字符串"abc"拷贝到该空间去，即从0x1000这个地址拷贝4个字节到0x3000这个地址去。  那么，我们可以看到 char str1[] = "abc"; char str2[] = "abc"; 两条语句分别分配了两个不同的地址（0x2000和0x3000），但他们的地址里面都存放了相同的内容('a','b','c','\0'四个字母)。  我们再回到 int strcamp2(char* pStr1, char* pStr2) 首先你要知道，参数pStr1和pStr2都是指向字符的指针，而指针是什么呢，就是地址。int iVal = strcamp2(str1, str2);也就是将字符数组str1和str2的地址传进去（我们已经假设分别为0x2000和0x3000），而strcamp2()函数里面的pStr1和pStr2的比较，就是比较两个指针的值，我们这里传进去的是0x2000和0x3000，0x2000肯定不等于0x3000的，所以按照你的代码结果肯定返回1啊。

user: user-2
content: strcmp函数包含在头文件string.h中 #include <string.h>

user: user-3
content: 楼主对字符串对比的认知还有很大误解 字符串比较和数值比较是不同的，字符串的比较要对字符进行逐个比较，所有字符相同才相同，你用“==”号来直接判断字符串是否相等是得不到结果的，在C语言中，字符串比较需要使用strcmp（）函数，字符串的一系列操作你可以去查查string.h头文件里面的一些函数用法，或者百度“C语言字符串操作”去了解

user: user-2
content: 楼主创建了2个字符数组str1和str2 int strcamp2(char* pStr1, char* pStr2)//调用函数时传入str1数组首地址和str2数组首地址 { if(pStr1 == pStr2)//因为str1数组和str2数组的首地址不同 return 0; else return 1;//所以返回1 }  改法： if(strcmp(str1,str2)==0) return 0;

user: user-0
content: 我自己看下来，应该是if语句里的判定，这儿是使用的“==”
user-0 提问: 如何声明线程私有全局变量

回复:
user: user-1
content: 要不然就把内存分成多块，每个线程访问一个memory pool ；

user: user-2
content: vc 2013  C:\demo\test>type test.cpp #include <iostream> #include <thread> #include <mutex>  std::mutex m; void foo(int id) {   __declspec( thread ) static int i = 0;   for(; i < 29; ++i)   {     std::lock_guard<std::mutex> lock(m);     std::cout <<id << ":" << i << std::endl;   } }  int main() {   std::thread t1(foo, 256);   std::thread t2(foo, 237);   t1.join();   t2.join();   return 0; }  C:\demo\test>cl  /EHsc /MT /Ox /DNDEBUG test.cpp Microsoft (R) C/C++ Optimizing Compiler Version 18.00.30501 for x86 Copyright (C) Microsoft Corporation.  All rights reserved.  test.cpp Microsoft (R) Incremental Linker Version 12.00.30501.0 Copyright (C) Microsoft Corporation.  All rights reserved.  /out:test.exe test.obj  C:\demo\test>test 256:0 237:0 256:1 237:1 256:2 237:2 256:3 237:3 256:4 237:4 256:5 237:5 256:6 237:6 256:7 237:7 256:8 237:8 256:9 237:9 256:10 237:10 256:11 237:11 256:12 237:12 256:13 237:13 256:14 237:14 256:15 237:15 256:16 237:16 256:17 237:17 256:18 237:18 256:19 237:19 256:20 237:20 256:21 237:21 256:22 237:22 256:23 237:23 256:24 237:24 256:25 237:25 256:26 237:26 256:27 237:27 256:28 237:28  C:\demo\test>

user: user-3
content: 最简单的就是用现成的， 比如boost

user: user-2
content: c++ 11: thread_local

user: user-0
content: 引用 6 楼 bbs2241 的回复:[quote=引用 5 楼 jsh13417 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] #define MAXTHREADS 2000 POOL pool[MAXTHREADS];  pool[GetCurrentThreadId()%MAXTHREADS]=...;  这个方法不错，非常感谢。。 还是有一个疑问，声明一个全局的pool， 初始化放在线程中，会不会这个pool就是线程的私有全局变量。 在实际开发中测试证明好像是不行的，[/quote] 赵老师逗你玩捏，你居然信了。[/quote]  引用 6 楼 bbs2241 的回复:[quote=引用 5 楼 jsh13417 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] #define MAXTHREADS 2000 POOL pool[MAXTHREADS];  pool[GetCurrentThreadId()%MAXTHREADS]=...;  这个方法不错，非常感谢。。 还是有一个疑问，声明一个全局的pool， 初始化放在线程中，会不会这个pool就是线程的私有全局变量。 在实际开发中测试证明好像是不行的，[/quote] 赵老师逗你玩捏，你居然信了。[/quote]   我信什么 ？？？？ ？？？？

user: user-4
content: 引用 5 楼 jsh13417 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] #define MAXTHREADS 2000 POOL pool[MAXTHREADS];  pool[GetCurrentThreadId()%MAXTHREADS]=...;  这个方法不错，非常感谢。。 还是有一个疑问，声明一个全局的pool， 初始化放在线程中，会不会这个pool就是线程的私有全局变量。 在实际开发中测试证明好像是不行的，[/quote] 赵老师逗你玩捏，你居然信了。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:#define MAXTHREADS 2000 POOL pool[MAXTHREADS];  pool[GetCurrentThreadId()%MAXTHREADS]=...;  这个方法不错，非常感谢。。 还是有一个疑问，声明一个全局的pool， 初始化放在线程中，会不会这个pool就是线程的私有全局变量。 在实际开发中测试证明好像是不行的，

user: user-5
content: #define MAXTHREADS 2000 POOL pool[MAXTHREADS];  pool[GetCurrentThreadId()%MAXTHREADS]=...;

user: user-6
content: TLS  线程本地存储

user: user-7
content: map<DWORD, POOL*> poolmap;  DWORD dwThreadId = 0; CreateThread(NULL, 0, ThreadRun,  NULL, 0, &dwThreadId); poolmap[dwThreadId] = new POOL();  全部初始化好之后，设一个信号量，通知各个线程开始ThreadRun  由于在这之后，这个poolmap没有写操作，可以不加锁。

user: user-0
content: 引用 1 楼 ADF1230 的回复:TLS  线程本地存储  下面函数应该就是 TLS吧，LINUX下api 设置"线程相关的数据",使用  int pthread_setspecific(pthread_key_t key, const void *pointer);  读取"线程相关的数据",使用  void * pthread_getspecific(pthread_key_t key);
user-0 提问: VC++2010使用openssl的des算法，出现：无法解析的外部符号 DES_ecb3_encrypt

回复:
user: user-1
content: 7楼完美地解决了问题！

user: user-2
content: 引用 6 楼 MZONE2020 的回复:[quote=引用 5 楼 mymtom 的回复:] 楼主确定一下工程是32位还是64位的，不知道是不是这个问题 电脑是 win7 64位系统 工程生成32位dll可以通过，但是生成64位时就会报这个错误[/quote] 那就是这个问题嘛，说好的32位，搞64位不出错才怪了。  #pragma comment(lib,"libeay32.lib") #pragma comment(lib,"ssleay32.lib")  解释：32位和64位不能混用的！

user: user-2
content: 楼主确定一下工程是32位还是64位的，不知道是不是这个问题

user: user-0
content: 引用 5 楼 mymtom 的回复:楼主确定一下工程是32位还是64位的，不知道是不是这个问题 电脑是 win7 64位系统 工程生成32位dll可以通过，但是生成64位时就会报这个错误

user: user-3
content: 将错误信息中出现的标识符放在google里面搜一下，看其在哪个.lib中，然后在本地硬盘上搜索该.lib,如果没有，在网上搜索相关库或模块下载安装，然后将其所在目录填写到“附加依赖库所在目录”中，将其名字添加到“附加依赖库”中，重新连接。 VC6： 工程、设置、C/C++、分类：Preprocessor、附加包含路径：填写附加头文件所在目录 逗号间隔多项 工程、设置、Link、分类：Input、附加库路径：填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类：Input、对象/库模块：填写附加依赖库的名字.lib 空格间隔多项 VS20xx： 项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:将错误信息中出现的标识符放在google里面搜一下，看其在哪个.lib中，然后在本地硬盘上搜索该.lib,如果没有，在网上搜索相关库或模块下载安装，然后将其所在目录填写到“附加依赖库所在目录”中，将其名字添加到“附加依赖库”中，重新连接。 VC6： 工程、设置、C/C++、分类：Preprocessor、附加包含路径：填写附加头文件所在目录 逗号间隔多项 工程、设置、Link、分类：Input、附加库路径：填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类：Input、对象/库模块：填写附加依赖库的名字.lib 空格间隔多项 VS20xx： 项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项 有搜过相关的解决方案了，他们的解决方法跟你的差不多，但都不能解决问题，还有其他可能的方案吗

user: user-0
content: 引用 2 楼 mymtom 的回复:有没有包含头文件啊？ #include <openssl/des.h> 这个肯定有呀，用在IDE下看不到有错误的地方，只有在执行生成dll的时候，出现了错误

user: user-2
content: 有没有包含头文件啊？ #include <openssl/des.h>
user-0 提问: 有将basic语言称作B语言的讲法？

回复:
user: user-1
content: 那种讲法，那个人该拉出去打屁股了

user: user-2
content: 见http://en.wikipedia.org/wiki/C_%28programming_language%29中history一节。

user: user-0
content: 編輯： C#=B#1 JAVA=B#2

user: user-0
content: B=B C=B+ C++=B++ C#=B# JAVA=BJ
user-0 提问: 二叉平衡排序树主函数该怎样写？

回复:
user: user-0

user: user-1
content: void _tmain() { 	BiTNode b1;     BiTNode* pb1 = &b1; 	InsertBST(&pb1, 1);  	BiTNode b2;     BiTNode* pb2 = &b2; 	InsertBST(&pb2, 2);                printf("Hello world!\n");     return; }
user-0 提问: 窗口程序   edit

回复:
user: user-0
content: 我把边框改粗，还是看不出来，说明边框要么是背景色，要么是填充色

user: user-0
content: 根本看不清边框的颜色，既有背景色又有填充色

user: user-1
content: 看书慢慢看,  看明白了多练习   和 速度快了没关系

user: user-1
content: else         {             cur_x++;         }         hdc=GetDC(hwnd);         SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,/*12个0*/             FIXED_PITCH,NULL));         TextOut(hdc,r.left+cur_x*word_width,r.top+cur_y*word_height,             &p[cur_x+cur_y*20],1);         ReleaseDC(hwnd,hdc);

user: user-0
content: windows程序设计你看了多久看完的啊？

user: user-0
content: 唉，兄弟，从前几天开始学习api函数以来老是出现这种逻辑错误，我也不知道该如何是好

user: user-2
content: 你用蓝色画笔在各种背景色上用R2_NOT分别画，看结果是啥。

user: user-0
content: SelectObject(hdc,GetStockObject(NULL_BRUSH));//设置背景空 			SetROP2(hdc,R2_NOT);//设置绘图方式：与背景色相反（忽略背景，因为背景为空） 			SelectObject(hdc,CreatePen(PS_DOT,2,RGB(0,0,255))); 			Rectangle(hdc,start.x,start.y,end.x,end.y); 麻烦再帮我看看，这里我想用蓝色画笔，但是画出的矩形边框是黑的，是因为setrop2的关系吗？ 我订的书还没到，我知道这个书上肯定有吧

user: user-3
content: 兄弟，能不能仔细看一下你的逻辑？你的x都++了，移到没有值的数据后才textout，肯定输出错误
user-0 提问: *(int *)a等于*((int *)a)吗？

回复:
user: user-1
content: 完全可以自己敲代码解决的问题

user: user-2
content: 如果你自己用编译器试一试或者找谷哥+度娘 解决问题前后不超过 2分钟 甚至更快。  如果你到论坛从发帖直到找到满意的帖子解决问题前后至少要10分钟 甚至更长。

user: user-3
content: 根据运算符的优先级和结合性判断应该可以

user: user-4
content: 引用 楼主 screen12 的回复:*(int *)a等于*((int *)a)吗？也就是说，后一个表达式中外面的括号可以去掉，是吗？ 可以。
user-0 提问: 文件读写失败

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

user: user-2
content: if (Source == NULL)           ;  //这个分号说明了，if 指针为空，那么让电脑啥 都不干，然后执行下面的句子  //这种错误很常见，而且很难找

user: user-3
content: 引用 4 楼 yangyangsnr 的回复: if (Source == NULL);  {      printf("Source File is not exist!");      return 0;  }  因为你if后面有个分号... 所以下面大括号里的语句就不是if控制的了。 真相帝。

user: user-0
content: 引用 4 楼 yangyangsnr 的回复: if (Source == NULL);  {      printf("Source File is not exist!");      return 0;  }  因为你if后面有个分号... 所以下面大括号里的语句就不是if控制的了。  我想给你结贴加分。但是你加分的那个文本框看不到。

user: user-4
content: if (Source == NULL);  {      printf("Source File is not exist!");      return 0;  }  因为你if后面有个分号... 所以下面大括号里的语句就不是if控制的了。

user: user-0
content: 引用 2 楼 piaobotudou 的回复:使用绝对路径 例如e:\\source.txt  绝对路径也获取指针失败。

user: user-5
content: 使用绝对路径 例如e:\\source.txt

user: user-0
content: VS2008环境
user-0 提问: C语言关于文件分割、修改、保存的，有大神来处理一下

回复:
user: user-1
content: http://blog.csdn.net/truexf/article/details/37748551

user: user-2
content: 仅供参考//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-0
content: 我看了  好像不是太一样，可能是我没说明白  这样的 问题是MATLAB只能跟C混编    没看懂 ？如下：  这部分数据  NODE   VOLTAGE     NODE   VOLTAGE     NODE   VOLTAGE     NODE   VOLTAGE  (N00117)     .0971 (N00127)    3.4979 (N00140)     .0971 (N00149)    3.4979       (N00167)     .0900 ($G_DGND)    0.0000                   ($G_DPWR)    5.0000     还有这部分（我发的帖子里可能没有，但是实际是有的，可以不管）  DGTL NODE : STATE  DGTL NODE : STATE  DGTL NODE : STATE  DGTL NODE : STATE  (N00149$DtoA) : 1  (N00127$DtoA) : 1  (N00149$AtoD) : 1  (   $D_HI) : 1           (N00127$AtoD) : 1  (N00167$DtoA) : 0  (N00117$DtoA) : 0  (   $D_LO) : 0           (N00140$DtoA) : 0  (N00117$AtoD) : 0  (N00140$AtoD) : 0   从原文件之中分出来，并生成一个文件1.txt，其中内容是这样的 1     .0971   2    3.4979   3     .0971       4    3.4979   5     .0900     就是第一部分数据 变成的这样，只是把N00117这些编号换成了12345
user-0 提问: 算法~~

回复:
user: user-1
content: 引用 2 楼 xmh1954 的回复:这个字体好洋气，看得人眼花缭乱~ 赵老师果断换版本了~ 没换。

user: user-2
content: 这个字体好洋气，看得人眼花缭乱~ 赵老师果断换版本了~

user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  float对应%f

user: user-0
content: 谢谢老师~~~
user-0 提问: WinpCap接收数据出问题

回复:
user: user-1
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-2
content: 问题描述的不清晰  wireshark 能都抓到,表示包确实都发出来了  上位机为什么会丢包,用的什么协议?
user-0 提问: c语言

回复:
user: user-0
content: 灰常感谢哒~~~

user: user-1
content: 这样的问题，再往上不难找到，像这个——http://zhidao.baidu.com/link?url=PIbId2SQVgDzdIeomPv6QzjC-zYOSncLUeHn30nISNP3wnMjnWC3bPRJPks0wqCFwfemD0oKOaIfyrEnXoWiJK

user: user-2
content: 引用 1 楼 user-3 的回复:#include <stdio.h>  int main(void) {    puts("\\n");     return 0; } +1

user: user-3
content: #include <stdio.h>  int main(void) {    puts("\\n");     return 0; }
user-0 提问: 一个删除字符串中空格的函数

回复:
user: user-1
content: 1.我不赞同1楼的第1点 2.我觉得楼上的代码可以有效实现楼主要求 下面我是按楼主的代码改的 测试过 没有毛病  #include<stdio.h> #define SIZE 81 void skong(char *); int main(void) { 	char ar[SIZE]; 	puts("请输入字符串,输入空行结束"); 	while (fgets(ar, SIZE, stdin) != NULL && *ar != '\n')//改1 	{ 		puts("删除空行之前"); 		fputs(ar, stdout); 		skong(ar); 		puts("删除空行之后"); 		fputs(ar, stdout); 		fflush(stdin);//改2 这个纯个人习惯 		puts("请输入字符串，输入空行结束"); 	} 	return 0; } #include<string.h> void skong(char *str) { 	while (*str) 	{ 		if (*str == ' ') 		{ 			strcpy(str, str + 1); 			continue; 		} 		str++; 	} }  编译器：VS2013

user: user-2
content: 1. 使用strcpy的时候要求源串和目的串不能有重叠，你这个明显有重叠，结果就看人品了。 2. strcpy这个函数不安全，因为它没有任何边界检查，很容易造成目的串溢出。可以用strncpy或其它一些安全的函数替代。 3. strcpy的思路，每次删一个空格就要把后面的所有字符复制一次，效率太低。 void RemoveSpaces(char str[]) {   char *p_src, *p_dst;    if (str == NULL) {     return;   }   for (p_src = p_dst = str; *p_src != '\0'; p_src++) {     if (*p_src != ' ') {       *p_dst++ = *p_src;     }   }   *p_dst = '\0'; }
user-0 提问: 求大神

回复:
user: user-1
content: 随便输入一个数字后回车

user: user-2
content: 引用 1 楼 FightForProgrammer 的回复:printf("个位数是:%d",z); printf("十位数是:%d",y); printf("百位数是:%d",x) 少了%d  你的输入格式不对。scanf("%d",&a);

user: user-3
content: #include <stdio.h> int a; int x,y,z; int main() { printf("请输入一个三位整数:"); scanf("%d",&a); x=a/100;     y=a/10%10; z=a%10; printf("个位数是:%d",z); printf("十位数是:%d",y); printf("百位数是:%d",x); return 0; }

user: user-4
content: 你这个scanf的语句里面不要加\n  然后还有输出语句少了%d

user: user-5
content: 见二楼！！！！！！！！！！！！！！！

user: user-0
content: 我试过了没用    下面就显示不出来了

user: user-2
content: printf("个位数是:%d",z); printf("十位数是:%d",y); printf("百位数是:%d",x) 少了%d
user-0 提问: 关于&&与||的问题。不懂呀

回复:
user: user-1
content: 这是短路与和短路或，短路与只要第一个式子为假就不用执行后面的式子了，整个式子都为假；短路或如果第一个式子为真，则整个式子为真，不用执行后面的式子。所以第2,4,5个式子都不用执行后面的printf语句。而第一和第三句因为&&（||）左边的并不能判断整个式子的真假，所以要执行后面的语句。 求给分~~~~
user-0 提问: 关于计算机c语言计算问题

回复:
user: user-0
content: 能说详细点吗？

user: user-1
content: 因为有溢出 假如运算范围是1位十进制，那么3+8=11溢出，结果就是3+8=1 而有符号的-2转换成无符号就是8，3+(-2)=3+8=1
user-0 提问: vc6.0在wind8.1系统上经常出现工作已停止

回复:
user: user-1
content: FileTool.exe 替换打开和添加到项目中 Visual C++ 的新功能 http://support.microsoft.com/kb/241396/zh-cn

user: user-2
content: 别用v开头的东西

user: user-3
content: 换最新的VS  装虚拟机，装xp，装vc6

user: user-1
content: 摒弃Win8 使用VC6

user: user-4
content: 都win 8了， 还 vc 6.0，唉

user: user-5
content: 换个新点的行不行，VC6招谁惹谁了，都这么老了，还揪着人家不放

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

user: user-6
content: 不清楚，我win8虽然装着VC6，但一般不用，同楼上各位，建议楼主还是换个编译器吧

user: user-7
content: lz换编译器吧，要不然用兼容模式运行

user: user-8
content: VC6最佳搭档是win98..

user: user-9
content: 除非公司有些老项目，要求必须用vc6，否则还是换新的吧。

user: user-10
content: 引用 1 楼 user-13 的回复:珍惜生命，远离VC6. 学编程，又不是学考古。 换个新点的编译器吧。 改用vs2010吗

user: user-11
content: 不要说win8 ，我在xp和win7 上经常这样，我也问过，很多人也发现， VCbug太多了，换 VS吧，或其他。

user: user-12
content: 好像不应该啊，说不定很多WIN8组件都是VC6写的呢

user: user-13
content: 珍惜生命，远离VC6. 学编程，又不是学考古。 换个新点的编译器吧。
user-0 提问: 缓冲输入问题

回复:
user: user-1
content: buf分配的是一个栈空间，函数结束的时栈被释放，你需要使用的buf就没有了（一种未定义行为）     缓冲区不应该是局部的             他提供了很多改进策略可以了解

user: user-2
content: 多看msdn，少看书。

user: user-3
content: c++ primer plus 6

user: user-0
content: 引用 1 楼 user-4 的回复:你知道陷阱与缺陷写在哪一年么？ 这书现在已经几乎没有参考价值了，换本有用点的书啃啃吧。 刚入门，求推荐

user: user-4
content: 你知道陷阱与缺陷写在哪一年么？ 这书现在已经几乎没有参考价值了，换本有用点的书啃啃吧。
user-0 提问: 新手上路，C语言结构体中void型指针问题，求高手解答！！

回复:
user: user-1
content: set->elem=elem没错 set->elem[0]=elem还能对吗？ 完全乱套

user: user-2
content: 未确定的类型付给确定类型

user: user-3
content: set->elem[set->card]=elem;    // 这行报错！为什么？? 首先，elem[set->card]表示的是内容啊！。。表示的是得到elem指针的起始地址偏移set->card后的内容; set->elem[set->card]=elem;红色标记的表示的是一个指针，也就是一个指向一个地址； 不知你是故意这么做的呢？还是什么意思呢？这样写就相当表示你将一个指针的地址保存在另一个指针的地址所指的内容； 这样写一般来说不规范化，出错可能性很大

user: user-4
content: 存void *的时候将其转成int存。

user: user-5
content: addElem 函数内部需要知道elem的具体类型，然后强转为这种类型。 很多c的接口都是这样的，不过不太安全而已

user: user-0
content: 引用 2 楼 user-6 的回复:set->elem[set->card]=elem; 由于elem是void*指针，不知道它指向什么类型，编译器不知道如何对它指向的东西赋值 由于elem是void*指针，不知道它指向的类型占用内存大小，编译器无法计算第set->card个该类型的具体地址  如果通过判断语句知道了elem会是 char* 或者 int* 之类的指针， 是不是可以先怎样转换来实现功能...高手赐教！

user: user-0
content: 小弟苦逼学生党...限制了必须使用void*...求问下怎样实现void addElem(void *elem, uset *set) 这个函数的功能，即来一个新元素就加在后面

user: user-6
content: set->elem[set->card]=elem; 由于elem是void*指针，不知道它指向什么类型，编译器不知道如何对它指向的东西赋值 由于elem是void*指针，不知道它指向的类型占用内存大小，编译器无法计算第set->card个该类型的具体地址

user: user-6
content: void*类型只有地址信息没有类型信息，所以不能计算偏移，也不能对其指向的地址赋值 楼主可能觉得void*不保存类型信息所以适用于任何类型功能更强大，恰恰相反，void*不保存类型信息所以不能用于操作任何类型，功能更受限制
user-0 提问: 字符串反转

回复:
user: user-1
content: 引用 2 楼 bbs2241 的回复:[quote=引用 1 楼 Idle_ 的回复:] int main(){     char *string = "abcdefg";  <-- string指向常量字符串， 只读内存， 所以程序必报错  改成char []string = "abcdefg";[/quote]   对头。char *str="abcdefg"; 中 字符串是在字符串字面量池中，不可更改。而 char str[]="abcdefg"，字符串是在栈中，可以更改

user: user-2
content: 可以采用堆栈处理，从栈底打印与栈顶打印就可以了。。

user: user-3
content: 以前还没注意过这个细节，学习了

user: user-4
content: char *string = "abcdefg";  程序执行这句话的时候，干了两件事情 1、在常量区域把字符串 "abcdefg"写到内存 2、把这个字符串的首地址赋值给string   你在函数里面试图修改常量区域的内存数据，那是违背c语言的设计体系的

user: user-5
content: 引用 2 楼 bbs2241 的回复:[quote=引用 1 楼 Idle_ 的回复:] int main(){     char *string = "abcdefg";  <-- string指向常量字符串， 只读内存， 所以程序必报错  改成char []string = "abcdefg";[/quote]+1

user: user-6
content: *string++ = *p; string指向常量字符串，不能修改。

user: user-7
content: 引用 1 楼 Idle_ 的回复:int main(){     char *string = "abcdefg";  <-- string指向常量字符串， 只读内存， 所以程序必报错  改成char []string = "abcdefg";

user: user-8
content: int main(){     char *string = "abcdefg";  <-- string指向常量字符串， 只读内存， 所以程序必报错
user-0 提问: 求大神帮帮忙

回复:
user: user-1
content: 引用 3 楼 hsmhyy0615 的回复:那个下载要分的，，，我木有 这方面了解不多，在CSDN里面搜索了一下，发现不少，不知道哪个适合你，右上角，搜索。

user: user-0
content: 那个下载要分的，，，我木有

user: user-1
content: 这里似乎有你要的这个。 http://www.pudn.com/downloads334/sourcecode/app/detail1467126.html
user-0 提问: 数组指针

回复:
user: user-1
content: 类型都不一样，意义也不同， m是二维数组。

user: user-2
content: m和*m的值一样，以为都是数组的起始地址。但是它们的类型不一样。 m的类型是char (*)[6]，而*m的类型是char*。因此你写成m应该不能编译通过。它们是两个不同的指针类型，地址相同不能代表就能相互比较。记住变量的地址和变量的类型是两码事

user: user-3
content: *m+1表示的是地址增加一个char类型长度，m+1表示的是地址增加6个char类型长度

user: user-4
content: *m等价于m[]!
user-0 提问: 简单C语言程序求解释

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

user: user-2
content: 工作中几乎没见过这么写的，很别扭。

user: user-3
content: 逗号，我一般是从最后一个表达式开始看，不过，还真的很少遇到

user: user-4
content: 引用 14 楼 zhao4zhong1 的回复:计算机组成原理→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对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！赵老师威武

user: user-5
content: 引用 10 楼 u012421456 的回复:逗号表达式当初虽然学过，但至今没见哪里用过（除了习题、考试题）+1

user: user-6
content: 逗号表达式当初虽然学过，但至今没见哪里用过（除了习题、考试题）

user: user-0
content: 哎~是一本书的习题。。。。我也很无奈

user: user-7
content: 遇到过工程中有人这么写的， 很明显处于一种炫技的心理 ---- 一个奇烂无比的工程

user: user-8
content: 一般会这样写吗？

user: user-9
content: 为什么要用这种迷惑人的写法？ 一行一行写不行吗？ 还是考题？ 这种写法在不同编译器上的运行结果可能是不一样的。

user: user-10
content: a=3就不用多说了。。。c一开始是等于b，b初始值为20，b最后的值是a*c，所以为60。。。c最终值为a+b+c（第一个c值）=83

user: user-0
content: 不似作弊啦，，，别想多了，我是好人~~~~

user: user-11
content: 引用 1 楼 u012421456 的回复:放编译器例运行一下就知道了 a = 3, b = 60, c = 83  楼主可以去看看逗号表达式方面的知识  楼上有帮人作弊了。。。。。

user: user-0
content: 我也想运行的，纸质考试没软件啊。。。。 c=(a=5,b=a*4) 这里a=5，b=20，c是等于什么？

user: user-6
content: 放编译器例运行一下就知道了 a = 3, b = 60, c = 83  楼主可以去看看逗号表达式方面的知识
user-0 提问: 急求c语言学生成绩管理系统~~~~

回复:
user: user-1
content: 刚整理文档的时候删了。。。额。。

user: user-2
content: 引用 楼主 u012923203 的回复:参考下面的数据，用C/C++设计一个简单的学生成绩管理软件，实现基本的功能。学生信息文件（A.TXT）及其内容（示意）：学号                   姓名  性别    班级201200800999    张三   男    电子01    ……课程信息（B.TXT）及其内容（示意）：课程编号课程名称    学分C01    大学英语        4 C02    C语言程序设计  3 ……学生成绩信息文件（C.TXT）及其内容（示意，成绩保存使用浮点数）：学号                    课程  成绩201200800999       C01   89201200800999    C02   68.5……功能要求：（1）       数据录入：通过软件运行界面录入（至少有1个文件可以通过界面录入方式建立）或直接编辑形成上述A.TXT  B.TXT  C.TXT，录入时，需要校验学号、课程是否已经在A、B文件中存在。（2）       显示功能：可分别显示学生、课程和学生成绩。学生成绩显示的时候，应将课程号输出为课程名称（可以自行设计更为详尽、用户友好的输出形式）。（3）       查询功能：输入一个学号时，查询出此生的所有课程情况，格式如下（注意：成绩不及格时实得学分为0）：学号：xxxxxxxxxxx       姓名：xxxxxxx课程号：xxx      课程名称：xxxxx    成绩：xx   实得学分: xx课程号：xxx      课程名称：xxxxx    成绩：xx   实得学分: xx…共修：xx科，实得总学分为：xxx（4）       数据删除、整理功能：当在A.TXT、B.TXT中删除学生或课程信息时，能分析并删除C.TXT相关信息（即删除C.TXT中的无用信息）。（5）       排序功能（选做，加分项）：对指定的科目，能够按照成绩降序或升序排序显示数据。（6）       其他自己在软件编写过程中增加的便于应用的分析、统计功能（加分项，考查自主软件改进能力）性能及其他要求：（7）       具备一定的防错能力，能够识别文件的错误，能够对文件中的数据类型错误做出有针对性的处理。（8）       验收时，自带的数据文件中学生信息条目不得少于六条，课程信息不得少于6条，成绩信息不得少于10条。  谢谢！   我有个图书信息管理系统，你先看看，改改应能用 2、C语言链表实现图书信息管理系统(回头太难[qq:85134211]友情提供) http://vs2003.net/jt.asp?id=4

user: user-3
content: 你看到了吧，这样问，没人会直接回答你的，以前没好好学，现在不会做，个人建议，从网上搜，把搜到的看懂，这样也能多少学点儿知识

user: user-4
content: 自己上课不认真。。。

user: user-5
content: 别浪费青春了

user: user-6
content: 别浪费青春了,退学去搬砖来得实在

user: user-7
content: 大学整天不学期，到期末就来发帖求助。将来你想去干嘛？？？？？？？？？

user: user-8
content: 老兄你来做地方了  你去http://www.taobao.com/ 直接花点钱买啊
user-0 提问: 请教如下code的bug

回复:
user: user-1
content: int pt[2000][2000]; 默认的栈大小是1M吧，所以溢出了。

user: user-2
content: 第一，不要随便省略代码，因为你自己不知道错误在哪里所以才向别人求助，如果你求助的时候还按照自己的错误想法省略信息，那谁也帮不了你 第二，进入函数时所有局部变量一起入栈

user: user-0
content: 我找到错误了，但是不知道错误的原因： 错误如下： 在Detec函数中，我在靠后面的地方，定义了一个很大的数组，导致stack overflow。我将这个数组改为： int **pt = (int **)malloc(2000*2000*sizeof(int)); 后，就没有溢出了，但是出了其他的问题（这是后话，这里不讨论）。  我现在的疑问是：我定义的这个二维数组，还没有执行到，也谈不上入栈，怎么会导致栈溢出呢？？   void Detect( IplImage * img ) {     int a,b,c;     a=1;b=2;     c=a+b;    int pt[2000][2000]; }

user: user-0
content: 这段code的bug实在太奇怪了： 按F11，进入Detect函数，然后，按一下F10，就提示stack overflow。好像我什么都没做，就提示栈溢出了。

user: user-0
content: 不好意思，code的大意是这样的。因为整个code比较复杂，我就贴了最主要的一段，所以忘记了一些东西，现在改正如下：   void Detect( IplImage * img ) {     int a,b,c;     a=1;b=2;     c=a+b; }  main() {     IplImage* img = cvLoadImage("E:\\TestPic\\facedec\\face_001.jpg");     cvNamedWindow("source",CV_WINDOW_AUTOSIZE);     cvShowImage("source",img);     cvWaitKey(0);     IplImage* gimg=cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);     cvCvtColor(img,gimg,CV_BGR2GRAY);     cvReleaseImage( &img );     Detect( gimg );   }

user: user-3
content: 你这个代码不完整吧  Detect() { } 这个是个函数么？ 没有返回值？ 没有参数？ 是Detect( gimg );使用的函数么？
user-0 提问: 求教2个有序链表合并的时间空间复杂度。

回复:
user: user-1
content: 链表1：一千个，100~1100 链表2：一百个，1~99，  最后一个是1101

user: user-1
content: 嗯 不对 ，最坏情况是 m+n  例子应该是  链表1：一千个，100~1000 链表2：一百个，1~99，  最后一个是1001  if (a <= b) 执行99次， if (a > b)执行1000次， if (a <= b) 执行1次

user: user-1
content: 两个有序链表合并，应该是两个链表同时从头开始遍历，谁先遍历完，另一个还没有遍历完的链表是直接接在最后  所以时间复杂度应该是：最好情况下，时间复杂度是(m、n中的最小值)，最坏情况下，时间复杂度是(m、n中的最大值)  a = 链表1[0] b = 链表2[0] while (a != NULL && b != NULL) {     if (a > b) b插入a前; b后移一位;     if (a <= b) b插入a后; b后移一位;a后移一位; } if(a != NULL)     不需要处理 if(b != NULL)     b插入a最后，此处b剩余的不需要再遍历  以 引用 2 楼 brookmill 的回复:刚才那个例子不妥，换一个： 链表1：一千个，1~999，最后一个是10000 链表2：一百个，1~99，  最后一个是10001 为例  if (a <= b) 执行99次， if (a > b)执行900次， if (a <= b) 执行1次

user: user-0
content: 引用 6 楼 brookmill 的回复:空间复杂度是O(1)，这个应该没问题。 引用 5 楼 brookmill 的回复:[quote=引用 3 楼 bx__8840668 的回复:] [quote=引用 1 楼 brookmill 的回复:] 最坏情况是O(m+n) 举例：链表1有10000个元素，链表2有10个，但是链表2的10个数据比链表1的都大，那就得把链表1的10000个全都过一遍  你的例子的复杂度应该是O(n)或者O(m)吧，只要把链表1的10000个遍历一遍就可以了啊，不需要O(m+n)啊[/quote] 1楼的例子还不是最坏情况，见2楼[/quote]  这个例子有点明白了，谢谢了啊

user: user-2
content: 空间复杂度是O(1)，这个应该没问题。

user: user-2
content: 引用 3 楼 bx__8840668 的回复:[quote=引用 1 楼 brookmill 的回复:] 最坏情况是O(m+n) 举例：链表1有10000个元素，链表2有10个，但是链表2的10个数据比链表1的都大，那就得把链表1的10000个全都过一遍  你的例子的复杂度应该是O(n)或者O(m)吧，只要把链表1的10000个遍历一遍就可以了啊，不需要O(m+n)啊[/quote] 1楼的例子还不是最坏情况，见2楼

user: user-3
content: 最好的情况是O(m、n中的最小值) 最坏的情况是O(m+n)

user: user-0
content: 引用 1 楼 brookmill 的回复:最坏情况是O(m+n) 举例：链表1有10000个元素，链表2有10个，但是链表2的10个数据比链表1的都大，那就得把链表1的10000个全都过一遍  你的例子的复杂度应该是O(n)或者O(m)吧，只要把链表1的10000个遍历一遍就可以了啊，不需要O(m+n)啊

user: user-2
content: 刚才那个例子不妥，换一个： 链表1：一千个，1~999，最后一个是10000 链表2：一百个，1~99，  最后一个是10001

user: user-2
content: 最坏情况是O(m+n) 举例：链表1有10000个元素，链表2有10个，但是链表2的10个数据比链表1的都大，那就得把链表1的10000个全都过一遍
user-0 提问: Vs2012中C/C++　MySQL MediumBlob数据的写入

回复:
user: user-1
content: 对于这种刚发的帖子，我总是毫不犹豫的顶了。如果火了就是个前排，可以混个脸熟，说不定谁好心就给粉了…稳赚不赔；如果沉了就感觉是我弄沉的，很有成就感，还能捞经验。
user-0 提问: 关于memcpy和函数参数的一个小问题

回复:
user: user-0
content: 赵老师仿佛从不解决问题,他是精神领袖

user: user-0
content: 楼上的抱歉,结贴的时候没看到你

user: user-1
content: 赵老师怎么没来？坐等赵老师解答。

user: user-1
content: get_parcel函数应该是没错的，不过这种写法调用pqueue_extract时，需要调用者free内存，违背了谁分配谁释放的原则，有点蹩脚但称不上错误。而你写的代码则是错误的，把a的值copy到NULL处是不正确的，应该这么写：      int a = 3;     int *q = (int*)malloc(sizeof(int)); // 必须分配空间     fun(&a,q);     free(q);

user: user-2
content: memcpy  意思是内存复制. memcpy(parcel, data, sizeof(Parcel));   即是把  接收到data中的数据使用内存复制的方式复制到parcel中, 复制的字节数是sizeof(Parcel)

user: user-2
content: void fun(int *a,int *q) {     memcpy(q,a,sizeof(int));  //q传入的NULL,即没有分配任何内存空间, 你却想向里写东西, 当然程序就崩溃了.     return; } main() {     int a=3;     int *q=NULL;     fun(&a,q);  //q为NULL,      printf("%d\n",*q); }  而别人的程序却没有你这样的问题.
user-0 提问: 输入字符，如果是字母则报告并返回字母在字母表中序号的程序

回复:
user: user-0
content: 谢谢2L,找了半天都发现这个问题。

user: user-1
content: lz把==和=搞混了 #include <stdio.h>  int if_char();  void main() {     int i;      printf("please enter something,if there is a letter,\n");     printf("i'll report it and its position in the alphabet.\n");     printf("enter a '&' to end this programme.\n");     while((i=if_char())!=0)                          //如果是&则结束     {         if(i>0)                            //如果是字母则显示其在字母表中的位置             printf(" and it's %d in the alphabet.\n",i);     }     printf("Bye!\n");     system("pause"); }   int if_char() {     int ch;     ch=getchar();            //获取字符     if(ch=='&')              // 如果是结束符号&则返回0         return 0;     else if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))   //如果是字母则进入字母大小写判别     {         if(ch>=65&&ch<=90)        //如果是小写则返回字母ASCII码减64，（a返回1）         {             printf("%c is a letter",ch);             return ch-64;         }         else                 //如果是大写则返回字母ASCII码减96，（A返回1）         {             printf("%c is a letter",ch);             return ch-96;         }     }     else                                             //非字母返回-1         return -1; }
user-0 提问: 来拿分吧，

回复:
user: user-1
content: 没有用'\0结尾’，所以n的值是随机的

user: user-2
content: 因为字符数组没有用'\0'结尾，strlen是通过'\0'来判断字符串长度的，所以n的值会是一个不可预测的值
user-0 提问: 读c与指针，不明白这句话，强者帮忙

回复:
user: user-1
content: 就是说从一个字符编码换到另一个字符编码不会出错

user: user-2
content: 对于我们常用的编码            ' 0' 是字符0     ASCII码是 48   按你据说的是，value 的值应该是 字符(char)的1 （ASCII  为 49)或 0 (ASCII 为 48)，想转成数字1或0 (int)    value=value-48   这样就可以转换了， 当然用 value=value-'0'也是一样，编程器会自动把   '0' 转成 48  所以两种写法生成的汇编是一样的。   更为重要的是，不管你才用的是何种字符集，使用字符常量所产生的总是正确的值  这句话的理解是。假如某些机用的编码(也就是字符集)不再是我们常用语的编码    那 '0'　就不一定是　48了 如果你再用value=value-48　　结果就不对了 但如果你用value=value-'0'         结果还是对的，得回对应的数字

user: user-3
content: value=value–'0'; 因为此处的0是按当前的字符0的ASCII码来计算， 进而可读性和移植性更强些
user-0 提问: void*的作用

回复:
user: user-1
content: 引用 2 楼 Cnwanglin 的回复:转换为void * 明显是错误的是的

user: user-2
content: 编译不会通过

user: user-3
content: 写法1就是个错的，参数类型已经对了，然后来这么一下，其实类型就错了。

user: user-4
content: void及void*用法

user: user-5
content: VC下编译不通过， 没有意义的转换

user: user-6
content: 你自己转成void *之后,编译器又自动转换为了 char *,纯粹是多此一举,除了使用程序效率降低和吓唬菜鸟,再没有其它作用

user: user-7
content: 写了两年代码了，第一次看到void*这个样子

user: user-8
content: 引用 3 楼 zhdsheng 的回复:1 应该编译不过去吧 printf是不作类型检查的，也就是非类型安全的。所以C++中，用cout呢

user: user-9
content: 这样写可能是想让我们这些菜鸟们看到这程序有种”竟然不懂这是什么意思，但看起来好像很厉害的样子“的感想。  (void*) 是多余的，printf 程序里面有强制转换机制， 它是根据%s    强制转换成 unsigned char * 类型,所以你在FileName前加个什么都无所谓了，都是多余,比如printf("This is the book name %s\n", (float *)FileName);  到函数里面照样被转成unsigned char * 处理。

user: user-10
content: 这么改的目的是啥？如果输出名字，完全没意义啊。

user: user-11
content: 1 应该编译不过去吧

user: user-12
content: 转换为void * 明显是错误的

user: user-13
content: 不但没这必要 而且是错的 %s要求参数就是char* 这么改 只能说 自作聪明
user-0 提问: 菜鸟问题，来拿分吧

回复:
user: user-1
content: 某些面试管为了显示他牛逼,老出一些这样的题目让面试都来解答,纯属变态.写这种代码的人就该开除

user: user-2
content: 这。。。我不会啊。。。。。。

user: user-3
content: 你们把该说的都说了，我就不说啥了

user: user-3
content: 引用 6 楼 xdayong 的回复:写这种代码的人，开除算了。类似于这样的代码，我一般都分开来写，别人看起来也舒服考试总喜欢考这个，不过现在已经考完高考啦

user: user-4
content: 好好想想，你懂的，呵呵

user: user-5
content: 不会

user: user-6
content: 写这种代码的人，开除算了。类似于这样的代码，我一般都分开来写，别人看起来也舒服

user: user-7
content: http://bbs.csdn.net/topics/370153775

user: user-8
content: 看置顶贴，这样的问题被问了无数遍

user: user-9
content: 不同的机器、不同的编译器就可能得出不同的结果，看置顶帖——http://bbs.csdn.net/topics/370153775

user: user-10
content: http://bbs.csdn.net/topics/370153775

user: user-10
content: 我能告诉solaris下cc 编译 结果：8 8 8 9 reahat下gcc编译 结果：8 8 7 8 这种问题，明显在c/c++置顶的帖子就是答案~~~
user-0 提问: windows下IO多路复用select怎么监听标准输入？？？

回复:
user: user-1
content: 很久之前也遇到过这个问题，发现好像并没有特别好的解决方案。后来好像是用多线程封装select的方式实现的

user: user-2
content: 我也 遇到了，看看这个https://blog.csdn.net/dengyejing/article/details/678444

user: user-0
content: 引用 1 楼 adlay 的回复:windows 下一样可以用 select 来判断. Windows 以前还自带了一套完整的 POSIX 子系统的 能不能给个详解

user: user-3
content: windows下可以使用层叠IO

user: user-4
content: windows 下一样可以用 select 来判断. Windows 以前还自带了一套完整的 POSIX 子系统的