Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求助啊，VS2013运行 Error LNK2001 Error LNK2019

回复:
user: user-0
content: 折腾了几天，百度 csdn msdn都找不到解决办法，配置重置都不行，无奈只能完全卸载重装了。终于好了。

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

user: user-0
content: 引用 5 楼 u010909114 的回复:[quote=引用 4 楼 tank2651094 的回复:] [quote=引用 2 楼 u010909114 的回复:] 1：可在同事电脑写个能够正常运行的，然后拿到自己电脑上试试呗，这样可排除是代码的问题还是开发环境的问题？ 2：有时问题一种思路行不通，可换下试试。 写个很简单的打印helloworld都运行不起来。运行以前的学习的例子是出现同样的问题，所以我觉得应该是环境配置问题。在家自学的。。。实在找不出办法，只能上论坛求助了[/quote]  当前也是初学C++ ,不懂，但帮顶。[/quote]多谢！

user: user-2
content: 引用 4 楼 tank2651094 的回复:[quote=引用 2 楼 u010909114 的回复:] 1：可在同事电脑写个能够正常运行的，然后拿到自己电脑上试试呗，这样可排除是代码的问题还是开发环境的问题？ 2：有时问题一种思路行不通，可换下试试。 写个很简单的打印helloworld都运行不起来。运行以前的学习的例子是出现同样的问题，所以我觉得应该是环境配置问题。在家自学的。。。实在找不出办法，只能上论坛求助了[/quote]  当前也是初学C++ ,不懂，但帮顶。

user: user-0
content: 引用 2 楼 u010909114 的回复:1：可在同事电脑写个能够正常运行的，然后拿到自己电脑上试试呗，这样可排除是代码的问题还是开发环境的问题？ 2：有时问题一种思路行不通，可换下试试。 写个很简单的打印helloworld都运行不起来。运行以前的学习的例子是出现同样的问题，所以我觉得应该是环境配置问题。在家自学的。。。实在找不出办法，只能上论坛求助了

user: user-0
content: 引用 1 楼 user-3 的回复:需要将依赖的库文件添加到项目设置中。  具体位置在：项目属性——链接器——输入——附加依赖项 百度找了很多问题也说是需要将依赖的库文件添加到项目设置，但是附加依赖项一直都是默认的：从父级或项目默认设置继承。 以前都没问题的。现在只是写个简单的打印helloword都不能运行。我也不知道要加什么库。。。 在配置—C/C++—代码生成—运行库—MT MTd MD MDd每一个试过也都不行。

user: user-2
content: 1：可在同事电脑写个能够正常运行的，然后拿到自己电脑上试试呗，这样可排除是代码的问题还是开发环境的问题？ 2：有时问题一种思路行不通，可换下试试。

user: user-3
content: 需要将依赖的库文件添加到项目设置中。  具体位置在：项目属性——链接器——输入——附加依赖项
user-0 提问: 数据结构，链表归并的一些问题是在==实在改不出来了

回复:
user: user-0
content: 好的，谢谢啦

user: user-1
content: 1.ShowList有几处错误 2.你的MergeList函数逻辑也不对，你的l3是会不断往后移动的，你最后return回去的l3并不是你合并后的链表头部了， 自己再改改。  void ShowList(LinkList l) { 	LinkList p; 	p = l->next; 	while (p != NULL) 	{ 		printf("%3d", p->data); 		p = p->next; 	} }

user: user-0
content: 这个发现了，不过问题不在这，是我的输出的两个链表输出有错  而且每一次输出都是一个值

user: user-2
content: ShowList函数中应该是while (p != NULL)吧
user-0 提问: C语言，PAT测试有一个测试点死活过不去，求助！ 谢谢！

回复:
user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: 谢谢，太粗心了，没有考虑边界条件！

user: user-1
content: 边界条件 输入输出格式 ……

user: user-2
content: 可以留个题目链接 ， 我帮你写一个参考代码！

user: user-2
content: 看了一下，楼主花了很大的功夫， 当初也是这样过来的，刷PAT可以提高编程能力 楼主这种错误估计是一个样例没有通过， 可能是一个很特别的case, 一般做这样的 题目， 别写太多代码，！

user: user-3
content: 乖乖了，这么长，让人怎么抓重点啊，
user-0 提问: 求大神帮忙解决一下程序不能打开文本文件并进行修改的bug

回复:
user: user-1
content: 你这个函数的声明就存在很多问题。 search_number等几个函数没有前置声明 display等几个函数声明和实现的函数参数不一致  还要就是你save函数里是if (!(fp = fopen("bbb.txt", "r")))用r模式写入？ 而且你所谓的无法读写是什么意思，fopen成功了吗？

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

user: user-0
content: 引用 5 楼 paschen 的回复:"d://bbb.txt"  改成：  "d:\\bbb.txt" 改过了，不行TAT

user: user-3
content: "d://bbb.txt"  改成：  "d:\\bbb.txt"

user: user-0
content: 引用 2 楼 paschen 的回复:你main中的函数声明与下面实现进的不一致  比如上面是：void del();   下面是void del(int *b) 具体是什么意思呢？

user: user-0
content: 文件是存在的啊，可是无法读写

user: user-3
content: 你main中的函数声明与下面实现进的不一致  比如上面是：void del();   下面是void del(int *b)

user: user-4
content: add函数打开的是d://bbb.txt，你这个文件存在吗？跟save和load操作的文件也不一样啊
user-0 提问: 用c Free一直检查文件依赖性

回复:
user: user-0
content: 引用 5 楼 paschen 的回复:没有问题，可以运行生成的程序了为甚我的不行 啊？难道还要下载其它组件？

user: user-1
content: 那句话之前的状态了。

user: user-1
content: 没有问题，可以运行生成的程序了

user: user-2
content: 完成构建：0个错误，0个警告。。

user: user-3
content: 引用 2 楼 a1024204390 的回复:但是一直这样啊，它一直检查文件依赖性怎么搞阿？  已经正常结束了啊 ...

user: user-0
content: 但是一直这样啊，它一直检查文件依赖性怎么搞阿？

user: user-3
content: 看起来挺正常的啊 ...
user-0 提问: 求大神帮我看一下我编的有什么问题？

回复:
user: user-1
content: 1.case 1是对的，不用改成case '1' 2.输入时要严格和scanf的格式对照，输入是空格分隔的，scanf里要写成scanf("%f,%f,%d", &a, &b, &flag);  #include <stdio.h>  #include <ctype.h>  int main() { 	int c, flag; 	float a, b, result; 	printf("欢迎来到小黄鸡会计算的世界\n"); 	printf("小黄鸡最近学会了加减乘除，你可以来考考它\n"); 	printf("请依次输入第一、二个数字，和你所需要的运算符号（且我们规定加减乘除依次为1、2、3、4）\n"); 	scanf("%f,%f,%d", &a, &b, &flag); 	switch (flag){ 	case 1: printf("结果是%f\n", result = a + b); break; 	case 2: printf("结果是%f\n", result = a - b); break; 	case 3: printf("结果是%f\n", result = a*b); break; 	case 4: printf("结果是%f\n", result = a / b); break; 	default:; 	} 	printf("小黄鸡很机智吧！\n"); 	return 0; }

user: user-2
content: 输入时用空格或者回车分隔

user: user-3
content: 输入： 12  23  1 之间不要用,号，用空格

user: user-4
content: scanf("%f,%f,%d", &a, &b, &flag);

user: user-0
content: 我又改了一点，可还是不行，求指教而且为什么只显示两个结果了？  #include <stdio.h>  #include <ctype.h>  int main() {  	int c,flag; 	float a,b,result; 	printf("欢迎来到小黄鸡会计算的世界\n");     printf("小黄鸡最近学会了加减乘除，你可以来考考它\n");  	printf("请依次输入第一、二个数字，和你所需要的运算符号（且我们规定加减乘除依次为1、2、3、4）\n");  	scanf("%f",&a);  	printf("%f\n",a);  	scanf("%f",&b);  	printf("%f\n",b);  	scanf("%d",&flag);  	switch(flag){  		case '1': printf("结果是%f\n",result=a+b);break;  		case '2': printf("结果是%f\n",result=a-b);break;  		case '3': printf("结果是%f\n",result=a*b);break;  		case '4': printf("结果是%f\n",result=a/b);break;  		default:;  	}  	printf("小黄鸡很机智吧！\n");  	return 0;  }

