Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求助程序运行时的输入完毕问题。

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:Linux:Ctrl+D Windows:Enter,Ctrl+Z,Enter 我的是windows,确实成功了。非常感谢你。我自己再去脑补这个知识。

user: user-1
content: Linux:Ctrl+D Windows:Enter,Ctrl+Z,Enter

user: user-0
content: 我试验了一下。我的系统的回车就是\n

user: user-2
content: 输入 EOF  按回车试试  还是不行的话看看有没有死循环

user: user-3
content: 有的系统回车是"\r\n"
user-0 提问: [问题]c语言中，如何把一个300M的文件一次读进一个数组？

回复:
user: user-0
content: 问题已经解决 #include<stdio.h> #include<stdlib.h>  int main(int num, const char * file[]) { 	char *p=NULL;  	p=(char *)malloc(1024*1024*1024); 	if(p) 		printf("memory allocated at %p\n", p); //pointer's address 	else 		printf("not enough memory!\n");  	FILE *fin; 	fin=fopen(file[1], "rb"); 	fread(p, 1, 209853182, fin);  	int loc=209853182-1;  	printf("%c\n", p[loc]); 	fclose(fin); 	  	free(p); 	return 0; }

user: user-1
content: 内存映射是平台相关的，Windows下用CreateFileMapping()+MapViewOfFile(), Linux下用mmap()

user: user-2
content: 妥妥的内存映射文件，具体百度下。

user: user-3
content: 引用 2 楼 damaoshan 的回复:[quote=引用 1 楼 go_and_see 的回复:] 最好不要一次读300M的内容，可以根据业务做缓冲。 您的意思是？ 怎么缓冲呢？ 我是小白，不好意思[/quote]  弄一个缓冲区，每次只读一部分。一次读300M，内存消耗太多，磁盘性能也跟不上。

user: user-4
content: 单独的独立程序，那是不成问题的 如果是某个程序的一个模块，那就成问题了。

user: user-0
content: 引用 3 楼 Oringe_new 的回复:弄内存文件映射吧 求教具体代码

user: user-0
content: 引用 4 楼 Idle_ 的回复:直接malloc分配300M内存然后一次性fread 我也是这么想的，但是代码没写出来。 总之，还在糊涂中

user: user-1
content: 直接malloc分配300M内存然后一次性fread

user: user-5
content: 弄内存文件映射吧

user: user-0
content: 引用 1 楼 go_and_see 的回复:最好不要一次读300M的内容，可以根据业务做缓冲。 您的意思是？ 怎么缓冲呢？ 我是小白，不好意思

user: user-3
content: 最好不要一次读300M的内容，可以根据业务做缓冲。
user-0 提问: ffmpeg在安装x264播放器的时候出现 ERROR: libx264 not found

回复:
user: user-1
content: 我是用楼主的方法，显示了Unknown option --extra-libs=-ldl, ignored请问这是为什么呢？

user: user-2
content: ./configure  --extra-libs=-ld  直接用这个命令

user: user-2
content: 要在./configure 选项的哪个地方加上 --extra-libs=-ld 啊。我现在也出现这个问题了。怎么解决呢？

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:./configure         make         su         输入root用户的密码         make install  解决了。。。只要在configure选项里面加上 --extra-libs=-ldl就可以了

user: user-3
content: ./configure         make         su         输入root用户的密码         make install

user: user-3
content: 引用 2 楼 zz12006345 的回复:makefile使用shell写的。。找不到把路径加在哪里怎么办。。。 仔细找，应该能找到。

user: user-0
content: makefile使用shell写的。。找不到把路径加在哪里怎么办。。。

user: user-3
content: 在GUI配置相应项或makefile里面的gcc命令行中添加-ldl
user-0 提问: windows 提示信息

回复:
user: user-1
content: 看看pagefile.sys文件在哪个硬盘上，将那个硬盘的剩余空间留大点。

user: user-2
content: 需要我翻译吗： 由于你系统的虚拟内存太小，系统正在增加虚拟内存页文件的大小，在此期间，一些应用程序的内存请求将会被拒绝，想获得更多的信息，请查看帮助文档。  基本不用理会，就是系统提示你虚拟内存太小而已

user: user-3
content: 我 的 虚拟机  经常 提醒 我这个，一直没管它。  如果你需要 保存 大量文件，建议删除不必要文件，如果你本身硬盘就小，只能用大的 取而代之。

user: user-4
content: 英文版的windows虚拟内存太小。 有可能的原因是，虚拟内存所在的硬盘，没有空间了。
user-0 提问: 一个求素数的小程序，为什么我的结果是从29611开始呢？

回复:
user: user-1
content: 试试运行下这个代码： #include<stdio.h> #include <Windows.h> main() { int i,n; for(n=2;n<=32767;++n) { for(i=2;n%i;++i); if(i==n) {  printf("%d\n",n); 	Sleep(1000); } } } 运行了你就知道了。程序是对的，但是显示不完那么多的数字。

user: user-2
content: 嗯，可以对窗口进行设置，也可以将数据输入到文本中，如下——

user: user-3
content: 程序没问题，输出超过缓冲区大小了

user: user-2
content: 那个黑色窗口默认好像只能输出298行，如果你想全部显示，需要对黑色窗口进行设置

user: user-4
content: 输出到文件或者重定向到文件.

user: user-5
content: 引用 1 楼 u012421456 的回复:那个黑色窗口默认好像只能输出298行，如果你想全部显示，需要对黑色窗口进行设置  ++

user: user-6
content: 确实是cmd窗口的显示行数有限制所致
user-0 提问: fprintf(stderr, _("%s: FATAL: %s\n"), prgname, strerror(ENOMEM));

回复:
user: user-1
content: 这个一般是字符串处理宏。你的项目有没有定义#define _()  这样的宏? 确定你没有写漏什么东西？

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

user: user-0
content: 引用 2 楼 user-3 的回复:加/EP编译选项看看 fprintf(stderr, _("%s: FATAL: %s\n"), prgname, strerror(ENOMEM)); 这行被宏展开后变成什么了 是个宏定义…… 谢谢饿了

user: user-0
content: 引用 楼主 wuzhimang 的回复:一直查不到，关于类sprintf中，出现的_()表示的意思，忘大神指点下，或告知参考资料……  为什么用_(...)这个 引用 1 楼 lovesmiles 的回复:这个一般是字符串处理宏。你的项目有没有定义#define _()  这样的宏? 确定你没有写漏什么东西？  我下的源码看到，恩，确实找到了宏定义，以前没见过类似处理的，所以一时不知道怎么想

user: user-3
content: 加/EP编译选项看看 fprintf(stderr, _("%s: FATAL: %s\n"), prgname, strerror(ENOMEM)); 这行被宏展开后变成什么了
user-0 提问: 一个小函数内存的bug，如何理解！

回复:
user: user-1
content: 额。。。说白了：指针p中的内存地址就是指向这个字符串的第一个字符，你觉得一个定义了的字符串（系统已经为这个字符串分配好了内存），他的地址是你可以随便改变的吗？？？

user: user-2
content: 引用 10 楼 zhao4zhong1 的回复:#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 还是不可以写啊，linux下测试的

user: user-2
content: 引用 3 楼 liuxiaohailxh8888 的回复:改写常量需要用memset我居然信了，还好测试了一下

user: user-3
content: 引用 4 楼 virtualxmars 的回复:这一句：  char *p = "WanG";   因为"WanG"对编译器来说实际上是一个常量，也就是不允许变化的量，所以将其赋值给char *p是不对的，因为 char * 实际上指出p是可以被修改的。而"WanG"其实会被放在不可编辑的全局符号表位置。那么你后面的修改就是非法的了。  解决办法是：      char name[] = "WanG";     char *p = name;   由于引入了数组，所以"WanG"会定义在函数的堆中，这样，它就变成了可被修改的内容 +1

user: user-4
content: 引用 13 楼 xhw88398569 的回复:引用 3 楼 liuxiaohailxh8888 的回复:改写常量需要用memset我居然信了，还好测试了一下 恩,确实是错的,当我发完帖子突然发现是错的但是编辑不鸟帖子了

user: user-5
content: 引用 14 楼 xhw88398569 的回复:[quote=引用 10 楼 zhao4zhong1 的回复:] #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 还是不可以写啊，linux下测试的[/quote] 这是windows下的。

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

user: user-2
content: 貌似向常量区写东西了

user: user-6
content: 这一句：  char *p = "WanG";   因为"WanG"对编译器来说实际上是一个常量，也就是不允许变化的量，所以将其赋值给char *p是不对的，因为 char * 实际上指出p是可以被修改的。而"WanG"其实会被放在不可编辑的全局符号表位置。那么你后面的修改就是非法的了。  解决办法是：      char name[] = "WanG";     char *p = name;   由于引入了数组，所以"WanG"会定义在函数的堆中，这样，它就变成了可被修改的内容

user: user-4
content: 改写常量需要用memset

user: user-7
content: char q[10] = "WanG"; 	char* p = q;

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

user: user-8
content: 字符串常量。基础

user: user-9
content: 引用 2 楼 zhousitiaoda 的回复: char q[10] = "WanG"; 	char* p = q; +1 字符串常量不能被修改，如果你硬要修改的话有方法@赵老师

user: user-10
content: char *p = "WanG"; 这样定义一个常量字符串，是没办法用=赋值来改变的

user: user-11
content: char *p = "WanG"; // read only  //... *p =  tolower('D'); //oops

user: user-12
content: char* p和 char p［］的最大区别就是一个是const，一个不是。
user-0 提问: MFC 应用程序错误

