Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于htonl函数实现的问题

回复:
user: user-1
content: 你这个源代码是在大端机器上的，我猜。

user: user-2
content: 你好像说反了

user: user-3
content: 路过帮顶

user: user-4
content: 返回的是一个经过位移操作后的临时值，不是那个s

user: user-5
content: 在小端序时 u_int32_t x = 0x01020304; u_int32_t y = htonl(x); x确实还是0x01020304, 但y = 0x04030201

user: user-6
content: htonl就是转换成网络字节序的啊，小端CPU执行htonl返回的内容一定是与输入的不一样啊。
user-0 提问: 困扰一周啊，求助TFTP通信问题

回复:
user: user-1
content: 只能说明你太笨了  这么简单的问题 我都不想回答了  不喜勿喷（和楼主开玩笑的）

user: user-0
content: 在主机中可以ping通虚拟机，但是不能ping通开发板

user: user-0
content: 自己顶一顶，期待大家的回复，困扰多时的。

user: user-0
content: 以上描述的两张图
user-0 提问: C语言图形库选择，求建议~~~

回复:
user: user-1
content: Qt

user: user-2
content: 可以参考我的博文：http://blog.csdn.net/turingo/article/details/8131057  引用 楼主 f27ny105t5123 的回复:想接触下C的图形编程，做个俄罗斯方块游戏  本身只是因为兴趣做着好玩，所以并不想用太过庞杂不好学习的类似OpenGL这样的库  不知道ege和easyX怎么样，还有没有类似的库呢  当然如果有容易上手的，功能强大一点的库就更好了，万一以后有兴趣还可以继续研究3D呢   另外LZ用codeblocks，所以easyX貌似用不了

user: user-3
content: FLTK, 跨平台的

user: user-0
content: up......

user: user-0
content: 话说跨平台就更好了。。。。。LZ有linux系统想玩的说【是不是要求太多了。。，。】
user-0 提问: 颠覆4位数,不允许使用求模,程序我写好了,不过可以不可以优化下,感觉求第3个很麻烦

回复:
user: user-1
content: 不允许求模，那我就当字符串处理了，直接反转？

user: user-2
content: 当字符串处理，不知可否 scanf("%s",nstr); strrev(nstr); printf("%s",nstr);

user: user-3
content: 呵呵，不允许用求模符难道还不充许自己写一个求模函数？

user: user-0
content: 引用 2 楼 truelance 的回复:zj - (zj / 10) * 10; n - tmp * 10   这种跟求模有什么区别？不允许使用%, 我自己定义一个 inline int mod(int a, int b) {return a-(a/b)*b;}就可以了。我也是这么觉得,老师说这是一个中小企业的面试题,反正不理解老师为什么要这么做

user: user-4
content: zj - (zj / 10) * 10; n - tmp * 10   这种跟求模有什么区别？不允许使用%, 我自己定义一个 inline int mod(int a, int b) {return a-(a/b)*b;}就可以了。

user: user-5
content: 这个不限于4位数，多少位都行(只要在int范围内) int reverse(int n) {   int result = 0;   int tmp;   while (n != 0) {     tmp = n / 10;     result = n - tmp * 10 + result * 10;     n = tmp;   }   return result; }
user-0 提问: C语言逆序排列问题

回复:
user: user-1
content: 另外,if(str[20]='\0') 应该是if(str[20]=='\0')

user: user-2
content: #include<stdio.h> void main() { 	char str[20]; 	int m,n,i,temp; 	while(1) 	{ 		printf("please enter the string:"); 		gets(str); 		if(*str) 			break; 	} 	for(i=0;str[i]!='\0';i++);                                            	for (m=0,n=i-1;m<n;m++,n--) 	{temp=str[m]; 	str[m]=str[n]; 	str[n]=temp;                                                	} 	printf("After reversed the string is:%s\n",str); }

user: user-3
content: 你声明str[20]，那最后一个字符应该是str[19]，判断str[20]行为是不确定的。

user: user-4
content: 引用 1 楼 Falleyes 的回复:你声明str[20]，那最后一个字符应该是str[19]，判断str[20]行为是不确定的。+1

user: user-0
content: 哦，是这样，谢谢
user-0 提问: gcc编译器对二维数组的大小有限制吗？

回复:
user: user-0
content: 解决了，改成全局变量就OK了。多谢二位指点！

user: user-1
content: 你自己算一下，如果是int数组，一个int是4个字节，这个数组你要分配1001*3000*4B的空间。 一般来说，不要分配这么大的二维数组，建议使用malloc动态分配，需要多少，分配多少。

user: user-2
content: 改成全局变量或者静态局部变量应该就好了。 局部变量在栈上分配内存，栈内存相对有限，楼主的数组至少有几M，估计是把栈撑爆了

user: user-1
content: 理论上没有大小限制，主要是你的电脑限制。是否能够分配连续那么大的空间呢？
user-0 提问: 字符串"123.45e-6"转化为浮点型问题

回复:
user: user-0
content: 引用 4 楼 Falleyes 的回复:[quote=引用 3 楼 truelance 的回复:] [quote=引用 2 楼 skyline_loafer 的回复:] [quote=引用 1 楼 user-3 的回复:] float x; sscanf("123.45e-6", "%f", &x);这样也行哦，但是如果我想写一个函数，来扫描字符串，请问碰到e时怎么处理啊？[/quote]  #include <math.h> 1. 扫描数字到double base里 2. 扫描到'e', base扫描结束；开始扫描后面的数字到int exp里 3. 最后结果 double x = base * power(10, exp);[/quote]double x=base*pow(10,exp);[/quote]我勒个去，，，谢谢各位了，我还以为e是自然底数的e，原来这里e代表的是10啊，，，，，

user: user-1
content: 引用 3 楼 truelance 的回复:[quote=引用 2 楼 skyline_loafer 的回复:] [quote=引用 1 楼 user-3 的回复:] float x; sscanf("123.45e-6", "%f", &x);这样也行哦，但是如果我想写一个函数，来扫描字符串，请问碰到e时怎么处理啊？[/quote]  #include <math.h> 1. 扫描数字到double base里 2. 扫描到'e', base扫描结束；开始扫描后面的数字到int exp里 3. 最后结果 double x = base * power(10, exp);[/quote]double x=base*pow(10,exp);

user: user-2
content: 引用 2 楼 skyline_loafer 的回复:[quote=引用 1 楼 user-3 的回复:] float x; sscanf("123.45e-6", "%f", &x);这样也行哦，但是如果我想写一个函数，来扫描字符串，请问碰到e时怎么处理啊？[/quote]  #include <math.h> 1. 扫描数字到double base里 2. 扫描到'e', base扫描结束；开始扫描后面的数字到int exp里 3. 最后结果 double x = base * power(10, exp);

user: user-0
content: 引用 1 楼 user-3 的回复:float x; sscanf("123.45e-6", "%f", &x);这样也行哦，但是如果我想写一个函数，来扫描字符串，请问碰到e时怎么处理啊？

user: user-3
content: float x; sscanf("123.45e-6", "%f", &x);
user-0 提问: 請教各位高手在C語言中 NULL 和 '\0' 的差別

回复:
user: user-1
content: 引用 4 楼 derekrose 的回复:你可以看作是类型不同+1,就像void和void*一样，是吗？

user: user-2
content: 你可以看作是类型不同

user: user-3
content: 值相等，都是0.但含义不同。 NULL是空指针，在c标准中的定义是在7.17节 The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant. '\0'是一个常量字符，在c标准中是在6.4.4.4节定义的 octal-escape-sequence:     \ octal-digit     \ octal-digit octal-digit     \ octal-digit octal-digit octal-digit