user: user-0
content: 还是不行耶，你再看看，我给你代码和效果图： #include <stdio.h> #include <ctype.h> int main() {     int c,flag;     float a,b,result;     printf("欢迎来到小黄鸡会计算的世界\n");     printf("小黄鸡最近学会了加减乘除，你可以来考考它\n");     printf("请依次输入第一、二个数字，和你所需要的运算符号（且我们规定加减乘除依次为1、2、3、4），并用逗号隔开\n");     a=scanf("%f", &a);     printf("%f\n",a);     b=scanf("%f", &b);     printf("%f\n",b);     flag=scanf("%f", &flag);     switch(flag){         case '1': printf("结果是%f\n",result=a+b); break;         case '2': printf("结果是%f\n",result=a-b); break;         case '3': printf("结果是%f\n",result=a*b); break;         case '4': printf("结果是%f\n",result=a/b); break;         default:;     }     printf("小黄鸡很机智吧！\n");     return 0; }

user: user-2
content: 另外应该是 case '1'  而不是case 1  同理其他

user: user-2
content: 每个case后需要加上break; 不然会继续往下掉
user-0 提问: 小白每日一问关于动态库环境搭建

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:dll放到exe所在目录试一下   本来就是放在exe底下但是64位找不到 我放在 C:\Windows\SysWOW64 就OK了 谢谢

user: user-1
content: dll放到exe所在目录试一下
user-0 提问: 新手安装了vs2015写c语言出现诸多问题请给予帮助

回复:
user: user-1
content: 右键 源文件->添加->新建项->C++ 文件 输入文件名，选择文件位置 编辑代码就可以了

user: user-2
content: 创建工程就有问题吧。 http://jingyan.baidu.com/article/63acb44ac4964c61fcc17eb7.html

user: user-3
content: 源文件都没有啊

user: user-4
content: 源文件为什么会是TXT，你把扩展名改成cpp再试试吧，

user: user-5
content: 你文件类型怎么是txt的

user: user-6
content: 在 源文件 下面添加一个 .cpp ，然后把你的代码拷进去。
user-0 提问: ACM的题总是 PE 大神帮帮忙

回复:
user: user-1
content: 引用 2 楼 qq_29499869 的回复:因为到达n时只需要HP大于零就好了，所以我的思路是从第n条路开始，设HP为0，一层一层往上算，到达路1时返回起点的HP，然后记录下最小的起点HP。 还有题目理解上有一点我不知道有没有问题:连接i点j点的只有一条路，而且只能从i到j(假如i小于j)，也就是说题目给的那个方阵对角线及左下应该全部为0，否则的话，可能会形成圈，他可以在几个点之间一直转，这样处理起来就比较麻烦了。 因为我这两天刚好断网，代码是拍的照片，用vs编译的，结果是4。还有就是录数据那段我没写。 照片好像没有传上来，代码在下面：  #include<iostream>  int N = 4; float A[100][100] = { { 0,-4,0,-10 },{ 0,0,3,0 },{ 0,0,0,-14 },{ 0,0,0,0 } }; //有除法运算，可能出现小数，所以用的浮点型 float initHP = 1e5; float fun(int j, float HP) { 	float currentHP = HP;	//记录这一层的HP 	for (int i = j-1; i >= 0; i--) { 		HP = currentHP; 		if (A[i][j] != 0) { 			//求上一层的HP，如果HP小于等于零，则为0。 			HP = (HP - A[i][j] ) / 2 > 0 ? (HP - A[i][j]) / 2 : 0; 			if (i == 0) return HP;	//i=0，到达起点，返起点HP 			else { 				float flag = fun(i, HP); 				//如果flag>0，则返回值是HP值，记录下最小的HP值。 				if (flag > 0 && flag < initHP) 					initHP = flag; 			} 		}			 	} 	return -1;	//为了跟HP区分，返回小于0的数 } int main()  { 	int flag = fun(N-1, 0);	//初始条件，路N，HP=0. 	//因为也可能有1直达n的路，这个时候flag返回的是HP值。 	if (flag > 0 && flag < initHP) 		initHP = flag; 	printf("%d", int(initHP) + 1); 	//因为HP>0,这里取大于initHP的最小整数。 	system("pause"); 	return 0; }

user: user-1
content: 因为到达n时只需要HP大于零就好了，所以我的思路是从第n条路开始，设HP为0，一层一层往上算，到达路1时返回起点的HP，然后记录下最小的起点HP。 还有题目理解上有一点我不知道有没有问题:连接i点j点的只有一条路，而且只能从i到j(假如i小于j)，也就是说题目给的那个方阵对角线及左下应该全部为0，否则的话，可能会形成圈，他可以在几个点之间一直转，这样处理起来就比较麻烦了。 因为我这两天刚好断网，代码是拍的照片，用vs编译的，结果是4。还有就是录数据那段我没写。

user: user-2
content: printf("%d",i); => printf("%d\n",i);
user-0 提问: 金字塔编程

回复:
user: user-1
content: 对齐版： //    A //   ABA //  ABCBA // ABCDCBA //ABCDEDCBA #include <stdio.h> #include <conio.h> int n,h,s,i; int main() {     while (1) {         printf("Please input a character(A-Z):");         fflush(stdout);         rewind(stdin);         scanf("%c",&n);         if ('A'<=n && n<='Z') {             for (h=0;h<n-'A'+1;h++) {                 for (s=n-'A'-h;s>0    ;s--) printf(" "   );                 for (i='A'    ;i<'A'+h;i++) printf("%c",i);                 for (i='A'+h  ;i>='A' ;i--) printf("%c",i);                                             printf("\n"  );             }             getch();             break;         }     }     return 0; }

user: user-1
content: //    A //   ABA //  ABCBA // ABCDCBA //ABCDEDCBA #include <stdio.h> #include <conio.h> int n,h,s,i; int main() { 	while (1) { 		printf("Please input a character(A-Z):"); 		fflush(stdout); 		rewind(stdin); 		scanf("%c",&n); 		if ('A'<=n && n<='Z') { 			for	(h=0;h<n-'A'+1;h++) { 				for	(s=n-'A'-h;s>0    ;s--) printf(" "   ); 				for	(i='A'    ;i<'A'+h;i++) printf("%c",i); 				for	(i='A'+h  ;i>='A' ;i--) printf("%c",i); 											printf("\n"  ); 			} 			getch(); 			break; 		} 	}     return 0; }

user: user-2
content: #include <stdio.h> #include <stdlib.h> int main() { 	int line, i; 	char letter, ch; 	printf("请输入一个大写字母:"); 	scanf("%c", &letter); 	for (line = 0; line <= letter - 'A'; line++) 	{ 		for (i = 0; i<letter - 'A' - line; i++) 			printf(" "); 		for (ch = 'A'; ch <= ('A' + line); ch++)           //升序输出字母 			printf("%c", ch); 		ch -= 2; 		while (ch != 'A' - 1) 			printf("%c", ch--); 		printf("\n"); 	} 	system("pause"); 	return 0; }

user: user-3
content: #include<stdio.h> #include<stdlib.h> int main() { 	int line, num, max, center; 	int i = 0, j = 1, k = 1; 	char word; 	printf("请输入行高:\n"); 	scanf_s("%d", &line); 	max = line * 2 - 1; 	while (i < line) { 		word = 'a'; 		j = 0; 		num = 2 * i + 1; 			while (j < (int)((max - num) / 2)) {		 				printf(" ");			 				j++; 			} 			while (j >= (int)((max - num) / 2) && j < (int)(max/2)) { 				printf("%c", word++); 				j++; 			} 			while (j < ((max - num) / 2 + num) && j >= (int)(max / 2)) { 				printf("%c", word--); 				j++; 			} 			if (j == ((max - num) / 2 + num)) { 				printf("\n"); 				i++; 			} 	} 	system("pause"); 	return 0; }

user: user-0
content: 感谢感谢 第一次提问 新手初学  多多指教

user: user-4
content: http://zhidao.baidu.com/link?url=4IM-lN47OKp_vxawvmlOUxL-mxwIxucvkKl0H_wn72WsStO5XoE1IwRQWHxZRXXH4jDBjn4NZKHEpEqHlmbvI8EjQ5NTLUap0G1rvx0Rnku
user-0 提问: 求问这个程序输出单链表表的时候为什么只输出第一个结点呢？？

回复:
user: user-1
content: 也可以把char data;改为char data[2]; 把%c改为%s