回复:
user: user-0
content: 找到原因了 pDC 没有释放！！！

user: user-0
content: 我调试了 出现这个 ，请问这个和Brush用法有关吗 ！谢谢

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

user: user-0

user: user-0

user: user-0
user-0 提问: 谁有一些c程序的例题用来练手和思维

回复:
user: user-1
content: http://www.baidu.com c程序例题

user: user-2
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm

user: user-3
content: Lua源码分析。可以仔细读一下Lua的源代码。才2万多行，如果觉得c语言基础还不错的话，应该没什么难度的。

user: user-4
content: pat练习 http://pat.zju.edu.cn/contests/mooc-c

user: user-5
content: 我最近看了下vim for PC的源代码，企图知道vim是如何读文件的（似乎它读大文件很快），但看不太明白，能帮我看看吗？  源代码下载页面： http://www.vim.org/download.php

user: user-6
content: http://pan.baidu.com/s/1eQiofPw 这个是我老师复习时用的题目

user: user-7
content: 那就去面试吧，跟面试官交流、练思维

user: user-8
content: http://download.csdn.net/detail/zidane_2014/7671075 http://download.csdn.net/detail/zidane_2014/7671093 上下部分。不需要下载积分。

user: user-9
content: 如果不满足于自己用的教材上的习题，那就去做ACM题吧，各高校的ACM网站大多都是可以随意注册的吧？ 至于向别人要例题——如果有个小学生向楼主要小学练习题，楼主能拿得出来不？

user: user-10
content: 我共享里有，你自己找找吧

user: user-11
content: 一般来说ACM的题都比较不简单，你随便百度一下就可以了

user: user-12
content: 一般来说ACM的题都比较简单，你随便百度一下就可以了
user-0 提问: 1-1/2+1/3........+1/99-1/100。我编的该怎么调试？ 

回复:
user: user-0
content: 引用 6 楼 ren0065 的回复:	double n = 1.0, m = 1.0; 	for(int i=1; i<10; i++) 	{ 		m = -m; 		n += m*(1.0/(i+1)); 	} 	printf("%f\n", n); 不应该是这样吗?是的，我的数据类型弄错了。谢谢

user: user-0
content: 引用 7 楼 lovesmiles 的回复:改成下面这样子：  void main() { 	long double s,m=0; 	int i,n=-1; 	for (i=1;i<=100;i=i+2) 	{ 		n=-n; 		s=n*i; 		m=m+1/s; 	} 	printf("%f\n",m*4); }谢谢

user: user-0
content: 引用 4 楼 Intel0011 的回复:[quote=引用 1 楼 chlth007 的回复:] 错了，应该调试这个，上面那个是书本上给的答案。 #include<stdio.h> main() { 	long double s,m=0; 	int i,n=-1; 	for (i=1;i<=100;i++) 	{ 		n=-n; 		s=n*i; 		m=m+1/s; 	} 	printf("%ld\n",m); } m是long double类型 printf("%ld\n",m); －－－》 printf("%f\n",m);[/quote]  谢谢，现在好了。是不是新手经常容易出现这种情况，自己又找不到错误的地方？

user: user-1
content: 改成下面这样子：  void main() { 	long double s,m=0; 	int i,n=-1; 	for (i=1;i<=100;i=i+2) 	{ 		n=-n; 		s=n*i; 		m=m+1/s; 	} 	printf("%f\n",m*4); }

user: user-2
content: double n = 1.0, m = 1.0; 	for(int i=1; i<10; i++) 	{ 		m = -m; 		n += m*(1.0/(i+1)); 	} 	printf("%f\n", n); 不应该是这样吗?

user: user-3
content: for ( n = 1, n <=100; n++)     sum = sum + 1/n * pow(-1, (n + 1))

user: user-4
content: 引用 1 楼 chlth007 的回复:错了，应该调试这个，上面那个是书本上给的答案。 #include<stdio.h> main() { 	long double s,m=0; 	int i,n=-1; 	for (i=1;i<=100;i++) 	{ 		n=-n; 		s=n*i; 		m=m+1/s; 	} 	printf("%ld\n",m); } m是long double类型 printf("%ld\n",m); －－－》 printf("%f\n",m);

user: user-5
content: 计算圆周率的公式：PI=(1-1/3+1/5-1/7+1/9……)*4 引用 1 楼 chlth007 的回复:错了，应该调试这个，上面那个是书本上给的答案。 #include<stdio.h> main() { 	long double s,m=0; 	int i,n=-1; 	for (i=1;i<=100;i++) 	{ 		n=-n; 		s=n*i; 		m=m+1/s; 	} 	printf("%ld\n",m); }

user: user-5
content: 计算圆周率的？记得似乎要乘以3。我找一下。

user: user-0
content: 错了，应该调试这个，上面那个是书本上给的答案。 #include<stdio.h> main() { 	long double s,m=0; 	int i,n=-1; 	for (i=1;i<=100;i++) 	{ 		n=-n; 		s=n*i; 		m=m+1/s; 	} 	printf("%ld\n",m); }
user-0 提问: 【求助】AT89C51的LED点阵倒计时c程序。。。大家看看哪里有错TAT

回复:
user: user-0
content: 编译无误，但是有三个警告，说BT3、BT2、BT1在HC595SendData中没有使用。。。问题是效果出不来

user: user-1
content: 怎么看？你是编译报错了，还是放到机子上面跑的效果不出来？
user-0 提问: strlen(c)输出为什么是7

回复:
user: user-1
content: 这种错误，楼主可别再犯了。。。。。。。。数组：你需要关注：是否越界，是否没有结尾（这个是针对字符数组）等等。。。。。

user: user-2
content: C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\STRLEN.C /*** *strlen.c - contains strlen() routine * *       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved. * *Purpose: *       strlen returns the length of a null-terminated string, *       not including the null byte itself. * *******************************************************************************/  #include <cruntime.h> #include <string.h>  #ifdef _MSC_VER #pragma function(strlen) #endif  /* _MSC_VER */  /*** *strlen - return the length of a null-terminated string * *Purpose: *       Finds the length in bytes of the given string, not including *       the final null character. * *Entry: *       const char * str - string whose length is to be computed * *Exit: *       length of the string "str", exclusive of the final null byte * *Exceptions: * *******************************************************************************/  size_t __cdecl strlen (         const char * str         ) {         const char *eos = str;          while( *eos++ ) ;          return( (int)(eos - str - 1) ); }

user: user-3
content: char c[] = {'a', 'b'};  改成：char c[] = {'a', 'b','\0'}; 或者：char c[] = "ab";

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

user: user-4
content: 没有'\0'字符串结束符号，所以strlen的值是随机的

user: user-4
content: 没有'\0'字符串结束符号，所以strlen的值是随机的

user: user-5
content: 运气好第七个就是‘\0’

user: user-6
content: 格strlen是以遇到'\0'为结束符。你的字符数组没有定义这个'\0'值，所以它会一直找下去，直到找到或者访问了不该访问的内存，造成内存溢出报错。而你的代码刚好是第七个的内存值就是'\0'。仅此而已

user: user-7
content: 引用 楼主 chy7424994 的回复: #include<string.h> #include<stdio.h> int main() { 	char c[] = {'a', 'b'}; 	//int c[] = {1, 2, 3}; 	printf("%d\n", sizeof(c)); 	printf("%d", strlen(c)); }  没有结束符，即‘\0’
user-0 提问: 关于溢出的一个问题

回复:
user: user-1
content: 引用 7 楼 zxhuser-2 的回复:对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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对应的汇编并单步执行观察相应内存和寄存器变化。）  哈哈 这句话是不是百试不爽。。。。。。。。

user: user-2
content: 对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-1
content: 引用 4 楼 Monkey_Dog 的回复:[quote=引用 2 楼 caikunbob 的回复:] 假设x=-1，y=TMin， x-y应该是不会溢出的。 但是当调用tsub_ok函数的时候， 有y=-y=TMin。 而此时x=-1，y=TMin， 调用tadd_ok函数， 由于y=TMin，对于tadd_ok函数来说，只要x为负数， 那么tadd_ok就会溢出， 其实x=-1，y=TMin相减是不溢出的， 所以当x=-1，y=TMin， 调用tsub_ok会产生错误的结果。。。  那其实会不会溢出。。[/quote] 会溢出啊！！ 答案就是会溢出啊！！ 我写的里面就是分析为什么会溢出， 难道我没写明白吗？？

user: user-1
content: 会溢出啊！！ 答案就是会溢出啊！！ 我写的里面就是分析为什么会溢出， 难道我没写明白吗？？

user: user-0
content: 引用 2 楼 caikunbob 的回复:假设x=-1，y=TMin， x-y应该是不会溢出的。 但是当调用tsub_ok函数的时候， 有y=-y=TMin。 而此时x=-1，y=TMin， 调用tadd_ok函数， 由于y=TMin，对于tadd_ok函数来说，只要x为负数， 那么tadd_ok就会溢出， 其实x=-1，y=TMin相减是不溢出的， 所以当x=-1，y=TMin， 调用tsub_ok会产生错误的结果。。。  那其实会不会溢出。。

user: user-0
content: neg_over是判断负溢出的一个条件 pos_over是判断正溢出的一个条件 return那里是判断是否满足正溢出或负溢出的，都没有溢出就返回1  这是深入理解计算机系统的一道练习题，不是很懂