user: user-4
content: 你所说的NULL和‘\0’的区别相信可以用下面的例子来说明：  int main() {     char *a = NULL; // 替换成'\0'， 注意是但引号，如果是说引号就是空字符串了，不是一个概念     return 0; }  使用gcc -S test.c编出汇编程序可以看到相同的结果 main: .LFB0: 	.cfi_startproc 	pushq	%rbp 	.cfi_def_cfa_offset 16 	.cfi_offset 6, -16 	movq	%rsp, %rbp 	.cfi_def_cfa_register 6 	movq	$0, -8(%rbp)  // 可见实际都是设置成 0而已 	movl	$0, %eax 	popq	%rbp 	.cfi_def_cfa 7, 8 	ret 	.cfi_endproc  另：按照上面代码中注释所说，如果a赋值为"\0"（双引号的），那么表示a指向一个空的字符串，详见下面的汇编： 	.file	"test1.c" 	.section	.rodata .LC0: 	.string	"" 	.string	"" 	.text 	.globl	main 	.type	main, @function main: .LFB0: 	.cfi_startproc 	pushq	%rbp 	.cfi_def_cfa_offset 16 	.cfi_offset 6, -16 	movq	%rsp, %rbp 	.cfi_def_cfa_register 6 	movq	$.LC0, -8(%rbp)   // 这里可见其指向了上面的string的空字符串 	movl	$0, %eax 	popq	%rbp 	.cfi_def_cfa 7, 8 	ret 	.cfi_endproc

user: user-5
content: NULL是0指针, '\0'是0字符, 它们除了值都是0以外, 好像没啥共同点吧.
user-0 提问: 为何我的这个小数没有四舍五入且格式好像也不对？

回复:
user: user-1
content: 根据ANSI C标准 7.19.6.1.7 The exponent always contains at least two digits, and only as many more digits as necessary to represent the exponent. 和7.19.6.1.4 An optional minimum field width. If the converted value has fewer characters than the field width, it is padded with spaces (by default) on the left (or right, if the left adjustment flag, described later, has been given) to the field width. 书上的写法是符合标准的，你用的编译器不标准。

user: user-2
content: 说明印刷错误，一切以实际运行结果为准。

user: user-0
content: 找了最新的英文第6版，其实是这样的。但我的为何前面（最左边）不是空格，而是后面多补了一个 0 ？
user-0 提问: printf中，格式化字符串表示类型与参数实际类型不一致，怎么实现

回复:
user: user-1
content: 如果是占用字节长度不同的数据类型比较，可以使用sizeof判断，不过这种做法的局限性很大。

user: user-1
content: C++中有typeid，运行时可以输出类型的名称，也可以使用if(typeid(a)==typeid(1))来判断是否为整形，然后做出相应的动作。 不过，要用C++的话，cout输出已经智能化，cout<<temp输出的就是char类型。 C语言比较底层，所以这个没办法解决。

user: user-2
content: 不会有问题，你可以认为可变参数函数中所有参数中就是堆栈上的一个void* []（如果函数返回大数据结构时，指向返回值具体堆栈内存的指针也在这个void*[]中 -- 没错，看上去是函数返回一个结构，实际上结构内存是由调用者分配在堆栈上并将指针作为额外参数传递给函数的，函数返回时又将这个指针作为返回值还给调用者）。 如果传递的参数实际占有字节数<=sizeof(void*)，那么堆栈上相应位置就是具体值，如果参数占有字节>sizeof(void*)的话，那么这个位置就是一个指针，指向实际数据存放点。 所以你的例子中void*[0] = char*， void* [1] = (void*)byte。  其实所有函数参数都是通过这种方式传递的，不同调用约定之间的区别只是函数退出时参数占用堆栈由谁释放还有传入参数谁在void* []中（比如fastcall，前面几个参数通过寄存器而不是堆栈）以及具体排列位置不同（比如void* [0]是第一个参数还是最后一个参数）。

user: user-3
content: 编译器编译的时候可能会按照字节对齐规则

user: user-3
content: 目测lz用的是类似wintc的编译器

user: user-4
content: 没有办法处理吧, 要程序员写程序的时候类型匹配, 这个函数用的变长参数列表, 编译器没有办法做类型检查, 只能傻傻地根据栈里的参数来输出.

user: user-5
content: 引用 2 楼 truelance 的回复:从标准的角度讲(6.5.2.2.6): If the function is defined with a type that includes a prototype, and either the prototype ends with an ellipsis (, ...) or the types of the arguments after promotion are not compatible with the types of the parameters, the behavior is undefined. 这种情况每个编译器的实现是不一样的。 但一般情况下，会将整形的都提升成int, float提升成double. 这样，你写的这个例子一般不会出错。如果参数是double temp=0.1, 那结果肯定乱了。 正解。

user: user-6
content: 使用sizeof 試試   #include<stdio.h> #include<stdlib.h> void main() {         	char temp = 0x12; 			printf("%d", sizeof(temp)); }

user: user-7
content: 从标准的角度讲(6.5.2.2.6): If the function is defined with a type that includes a prototype, and either the prototype ends with an ellipsis (, ...) or the types of the arguments after promotion are not compatible with the types of the parameters, the behavior is undefined. 这种情况每个编译器的实现是不一样的。 但一般情况下，会将整形的都提升成int, float提升成double. 这样，你写的这个例子一般不会出错。如果参数是double temp=0.1, 那结果肯定乱了。

user: user-8
content: 我也不懂，重在参与。 可变参数是通过va_start、va_arg、va_end这些宏来实现的，其中va_arg要指定对应参数的类型。 printf里面是根据%d这些来决定给va_arg指定什么类型的，比如见到%d就是int，见到%c就是char 所以楼主提出的问题，我个人认为在printf里面是无法解决的。有可能是编译器作弊，见到%d就擅自把temp转换成int才压栈，这样printf就能正确处理了。 请楼下的指正。

user: user-0
content: 的确是 Default Argument Promotion 的问题  http://blog.csdn.net/astrotycoon/article/details/8284501  这篇东西说的很详细，原来 ... 那些参数都会Default Argument Promotion  那这么说了，其实网上一堆说变参函数的文章其实是错的。。。。  然后，我试了一下，vs会提升，iar会提升，不管你发的是%d还是%c甚至是%f，char，short都会被提升成int 至于keil就不会提升，参数是什么类型都会忠实地还原，坑爹啊。。都是奇葩的编译器害的。。
user-0 提问: C语言指向函数的指针问题的求教

回复:
user: user-1
content: 你好： 我想跟你确认下，如果直接用函数名去调用函数，编译器是不是会自动隐式转换成函数指针调用？ ------------------------------------------------------------------------------------------------------------------------------ 不会。   另外，就如我上面说的p()这种直接用函数指针调用，编译器是不是会自动加上*转换成函数类型，再隐式转换到函数指针（因为我觉得既然已经是直接用函数指针调用了，编译器需要的就是一个函数指针，为什么还要做这么一步间接操作呢） ------------------------------------------------------------------------------------------------ 也不会，p是直接使用的。但若是( ************p)( ... )则存在隐式转换。

user: user-2
content: 引用 2 楼 brookmill 的回复:[quote=引用 楼主 VincentZhouCVL 的回复:] p = max; //p = &max也可以（这个已经理解） p(3,4); (*p)(3,4); 既然楼主已经理解了第一行，那反过来，第二行和第三行也就不难理解了呀。 一般的变量都有一个值，需要一个地址来保存这个值，所以才有&和*的问题。 比如，int i=1; int *p=&i; i的值是1，指针p指向i的地址，类似0x12345678 函数就不一样了。函数名本身没有那样的一个值，对编译器来说它就是一个地址。调用一个函数实际上就是跳转到这个地址（传递参数、保存返回地址，这都是题外话）。所以，&和*对于函数指针来说都是没什么意义的。 [/quote]长知识了

user: user-3
content: 这是编译器优化的结果吧

user: user-4
content: 引用 楼主 VincentZhouCVL 的回复:p = max; //p = &max也可以（这个已经理解） p(3,4); (*p)(3,4); 既然楼主已经理解了第一行，那反过来，第二行和第三行也就不难理解了呀。 一般的变量都有一个值，需要一个地址来保存这个值，所以才有&和*的问题。 比如，int i=1; int *p=&i; i的值是1，指针p指向i的地址，类似0x12345678 函数就不一样了。函数名本身没有那样的一个值，对编译器来说它就是一个地址。调用一个函数实际上就是跳转到这个地址（传递参数、保存返回地址，这都是题外话）。所以，&和*对于函数指针来说都是没什么意义的。

user: user-5
content: 如果a的地址是b 那么b的地址是c 那么内存会不够用的

user: user-6
content: 编程不需要理会这种区别. 函数指针对应函数的入口地址,  和调用方式(参数列表), 反正都是对参数压栈之后跳转到相应的代码. 就p() (*p)()来说, 编译器没有 "函数调用" 和 "指针函数调用" 之分, 这是程序表达上的不同, 动作是一样的.  就像大名小名都对应一个人, 不用去考虑你叫他的时候, 他是不是先把大名转换成小名, 然后再理解这是叫自己.  可以类比一下普通变量,比如一个变量i "编译器对变量i的访问是直接访问呢还是转换成i的指针再去访问呢?" 直观理解肯定是不需要转换成指针, 可是, 编译器要访问肯定要知道地址啊, 这不相当于转换成指针了吗?

user: user-0
content: 引用 2 楼 brookmill 的回复:[quote=引用 楼主 VincentZhouCVL 的回复:] p = max; //p = &max也可以（这个已经理解） p(3,4); (*p)(3,4); 既然楼主已经理解了第一行，那反过来，第二行和第三行也就不难理解了呀。 一般的变量都有一个值，需要一个地址来保存这个值，所以才有&和*的问题。 比如，int i=1; int *p=&i; i的值是1，指针p指向i的地址，类似0x12345678 函数就不一样了。函数名本身没有那样的一个值，对编译器来说它就是一个地址。调用一个函数实际上就是跳转到这个地址（传递参数、保存返回地址，这都是题外话）。所以，&和*对于函数指针来说都是没什么意义的。 [/quote]  你好： 我想跟你确认下，如果直接用函数名去调用函数，编译器是不是会自动隐式转换成函数指针调用？ 另外，就如我上面说的p()这种直接用函数指针调用，编译器是不是会自动加上*转换成函数类型，再隐式转换到函数指针（因为我觉得既然已经是直接用函数指针调用了，编译器需要的就是一个函数指针，为什么还要做这么一步间接操作呢）

user: user-7
content: (****************************************p)(3,4);也可以  这里编译器就把*函数指针当做函数指针本身就可以了
user-0 提问: 这个版高手多，在这问吧

回复:
user: user-1
content: 你把页的起始地址和栈顶的地址搞混了。新分配一页时，栈顶不是在页的起始地址，而是在页的尾部。

user: user-0
content: 堆不一样呀，线性地址与物理地址的映射是以4K为边界的，所以设置一个页表项就解决4K的范围

user: user-2
content: 要是像你这么说，堆刚好就是这一页的最顶位置，换了一页进来后，堆的下一个位置不也一样没有命中？一样要换多一页？那前面换的页岂不是一样没有用？
user-0 提问: 用strcpy溢出，但不报错

回复:
user: user-1
content: 引用这段代码正常情况该是出段错误 未定义行为的代码， 行为不确定， 没有“正常情况"的说法

user: user-2
content: 运气好，如果刚好覆盖到其他程序模块的地址范围，就会报错了！

user: user-3
content: 引用 1 楼 zilaishuichina 的回复:strcpy 的功能就是从str这个位置开始写字符串，写到'\0'为止，不考虑str这个位置实际分配了有多大，只有写到了不能写的内存才会报错，只要内存能写，就会一直写下去+1,c编译器不会检查是否溢出这种问题

user: user-4
content: 段错误其实是进程在访问一个内存地址时, 内存管理机制发现相应的地址不是进程的使用的合法内存时出现的, 常见的页式管理页面大小是4K, 那4K内存分给进程了, 进程随便用. 它没有办法做精确到一个几个Byte的检查.

user: user-5
content: 数组首地址没错就行。

user: user-6
content: 引用 3 楼 relaxisland 的回复:C语言的内存越界就跟 越界捕鱼一样 不一定每次都会被抓到+1

user: user-7
content: 操作系统不一定每次都能捕获到这种写内存越界的问题的。系统管理进程地址空间一般是按段页式，如果这一页可写，虽然程序写越界了，如果没有越过这一页的话，操作系统是不关心的。一些工具可以检测非法内存访问的情况，比如valgrind。

user: user-8
content: C语言的内存越界就跟 越界捕鱼一样 不一定每次都会被抓到

user: user-9
content: 代码有错，不一定会理解触发异常。 这段代码把后面的内存踩了，它自己运行是没错的，影响的是这个函数退出以后的代码。有可能碰巧没有产生明显的异常效果。但是反复运行时，不定哪一次就出错了。

user: user-10
content: strcpy 的功能就是从str这个位置开始写字符串，写到'\0'为止，不考虑str这个位置实际分配了有多大，只有写到了不能写的内存才会报错，只要内存能写，就会一直写下去

user: user-11
content: 楼主没有搞清楚内存溢出和内存报错是两个不同的概念。 内存溢出就一定要报错吗？ 吃多了一定会撑死吗？明显不一定嘛。你要吃很多很多才会被撑死的，同理，内存要溢出大范围才有机会报错。 试一下上千个字符的串看看就知道了。

user: user-12
content: 一次不报，不等于下次不报；下次不报，不等于任何环境下都不回报！ 这样的调用是一个很危险的操作，有可能将其他内存给洗刷。

user: user-13
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-14
content: 你使用的变量str 在栈内，而它的地址不是固定的，比如   当EBP-X 足够大，而不把 主函数的返回地址冲掉的话，那么主函数就可以正确返回。这个要看编译器产生的代码而定。

user: user-15
content: 用strcpy_s替代strcpy吧
user-0 提问: 求一个网络爬虫的代码，不用java

回复:
user: user-1
content: 来个php的  $response = file_get_contents($url); $reg = '';//具体根据什么规则内容 preg_match($reg,$response,$match); print_r($match);

user: user-2
content: 核心思路是，分析页面文件，访问超链接（加过滤条件），如此迭代。

user: user-3
content: 选用python应该可以

user: user-4
content: 是的 你可以选择用python

user: user-5
content: http://www.oschina.net/search?scope=project&q=爬虫  可以参考下。

user: user-6
content: Spider / Web Crawl C++ Examples  其实，google/baidu 并不麻烦......

user: user-7
content: 你真当CSDN的人都是喂食的啊~

user: user-8
content: 引用 4 楼 FightForProgrammer 的回复:值得搜藏的东东+1

user: user-9
content: 值得搜藏的东东

user: user-10
content: http://doc.scrapy.org/en/latest/intro/tutorial.html python scrapy! so easy
user-0 提问: 用c语言将十进制数转化为16进制数

回复:
user: user-1
content: http://blog.csdn.net/wangshiqilin_fjy/article/details/13996657仅供参考

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

user: user-3
content: 1）每个十进制数字，都是十六进制数字，所以单个数字，不需要转换 2）C,C++代码中的十进制常数，十六进制常数，是用ASCII表示的编码十进制，十六进制数， 这个编译器，会自动转换为二进制数储存 3）字符串表示的十进制数，十六进制数，是用ASCII表示的编码十进制，十六进制数的字符串      是用字符串储存的，用ASCII表示的编码十进制，十六进制数     这个进制之间的转换，需要编程或者调用库函数转换。  4）不确定长度的十进制和十六进制数的转换，      按照转换规律，自己做大数加法，减法，乘法，除法自己做转换处理     C++可以用string 表示十进制和十六进制数，并定义大数加法，减法，乘法，除法自己做转换处理。

user: user-4
content: 自己写个栈（也可以用系统的），借用栈，核心代码如下： SeqStack st; 	InitSeqStack(st); 	 	int N = 0; 	char ch; 	while(val != 0) 	{ 		N = val % m; 		if(N >= 10) 		{ 			ch = 'A' +(N - 10); 			Push(st,ch); 		} 		else 		{ 			ch = N + '0'; 			Push(st,ch); 		} 		val = val / m; 	} 	ShowSeqStack(st); 	DestroySeqStack(st);

user: user-5
content: 只要是数，就不需要转换。除非是字符串。

user: user-6
content: 怎么可能转换呢？ 不管10进制数还是16机制数，在计算机内部都是保存成2进制的。 只有显示给人看的时候才会有10进制和16机制之分。所以你不用变换

user: user-6
content: 是整数吗？

user: user-0
content: 但是我这十进制数是在程序中待处理的数，是一个变换的数，例如x（x不大于16），我需要将x转化成16进制用于下面语句处理，而不是在界面显示，求指导

user: user-7
content: 不管10进制数还是16机制数，在计算机内部都是保存成2进制的。只有显示给人看的时候才会有10进制和16机制之分。 例如： #include <stdio.h> int main(void) {     int a = 127;  //10进制数   printf("%d\n", a);   //打印10进制数127     printf("%x\n", a);   //打印16进制数7f }

user: user-8
content: %d输出十进制 %o输出八进制 %x或%X输出十六进制 这些内容入门书上都有

user: user-9
content: n<256,r[1]=n%16;n=n/16;..........
user-0 提问: int a = 0 , b , c  这种写法是什么意思

回复:
user: user-0
content: 引用 1 楼 u012421456 的回复:定义了3个变量a，b，c，其中a被初始化为0  楼主需要好好看书  谢谢，一下子没有反应过来，天天看程序，看傻了。。。。

user: user-1
content: int a = 0 , b , c ;//表示定义三个整型变量a,b,c，并将a的初值赋为0；b,c中的初值为垃圾值。

user: user-2
content: 这个不是逗号表达式，定义了3个变量a,b,c。b，c未初始化。

user: user-3
content: 定义了3个变量a，b，c，其中a被初始化为0  楼主需要好好看书
user-0 提问: 求解答

回复:
user: user-1
content: 这是家庭作业么

user: user-2
content: 1）地区码，如果有表，可以查表验证 2）生日码，可以检验年龄出生日期是否错误 3）校验码，根据题目里的算法计算  这个题目，没有考虑第一条和第二条 所以，只需要，根据根据题目给出的方法，计算就行了

user: user-3
content: #include <stdio.h> #include <string.h>  static char checksum[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};  int get_checksum(const char *id, int len) {		 	static int weights[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; 	 	int i, s; 	int mod = 11; 	int sum = 0;  	for (i = 0; i < len; ++i) { 		if (id[i] <'0' || id[i] > '9') return -1; 		s = id[i] - '0'; 		sum += (s * weights[i]);                 sum %= mod; 	} 	 	return sum; }  int main() { 	char myid[20] = "11010519491231002"; 	int ret; 	int len = strlen(myid); 	ret = get_checksum(myid, len);         if (ret == -1) {             printf("Error!\n");             return 1;         } 	myid[len] = checksum[ret]; 	myid[len + 1] = '\0';  	printf("%s\n", myid);  	return 0; }

user: user-4
content: 算法这么明确你还写不出来？c语言是体育老师教的吗？

user: user-5
content: 自己写啦，又不复杂

user: user-0
content: 等有答案了，一定分享

user: user-6
content: 写完了求共享
user-0 提问: 面试题求助？

回复:
user: user-1
content: 内存命中率：应该考虑的是从硬盘映射到内存方式，应该采用全关联映射，还有内存替换算法，一般采用LRU！虚拟内存就是讲怎样合理利用内存的，多看看虚拟内存管理吧！

user: user-2

user: user-0
content: 引用 10 楼 mujiok2003 的回复:说的cache miss吧？  1.  cache更大的处理器 2.  减少跳转指令(if, for, break, return, goto等） 3.  把经常一起访问的数据相邻放放置， 4. 充分利用以及读入内存的数据， 减少为不同的操作读入相同的数据 5. 减少动态分配内存次数，以减少内存碎片 6  优化程序让程序变小 7 小心多线程环境的伪共享（false sharing) .....  高手，有专门的书籍，或者文章讲解这个话题吗？  通俗易懂的。谢谢。

user: user-3
content: 说的cache miss吧？  1.  cache更大的处理器 2.  减少跳转指令(if, for, break, return, goto等） 3.  把经常一起访问的数据相邻放放置， 4. 充分利用以及读入内存的数据， 减少为不同的操作读入相同的数据 5. 减少动态分配内存次数，以减少内存碎片 6  优化程序让程序变小 7 小心多线程环境的伪共享（false sharing) .....

user: user-0
content: 引用 7 楼 Baoge_leopard 的回复:http://blog.csdn.net/zhang55090/article/details/7854300 看下这个  你这是 第三方库，  和我说的不是一回事

user: user-4
content: 引用 7 楼 Baoge_leopard 的回复:http://blog.csdn.net/zhang55090/article/details/7854300 看下这个

user: user-5
content: http://blog.csdn.net/zhang55090/article/details/7854300 看下这个

user: user-5
content: CPU产生的逻辑地址在内存中能够访问到的概率,就是内存的命中率 你觉得对不？

user: user-0
content: 引用 3 楼 Indestiny 的回复:cache？ 课本里面有  这里的 cache是指硬件高速缓存，还是指windows或者linux自己搞的缓存机制？

user: user-0
content: 引用 1 楼 user-8 的回复:你指的应该缓存的命中率吧，  还是指数据库中查找的数据在内存中的命中率， 问题要说清楚啊  缓存的命中率啊。

user: user-6
content: cache？ 课本里面有

user: user-7
content: 应该是问虚拟内存管理方面的问题吧。  因为物理内存远小于程序运行时所需要的内存，所以操作系统提供了一个虚拟内存的概念。 操作系统把程序数据按页或者按段分成几部分，把程序需要的数据从硬按页加载到内存中，只是需要这部分数据时才加载，不需要时不加载，这样在程序运行过程中可能会发生需要的数据没有被加载的情况，即缺页。  为了减少缺页的情况，即提高访问页面的命中率，在操作系统层面，最关键的就是页面调度算法，一个合理的页面调度算法会提高命中率。  在程序设计层面，将相同时间内访问的数据段集中放在一起，也会提高命中率，另外一块数据的大小不要超过一个页面，一般上页的大小是4k左右，这样定义一个数组最好就不要超过4k，否则这个数组会被放在二个页，遍历时就有可能发生缺页，降低了命中率。

user: user-8
content: 你指的应该缓存的命中率吧，  还是指数据库中查找的数据在内存中的命中率， 问题要说清楚啊
user-0 提问: socket编程

回复:
user: user-1
content: 引用 7 楼 fdsafwagdagadg6576 的回复:请贴出solaris下对应的函数  随便一个可以sleep函数就能实现定时器的功能。

user: user-2
content: 引用 7 楼 fdsafwagdagadg6576 的回复:请贴出solaris下对应的函数  你是做程序的么，连个定时器还的人家给帖代码，要你何用？你们人事也真行

user: user-0
content: 请贴出solaris下对应的函数

user: user-3
content: 就是定时往另外一方发送消息，另一方在规定时间内没收到，就认为断开。 或者是另外一方接收到回复，而规定时间内没收到回复，就认为对方断开。

user: user-0
content: 各位兄弟，能将具体的心跳的code贴出来吗

user: user-1
content: 引用 5 楼 alex_my 的回复:就是定时往另外一方发送消息，另一方在规定时间内没收到，就认为断开。 或者是另外一方接收到回复，而规定时间内没收到回复，就认为对方断开。 正解，自己在客户端设置一个计时器就行了。

user: user-4
content: 你直接拔网线， 不一定就能立即得到read < 0 的  心跳包才是最靠谱的， 客户端服务器通用

user: user-5
content: 不是recv <= 0 就是连接断开么？  服务端跟客户端不是一样么？  一般查看对方是否保持连接，使用心跳机制

user: user-6
content: 心跳检测就可以了
user-0 提问: C语言打字软件课设

回复:
user: user-1
content: http://download.csdn.net/detail/zhao4zhong1/4084259

user: user-1
content: 仅供参考http://download.csdn.net/detail/zhao4zhong1/6031737

user: user-2
content: 这要写c/s啊

user: user-0
content: 我们只能用C语言，并且没有数据库。，这个是我题目，我只能有几个地方不懂。 打字练习统计软件 能对用户（管理员、普通用户）进行管理， 对用户打字进行统计并排序。 管理员可以增加用户打字的对照文本信息， 用户可以选择需要进行练习打字的文本， 可以对用户的错误进行统计并给出正确率， 可以对不同用户的打字成绩进行查询和排序操作。 （要求：1.源文件采用多文件的工程结构 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善，适当的注释，5.关于文件的内容需要自学）

user: user-3
content: 用MFC+数据库吧  你要说出你哪里不会

user: user-0
content: 就是打字软件的一些要求。可以帮帮忙，或者在线教下

user: user-2
content: 把复杂问题简单化，一步一步来
user-0 提问: ACM新人求指导RE

回复:
user: user-0
content: 引用 2 楼 cyd54454 的回复:是哪个网站的ACM，看下题目喽 HDU的1176，免费馅饼，一个简单的DP问题。

user: user-0
content: HDU OJ的1176，免费馅饼，一个简单DP问题。

user: user-1
content: 11是对的呀

user: user-2
content: 是哪个网站的ACM，看下题目喽

user: user-3
content: 从楼主的描述来看11应该够了，但是具体还得看题目和代码 我做ACM通常都留出一些余量，比如要求10我可能会用a[16]
user-0 提问: 求助acm大神，UVA OJ WA了n次要崩溃了（修改版，因为代码的问题重新写了一次）

回复:
user: user-0
content: 引用 1 楼 u012421456 的回复:通不过有什么提示吗？先看看是不是输入输出问题，确定符合输入输出的格式要求吗UVa OJ没有给出wrong answer的原因，输入输出我也觉的都一样了

user: user-1
content: 通不过有什么提示吗？先看看是不是输入输出问题，确定符合输入输出的格式要求吗
user-0 提问: 链表中的困惑

回复:
user: user-1
content: 对于链表的任何改动，都要特别注意处理头节点，因为如果需要改动的刚好是头节点那就需要特殊处理。比如删除节点、插入节点、合并两个链表。

user: user-1
content: 引用 2 楼 u014395848 的回复:我似乎明白你的意思，就是第一个if是第一个结点就是要删除的结点，下边的if是除了开头第一个结点外其他所有结点的删除 对，就是这样。和节点的个数没关系。

user: user-0
content: 我似乎明白你的意思，就是第一个if是第一个结点就是要删除的结点，下边的if是除了开头第一个结点外其他所有结点的删除

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390878209又来水经验了

user: user-2
content: http://pan.baidu.com/s/17yIcQ

user: user-3
content: http://bbs.csdn.net/topics/390878209

user: user-1
content: 引用 楼主 u014395848 的回复:第一个if那段代码是链表只有一个节点时删除的方法， 这句话不准确，应该是删除链表的头节点的方法。 如果刚好要删除第一个节点，处理方法是特殊的，需要改动链表的头指针，也就是这句*l = p->next; 所以第一段不能省略
user-0 提问: 哪位大神帮忙看一下c程序哪里发生段错误

回复:
user: user-1

user: user-0
content: 谢谢，我也是刚发现，这个问题问的太弱了

user: user-2
content: 字符串结束的标志是'\0'，不是'\n' 下面两行的\n都改成\0 for(;*(fo+i)!='\n';i++) *(to+i)='\n';
user-0 提问: 关于指令地址、变量名地址优先级的问题

回复:
user: user-1
content: 笑死了。不怪自己表达能力差怪别人理解不行？还满嘴逗B逗B2的。也是醉了。

user: user-0
content: 引用 2 楼 truelance 的回复:没几行代码，一眼望过去就五六个错误。逗B2,可能是问的是你从来没接触过的吧，这个代码是我拆分的，你要看好标题，我问的是什么，回去好好把书看看，好吧！

user: user-0
content: 引用 1 楼 truelance 的回复:什么乱七八糟的，LZ你确认这个代码能编译通过么?逗B谁说要编译了，看清楚我问的是什么？

user: user-2
content: 引用 5 楼 lm_whales 的回复:1）C,C++栈上是不会有函数的，除非你刻意吧函数的代码，搬迁到栈上来。 2）这种不定义函数返回值类型的代码，是不好的代码风格 3）main 最好不要返回 void 类型 4）栈上只会保留函数调用后需要返回的地址 5）单纯的函数声明本身，是不会生成占用内存的代码的，函数定义才会。 函数声明，和变量定义的含义，是不同的 函数声明，只是表示有别的地方，定义了这个函数， 在这里，你可以用这种方式，调用这个函数。  6） 函数声明，尽量不要写在函数内部。 虽然早期代码有这种用法，但是没有必要这么用。 因为函数内部的函数声明，并不是在函数内部定义函数。

user: user-3
content: 引用 5 楼 lm_whales 的回复:1）C,C++栈上是不会有函数的，除非你刻意吧函数的代码，搬迁到栈上来。 2）这种不定义函数返回值类型的代码，是不好的代码风格 3）main 最好不要返回 void 类型 4）栈上只会保留函数调用后需要返回的地址 5）单纯的函数声明本身，是不会生成占用内存的代码的，函数定义才会。 函数声明，和变量定义的含义，是不同的 函数声明，只是表示有别的地方，定义了这个函数， 在这里，你可以用这种方式，调用这个函数。  6） 函数声明，尽量不要写在函数内部。 虽然早期代码有这种用法，但是没有必要这么用。 因为函数内部的函数声明，并不是在函数内部定义函数。+，还是+1好

user: user-4
content: 1）C,C++栈上是不会有函数的，除非你刻意吧函数的代码，搬迁到栈上来。 2）这种不定义函数返回值类型的代码，是不好的代码风格 3）main 最好不要返回 void 类型 4）栈上只会保留函数调用后需要返回的地址 5）单纯的函数声明本身，是不会生成占用内存的代码的，函数定义才会。 函数声明，和变量定义的含义，是不同的 函数声明，只是表示有别的地方，定义了这个函数， 在这里，你可以用这种方式，调用这个函数。  6） 函数声明，尽量不要写在函数内部。 虽然早期代码有这种用法，但是没有必要这么用。 因为函数内部的函数声明，并不是在函数内部定义函数。

user: user-5
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-6
content: 语无伦次

user: user-7
content: 没几行代码，一眼望过去就五六个错误。

user: user-7
content: 什么乱七八糟的，LZ你确认这个代码能编译通过么?
user-0 提问: 九宫图C语言

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  #define MAX_NUM 100  void matrix(int n) {     int *arr = (int *)malloc(n * n * sizeof(int));     int i=0;     int x = n-1;     int y = n/2;      for (i = 0; i < n*n; i++)         arr[i] = 0;          for (i = 1; i <= n*n; i++)     {         int x1 = x+1;         int y1 = y-1;          arr[x*n+y] = i;          if (x1>=n) x1 = 0;         if (y1<0) y1 = n-1;         if (arr[x1*n+y1]>0)         {             if (--x < 0) x = n-1;         }         else         {             x = x1;             y = y1;         }     }          for (x = 0; x < n; x++)         for (y = 0; y < n; y++)             printf("%d%c", arr[x*n+y], (y<n-1)?' ':'\n');      free(arr); }  int main(void) {     int num[MAX_NUM];     int n = 0;     int i, k;      scanf("%d", &k);     while (k > 0)     {         num[n++] = k;         scanf("%d", &k);     }          for (i = 0; i < n; i++)         matrix(num[i]);          return 0; }
user-0 提问: 关于使用寄存器传参

回复:
user: user-0
content: 引用 3 楼 truelance 的回复:你这个没有优化，试试 gcc -O2 src.c 注意O是大写的 gcc -O2 -S -o o2.s src.c 这样感觉好多了， 谢谢您的指点！！！  .file	"exch.c" 	.text 	.p2align 4,,15 	.globl	swap 	.type	swap, @function swap: .LFB24: 	.cfi_startproc 	movl	(%rdi), %eax 	movl	(%rsi), %edx 	movl	%edx, (%rdi) 	movl	%eax, (%rsi) 	ret 	.cfi_endproc .LFE24: 	.size	swap, .-swap 	.section	.text.startup,"ax",@progbits 	.p2align 4,,15 	.globl	main 	.type	main, @function main: .LFB25: 	.cfi_startproc 	movl	$16, %eax 	ret 	.cfi_endproc .LFE25: 	.size	main, .-main 	.ident	"GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2" 	.section	.note.GNU-stack,"",@progbits

user: user-0
content: 引用 3 楼 truelance 的回复:你这个没有优化，试试 gcc -O2 src.c 注意O是大写的 这确实是优化了。有点看不懂。

user: user-1
content: 你这个没有优化，试试 gcc -O2 src.c 注意O是大写的

user: user-0
content: 引用 1 楼 truelance 的回复:你这个是debug版本的编译结果，不会进行优化。是一行行直译的结果，所以显得比较傻。 换成release编译，没用的操作就会被优化掉了。 我采用gcc src.c 编译生成a.out，也是一样。  Dump of assembler code for function swap:    0x00000000004004ed <+0>:	push   %rbp    0x00000000004004ee <+1>:	mov    %rsp,%rbp    0x00000000004004f1 <+4>:	mov    %rdi,-0x18(%rbp)    0x00000000004004f5 <+8>:	mov    %rsi,-0x20(%rbp) => 0x00000000004004f9 <+12>:	int3       0x00000000004004fa <+13>:	mov    -0x18(%rbp),%eax    0x00000000004004fd <+16>:	mov    (%rax),%eax    0x00000000004004ff <+18>:	mov    %eax,-0x4(%rbp)    0x0000000000400502 <+21>:	mov    -0x20(%rbp),%rax    0x0000000000400506 <+25>:	mov    (%rax),%edx    0x0000000000400508 <+27>:	mov    -0x18(%rbp),%rax    0x000000000040050c <+31>:	mov    %edx,(%rax)    0x000000000040050e <+33>:	mov    -0x20(%rbp),%rax    0x0000000000400512 <+37>:	mov    -0x4(%rbp),%edx    0x0000000000400515 <+40>:	mov    %edx,(%rax)    0x0000000000400517 <+42>:	pop    %rbp    0x0000000000400518 <+43>:	retq    End of assembler dump.

user: user-1
content: 你这个是debug版本的编译结果，不会进行优化。是一行行直译的结果，所以显得比较傻。 换成release编译，没用的操作就会被优化掉了。
user-0 提问: 波兰计算器  gdb 调试：run 1 2  *    居然 argc=41 奇怪的现象

回复:
user: user-0
content: 引用 2 楼 adlay 的回复:* 会被 shell 扩展成当前目录下所有的文件名  确实是这样，没有往 这方面想过（真是）。 将*用其他的字符代替即可。

user: user-1

user: user-2
content: * 会被 shell 扩展成当前目录下所有的文件名

user: user-2
content: shell 扩展了 * 号吧，用 run 2 3 4 + '*'  这样把 * 号用引号包起来试试
user-0 提问: 热烈庆祝本人受关注人数即将突破6000大关！散分！！＋无头节点单链表操作例子

回复:
user: user-1

user: user-2

user: user-3
content: 还有分可以得吗？来得很迟

user: user-4
content: 突破6000大关，值得庆贺，继续努力啊。

user: user-5
content: 恭喜恭喜。。。

user: user-6
content: 再+1  关注

user: user-7
content: 恭喜，恭喜，拿分。

user: user-8
content: 赞赞赞

user: user-9
content: nafneg

user: user-10

user: user-11

user: user-12

user: user-13
content: ，看到了过来顶一下。

user: user-14
content: 赵老师这是要普天同庆的节奏呀

user: user-15
content: 初来乍到，先攒分，谢谢

user: user-16
content: 恭喜楼主，在楼主这里受益匪浅

user: user-17
content: 好题

user: user-18
content: 哈 面试的是经常做这个题目

user: user-19

user: user-20
user-0 提问: 用c编写一个控制USB口的小程序要求如下，请各位大神指教；

回复:
user: user-1
content: 最好改usb的驱动，在usb probe的时候做事件通知用户层程序，如果不这样做的话，禁止usb没意义，其它程序照样可以重新激活usb

user: user-2
content: http://blog.csdn.net/itcastcpp/article/details/4244982

user: user-2
content: 楼上这像是灌水类似的东东

user: user-3
content: 赶脚这像是银行U盾类似的东东
user-0 提问: C语言指针问题

回复:
user: user-1
content: 你交换的是值，不是地址

user: user-2
content: 输出就是先输出大的，再输出小的，因为你有判断处理，如果a小那么和b交换，所以到最后a肯定是大数。sort(实际上应该是swap，sort是排序不是交换)函数就是利用指针来修改（交换）实参的值的。p1,p2的指向（也就是指针值）没有变，而是改变了指向的对象的值。

user: user-3
content: 1）了解下传值和传应用的区别（void sort(int *p1,int *p2);）。 2）了解下C++别名的知识（p1 = &a;）。

user: user-4
content: 代码里明明交换的是*p1和*p2么，也就是a和b，不是p1和p2.  btw: 谭浩强自己都没写过实用的代码，实在是误人子弟。

user: user-5
content: sort这里应该是swap吧，你的sort函数交换的是p1和p2所指对象的值，而 p1 = &a; // p1指向的是a p2 = &b; // p2指向的是b 所以sort交换的是a和b的值

user: user-6
content: sort中将p1, p2指向的内容进行了交换而不是交换了p1, p2本身，所以输出a, b是正确的

user: user-7
content: 这是传址调用，是会改变原来变量的值的。简单来说，p1是a的地址，p2是b的地址，在sort里，你取出了相应地址的值，进行了交换，结果就是现在a的值是原来b的值，现在b的值是原来a的值。传值调用才不会改变原变量的值。特意下了一本看了一下，人家明明交换的是p1，p2的值啊.....现在p1指向了b，p2指向的a而已。  贴个源码：  if(a < b) {p = p1;p1 = p2;p2 = p;}
user-0 提问: EOF ^Z 的问题

回复:
user: user-1
content: 這個程式在Windows(命令提示字元)下使用Crtl+Z，如果再UNIX等環境下執行，就使用Crtl+D 來傳回EOF。 另外通常EOF多半代表-1這個整數值。

user: user-2
content: Windows：Enter、Ctlr+Z、Enter

user: user-3
content: 看有帮助没——http://www.ruanyifeng.com/blog/2011/11/eof.html

user: user-4
content: 如何在stdin（键盘）中输入EOF呢？在不同的系统中的输入方法不同  ctrl-d -- Unix terminal "End of File" (same as "exit" on many shells)   ctrl-z -- DOS "End of File"
user-0 提问: win7服务程序中如何弹出对话框

回复:
user: user-1
content: 引用 4 楼 xiaoruiaichi 的回复:问题已解决。 是通过createprocessuser的么

user: user-0
content: 问题已解决。

user: user-0
content: win7下这种方法我试过，但是不懂它具体操作流程，所以没有成功，有什么现成的例子可以参考吗

user: user-2
content: 引用 1 楼 user-3 的回复:服务程序一般在后头运行，不与用户交互， 一般写日志就新了。  被session0 隔离了，  win7下可以用createprocessuser来模拟  具体网上搜索。

user: user-3
content: 服务程序一般在后头运行，不与用户交互， 一般写日志就新了。
user-0 提问: 求思路： 从服务器下载视频，视频比较大，很占空间，上百个客户端

回复:
user: user-1
content: 引用 11 楼 mujiok2003 的回复:把视频分散在磁盘阵列中， 换固态硬盘， 加大内存。 这是硬伤

user: user-2
content: 把视频分散在磁盘阵列中， 换固态硬盘， 加大内存。

user: user-3
content: 为什么我连楼主的问题都没看明白

user: user-4
content: 如果你要下载视频网站上面的视频，可以直接分析flvcd的方式，基本就差不多了

user: user-4
content: 你在iqiyi随便找个视频，然后到flvcd下载一下就明白了，视频全是分小段存的。不然一个文件就太大了

user: user-5
content: 用p2p技术

user: user-0
content: 引用 4 楼 super_admi 的回复:楼主到底是想使用文件下载服务器，还是媒体播放服务器？  下载视频啊？  多个客户端 从服务器下载 各种文件，到本地。  其中有一种文件：视频， 视频比较大，  光一个客户端下载多个视频就够强了。  何况多个客户端同时发出请求，下载视频。

user: user-6
content: 引用 3 楼 u012879787 的回复:[quote=引用 2 楼 zilaishuichina 的回复:] 压缩、分段。  能具体一些吗？  [/quote]  比如  有很多视频  一个视频1G， 这些视频存在电脑上的时候，一个视频文件分割成很多个小文件，比如存成1M一个的小文件，内存里面维护一个视频文件名称 和 硬盘上的小文件的对应关系表（也可以用数据库来维护这张表），客户端请求视频数据的时候，请求这个视频的第几部分，然后服务器将这一小部分发过去

user: user-7
content: 楼主到底是想使用文件下载服务器，还是媒体播放服务器？

user: user-0
content: 引用 2 楼 zilaishuichina 的回复:压缩、分段。  能具体一些吗？

user: user-6
content: 压缩、分段。

user: user-8
content: 参考eMule或BitTorrent源代码。
user-0 提问: C99怎么初始化结构体中的int数组的全部变量 ?

回复:
user: user-1
content: 如果有这样的需要，我使用 REPEAT 宏处理。 比如说想生成静态的表之类的。

user: user-2
content: 用memset 吧。

user: user-0
content: 引用 6 楼 mymtom 的回复:gcc的扩展初始化时允许指定数组下标范围，但是这不是C99标准 https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Designated-Inits.html#Designated-Inits  #include <inttypes.h>  #include <stdio.h>   #define N   10 struct A { int32_t array[N]; };  struct A a = {    .array = {[0 ... N - 1] = 0x80}, };  int main(int argc, char *argv[]) {      int i, n;      n = N;     for (i = 0; i < n; ++i) {         printf("%d\n", a.array[i]);     }      return 0; }  谢谢,我代码跑在android的kernel,这样下标的[1...9]不行..

user: user-3
content: 写一个inline的fill_n或者C++的std::fill_n效果一样。

user: user-4
content: 仅供参考#include <stdio.h> float data[500]; int i; void main() {     for (i=0;i<500;i++) {data[i]=1.0f;printf("%g\n",data[i]);}     __asm {         push ecx         push edi         mov ecx,500         mov eax,0xBF800000 //-1.0f         lea edi,data         rep stosd         pop edi         pop ecx     }     for (i=0;i<500;i++) printf("%g\n",data[i]); }

user: user-5
content: gcc的扩展初始化时允许指定数组下标范围，但是这不是C99标准 https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Designated-Inits.html#Designated-Inits  #include <inttypes.h>  #include <stdio.h>   #define N   10 struct A { int32_t array[N]; };  struct A a = {    .array = {[0 ... N - 1] = 0x80}, };  int main(int argc, char *argv[]) {      int i, n;      n = N;     for (i = 0; i < n; ++i) {         printf("%d\n", a.array[i]);     }      return 0; }

user: user-6
content: struct A { int32_t array[10]; A() {     for(int i = 0; i != 10; i++)         array[i] = 0x80; } };  仅供参考

user: user-0
content: 引用 1 楼 mymtom 的回复:没有办法的，只有写够10个0x80吧 struct A { int32_t array[MAX]; };  struct A a = {    .array = {[0...MAX-1]:0x80}, }; 我试着这么写,但是不允许里面有marco减1...

user: user-6
content: 只知道在构造中循环初始化

user: user-7
content: C99: If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.  If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; — if it has arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules; — if it is a union, the first named member is initialized (recursively) according to these rules.  所以不希望初始化成0的都必须明确写出来

user: user-5
content: 没有办法的，只有写够10个0x80吧
user-0 提问: 单链表删除元素的参数有疑问求助

回复:
user: user-1
content: 引用 5 楼 dasdase 的回复:[quote=引用 1 楼 relaxisland 的回复:] 因为你要的是返回  已删除数据的指针 要传递指针，必须用指针的指针 你可以先从 要传出一个数需要指针 开始理解 传出一个数需要指针，传出一个数的指针就需要指向这个数的指针的指针？是不是这个意思？[/quote] 是的

user: user-0
content: 引用 1 楼 relaxisland 的回复:因为你要的是返回  已删除数据的指针 要传递指针，必须用指针的指针 你可以先从 要传出一个数需要指针 开始理解 传出一个数需要指针，传出一个数的指针就需要指向这个数的指针的指针？是不是这个意思？

user: user-2
content: 应该是楼上所说，我理解错意思了

user: user-3
content: data参数返回的是指针型的数据吧。

user: user-2
content: 发下你的链表结构体。我想应该是用void **data用来指向数据域的，它里面存的是指向数据节点的指针，只是个猜测

user: user-1
content: 因为你要的是返回  已删除数据的指针 要传递指针，必须用指针的指针  你可以先从 要传出一个数需要指针 开始理解
user-0 提问: warning: excess elements in scalar initializer [enabled by default]   };