user: user-1
content: #include＜stdio.h＞ #include＜stdlib.h＞ typedef char ElemType; typedef struct LNode { 	ElemType data[2]; 	struct LNode *next; }LNode , *LinkList ;   void CreateList(LinkList &L,int n ) { 	LNode *q , *p; 	//LinkList p; 	L = ( LinkList ) malloc ( sizeof ( LNode )); 	L-＞next = NULL ; 	q = L; 	for( int i = 0 ; i ＜ n ; i++ ) 	{ 		p = ( LinkList ) malloc ( sizeof ( LNode )); 		scanf ( "%s", p-＞data ); 		getchar(); 		p-＞next = q-＞next ; 		q-＞next = p; 		q = p ;  	/*	p-＞next = L-＞next ; 		L-＞next = p ;*/ 	} }  void DipList ( LinkList L ) { 	LinkList p ;     p = L-＞next;    while ( p != NULL )    {    	printf("%s " , p-＞data);    	p=p-＞next ;    } } void MergeList ( LinkList ha , LinkList hb , LinkList &hc ,int m ,int n) { 	LNode *q , *p ; 	p = ha ;  	q = hb ; 	int j = 0 , i = 0; 	while ( i＜m && j ＜n ) 	{ 		i++ ;  		j++ ; 		p = p-＞next ; 		q = q-＞next ; 	} 	if ( i＜m)     {     	hc = hb;     	p = ha -＞next ;      	q-＞next = ha-＞next ;     	free(ha) ;     }     if ( j ＜ n )     {     	hc = ha ;     	q = hb-＞next ;     	p-＞next = hb-＞next ;     	free(hb);     } } int main() { 	int m ,n ; 	LinkList ha , hb ,hc; 	printf("请输入单链表a的长度:"); 	scanf("%d", &m ); 	printf("请输入单链表a的元素:\n") ;  	CreateList( ha , m); 	DipList(ha); 	printf("请输入单链表b的长度:");  	scanf("%d", &n ); 	printf("请输入单链表b的元素:\n") ; 	CreateList( hb , n); 	DipList(hb); 	MergeList (ha , hb ,hc , m , n) ; 	printf( "合并后的单链表为：") ; 	DipList ( hc ) ; 	return 0; }

user: user-0
content: 非常感谢！！！

user: user-2
content: 主要问题在于CreateList函数中的scanf ( "%c", &p->data )一句，这时留在输入流中的空格或者回车符都被当做一个%c输入，可以改为scanf ( " %c", &p->data )，即在%c前面加个空格用于剔除输入流中的空白符。

user: user-3
content: 单步跟踪程序运行，每步观察变化情况分析原因
user-0 提问: 非负十进制数转八进制数，调试总是崩溃，求大神们看看

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

user: user-2
content: 首先你的2个scanf用法就不对 你的Pop(S, e);根本没法通过e带出你的元素，必须要用一级指针或者引用才行 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: scanf("%d",a);  改成  scanf("%d",&a);

user: user-0
content: 在原文麻烦修改下
user-0 提问: 求救，关于c调用fortran，多线程

回复:
user: user-1
content: 至少高于系统权限。如果有杀毒软件权限比它高后看看。

user: user-1
content: 把权限设置到最高。

user: user-0
content: 还真是系统问题，真是太坑了，放到centos下就正常了，太可恨了，浪费我一天的时间，这应该是windows下编译器的bug了

user: user-2
content: 别的系统咋样啊？觉得你很牛逼啊！！

user: user-0
content: 我尝试不用fortran而用c去写那个功能，而封装成dll，在用c调用，cpu到100 看来是fortran和c实现函数原理上的差异造成的，有人能回答吗？
user-0 提问: 求助

回复:
user: user-1
content: inc是一个函数 而p是一个函数指针 楼主可以网上搜索函数指针学习

user: user-0
content: 如您所言，谢谢

user: user-2
content: 1) inc 不是一个指针。inc 是一个函数 2) 怎么改： typedef int (*func)(int);
user-0 提问: codeblocks编译软件

回复:
user: user-1
content: run有时没准会跳过build直接run

user: user-2
content: When you select build, it just compiles everything together. However, when you select run, it does the build process, but it also executes your project.

user: user-3
content: build and run 是先生成，再运行
user-0 提问: 如何/hook其他进程读写文件?实现硬盘读写操作定位到内存变量

回复:
user: user-0
content: 引用 3 楼 赵4老师的回复:使用ramdisk 谢谢赵老师。。刚刚看了那个 @chenhui530 ,发现高手都越来越少了。可能是csdn的没落原因？ 好多高手前几年一直很活跃，可是近几年好像都销声匿迹了 可能他们现在已经当老板了，或者是做了更高的主管，所以很少出来，留言了。 只是相比娱乐圈，越是这些明星，他们越是在微博上得瑟。 程序员确实相反的。 难道就没有一个真正的程序员的？像是微博一样？可以一辈子发表信息的基地? 微博上的粉丝可以转换成，知名度还有金钱，广告费用。  这里的知名度，表面上来说没有任何作用，只是自己的心里感受。

user: user-1
content: 使用ramdisk

user: user-2
content: 搜 api inline hook

user: user-0
content: vs.net，可以在运行时动态输入一段vb.net或其他.net代码然后直接生成一个dll或exe,也可以直接在内存中运行，不需要保存到硬盘. 比如编译器编译程序时生成临时文件，最后生成目标exe.就是想把这些临时文件和目标exe全部动不让它保存在硬盘上,实现内存编译。 ==== 或者mediaplay播放器控件ocx flash控件需要一个文件名参数，把它重新定位到自己的一个内存变量。最终实现资源文件内容》》读入内存》》变成虚拟文件的一个内存变量。  总结就是如何让本进程或其他进程读写文件时变成读写自己的内存。用文件映射也可以，可以生成一个空的文件名，或者利用已有的文件。但是不做任何读写改变。不过完成之后把这个空文件删除。  目标是实现一些加密视频的不写硬盘直接播放。 我了解的一些方法是可以直接根据内存字节播放声音，还有显示图片。如何内存播放flash视频还有其他视频？
user-0 提问: 小白每日一问关于内存释放

回复:
user: user-1
content: 你strddd中应该用stsrcpy或者memcpy来复制，否则你只是改变了指针的指向，这样内层指针不再指向你分配的内存，释放非动态申请的内存导致出错

user: user-2
content: strddd 里要用 strcpy   最后 pc[i] 已经不是 malloc 出来的了。  ===================== 记住，C 没有字符串类型
user-0 提问: 求解决，换行符为什么对结果有影响啊，这程序错哪了

回复:
user: user-1
content: 主要是函数JIE定义为int 却没返回值，

user: user-0
content: 引用 8 楼 paschen的回复:[quote=引用 6 楼 Dknight321 的回复:] [quote=引用 4 楼 apple_v1的回复:]不知道没有return为什么能编译得过，jie是明确要求返回一个int值的 是不是因为我用的是void main()...[/quote]  和这没关系，已经说了，不要去研究未定义的行为[/quote] 好吧，只能这样理解了吧

user: user-0
content: 引用 5 楼 paschen的回复:没有retrun返回的是当前EAX寄存器中的值，是不确定的，未定义行为，可能碰巧对，也可能错 好像有点道理哈，但不加换行符的输出结果很有意思

user: user-2
content: 引用 6 楼 Dknight321 的回复:[quote=引用 4 楼 apple_v1的回复:]不知道没有return为什么能编译得过，jie是明确要求返回一个int值的 是不是因为我用的是void main()...[/quote]  和这没关系，已经说了，不要去研究未定义的行为

user: user-3
content: 引用 6 楼 Dknight321 的回复:[quote=引用 4 楼 apple_v1的回复:]不知道没有return为什么能编译得过，jie是明确要求返回一个int值的 是不是因为我用的是void main()...[/quote] gcc可以不用写return，vs不行

user: user-0
content: 引用 4 楼 apple_v1的回复:不知道没有return为什么能编译得过，jie是明确要求返回一个int值的 是不是因为我用的是void main()...

user: user-2
content: 没有retrun返回的是当前EAX寄存器中的值，是不确定的，未定义行为，可能碰巧对，也可能错

user: user-3
content: 不知道没有return为什么能编译得过，jie是明确要求返回一个int值的

user: user-0
content: 引用 1 楼 user-4的回复:递归不写return的吗 特别是有无换行符的差异

user: user-0
content: 引用 1 楼 user-4的回复:递归不写return的吗 写return的话是对的，但是这样做，错的机理是啥呀

user: user-4
content: 递归不写return的吗
user-0 提问: 关于realloc的正确使用

回复:
user: user-1
content: 另外，你应该用strcpy_s 而不是strcat_s吧

user: user-1
content: strcat_s(pStrings[str_count++],str_len,buf);  改成：  strcat_s(pStrings[str_count++],BUF_LEN,buf);
user-0 提问: 关于共享栈的问题

回复:
user: user-1
content: 栈1空，栈2满时 ， top1=-1， top2=0  top1是从 -1生长到n-1 top2是从n 生长到 0； 两个栈生长方向不一样； 就像原文说的，top1+1=top2 时栈满
user-0 提问: 一维数组的方式使用指针变量，求解其

回复:
user: user-1
content: A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价

user: user-2
content: ap[0]就是a ap[1]显然就越界了

user: user-3
content: ap[i] 等价于 *(ap + i)   但访问时要注意不要越界  ap指向的不是数组，只是一个int元素，所以只有ap[0]是不越界的

