Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 字符串逆序输出的问题

回复:
user: user-1
content: 如果是不考虑代码效率的话，你可以先用一个数组把字符串保存下来，当遇见（时就做个标记，当遇见）时就反转，这样子思路很简单。堆栈的思想。 当追求效率的时候，你可以去查阅ACM的一些题解，会有详细说明的。

user: user-2
content: 引用 6 楼 u013163178 的回复:[quote=引用 4 楼 zhangxiangDavaid 的回复:] 仅供参考：  int main(void)//40 { 	char str[] = "123(456(789)123(456)789)123"; 	cout << str << endl; 	stack<int> sta; 	int i = 0; 	while (true) 	{ 		if ('\0' == str[i]) break; 		if (sta.empty() || '(' == str[i]) sta.push(i); 		else if (')' == str[i]) 		{ 			reverse(str + sta.top() + 1, str + i); 			sta.pop(); 		} 		i++; 	} 	cout << str << endl;  	return 0; } //123(456(789)123(456)789)123 //123(987)456(321)789(654)123  如果这样呢 asd(sdfsdf(sdfd),你的右括号和哪一个匹配呢[/quote]  这样是非法输入！

user: user-3
content: 我这个版本的bug很多，很多情况没考虑 #include <stack> #include <cstdio> #include <cstring> using namespace std;  void foo(char *str) { 	stack<char> st; 	int len = strlen(str);  	int state = -1; 	for(int i = 0 ; i < len ; ++i) 	{ 		switch(str[i]) 		{ 			case '(': 				state = 0; 				break; 			case ')': 				state = 1; 				break; 			default : 				if(state == 0) 				{ 					st.push(str[i]); 				} 				else if(state == 1) 				{ 				    putc('(' , stdout); 					while(!st.empty()) 					{ 						char top = st.top(); 						putc(top , stdout); 						st.pop(); 					} 					putc(')' , stdout); 					state = 2; 				} 				else 					putc(str[i] , stdout); 				break; 		} 	} }   int  main() { 	char buffer[256]; 	fgets(buffer , 256 , stdin); 	foo(buffer); 	return 0; }

user: user-3
content: 引用 4 楼 zhangxiangDavaid 的回复:仅供参考：  int main(void)//40 { 	char str[] = "123(456(789)123(456)789)123"; 	cout << str << endl; 	stack<int> sta; 	int i = 0; 	while (true) 	{ 		if ('\0' == str[i]) break; 		if (sta.empty() || '(' == str[i]) sta.push(i); 		else if (')' == str[i]) 		{ 			reverse(str + sta.top() + 1, str + i); 			sta.pop(); 		} 		i++; 	} 	cout << str << endl;  	return 0; } //123(456(789)123(456)789)123 //123(987)456(321)789(654)123  如果这样呢 asd(sdfsdf(sdfd),你的右括号和哪一个匹配呢

user: user-4
content: 逆序处理通常都放栈里， 多重处理的结果看题目要求了。

user: user-2
content: 仅供参考：  int main(void)//40 { 	char str[] = "123(456(789)123(456)789)123"; 	cout << str << endl; 	stack<int> sta; 	int i = 0; 	while (true) 	{ 		if ('\0' == str[i]) break; 		if (sta.empty() || '(' == str[i]) sta.push(i); 		else if (')' == str[i]) 		{ 			reverse(str + sta.top() + 1, str + i); 			sta.pop(); 		} 		i++; 	} 	cout << str << endl;  	return 0; } //123(456(789)123(456)789)123 //123(987)456(321)789(654)123

user: user-0
content: 引用 4 楼 zhangxiangDavaid 的回复:仅供参考：  int main(void)//40 { 	char str[] = "123(456(789)123(456)789)123"; 	cout << str << endl; 	stack<int> sta; 	int i = 0; 	while (true) 	{ 		if ('\0' == str[i]) break; 		if (sta.empty() || '(' == str[i]) sta.push(i); 		else if (')' == str[i]) 		{ 			reverse(str + sta.top() + 1, str + i); 			sta.pop(); 		} 		i++; 	} 	cout << str << endl;  	return 0; } //123(456(789)123(456)789)123 //123(987)456(321)789(654)123   你的回答帮到我了，其实面试题是不用考虑括号嵌套。

user: user-5
content: 弄个标记记号就行了吧

user: user-6
content: 我想知道括号里套括号的怎么处理？比如： 123(456(789)123(456)789)123 是 123(456(789)123(456)789)123 还是 123(456(789)123(456)789)123
user-0 提问: 卡尔曼滤波C\C++语言程序

回复:
user: user-1
content: 看一看，最近也开始做了

user: user-2
content: 楼主你好，我现在也在学习EKF，想用在毫米波雷达目标跟踪中，希望能够交流一下。390028260谢谢

user: user-3
content: 我也在做77G的毫米波雷达数据处理，Delphi ESR有时间交流一下，QQ：723616221

user: user-4
content: http://www.baigoogledu.com/s.php?hl=zh-CN&q=%BF%A8%B6%FB%C2%FC%C2%CB%B2%A8+%D4%B4%B4%FA%C2%EB

user: user-5
content: 你需要www.opencv.org
user-0 提问: 请问这个问题怎么解决？求大神帮忙

回复:
user: user-0
content: 这个就是模拟三维浓度场中的一部分，这个地方要的是A，这个A根本输不出来，我就是把运行了a的程序全都拿出来了，别的地方跟着地方没有关系。

user: user-1
content: 问题不清楚，什么二维三维？ 程序也没输出
user-0 提问: 一个简单的c程序   上面的指针传参问题

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

user: user-0
content: 恩。我试了一下，你的是对的。谢谢你！那如果我想用指针数组该咋办？

user: user-2
content: 指针和数组：http://blog.csdn.net/zhangxiangdavaid/article/details/38085743

user: user-3
content: 这不是函数传参的问题， 而是你把 结构体数组 定义为了 结构体指针数组，指针数组有另外的用法。 该3个地方 1：struct STU students[N]; 2：case 1:input(students);break; 3：case 2:output(students);break;
user-0 提问: 数据结构的一问题

回复:
user: user-1
content: 解决了？解贴吧！

user: user-2
content: 约瑟夫问题的多种求解： http://blog.csdn.net/zhangxiangdavaid/article/details/25109205

user: user-0
content: 本人已经解决

user: user-0
content: 用c实现、求解啊
user-0 提问: VS2013里面无法输出字符串，程序见内容

回复:
user: user-1
content: 跟着提示输入，没有问题，当然，字符串不要太长。

user: user-2
content: scanf_s("%s",name,20);

user: user-3
content: name里有东西吗？ 读入可能有问题

user: user-4
content: 1.程序编译完成后,进入dos目录执行程序就可以了 2.VS2013编辑器中显示信息使用TRACE函数
user-0 提问: 多目录Makefile的编写，请教大神，本人小白

回复:
user: user-1
content: 参阅GNUmake

user: user-1
content: 主目录：main.c  common network include                   common目录：common.c common.h                   network目录：socket.c socket.h                   include目录： define.h 简单的：   main: main.o common.o socket.o          cc -o main main.o common.o socket.o main.o:          cc -c main.c ./include/define.h common.o:          cc -c ./common/common.c ./common/.h socket.o:          cc -c ./socket/socket.c  ./socket/socket.h

user: user-2
content: 主目录的makefile cd进各子目录，用make调用各子目录的makefile

user: user-3
content: 如果仅仅解决一下问题的话，不用那么麻烦，建议楼主直接在linux图形界面下，用eclipse+cdt配置。自动生成makefile。 PS：最好还是学习一下makefile语法较好

user: user-4
content: 搜“跟我一起写makefile”
user-0 提问: C语言求两个方位角，角度的平均值

回复:
user: user-1
content: 引用 8 楼 memecaoyu 的回复:[quote=引用 3 楼 u014444402 的回复:] 这不就是向量的相加？？  却是是两个向量相加， 如果用向量的算法就比较复杂了 需要求Sin和Cos的和 然后arctan,然后判断象限[/quote]  归一化之后取平均值不行吗？

user: user-0
content: 引用 3 楼 u014444402 的回复:这不就是向量的相加？？  却是是两个向量相加， 如果用向量的算法就比较复杂了 需要求Sin和Cos的和 然后arctan,然后判断象限

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:个人意见，此例不应取平均值；而应取中值。  嗯，对，应该是去中间值

user: user-0
content: 引用 1 楼 super_miker 的回复:为何用宏？内联函数感觉更好  //type为角度的类型 inline type avg(type a, type b){    type tmp = (a + b) / 2;    if ((a > b ? a - b : b - a) > 180)       if (tmp >= 180) tmp -= 180; else tmp += 180;    return tmp; }  顺便0跟180的平均值应该是多少？  内联确实要好很多，嵌入式系统里面用内联，感觉会受到编译器的限制 0和180度的平均应该是按照角度的变化趋势来看。 或者如果发生这么大的角度变化，这个数据应该设置成为不可信的数据