回复:
user: user-1
content: 应该是 static int *daytab = [ ... ] 而不是 static int *daytab = { ... }

user: user-0
content: 引用 5 楼 lisong694767315 的回复:[quote=引用 3 楼 doubleselect 的回复:] [quote=引用 2 楼 lisong694767315 的回复:] 把 static int *daytab 改成 static int daytab[]试试  按照你的做法，修改可以运行（先表示感谢），但我还有一个问题：我想定义的是一个指针数组，把static int *daytab 改为static int *daytab[] ={.....} 为什么还是报同样的错呢？我的思路有什么问题吗？为什么上面代码中的 //the function will return the pointer of the month of sting     char *month_name(int n) {         static char *name[]={"January","February","March",         "April","May","June","July","August","September","October","November",         "December"};         return name[n-1];     } static char *name[]却可以呢？（我之前测试过了）。 谢谢！[/quote]  你要搞清楚static int daytab[]中的 daytab 是一个一维数组，每个元素是一个整数。而  static char *name[] 你可以看作是一个二维的字符数组，其中每个元素是一个字符串（还是一个字符数组）。区分开一维和二维。  或者你可以这么看 static char *name[] 这个数组中的元素是 char*指针，每个指针指向一个字符串的首地址。。。 [/quote]   想明白了，谢谢！