user: user-4
content: 引用 3 楼 hardwin 的回复:[quote=引用 2 楼 user-5 的回复:] i[ap] 也是 *(i + ap) 二者只要一个是地址值，一个是整数，就这样算 引用 1 楼 user-5 的回复:ap[i] 就是 *(ap + i)  那这里*(ap + 1)使用错误吗？[/quote]  错误，越界了。

user: user-5
content: 语法上没有错误，使用上有问题：ap + 1 到底指向的是哪儿？指向的那个地方的内容能随便改吗？不能保证的话，就不能贸然使用

user: user-0
content: 引用 2 楼 user-5 的回复:i[ap] 也是 *(i + ap) 二者只要一个是地址值，一个是整数，就这样算 引用 1 楼 user-5 的回复:ap[i] 就是 *(ap + i)  那这里*(ap + 1)使用错误吗？

user: user-5
content: i[ap] 也是 *(i + ap) 二者只要一个是地址值，一个是整数，就这样算

user: user-5
content: ap[i] 就是 *(ap + i)
user-0 提问: C语言读取文件中数字的类型

回复:
user: user-1
content: 看对应汇编指令才是正途。

user: user-0
content: 引用 11楼赵4老师 的回复:看对应汇编指令才是正途。看汇编语言吗？我现在是想先打基础

user: user-2
content: 3.5赋值给整型的i，会向下取整

user: user-2
content: m/n，如果俩边都是int，就会向下取整，实际上是向0取整。如果按数学除的结果是-1.5就会变成-1。如果想让他显示小数精确值，可以写成3.0f/4.0f，实际结果就是0.75

user: user-3
content: 引用 5 楼 loveqise的回复:引用 2楼paschen 的回复:2、 因为这里做是整数的除法，商的结果向小取整的，之后+0.5的时候会转换成double，得到3.5，然后又转换成int，变成3应该植两个int相除，得到的还是int类型，所以截尾取整对吧 15 / 4  商 3 余 3， 结果是3，整数除法结果就是商那一项

user: user-3
content: 引用 4 楼 loveqise的回复:引用 1楼paschen 的回复:1、如果是用文本方式打开的，读到的是字符串，以二进制方式读则可以读各种类型用scanf %d读取文本格式打开的文件中的数字，读到的也是字符吗？ fscanf可以按指定格式读取文本文件，可以直接得到数值

user: user-0
content: 引用 3楼user-4 的回复:1. 文件中的整数是什么样子的？读是怎么读的？等等都会影响结果 ... 2. C 语言的表达式不是数学公式。你得找本书看看 C 语言表达式是怎么算的。应该植两个int相除，得到的还是int类型，所以截尾取整对吧

user: user-0
content: 引用 2楼paschen 的回复:2、 因为这里做是整数的除法，商的结果向小取整的，之后+0.5的时候会转换成double，得到3.5，然后又转换成int，变成3应该植两个int相除，得到的还是int类型，所以截尾取整对吧

user: user-0
content: 引用 1楼paschen 的回复:1、如果是用文本方式打开的，读到的是字符串，以二进制方式读则可以读各种类型用scanf %d读取文本格式打开的文件中的数字，读到的也是字符吗？

user: user-4
content: 1. 文件中的整数是什么样子的？读是怎么读的？等等都会影响结果 ... 2. C 语言的表达式不是数学公式。你得找本书看看 C 语言表达式是怎么算的。

user: user-3
content: 2、 因为这里做是整数的除法，商的结果向小取整的，之后+0.5的时候会转换成double，得到3.5，然后又转换成int，变成3

user: user-3
content: 1、如果是用文本方式打开的，读到的是字符串，以二进制方式读则可以读各种类型
user-0 提问: 数据结构，求大神看看这个怎么回事（错误已标出）

回复:
user: user-1
content: #include "stdafx.h" #include "malloc.h" #include "stdlib.h" #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct LNode{ 	int data; 	LNode *next; }LNode,*LinkList; void GetElem_L(LinkList L,int i,int &e)//第i个元素值赋给e { 	LNode *p; 	p=L->next;int j=1; 	while(p&&j<i) 	{ 		p=p->next;++j;//这儿报错，error C2227: left of '->next' must point to class/struct/union。应该怎么修改呀。 	} } int main(int argc, char* argv[]) { 	printf("Hello World!\n"); 	return 0; }

user: user-2
content: int *next; // 应该struct LNode *next int *p;
user-0 提问: 请问枚举和宏定义可以这样用吗？

回复:
user: user-1
content: 不可以的 楼上说可以的是不正确的 刚刚也遇到这样的问题

user: user-0
content: 引用 3 楼 fefe82 的回复:不可以。  预编译发生在编译之前，enum E 的定义根本不会被处理。  预编译里能够替换的只有 define 。  在 #if 之后，所有不能通过 #define 被替换为字面量的标识符和关键字都会被替换为0。  #define DEF A   #if DEF == A // 定义一些代码 #elif DEF == B // 定义另外一些代码 #endif 会变成  #define DEF A   #if 0 == 0 // 定义一些代码 #elif 0 == 0 // 定义另外一些代码 #endif  无论你把 DEF #define 成 A B C D ... ，都是一样的。  ======================== 一下是可以的： #define DEF 1   #if DEF == 1 // 定义一些代码 #elif DEF == 2 // 定义另外一些代码 #endif 引用 3 楼 fefe82 的回复:不可以。  预编译发生在编译之前，enum E 的定义根本不会被处理。  预编译里能够替换的只有 define 。  在 #if 之后，所有不能通过 #define 被替换为字面量的标识符和关键字都会被替换为0。  #define DEF A   #if DEF == A // 定义一些代码 #elif DEF == B // 定义另外一些代码 #endif 会变成  #define DEF A   #if 0 == 0 // 定义一些代码 #elif 0 == 0 // 定义另外一些代码 #endif  无论你把 DEF #define 成 A B C D ... ，都是一样的。  ======================== 一下是可以的： #define DEF 1   #if DEF == 1 // 定义一些代码 #elif DEF == 2 // 定义另外一些代码 #endif  明白了，非常感谢。

user: user-2
content: 参考gcc源代码中处理宏和处理枚举相关源代码片断。

user: user-3
content: 显然是不行的，预处理指令只处理那些 # 开头的行，而且一切判断都必须是字面值或者宏名称，A、B 这些枚举值对于预处理器来说只是一些文字而已，根本还没有到语法解析层面。

user: user-4
content: 楼上说的对，预编译阶段时还不会处理你的enum，所以无论你宏怎么定义，执行的都是#if DEF == A 片断代码

user: user-5
content: 不可以。  预编译发生在编译之前，enum E 的定义根本不会被处理。  预编译里能够替换的只有 define 。  在 #if 之后，所有不能通过 #define 被替换为字面量的标识符和关键字都会被替换为0。  #define DEF A   #if DEF == A // 定义一些代码 #elif DEF == B // 定义另外一些代码 #endif 会变成  #define DEF A   #if 0 == 0 // 定义一些代码 #elif 0 == 0 // 定义另外一些代码 #endif  无论你把 DEF #define 成 A B C D ... ，都是一样的。  ======================== 一下是可以的： #define DEF 1   #if DEF == 1 // 定义一些代码 #elif DEF == 2 // 定义另外一些代码 #endif

user: user-4
content: 可以的   enum E { 	A, 	B, };   后面加上分号

user: user-6
content: 可以，C的枚举相当于常量，在编译阶段枚举就会替换成常量。
user-0 提问: 各位请问这段代码哪里错了

回复:
user: user-1
content: 第二层while循环条件不对  int main() { 	char a[50] = "abcdecdffcdg"; 	char b[5] = "cd"; 	char c[5] = "dc";  	char *pa = a; 	char *pb = b; 	char *pc = c; 	pa = strstr(pa, pb);  	while (pa != NULL) 	{ 		while (*pc != '\0') 		{ 			*pa = *pc; 			pa++;  			pc++;  		} 		pc = c; 		pa = strstr(pa, pb); 	}  	printf("%s\n", a); 	return 0; }
user-0 提问: 菜鸟。。求解。。（双循环链表

回复:
user: user-0
content: 引用 4 楼 paschen 的回复:因为他们指向同一块内存，你通过一个指针改变这片内存内容，另一个指针获得的当然也是变化后的 明白了  ：） 我把 t = s 改为 t = s->prior 就可以了

user: user-0
content: 引用 2 楼 user-2 的回复:你把s=t-＞prior;这句写在t=s;之后就是你要的效果了 不行啊。。我想做个双循环的就地逆置，，加这句还是不行的

user: user-1
content: 因为他们指向同一块内存，你通过一个指针改变这片内存内容，另一个指针获得的当然也是变化后的