user: user-2
content: 那请问0°与180°平均是90°还是270°？

user: user-3
content: 这不就是向量的相加？？

user: user-4
content: 个人意见，此例不应取平均值；而应取中值。

user: user-1
content: 为何用宏？内联函数感觉更好  //type为角度的类型 inline type avg(type a, type b){    type tmp = (a + b) / 2;    if ((a > b ? a - b : b - a) > 180)       if (tmp >= 180) tmp -= 180; else tmp += 180;    return tmp; }  顺便0跟180的平均值应该是多少？

user: user-4
content: 引用 4 楼 mewiteor 的回复:那请问0°与180°平均是90°还是270°？ 那请问北与南平均是东还是西？ 我觉得是上！
user-0 提问: 请看代码。潜伏几个月，问一个c语言问题，请大神进来!!!

回复:
user: user-1
content: 唉  正学JAVA    怀恋当年的C时代

user: user-2
content: 指针那一方面的,大体意思就是四个等价

user: user-3
content: A{B] *(A+B) *(B+A) B[A] 以上四行等价。

user: user-4
content: 这个函数是用来打印数组的，   //pArr[2] == *(pArr+2) == *(a+2) == a[2]  这段代码的意思是，pArr[2]和*(pArr+2)表达同样的意思，只是两种写法。后面的*(a+2)==a[2]同理。

user: user-5
content: 这不是注释掉的语句吗

user: user-6
content: 首先，编译器对方括号运算符 x [ y ] 的处理是转换成 * ( x + y )，两者表达效果自然是等价的。由于加法满足交换律，顺序颠倒也没问题。 其次，void OutArr(int * pArr, int len)这个函数在main里面调用的语句是OutArr(a, 5); 实参a传递给形参pArr，所以pArr的值等于a，因此在这个函数里： pArr[2] 等价于*(pArr+2)等价于*(a+2)等价于a[2]。

user: user-7
content: static int x = 1;  static void demo (int a [static 5]) {     static int y = 0;     /* …… */ }

user: user-8
content: int a[5] = {1,2,3,4,5}; int * pArr = a; // int * pArr = &a[0]; 即: *pArr = a[0] = 1; pArr[2] == *(pArr+2) == *(a+2) == a[2] = 3;

user: user-9
content: 大概就是这么个意思。不是有效代码。  如果当成有效代码。大致相当于一行"true"会直接报错。
user-0 提问: 打印pthread_join(pthread_t thread, void** retval)的retval值

回复:
user: user-1
content: 引用 5 楼 spider119 的回复:[quote=引用 3 楼 wanguser-4 的回复:] 这个取决于你的线程函数返回什么样的值，如果返回int *，那你这么用是对的：LOGD("Read thread exit code = %d\n",*((int*)err_code));，否则是错的，如果返回的是int值，比如-1，那你把-1转换成int *，再对这个-1指针解引用，肯定coredump。  返回值是int， 但是这个err_code是 void* 类型啊， 不是应该先转（int*）err_code ， 再解引用取值么？[/quote]  我也是这里不懂，有哪位大侠能指导指导吗？

user: user-2
content: 《牛肉干》 C语言上机课，某女同学偷偷吃起牛肉干。 有一粒牛肉干掉到了键盘上，卡在7和8键之间。 女同学就在键盘上抠啊、抠啊、抠啊…… 程序里一行代码变成这个样子： int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a; 后来的结局是 ————程序顺利通过编译，运行结果正确！

user: user-2
content: ***(int ****)err_code

user: user-0
content: 引用 3 楼 wanguser-4 的回复:这个取决于你的线程函数返回什么样的值，如果返回int *，那你这么用是对的：LOGD("Read thread exit code = %d\n",*((int*)err_code));，否则是错的，如果返回的是int值，比如-1，那你把-1转换成int *，再对这个-1指针解引用，肯定coredump。  返回值是int， 但是这个err_code是 void* 类型啊， 不是应该先转（int*）err_code ， 再解引用取值么？

user: user-3
content: 引用 2 楼 spider119 的回复:[quote=引用 1 楼 ren0065 的回复:] 逻辑是一样一样的  逻辑如何一样？ [/quote] 都是将返回值作为整型打印出来.

user: user-4
content: 这个取决于你的线程函数返回什么样的值，如果返回int *，那你这么用是对的：LOGD("Read thread exit code = %d\n",*((int*)err_code));，否则是错的，如果返回的是int值，比如-1，那你把-1转换成int *，再对这个-1指针解引用，肯定coredump。

user: user-0
content: 引用 1 楼 ren0065 的回复:逻辑是一样一样的  逻辑如何一样？

user: user-3
content: 逻辑是一样一样的
user-0 提问: 怎样递归实现一元钱的兑换方案

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:仅供参考：//求从Begin到End的正整数中挑出任意个数使其总和为Sum的所有方案 #include <stdio.h> int Begin,End,Sum; int j; int o[1000]; long n; void combsum(int b,int e,int s,int d) {     int i;      if (e>s) e=s;     for (i=e;i>=b;i--) {         if ((i+b)*(i-b+1)/2<s) break;         o[d]=i;         if (s-i<=0) {             n++;             printf("%8ld:",n);             for (j=0;j<=d;j++) printf("%d ",o[j]);             printf("\n");         } else {             if (d+1<1000) combsum(b,i-1,s-i,d+1);             else {                 printf("Error:Too deep.\n");                 return;             }         }     } } int main() {     printf("Input Begin,End,Sum:");fflush(stdout);     scanf("%d,%d,%d",&Begin,&End,&Sum);     n=0L;     combsum(Begin,End,Sum,0);     printf("Total:%ld\n",n);     return 0; }  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出 #include <stdio.h> int list[256]; void split(int n , int m = 0) { 	int i; 	if(n == 0) 	{ 		for(i = 0 ; i < m ; ++i) 			printf("%d " ,list[i]);  		printf("\n"); 		return ; 	}  	for(i = n ; i > 0 ; --i) 	{ 		if(m == 0 || i <= list[m-1]) 		{ 			list[m] = i; 			split(n-i , m+1); 		} 	} }  int main() { 	int n; 	while(~scanf("%d" , &n)) 	{ 		split(n); 	} 	return 0; }

user: user-2
content: 没看明白题目意思。

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:比一元小的钱有哪些？  1角 2角 5角

user: user-3
content: 您连问题是啥都没说清楚……怕了你了……

user: user-4
content: 比一元小的钱有哪些？

user: user-5
content: 仅供参考：//求从Begin到End的正整数中挑出任意个数使其总和为Sum的所有方案 #include <stdio.h> int Begin,End,Sum; int j; int o[1000]; long n; void combsum(int b,int e,int s,int d) {     int i;      if (e>s) e=s;     for (i=e;i>=b;i--) {         if ((i+b)*(i-b+1)/2<s) break;         o[d]=i;         if (s-i<=0) {             n++;             printf("%8ld:",n);             for (j=0;j<=d;j++) printf("%d ",o[j]);             printf("\n");         } else {             if (d+1<1000) combsum(b,i-1,s-i,d+1);             else {                 printf("Error:Too deep.\n");                 return;             }         }     } } int main() {     printf("Input Begin,End,Sum:");fflush(stdout);     scanf("%d,%d,%d",&Begin,&End,&Sum);     n=0L;     combsum(Begin,End,Sum,0);     printf("Total:%ld\n",n);     return 0; }  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
user-0 提问: 新人求助，怎样读取一个大小不确定的结构体数据

回复:
user: user-1
content: 结构体大小肯定是定的，就算用了UNION，写个CASE也就几种情况。要什么数据就访问相应的成员就完了。结构体大小还能变，除非你在堆中分配，那么你怎么分配就怎么读，一个小小的结构体哪来什么变化