user: user-2
content: 引用 3 楼 doubleselect 的回复:[quote=引用 2 楼 lisong694767315 的回复:] 把 static int *daytab 改成 static int daytab[]试试  按照你的做法，修改可以运行（先表示感谢），但我还有一个问题：我想定义的是一个指针数组，把static int *daytab 改为static int *daytab[] ={.....} 为什么还是报同样的错呢？我的思路有什么问题吗？为什么上面代码中的 //the function will return the pointer of the month of sting     char *month_name(int n) {         static char *name[]={"January","February","March",         "April","May","June","July","August","September","October","November",         "December"};         return name[n-1];     } static char *name[]却可以呢？（我之前测试过了）。 谢谢！[/quote]  你要搞清楚static int daytab[]中的 daytab 是一个一维数组，每个元素是一个整数。而  static char *name[] 你可以看作是一个二维的字符数组，其中每个元素是一个字符串（还是一个字符数组）。区分开一维和二维。  或者你可以这么看 static char *name[] 这个数组中的元素是 char*指针，每个指针指向一个字符串的首地址。。。

user: user-0
content: 引用 1 楼 truelance 的回复:应该是 static int *daytab = [ ... ] 而不是 static int *daytab = { ... }  声明是用 {}没错的吧。

user: user-0
content: 引用 2 楼 lisong694767315 的回复:把 static int *daytab 改成 static int daytab[]试试  按照你的做法，修改可以运行（先表示感谢），但我还有一个问题：我想定义的是一个指针数组，把static int *daytab 改为static int *daytab[] ={.....} 为什么还是报同样的错呢？我的思路有什么问题吗？为什么上面代码中的 //the function will return the pointer of the month of sting     char *month_name(int n) {         static char *name[]={"January","February","March",         "April","May","June","July","August","September","October","November",         "December"};         return name[n-1];     } static char *name[]却可以呢？（我之前测试过了）。 谢谢！