user: user-0
content: 引用 1 楼 user-2 的回复:s没向后移，s和t指向同一个节点啊 那我想把s在第十行位置保存的地址维持在t 里面不变，要怎么办

user: user-2
content: 你把s=t-＞prior;这句写在t=s;之后就是你要的效果了

user: user-2
content: s没向后移，s和t指向同一个节点啊
user-0 提问: free产生的断点，我知道不怪free，但自己实在查不出来，帮忙看一下

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:容我问一句，ClearBN中memset(ClTar->numP,NULL,ClTar->size*sizeof(int))，不应该是sizeof(char)吗？ 。。。。。。。。。。。。。。。。。。 好了。。谢谢。不知道怎么输成int的。。糗。。。

user: user-1
content: 容我问一句，ClearBN中memset(ClTar->numP,NULL,ClTar->size*sizeof(int))，不应该是sizeof(char)吗？

user: user-0
content: 可能是这里出错了  作用是向后顺移空间内的数据。 应该是这个，因为没触发这个函数时，不会有断点。
user-0 提问: 程序过不去不知道是什么问题

回复:
user: user-1
content: 换成换掉VC6了 http://blog.csdn.net/cometnet/article/details/19551125

user: user-2
content: 最后一条语句，return 0后面没有分号 ，应该为 return 0;

user: user-3
content: 引用 8 楼 myloveqingmu 的回复:[quote=引用 5 楼 u010165006 的回复:] 用 char *str[]={ "      ******        ", "   *******          ", "      *********    " }; 再循环输出比较方便。 也可以这样：  #include <stdio.h>  static char s[] = "********\n" "*      *\n" "********\n";  int main() {     printf("%s", s);     return 0; } [/quote]  这个可以有。

user: user-4
content: #include <stdio.h> int main() {     printf(         "********\n"         "*      *\n"         "********\n"     );     return 0; }

user: user-5
content: 老实说你可以先编译build或者compile-再连接（或者执行）。这样可以看见一些error。仔细读一读那些ide给你提示的错误

user: user-6
content: 引用 5 楼 u010165006 的回复:用 char *str[]={ "      ******        ", "   *******          ", "      *********    " }; 再循环输出比较方便。 也可以这样：  #include <stdio.h>  static char s[] = "********\n" "*      *\n" "********\n";  int main() {     printf("%s", s);     return 0; }

user: user-3
content: 用 char *str[]={ "      ******        ", "   *******          ", "      *********    " }; 再循环输出比较方便。