user: user-1
content: 假设x=-1，y=TMin， x-y应该是不会溢出的。 但是当调用tsub_ok函数的时候， 有y=-y=TMin。 而此时x=-1，y=TMin， 调用tadd_ok函数， 由于y=TMin，对于tadd_ok函数来说，只要x为负数， 那么tadd_ok就会溢出， 其实x=-1，y=TMin相减是不溢出的， 所以当x=-1，y=TMin， 调用tsub_ok会产生错误的结果。。。

user: user-2
content: 没明白lz说的，但看返回结果，只要neg_over或pos_over中的某一个是1的话就会返回0
user-0 提问: 以8为基数还是以2^8为基数

回复:
user: user-1
content: 字符串的单位是字符，每个字符占8bit,也就是2^8次方，没有错。是你理解错了。

user: user-2
content: 引用Or we might sort a set of 64-bit integers as four-digit, radix-2^16 values   64位（8个字节）的整数可以看成4组，每组2个字节（16位）， 基数数自然也就是2^16
user-0 提问: 这个程序错误出在哪？？

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

user: user-2
content: char line[] = c;  //你是要闹哪样

user: user-3
content: 运行了楼主的程序，没有楼主那个错误。 有一个错误：error C2440: 'initializing' : cannot convert from 'int' to 'char []'         There are no conversions to array types, although there are conversions to references or pointers to arrays Error executing cl.exe.

user: user-4
content: 。。。。 自己看错误撒：语法错误，类型前面缺少分号  char line[]=c; 不是这么初始化的。看看书吧
user-0 提问:  C读取文件中含有%的字符串

回复:
user: user-1
content: 引用 13 楼 litch008 的回复:问题解决了，是fgets会吧\n读出来，使用fgetc控制串尾\n的读入就OK了 fgets(str,maxlen,f); if ('\n'==str[strlen(str)-1]) str[strlen(str)-1]=0;

user: user-0
content: 问题解决了，是fgets会吧\n读出来，使用fgetc控制串尾\n的读入就OK了

user: user-0
content: 这个两个%%下的post请求，请求的网页有问题

user: user-0
content: OH no，又忘记了，是网页不对，双引号的情况下，虽然能拿到网页

user: user-1
content: 引用 9 楼 litch008 的回复:谢谢你们啊  我的问题居然莫名的解决了    虽然不知道怎么解决的 但还是十分的感谢你们，特别是赵老师 也可能只是浏览器的缓存干扰。

user: user-0
content: 谢谢你们啊  我的问题居然莫名的解决了    虽然不知道怎么解决的 但还是十分的感谢你们，特别是赵老师

user: user-0
content: 单%下post请求是对的，但是网页找不到

user: user-0
content: recordCursor=67&strWhere=((............=('A24B3/12' or 'A24B3/16' or 'A24B5%' or 'A24B15%' or 'A24D1%' or 'A24D3%') not ............=('A24B5/12' or 'A24B5/14' or 'A24D1/14')))&searchType=&id=86A9CF921BB54DA0BC9FD6444665F0C9&t=CN&filterChannel=&strSortMethod=-.........  中文全成......

user: user-1
content: 引用 5 楼 litch008 的回复:[quote=引用 2 楼 lovesmiles 的回复:] [quote=引用 楼主 litch008 的回复:] %E4%B8BB%E588%86E7%B1BB%E58F%B73D%2827A24B5%2F12%27+or+%27A24B5%2F14%27+or+%27A24D1%2F14%27%29%29% 是网页post请求的一部分，每当我从文件中读取之后提交了就找不到相应的网页。  如果我把文件里的所有%替换为%%，请求成功了，但是请求的网页却不对  到底是怎么回事呢？  这些是汉字，你还要将它们转成汉字。[/quote] 请求的时候直接使用汉字发送post请求行不行呢？ [/quote] 不行，我猜。http协议不支持。所以需要URLencode和URLdecode

user: user-0
content: 引用 2 楼 lovesmiles 的回复:[quote=引用 楼主 litch008 的回复:] %E4%B8BB%E588%86E7%B1BB%E58F%B73D%2827A24B5%2F12%27+or+%27A24B5%2F14%27+or+%27A24D1%2F14%27%29%29% 是网页post请求的一部分，每当我从文件中读取之后提交了就找不到相应的网页。  如果我把文件里的所有%替换为%%，请求成功了，但是请求的网页却不对  到底是怎么回事呢？  这些是汉字，你还要将它们转成汉字。[/quote] 请求的时候直接使用汉字发送post请求行不行呢？

user: user-0
content: 请求的时候直接使用汉字发送post请求行不行呢？

user: user-0
content: 我用wireshark抓包试了下，在单%号的情况下找不到网页，但是双%%号的情况下请求的网页排序规则没对 &searchType=&id=86A9CF921BB54DA0BC9FD6444665F0C9&t=CN&filterChannel=&strSortMethod=-%E7%94%B3%E8%AF%B7%E6%97%A5

user: user-2
content: 引用 楼主 litch008 的回复:%E4%B8BB%E588%86E7%B1BB%E58F%B73D%2827A24B5%2F12%27+or+%27A24B5%2F14%27+or+%27A24D1%2F14%27%29%29% 是网页post请求的一部分，每当我从文件中读取之后提交了就找不到相应的网页。  如果我把文件里的所有%替换为%%，请求成功了，但是请求的网页却不对  到底是怎么回事呢？  这些是汉字，你还要将它们转成汉字。

user: user-1
content: 建议用wireshark抓包。
user-0 提问: java des（DES/CBC/PKCS5Padding） 加密，对应的C openssl 加密

回复:
user: user-1
content: 同求与java des（DES/CBC/PKCS5Padding）对应的dll 有高手解释：C/C++一般的des加密代码都是使用0来作为填充数据。下载一个代码把里面数据填充部分按PKCS5Padding方式填充下就OK了。

user: user-2
content: 引用 楼主 chaosfun 的回复:java des（DES/CBC/PKCS5Padding） 加密，对应的C openssl 加密的函数是DES_cbc_encrypt吗？两个加密的结果不一样呢 具体应用没有做过，但DES也有多个版本。有64位的，和128位的。等等吧。
user-0 提问: 有段代码，调试后的结果怎么都理解不了！求解惑

回复:
user: user-1
content: p溢出鸟..

user: user-2
content: 仅供参考#include <stdio.h> int d[8][8]; int n; void queen8(int L) {     int x,y;      if (8==L) {         n++;         printf("%d\n",n);         for (y=0;y<8;y++) {             for (x=0;x<8;x++) { //              printf("%d",d[y][x]);                 if (d[y][x]) printf("■");                 else         printf("□");             }             printf("\n");         }         return;     }     for (x=0;x<8;x++) {         for (y=0;y<L;y++) {             if  (              d[y][x      ]              || (x-(L-y)>=0 && d[y][x-(L-y)])              || (x+(L-y)< 8 && d[y][x+(L-y)]))                 break;         }         if (y>=L) {             d[L][x]=1;             queen8(L+1);             d[L][x]=0;         }     } } int main() {     int y,x;     for (y=0;y<8;y++) {         for (x=0;x<8;x++) {             d[y][x]=0;         }     }     queen8(0);     return 0; }

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

user: user-0
content: 给你发私信了，请查收！  引用 2 楼 zhao4zhong1 的回复:
user-0 提问: C语言open/fopen函数移植问题

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:参考： C:\Program Files\Borland\CBuilder6\Source\Rtl\Source\io\_open.c C:\Microsoft SDK\src\crt\_open.c C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\_open.c C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\_OPEN.C C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\_open.c C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\_open.c C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\_open.c 或Linux的open.c 多谢了，是在linux下面的嵌入式编程，直接移植过来也不行，最后通过系统内置的usbread命令去实现的

user: user-0
content: 引用 7 楼 yangyunzhao 的回复:[quote=引用 6 楼 u013697891 的回复:] linux下的编译软件没有fopen函数？  应该是嵌入式编程，系统不见得是linux。 没有弄过，帮顶[/quote] 是的，是在linux下面的嵌入式编程，直接移植过来也不行，最后通过系统内置的usbread命令去实现的

user: user-1
content: 引用 6 楼 u013697891 的回复:linux下的编译软件没有fopen函数？  应该是嵌入式编程，系统不见得是linux。 没有弄过，帮顶

user: user-2
content: C语言的open或者fopen函数是需要系统API接口支持的

user: user-3
content: 参考： C:\Program Files\Borland\CBuilder6\Source\Rtl\Source\io\_open.c C:\Microsoft SDK\src\crt\_open.c C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\_open.c C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\_OPEN.C C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\_open.c C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\_open.c C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\_open.c 或Linux的open.c

user: user-4
content: fopen 是C标准库中的函数，open 是 posix标准中的函数，你怎么会找不到呢？

user: user-5
content: linux下的编译软件没有fopen函数？

user: user-0
content: 引用 4 楼 xxxxing 的回复:引用fopen 是C标准库中的函数，open 是 posix标准中的函数，你怎么会找不到呢？  我用系统没有 fopen和open的接口

user: user-6
content: 引用fopen 是C标准库中的函数，open 是 posix标准中的函数，你怎么会找不到呢？
user-0 提问: 用WIN32 API编写串口程序

回复:
user: user-1
content: 可以先直接用同步读写的方式操作串口，可以设置接收超时的，你的代码乱了点

user: user-2
content: 先用虚拟串口试试，感觉成功了再在硬件上测试
user-0 提问: Win7下VC++6.0同时打开多个工程的设置？

回复:
user: user-1
content: 楼主，你现在能同时打开工程了吗？

user: user-2
content: 我按照上面的 设置了Win7 下 的VC6.0无法打开多个工作区间啊