user: user-2
content: 把 static int *daytab 改成 static int daytab[]试试
user-0 提问: 关于C语言的问题。

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

user: user-2
content: The conversion specifiers and their meanings are:       diouxX  The int (or appropriate variant) argument is converted to signed              decimal (d and i), unsigned octal (o), unsigned decimal (u), or              unsigned hexadecimal (x and X) notation.  The letters ``abcdef''              are used for x conversions; the letters ``ABCDEF'' are used for X              conversions.  The precision, if any, gives the minimum number of              digits that must appear; if the converted value requires fewer              digits, it is padded on the left with zeros.

user: user-3
content: x86/debian linux/gcc vi print.c  #include<stdio.h> int main(){ int i=01234, j=8; long p=-1l; printf("%o %04o %4d",i,j,p); return 0;  }    gcc print.c  -1's in momory  is 0xffffffff on my computer. %o read this momory will explain 0xffffffff to be unsigned(and is 8 jinzhi).  my computer can't support chinese temporay.

user: user-2
content: 引用 4 楼 lovesmiles 的回复:错误的代码导致的错误结果，没有分析的意义。 代码有错吗？结果有错嘛？

user: user-4
content: 错误的代码导致的错误结果，没有分析的意义。

user: user-5
content: 引用 2 楼 Kai_gai 的回复:楼主电脑上long是几个字节啊？如是4字节应该是37777777777，如是8字节则应是1777777777777777777777。建议单步调试一下。 不好意思，弄错了。字节应该是17777777777