user: user-2
content: WORD2SHORT	stProgNo[ MAX_NO_OF_FAVOR ] = {0} for(int i=0;i<100;++i) {     if(stProgNo[i] != 0)     {         //ProgNo_Valid_No有效长度为i+1     } } 这种原理？

user: user-3
content: 解决方法。 实话讲，我不知道sdx文件有什么编辑规范，我这里只能认为是一个txt文本。文本中存着该结构体，所有数据有特定分隔符，比如空格、“，”等。  我的解决方法是，倒着读，先读到长度，再确定数组。  ===================================================================================== 如果sdx有什么其他规范，不想倒着读的话，我的一个思路是： WORD2SHORT的一个对象占32位，sNoOfTVFavor占16位，以此做判断依据，一直读结构体，直到读到一个16位的数为止。

user: user-3
content: 为了大家能看的明白。我重新整理下LZ的问题：  背景： 1、有结构体FAVOR_LIST，具体看LZ提问。 2、该结构体有成员WORD2SHORT	stProgNo[ MAX_NO_OF_FAVOR ]，该成员大小确定，为100！！！！ 3、stProgNo成员的有效长度ProgNo_Valid_No不确定，即100个stProgNo中，可能只有前30个值有效，后70个为空。 4、上面的有效长度ProgNo_Valid_No由结构体FAVOR_LIST的两个成员决定：ProgNo_Valid_No = sNoOfTVFavor+sNoOfRadioFavor  问题： 有一个sdx文件，按照该结构体的格式存放数据，由于sNoOfTVFavor、sNoOfRadioFavor未知，导致stProgNo长度未知，进而导致无法确定一次读取该结构体的大小。

user: user-4
content: 引用 6 楼 OMG_style2012 的回复:MAX_NO_OF_FAVOR是一个宏定义，是一个常数100，是确定的，问题是这个数组的是不确定的  既然宏值确定，整个结构体就确定，只是你填回数据的时候，数组有些单元是空的

user: user-5
content: 结构体内存对齐，就可以用sizeof了 使用#pragma pack(1) 按字节对齐内存，不同的编译器可能使用的方法不同

user: user-6
content: 引用 22 楼 liukeyong2110 的回复:问问题需要有个规范 你没描述这个结构体的具体定义：MAX_NO_OF_FAVOR 是宏，又是sNoOfTVFavor+sNoOfRadioFavor。在存之前，这个结构体时怎么定义和使用的。 你没描述清楚这个结构体的存储形式：存储方式，存储算法或代码。 你没描述清楚这个文件中结构体的存储方式：文件中就是有几个结构体，这很不明确，它们是一起存的？还是分开存的？总之，问题描述的太玄乎了

user: user-7
content: 用事实说话，焦点访谈。 用代码说话，真程序员。

user: user-8
content: 设计协议的时候遵守TLV(type length value)原则。

user: user-9
content: 写数据的程序太不负责了，应该在写的时候做好序列化，读的时候反序列化，这样才能保证数据的完整性。

user: user-10
content: 让结构体确定好吗，这个是最终办法

user: user-11
content: 建议LZ再好好学学C语言里关于数组的部分, 注意别看谭浩强

user: user-12
content: WORD2SHORT stProgNo[ MAX_NO_OF_FAVOR ]这个数据大小是确定的。 整个结构体所占用的空间字节数是确定的。 你说的不确定的意思应该是说数组中实际可能存的有效的数据的个数不确定。

user: user-7
content: 楼主不妨举两个实际用到的具体的该结构体数据，且其大小不一样，让我们大家来看看。

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

user: user-7
content: 引用 1 楼 zhao4zhong1 的回复:VS IDE中，在不明白的符号上点鼠标右键，选转到定义。 引用 2 楼 OMG_style2012 的回复:看清楚我问的问题好么 VS IDE中，在不明白的符号MAX_NO_OF_FAVOR和WORD2SHORT上点鼠标右键，选转到定义。

user: user-13
content: 嗯，不是怎么明白，学习下。晚安

user: user-14
content: 楼主问题没有描述清楚吧 MAX_NO_OF_FAVOR既然是宏定义那么stProgNo的大小也就固定了，结构体大小就已经定了，按照结构体的字节读取就行了。楼主说“问题是这个数组的是不确定的”这不是相矛盾了？ 除非是文件中结构体存储时MAX_NO_OF_FAVOR并不是100而可能是其他值

user: user-0
content: WORD2SHORT	stProgNo[ MAX_NO_OF_FAVOR ];这个数组的实际大小是不确定的

user: user-0
content: MAX_NO_OF_FAVOR是一个宏定义，是一个常数100，是确定的，问题是这个数组的是不确定的
user-0 提问: 求各位朋友帮忙纠错！！！

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-2
content: *((double*)Pgr+128*o+ww)=j;  你输入的已经是一个指针的指针（即数组的数组），而不是一个单纯的数组。 用Pgr[o][ww]=j就好。。。

user: user-0
content: 引用 1 楼 user-3 的回复:少了一种边界情况完全不明白- -，能否把改过的代码贴一下？不胜感激

user: user-3
content: 少了一种边界情况
user-0 提问: C++和C语言在应用领域上有哪些不同？

回复:
user: user-1
content: 引用 17 楼 vnvlyp 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写！” 这是个什么道理。。能不能用C写，需要多少行代码和用C++去写有什么关系？[/quote] 因为为了显摆自己高大上，干这种傻事的码农多了去了。 但他们不知道自己违背了C++语言诞生的初衷。

user: user-2
content: 引用 9 楼 zhao4zhong1 的回复:记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写！” 这是个什么道理。。能不能用C写，需要多少行代码和用C++去写有什么关系？

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写！”  C语言和C++应该都是对汇编语言做了翻译吧，为什么效率上还有区别呢？ 因为编译器技术更高明还是有些库只有C语言有而C++没有。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:Linux不是大型应用程序！？  我说的应用程序指的是在操作系统上的程序，例如以前的VC6.0，现在点奈特和JAVA开发出来的东西。 开发操作系统用的工具可能并不能或者不适合用来开发桌面程序。 不过我想问下Linux的界面是用什么写的？这套东西有没有应用到开发桌面程序上？

user: user-3
content: 引用 10 楼 Raffin 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] Linux不是大型应用程序！？  我说的应用程序指的是在操作系统上的程序，例如以前的VC6.0，现在点奈特和JAVA开发出来的东西。 开发操作系统用的工具可能并不能或者不适合用来开发桌面程序。 不过我想问下Linux的界面是用什么写的？这套东西有没有应用到开发桌面程序上？[/quote] gnome，基于GDK，c语言 KDE，基于Qt，C++语言

user: user-1
content: 引用 11 楼 Raffin 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写！”  C语言和C++应该都是对汇编语言做了翻译吧，为什么效率上还有区别呢？ 因为编译器技术更高明还是有些库只有C语言有而C++没有。[/quote] 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-1
content: Wolfenstein 3D Doom Quake Photo Shop 1.0 …… 不是大型应用程序？！

user: user-4
content: 不能说C++不能开发驱动，起码有些系统上是可以的。

user: user-1
content: 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写！”

user: user-1
content: Linux不是大型应用程序！？

user: user-5
content: C本身的实现 依赖操作系统较少，所以开发操作系统一类程序时会偏爱C...（由汇编插写）

user: user-6
content: 我所知道的： 类unix系统(linux/freebsd...)都是c开发的,够大了吧， 因此c可以开发大型系统。 驱动都是c加汇编开发的 大部分服务器程序c 网络核心设备（路由器，交换机，防火墙）大部分代码c开发的，用户界面可能用其他语言。 大部分的嵌入式系统c开发的。

user: user-7
content: 一学姐（研究生）的毕设，做一个智能路灯控制系统。上位机用c++开发，下位机用c开发

user: user-8
content: c语言在底层开发用的比较多，我之前参与的嵌入式项目底端程序大部分都是用c语言（少量的汇编）； 个人觉得在c++高端程序用的比较多，我之前参与嵌入式项目高端程序一般用c#、c++实现。

user: user-3
content: 服务器都是UNIX-like系统！

user: user-0
content: 现在web应用领域基本java一家独大 c++，据我所知也没web服务器程序 那c++开发驱动是因为没有开发环境比如sdk的关系还是本身不适合开发驱动？

user: user-9
content: C的代码效率最高。当然是理论上的，如果你非要拿一个3三流C代码和一个一流Java代码比，我也没办法。 这个效率指的是两方面：1、代码执行效率，就是时间，相同功能，C的可跑的更快；2、编译效率，转成机器码，C的更简短。  但是C的开发效率比较低，差不多是除汇编外最低的了吧。由于代码效率的追求，导致C无法形成很统一的成熟开发框架。  以上特性决定了：C在追求效率的开发中占主流，比如驱动类、MCU开发等；C++牺牲了一定效率，在大型应用程序开发上占主流。  当然都是相对的。C的竞争对手只有汇编，C++则有JAVA、IOS、OC……一大把。
user-0 提问: C 语言中的代码

回复:
user: user-1
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-2
content: 不会写的话就先看别人的代码，或者把别人的代码一行一行敲进去，时间长了，会有所悟！

user: user-3
content: 凡事循序渐进，慢慢有感觉。

user: user-0
content: 这个练了第一遍，有用？？

user: user-0
content: #include <stdio.h> int main() { printf("hello world"); rreturn 0; }

user: user-4
content: 引用 11 楼 u013163178 的回复:#include <stdio.h>  int main() {     printf("hello zhao4zhong1\n");     return 0; } 在你IED里面敲十遍。 IDE,纠正楼上

user: user-4
content: #include <stdio.h>  int main() {     printf("hello zhao4zhong1\n");     return 0; } 在你IED里面敲十遍。

user: user-5
content: 引用 3 楼 zhao4zhong1 的回复:先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm  对初学者建议用dev-c++，WIN-TC太老

user: user-6
content: 引用 3 楼 zhao4zhong1 的回复:先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm+1，再找几本c相关的书籍看看

user: user-7
content: 引用 8 楼 yabyijue 的回复:就像3楼说的那样，不知道去引入变量  根据变量功能、类型和作用域（生存期）

user: user-0
content: 就像3楼说的那样，不知道去引入变量

user: user-8
content: 复制，粘贴。

user: user-9
content: 这问题，让我不知道怎么回答 LZ想问怎么写C程序？ 熟悉编译环境，熟悉文本编辑器或IDE，找点C示例代码，敲进去，编译，运行，修改，再编译再运行，如此循环加深理解，提升编程

user: user-0
content: 就比如说 ：编写程序完成单处理机系统中的进程调度  这个如何去写？会用到哪些

user: user-10
content: 楼主是想说变量名和函数名这样的不知道怎么命名吗

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

user: user-11
content: 英文还有很多种吗？

user: user-12
content: 楼主这问得我不知所措呀。能详细点吗？
user-0 提问: 本人新手，求教蓝桥杯比赛中的一个关于c的代码填空题

回复:
user: user-1
content: 0,"",s,0,""

user: user-2
content: buf=s;  //这个不是有问题吗？   int main(void) { 	char *s = "abcde1234"; 	printf("%*s%s%*s", 2, "| ", s, 2, " |"); 	return 0; } //| abcde1234 |

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复: buf=s;  //这个不是有问题吗？   int main(void) { 	char *s = "abcde1234"; 	printf("%*s%s%*s", 2, "| ", s, 2, " |"); 	return 0; } //| abcde1234 |   那个的确有问题，我的问题也解决了，谢谢！
user-0 提问: 一个老师出的题，问下思路：用c在裸机上写一个调度程序的框架，半分钟测一次温度，一分钟测一次压力，随按随测PM（优先最高）

回复:
user: user-1
content: 写一个框架而已。 首先没有ＯＳ，time,difftime就用不了。所以你的框架就必须提供一个时间接口，随便取个名字就行了，例如GetTime..,又不要你真正的实现。 ＬＺ的写法是一个很常见的裸机程序写法，目前的单片机很多都是这种写法 即 while ( 1 ){  ... }

user: user-2
content: 没有delay或Sleep，你CPU负荷会接近100%的。

user: user-2
content: 知道X86裸机带BIOS不？ 知道带BIOS的机器INT8每1/18.2秒被调用一次不？

user: user-0
content: 那个#include <Windows.h>可以无视掉。。。
user-0 提问: 求大家帮忙纠错

回复:
user: user-0
content: 引用 14 楼 super_miker 的回复: -              printf("lf ",Pgr[i][j]); +              printf("%lf ", Pgr[i][j]); 我勒个去原来错在这了，真想撞墙

user: user-1
content: -              printf("lf ",Pgr[i][j]); +              printf("%lf ", Pgr[i][j]);

user: user-0
content: 引用 12 楼 kite289 的回复:代码已经贴了啊，你的malloc是错的。应该用下面这种。 double *Pgr = (double *)malloc(sizeof(double)*1280*128);麻烦亲按照一楼的模式全贴出来给我看一眼呗~主要是printf那里不太懂咋弄，试了好久没试出来

user: user-2
content: 代码已经贴了啊，你的malloc是错的。应该用下面这种。 double *Pgr = (double *)malloc(sizeof(double)*1280*128);

user: user-0
content: 引用 9 楼 kite289 的回复:楼主，你试试和他用同样的malloc方法一次申请。。你的申请方式不对。别总说半截话啊，把代码贴出来啊亲~不懂啊~亲

user: user-0
content: 引用 7 楼 kite289 的回复:[quote=引用 6 楼 user-3 的回复:] [quote=引用 3 楼 qq_15683855 的回复:] [quote=引用 1 楼 user-3 的回复:] 把下面这句话放到main的外面，定义成全局变量。 double Pgr[1280][128]; 如果让用全局变量我也就不用在这发帖了- -[/quote] 那你就不会这样： double *Pgr = (double *)malloc(sizeof(double)*1280*128);[/quote]   你居然是对的， 我刚替楼主试了一下跑通了， 莫非堆栈内存不足引起溢出？ windows XP下内存是几K？    另外，修改上面这个错误后。 *((double*)Pgr+128*o+ww)=j;会数组越界， o值很大。[/quote]跑通了是怎么回事？修改了什么错误？把代码贴出来呗，谢啦

user: user-2
content: 楼主，你试试和他用同样的malloc方法一次申请。。你的申请方式不对。

user: user-0
content: 引用 6 楼 user-3 的回复:[quote=引用 3 楼 qq_15683855 的回复:] [quote=引用 1 楼 user-3 的回复:] 把下面这句话放到main的外面，定义成全局变量。 double Pgr[1280][128]; 如果让用全局变量我也就不用在这发帖了- -[/quote] 那你就不会这样： double *Pgr = (double *)malloc(sizeof(double)*1280*128);[/quote]动态数组吗？原来用的就是这个，只不过是这样的 	Pgr=(double**)malloc(1280*sizeof(double*)); //存储能量数据  	for(i=0;i<k;i++)  	{  		Pgr[i]=(double*)malloc(128*sizeof(double));  	} 最后出来的错误都一样，我就直接用静态的了

user: user-2
content: 引用 6 楼 user-3 的回复:[quote=引用 3 楼 qq_15683855 的回复:] [quote=引用 1 楼 user-3 的回复:] 把下面这句话放到main的外面，定义成全局变量。 double Pgr[1280][128]; 如果让用全局变量我也就不用在这发帖了- -[/quote] 那你就不会这样： double *Pgr = (double *)malloc(sizeof(double)*1280*128);[/quote]   你居然是对的， 我刚替楼主试了一下跑通了， 莫非堆栈内存不足引起溢出？ windows XP下内存是几K？    另外，修改上面这个错误后。 *((double*)Pgr+128*o+ww)=j;会数组越界， o值很大。

user: user-3
content: 引用 3 楼 qq_15683855 的回复:[quote=引用 1 楼 user-3 的回复:] 把下面这句话放到main的外面，定义成全局变量。 double Pgr[1280][128]; 如果让用全局变量我也就不用在这发帖了- -[/quote] 那你就不会这样： double *Pgr = (double *)malloc(sizeof(double)*1280*128);

user: user-0
content: 引用 2 楼 kite289 的回复:double a[100]和double *p是可以相互转换。  但double Pgr[1280][128]  和 double **Pgr 不是同一个类型不能相互转换。  在传参的时候，需要直接用数组而非指针传递这个是可以的，我以前用过，只是没发生这种情况 参考http://blog.csdn.net/haizhongyun/article/details/7729552 这里面有介绍

user: user-2
content: 楼主百度一下““二维数组和二维指针””  这两个不是同一个东西。  有篇博客可以参考。 http://www.cnblogs.com/stoneJin/archive/2011/09/21/2184211.html

user: user-0
content: 引用 1 楼 user-3 的回复:把下面这句话放到main的外面，定义成全局变量。 double Pgr[1280][128]; 如果让用全局变量我也就不用在这发帖了- -

user: user-2
content: double a[100]和double *p是可以相互转换。  但double Pgr[1280][128]  和 double **Pgr 不是同一个类型不能相互转换。  在传参的时候，需要直接用数组而非指针传递

user: user-3
content: 把下面这句话放到main的外面，定义成全局变量。 double Pgr[1280][128];
user-0 提问: C语言读取数据 出错

回复:
user: user-1
content: fgets sscanf

user: user-2
content: 引用 3 楼 maychard1121 的回复:#include<stdio.h>  #define item 1000 main() { 	FILE *fpt; 	float num[item][10], temp[1000]; 	int i=0, j;  	fpt = fopen("E:800.txt","r"); 	while(fscanf(fpt, "%[^' '] ", num[i]) != EOF) 	{ 		fscanf(fpt, "%[^\n]\n", temp); 		i++; 	}  	for(j=0; j<i; j++) 		printf("[%d] %s\n", j, num[j]); 	fclose(fpt); } 报错的 #include<stdio.h>  #define item 1000 main() { 	FILE *fpt;     // float num[item][10], temp[1000]; 	float num[item], temp; 	int i=0, j;  	fpt = fopen("E:800.txt","r");     // while(fscanf(fpt, "%[^' '] ", num[i]) != EOF) 	while(fscanf(fpt, "%f", &num[i]) != EOF) 	{         // fscanf(fpt, "%[^\n]\n", temp); 		fscanf(fpt, "%f", &temp); 		i++; 	}  	for(j=0; j<i; j++) 		// printf("[%d] %s\n", j, num[j]);         printf("[%d] %f\n", j, num[j]); 	fclose(fpt); }

user: user-3
content: 引用 4 楼 zhangxiangDavaid 的回复:仅供参考：  #include<stdio.h>  int main() { 	FILE *f; 	if (NULL == (f = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Can not open file : %s\n", "1.txt"); 		return 0; 	} 	int i, j; 	i = 0; 	float data1[100], data2[100]; 	while (!feof(f)) 	{ 		fscanf(f, "%f%f\n", data1 + i, data2 + i); 		i++; 		if (i == 100) break; 	}  	for (j = 0; j < i; j++) 		printf("%g %g\n", data1[j], data2[j]); 	fclose(f); 	return 0; } //1.txt //- 0.1 0.123 //- 0.2 0.234 //- 0.3 0.222 //- 0.5 0.333 //- 0.12 0.444  +1，赞一个

user: user-0
content: Unhandled exception at 0x1024300a (msvcr80d.dll) in MITtest1.exe: 0xC0000005: Access violation writing location 0x80000000.  报错呢，请教下

user: user-4
content: 仅供参考：  #include<stdio.h>  int main() { 	FILE *f; 	if (NULL == (f = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Can not open file : %s\n", "1.txt"); 		return 0; 	} 	int i, j; 	i = 0; 	float data1[100], data2[100]; 	while (!feof(f)) 	{ 		fscanf(f, "%f%f\n", data1 + i, data2 + i); 		i++; 		if (i == 100) break; 	}  	for (j = 0; j < i; j++) 		printf("%g %g\n", data1[j], data2[j]); 	fclose(f); 	return 0; } //1.txt //- 0.1 0.123 //- 0.2 0.234 //- 0.3 0.222 //- 0.5 0.333 //- 0.12 0.444

user: user-0
content: #include<stdio.h>   #define item 1000  main() { 	FILE *fpt; 	float num[item][10], temp[1000]; 	int i=0, j;  	fpt = fopen("E:800.txt","r"); 	while(fscanf(fpt, "%[^' '] ", num[i]) != EOF) 	{ 		fscanf(fpt, "%[^\n]\n", temp); 		i++; 	}  	for(j=0; j<i; j++) 		printf("[%d] %s\n", j, num[j]); 	fclose(fpt); } 报错的

user: user-0
content: 是float数据  通过读写一个点一个点的读取第一列的数据，与数据对应的位置  数据和位置都需要 后面有对于这个点的计算的内容

user: user-4
content: 你读入的是整数还是浮点数？
user-0 提问: vs2013 调试C程序内存模型中为什么没有数据？

回复:
user: user-1
content: 你键入地址还没回车或移走输入焦点呢骚年！

user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-2
content: 引用 2 楼 u010244002 的回复:请问一下如何键入？  在内存窗口下，输入地址即可

user: user-0
content: 请问一下如何键入？

user: user-2
content: 设置断点，键入地址，即可
user-0 提问: C语言变参函数实现打印SOCKET接收的数据报文

回复:
user: user-1
content: #include<stdio.h> #include<stdarg.h>  typedef enum { 	DEBUG_INFO, 	DATA_INFO } MyPrintArg;  void MyPrint(MyPrintArg type,const char *format,...) { 	va_list args; 	unsigned char* data; 	int datalen; 	va_start(args,format); 	switch(type) 	{ 		case DEBUG_INFO: 			vprintf(format,args); 			break; 		case DATA_INFO: 			printf("%s",format); 			data=va_arg(args,unsigned char*); 			datalen=va_arg(args,int); 			while(datalen--) 				printf("%02x ",*data++); 			break; 		default: 			break; 	} 	va_end(args); }  int main() { 	unsigned char x[]={1,2,3,4,5,16,32,254,255}; 	int datalen=sizeof x; 	MyPrint(DEBUG_INFO,"size of x is:%d\n",datalen); 	MyPrint(DATA_INFO,"Recv:",x,datalen); 	return 0; }

user: user-0
content: 顶起来  ，没人吗？？？？？？？
user-0 提问: http用GET方法获取重定向网址源码

回复:
user: user-0
content: google浏览器确实屌，可以不用抓包就看交互过程，谢谢。 另外，这个代码你们看着顺眼吗？这个思路没有错，错在代码书写不规范上，搞得我找了好长时间，谢谢各位

user: user-1
content: 说不定要设置User-Agent？

user: user-2
content: 用chrome的审查元素或者wireshark抓交互过程 哪个http头看不懂网上搜就好 学起来很快的

user: user-3
content: 的确302了很多次。 浏览器的话，chrome或者firefox  F12就可以看HTTP交互过程。 你的程序发出去的HTTP请求可以用HttpAnalyzer抓一下包看看就知道了。

user: user-0
content: 引用 1 楼 wanguser-3 的回复:你看看返回的301头部有没有Set-Cookie行，如果有你把Cookie带上试试。 奥，错了，不是301是302。 没有你说的cookie，循环打印出的Location是这样的  ****************************6 jump.taobao.com/jump?target=http%3a%2f%2fdetail.tmall.com%2fitem.htm%3fspm%3da230r.1.14.1.qxtjZ5%26id%3d17200027726%26ad_id%3d%26am_id%3d%26cm_id%3d140105335569ed55e27b%26pm_id%3d%26_u%3damch7mc130a%26abbucket%3d18%26tbpm%3d1   ****************************7 err.taobao.com/error1.html   ****************************8 jump.taobao.com/jump?target=http%3a%2f%2fdetail.tmall.com%2fitem.htm%3fspm%3da230r.1.14.1.qxtjZ5%26id%3d17200027726%26ad_id%3d%26am_id%3d%26cm_id%3d140105335569ed55e27b%26pm_id%3d%26_u%3damch7mc130a%26abbucket%3d18%26tbpm%3d1   ****************************9 err.taobao.com/error1.html  把上面的Location沾到浏览器都能打开想要的网页，不知道浏览器是如何处理的？

user: user-3
content: 你看看返回的301头部有没有Set-Cookie行，如果有你把Cookie带上试试。
user-0 提问: c语言小程序—多文件函数调用

回复:
user: user-1

user: user-2
content: while (*string++ != ENDSTRING); len++;   改为   while (*string++ != ENDSTRING) len++;

user: user-3
content: while(*string++ != ENDSTRING); 去掉

user: user-4
content: 把 while 那行末尾的 ; 删掉。
user-0 提问: （Seciond Edition）附录疑疑惑

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

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

user: user-0
content: 引用 1 楼 ri_aje 的回复:写个小程序看看你的编译器给的是什么值，应该是 -128，因为 0 一般占正整数的坑。 写了的，我输出的-128，书上其他的定义也有问题，INT_MIN,SHORT_MIN,LONG_MIN等。。

user: user-2
content: 写个小程序看看你的编译器给的是什么值，应该是 -128，因为 0 一般占正整数的坑。

user: user-3
content: 引用 4 楼 ri_aje 的回复:[quote=引用 3 楼 my_live_123 的回复:] 不妨通知一下里奇或者出版商 引用 3 楼 my_live_123 的回复:不妨通知一下里奇或者出版商 Ritchie 都去世了(http://en.wikipedia.org/wiki/Dennis_Ritchie)。[/quote] 告诉出版商也可行，发个邮件即可！或者自己知道，不了了之！

user: user-2
content: 引用 3 楼 my_live_123 的回复:不妨通知一下里奇或者出版商 引用 3 楼 my_live_123 的回复:不妨通知一下里奇或者出版商 Ritchie 都去世了(http://en.wikipedia.org/wiki/Dennis_Ritchie)。

user: user-3
content: 不妨通知一下里奇或者出版商
user-0 提问: Kmp算法中求next数组的时间复杂度问题

回复:
user: user-1
content: 最近对kmp的getnext函数小做了一下研究。 贴一下自己的研究心得：http://blog.csdn.net/henuyx/article/details/44653799 对于算法复杂度，其实可以通过测试验证你心里的想法的。 首先最理想的情况是模式串是全部字符相同，比如：“aaaaaaaa”，算法复杂度为：O(m) 其次，考虑复杂度次之的字符串，即：“abababab”，算法复杂度为：O(m+1) 然后，考虑复杂度再次之的字符串，即：“abcabcabc”，算法复杂度为：O(m+2) .... 最差的情况，也就是楼主提的，每次都匹配失败，即：“abcdefg”，算法复杂度为：O(2m-2) 其中那个减2，表示第0个和第1个字符不会发生改变j的跳转。  ----------------- 个人见解，欢迎批评指正。

user: user-2
content: 有点O(N^2)的感觉

user: user-2
content: 实际上最坏情况下也不会达到你说的情况，跳到k=-1不会复杂到o(n)
user-0 提问: 设X[0:n-1]和Y[0:n-1]为2 个数组,每个数组中含有n 个已排好序的数。试设计一个O(log n)时间的算法,找出X和Y 的2n个数的中位数。

回复:
user: user-1
content: 来一个O(n)的：  int main(void) { 	int x[] = { 2, 4, 5, 11, 12, 13, 14 }; 	int y[] = { 1, 3, 6, 7, 8, 9, 10 }; 	int a1, a2, n1, n2, n; 	n = n1 = n2 = 0; 	while (n < 7) 	{ 		a1 = x[n1] <= y[n2] ? x[n1++] : y[n2++]; 		n++; 	} 	a2 = x[n1] <= y[n2] ? x[n1++] : y[n2++]; 	printf("%lg\n", (double)(a1 + a2) / 2);  	return 0; } //7.5

user: user-1
content: 1 2 3 4  5 6 7 8 9 10 11 12 13 14 这14个数的中位数应该是(7+8)/2=7.5啊
user-0 提问: c primer plus 第346页 为什么不用extern const double PI而用static。。。啊？

回复:
user: user-1
content: 话说发图不说质量得多好，至少方向调一下把。。你这是帮治疗劲椎病么。。

user: user-1
content: 这书怎么看的。。 明明说了可以使用“两个策略”，“首先”是把定义放在一个c文件中，其他文件用extern，然后下面就有“extern const double PI” 然后“其次”是把定义放在h头文件中，这时候既然是定义，当然不能extern，为什么要用static下面也说清楚了

user: user-0
content: 引用 1 楼 vnvlyp 的回复:这书怎么看的。。 明明说了可以使用“两个策略”，“首先”是把定义放在一个c文件中，其他文件用extern，然后下面就有“extern const double PI” 然后“其次”是把定义放在h头文件中，这时候既然是定义，当然不能extern，为什么要用static下面也说清楚了 谢谢啦大神啊，看得太急了，没仔细

user: user-2
content: 同一个编译文件，只需要static或非static 不一个编译文件，在当前使用定义在另外一个编译文件中的变量就要extern声明一下，告诉编译器它该怎么处理！ 注：一般一个.c文件称为一个编译文件

user: user-2
content: 引用 2 楼 vnvlyp 的回复:话说发图不说质量得多好，至少方向调一下把。。你这是帮治疗劲椎病么。。 程序猿必读书目《颈椎病康复指南》
user-0 提问: 读WRK源代码，有个小问题请教大家！

回复:
user: user-1
content: 你文本编辑器的问题, 就是分隔用的一条横行, 没啥意思, 当空格就是了..

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

user: user-1
content: 试了下,  没几个文本编辑器识别 \f 并做特别的处理,   看来就是 M$ 的家伙为了打印的时候换页特别加入的,   看不出来是用啥编辑器写的.   在语义上这个就跟个空白差不多.

user: user-1
content: 这个字符就是 '\x0c'  == '\f',  名字是 FF,   换页符,  认识的编辑器都显示一根横线,  打印的时候一般会分页..   M$ 的编辑器都不认识,  M$ 的内核代码又不是用 M$VC 写的, 不认识也正常得很..

user: user-1
content: 到 vi 啥的里去看看..

user: user-0
content: 引用 3 楼 mLee79 的回复:你文本编辑器的问题, 就是分隔用的一条横行, 没啥意思, 当空格就是了..  不是呀，我把这段代码拷到“记事本”和“VC2008”都是乱码呀？如下图所示

user: user-3
content: 我认为这只是一个0xFF的字符。。。
user-0 提问: 求助！多维数组与指针这有点问题不能理解呢！谢谢

回复:
user: user-1
content: for(;p <= p + 24;p++)   其实理论上这个也不算死循环，因为p <= p+24 不是永远成立的。当p增大到接近0xFFFFFFFF的时候，p+24就会溢出变成一个很小的值，循环就可以结束了。当然，在此之前程序早就挂掉了，因为一直在访问*p

user: user-0
content: 引用 2 楼 user-1 的回复:for(;p <= p + 24;p++) 这是个死循环 ....我去 这么明显的错误我都没有发现 谢谢！！！！！

user: user-0
content: ....我去 这么明显的错误我都没有发现 谢谢！！！！！

user: user-1
content: 改成这样再试试吧 int* p = a[0]; int *p1 = p; for(;p <= p1 + 24;p++)

user: user-1
content: for(;p <= p + 24;p++) 这是个死循环

user: user-0
user-0 提问: 在C语言下查看float数据类型在内存中的存储形式，遇到一个奇怪的问题。

回复:
user: user-0
content: 引用 2 楼 super_miker 的回复:证明你使用的平台上char是signed char, 而printf函数要求的是unsigned int, 将signed char进行类型提升之后,如果char数值的最高位是1(>=0x80), 那么就会像前面的位填入1,否则就会在前面的位填入0. 如果你使用unsigned char,那么不管char的数值是多少,提升至unsigned int时只会在前面的位填入0. 谢谢解惑

user: user-0
content: 引用 1 楼 enlinux 的回复:这个需要知道浮点数的表达方式  浮点数 在 计算机中 表示为 1/2 + 1/4 + 1/8 + ....  0.1 = 1/16 + 1/32 + ...  然后，大多是是24.8 的精度，最后8bit就是00011000  %x 只是表达 32bit的值，实际表示的含义 由编译器决定 我预期是输出：3c cc cc cd

user: user-1
content: 请这样做   printf("%02x  %02x  %02x  %02x", (BYTE)*(p + 3), (BYTE)*(p + 2), (BYTE)*(p + 1),(BYTE) *(p));  格式化成16进制时, 一定要注意强制转换成无符号类型, 否则就会出现输出负数的情况(前面全是f). 因为x格式化, 认为是是要取4个字节的. 如果未强制转换, 那么push参数时就会按有符号类型的转换成4字节数据. 当然就会出现负数了.

user: user-2
content: 用unsigned char输出，原来我有个程序也是这种问题

user: user-3
content: int main(void) { 	float f = 1.3f; 	printf("%p\n", &f); 	char *p1 = (char*)&f; 	printf("%x %x %x %x\n", p1[3], p1[2], p1[1], p1[0]); 	unsigned char *p2 = (unsigned char*)&f; 	printf("%x %x %x %x\n", p2[3], p2[2], p2[1], p2[0]); 	return 0; } //0035F848 //3f ffffffa6 66 66 //3f a6 66 66

user: user-4
content: 证明你使用的平台上char是signed char, 而printf函数要求的是unsigned int, 将signed char进行类型提升之后,如果char数值的最高位是1(>=0x80), 那么就会像前面的位填入1,否则就会在前面的位填入0. 如果你使用unsigned char,那么不管char的数值是多少,提升至unsigned int时只会在前面的位填入0.

user: user-5
content: 这个需要知道浮点数的表达方式  浮点数 在 计算机中 表示为 1/2 + 1/4 + 1/8 + ....  0.1 = 1/16 + 1/32 + ...  然后，大多是是24.8 的精度，最后8bit就是00011000  %x 只是表达 32bit的值，实际表示的含义 由编译器决定
user-0 提问: 求问个算法问题

回复:
user: user-1
content: 引用 2 楼 user-2 的回复:先手放中心，此后按对称方法，必胜。 我再补充一下， a>=b 时，先手胜 a < b 时，后手胜

user: user-2
content: 先手放中心，此后按对称方法，必胜。

user: user-0
content: 链接http://oj.hi-hi.cn/JudgeOnline/problem.php?id=1667
user-0 提问: 输出2007年某月月历

回复:
user: user-1
content: 代码修改之后运行了一下，应该没问题了，你可以试试，改过的地方我用红色字体标出来了 #include<stdio.h> int main() {int s,d,i,m,w,j,k;  scanf("%d",&m); printf("          2007--%d\n",m); printf("----------------------------\n"); printf(" Su  Mo  Tu  We  Th  Fr  Sa\n"); s=0; for(j=1;j<m;j++)  {  	switch( j ) 		{ 			case 1: 			case 3: 			case 5: 			case 7: 			case 8: 			case 10: 			case 12:s=s+31;break; 			case 2:s=s+28;break; 			case 4: 			case 6: 			case 9: 			case 11:s=s+30;break; 		}  } switch(m) { 	case 1: 	case 3: 	case 5: 	case 7: 	case 8: 	case 10: 	case 12:d=31;break; 	case 4: 	case 6: 	case 9: 	case 11:d=30;break; 	case 2:d=28;break; } if(m==1) { 	w=1; 	printf("%4c",' '); 	for(i=1; i<=d; i++,w++)  	{ 		if(w==6) 		printf("\n"); 		w=(w+1)%7; 		printf("%3d ",i); 	} } else  { 	w=s%7; 	for(k=0;k<=w;k++) 	printf("%4c",' '); 	for(i=1; i<=d; i++)  	{ 		if(++w%7==0) 		putchar('\n'); 		printf("%3d ",i);  	} }  return 0; }

user: user-2
content: 修改如下：  #include<stdio.h> int main() { 	int s, d, i, m, w, j, k; 	scanf("%d", &m); 	printf("          2007--%d\n", m); 	printf("----------------------------\n"); 	printf(" Su  Mo  Tu  We  Th  Fr  Sa\n"); 	s = 1; 	for (j = 1; j<m; j++) 	{ 		switch (j) 		{ 		case 1: 		case 3: 		case 5: 		case 7: 		case 8: 		case 10: 		case 12:s = s + 31; break; 		case 2:s = s + 28; break; 		case 4: 		case 6: 		case 9: 		case 11:s = s + 30; break; 		} 	} 	switch (m) 	{ 	case 1: 	case 3: 	case 5: 	case 7: 	case 8: 	case 10: 	case 12:d = 31; break; 	case 4: 	case 6: 	case 9: 	case 11:d = 30; break; 	case 2:d = 28; break; 	} 	if (m == 1) 	{ 		w = 1; 		printf("%4c", ' '); 		for (i = 1; i <= d; i++) 		{ 			printf("%3d ", i); 			if (7 == ++w)  //下次输出星期天，则先得换行 			{ 				printf("\n"); 				w = 0; 			} 		} 	} 	else { 		w = s % 7; 		for (k = 1; k <= w; k++) 			printf("%4c", ' '); 		for (i = 1; i <= d; i++) 		{ 			printf("%3d ", i); 			if (7 == ++w)  //下次输出星期天，则先得换行 			{ 				printf("\n"); 				w = 0; 			} 		} 	}  	return 0; }

user: user-3
content: int main() { 	int s = 0, d, i, m, w; 	scanf("%d", &m); 	printf("          2007--%d\n", m); 	printf("----------------------------\n"); 	printf("  Su  Mo  Tu  We  Th  Fr  Sa\n"); 	for(i=1; i<m; i++) { 		s += 31; 		switch(i) { 		case 2: 			s -= 3; 			break; 		case 4: case 6: case 9: case 11: 			s--; 			break; 		} 	} 	d = 31; 	switch(m) { 	case 2: 		d -= 2; 		break; 	case 4: case 6: case 9: case 11: 		d--; 		break;	 	} 	s += 1;	 	w = s % 7; 	for(i=1; i<=w; i++) 		printf("    "); 	for(i=1; i<=d; i++,w++) { 		printf("%4d", i); 		w %= 7; 		if(w == 6) 			printf("\n"); 	} 	printf("\n"); 	return 0; }

user: user-4
content: for(i=1; i<=d; i++,w++) 改成 for(i=1; i<=d; i++)  这里的w++是多余的，因为循环里面有一行 w=(w+1)%7;
user-0 提问: 关于常量数组越界的问题，只读不写，有啥问题？

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

user: user-2
content: 有的内存是不能读的  一读就崩溃

user: user-3
content: 你这是定义了一个指针数组，可以这么赋值吗？我没这么试过，一会试下再来回复

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

user: user-4
content: 如果程序以4 byte 对齐的方式编译，s2[-1] 就可能会取得random值，且如果以s2[-1]作为分支判断，就会有错误的分支处理流程，影响程序的正常功能。  lz的客户没有问题是，程序的幸运值高。

user: user-0
content: 引用 4 楼 super_miker 的回复:char* s1[3] = {'a','b','c'}; char* s2[3] = {'d','e','f'}; 感觉这里有问题,要么后面是双引号,要么前面没有*. 此外,s1和s2的位置是编译器确定的,换一个编译器或者给编译器加上某些参数说不定会出问题,没出问题必须感谢编译器  不好意思，掩饰代码，敲错了，没有那个星号。

user: user-5
content: 没有规定挨着写的变量，内存位置也挨着吧？ 最好翻翻标准

user: user-6
content: char* s1[3] = {'a','b','c'}; char* s2[3] = {'d','e','f'}; 感觉这里有问题,要么后面是双引号,要么前面没有*. 此外,s1和s2的位置是编译器确定的,换一个编译器或者给编译器加上某些参数说不定会出问题,没出问题必须感谢编译器

user: user-7
content: 引用 2 楼 comfan1985 的回复:[quote=引用 1 楼 user-8 的回复:] 不知道问题的意图？ 尽量不要这么写 你不知道你越界访问的内存的内容， 以及 是否可以访问。 程序已经交给客户试用，也没啥问题。但是在复查代码的时候才发现这个问题的，而且index为-1的概率也比较低，现在要分析影响。  我觉得访问s2数组的-1下标，最多是访问到s1的内容。会有什么影响呢？[/quote]  下标是-1的话，你确定是s1的内容？ 要是这块内存是不可以访问的呢， 会出现段错误，那么你觉得影响大吗？

user: user-0
content: 引用 1 楼 user-8 的回复:不知道问题的意图？ 尽量不要这么写 你不知道你越界访问的内存的内容， 以及 是否可以访问。 程序已经交给客户试用，也没啥问题。但是在复查代码的时候才发现这个问题的，而且index为-1的概率也比较低，现在要分析影响。  我觉得访问s2数组的-1下标，最多是访问到s1的内容。会有什么影响呢？

user: user-8
content: 不知道问题的意图？ 尽量不要这么写 你不知道你越界访问的内存的内容， 以及 是否可以访问。
user-0 提问: 结构体指针之间的相互赋值

回复:
user: user-1
content: 你执行位置过了赋值的地方没

user: user-2
content: 你确定 程序已经执行到p=head这句了吗?  如果没有, 那是正常的.  如果已经执行到了, 那么 怀疑你是在release模式下调试的.   debug版执行到 p=head, p应该是NULL.

user: user-0
content: 引用 1 楼 d741963250 的回复:看你怎么调试的了，当前的这个值 是在某处打的断点的值吗？ 直接运行 到这里中断了

user: user-3
content: 看你怎么调试的了，当前的这个值 是在某处打的断点的值吗？

user: user-4
content: 在那一行中断在我使用的IDE中代表那一行还未执行,要在它的下一行中断才得到执行这一行之后的结果.

user: user-5
content: 是O2/O3编译优化吗?  代码重排 或 代码精简 会造成这个结果

user: user-6
content: 你确定是在那一行中断了？ 0xcdcdcdcd这根本就是还没有初始化，连p = NULL那一行都没有执行

user: user-7
content: 当我上面的没说~~~~~代码没看清楚!  你的这情况还真没发生过

user: user-7
content: 你的断点是停在 p = head 那里吗? 按 F11 执行后 p 的值就会变了

user: user-8
content: 在p=head之后加上一句  printf("%x, %x, =? %d\n", head, p, head == p ? 1 : 0);
user-0 提问: 内存不能read

回复:
user: user-1
content: 可能和悬空指针有关

user: user-2
content: 内存分配以及使用有问题吧，  再好好检查检查

user: user-3
content: 1. 请把能通过和出错的代码分开 2. 能不能拜托用代码框发代码，这种代码有可读性么，代码框按钮在表情左边
user-0 提问: c语言如何连接MYSQL

回复:
user: user-1
content: 可以调用mysql接口直接连接的

user: user-2
content: 试验一下这个 http://t.51108.net/file/27&utm_source=AA01

user: user-3
content: 借问下：linux下也是这样的吗

user: user-4
content: 引用借楼问一下，楼主表介意 我是在vs2010中创建了一个win32控制程序项目mysql connect test。该设置的参数比如像包含目录和库目录都设置好了，但是提示说无法打开源文件mysql.h，求问大神是什么原因，有什么解决方案呢？ 回复四楼：路径改成英文名就可以啦。

user: user-5
content: 借楼问一下，楼主表介意 我是在vs2010中创建了一个win32控制程序项目mysql connect test。该设置的参数比如像包含目录和库目录都设置好了，但是提示说无法打开源文件mysql.h，求问大神是什么原因，有什么解决方案呢？

user: user-6
content: 引用 2 楼 henuyx 的回复:那个复制libmysql.dll令人费解 如果用-L指定动态库路径不是更好，而且也不会破坏当前系统的环境。  接分  以前写书就是这么任性

user: user-7
content: 那个复制libmysql.dll令人费解 如果用-L指定动态库路径不是更好，而且也不会破坏当前系统的环境。

user: user-8
user-0 提问: 使用getc或者fgetc读取bin文件出错

回复:
user: user-1
content: 第一个问题嘛，从没碰到过这种情况，你试试其他的文件  引用 1 楼 haolvshiqi 的回复:bin文件里面存储的内容都是int类型的吗？ 不管什么类型的文件存储的都是字节，至于为什么会有不同类型之分，那是人自己的理解问题，比如一个字节0x41，你可以把它当成文本，比如认为这个ASCII字符，那么它就是大写A，你也可以把它当成所谓“二进制”文件，那它也就是一个16进制数41或者10进制65 至于文件内容，那一样可以随意理解，比如一个文件有四个字节0xff 0xff 0x00 0x01，你可以认为内容是4个字节型，也就是4个char类型，你也可以认为这是1个整数型，就是1个int，所以问内容是什么类型的没有意义

user: user-0
content: 引用 3 楼 vnvlyp 的回复:有几个问题 ch不能是char类型，至少应该是short，用int是最好的 如果你用char，你就不知道到底是读了一个EOF，还是读了一个0xFF字节，因为这两个东西用char表示是一样的  至于如果ch是char，为什么打印了0xffffff86这种东西，这是符号扩展(Sign Extension)的问题，本来这个ch的值是0x86，但因为要调用printf，传递参数的时候会提升成int类型，而又因为0x86是个负数如果表示成有符号数，所以用1来扩展成int类型变成0xffffff86，而不是0x00000086 非常感谢！但是您知道为何文件大小不是2的倍数就会多读很多数据出来吗？

user: user-1
content: 有几个问题 ch不能是char类型，至少应该是short，用int是最好的 如果你用char，你就不知道到底是读了一个EOF，还是读了一个0xFF字节，因为这两个东西用char表示是一样的  至于如果ch是char，为什么打印了0xffffff86这种东西，这是符号扩展(Sign Extension)的问题，本来这个ch的值是0x86，但因为要调用printf，传递参数的时候会提升成int类型，而又因为0x86是个负数如果表示成有符号数，所以用1来扩展成int类型变成0xffffff86，而不是0x00000086

user: user-0
content: 人工置顶，大家来看看是什么原因

user: user-0
content: 人工置顶。 bin文件里面存储的内容都是int类型的吗？

user: user-2
content: 用getc 来读取是会自动转编码的，(getc 读取的是一个字符,而不是一个字节) 但你用 rb 方式打开，应该没有编码问题... 如果是编码问题，那用getc 统计出的大小应该比原文件小!  既然用 rb ，建议还是用 fwrite / fread 来处理

user: user-0
content: 有大神知道第一个问题的原因吗？
user-0 提问: 关于指针

回复:
user: user-1
content: 初始化为指针为NULL，说明你这个指针指向地址为0的空间（没有用的），但是你又要对这个地址为0的空间赋值，这是不可以的地址0的空间是没用的，除非你重新制定个地址给指针，才能赋值。

user: user-2
content: 初始化为null没有问题，但是不能读取null指针指向的内容。 所以scanf会崩溃。

user: user-3
content: 说可以初始化为NUL 并不表示运行时可以用NULL。  scanf("%s%s",source,dest) 必须source dest 都不是NULL

user: user-4
content: char *source = NULL;     source = new char[100];
user-0 提问: c语言的逻辑尺问题

回复:
user: user-1
content: http://zhidao.baidu.com/question/422445088.html

user: user-2
content: 什么是“逻辑尺”——please define “逻辑尺”！！！

user: user-3
content: 逻辑与或？

user: user-4
content: 哪个教材 或 题目 误导人？  共享下，大家鄙视下

user: user-5
content: 从没听说过C语言有逻辑尺

user: user-6
content: 逻辑尺是啥？ 是 GUI编程中的 逻辑坐标吗？

user: user-7
content: 逻辑尺？完全不懂你在说什么
user-0 提问: 【Win32编程】如何获取带ES_PASSWORD属性的编辑框内的文本

回复:
user: user-0
content: 引用 1 楼 a1193561652 的回复:可不可以先把编辑框设置成没有PASSWORD属性的再取text？  在其他应用的进程中，如何改呢？？

user: user-1
content: 可不可以先把编辑框设置成没有PASSWORD属性的再取text？

user: user-1
content: 引用 2 楼 u014390548 的回复:[quote=引用 1 楼 a1193561652 的回复:] 可不可以先把编辑框设置成没有PASSWORD属性的再取text？  在其他应用的进程中，如何改呢？？[/quote]SetWindowLong()
user-0 提问: C语言编程求大神帮助，感激不尽

回复:
user: user-1
content: srand((unsigned)time(0)); int num = rand()%2; if(num == 0)  // 正面 else //反面

user: user-2
content: 自己打印语句看看中间值，或者设断点

user: user-3
content: #include<stdlib.h> #include<stdio.h> #include<stdlib.h> int flip() { 	return(rand()%100); } int main(void) { int sum1 = 0, sum2 = 0, i;  for (i = 1; i <= 100; i++) { 	if((flip())%2==0) { printf("正面\n"); sum1++; } else  { printf("反面\n\n"); sum2++; }      } printf("正面的次数为%d\n",sum1); printf("反面的次数为%d\n",sum2); system("pause"); return 0; }这样行不行
user-0 提问: c语言程序错误 求大神

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

user: user-2
content: void val_Ab_sp(int i0,int j0,int q0,int nx,int ny,int nz,double rmax,double*P0,double D,double lca,double dt,double**A,double*b);这函数是有多蛋疼

user: user-3
content: 新手能写出这种程序？是懒吧，自己解决。

user: user-0
content: 哦哦 那这种问题怎么解决呢？？我还是新手，会的东西还比较基本，这种问题还不太会解决。。。。。。求指教了！！

user: user-4
content: gdb或其他调试器，你值得拥有！

user: user-3
content: 效率问题。 XTRACE|1926|a.cpp-126-main|1|0s|0s-238us| XTRACE|1926|a.cpp-133-main|1|32s|32s-331531us| XTRACE|1926|a.cpp-137-main|1|62s|30s--412798us|  这段代码用了32s： 126         __X_                                                         127         for(j=0;j<nk;j++){                                           128             for(i=0;i<nk;i++){                                       129                 A[j][i] = 0.;                                        130             }                                                        131             A[j][j] = 1.;                                            132         }                                                            133         __X_    这段代码用了30s 136         //赋值：A，b                                                 137         val_Ab_sp(i0,j0,q0,nx,ny,nz,rmax,P0,D,lca,dt,A,P); __X_   这段代码运行了几分钟也没完成 139         //求解线性方程组（标准程序）                                 140         ludcmp(A,nk,indx,&d); __X_  //注意：此处 A 经运算后值发生改>     变;                                                                  141         lubksb(A,nk,indx,P); __X_   //P: 输入初值，输出结果；

user: user-5
content: 太高看我了吧。
user-0 提问: 宏定义问题。

回复:
user: user-0
content: 明白了，，，谢谢了。

user: user-1
content: bug： 存在越界 当i = N - 1时，num[i + 1] = num[N]越界

user: user-2
content: http://blog.csdn.net/bird67/article/details/7680516

user: user-2
content: 类似的例子：   int i = -1;   int n = 6;   unsigned u = 6;   printf("%d %d\n", i < n, i < u); // 输出1 0，i<u不成立   i++;   printf("%d %d\n", i < n, i < u);  // 输出1 1， i<u成立

user: user-2
content: 改成这样： i < (int)(N-1) 原因：编译器把N当作了无符号整数，有符号整数i和无符号整数做比较的时候，需要先把i转换成无符号数0xFFFFFFFF

user: user-0
content: 引用 3 楼 user-3 的回复:[quote=引用 2 楼 qq_24618483 的回复:] [quote=引用 1 楼 user-3 的回复:]  for(i=0;i<N;++i) {     printf("%d\n",num[i]); }  那为什么-1 不行呢？[/quote]  for(i=-1;i<N-1;++i) {     printf("%d\n",num[i+1]); }  不是-1不行，是你num下标的范围不对，num下标的范围是0到N-1共N个数，你的代码i最大为N-1，此时num的下标取N，超出了范围，i从0开始只是一种习惯。[/quote] 可是改为  for(i=-1;i<N-1;++i) {     printf("%d\n",num[i+1]); }  就有无法输出了。

user: user-3
content: 引用 2 楼 qq_24618483 的回复:[quote=引用 1 楼 user-3 的回复:]  for(i=0;i<N;++i) {     printf("%d\n",num[i]); }  那为什么-1 不行呢？[/quote]  for(i=-1;i<N-1;++i) {     printf("%d\n",num[i+1]); }  不是-1不行，是你num下标的范围不对，num下标的范围是0到N-1共N个数，你的代码i最大为N-1，此时num的下标取N，超出了范围，i从0开始只是一种习惯。

user: user-0
content: 引用 1 楼 user-3 的回复: for(i=0;i<N;++i) {     printf("%d\n",num[i]); }  那为什么-1 不行呢？

user: user-3
content: for(i=0;i<N;++i) {     printf("%d\n",num[i]); }
user-0 提问: 关于宏的一个问题

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-2
content: 噢, 我看到了, 是 suffix 可变~~ 按1#和2#的来写吧

user: user-2
content: 我就想不明白了, 你的函数名又不是可变的, 看了你的代码函数名都是固定的啊, 那为什么要用宏来写呢? 用 inline 来写这个函数不行吗?

user: user-3
content: -   cvtScaleAbs##suffix_SSE2 +   cvtScaleAbs ## suffix ## _SSE2

user: user-4
content: cvtScaleAbs##suffix_ 改成cvtScaleAbs##suffix##_ 宏在使用时，不能连着其他字母数字，必须用空格，换行，或井号连起。

user: user-5
content: 下划线(_)也是标识符的一部分,所以suffix和suffix_是两个不同的标识符 在_前面加上##试试
user-0 提问: c语言中gets（）所引起的奇怪bug

回复:
user: user-0
content: 哎 。。无意中看到我刚学编程时的提问。。。觉得以前真的好傻逼。。。

user: user-1
content: 引用 1 楼 dinikinmi 的回复:哎。我知道原因了。。。if（）里面的a=b是赋值，，要改为a==b才是比较运算

user: user-2
content: 引用 1 楼 dinikinmi 的回复:哎。我知道原因了。。。if（）里面的a=b是赋值，，要改为a==b才是比较运算 恭喜

user: user-0
content: 哎。我知道原因了。。。if（）里面的a=b是赋值，，要改为a==b才是比较运算