user: user-3
content: 引用 7 楼 my_xxh 的回复: 赵老师，怎么还是不行呀？ win7 系统vc6.0同时打开两个.dsw文件，办不到吗？苦恼几天了 引用 4 楼 zhao4zhong1 的回复:"%1"前面少一空格 然后你随便 a.dsw b.dsw c.dsw

user: user-4
content: 同时打开10个8个dsw也没问题啊, 不知道LZ在找啥..

user: user-5
content: 我看得有点迷茫啊。标题不是说同时打开多个工程吗？为啥到了具体问题，就变成了“同时打开多个工作空间（.dsw）“？  同时打开多个.dsp，VC6本身就支持的啊。

user: user-0
content: 赵老师，怎么还是不行呀？ win7 系统vc6.0同时打开两个.dsw文件，办不到吗？苦恼几天了 引用 4 楼 zhao4zhong1 的回复:"%1"前面少一空格

user: user-0
content: 我的方法是从网上找的http://blog.sina.com.cn/s/blog_668af1ff010108cv.html 目的是：在VC6.0同时打开多个工程( 即同时打开多个.dsw文件)， 能说说缺省设置具体怎么弄吗？苦恼好久了，谢谢！ 引用 5 楼 mLee79 的回复:难道不是缺省设置就可以的么, 我咋一直都可以开10个8个毫无压力的..

user: user-4
content: 难道不是缺省设置就可以的么, 我咋一直都可以开10个8个毫无压力的..

user: user-3
content: "%1"前面少一空格

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:ftype VisualStudio.dsp.10.0="F:\VC6CN\MSDev98\Bin\MSDEV.EXE" "%1" 这办法还是不行呀（如上图）！哪里有问题呀？ 谢谢

user: user-6
content: 以前在xp上发现一个“歪门邪道”可以同时打开多个工程。那就是点击那个NEHE的openGL的教程里边的demo工程，然后就可以同时打开多个工程了，只是不明白原因何在

user: user-3
content: ftype VisualStudio.dsp.10.0="F:\VC6CN\MSDev98\Bin\MSDEV.EXE" "%1"
user-0 提问: 这是道题的输出是？接分的进！

回复:
user: user-1
content: 参考gcc源代码相关片断。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390676437 看了您的帖子，但我这个地方有一个不解，求教 最终输出是一个随机负的浮点数，错误原因是没有加<stdlib.h>，因为之前没有加-Wall 所以没有任何提示，我的问题是我没有加stdlib应该会编译不同过才对吧？为什么编译通过而且可以运行，就是结果不对呢？ [gxp@localhost tmp]$ gcc -c -Wall test_val.c  test_val.c: 在函数 ‘main’ 中： test_val.c:7: 警告：隐式声明函数 ‘atof’ [gxp@localhost tmp]$ gcc -o test_val test_val.o  [gxp@localhost tmp]$ ./test_val  double=-1030792151.000000

user: user-0
content: 引用 5 楼 angel_su 的回复:warning: implicit declaration of function 'atof' [-Wimplicit-function-declaration] 隐式声明的话，默认函数返回整形，从exa取值肯定不对，加入stdlib.h吧... 是要加入stdlib.h，但奇怪的是我不加，居然编译通过然后，输出的也不是整数，是一个负的浮点数，为什么会这样呢？如果没有头文件应该报错才对？但不知道为什么可以运行返回？

user: user-2
content: #include <stdlib.h>

user: user-3
content: warning: implicit declaration of function 'atof' [-Wimplicit-function-declaration] 隐式声明的话，默认函数返回整形，从exa取值肯定不对，加入stdlib.h吧...

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

user: user-4
content: ...   未定义

user: user-4
content: 严格说来，%lf 对C89来说是为定义的，你应该用 %f  或是你试试C99模式
user-0 提问: if语句中的语句失效

回复:
user: user-0
content: 谢谢各位的帮助和教导！

user: user-0
content: 引用 2 楼 user-5 的回复:// 初始化，如果不初始化的话，数组里面含有随机值， // 按照你的第一方式，如果随机值不是0－9,a-f,A-F,变量i根本不会自增，所以无限循环 // 你的第二方式即使判断不成立也会自增果然是这样……我输出了一下未初始化的数组，都是乱码……在for循环后补充一个 '\0' 就可以正常运行了。

user: user-0
content: 呃……我在最后一个else if后面补了  	else break;  后，就能输出正确结果了……我输入的是  0x11，为什么会3种条件都不满足？

user: user-1
content: 写if不写对应else的程序员都是在踩钢丝！

user: user-2
content: 引用 楼主 u012184298 的回复:#include<stdio.h>  #define HEX 16  int htoi(char s[]); main() { 	int i,a; 	char c,s[20]; 	for(i = 0;i < 20 && (c = getchar())!= '\n'; ++i) 		s[i] = c; 	if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')){ 		a = htoi(s); 		printf("The number is %d.\n",a); 	} 	else printf("Error!"); 	return 0; }  int htoi(char s[]) { 	int i = 2; 	int n = 0; 	 	while(s[i] != '\0' && s[i] != '\n'){ 		if(s[i] >= '0' && s[i] <= '9'){ 				n = n * HEX + (s[i] - '0'); 				++i;} 		else if(s[i] >= 'a' && s[i] <= 'f'){ 				n = n * HEX + (s[i] - 'a' + 10); 				++i;} 		else if(s[i] >= 'A' && s[i] <= 'F'){ 				n = n * HEX + (s[i] - 'A' + 10); 				++i;}			   		} 	return n; }    htoi 函数中，++i全部无效，但是改为这样：  int htoi(char s[]) { 	int i = 2; 	int n = 0; 	 	while(s[i] != '\0' && s[i] != '\n'){ 		if(s[i] >= '0' && s[i] <= '9') 				n = n * HEX + (s[i] - '0'); 		else if(s[i] >= 'a' && s[i] <= 'f') 				n = n * HEX + (s[i] - 'a' + 10); 		else if(s[i] >= 'A' && s[i] <= 'F') 				n = n * HEX + (s[i] - 'A' + 10); 		++i;		   		} 	return n; }  就可以正常运行。 求各位大神，这是为什么？前一种为何输入后无任何结果输出？程序处在卡死状态。  这几种状态之外，还有别的状态。

user: user-3
content: 没有什么奇怪的，前边的++i都在你的三种条件里，很明显不执行的话意味着三种条件都不满足。修改后的结构，++i就和if语句没有关系了，他只是循环中的一句，每次循环都会执行

user: user-4
content: 你的 else 呢？？ 编程要严谨。

user: user-5
content: // 初始化，如果不初始化的话，数组里面含有随机值， // 按照你的第一方式，如果随机值不是0－9,a-f,A-F,变量i根本不会自增，所以无限循环 // 你的第二方式即使判断不成立也会自增

user: user-5
content: #include<stdio.h>  #define HEX 16  int htoi(char s[]); main() { 	int i,a; 	int c;    // getchar()返回int        char s[20] = { '\0' };  // 初始化，如果不初始化的话，数组里面含有随机值，按照你的第一方式，如果随机值不是0－9,a-f,A-F,变量i根本不会自增，所以无限是＝循环；你的第二方式即使判断不成立也会自增 	for(i = 0;i < 20 && (c = getchar())!= '\n'; ++i) 		s[i] = c;  	if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')){ 		a = htoi(s); 		printf("The number is %d.\n",a); 	} 	else printf("Error!"); 	return 0; }  int htoi(char s[]) { 	int i = 2; 	int n = 0; 	 	while(s[i] != '\0' && s[i] != '\n'){ 		if(s[i] >= '0' && s[i] <= '9'){ 				n = n * HEX + (s[i] - '0'); 				++i;} 		else if(s[i] >= 'a' && s[i] <= 'f'){ 				n = n * HEX + (s[i] - 'a' + 10); 				++i;} 		else if(s[i] >= 'A' && s[i] <= 'F'){ 				n = n * HEX + (s[i] - 'A' + 10); 				++i;}			   		} 	return n; }
user-0 提问: 求输入字符串长度，结果出不来，求指导。

回复:
user: user-1
content: Linux：Ctrl+D Windows：Enter，Ctrl+Z，Enter

user: user-2
content: ctrl+z： 如果在输入的时候ctrl+z前面有字符，返回编码值26 如果在输入的时候ctrl+z前面没字符，返回编码值-1

user: user-3
content: 按Ctrl+Z 一次不行按两次

user: user-4
content: while ( getchar () != ‘\n’)