user: user-5
content: 楼主电脑上long是几个字节啊？如是4字节应该是37777777777，如是8字节则应是1777777777777777777777。建议单步调试一下。

user: user-6
content: long型为8字节64位，-1的补码为64个1，你用8进制输出按内存取出来的就是全为1的值。

user: user-7
content: 引用 1 楼 ll2009301953 的回复:long型为8字节64位，-1的补码为64个1，你用8进制输出按内存取出来的就是全为1的值。+1
user-0 提问: 以下程序输出是什么？

回复:
user: user-1
content: 引用 6 楼 pangbin106 的回复:我已经编译运行有结果，不明白compare函数起什么作用，因为它没有实参，请大侠们帮忙解释  先把main的原型改正确

user: user-1
content: 引用 6 楼 pangbin106 的回复:我已经编译运行有结果，不明白compare函数起什么作用，因为它没有实参，请大侠们帮忙解释 void qsort (void* base, size_t num, size_t size,             int (*compar)(const void*,const void*));  转换为了函数指针。

user: user-2
content: 引用 6 楼 pangbin106 的回复:我已经编译运行有结果，不明白compare函数起什么作用，因为它没有实参，请大侠们帮忙解释 compare是个函数啊，qsort函数里的每次比较都会调用compare函数啊

user: user-3
content: 用 法： void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数： 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针，用于确定排序的顺序