user: user-4
content: 第二行到最后一行开头的printf(和第一行到倒数第二行末尾的）；可以去掉。

user: user-7
content: 这是得多无聊，写这么多printf

user: user-8
content: return 0 后面少了分号

user: user-9
content: 楼上正解，没有分号。

user: user-10
content: return 0; 没有分号
user-0 提问: C语言中传递一个二维数组

回复:
user: user-1
content: 函数参数使用float(*)[n][n]  假设array是一个float[n][n]的二维数组，调用时使用&array

user: user-2
content: 因为a和b要在不同的函数中使用，所以应该把a和b定义成全局变量或者主函数里的变量，建议定义在主函数里，然后把a和b的地址传入input，在里面分配内存、初始化，以后每个函数都要传递a个b两个参数，不过如果程序较小，定义成全局变量也行，就不用每次都传了

user: user-0
content: 首先感谢你的回复，你说的我都能理解，但是用到二维数组，操作起来我就蒙了，你能否帮我调试一下，让我学习学习，我调试了一下午也没对，谢谢。
user-0 提问: 排序模块部分首位置莫名出现1！ 很奇怪......

回复:
user: user-0
content: 很尴尬 小弟我也发现了错误  哎@—@

user: user-1
content: 是你自己多打了一个1：  printf("排序后的数组是:\n1");  后面多了个1
user-0 提问: 关于C/C++中的地址读取错误问题

回复:
user: user-0
content: 哦     懂了  谢谢各位大神啦   原来是我在第二次修改代码的时候弄错了  谢谢各位

user: user-1
content: void CreateLinkList_L(LinkList &l, int n) //顺序输入n个数据元素插入单链表尾部 {     LinkList p,r;     InitLinkList(L);     r = l;     printf("please enter the value of node:\n");     for (int i = 1; i <= n; i++)     {         p = new LNode;         scanf_s("%d", &p->date);         r->next = p;         r = p;     }     r->next = NULL; //**************不是l->next，是r->next或p->next********************************** }

user: user-2
content: 因为你CreateLinkList_L函数最后让l->next = NULL; 这样之后当然进不了循环了  DisplLinkList中的p也就为NULL
user-0 提问: c语言程序，请高手给我看看变步长4阶龙格库塔法解常微分方程组的程序，非常感谢！

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

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

user: user-3
content: 先手工算一下，确保过程没问题了，再把过程写成程序

user: user-0
content: return z1;但出来的数值解跟解析解不一样，是主函数出问题了？

user: user-3
content: rkf()函数的return语句呢？

user: user-4
content: 点第二个按钮（重试），然后点中断，通过调用堆栈定位到相关代码观察分析原因
user-0 提问: 新手问一个问题

回复:
user: user-0
content: 引用 1楼user-3 的回复:这样写：max = x > y ? x : y;  其他的同理改万分感谢

user: user-1
content: 治好了我多年来的颈椎病。

user: user-2
content: 楼上正解

user: user-3
content: 这样写：max = x > y ? x : y;  其他的同理改
user-0 提问: C语言做的小程序，其中一个模块做计算器，但是执行结果闪退

回复:
user: user-1
content: system("pause")

user: user-2
content: #pragma warning(disable:4996) ……

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

user: user-3
content: 先找出是哪一句引起的闪退。 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: scanf_s比scanf多一个参数。 比如你scanf("%d", &a); scanf_s就要写成scanf_s("%d", &a, sizeof(a));

user: user-5
content: ？，我把scanf_s全部改成了scanf，（因为不改编译不通过），然后运行了一下，没有出现闪退。可以正常运行。。

user: user-6
content: 计算器程序界面不错！  推荐楼主学习C++ Builder图形用户界面，入门比较容易。 仅供参考： 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/ 学C++还是C#、Java？ http://blog.163.com/tab_98/blog/static/11924097201511274543737/

user: user-7
content: scanf_s("%s",Expression); 这句，scanf_s比scanf要多一个参数
user-0 提问: 新手问一个问题，求大神解答

回复:
user: user-1
content: 引用 5 楼 iizhuzhu 的回复:引用 4楼flying_music 的回复:你的两位数是怎么输入的啊，中间加空格了吗？你可以用gdb调试一下，看看程序到底跑哪儿去了大神，为什么要加空格，求指教 "%d%d"，输入两个数中间必须要用空白字符隔开，然后再按回车 你原来只是输入了一个两位数，回车后给了变量shi，而ge还没有得到值，scanf还没有返回呢，所以就没有任何反应了

user: user-0
content: 引用 4楼flying_music 的回复:你的两位数是怎么输入的啊，中间加空格了吗？你可以用gdb调试一下，看看程序到底跑哪儿去了瞧我这，不加空格就是一个数了，谢谢

user: user-0
content: 引用 4楼flying_music 的回复:你的两位数是怎么输入的啊，中间加空格了吗？你可以用gdb调试一下，看看程序到底跑哪儿去了大神，为什么要加空格，求指教

user: user-2
content: 你的两位数是怎么输入的啊，中间加空格了吗？你可以用gdb调试一下，看看程序到底跑哪儿去了

user: user-0
content: 引用 1楼user-4 的回复:程序执行完就退出了，在最后加上getchar();不对，要不您检查一下我的代码？作用就是输入一个俩位数，用英语表示出来

user: user-3
content: 程序执行完就退出了，在最后加上getchar();

user: user-4
content: 程序执行完就退出了，在最后加上getchar();
user-0 提问: 用C语言编写出一个界面窗口

回复:
user: user-1
content: 楼主如果想用BC编写图形程序，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。  下载一个EasyX包，里面有完整的函数手册。EasyX官网有实例。  仅供参考： 用绘图语句画机器猫（初学C语言的同学必看） http://blog.163.com/tab_98/blog/static/1192409720150316223680/

user: user-2
content: http://www.cnblogs.com/mr-wid/archive/2012/10/08/2715673.html

user: user-3
content: \BC\TVISION目录下是文本窗口系统的源代码
user-0 提问: 求推荐C语言入门书籍

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

user: user-2
content: C Primer Plus    C语言经典入门书籍  另参看：http://bbs.csdn.net/topics/390966354/
user-0 提问: 如何利用EOF终止scanf输入多行带空格的字符串

回复:
user: user-1
content: 解决了没有，我的也要三个，要死了

user: user-2
content: 引用 5 楼 helloylzheng 的回复:[quote=引用 3 楼 赵4老师的回复:]for(int t=0;EOF!=scanf("%[^\n]\n",str[t]);t++); 还是不行啊，您的代码需要按下两次eof才能停止[/quote] 参考2楼。

user: user-0
content: 引用 3 楼 赵4老师的回复:for(int t=0;EOF!=scanf("%[^\n]\n",str[t]);t++); 还是不行啊，您的代码需要按下两次eof才能停止

user: user-0
content: 引用 3 楼 赵4老师的回复:for(int t=0;EOF!=scanf("%[^\n]\n",str[t]);t++); 等我回去就试试，先谢谢您

user: user-2
content: for(int t=0;EOF!=scanf("%[^\n]\n",str[t]);t++);

user: user-2
content: <Enter>,<Ctrl+Z>,<Enter>

user: user-3
content: http://blog.csdn.net/liuhuiyi/article/details/8196790
user-0 提问: 一道简单的ACM题目求助，实在搞不懂为什么了，编译器能得出正确的结果，但是提交却出错

回复:
user: user-0
content: 搞出来了 是我排序的问题   用动态分配内存都一样啦  报的是Wrong Answer的错  不是内存的问题  还是谢谢了

user: user-1
content: 引用 3 楼 csdn_blog_lcl的回复:受教了 ，可我想知道我的代码为什么提交不了 我参考了别人的代码，没有找出缘由 都说你用动态分配内存就可以了

user: user-2
content: 出啥错？  引用 3 楼 csdn_blog_lcl 的回复:受教了 ，可我想知道我的代码为什么提交不了 我参考了别人的代码，没有找出缘由

user: user-0
content: 受教了 ，可我想知道我的代码为什么提交不了 我参考了别人的代码，没有找出缘由

user: user-1
content: struct student stu[1000];  struct student outlineStudents[1000];  你的struct student就有20多字节， 不要在栈上分配那么大的数组，使用动态申请内存吧

user: user-0
content: #include<stdio.h> #include<string.h>  struct student { 	char id[21]; 	int totalGrades;   };    int main() { 	int N,M,G,outlineNum,index,proNum; 	int i,j,k; 	struct student stu[1000];  	struct student outlineStudents[1000];  //  出线的学生数组 	int gradesArr[12];   //每道题的分数数组 	while(scanf("%d",&N)!=EOF && N) 	{ 		outlineNum = 0; 		scanf("%d%d",&M,&G); 		for(i = 1; i <= M; i++) 		{ 			scanf("%d",&gradesArr[i]); 		} 		for(j = 0;j < N;j++) 		{ 			stu[j].totalGrades = 0; 			scanf("%s%d",stu[j].id,&proNum); 			for(i = 0;i < proNum;i++) 			{ 				scanf("%d",&index); 				stu[j].totalGrades += gradesArr[index]; 			} 			if(stu[j].totalGrades >= G) 			{ 				outlineStudents[outlineNum++] = stu[j];   // 统计出线人数 			} 		} 		for(i = 0 ;i < outlineNum-1;i++)   //  按照成绩排序 		{ 			for(k = i+1;k < outlineNum;k++) 			{ 				if(outlineStudents[i].totalGrades < outlineStudents[k].totalGrades) 				{ 					struct student temp = outlineStudents[i]; 					outlineStudents[i] = outlineStudents[k]; 					outlineStudents[k] = temp; 				} 				if(outlineStudents[i].totalGrades == outlineStudents[k].totalGrades) 				{ 					if(strcmp(outlineStudents[i].id,outlineStudents[k].id) == 1) 					{ 						struct student temp = outlineStudents[i]; 						outlineStudents[i] = outlineStudents[k]; 						outlineStudents[k] = temp; 					} 				} 			} 		} 		printf("%d\n",outlineNum);   //  开始输出 		for(i = 0; i < outlineNum;i++) 		{ 			printf("%s %d\n",outlineStudents[i].id,outlineStudents[i].totalGrades); 		} 	} 	return 0; }  这样可能好看点
user-0 提问: C语言中计算与硬盘IO的并行/并发执行

回复:
user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-2
content: 那就搜索"linux 异步IO"啊, 标准库与系统关系大的像是IO, 线程都和玩具一样,  简单用一下还行, 复杂的还是用操作系统的吧

user: user-0
content: 引用 1 楼 user-2 的回复:windows api自带异步IO参数 多谢回复！ 额，不过是在linux下的，有没有对应的呢？有的话可否讲具体一点？

user: user-2
content: windows api自带异步IO参数
user-0 提问: 在VS2015中多个文件向一个文件中追加数据，下面的程序该怎么修改

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

回复:
user: user-1
content: 栈的方向是你后压栈的变量与先压入栈的变量的方向有关，而与单个变量的大端与小端存储无关

user: user-2
content: 栈区的增长方向是从高地址到低地址，也就是说栈顶的地址低于栈底

user: user-3
content: 在C语言中，多字节变量（例如int）存在字节序的问题，即：高位字节存在内存高地址处还是低地址处，为此有大端序和小端序的区别。 楼主这里混淆了一个概念，就是字节序跟变量是保存在全局数据区还是在栈区是没有关系的。  其实字节序总结一下很好记忆的 大端序：高低低高 小端序：高高低低  一般x86平台都是小端序，也就是高高低低，即：高位字节存放在内存高地址处，低位字节存放在低地址处。对于整型变量a=0x12345678，其内存布局为78 56 34 12 大端序一般在以太网通信中，所以又叫网络字节序，因此上面的变量a在大端序系统上就是12 34 56 78  此外，栈的生长方向在x86平台都是从高地址往低地址方向，在其他平台则不一定，例如，在ARM平台上，栈的增长方向是可以配置的

user: user-4
content: 堆栈增长方向与大小端没有任何关系。
user-0 提问: 求教指针运用问题。c语言入门经典第7章例题13题想了两天还是不明白

回复:
user: user-1
content: 引用 4 楼 lbc_77 的回复:谢谢各位大神！  一、[quote=引用 1 楼 paschen 的回复:] 问题1，因为上面的循环在输入为\n时结束，此时pBuffer还会自加1，所以已经指向了下一个字符 意思是指，当pbuffer - buffer ==  BUFFER_LEN-1时已经结束while循环，但pbuffer++导致又指向了下一个字符。此时pbuffer - buffer ==  BUFFER_LEN？  二、引用 2 楼 paschen 的回复:问题2，不等于 前者在&&前半部分为假时则不会执行后半部分  而后者总会至少执行一次getchar 请问我的循环需要怎么修改才与原文的逻辑相符，运算结果相同？  三、请大神帮忙回答下第3个问题。百思不得其解。 非常感谢！ [/quote]  具体没细看，可能写错了，不必太纠结  建议单步跟踪程序运行，观察每一步程序变化，比较容易想

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

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

user: user-0
content: 谢谢各位大神！  一、引用 1 楼 paschen 的回复:问题1，因为上面的循环在输入为\n时结束，此时pBuffer还会自加1，所以已经指向了下一个字符 意思是指，当pbuffer - buffer ==  BUFFER_LEN-1时已经结束while循环，但pbuffer++导致又指向了下一个字符。此时pbuffer - buffer ==  BUFFER_LEN？  二、引用 2 楼 paschen 的回复:问题2，不等于 前者在&&前半部分为假时则不会执行后半部分  而后者总会至少执行一次getchar 请问我的循环需要怎么修改才与原文的逻辑相符，运算结果相同？  三、请大神帮忙回答下第3个问题。百思不得其解。 非常感谢！

user: user-4
content: buffer是数组首地址，pbuffer初次等于buffer，你可以想象一格一格（表示内存空间）的作文纸，buffer表示起始格（buffer[0])地址，后面一格是buffer[1]，最后一格是buffer[BUFFER_LEN-1]，这BUFFER_LEN格是连续排列的。pbuffer首先指向buffer[0]，pbuffer++可以使pbuffer指向下一格（即buffer[1]），如果pbuffer指向buffer[3]（第3格），pbuffer-buffer==3（就是第3格与起始格第0格的距离），pbuffer-buffer==BUFFER_LEN-1表示pbuffer指向最后一格了，pbuffer-buffer<BUFFER_LEN-1表示pbuffer还没到最后一格，然后*pbuffer = getchar()读一个字符存入 pbuffer指向的格，然后pbuffer++指向下一格，然后判断刚才读入的那格字符是不是'\n'回车符，如果pbuffer还没到最后一格而且读入的不是回车字符， while((pbuffer - buffer < BUFFER_LEN-1) &&((*pbuffer++ = getchar()) != '\n')); 语句是反复执行的（后面有一个;号表示空语句），直到条件不满足（到达了最后一格，或者读入了回车符）。

user: user-1
content: 问题2，不等于  前者在&&前半部分为假时则不会执行后半部分  而后者总会至少执行一次getchar