user: user-0
content: 我知道可以改成while ( getchar () != '\n') ，但是这样怎么就可输出 int main () { 	int n; 	 	n = 0; 	while ( getchar () != EOF ) 	{ 		printf("%d\n", n); 		++n; 	} 	 	//printf("%d\n", n);  	return 0; }

user: user-5
content: 唉，getchar()用EOF判断。。。

user: user-6
content: while ( getchar () != '\n')     换行结束输入就可以了

user: user-7
content: 条件结束没写对，所以循环结束不了吧。
user-0 提问: 有关ifstream的内存占用问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:有个 cvReleaseImage() 好像是这么个函数，释放图像       stringstream ss;  // 类型转换统一转换为char* 类型     ss << "E:/temp/";     ss << nframes;     ss << ".jpg" ;     ss >> nframesstr;   string s; s+= "E:/temp/"+ nframes+".jpg"; nframesstr = s.c_str(); 不知道你是不是这个意思 嗯嗯。原来是忘了Release。opencv东西还不是很熟悉

user: user-1
content: 有个 cvReleaseImage() 好像是这么个函数，释放图像       stringstream ss;  // 类型转换统一转换为char* 类型     ss << "E:/temp/";     ss << nframes;     ss << ".jpg" ;     ss >> nframesstr;   string s; s+= "E:/temp/"+ nframes+".jpg"; nframesstr = s.c_str(); 不知道你是不是这个意思
user-0 提问: 对windows 窗口程序框架的面向对象封装

回复:
user: user-1
content: 引用 14 楼 wenbo228228 的回复:[quote=引用 13 楼 bojie5744 的回复:] 很多东西，可能自己那处地方不小心了，造成的，认真看看吧。不过你为什么不去MFC区提问呢？我也无意看见这里竟然有个MFC的，然后进来了。 还有mfc区啊，多谢提醒  错误找到了，忘了wndclassex.hIconSm，不过编译器没发现这个问题，很奇怪呢，难道vs2013不给力？[/quote] 他不会管这个问题，所以一开始提醒你参考我发出来的参数，一行一行对照，是哪里缺少了，只要错误了，缺少都会导致注册失败，这里都是细节问题

user: user-0
content: 引用 13 楼 bojie5744 的回复:很多东西，可能自己那处地方不小心了，造成的，认真看看吧。不过你为什么不去MFC区提问呢？我也无意看见这里竟然有个MFC的，然后进来了。 还有mfc区啊，多谢提醒  错误找到了，忘了wndclassex.hIconSm，不过编译器没发现这个问题，很奇怪呢，难道vs2013不给力？

user: user-1
content: 很多东西，可能自己那处地方不小心了，造成的，认真看看吧。不过你为什么不去MFC区提问呢？我也无意看见这里竟然有个MFC的，然后进来了。

user: user-1
content: 那你直接不要自己写了，直接调用封装好的这个AfxRegisterClass函数，单步调试进入这个函数，你去看看他是怎么写的 WNDCLASS ws; AfxRegisterClass(&ws);

user: user-0
content: 我把窗口类的额外属性全部去掉，结果运行正常；加上额外属性就注册失败了

user: user-0
content: 引用 8 楼 bojie5744 的回复:BOOL MyWindow::PreCreateWindow(CREATESTRUCT& cs) { 	HINSTANCE hInst = AfxGetInstanceHandle(); 	ASSERT(hInst);  	WNDCLASSEX wcex; 	wcex.cbSize = sizeof(WNDCLASSEX); 	BOOL bRet = GetClassInfoEx(hInst,cs.lpszClass,&wcex);  	if(bRet) 	{ 		return TRUE; 	} 	wcex.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; 	wcex.lpfnWndProc = AfxWndProc; 	wcex.cbClsExtra = 0; 	wcex.cbWndExtra = 0; 	wcex.hInstance = hInst; 	wcex.hIcon = wcex.hIconSm = LoadIcon(hInst,MAKEINTRESOURCE(IDR_MAINFRAME)); 	wcex.hCursor = LoadCursor(hInst,IDC_ARROW); 	wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 	wcex.lpszMenuName = NULL; 	wcex.lpszClassName = cs.lpszClass; 	bRet = RegisterClassEx(&wcex); 	if(bRet == 0) 	{ 		MessageBox("注册失败"); 	} 	return bRet; } bRet = RegisterClassEx(&wcex);用vs2013编译会提示性能警告，我最开始也是这么写的， 后来改成这样就可以了： if (!RegisterClass(&wnd))  ，性能警告提示我把返回值转换成布尔类型，这样在某些场合会出现错误的吧

user: user-0
content: 终于调试出来了，窗口类有的地方有额外属性，有的地方又忘了额外属性，结果编译器没看出来

user: user-1
content: BOOL MyWindow::PreCreateWindow(CREATESTRUCT& cs) { 	HINSTANCE hInst = AfxGetInstanceHandle(); 	ASSERT(hInst);  	WNDCLASSEX wcex; 	wcex.cbSize = sizeof(WNDCLASSEX); 	BOOL bRet = GetClassInfoEx(hInst,cs.lpszClass,&wcex);  	if(bRet) 	{ 		return TRUE; 	} 	wcex.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; 	wcex.lpfnWndProc = AfxWndProc; 	wcex.cbClsExtra = 0; 	wcex.cbWndExtra = 0; 	wcex.hInstance = hInst; 	wcex.hIcon = wcex.hIconSm = LoadIcon(hInst,MAKEINTRESOURCE(IDR_MAINFRAME)); 	wcex.hCursor = LoadCursor(hInst,IDC_ARROW); 	wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 	wcex.lpszMenuName = NULL; 	wcex.lpszClassName = cs.lpszClass; 	bRet = RegisterClassEx(&wcex); 	if(bRet == 0) 	{ 		MessageBox("注册失败"); 	} 	return bRet; }

user: user-1
content: 对于你这个问题 “运行时注册窗口失败”  看看是否把WNDCLASSEX 这个结构的每个成员正确填了。

user: user-2
content: 引用 5 楼 wenbo228228 的回复:本人调试多次未果，你一定能从中收获很多，如果你调试出来了的话 呵呵。。

user: user-0
content: 本人调试多次未果，你一定能从中收获很多，如果你调试出来了的话

user: user-0
content: 就没有人有兴趣研究下吗

user: user-3
content: 你直接把注册部分提取出来。。或者看看跟MSDN上的例子有什么不同了

user: user-0
content: 没有人吗、、、、

user: user-0
content: 我没看过mfc，这个项目是根据mfc的思路封装的，细节有很多不一样，你有兴趣具体看看吗
user-0 提问: 用C实现断点续传的功能，详细点的实现原理是什么嘞

回复:
user: user-1
content: 下次取数据之前，先从本地读出来数据大小，socket对话的时候把这个长度发过去，服务器上判断一下这个长度，从这个位置开始读取数据

user: user-2
content: WinExec("cmd.exe /c copy /b 文件1+文件2+文件3 文件all",SW_HIDE);

user: user-0
content: 具体实现细节还没想好，估计还有得补充

user: user-0
content: 目前想到的一种方法，把数据切割成小块，每一小块数据给一个ID进行标识，下次取数据的时候，从上次取到的最后一个数据ID的下一个开始取

user: user-3
content: 指针记录好就行。

user: user-0
content: 引用 2 楼 robertbo 的回复:多次握手，首先得到断点续传的起始位置，然后打开文件读取偏移量，从断点续传位置开始上传。 写文件的时候要用追加模式。拿到一部分数据，由于其他原因没有全部取完，下次要从上次截止的地方接着取数据

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:参考eMule源代码？补充一下啊，主要是从服务器上拿数据，不涉及上传

user: user-0
content: 引用 楼主 u012006886 的回复:最近做的一个项目，需要用到断点续传功能，话说用某雷的时候这功能确实好用，轮到自己实现了，有点傻逼了，懂的大神给点建议啊源码神马的看着真心不容易啊

user: user-4
content: 断点续传，其实就是S端记录上次传的记录，下次C上传的时候，问下S上传到哪了，C就从上次传的偏移量，读文件继续上传

user: user-1
content: 多次握手，首先得到断点续传的起始位置，然后打开文件读取偏移量，从断点续传位置开始上传。 写文件的时候要用追加模式。

user: user-2
content: 参考eMule源代码？
user-0 提问: vs

回复:
user: user-1
content: C#程序？添加一个Main方法： static void Main(string[] Args) {     你的程序从这里开始 }

user: user-2
content: 没有程序怎么解决

user: user-3
content: 把程序发上来看一看，应该是主函数写错了。

user: user-4
content: 确实是没有main主函数的样子

user: user-5
content: 引用 楼主 quaro 的回复:错误	1	程序“C:\Users\Administrator\Documents\Visual Studio 2005\Projects\Project3\Project3\obj\Debug\Project3.exe”不包含适合于入口点的静态“Main”方法	Project3 怎么解决  求助 没有main函数？
user-0 提问: 编译器BUG？(DEV-CPP && VC6.0) !=1

回复:
user: user-0
content: 现在不光要考虑自己代码的正确与否，还有考虑编译器可能出现的问题，心好累

user: user-1
content: 不要想太多。毕竟人家是专家。

user: user-0
content: 引用 4 楼 user-2 的回复:估计是数组没初始化导致，有问题要调试代码找出原因，不是换编译器...  谢谢……是数组没初始化造成的……

user: user-0
content: 引用 4 楼 user-2 的回复:估计是数组没初始化导致，有问题要调试代码找出原因，不是换编译器... 看看dev-cpp怎么调试去。。。

user: user-2
content: 估计是数组没初始化导致，有问题要调试代码找出原因，不是换编译器...

user: user-0
content: 引用 2 楼 FightForProgrammer 的回复:不要想太多。毕竟人家是专家。  可是现在不同编译器结果不一样 好纠结啊
user-0 提问: 求大神看一个简单的程序

回复:
user: user-1
content: 这个问题好像前两天看到过

user: user-2
content: 楼上的正解！if语句判断相等应该是两个等号的！

user: user-3
content: if(c=='\n')//不要用赋值运算符

user: user-4
content: 我就不明白EOF哪里不方便?只有方便的说

user: user-5
content: 楼主太马虎，代码太乱

user: user-6
content: if里判断是否相等用==而不用= #include <stdio.h>  int main() { 	int c, nl; 	nl = 0; 	while((c = getchar()) != EOF) 		if( c == '\n') 			++nl; 	printf("%d\n",nl); 	return 0; }

user: user-7
content: if中判断相等的话是需要用两个=的

user: user-8
content: 你的代码把“==”写成了“=” 改过的代码： #include<stdio.h> void main() {     int c, nl;      nl = 0;     while((c = getchar()) != EOF)         if( c == '\n')         ++nl;     printf("%d\n",nl); }

user: user-9
content: 引用 1 楼 u013491662 的回复:if(c=='\n')//不要用赋值运算符 写少了等号
user-0 提问: c/c++求助

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

user: user-2
content: 1 楼正解  因为你电脑是32位的，那么寄存器也是32位的 它先把 a 的值取到寄存器里   那么寄存器内容就是  0x000000A5 再执行取反   那么寄存器内容就变成  0xFFFFFF5A 之后的运算跟1楼说的一样  这书...难道他用8位的CPU #include <iostream> using namespace std; int main() {     unsigned char a=0xA5;     unsigned char b=~a>>4; 	unsigned char c=(unsigned char)~a>>4;      printf("b=%d\n",b); 	printf("c=%d\n",c); 	printf("d=%x\n",~a);      system("pause");     return 0; }

user: user-3
content: 在《程序员面试宝典》第二版上看到一道题  下面的程序的结果是多少？     C/C++ code #include <iostream> using namespace std; int main() { 	unsigned char a=0xA5;         unsigned char b=~a>>4; 	printf("b=%d\n",b); 	system("pause"); 	return 0; }  0xA5的二进制表示为1010 0101，~的优先级高于>>，那么就应该是1010 0101取反得0101 1010再右移4位，得0000 0101，但是我在vs上运行这个程序为什么输出结果不是5，而是245呢？  而且 当我把      unsigned char b=~a>>4; 分成两部分写 unsigned char b=~a ; b=b>>4;输出结果就是5.  为了强调优先级我还试着写成unsigned char b=（~a）>>4; 结果依然为245.  楼主非常疑惑，望大神解疑。    顺着理解不了的话我们逆向说明： 245的二进制是11110101  那11110101从哪儿来的呢？ 自然是取反得来的，而你unsigned char b=（~a）>>4; 结果依然为245.就说明了取反得到的二进制就是11110101

user: user-4
content: 上机运行了一下 根据运行结果说下我的猜测 如有不对 希望各位大神指正 char型数据参加运算要转换成int型 因为是无符号的char型，所以左面的位值全补0 值为0x000000A5 ~a就是0xFFFFFF5A 因为参与运算的已经是int型，他默认是有符号型的，并且符号位为1，因为是算术右移，所以左侧补1 ~a>>4的值为0xFFFFFFF5 把0xFFFFFFF5付给1字节的数据，发生截断，只赋值0xF5 所以输出结果为245  补充：楼主可以试下把无符号char改成有符号char，根据我的推导验证一下结果！ PS：楼主的这个问题真是好，从中学习了！

user: user-5
content: 单步看代码：  #include <iostream> using namespace std; int main() {     unsigned char a=0xA5; 	unsigned char c=~a; 	unsigned char d=c>>4; 	unsigned char e=a>>4; 	unsigned char f=~e; 	printf("a=%d\tc=%d\td=%d\te=%d\tf=%d\n",a, c, d, e, f);	  	char c2=~a; 	char d2=c2>>4; 	char e2=a>>4; 	char f2=~e2; 	printf("a=%d\tc2=%d\td2=%d\te2=%d\tf2=%d\n",a, c2, d2, e2, f2);	  	unsigned char b=~a>>4;     printf("b=%d\n",b);     system("pause");     return 0; }

user: user-6
content: debug版本的汇编代码 { 00401010   push        ebp 00401011   mov         ebp,esp 00401013   sub         esp,48h 00401016   push        ebx 00401017   push        esi 00401018   push        edi 00401019   lea         edi,[ebp-48h] 0040101C   mov         ecx,12h 00401021   mov         eax,0CCCCCCCCh 00401026   rep stos    dword ptr [edi] 1747:    unsigned char a=0xA5; 00401028   mov         byte ptr [ebp-4],0A5h 1748:    unsigned char b=~a>>4; 0040102C   mov         eax,dword ptr [ebp-4] 0040102F   and         eax,0FFh 00401034   not         eax 00401036   sar         eax,4 00401039   mov         byte ptr [ebp-8],al 1749:    printf("b=%d\n",b); 0040103C   mov         ecx,dword ptr [ebp-8] 0040103F   and         ecx,0FFh 00401045   push        ecx 00401046   push        offset string "b=%d\n" (0042201c) 0040104B   call        printf (00401080) 00401050   add         esp,8 1750:    return 0; 00401053   xor         eax,eax 1751: }

user: user-7
content: 0101 1010再右移4位，得0000 0101。 为什么你认为右移前面就要补0？为什么不能补1?
user-0 提问: 数据精度问题，最后一位应该是0，却变成了1

回复:
user: user-1
content: 浮点型 在计算机内存中 以32为存在内存中，也就是4个字节，后面0-22位是用来寸后面的小数部分的，你自己算下小数部分转化为二进制。是通过*2 ，直到基数部分为0 算下 0.29*2   基数为0 0.58*2      基数为1. 继续。。。。

user: user-2
content: 不过这个是不能完全消除的，因为有些十进制的有限小数转换为二进制后会变成无限小数，有限位数的float、double总是会有精度的问题。最好的解决办法是限定一定精度四舍五入掉。4楼的方法其实也算一种四舍五入，因为printf会做这个

user: user-3
content: float只保证6到7位，超过7的其它范围不保证

user: user-4
content: http://bbs.csdn.net/topics/390676437

user: user-5
content: float形有效数字超过指定长度后,不能保证后面数字的精度，float和double的精度是由尾数的位数来决定的。  float的指数位有8位，而double的指数位有11位，分布如下：  float： 1bit（符号位） 8bits（指数位） 23bits（尾数位） double： 1bit（符号位） 11bits（指数位） 52bits（尾数位）  float：2^23 = 8388608，一共七位 double：2^52 = 4503599627370496一共16位 所以呢.. #include <stdio.h>  void main() { 	double f; 	scanf("%lf",&f);			 	printf("%f or %e\n",f,f);     return 0; }

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390676437  找老师的回复太过高深，看不懂。。。

user: user-0
content: 引用 4 楼 wu424602394 的回复:float形有效数字超过指定长度后,不能保证后面数字的精度，float和double的精度是由尾数的位数来决定的。  float的指数位有8位，而double的指数位有11位，分布如下：  float： 1bit（符号位） 8bits（指数位） 23bits（尾数位） double： 1bit（符号位） 11bits（指数位） 52bits（尾数位）  float：2^23 = 8388608，一共七位 double：2^52 = 4503599627370496一共16位 所以呢.. #include <stdio.h>  void main() { 	double f; 	scanf("%lf",&f);			 	printf("%f or %e\n",f,f);     return 0; }  恩恩，谢谢，的确可以。。。我开始也试过double，但是不行，对比你的代码，原因在  %lf  哈哈，原来如此。。。

user: user-6
content: 某些数值的确会出现这种问题

user: user-7
content: 对于浮点型数据如果输入的十进制数不能完美的转换成二进制小数的话存储就会出现点问题 21.29转换成二进制数（小数精度为500） 10101.01001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111... 对于float型数据存储尾数(M)为23位，这样肯定会出现问题 对于能完美转换成二进制数的十进制数，如1.5 转换成二进制数为1.1 这类数值存储就不会出现问题，楼主可以试试！

user: user-8
content: 引用 楼主 mao_miaoxi 的回复:  如图，第一个数据应该是21.290000的啊。。。 浮点数的这种问题，确实存在。即使换成double型的也是一样的。 所以判断两个浮点数相当，或者浮点数是否等于0，的程序一定要慎重。
user-0 提问: 求大神看一个链表建立的C语言

回复:
user: user-1
content: 引用 3 楼 wwwzys 的回复:scanf("%d",m->grade);                  改写成             scanf("%d",&(m->grade));  楼上改的是对的，不过少改了  #include<stdio.h> #include<stdlib.h> typedef struct p{ char name[10]; int grade; int rank;  struct p *next; }STU; STU *s;   int input()//这里参数错误 {int n; printf("Please input the number of student"); reinput:scanf("%d",&n); if(n<1||n>10) {printf("mistake number,please reinput"); goto reinput; } else return n; }   void create(int n) {int i; STU *l; STU *m;  s=(STU*)malloc(sizeof(STU)); l=s;   for(i=0;i<n;i++) {m=(STU*)malloc(sizeof(STU)); printf("input the name:"); scanf("%s",m->name); printf("input the grade:"); scanf("%d",&(m->grade)); l->next=m; l=m;  } l->next=NULL;	//这里少了句  } void printp() {STU *l; l=s; l=l->next;//这里少了句 for(l;l!=NULL;l=l->next) {printf("name:%s,grade:%d\n",l->name,l->grade);}//最好加个换行\n或 \t }  main() {int num=0; num=input(); create(num); printp();  }

user: user-2
content: scanf("%d",m->grade);                  改写成             scanf("%d",&(m->grade));

user: user-3
content: 学会自己设断点调试。

user: user-0
content: 是输入完第一个人名字和成绩。表述有误
user-0 提问: 先定义的变量地址比后定义的变量地址高？

回复:
user: user-1
content: 引用 5 楼 lin5161678 的回复: 纠正 这图是 A < C < B  C < A < B是这张图

user: user-1
content: 楼上几位  所谓栈生长方向  所谓地址分配  误导够了  怎么定义顺序 和 分配顺序 没有必然联系

user: user-2

user: user-3
content: 栈是从高地址向低地址分配的，堆是从低到高，overlap了就说明内存耗尽了。。

user: user-0
content: 引用 1 楼 lin5161678 的回复:未必  怎么安排都有可能  顺序定义 ABC 内存顺序 可能是 ACB CAB CBA BAC..... 为什么我测出来的是 a>b>c>d>e>f

user: user-1
content: 未必  怎么安排都有可能  顺序定义 ABC 内存顺序 可能是 ACB CAB CBA BAC.....

user: user-4
content: 引用 楼主 u013491662 的回复: #include<stdio.h> int  main() { 	int a, b, c; 	int d, e, f; 	printf("%p\n", &a); 	printf("%p\n", &b); 	printf("%p\n", &c); 	printf("%p\n", &d); 	printf("%p\n", &e); 	printf("%p\n", &f); 	return  0; }  为什么a的地址要比b的高？a先声明，应该a的地址比b的低才是呀？ VC6 Release模式下，a的地址要比b的低 0012FF38 0012FF3C 0012FF40 0012FF44 0012FF48 0012FF4C VC6 Debug模式下，a的地址要比b的高 0012FF7C 0012FF78 0012FF74 0012FF70 0012FF6C 0012FF68 其实不要纠结变量的地址顺序，除非你想hack 从编译器的角度来说，变量的地址是可以随机安排的，又不影响寻址使用，不一定非要按排列顺序

user: user-1
content: 引用 2 楼 u013491662 的回复:[quote=引用 1 楼 lin5161678 的回复:] 未必  怎么安排都有可能  顺序定义 ABC 内存顺序 可能是 ACB CAB CBA BAC..... 为什么我测出来的是 a>b>c>d>e>f[/quote]没有为什么  所谓怎么安排都有可能  除了包括 ACB CAB BAC之外 自然包括 CBA ABC 这样的情况  这才叫做 "都有可能"
user-0 提问: while(1){if()break}显示错误

回复:
user: user-1
content: while(1)//这个很重要的，楼主哥哥

user: user-2
content: 多了个“；”。要多注意写，最好要一次性搞定！

user: user-3
content: 引用 楼主 u010840578 的回复:视频里也能实现 视频里用的是符合C99标准或C++的编译器，变量可以在使用的地方声明，VC6.0必须在所以语句前声明变量

user: user-3
content: 引用 楼主 u010840578 的回复:while(1); { frame = cvQueryFrame(capture); if(!frame)break;  cvShowImage("show",frame); char c=cvWaitKey(33); if(c==27)break;  cvReleaseCapture(&capture); cvDestroyWindow("show"); } 将char c;的声明提前 while(1) { char c; frame = cvQueryFrame(capture); if(!frame)break;  cvShowImage("show",frame); c = cvWaitKey(33); if(c==27)break;  cvReleaseCapture(&capture); cvDestroyWindow("show"); }

user: user-4
content: 别用VC6.0了，换个编译器吧

user: user-5
content: 引用 1 楼 u014444402 的回复:while(1)后面多了个分号，当然会报错了。 引用 1 楼 u014444402 的回复:while(1)后面多了个分号，当然会报错了。 引用 1 楼 u014444402 的回复:while(1)后面多了个分号，当然会报错了。  不想说什么了

user: user-6
content: while(1)后面多了个分号，当然会报错了。

user: user-7
content: 不解释
user-0 提问: vc++6.0哪怕是打印hello都出来太慢，请问怎么了，怎么解决啊

回复:
user: user-1
content: 什么配置？把360删掉再说

user: user-2
content: 楼上正解可能是杀软问题。

user: user-3
content: 有可能是杀毒软件的干扰，有360之类的吗

user: user-0
content: 引用 1 楼 user-3 的回复:有可能是杀毒软件的干扰，有360之类的吗 一楼正解，终于好了，谢了

user: user-0
content: 引用 2 楼 cf2d612 的回复:楼上正解可能是杀软问题。 嗯，试试

user: user-0
content: 引用 1 楼 user-3 的回复:有可能是杀毒软件的干扰，有360之类的吗 嗯，有，360影响大么
user-0 提问: 类似word的章节的数据结构用哪种

回复:
user: user-1
content: 引用 11 楼 lyb1900 的回复:用深度宽度表达不了1.2.4这类吧， 深度3，宽度4 ，，只会得到1.1.4  这不是单纯的二叉树，访问兄弟节点只会增加宽度而不是深度。 tree->firstchild->NextSibling->firstchild->NextSibling->NextSibling->NextSibling 1    .       1       |          2                 .      1        |      2            |           3            |         4  看这个章节生成方式。只有访问子树才增加章节深度。1.2.4表示方法

user: user-1
content: 1.1.1这个值是不用存的。它表示子树的子树。 tree->firsttree->firsttree 1   .        1          .1 章节是一种树的访问方式，而不是节目值。 学过哈夫曼编码和哈夫曼树吗？从根节点一直访问到叶子节点，访问的路径一早编码。你这个章节是一样的道理。只不过用了m树

user: user-0
content: 用深度宽度表达不了1.2.4这类吧， 深度3，宽度4 ，，只会得到1.1.4

user: user-0
content: 引用 9 楼 lovesmiles 的回复:引用 7 楼 lyb1900 的回复:[quote=引用 6 楼 lyb1900 的回复:] [quote=引用 5 楼 u014444402 的回复:] [quote=引用 3 楼 lyb1900 的回复:] [quote=引用 2 楼 u014444402 的回复:] 这不是树吗？用什么树 还有什么树，普通 的M叉树就可以了。 typedef struct TreeNode *PtrToNode; struct TreeNode {     ElementType element;     PtrToNode FirstChild;//第一个孩子     PtrToNode NextSibling;//下一个兄弟 } 看数据结构树的第一节就是讲这个的。[/quote]那1.1，1.2.1这些信息如何在element 表达呢[/quote]M不确定时怎么办[/quote]  树的根接点是1，子树是1.1，兄弟树是2，子树的兄弟是1.2，子树的子树是1.1.1。用树的深度和宽度表示[/quote]  树的根接点是1，子树是1.1，兄弟树是2，子树的兄弟是1.2，子树的子树是1.1.1。用树的深度和宽度表示  可以这样表示，但怎么存1.1.1呢，这值怎么存呢

user: user-2
content: 这不是树吗？

user: user-3
content: 用STL中的map配合vector

user: user-1
content: 引用 7 楼 lyb1900 的回复:引用 6 楼 lyb1900 的回复:[quote=引用 5 楼 u014444402 的回复:] [quote=引用 3 楼 lyb1900 的回复:] [quote=引用 2 楼 u014444402 的回复:] 这不是树吗？用什么树 还有什么树，普通 的M叉树就可以了。 typedef struct TreeNode *PtrToNode; struct TreeNode {     ElementType element;     PtrToNode FirstChild;//第一个孩子     PtrToNode NextSibling;//下一个兄弟 } 看数据结构树的第一节就是讲这个的。[/quote]那1.1，1.2.1这些信息如何在element 表达呢[/quote]M不确定时怎么办[/quote]  树的根接点是1，子树是1.1，兄弟树是2，子树的兄弟是1.2，子树的子树是1.1.1。用树的深度和宽度表示

user: user-2
content: 你去好好看一下这种树吧， 不是M确定不确定的问题。 这跟M是多少没有关系。

user: user-0
content: 引用 6 楼 lyb1900 的回复:引用 5 楼 u014444402 的回复:[quote=引用 3 楼 lyb1900 的回复:] [quote=引用 2 楼 u014444402 的回复:] 这不是树吗？用什么树 还有什么树，普通 的M叉树就可以了。 typedef struct TreeNode *PtrToNode; struct TreeNode {     ElementType element;     PtrToNode FirstChild;//第一个孩子     PtrToNode NextSibling;//下一个兄弟 } 看数据结构树的第一节就是讲这个的。[/quote]那1.1，1.2.1这些信息如何在element表达呢[/quote]M不确定时怎么办

user: user-0
content: 引用 5 楼 u014444402 的回复:引用 3 楼 lyb1900 的回复:[quote=引用 2 楼 u014444402 的回复:] 这不是树吗？用什么树 还有什么树，普通 的M叉树就可以了。 typedef struct TreeNode *PtrToNode; struct TreeNode {     ElementType element;     PtrToNode FirstChild;//第一个孩子     PtrToNode NextSibling;//下一个兄弟 } 看数据结构树的第一节就是讲这个的。[/quote]那1.1，1.2.1这些信息如何在element表达呢

user: user-2
content: 引用 3 楼 lyb1900 的回复:引用 2 楼 u014444402 的回复:这不是树吗？用什么树 还有什么树，普通 的M叉树就可以了。 typedef struct TreeNode *PtrToNode; struct TreeNode {     ElementType element;     PtrToNode FirstChild;//第一个孩子     PtrToNode NextSibling;//下一个兄弟 } 看数据结构树的第一节就是讲这个的。

user: user-0
content: 引用 2 楼 u014444402 的回复:这不是树吗？在树中如何表达1.2，1.1.1

user: user-0
content: 引用 2 楼 u014444402 的回复:这不是树吗？用什么树
user-0 提问: 字符转换

回复:
user: user-1
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <conio.h> unsigned int iv,i; unsigned char BCD[5];//定长10位BCD码 unsigned char sv[11]; void main() {     iv=123456789;//最大10位无符号正整数     //INT2BCD     sprintf(sv,"%010u",iv);     for (i=0;i<10;i+=2) {         BCD[i/2]=(sv[i]<<4)|(sv[i+1]&0x0F);     }     printf("BCD=%02x%02x%02x%02x%02x\n",BCD[0],BCD[1],BCD[2],BCD[3],BCD[4]);     //BCD2INT     for (i=0;i<10;i+=2) {         sv[i]='0'|(BCD[i/2]>>4);         sv[i+1]='0'|(BCD[i/2]&0x0F);     }     sscanf(sv,"%010u",&iv);     printf("iv=%010u\n",iv);     getch(); }

user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-2
content: 引用 3 楼 linghuazaii 的回复:fread(buf,sizeof(buf),1,fp);//这个可是只读了一个字符哦不对不对 更正 这个没问题

user: user-2
content: fread(buf,sizeof(buf),1,fp);//这个可是只读了一个字符哦

user: user-3
content: 虽然看不明白楼主的代码，但是根据题意可有如下代码。  #include <stdio.h>  int main () { 	char* buf = "12345"; 	int decimal = 0; 	int i = 0; 	for(; i < 5; i++){ 		decimal = decimal * 10 + buf[i] - '0'; 	} 	printf("decimal %d in hexadecimal is 0x%x\n", decimal, decimal); 	return 0; }  省略文件读写，只是给楼主提供思路。

user: user-4
content: 12345变成 0x12345加 0x呗 如果想变成16进制的12345sprintf格式化函数可以吧
user-0 提问: foo和bar是什么？

回复:
user: user-1
content: 甲、乙

user: user-2
content: 每个编程语言都是用hello world来开始，这大概是第一个人这样子做了，所以后面的人就跟着这样子了。你搜一下马屁股决定航天飞机的宽度这个故事，你就会明白每个看似没意义的数字背后都是很有意思的

user: user-3
content: 张三 李四 小明 小红之类的。

user: user-4
content: 楼主是从哪本书上看到的？

user: user-4
content: 好吧，我没有注意到，看来我看书不够深。甚至都没有一点印象。。。可能是没有看过。。。

user: user-5
content: 引用 5 楼 u010957746 的回复:楼主给你解释下， foo 和 bar 就是外国人随便简单的起的一个名字，一般都会定义为一个没有实际意义的文件名字  比如中国的： 张三 李四 王二麻子 这个精辟，就是这样，每种语言里都有一些没有太多意思但作用很大的词，比如王二麻子

user: user-6
content: 随便写的东西 demo性质

user: user-7
content: foobar是相当不错的音乐播放器哦 亲

user: user-8
content: 楼主给你解释下， foo 和 bar 就是外国人随便简单的起的一个名字，一般都会定义为一个没有实际意义的文件名字  比如中国的： 张三 李四 王二麻子

user: user-9
content: http://en.wikipedia.org/wiki/Foobar 术语foobar, foo, bar, baz 和qux经常在计算机编程或计算机相关的文档中被用作占位符的名字。当变量，函数，或命令本身不太重要的时候，foobar, foo, bar, baz 和qux就被用来充当这些实体的名字，这样做的目的仅仅是阐述一个概念，说明一个想法。这些术语本身相对于使用的场景来说没有任何意义。Foobar经常被单独使用；而当需要多个实体举例的时候，foo，bar，和baz则经常被按顺序使用。

user: user-10
content: http://baike.baidu.com/view/1206486.htm?fr=aladdin 搜索了一下，呵呵，以前也没有特别搜索过

user: user-11
content: 自己喜欢就行

user: user-12
content: 估计是因为这两个都是单音节，当初写教程的人就随便取了这两种名字，然后所有人就都用它了。 反正我很不爽听到这两个，老感觉是在骂你傻瓜
user-0 提问: fseek读取外部文件结果出现空行

回复:
user: user-1
content: 引用 5 楼 OU14563 的回复:打开的方式是“rb”，写入的方式是“wb”。 一行的长度是50个字节左右，那么是不固定的。你每次跳50个字节，就可能会出现跳到的地方不是行首。 这种最好的办法是。 char **ppcFile; ppcFile = new char*[行数]; fgets读一行。 ppcFile[i]=new char(strlen(一行)+1); strcpy(ppcFile[i], (一行)); 整个文件分行存放到内存里面。这样的方式来跳行。 以fseek来跳行，必须计算准确。50个字节，你得必须确定每一行算上回车是50个字节才行。

user: user-0
content: 打开的方式是“rb”，写入的方式是“wb”。

user: user-2
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。

user: user-1
content: 打开方式是不是“r”？最好是用“rb”打开。

user: user-0
content: 非常感谢赵4老师的回答！要从第十行的数据读取，指针通过偏移量移到第十行后读取文件的数据后并存储后，它的结果还是会空出前面的9行空间，数据依然是从第十行存储起来。这个就是赵4老师所说的情况呀，那fread和fwrite两个函数号称是随机读取文件，这样根本就没有达到随机读取和存储的效果呀。

user: user-3
content: 文件是你写的吗？ 如果是，那么你需要问自己为什么要跳一行再写。 如果不是，那么问写的人。  问csdn......
user-0 提问: 三角形面积编程求看错误

回复:
user: user-1
content: "double"与"%d"不对应！

user: user-2
content: double a,b,c,p,s;          scanf("%lf%lf%lf",&a,&b,&c);     if (((a+b>c)&&(a-b<c))||((a+c>b)&&(a-c<b))||((b+c>a)&&(b-c<a)))         p=(a+b+c)/2;     s=sqrt(p*(p-a)*(p-b)*(p-c));     printf("三角形面积=%f\n",s);   输入值的时候 中间要加空格 。 格式字符串已改正

user: user-3
content: 先贴代码  #include <stdio.h> #include <math.h>  int main () {   double a, b, c, p, s;   while(1){ 	printf("input edges of a triangle: "); 	scanf("%lf%lf%lf", &a, &b, &c); 	if((a + b) > c && (a + c) > b && (b + c) > a){ 		break; 	}else{ 		printf("%.2lf, %.2lf, %.2lf cannot construct a triangle!!\n", a, b, c); 	}   }   p = (a + b + c) / 2;   s = sqrt(p * (p - a) * (p - b) * (p - c));   printf("the area of the triangle is %.2lf.\n", s);   return 0; }  以上代码在VS2010 64位亲测可用。  楼主代码主要问题： 1. double类型在scanf和printf函数中都要用%lf； 2. 判断条件的“两边之差小于第三边”需加绝对值，或者干脆判断三次“两边之和大于第三边”； 3. if条件之后至main结束前加{ }， 不然条件不成立的情况下p无赋值，s计算会错乱。     正确的逻辑应该是条件不成立什么也不做。

user: user-4
content: 引用 9 楼 pengqihang1009 的回复:把double改成float或许管用。把输入输出的格式字符串也改成%f

user: user-4
content: 把double改成float或许管用。

user: user-5
content: 三角形任意两边之和大于第三遍，中间判断用&&

user: user-6
content: 输入那里 应该为%lf

user: user-7
content: 引用 5 楼 yaoyao_xin 的回复:[quote=引用 2 楼 u013491662 的回复:] 对于double型变量 格式声明要用%lf  #include "stdio.h" #include "math.h" main() { 	double a, b, c, p, s; 	scanf("%lf%lf%lf", &a, &b, &c); 	if (((a + b>c) && (a - b<c)) || ((a + c>b) && (a - c<b)) || ((b + c>a) && (b - c<a))) 		p = (a + b + c) / 2; 	s = sqrt(p*(p - a)*(p - b)*(p - c)); 	printf("三角形面积=%lf\n", s); } 还是不对啊 输出0.000000[/quote]  把lf改成f

user: user-0
content: 引用 2 楼 u013491662 的回复:对于double型变量 格式声明要用%lf  #include "stdio.h" #include "math.h" main() { 	double a, b, c, p, s; 	scanf("%lf%lf%lf", &a, &b, &c); 	if (((a + b>c) && (a - b<c)) || ((a + c>b) && (a - c<b)) || ((b + c>a) && (b - c<a))) 		p = (a + b + c) / 2; 	s = sqrt(p*(p - a)*(p - b)*(p - c)); 	printf("三角形面积=%lf\n", s); } 还是不对啊 输出0.000000

user: user-8
content: 对于printf，最好不要用%lf  严格地讲，%lf在printf下是未定义的，但是很多系统可能会接受它。要确保可移植性，就要坚持使用%f

user: user-9
content: 输出的时候。应用%f。因为c语言里面。浮点数和整型数在内存上的储存方式不同。如果控制符不对应就会输出0；  （一定要用对应的控制符输出对应类型的数据）

user: user-10
content: 对于double型变量 格式声明要用%lf  #include "stdio.h" #include "math.h" main() { 	double a, b, c, p, s; 	scanf("%lf%lf%lf", &a, &b, &c); 	if (((a + b>c) && (a - b<c)) || ((a + c>b) && (a - c<b)) || ((b + c>a) && (b - c<a))) 		p = (a + b + c) / 2; 	s = sqrt(p*(p - a)*(p - b)*(p - c)); 	printf("三角形面积=%lf\n", s); }

user: user-8
content: double a,b,c,p,s; ----> 变量是双浮点型 %d－－－－》用于int  #include <stdio.h> #include <math.h> int main(void) {    double a,b,c,p,s; scanf("%lf%lf%lf",&a,&b,&c);     if (((a+b>c)&&(a-b<c))||((a+c>b)&&(a-c<b))||((b+c>a)&&(b-c<a))) p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("三角形面积=%f\n",s);    return 0; }