user: user-4
content: 是骡子是马拉出来溜溜！

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

user: user-0
content: 我已经编译运行有结果，不明白compare函数起什么作用，因为它没有实参，请大侠们帮忙解释

user: user-5
content: 按F5编译运行

user: user-6
content: cab can cap car cat

user: user-7
content: 按字典序排序的结果呀
user-0 提问: 互斥锁总是被锁死出不来了

回复:
user: user-1
content: 引用 13 楼 Cabbage_c 的回复:问题解决了，是因为中断里面调用了信号p操作，当信号被占用的时候，中断里面是p不到信号而阻塞，但是中断里面阻塞占用了cpu时间片，而外部程序不能执行所以没法v操作，所以一直死在了中断时间片里，这样就相当于死循环了。  尽然花了3个多月解决这个问题

user: user-0
content: 问题解决了，是因为中断里面调用了信号p操作，当信号被占用的时候，中断里面是p不到信号而阻塞，但是中断里面阻塞占用了cpu时间片，而外部程序不能执行所以没法v操作，所以一直死在了中断时间片里，这样就相当于死循环了。

user: user-2
content: 你 p操作的ret为非0的时候 你还是进行了v操作 你只有p操作成功了后面才可以用v操作

user: user-3
content: 引用 9 楼 Cabbage_c 的回复:[quote=引用 7 楼 mujiok2003 的回复:] [quote=引用 5 楼 Cabbage_c 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] open error的时候没有解锁。 解锁了呀！！！[/quote] 都return -1;了， 哪里解锁。 [/quote]  不是先t_sem_V()，然后再return -1的么？ [/quote] OKay， 没有看清楚。

user: user-0
content: 引用 7 楼 mujiok2003 的回复:[quote=引用 5 楼 Cabbage_c 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] open error的时候没有解锁。 解锁了呀！！！[/quote] 都return -1;了， 哪里解锁。 [/quote]  不是先t_sem_V()，然后再return -1的么？

user: user-0
content: 到P操作阻塞了就说明是上次没有V操作，可是为什么会出现没有V操作呢？  不可能的呀！！

user: user-3
content: 引用 5 楼 Cabbage_c 的回复:[quote=引用 4 楼 mujiok2003 的回复:] open error的时候没有解锁。 解锁了呀！！！[/quote] 都return -1;了， 哪里解锁。

user: user-0
content: 这个程序是修改过的 ，本来这个内存拷贝，ioctrl和open都是在锁中间的   原来的流程是： _sem_P(); open() ioctrl(); memcpy(); _sem_V();  我想先确定一下，在锁中间open，ioctrl，内存拷贝不会出现问题吗？ 我担心会不会是内存拷贝引起的错误。

user: user-0
content: 引用 4 楼 mujiok2003 的回复:open error的时候没有解锁。 解锁了呀！！！

user: user-3
content: open error的时候没有解锁。

user: user-0
content: 引用 2 楼 truelance 的回复:P失败了就不应该往下走 对，P失败就阻塞了，可是现在的情况是永远阻塞，出不来了。为什么会出现这种情况，这里的代码有问题吗？ 内存拷贝，打开文件，ioctrl都没有问题吗？

user: user-4
content: P失败了就不应该往下走

user: user-0
content: 最后面的代码注释完了后会关闭文件流。  close(_dev_fd);

user: user-0
content: 引用 11 楼 pengzhixi 的回复:你 p操作的ret为非0的时候 你还是进行了v操作 你只有p操作成功了后面才可以用v操作  P操作如果失败就阻塞了，应该不会继续走了吧。
user-0 提问: 来瞅瞅这个问题   说bool类型没有定义

回复:
user: user-1
content: 在C89标准里，C语言是没有bool（布尔）类型的。  但在C99标准里面，又定义了bool类型变量。这时，只要引入头文件 <stdbool.h>，就能在C语言里面正常使用bool类型。  当然像楼上说的，你也可以自己#define

user: user-2
content: 你是.c文件， bool是c++中的基本类型。 不是每个c编译器都支持bool的

user: user-3
content: bool是C++的关键字 C不支持 C99标准中有_BOOL  你可以 #define bool int #define true 1 #define false 0

user: user-0
content: 奥， 了解了， 可能是我用的编译器版本比较早 网上说C89标准时没有定义布尔类型的

user: user-4
content: C语言标准里是没有 bool 这个东西的, 没有很正常.
user-0 提问: 这段代码啥意思啊？大神们救救俺吧！！！

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

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

user: user-3
content: 你不知道这代码要干啥，那你复制这段代码干啥，或者。。。这是书上的题目？要求写出此代码的功能

user: user-4
content: 同3L。。。

user: user-5
content: 那你就先分段讲讲都是什么意思

user: user-6
content: 把你main里面的代码都搬到不同的函数里面，每个函数什么功能，再看看主函数调用函数的逻辑，不就明白了。

user: user-7
content: 引用这代码分段都能看懂，但是连起来看就啥也不知道意思了！！！该怎样克服这种困境??? 单步调试。
user-0 提问: C语言读写文件的问题

回复:
user: user-0
content: 引用 1 楼 truelance 的回复:if((out = fopen(name, "w")) == NULL);  这个条件后面多了一个分号嗯，刚刚发现了。 一个分号害人不浅啊，折腾了半天，以为哪里出问题了。

user: user-1
content: if((out = fopen(name, "w")) == NULL);  这个条件后面多了一个分号
user-0 提问: 一个字符串逆转的程序，不知道错误出在哪里？？？

回复:
user: user-1
content: 引用 2 楼 u011432602 的回复:Str指向常量……

user: user-2
content: 引用 12 楼 FENGQIYUNRAN 的回复:下面是我的代码，请大神解释： #include "stdafx.h" #include <stdio.h> #include <string> #include <iostream> using namespace std;   char* ReverseString(char *str,char *str1,int n) { 	int j=0; 	for(int i=(n-1);i>=0;i--) 	{ 		str1[j]=str[i]; 		j++; 	} 	return str1; } int _tmain(int argc, _TCHAR* argv[]) { 	char* str="hello world!"; 	int n=strlen(str); 	char* str1=new char(n); 	ReverseString(str,str1,n); 	printf("%s\n",str1); 	return 0; }  输出： 这个是把常量内容复制到新开辟的堆区里