user: user-1
content: 问题1，因为上面的循环在输入为\n时结束，此时pBuffer还会自加1，所以已经指向了下一个字符
user-0 提问: 关于long double类型

回复:
user: user-0
content: 我回去试试，多谢各位

user: user-1
content: 个人感觉(我是小白)你的L应该表示的是，后面括号内运行后，结果的类型，然而，你后面括号内的类型是指数型(指数用什么来着我忘记了，或者指数没有表示的？)。楼上的表达式没错，计算机也能运行。(不过，我感觉不像是你想要的答案 /~~")ps:我也刚学，书上说:不要乱写，能省则省……

user: user-1
content: 引用 4 楼 user-5的回复:L 对应的类型是 long， 而不是long double l是long L是long double吧？

user: user-2
content: 3楼正解？

user: user-2
content: Floating-point constants default to type double. By using the suffixes f or l (or F or L — the suffix is not case sensitive), the constant can be specified as float or long double, respectively.

user: user-3
content: int main() {   long double a = 1.23L;   return 0; } L后缀只能用来修饰常量，不能用来修饰表达式

user: user-2
content: long double y=(3.31e10L*2.01e-7L)/(7.16e-6L+2.01e-8L);

user: user-2
content: long double y=(3.31e10FL*2.01e-7FL)/(7.16e-6FL+2.01e-8FL);

user: user-2
content: Collapse AllExpand All      Code: All Code: Multiple Code: Visual Basic Code: C# Code: Visual C++ Code: J# Code: JScript   Visual Basic C# Visual C++ J# JScript Visual C++ Language Reference  C++ Floating-Point Constants  See Also  Send Feedback     Floating-point constants specify values that must have a fractional part. These values contain decimal points (.) and can contain exponents.  Floating-point constants have a "mantissa," which specifies the value of the number, an "exponent," which specifies the magnitude of the number, and an optional suffix that specifies the constant's type. The mantissa is specified as a sequence of digits followed by a period, followed by an optional sequence of digits representing the fractional part of the number. For example:    Copy Code  18.46 38.    The exponent, if present, specifies the magnitude of the number as a power of 10, as shown in the following example:    Copy Code  18.46e0      // 18.46 18.46e1      // 184.6    The exponent may be specified using e or E, which have the same meaning, followed by an optional sign (+ or -) and a sequence of digits. If an exponent is present, the trailing decimal point is unnecessary in whole numbers such as 18E0.  Floating-point constants default to type double. By using the suffixes f or l (or F or L — the suffix is not case sensitive), the constant can be specified as float or long double, respectively.  Although long double and double have the same representation, they are not the same type. For example, you can have overloaded functions like    Copy Code  void func( double );    and     Copy Code  void func( long double );    See Also Concepts Literals (C++) Send feedback on this topic to Microsoft.

user: user-4
content: L要写在常数后，不是一个计算的表达式后面，更不能是括号后面

user: user-5
content: L 对应的类型是 long， 而不是long double
user-0 提问: 是编译的问题，还是书上的写错了

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约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: 输出浮点数使用 %f    %d是整数类型

user: user-3
content: 一楼正解，估计你的那个平均数小于1，所以就打印出0了，程序应该结构没错

user: user-4
content: 打印时应当用 %f 却使用了 %d
user-0 提问: 为什么会打印出'D'来

回复:
user: user-1
content: 引用 7 楼 fefe82 的回复:[quote=引用 6 楼 hijack00 的回复:] 严格来说，你的代码是错误的，应该改成下面这样 printf("%c\n", *n); 但是由于编译器进行了隐式类型转换，所以你的代码也能编译通过。  这种隐式类型转换其实也是C语言中很多怪异错误的源泉，需要程序员对C语言语言特性有深入了解。 在类型转换这一点上，C++做了一些改进（static_cast, ...），能够减少此类错误发生。  匹配 ... 的时候指针没有隐式类型转换。  这就是一个 UB 。[/quote]  我的理解是：printf里面调用了vsnprintf，遇到%c的时候会将它遇到的参数，也就是n隐式转换为一个char类型。同理，如果遇到%f，就会将n隐式转换为一个float类型。也就是说，隐式转换是根据格式字符串来的。

user: user-2
content: 引用 6 楼 hijack00 的回复:严格来说，你的代码是错误的，应该改成下面这样 printf("%c\n", *n); 但是由于编译器进行了隐式类型转换，所以你的代码也能编译通过。  这种隐式类型转换其实也是C语言中很多怪异错误的源泉，需要程序员对C语言语言特性有深入了解。 在类型转换这一点上，C++做了一些改进（static_cast, ...），能够减少此类错误发生。  匹配 ... 的时候指针没有隐式类型转换。  这就是一个 UB 。

user: user-1
content: 严格来说，你的代码是错误的，应该改成下面这样 printf("%c\n", *n); 但是由于编译器进行了隐式类型转换，所以你的代码也能编译通过。  这种隐式类型转换其实也是C语言中很多怪异错误的源泉，需要程序员对C语言语言特性有深入了解。 在类型转换这一点上，C++做了一些改进（static_cast, ...），能够减少此类错误发生。

user: user-2
content: printf("%c\n",              n);       //^^ 需要一个 char    ^^提供了一个 char*

user: user-3
content: 通过％x将n的地址给打出来看看，将这个值第一个字节或者最后一个字节的数取出来的数正好是‘D’的ascii码的值。

user: user-4
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-5
content: 编译器不会去做这种类型检查（可变参数），所以能通过编译。为什么不做检查？因为技术上压根就做不到。format字符串在编译时可以压根不存在。比如这个format是通过读取文本内容来得到。  D是指针指向的地址，该段地址的第一个字节正好是D的acsii编码值

user: user-6
content: 可以编译，因为printf是可变参数函数，参数类型编译时不会检查  输出D由于是按字符去解释这个指针的值
user-0 提问: sprintf(tmp,"%02x",sign_result[i])，tmp出来8个16位数字的问题

回复:
user: user-1
content: sprintf(tmp,"%02x",(unsigned char)sign_result[i]);

user: user-2
content: 3#/4#的方法都可以。

user: user-3
content: sprintf(tmp, "%02x", sign_result[i] & 0xff);

user: user-4
content: http://en.cppreference.com/w/c/io/fprintf

user: user-5
content: 是 tmp 还是 sign_result[i] ？  %x 是用来输出 int 的，sign_result[i] 是 int 嘛？
user-0 提问: 关于C语言的Static关键字

回复:
user: user-1
content: 那就看这个：http://en.cppreference.com/w/cpp/language/static

user: user-2
content: static是存储限定符 它作用于函数时是：限定函数具有file scope，即文件作用域，在另外一个文件调用是肯定不行的，如果我没有记错的话 static作用域变量时： 看标准的示例，已经很明确了 int i1 = 1;         //definition, external linkage static int i2 = 2;  //definition, internal linkage extern int i3 = 3;  //definition, external linkage int i4;             //tentative definition, external linkage static int i5;      //tentative definition, internal linkage

user: user-3
content: 全局变量，在本文件中调用

user: user-4
content: static就是将这个东西"私有化", 如果用在一个头文件里面static修饰一个全局变量. 那么每一个#include该头文件的源文件都将持有独立的全局变量, 也就是在一个源文件修改将不会影响到 其他源文件, 这个特性当然是为了免得函数/变量重名了导致链接失败.

user: user-5
content: 不知所云
user-0 提问: VC++6.0运行库

回复:
user: user-1
content: 我也想要一个

user: user-2
content: 禁止win10更新已经快成为windows开发者的常识了！

user: user-0
content: 引用 3 楼 luciferisnotsatan的回复:都win10了，还用vc6。 想要继续用vc6，win10上装个虚机，虚机里装win98，然后win98上装vc6 装了虚拟机感觉电脑要爆掉

user: user-3
content: 用vs2013及以上。或者codeblocks,codelite,qt.全部免费好用

user: user-2
content: 想办法用英文版的msdev.exe替换中文版的msdev.exe

user: user-2
content: 用命令行方式使用VC6试试？ msdev myproj.dsw /MAKE "myproj - Win32 Debug" /REBUILD

user: user-4
content: 都win10了，还用vc6。 想要继续用vc6，win10上装个虚机，虚机里装win98，然后win98上装vc6

user: user-5
content: 换成VS http://blog.csdn.net/cometnet/article/details/19551125

user: user-6
content: 不要用VC6，珍爱生命，远离VC6
user-0 提问: gets放置位置问题

回复:
user: user-0
content: 引用 10 楼 luciferisnotsatan 的回复:[quote=引用 9 楼 Nick_gcmh 的回复:] [quote=引用 7 楼 luciferisnotsatan 的回复:] 编译器太老，或者你设置编译器使用C89标准。 C89标准里规定要放最前面。C99标准里，变量声明可以不用放在最前面。 我是网上直接下的VC6....是不是版本过低,有什么好的版本推荐下吗？谢谢~[/quote] vs201x版本的都没问题。[/quote] 多谢啦，我待会去下载试下。

user: user-1
content: 编译器问题，变量声明语句必须在其他语句前面

user: user-2
content: 引用 9 楼 Nick_gcmh 的回复:[quote=引用 7 楼 luciferisnotsatan 的回复:] 编译器太老，或者你设置编译器使用C89标准。 C89标准里规定要放最前面。C99标准里，变量声明可以不用放在最前面。 我是网上直接下的VC6....是不是版本过低,有什么好的版本推荐下吗？谢谢~[/quote] vs201x版本的都没问题。

user: user-0
content: 引用 7 楼 luciferisnotsatan 的回复:编译器太老，或者你设置编译器使用C89标准。 C89标准里规定要放最前面。C99标准里，变量声明可以不用放在最前面。 我是网上直接下的VC6....是不是版本过低,有什么好的版本推荐下吗？谢谢~

user: user-0
content: 引用 3 楼 lzhui1987 的回复:编译器问题，变量声明语句必须在其他语句前面 多谢回答！

user: user-2
content: 编译器太老，或者你设置编译器使用C89标准。 C89标准里规定要放最前面。C99标准里，变量声明可以不用放在最前面。

user: user-0
content: 引用 2 楼 weixin_29983527 的回复:你的编译器太古老了，更新吧 多谢啦！

user: user-0
content: 引用 2 楼 weixin_29983527 的回复:你的编译器太古老了，更新吧 请问用什么编译器较好？我用的好像是Vc6...

user: user-0
content: 引用 1 楼 user-4 的回复:C语言要求变量声明在函数开关，C++下则没问题 谢谢答复

user: user-3
content: 你的编译器太古老了，更新吧

user: user-4
content: C语言要求变量声明在函数开关，C++下则没问题
user-0 提问: 关于scanf的问题

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

user: user-2
content: 引用 3 楼 loveqise的回复:引用 1楼paschen 的回复:显然越界了，不要用不出错来证明是对的重要的是num 20我没有初始化，按照正常来说应该指向一个未知区域，数值未知。可是每次程序运行都正常，正好点击我输入的第二十一个字母 因为你的输入把不属于你的内存给覆盖了

user: user-0
content: 引用 2楼小灸舞 的回复:越界并不等于程序崩溃。 如果你越界写入的地方并没有重要信息或者被别的变量占用，一般程序是不会崩溃的。重要的是num 20我没有初始化，按照正常来说应该指向一个未知区域，数值未知。可是每次程序运行都正常，正好是我输入的第二十一个字母

user: user-0
content: 引用 1楼paschen 的回复:显然越界了，不要用不出错来证明是对的重要的是num 20我没有初始化，按照正常来说应该指向一个未知区域，数值未知。可是每次程序运行都正常，正好点击我输入的第二十一个字母

user: user-3
content: 越界并不等于程序崩溃。 如果你越界写入的地方并没有重要信息或者被别的变量占用，一般程序是不会崩溃的。

user: user-2
content: 显然越界了，不要用不出错来证明是对的
user-0 提问: lseek 参数

回复:
user: user-1
content: 引用 10 楼 wdkcbang 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 搜“使用gdb调试”  可这是个系统调用，那我岂不是还得编译ubuntu内核，开内核hacker，然后阅读内核代码，找对应的驱动，才能设置正确的断点。然后应该是kgdb吧，还要有两条电脑，一台作为目标机，单步跟到猴年马月了。。[/quote] 只为成功找方法，不为失败找理由。

user: user-1
content: 搜“使用gdb调试”

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  哈哈，初始发帖，竟然看到赵老师的经典回复。不过我实话实说，普通的磁盘文件操作，汇编不会，ubuntu内核断点调试更不会，要单步调试看结果感觉基本不可能。

user: user-0
content: 引用 2 楼 paschen 的回复:你从文件头偏移一个负的距离没有意义吧，传参过程中不会转换成其他类型，如果函数实现中可能会根据不同情况采取不同操作  是的，我猜错了，打印返回值，根据返回值，的确没有被转换，是被特殊处理了，但是不明白为何特殊处理了int和long型的参数，使用-10000l就会正常返回-1. 就是普通的文件操作，对应的是磁盘驱动。

user: user-1
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:搜“使用gdb调试”  可这是个系统调用，那我岂不是还得编译ubuntu内核，开内核hacker，然后阅读内核代码，找对应的驱动，才能设置正确的断点。然后应该是kgdb吧，还要有两条电脑，一台作为目标机，单步跟到猴年马月了。。

user: user-0
content: 错了，是产生一个 4.3G 的文件。如果使用 -10000l 就没有问题，会返回-1，打印errno是参数错误。如果是-10000就会被转换成无符号int。

user: user-0
content: 引用 2 楼 paschen 的回复:你从文件头偏移一个负的距离没有意义吧，传参过程中不会转换成其他类型，如果函数实现中可能会根据不同情况采取不同操作  你可以试试，ubuntu12.04 64位下，会产生一个3.4G的文件，按理说应该是参数错误，返回-1才对。

user: user-0
content: 引用 1 楼 user-3 的回复:为什么会认为隐式转换为long long? 那也应该用llseek, 而不是lseek  因为参数原形是long long，传一个int，难道不是应该转换为long long吗？我写一个简单的函数，就可以打印值，而且打印的是一样的，  void long_long(long long a) {     printf("a %lld \n", a); }  int mainL() {     long_long(-10000);     long_long(-10000l); }  但是我用 lseek(fd, -10000, SEEK_SET); 就会产生一个3.4G的文件，显然-10000被传到驱动后变成了无符号int，用-10000l就没有问题。系统是ubuntu12.04 64 位，不知道什么原因。  至于你说的llseek也是一样的结果啊，SEEK_SET应该不接受负值才对。

user: user-2
content: 你从文件头偏移一个负的距离没有意义吧，传参过程中不会转换成其他类型，如果函数实现中可能会根据不同情况采取不同操作

user: user-3
content: 为什么会认为隐式转换为long long? 那也应该用llseek, 而不是lseek
user-0 提问: 如果不涉及数组/指针越界的话,栈有没有可能损坏?

回复:
user: user-1
content: x86上调用约定不一样也会, 不过这个调试模式下, 也是函数返回时直接报错, 错误信息也是非常清楚..

user: user-1
content: 其实都是越界操作, 越界操作还不算啥, 这可能修改到已存在的数据, 很难检查出来. #include <iostream> #include <functional>  auto f() {     int a = 0;     return std::function<void()>([&]() { a = 1; }); }  auto test(std::function<void()> func) {     int tmp[10] = { 0 };     func(); }  int main() {     test(f());     return 0; }

user: user-2
content: 无限递归会导致栈溢出

user: user-3
content: struct big_struct {     int a[1000000]; // 足够大 };  void func (struct big_struct param) {     return; }  在某些调用协议、CPU、编译器下，如果 sizeof(struct big_struct) 足够大，返回的时候堆栈会直接坏掉。

user: user-4
content: http://blog.csdn.net/rain_young/article/details/38492541
user-0 提问: 用scanf把值赋给指针指向的值，提示出错

回复:
user: user-0
content: 引用 1 楼 Rewen 的回复:和编译器有关吧。  你可以写在一个函里面试试看，比如  abc(){     int  x  = 0;   int *p  = &x;   scanf("%d", p); }  我看很多编译器是不会报错的。 我用的Code::Blocks 16.01， 把你的代码运行了一下没有问题，加上printf打印也没有问题……  引用 1 楼 Rewen 的回复:和编译器有关吧。  你可以写在一个函里面试试看，比如  abc(){     int  x  = 0;   int *p  = &x;   scanf("%d", p); }  我看很多编译器是不会报错的。 谢谢……我用的codeblocks，后来仔细一看是一个逗号标错位置了……改了一下好了……不好意思

user: user-1
content: 和编译器有关吧。  你可以写在一个函里面试试看，比如  abc(){     int  x  = 0;   int *p  = &x;   scanf("%d", p); }  我看很多编译器是不会报错的。
user-0 提问: 【高手】中文标点符号或者全角字符和十六进制的相互转换（c语言）

回复:
user: user-0
content: 有utf8编码的字符串与十六进制之间转换的示例吗？

user: user-1
content: http://blog.csdn.net/qiuzhuoxian/article/details/4645007

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

user: user-2
content: 引用 3 楼 u013283985 的回复:有utf8编码的字符串与十六进制之间转换的示例吗？ 上面代码中44～63行用于utf8编码的字符串毫无违和感。