user: user-3
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-4
content: 下面是我的代码，请大神解释： #include "stdafx.h" #include <stdio.h> #include <string> #include <iostream> using namespace std;   char* ReverseString(char *str,char *str1,int n) { 	int j=0; 	for(int i=(n-1);i>=0;i--) 	{ 		str1[j]=str[i]; 		j++; 	} 	return str1; } int _tmain(int argc, _TCHAR* argv[]) { 	char* str="hello world!"; 	int n=strlen(str); 	char* str1=new char(n); 	ReverseString(str,str1,n); 	printf("%s\n",str1); 	return 0; }  输出：

user: user-5
content: 引用 2 楼 u011432602 的回复:Str指向常量……+1

user: user-6
content: 的穷是常量

user: user-7
content: 不要试图改变一个常量

user: user-8
content: Line 18: warning: deprecated conversion from string constant to 'char*''

user: user-9
content: *str2是常量，不能被修改的。

user: user-9
content: 可以将字符串的头部和尾部都传递给函数，这样即直观又简洁 #include<stdio.h> #include<string.h> void ReverseOpr(char *str2, char *str3){     while(str2 <= str3)     {         putchar(*str3);         str3--;     } }  int main(){     char *str="nihao";     ReverseOpr(str, str+strlen(str)-1);     return 0; }

user: user-10
content: 字符串字面值 存在 静态存储区(文字常量区) 中,不能被修改。。。

user: user-11
content: char *str="nihao";这是个字符串常量，是只读的

user: user-0
content: 引用 2 楼 u011432602 的回复:Str指向常量……嗯 ，的确是这里的问题。

user: user-12
content: Str指向常量……

user: user-13
content: 上二级指针或引用
user-0 提问: 按键消息中a为何收不到SUM的值呢？

回复:
user: user-0

user: user-0
content: a 的值输出为0， 我是想在另一个自定义事件中计算所传数组的元素之和，然后再获得这个值，可是，居然是没有作用。

user: user-1
content: int buffer[]={100,200,300,400,500};  int a=SendMessage(hwndDlg,WM_SEND,0,(LONG)buffer);  char sz[10];  sprintf(sz,"所有数据之和为：%d",a);  MessageBox(NULL,sz,NULL,MB_OK);  第一不要强制转换， 第二，buffer WM_SEND得到处理前已经game over了

user: user-2
content: 简单的方法就是下断点单步。

user: user-2
content: sprintf(sz,"数组：%d\n%d\n%d\n%d\n%d",a[0],a[1],a[2],a[3],a[4]); MessageBox(NULL,sz,"",MB_OK|MB_ICONEXCLAMATION); 能运行不？ 能的话在这里把sum的值也打印出来。

user: user-3
content: 收不到sum的值 是什么意思？ 是说等于0啊  是不是因为 buffer  是局部变量啊， 除了花括号，就不存在了
user-0 提问: 双挂起进程状态模型就是七状态进程模型吗？ 

回复:
user: user-1
content: 任务：指的可能是一个进程，也可能是一个线程 Linux 实现的是内核线程。

user: user-0
content: 引用 4 楼 user-1 的回复:作业是一个或多个程序的运行 find /usr/src -type f -name "*.c" | xargs grep int16_t > $HOME/tmp/find.log  大牛，最后一个额问题：  任务是什么?  linux的线程实现方式是什么？  内核线程， 用户线程，混合方式。 linux是哪一种？

user: user-1
content: 作业是一个或多个程序的运行 find /usr/src -type f -name "*.c" | xargs grep int16_t > $HOME/tmp/find.log

user: user-0
content: 引用 2 楼 user-1 的回复:双挂起进程模型就是7状态进程模型吧。 这里讲的挺清楚的啊 http://www.docin.com/p-591480686.html 看第七页和第八页  操作系统中的“作业”到底是什么意思？   有时候，它是进程  有时候又不是进程，  理解起来很吃力。

user: user-1
content: 双挂起进程模型就是7状态进程模型吧。 这里讲的挺清楚的啊 http://www.docin.com/p-591480686.html 看第七页和第八页

user: user-0
content: 引用 4 楼 user-1 的回复:作业是一个或多个程序的运行 find /usr/src -type f -name "*.c" | xargs grep int16_t > $HOME/tmp/find.log  作业就是一个多个程序啊？  好吧

user: user-0
user-0 提问: 关于ReadFile读数据读不完整的问题

回复:
user: user-1
content: 推荐使用PortMon软件辅助调试串口通讯相关程序。

user: user-1
content: 推荐使用FileMon软件辅助调试文件读写相关功能。

user: user-2
content: 引用 9 楼 u010848119 的回复:引用 8 楼 zhao4zhong1 的回复:任何通讯机制，收方收得太慢都会导致发方发的速度受阻或发的数据丢失。我是循环接收的，有数据应该是立刻接收，希望赵老师能深入指点。  再怎么循环，Read之后的操作总是要花时间的，你不可能保证Write和Read一定能保持同样的速率，

user: user-0
content: 引用 7 楼 zxh707wk 的回复:一次不能发多点吗20个字节是为了测试基本功能用，发的越多，数据收不全的问题出现几率越大。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:任何通讯机制，收方收得太慢都会导致发方发的速度受阻或发的数据丢失。我是循环接收的，有数据应该是立刻接收，希望赵老师能深入指点。

user: user-3
content: 如果你学习过通信中的OSI 7层协议模型，就很容易理解了。 底层的串口通信就相当于物理层，每帧20字节或者更多字节，是数据链路层的事，这是你的程序自己要处理的。你自己的程序要不断读，然后按照每20字节（或者其他定帧方法）进行重组，底层是不可能保证发送的20字节一定一次性收到的。

user: user-0
content: 希望有人能够指点迷津

user: user-0
content: 希望有人能够指点迷津

user: user-0
content: 希望有人能够指点迷津

user: user-1
content: 任何通讯机制，收方收得太慢都会导致发方发的速度受阻或发的数据丢失。

user: user-4
content: 一次不能发多点吗

user: user-5
content: 关注此问题！

user: user-5
content: 关注此问题！

user: user-5
content: 关注此问题！
user-0 提问: .exe停止工作

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

user: user-2
content: printf("%s+%s=%d\n",x+y); 对吗？

user: user-3
content: printf("%s+%s=%d\n",x+y);  少参数  改为 printf("%s+%s=%d\n",s1,s2,x+y);

user: user-4
content: debug
user-0 提问: 如何实现打开某个磁盘时运行指定的软件？

回复:
user: user-0
content: 我想利用系统右键菜单，即当用户在磁盘的空地点击右键时执行我指定的软件，此时要用到shell扩展编程， 好像也不简单。

user: user-1
content: 典型病毒性行为，如果使用autorun.inf会被杀软干掉的

user: user-2
content: 挂上文件系统挂钩， 也可以开发文件系统驱动， 这是比较专业一点的，不过要费老鼻子劲，才能做好 否则 autorun.inf 之类的，比较简单

user: user-3
content: 百度一下autorun.inf 双击磁盘就可以运行某个程序，这个文件是病毒专用的技巧。

user: user-4
content: 要耍流氓吗？

user: user-0
content: 这个 autorun.inf 好像不好用

user: user-5
content: 我知道的就只有脚本
user-0 提问: 有关结构体大小的疑问

回复:
user: user-0
content: 引用 3 楼 truelance 的回复:一种改法是你把unsigned short unused; 移到结构的最后，这样所有的字段都是对齐的，不用加padding 另一种就是在结构定义前后用 #pragma pack(1) ... #pragma pack() 强制用1字节对齐，不加padding  提出的方法很有用，谢谢！

user: user-1
content: 把mbr_signature放到unused后面试试

user: user-2
content: 一种改法是你把unsigned short unused; 移到结构的最后，这样所有的字段都是对齐的，不用加padding 另一种就是在结构定义前后用 #pragma pack(1) ... #pragma pack() 强制用1字节对齐，不加padding

user: user-0
content: 引用 1 楼 truelance 的回复:struct mbr_partition 是4字节对齐的，所以在unused之后会有2个字节padding. 整个mbr 结构也是4字节对齐的，因此mbr_signature后面也会有2个字节padding.  所以总计有4个字节padding, 整个结构的sizeof会比每个字段之后多4.  谢谢回复！ 请问如何改写该结构体，使其大小为512？

user: user-2
content: struct mbr_partition 是4字节对齐的，所以在unused之后会有2个字节padding. 整个mbr 结构也是4字节对齐的，因此mbr_signature后面也会有2个字节padding.  所以总计有4个字节padding, 整个结构的sizeof会比每个字段之后多4.
user-0 提问: opencv两个不相连通的轮廓怎么让他们连通到一起呢?

回复:
user: user-1
content: 要是轮廓离得不是很远的话，可以尝试形态学处理里面的腐蚀或者膨胀。

user: user-0
content: 自己顶一下~
user-0 提问: 请教数据结构链表参数问题

回复:
user: user-1
content: 链表的典型结构无非就是在某个元素结构中定义了一个（单链表，多个就可以是双向的或其他）该元素的指针而，然后通过一个接一个的建立起联系来，好像是一个链子一样，只需捏住链头就可以一个接一个的访问下去

user: user-2
content: 可以是类，也可以是typedef出来的类型  btw: 求求你们别用vc6了，那是史前的不符合标准的编译器。如果哪本书上是用vc6的，就把那本书烧了；如果是哪个老师让你们用vc6的，就上去扇他两个耳光。