Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c语言中的“*”号

回复:
user: user-1
content: A field width or precision, or both, may be indicated by an asterisk * instead of a digit string.  In this case, an int argument supplies the field width or precision.

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-3
content: * An optional starting asterisk indicates that the data is to be read from the stream but ignored (i.e. it is not stored in the location pointed by an argument).

user: user-4
content: 一般输出是这样： int num=123; printf("%10d\n" ,  num );  //表示按最小数据宽度为10个字符输出整数num 而如果10这里我们想用一个变量来表示，则会采用： int len=10 ; int num=123; printf("%*d\n" , len, num );   输出结果与上面相同。
user-0 提问: 指针为什么可以这样使用

回复:
user: user-1
content: 指针请看 http://blog.csdn.net/zhangxiangdavaid/article/details/37885275

user: user-2
content: 好像在C语言，一维数组的数组名就是一维指针常量，二维数组名就是二维指针常量。 malloc在C语言里面，就是分配堆空间，返回时堆指针，这里初始化outstr，没有错。

user: user-3
content: 问题: 3) 网友给出的参考代码有个bug . 如果连续重复字符多于9个 .即 count 为两位数以上.... 楼主可以当练习,把它找出来...然后  fix 它....

user: user-4
content: 这是基本的使用方法啊。。

user: user-5
content: 1 指针本来就可以这样用的 2 总有一个地方需要分配，看公司设计需求了 找本基础书翻一下，一般都会讲到
user-0 提问: Delaunay三维三角剖分源码

回复:
user: user-1
content: 同学，我的毕业设计也是这个，可以给个联系方式，探讨一下吗

user: user-2
content: 引用 9 楼 cmj1109 的回复:你用的是哪种算法啊？是Crust、Power Crust、Cocone？还是生长算法、插入算法、基于四面体的算法等等？ 三维Delaunay生成算法有很多种，比较经典的就是上述几种，你要说明白你用的是哪种算法？而且一般不可能在网上直接有源代码提供。     你好，你对delaunay中的分治法熟悉吗？有些问题想请教你一下？

user: user-3
content: 3DS Max Script或者VBA for AutoCAD里不知道有没有？ 但我知道Matlab和OpenCV里有，输入点云数据，直接调用函数就可以生成三维Delaunay，生成质量挺高的。 Matlab中的相关函数是delaunay和delaunayn，具体的用法在matlab帮助里介绍的挺清楚的，楼主可以看一下。

user: user-4
content: 不知道3DS Max Script或者VBA for AutoCAD里面是不是有内置相关功能？

user: user-3
content: 你用的是哪种算法啊？是Crust、Power Crust、Cocone？还是生长算法、插入算法、基于四面体的算法等等？ 三维Delaunay生成算法有很多种，比较经典的就是上述几种，你要说明白你用的是哪种算法？而且一般不可能在网上直接有源代码提供。

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

user: user-4
content: 引用 5 楼 acm19931223 的回复:。。。毕不了业了都 出来混，迟早是要还的。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 5 楼 acm19931223 的回复:] 。。。毕不了业了都 出来混，迟早是要还的。[/quote] 搜的论文都是研究生毕业论文，研究生那边都没有人搞，我已经很努力的去做了，只是现在卡在了一些地方，程序有点问题，想找份正确的对比一下，还什么了

user: user-0
content: 。。。毕不了业了都

user: user-5
content: 引用 3 楼 zhao4zhong1 的回复:[quote=引用 2 楼 zhangxiangDavaid 的回复:] 如此搜索 会有效地利用搜索，是现代码农必须掌握的技能之一。[/quote] 说的好

user: user-4
content: 引用 2 楼 zhangxiangDavaid 的回复:如此搜索 会有效地利用搜索，是现代码农必须掌握的技能之一。

user: user-5
content: 如此搜索

user: user-4
content: http://www.baigoogledu.com/s.php?hl=zh-CN&q=Delaunay+%C8%FD%CE%AC+%C8%FD%BD%C7%C6%CA%B7%D6
user-0 提问: 这是本校OJ上的一道题目，本人菜鸟，遂提出来问，求各位大神求指点迷津！（我是想学到更多知识，并不是想要求正确代码，只求大神们指点指点，谢谢）

回复:
user: user-0
content: 引用 6 楼 user-1 的回复:你说的对，max也应该改过来才是正解。 不改为什么也不出错呢？我觉得原因是这样的：max不改，那么把2147483648赋值给它的时候，实际上已经超出了long的范围，变成了一个负数。但是，接下来if(px>max)，涉及到一个有符号数和无符号数的比较，需要先把有符号数转换从无符号数，max这个负数就又变回到2147483648了。 http://blog.csdn.net/zdl1016/article/details/2507743  受教了，谢谢

user: user-1
content: 你说的对，max也应该改过来才是正解。 不改为什么也不出错呢？我觉得原因是这样的：max不改，那么把2147483648赋值给它的时候，实际上已经超出了long的范围，变成了一个负数。但是，接下来if(px>max)，涉及到一个有符号数和无符号数的比较，需要先把有符号数转换从无符号数，max这个负数就又变回到2147483648了。 http://blog.csdn.net/zdl1016/article/details/2507743

user: user-0
content: 引用 4 楼 user-1 的回复:[quote=引用 2 楼 ma815841356 的回复:] 你好，按你说的把px的类型改成unsigned long后, 输入测试数据1 2 -2147483648 1答案符合题意，但如果输入测试数据为题目的测试用例的话，答案就出错了。  麻烦再看看是否有其他地方的错误，谢谢  顺便请问题目中“32位有符号整数”是什么意思？ 不会吧？我试过了，没错呀。你的输出是什么？ “32位有符号整数”就是4字节的整数，范围是2147483647 ~ -2147483648, 现在一般的编译器的int类型应该就是。 http://blog.csdn.net/xuexiacm/article/details/8122267[/quote]  你好，原先理解错了你的意思，很抱歉，后来我只把px的类型改成unsigned long后，提交后就对了，想请问一下为什么只需要更改px的类型，那max不需要也改成unsigned long吗？本人菜鸟不想只是做对了一道题而已，很希望学到更多知识，谢谢

user: user-1
content: 引用 2 楼 ma815841356 的回复:你好，按你说的把px的类型改成unsigned long后, 输入测试数据1 2 -2147483648 1答案符合题意，但如果输入测试数据为题目的测试用例的话，答案就出错了。  麻烦再看看是否有其他地方的错误，谢谢  顺便请问题目中“32位有符号整数”是什么意思？ 不会吧？我试过了，没错呀。你的输出是什么？ “32位有符号整数”就是4字节的整数，范围是2147483647 ~ -2147483648, 现在一般的编译器的int类型应该就是。 http://blog.csdn.net/xuexiacm/article/details/8122267

user: user-0
content: 你好，刚才理解错了你的意思，很抱歉，后来我只把px的类型改成unsigned long后，提交后就对了，请问为什么只需要更改px的类型，麻烦结合这道题目解释一下，本人菜鸟不想只是做对了一道题而已，很希望学到更多知识，谢谢

user: user-0
content: 你好，按你说的把px的类型改成unsigned long后, 输入测试数据1 2 -2147483648 1答案符合题意，但如果输入测试数据为题目的测试用例的话，答案就出错了。  麻烦再看看是否有其他地方的错误，谢谢  顺便请问题目中“32位有符号整数”是什么意思？

user: user-1
content: 楼主的思路和代码都不错，再注意一些细节就行了。 比如，题目已经说了，“就直接给-2147483648分了”，那么试试这个数据： 1 2 -2147483648 1  建议把px的类型改成unsigned long
user-0 提问: 新人求助~谢谢大家

回复:
user: user-1
content: VC不支持VLA 不要在C++中使用VLA（尽管一些C++编译器支持VLA，但C++标准是不支持的）

user: user-0
content: 谢谢大家！我刚初学，溢出什么的也半懂不懂的  还有刚发现一个问题 为什么C-Free运行和Dev-C++都不会出错，但VC++6.0运行就出错了呢？@弓长羊羽  @iamlbk

user: user-2
content: 更正：可以不用存储矩阵元素

user: user-2
content: 数组分配在栈上，而栈的大小是有限的 只是打印出n阶单位矩阵，可以存储矩阵元素：  int main(void) { 	int i, j, b; 	do 	{ 		scanf("%d", &b); fflush(stdin); 	} while (b <= 0); 	for (i = 0; i < b; i++) 	{ 		for (j = 0; j < b; j++) 		{ 			if (i == j) printf("%-2d", 1); 			else printf("%-2d", 0); 		} 		printf("\n"); 	} 	return 0; }

user: user-3
content: 额， 如果真的能运行的话，就是栈溢出。 参见这个帖子：http://bbs.csdn.net/topics/391025508 其实你完全可以把数组删了的。。。

user: user-0
content: 可以运行 刚学到数组，来实践下 话说那个程序为什么输入720或以上的数字会出错呢？

user: user-3
content: 额，其实不需要使用数组吧，说道数组，lz的程序可以运行？
user-0 提问: C语言static的一个困惑

回复:
user: user-0
content: 哦，是不是在一个工程里面实现

user: user-0
content: 嗯，有点懂了，等于我是直接把exam01.h这个文件导入到了main文件中，所以static int INT_MAX就是一个main中的变量了。 那我该怎么分别编译这两个文件呢，求指教

user: user-1
content: 楼上两位的解答是对的，楼主main函数的cpp文件包含了定义static变量的exam01.h头文件，所以static变量INT_MAX在cpp文件中是可见的。

user: user-2
content: 题主 你得想弄清楚什么是 #include 这个预处理之类是把 指定文件的全部内容都写到#include 的位置 所以你的 main文件 预处理之后的代码是 ........ static int INT_MAX = 1000; int sum()...... int main() ......  你的INT_MAX 的确是内部链接 的确是其他文件找不到 这个INT_MAX 但是你没有在其他文件找这个符号  你是在本文件使用这个符号  所以没什么问题   记住一点 .h 文件只是 .cpp文件的 一个片段

user: user-3
content: 这个，我觉得这样理解。 static变量定义了，就在内存里面画了一块内存出来，然后这个内存就一直占用着，直到程序结束。 而不是楼主想的那样，内部外部不能引用。 不知道楼主是不是接触了面向对象编程，那里面有个私有变量，那个外部就不能访问了， 楼主不要弄混了
user-0 提问: 问一个关于ＴＣＰ的问题

回复:
user: user-0
content: 谢谢，不过不是这里的问题，我改成“127.0.0.1”了，可还是一样的

user: user-1
content: 引用 1 楼 Jacob1_1 的回复:客户端与服务器端实现了交互，可为什么无论我从键盘上输入什么，都显示不出来结果呢？输入“ｂｙｅ”也没有停止客户端的运行，真不知道哪里出现问题了，大神们，帮帮忙了  127.0.0.1

user: user-0
content: 不需要啊，只要套接字连接就好了

user: user-2
content: 这是java啊  早忘记了.............  随便看了下，server不需要bind吗？

user: user-3
content: 算了，我就不说了。。。

user: user-4
content: 楼主手滑了。最近手滑出错的新闻比较多，楼主想上头条？

user: user-0
content: 好像发错了

user: user-5
content: 你确定没发错论坛？确定不是java代码？

user: user-0
content: 客户端与服务器端实现了交互，可为什么无论我从键盘上输入什么，都显示不出来结果呢？输入“ｂｙｅ”也没有停止客户端的运行，真不知道哪里出现问题了，大神们，帮帮忙了
user-0 提问: 求大神帮助词法分析，当输入第一个1.2e12时可以输出，当时输入第二个1.2e12时就不能输出了，万分感谢，还有不能识别x=7*8+9中的+9，

回复:
user: user-1
content: 词法分析(1)---词法分析的有关概念以及转换图: http://www.cppblog.com/woaidongmao/archive/2009/09/25/97245.aspx

user: user-1
content: http://cn.bing.com/images/search?q=C%E8%AF%AD%E8%A8%80+%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90+%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E5%9B%BE&go=%E6%8F%90%E4%BA%A4&qs=n&form=QBILPG&pq=c%E8%AF%AD%E8%A8%80+%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90+%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2%E5%9B%BE&sc=0-0&sp=-1&sk=

user: user-1
content: 建议参考TCC源代码。

user: user-0
content: 那你能给我讲讲吗？？谢谢了，跪求！！！

user: user-2
content: 源码错误好多，先改改错误

user: user-1
content: 状态机不对 或 代码未严格按照正确的状态机编写。

user: user-2
content: 算法思路是什么？

user: user-0
content: 已经写出来了，就不懂为什么代码就是实现不了，只能第一次读取字符，而且代码中有一个错误，我差了好多资料都没改对，你能给我讲讲吗？？

user: user-3
content: 先把它的状态机写出来

user: user-0

user: user-0
content: 就是那个错误不会改了，求大神帮忙啊谢谢！！！！
user-0 提问: 分求C语言问题解决——关于TXT文件导入(第二贴，能给出的这个100和另外的100一起拿走！)

回复:
user: user-1
content: 链表及文件操作参考代码 https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c

user: user-2
content: #include<stdio.h> #include<malloc.h>  int main() { 	int invalidnum; 	int id,len; 	char *val=NULL; 	FILE *file=fopen("in.txt","r"); 	if(!file) 	{ 		fputs("Can't open file in.txt",stderr); 		return 1; 	} 	else 	{ 		while(fscanf(file,">read_%d_%d_%d random_genome_%d %d %d\n",&invalidnum,&id,&invalidnum,&invalidnum,&invalidnum,&len)!=EOF) 		{ 			char *tval=(char*)realloc(val,sizeof(char)*++len); 			if(!tval) 			{ 				if(val)free(val); 				fclose(file); 				fputs("No memory can be allocated",stderr); 				return 2; 			} 			val=tval; 			fgets(val,len,file); 			printf("%s\t%d\n",val,id); 			fgetc(file); 		} 		if(val)free(val); 		fclose(file); 	} 	return 0; }

user: user-3
content: 1.单链表双链表都可行，好像你知道总数（100个），因此，静态或动态指针数组也能办 2.如果是格式化数据结构写进去的，当然逆向能格式化读出。如果不是转3 3.字符串解析，很显然，遇到第一个大写字母，开始记录，遇到第一个非大写字母，提取字符串结束。将此字符串存储编号；如此循环 注：为了提高读取的速度，可考虑使用文件映射方式，将文件映射进内存，如此就像处理普通字符串数组一样了！

user: user-4
content: 额，题目的要求是什么？如果只是编号1楼的程序没解决吗？ 要不lz把题目截个图，把完整的要求发上来

user: user-5
content: 两贴无区别啊

user: user-6
content: 第32行     for (i=0;i<n;i++) printf("%s  %d\n",i+1,DNA+i*200); 应改为     for (i=0;i<n;i++) printf("%s  %d\n",DNA+i*200,i+1);

user: user-6
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> char *DNA; char ln[200]; char st[200]; FILE *f; int i,n; int main() {     DNA=(char *)calloc(1000000*200,1);     if (null==DNA) {         printf("Can not calloc 1000000*200 bytes!\n");         return 1;     }     f=fopen("in.txt","r");     if (NULL==f) {         printf("Can not open file in.txt!\n");         return 2;     }     i=0;     while (1) {         if (NULL==fgets(ln,200,f)) break;         if (1==sscanf(ln,"%199[ACGT]",st)) {             strcpy(DNA+i*200,st);             i++;             if (i>=1000000) break;         }     }     fclose(f);     n=i;     for (i=0;i<n;i++) printf("%s  %d\n",i+1,DNA+i*200);     free(DNA);     return 0; }
user-0 提问: 求水仙花数，如图。关键是”第一行有一个自然数T，接下来T行数据，每行是一个数M“这个怎么写程序？求解,万分感谢。

回复:
user: user-1
content: 读取数据个数 循环读取并判断输出

user: user-2
content: #include<stdio.h>  unsigned int pown(unsigned int x,unsigned int n) { 	unsigned int r=1; 	while(n) 	{ 		if(n&1)r*=x; 		x*=x; 		n>>=1; 	} 	return r; }  unsigned int nlen(unsigned int n) { 	unsigned int l=1; 	while(n/=10)++l; 	return l; }  unsigned char f(unsigned int n) { 	unsigned int x=n; 	unsigned int r=0; 	unsigned int l=nlen(n); 	while(x) 	{ 		r+=pown(x%10,l); 		x/=10; 	} 	return r==n; }  int main() { 	unsigned int T,n; 	scanf("%d",&T); 	while(T--) 	{ 		scanf("%d",&n); 		puts(f(n)?"Yes":"No"); 	} 	return 0; }

user: user-3
content: 奔跑吧，参考：  #include <math.h> #include <stdio.h> int getn(int n) { 	int i = 0; 	do 	{ 		i++; 		n /= 10; 	} while (n); 	return i; } int is_na(int n) { 	int r = getn(n); 	int i, N, sum = 0; 	N = n; 	do 	{ 		sum += pow(n % 10, r); 		if (sum > N) return 0; 		n /= 10; 	} while (n); 	if (sum == N) return 1; 	else return 0; } int main()  { 	int i, n, N; 	scanf("%d", &N); 	i = 0; 	while (i < N) 	{ 		scanf("%d", &n); 		if (is_na(n)) printf("Yes\n"); 		else printf("No\n"); 		i++; 	} 	return 0; }
user-0 提问: 高分求C语言问题解决——关于TXT文件导入

回复:
user: user-1
content: 引用 6 楼 zhangxiangDavaid 的回复:[quote=引用 4 楼 hitmajiahao 的回复:] ls的写的有点问题啊？？？？？求解决 也给分！！！！！！！！ C:\Users\Administrator\Desktop\东北赛\编写尝试\索引\solexa.c(12) : error C2065: 'null' : undeclared identifier C:\Users\Administrator\Desktop\东北赛\编写尝试\索引\solexa.c(12) : warning C4047: '==' : 'int ' differs in levels of indirection from 'char *' 把null改为NULL，就行了 [/quote] 谢谢斧正！

user: user-2
content: #include<stdio.h> #include<malloc.h>  int main() { 	int invalidnum; 	int id,len; 	char *val=NULL; 	FILE *file=fopen("in.txt","r"); 	if(!file) 	{ 		fputs("Can't open file in.txt",stderr); 		return 1; 	} 	else 	{ 		while(fscanf(file,">read_%d_%d_%d random_genome_%d %d %d\n",&invalidnum,&id,&invalidnum,&invalidnum,&invalidnum,&len)!=EOF) 		{ 			char *tval=(char*)realloc(val,sizeof(char)*++len); 			if(!tval) 			{ 				if(val)free(val); 				fclose(file); 				fputs("No memory can be allocated",stderr); 				return 2; 			} 			val=tval; 			fgets(val,len,file); 			printf("%s\t%d\n",val,id); 			fgetc(file); 		} 		if(val)free(val); 		fclose(file); 	} 	return 0; }

user: user-3
content: 见你的另一帖子，我的回复

user: user-4
content: 引用 4 楼 hitmajiahao 的回复:ls的写的有点问题啊？？？？？求解决 也给分！！！！！！！！ C:\Users\Administrator\Desktop\东北赛\编写尝试\索引\solexa.c(12) : error C2065: 'null' : undeclared identifier C:\Users\Administrator\Desktop\东北赛\编写尝试\索引\solexa.c(12) : warning C4047: '==' : 'int ' differs in levels of indirection from 'char *' 把null改为NULL，就行了

user: user-4
content: 大写字母部分只包含字母：ACGT?

user: user-0
content: ls的写的有点问题啊？？？？？求解决 也给分！！！！！！！！ C:\Users\Administrator\Desktop\东北赛\编写尝试\索引\solexa.c(12) : error C2065: 'null' : undeclared identifier C:\Users\Administrator\Desktop\东北赛\编写尝试\索引\solexa.c(12) : warning C4047: '==' : 'int ' differs in levels of indirection from 'char *'

user: user-1
content: 第32行     for (i=0;i<n;i++) printf("%s  %d\n",i+1,DNA+i*200); 应改为     for (i=0;i<n;i++) printf("%s  %d\n",DNA+i*200,i+1);

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> char *DNA; char ln[200]; char st[200]; FILE *f; int i,n; int main() {     DNA=(char *)calloc(1000000*200,1);     if (null==DNA) {         printf("Can not calloc 1000000*200 bytes!\n");         return 1;     }     f=fopen("in.txt","r");     if (NULL==f) {         printf("Can not open file in.txt!\n");         return 2;     }     i=0;     while (1) {         if (NULL==fgets(ln,200,f)) break;         if (1==sscanf(ln,"%199[ACGT]",st)) {             strcpy(DNA+i*200,st);             i++;             if (i>=1000000) break;         }     }     fclose(f);     n=i;     for (i=0;i<n;i++) printf("%s  %d\n",i+1,DNA+i*200);     free(DNA);     return 0; }

user: user-0
content: 急死我了 我QQ598505282 在线等!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
user-0 提问: 关于几个字符串的表达str，&str，&str【0】的问题

回复:
user: user-1
content: 引用 5 楼 cao_julians 的回复:[quote=引用 4 楼 qq_27872797 的回复:] 還是不能理解怎麼通過strcpy(&str[0],&str[1])的複製，來去掉大寫字母的str[0]...... 把从&str [1]开始的串（自然不含首字符了）复制到str处，即除首字符外全部字符左移一个位置，首字符自然没了[/quote]+1

user: user-2
content: 引用 4 楼 qq_27872797 的回复:還是不能理解怎麼通過strcpy(&str[0],&str[1])的複製，來去掉大寫字母的str[0]...... 把从&str [1]开始的串（自然不含首字符了）复制到str处，即除首字符外全部字符左移一个位置，首字符自然没了

user: user-0
content: 還是不能理解怎麼通過strcpy(&str[0],&str[1])的複製，來去掉大寫字母的str[0]......

user: user-0
content: 引用 2 楼 iyomumx 的回复:谁写的破代码 引用char *strcpy( char *dest, const char *src ); Copies the character string pointed to by src, including the null terminator to the character array whose first element is pointed to by dest. The behavior is undefined if the dest array is not large enough. The behavior is undefined if the strings overlap.  代碼是教科書上的...汗... 上面那段strcpy的英文是說strcpy(&str[0], &str[1]);裡的兩個參數輸入的&str[0]和&str[1]是兩個指針，然後strcpy運行時是對兩個指針所指向的字符串進行操作的意思？

user: user-3
content: 谁写的破代码 引用char *strcpy( char *dest, const char *src ); Copies the character string pointed to by src, including the null terminator to the character array whose first element is pointed to by dest. The behavior is undefined if the dest array is not large enough. The behavior is undefined if the strings overlap.

user: user-4
content: 三种表达相等 理解strcpy的含义……
user-0 提问: return 无法跳出 void 定义的递归函数

回复:
user: user-1
content: 写递归函数之前首先确定 1.终结条件 2.递归关系 3.递归实体  如果摸不清递归调用过程，可以使用自底向上建树的方式模拟

user: user-0
content: 知道错误了！谢谢大家！~

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

user: user-3
content: 想真正精通C，请看下面的视频： http://edu.51cto.com/lecturer/user_id-5402097.html

user: user-4
content: rreturn 处加断点看运行到了没有

user: user-5
content: return 会结束当前函数调用，将控制权就给上一级调用
user-0 提问: 在一个已知的字符串中查找最长单词，假定字符串中只含字母和空格，空格用来分隔不同单词。（C语言）

回复:
user: user-1
content: #include<stdio.h> #include<string.h> #include<malloc.h>  // 用来保存多个字符串的结构 typedef struct { 	size_t len; 	char *str[0]; } Strings;  int main() { 	char teststring[] = "a bc defg hij klmn op"; //测试字符串 	Strings* maxlength_strings=NULL; // 用来保存多个字符串 	size_t maxlength = 1; // 最大长度 	size_t wordcount = 1;         // 统 	char* p = teststring;         // 计 	while (p = strpbrk(p, " "))   // 单 	{							 // 词 		++wordcount;			  // 总 		++p;					  // 个 	}							 // 数 	maxlength_strings = (Strings*)calloc(1,sizeof(Strings) + sizeof(char*)*wordcount); 	if (maxlength_strings) 	{ 		// strtok 用于分割字符串，详见http://en.cppreference.com/w/c/string/byte/strtok 		for (p = strtok(teststring, " "); p; p = strtok(NULL, " ")) 		{ 			size_t len = strlen(p); 			if (len > maxlength) // 如果更长，则重置maxlength_strings 			{ 				maxlength = len; 				maxlength_strings->len = 1; 				maxlength_strings->str[0] = p; 			} 			else if (len == maxlength) // 如果与最长的同样长，则添加到maxlength_strings 				maxlength_strings->str[maxlength_strings->len++] = p; 		} 		{ 			size_t i; 			for (i = 0; i < maxlength_strings->len; ++i) // 输出maxlength_strings里的所有字符串 				puts(maxlength_strings->str[i]); 		} 		free(maxlength_strings); 	} 	return 0; }输出：defg klmn

user: user-2
content: C语言里有字符串分割函数：char *strtok( char *strToken, const char *strDelimit );具体用法你可以自己看看，至于找最长字符串你可以自己想想，自己想出来也比较有意思

user: user-3
content: 修改如下：  #include<stdio.h> #include<string.h> int main(void) { 	char str[] = "I love you baby"; 	char *words[256]; 	char *p; 	int i = 0, j; 	for (p = strtok(str, " "); p; p = strtok(NULL, " ")) 	{ 		words[i++] = p; 	} 	int len = 0, pos; 	for (j = 0; j<i; j++) 	{ 		if (strlen(words[j]) > len) 		{ 			len = strlen(words[j]); 			pos = j; 		} 	} 	printf("max length word is \"%s\", len=%d\n", words[pos], len); 	return 0; } //max length word is "love", len=4

user: user-4
content: 哈哈,我来个思路简单的..

user: user-3
content: 引用 6 楼 yxwsbobo 的回复:你们敢不敢简单直白点,做了好多无用功.. 你来一个简单的

user: user-4
content: 你们敢不敢简单直白点,做了好多无用功..

user: user-5
content: #include <stdio.h>   int main() {     char str[]="this is a book with other and me tomrrow";      char* p;     char* q;     char* index;     int len=0;     for(p=q=str;*p;)     { 	    for(;*p!=' '&&*p;p++); 	    if(p-q>len) 	    { 		    len=p-q; 		    index=q; 	    } 	    p++; 	    q=p;     }     for(;*index!=' '&&*index;index++)     { 	    printf("%c",*index);     }     return 0; }

user: user-3
content: 有bug，修改：  for(p=strtok(str, " "); p; p=strtok(NULL, " ")) {       words[i++]=p;      }

user: user-3
content: 奔跑吧， 参考：  #include<stdio.h> #include<string.h> int main(void) {     char str[]="I love you baby";     char *words[256];     char *p;     int i=0, j;     for(p=str; p=strtok(NULL, " "); )     {         words[i++]=p;          }     int len=0, pos;     for(j=0; j<i; j++)     {         if(strlen(words[j]>len)         {              len=strlen(words[j]);              pos=j;         }     }     printf("max length word is %s, len=\n", words[pos], len);     return 0; }
user-0 提问: 几个C语言的难题

回复:
user: user-1
content: 分析的很透彻，写得也很好，学习了。建议发东西时就那些序号都删除，我还想了半天哦

user: user-2
content: 1. printf的返回值是打印的字符个数 我们从最内一层函数调用开始解析： printf("%d", i);    //43,返回2 printf("%d", 2);    //2,返回1 printf("%d", 1);    //1,返回1 故输出4321  2.m=0,n=2  //分析已经很透彻  3.运行试试
user-0 提问: 《求帮助》Problem A: 小明的积木 

回复:
user: user-1
content: 解方程 起始为s，项数为x，输入n 则有(s+x)*x =2n==> x=-s+sqrt(s^2+8n)/2,验证x是不是整数，从1枚举到n/2

user: user-0
content: 这个算法我试了一下 行不通额
user-0 提问: 毕业设计 求给点意见，一个web服务器的实现

回复:
user: user-1
content: 引用 楼主 flagsbody 的回复:毕业设计自己选了“web服务器的实现”的题目,,系统linux  语言 c/c++   现阶段完成了下面几个功能： 1 静态页面 2 动态页面 cgi 3 支持php ，perl 脚本语言  其实就是在mini_httpd基础上修改的...  展示时，在浏览器输入几个网址，就展示完了，好像吸引不了老师...  第一次检查，老师说太简单了，要添加点功能..来点什么数据分析，挖掘等等....  求各位前辈 给点意见，在web服务器的基础上添加一点功能， 在答辩上能撑点场的......拜托了....  httpd怎么做数据分析、挖掘啊？求科普

user: user-2
content: 度娘的意见很中肯，可以请教之

user: user-3
content: 搜“web 服务器代码 linux c”
user-0 提问: 下了个国密算法sm2的c语言版怎么也运行不出，想求运行成功的大神指导下。

回复:
user: user-1
content: 将错误信息中出现的标识符放在百度里面搜一下，看其在哪个.lib中，然后在本地硬盘上搜索该.lib,如果没有，在网上搜索相关库或模块下载安装，然后将其所在目录填写到“附加依赖库所在目录”中，将其名字添加到“附加依赖库”中，重新连接。 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项

user: user-2
content: 你没有加载运行时库

user: user-3
content: 先写几个空函数

user: user-0
content: 我是从论坛这边下载的，看到评论说下了可以运行的，就想问一下，

user: user-0
content: 错误提示如上，另我已经安装了openssl头文件
user-0 提问: 求余和与操作的互换

回复:
user: user-1
content: 一，仅当size是2的N次方时，两个运算结果相同，等效。  二，当除数为2的N次方时，整除运算结果的余数是被乘数的低N位，商是被乘数的剩余高位，相当于在被乘数的低N位处截取低N位，  三，2的N次方减1的结果是得到低N 位为全1的屏蔽字，按位与任一整数的结果是该整数的低N位  四，效率是后一个高，位运算快  五，高效程序的奥秘……我记得是这个书名，是关于位运算的最佳书籍

user: user-2
content: 纠正“对2幂求模运算，本质也就是屏蔽低位，保留高位”-》对2幂求模运算，本质也就是屏蔽高位，保留低位

user: user-2
content: 两种等价，只在SIZE是2的幂才成立 size -1一般称为掩码，当size是2的幂时，减1，就形成一个低位是1，高位是0的掩码，比如01000 - 1 = 00111 对2幂求模运算，本质也就是屏蔽低位，保留高位

user: user-3
content: w - r 值是0xffffffe0   0xffffffe0  % 0x4000 = 0x3fe0 0x4000 -1=0x3ffff   0xffffffe0&0x3ffff = 0x3fe0   凑巧而已，你把size 定义成0x4003肯定不行。
user-0 提问: linux c程序 ctrl＋ｃ不能结束的原因

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！  Linux下可以用top命令。  我有用top命令查看过，cpu和memory没有什么问题， 但没有试过循环执行。  你的意见很值得参考，谢谢！

user: user-0
content: 引用 2 楼 u010868023 的回复:在你的程序里 应该是有捕捉处理sigint的函数，看看是否卡在释放资源的那里  是有捕捉处理sigint的函数，如果是卡在释放资源的处理上， 20分钟以内和以后的处理没有任何差别， 20分钟内的话可以正常结束程序，这是我不能理解的地方。

user: user-0
content: 引用 1 楼 cjqpker 的回复:你程序有捕获Ctrl C信号么，捕获之后自己做清理工作，然后退出程序。 遇到过一些程序Ctrl C当时不能退出，过个几秒钟就可以了。  有捕获到，但就是不能退出。

user: user-1
content: 设置信号处理函数 void sighandle(int sig) {      printf("捕获到信号%d", sig);      /*释放资源*/       exit(0); }   int main() {     .....     signal(SIGINT, sighandle);  //设置信号处理函数     ..... }

user: user-2
content: 检查是否资源泄漏的办法之一： 在任务管理器 进程 查看 选择列 里面选择：内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍，越多越好，比如1000000次甚至无限循环，记录以上各数值，再隔至少一小时，越长越好，比如一个月，再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加，则铁定有对应资源的资源泄漏！  Linux下可以用top命令。

user: user-3
content: 在你的程序里 应该是有捕捉处理sigint的函数，看看是否卡在释放资源的那里

user: user-4
content: 你程序有捕获Ctrl C信号么，捕获之后自己做清理工作，然后退出程序。 遇到过一些程序Ctrl C当时不能退出，过个几秒钟就可以了。

user: user-5
content: 你是不是安装自己的信号处理程序了？cc信号，默认操作是终结进程，如果自行安装了处理程序，那由用户负责处理
user-0 提问: 麻烦看看这个小程序

回复:
user: user-1
content: 应该是t=d+1，我看错了

user: user-1
content: 1、你的函数的返回值应该是t=d+j 2、函数内的循环范围可以缩小，只要i<=number/2即可

user: user-2
content: 引用 3 楼 ilikehigame 的回复:[quote=引用 楼主 jzx_606 的回复:] 【问题描述】 输入2 个正整数m 和n(m≥1,n≤1 000),输出m ~n 之间的所有完数,完数就是因子和与它本身相等的数｡要求定义并调用函数factorsum(number),它的功能是返回number 的因子和｡ 下面是我写的程序 #include<stdio.h> int factorsum( int number); int main(void) { 	 	int m,n,i; 	 	printf("Input m: "); 	scanf("%d",&m); 	printf("Input m: "); 	scanf("%d",&m); 	printf("Input n: "); 	scanf("%d",&n); 	 	for (i=m;i<=n;i++) 	{ if (factorsum(i)==i) 		printf("%5d",i);} 		return 0;} 		 		int factorsum(int number) 		{ 			int j,d=0,t ; 			 			for (j=2;j<=number-1;j++){ 				if (number%j==0) d=d+j;} 				t=j+1; 				return t; 			}   程序不会输出结果为什么    #include<stdio.h> #include<windows.h> int factorsum( int number); int main(void) { 	int m,n; 	printf("Input m: "); 	scanf("%d",&m); 	printf("Input n: "); 	scanf("%d",&n);	 	for (int i=m;i<=n;i++) 	{ 		if (factorsum(i)==i) 			printf("%5d\n",i); 	}	 	system("pause"); 	return 0; }  int factorsum(int number) { 	int d=0 ;	 	for (int j=1;j<number;j++) 	{ 		if (number%j==0) 			d=d+j; 	} 	return d; } [/quote]  在factorsum函数中，1是number的自然因子，不必求。 另在（number/2，number）----不包括number/2 和number----中没有number的因子，循环范围可以缩小 Int.  d=1; For(int  i=2; i<=number/2;  i++)

user: user-3
content: 引用 楼主 jzx_606 的回复:【问题描述】 输入2 个正整数m 和n(m≥1,n≤1 000),输出m ~n 之间的所有完数,完数就是因子和与它本身相等的数｡要求定义并调用函数factorsum(number),它的功能是返回number 的因子和｡ 下面是我写的程序 #include<stdio.h> int factorsum( int number); int main(void) { 	 	int m,n,i; 	 	printf("Input m: "); 	scanf("%d",&m); 	printf("Input m: "); 	scanf("%d",&m); 	printf("Input n: "); 	scanf("%d",&n); 	 	for (i=m;i<=n;i++) 	{ if (factorsum(i)==i) 		printf("%5d",i);} 		return 0;} 		 		int factorsum(int number) 		{ 			int j,d=0,t ; 			 			for (j=2;j<=number-1;j++){ 				if (number%j==0) d=d+j;} 				t=j+1; 				return t; 			}   程序不会输出结果为什么    #include<stdio.h> #include<windows.h> int factorsum( int number); int main(void) { 	int m,n; 	printf("Input m: "); 	scanf("%d",&m); 	printf("Input n: "); 	scanf("%d",&n);	 	for (int i=m;i<=n;i++) 	{ 		if (factorsum(i)==i) 			printf("%5d\n",i); 	}	 	system("pause"); 	return 0; }  int factorsum(int number) { 	int d=0 ;	 	for (int j=1;j<number;j++) 	{ 		if (number%j==0) 			d=d+j; 	} 	return d; }

user: user-4
content: 修改如下：  #include<stdio.h> int factorsum(int number); int main(void) { 	int m, n, i; 	printf("Input m: "); 	scanf("%d", &m); 	printf("Input n: "); 	scanf("%d", &n); 	for (i = m; i <= n; i++) 	{ 		if (factorsum(i) == i) 			printf("%5d", i); 	} 	return 0; } int factorsum(int number) { 	//int j, d = 0, t; 	int i, d = 0; 	for (i = 1; i <= number - 1; i++) { 		if (number%i == 0) d = d + i; 	} 	//t = j + 1; 	return d; }

user: user-5
content: for (j=2;j<=number-1;j++)这里j 应该从1开始，还有返回d 不是j+1
user-0 提问: 用mingw 编译，总是出现链接错误，提示找不到符号

回复:
user: user-0
content: 终于找到原因了，把编译用的命令gcc -lwinmm -L. -lvisa32 test.c -o test.exe改为gcc test.c -o test.exe -lwinmm -L. -lvisa32就可以了，但是为什么呢？以前都是用的第一种格式，都没问题

user: user-1
content: #include <mmsystem.h>   /**  * @file demo002.c  *   * 使用编译命令  * gcc -o demo002.exe demo002.c -lwinmm  */  #include <windows.h> #include <mmsystem.h>  #include <stdio.h>  int main(void) { 	DWORD dwTicks; 	 	dwTicks = timeGetTime(); 	printf("%u\n", dwTicks); 	 	return 0; }

user: user-0
content: 看了mmsystem.h文件里面，timeGetTime函数的定义是DWORD WINAPI timeGetTime(void);，这是mingw自带的，没有改动过。

user: user-0
content: 用绝对路径也不行

user: user-2
content: 你的头文件不对吧，mingw的定义是 DWORD WINAPI timeGetTime(void);，前面没有WINMMAPI，不会链接imp_

user: user-3
content: pragma写绝对路径呢
user-0 提问: 我有个长度很大的一维数组怎么排序？

回复:
user: user-0
content: 确实hi下标的原因 汗   引用 楼主 dadaobiancheng 的回复:是这样的  因为编程要求，我先是声明了一个3列动态二维数组s[m][3],接下来是要根据s[i][3],就是第三列的数据对整个二维数组进行降序排序。我试验了一下倘若数据m比较小就可以实现排序，如果m比较大时，就不行了，更不要谈350000了 代码如下： MAX_LINES即为s的行数 谢谢各位 #define MAX_LINES 302 #include "stdlib.h" #include "stdio.h"  int main() {     ///order 	   int (*s)[3]; 	int i,j; 	int n; 	int tempg;    int tempx;    int tempy;    n=MAX_LINES;      s=(int(*)[3])malloc(n*3*sizeof(int));   for(i=0;i<MAX_LINES-1;i++)  //   {s[i][1]=i;s[i][2]=i+1;s[i][3]=i; printf("%d\n",s[i][3]);   }    for(i = 0; i <MAX_LINES-2;i++){   for(j=i;j<MAX_LINES-1;j++){ 	  //printf("%d\n",j);    if(s[i][3] < s[j][3])    {        	      tempx=s[i][1];            tempy=s[i][2];         	tempg= s[i][3]; 				s[i][1] = s[j][1]; 			    s[i][2] =s[j][2]; 				s[i][3] = s[j][3]; 			   s[j][1]=tempx; 				s[j][2]=tempy; 				s[j][3]=tempg; }     }   } for(i=0;i<MAX_LINES-1;i++){ 	 printf("%d\n",s[i][3]); }   free(s);   return 0; }

user: user-1
content: 应该是s[i][0],s[i][1],s[i][2]而不是s[i][1],s[i][2],s[i][3]第三列是s[i][2]。 另外C语言里有个排序函数qsort 另附参考代码#include<stdio.h> #include<time.h> #include<stdlib.h>  int comp(const void * a,const void * b) { 	return (*(int(*)[3])b)[2]-(*(int(*)[3])a)[2]; // 这里表示降序 }  int main() { 	size_t count,i,j; 	int (*datas)[3]=NULL; 	clock_t cl; 	scanf("%zu",&count); 	datas=(int(*)[3])malloc(count*sizeof(int[3])); 	if(NULL==datas) 	{ 		fputs("内存不足",stderr); 		return 1; 	}  	srand(time(NULL)); 	for(i=0;i<count;++i) 		for(j=0;j<3;++j) 			datas[i][j]=rand(); // 生成随机数据  	cl=clock(); 	qsort(datas,count,sizeof(int[3]),comp); // 快速排序 	cl=clock()-cl;  	for(i=1;i<count;++i) 		if(datas[i][2]>datas[i-1][2]) // 如果后者大于前者，则排序有错误。 			break; 	if(i==count) 		puts("排序正确"); 	else 		puts("排序错误");  	printf("time:%lf\n",(double)cl/CLOCKS_PER_SEC); // 排序时间  	free(datas); 	return 0; }

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

user: user-3
content: 什么叫做根据第三列数据排序？
user-0 提问: 结构体对齐

回复:
user: user-1
content: 引用 楼主 lgbxyz 的回复:老生常谈了, 但是下面这个程序在ubuntu下得到结果是24,40 ,人生观被颠覆了, 哪个高手给详细总结下,网上搜的都差不多,都不对啊   #include <stdio.h> #include <string.h>  typedef union { 	char a; 	int b[5]; 	long c; }Format;  typedef struct { 	long d; 	Format e; 	char f; }Data;   int main(void) { 	Data h; 	memset(&h, 0, sizeof(Data));  	h.d = ~0; 	h.e.b[0] = ~0;// 0x12345678; 	h.e.b[1] = ~0;//0x3456789A; 	h.e.b[2] = ~0;//0x56789ABC; 	h.e.b[3] = ~0;//0x789ABCDE; 	h.e.b[4] = ~0;//0x9ABCDEF0; 	h.f = ~0;//'Z'; 	printf("%lu, %lu\n", sizeof(Format), sizeof(Data)); 	return 0; } 这个问题主要跟计算机储存单位word的大小有关系， 在32位系统中一个word是4个字节，所以sizeof(Format)的大小是 4*5=20，sizeof(Data)的大小是4+20+4=28；而在64位系统中一 个word是8个字节，所以sizeof(Format)的大小是24（8*3，最接近 5*4=20的存储值），sizeof(Data)的大小是8+24+8=40。   这里需要考虑结构体边界对齐要求，若如下定义： typedef struct { 	Format e; 	char d; 	char f; }Data; 则在32位系统下sizeof(Data)的值为20+4=24，64位下则是20+8=28； 同时需要考虑软件是多少位，如我系统64位，但软件是32位，则结果 符合32位系统结果

user: user-2
content: 仅供参考：#include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 // //A1.a 0 //A1.b 4 //A1.c 17 // //A2.a 0 //A2.b 4 //A2.c 18 // //A4.a 0 //A4.b 4 //A4.c 20 // //A8.a 0 //A8.b 4 //A8.c 24 // //A16.a 0 //A16.b 4 //A16.c 24 // //

user: user-3
content: 引用 1 楼 cjqpker 的回复:我在win7下以及Ubuntu 14 下跑出来都是20,28  支持。

user: user-4
content: 我在win7下以及Ubuntu 14 下跑出来都是20,28
user-0 提问: 蒸烤箱的温度实时监测系统

回复:
user: user-0
content: 谢谢你啊，现在正在找资料

user: user-1
content: 下位机直接上传温度数据 上位机读取并输出 没了

user: user-2
content: 在百度搜“温度实时监测 C源代码”
user-0 提问: 定义字符串数组时，缺少'\0'所带来的输出影响，求解，有图如下

回复:
user: user-0
content: 首先，谢谢各位的解答， 其次我还有个问题，就是现在我知道了%s是是输出遇到‘\0'，但是为什么它是逆着到上一个字符串变量的’\0'才输出，而不是下一个。 PS：我知道我定义的num3不是个字符串变量

user: user-1
content: 好厉害的感觉~

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

user: user-3
content: 引用 3 楼 u011737099 的回复:char a[] = {'a','b'};  char b[] = {'b','c'};  char c[] = {'a','b'};  printf("%d,%d,%d\n",strlen(a),strlen(b),strlen(c)); 三个结果不一样，而且都不是2  strlen()只有在遇到  '\0'  才结束，所以strlen(a)完全是未知的，  而你定义了数组的大小，它会默认填充0  “123456789”，这个作为一个字符串也会在末尾加上 '\0'

user: user-3
content: char a[] = {'a','b'};  char b[] = {'b','c'};  char c[] = {'a','b'};  printf("%d,%d,%d\n",strlen(a),strlen(b),strlen(c)); 三个结果不一样，而且都不是2

user: user-4
content: 多余的元素被编译器自动填充为0，所以可以自动结束
user-0 提问: 函数指针传参问题

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include <stdio.h> void func(unsigned char* a){     //函数内有一个变量b是unsigned int类型，该怎样通过形参a将其值传出去呢？     unsigned int b;      b=12345678;     *(unsigned int *)a=b; } int main() {     unsigned int bb;      func((unsigned char *)&bb);     printf("bb:%d\n",bb);     return 0; } //bb:12345678 //   十分感谢！！这里有个40分未结贴的帖子（http://bbs.csdn.net/topics/391022223），您去随便留个言，我把分给你，这里的20分我想分给其他人~

user: user-0
content: 引用 4 楼 yangyunzhao 的回复:传出去还是传进来？感觉方向反了吧？传出去，这个函数会读.ini文件，把其内容传出去

user: user-1
content: 有几种选择 1.返回值形式 unsigned int func(unsigned char* a) {         unsigned int b = 2;         return b; }  2.指针形式 void func(unsigned int* a) {         unsigned int b = 2;     *a = b; }  3.强转方式，前提是调用实参至少是unsigned int类型的地址，或者大小为sizeof（unsigned int）的字符数组 void func(unsigned char* a) {         unsigned int b = 2;     *（unsigned int *）a = b; } void test() {         int a;         func(&a); }

user: user-2
content: 既然类型都不确定，还不如不要类型，免得误导大家。直接用void *

user: user-2
content: 传出去还是传进来？感觉方向反了吧？

user: user-3
content: 一楼正解

user: user-4
content: 请注意1 L答案中 bb是 int， 只是强转成了unsigned char*，  不然会丢失数据。 要么是unsigned char 数组。

user: user-5
content: #include <stdio.h> void func(unsigned char* a){     //函数内有一个变量b是unsigned int类型，该怎样通过形参a将其值传出去呢？     unsigned int b;      b=12345678;     *(unsigned int *)a=b; } int main() {     unsigned int bb;      func((unsigned char *)&bb);     printf("bb:%d\n",bb);     return 0; } //bb:12345678 //
user-0 提问: 【求助】数据结构中，线性表求两个集合的并集

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:是不是有人侵犯了本ID“仅供参考：”的专利啊？ 我以后改为“奔跑吧，参考”

user: user-2
content: 是不是有人侵犯了本ID“仅供参考：”的专利啊？

user: user-1
content: 仅供参考：  typedef struct node { 	int data; 	struct node *next; }Node; //用指定数组创建带头结点的链表 Node *create_list(int *arr, int n) { 	Node *head = malloc(sizeof(Node)); 	int i; 	Node *p = head; 	for (i = 0; i < n; i++) 	{ 		p->next = malloc(sizeof(Node)); 		p = p->next; 		p->data = arr[i]; 	} 	p->next = NULL; 	return head; } //对链表排序 void sort_list(Node *head) { 	Node *p1, *p2; 	int data; 	for (p1 = head->next; p1; p1 = p1->next) 		for (p2 = p1->next; p2; p2 = p2->next) 		{ 			if (p1->data > p2->data) 			{ 				data = p1->data; 				p1->data = p2->data; 				p2->data = data; 			} 		} } //打印链表 void print_list(Node *head) { 	Node *p = head->next; 	while (p) 	{ 		printf("%4d", p->data); 		p = p->next; 	} } Node *get_union(Node *head1, Node *head2) { 	Node *head = malloc(sizeof(Node)); 	Node *p1, *p2, *p; 	p1 = head1->next; 	p2 = head2->next; 	p = head; 	while (p1 && p2) 	{ 		if (p1->data < p2->data) 		{ 			p->next = malloc(sizeof(Node)); 			p = p->next; 			p->data = p1->data; 			p1 = p1->next; 		} 		else if (p1->data > p2->data) 		{ 			p->next = malloc(sizeof(Node)); 			p = p->next; 			p->data = p2->data; 			p2 = p2->next; 		} 		else 		{ 			p->next = malloc(sizeof(Node)); 			p = p->next; 			p->data = p1->data; 			p1 = p1->next; 			p2 = p2->next; 		} 	} 	while (p1) 	{ 		p->next = malloc(sizeof(Node)); 		p = p->next; 		p->data = p1->data; 		p1 = p1->next; 	} 	while (p2) 	{ 		p->next = malloc(sizeof(Node)); 		p = p->next; 		p->data = p2->data; 		p2 = p2->next; 	} 	p->next = NULL; 	return head; } void free_list(Node *head) { 	Node *p, *q;  	p = head; 	while (p) 	{ 		q = p->next; 		free(p); 		p = q; 	} } int main(void) { 	int arr1[] = { 2,4,5,6 }; 	int arr2[] = { 4,5,7,9 }; 	//创建链表 	Node *head1 = create_list(arr1, 4); 	Node *head2 = create_list(arr2, 4); 	//对链表排序 	sort_list(head1); 	sort_list(head2); 	printf("list1:\n"); 	print_list(head1); 	printf("\n"); 	printf("list2:\n"); 	print_list(head2); 	printf("\n"); 	//求并集 	Node *head = get_union(head1, head2); 	printf("list12:\n"); 	print_list(head); 	free_list(head1); 	free_list(head2); 	free_list(head); 	return 0; }

user: user-3
content: 参考数据结构书籍
user-0 提问: 小白伸手：为指针分配好内存地址后，给这些内存赋值失败

回复:
user: user-1
content: GlobalAlloc的第一个参数可以改为GPTR，结构体应该不能直接=吧

user: user-2
content: 眼拙，没有看到哪句为bi分配内存。

user: user-0
content: 问题检测出来是调用函数时的出问题。debug了半天，不出bug了，但和期望不一样，bitmap显示为全黑，现在把源码贴出来。。。 ------------------------  int _tmain(int argc, _TCHAR* argv[]) { 	//Initiation&Declear 	_TCHAR* filename=_T("regenerate_original_picture.txt"); 	 HDC hDC; 	unsigned short *data =(unsigned short*)malloc(256); 	static unsigned short *ImageData[256][256][128]; 	BOOL SaveBmp(HBITMAP hBitmap, CString FileName); 	HBITMAP hBitmap; 	BITMAPINFO *bmi=(BITMAPINFO*)malloc(sizeof(BITMAPINFO)) ; 	unsigned short * pBits =(unsigned short*)malloc(256*256*2); 	memset( pBits, 0xf9, 256*256*2 );//pBits是内容// 一旦create了,就可以直接操控PB IT s这个指针,//*( PB IT s + xxxx ) = 255;  // 对某个像素赋值.  	 	//填装数据 	//FILE *pfile=_tfopen(filename,_T("rb"));//rb要用_T转换一下 	//for (int i = 0; i < 256; i++) 	//	for (int j = 0; j < 256; j++) 	//{  //      fread(data, 2, 128, pfile); 	//   //dosomething //pBits，data，memcpy; 	//   for (int k = 0; k < 128; k++) 	//   { 	//	   ImageData[i][j][k]=data; 	//	   data++; 	//   } 	//  data =(data-128); 	//} 	//	int x=1;//x是标示波段的 	//	for (int v = 0; v < 256; v++) 	//		for (int c = 0; c < 256; c++) 	//		{ 	//			memcpy( pBits,ImageData[v][c][x],1); 	//			pBits++; 	//		}  		 	//CreateDIBitmap创建的是设备相关位图句柄 - HBITMAP.  	//CreateDIBSection创建的是设备无关位图句柄 - HBITMAP.      //初始化BITMAPINFOHEADER结构的栏位 	bmi->bmiHeader.biSize = sizeof (BITMAPINFOHEADER) ; 	bmi->bmiHeader.biWidth = 256 ; 	bmi->bmiHeader.biHeight = 256 ; 	bmi->bmiHeader.biPlanes = 1 ; 	bmi->bmiHeader.biBitCount = 16 ; 	bmi->bmiHeader.biCompression = BI_RGB ; 	bmi->bmiHeader.biSizeImage = 256*256*16 ; 	bmi->bmiHeader.biXPelsPerMeter = 0 ; 	bmi->bmiHeader.biYPelsPerMeter = 0 ; 	bmi->bmiHeader.biClrUsed = 0 ; 	bmi->bmiHeader.biClrImportant = 0 ; 	printf("%d\n",GetLastError());     //在基本准备後，我们呼叫该函式： 	hDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); 	hBitmap = CreateDIBSection (hDC, (BITMAPINFO *) bmi,DIB_RGB_COLORS, (void**)&pBits, NULL, 0) ; 	//HDC hd; 	//hBitmap = CreateDIBSection (hd, (BITMAPINFO *) bmi,DIB_RGB_COLORS, (void**)&pBits, NULL, 0) ; 	printf("%d\n",GetLastError()); 	SaveBmp(hBitmap,"bitmap"); 	return 0; }  -----------------------问题1 断点时，查看句柄，无法读取内存。  -----------------------问题2 bitmap全黑

user: user-3
content: 加入检测语句检测GlobalAlloc和Globallock两个函数的返回值，可调用GetLastError以获得更多错误信息，有可能是分配失败或者传入GlobalAlloc的分配的字节数的参数为0导致的

user: user-4
content: 检查一下 dwBmBitsSize 这个值 是多少就知道了。

user: user-5
content: 检查一下GetObject有没有成功，

user: user-6
content: 检测动态分配后的返回值是否为NULL，如果成功（非空）说明不是内存的事！从弹出来信息看，明显是操作空指针，导致的段错误

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

user: user-8
content: GlobalLock分配成功了？看错误信息怎么是个空指针呢？写入位置0x0000000000000000时发生了访问冲突了。 调试一下lpbi是不是应该是空指针了？  hDib分配内存这一步就没成功吧？

user: user-9
content: lpbi内存分陪成功了吗， 如果成功了两个结构体赋值还是有问题，那么就把结构体内的元素一个一个的赋值看看   BITMAPINFOHEADER LPBITMAPINFOHEADER 详解 http://www.cnblogs.com/lzlsky/archive/2012/08/16/2641698.html
user-0 提问: 哈夫曼树问题 程序运行出错 调试正常

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-2
content: 哈夫曼树 http://blog.csdn.net/zhangxiangdavaid/article/details/37696533

user: user-3
content: F5调试运行, 崩溃的时候, 点击弹出的窗口中的"调试"或者"中断"或者"重试".  正常情况下就会定位到错误的地方.
user-0 提问: 用C语言的CPP编一个程序，输入一个日期，然后显示一段话。

回复:
user: user-1
content: 仅供参考：#include <afxdisp.h> #include <stdio.h> COleDateTime t; int main(int argc, char **argv) {     if (argc<2) {         printf("Usage:%s \"DateTimeStr\"\n",argv[0]);         return 2;     }     if (t.ParseDateTime(argv[1])) {         printf("\"%s\" is a valid DateTimeStr.\n",argv[1]);         printf("%s\n",t.Format("%Y-%m-%d %H:%M:%S"));         return 0;     } else {         printf("\"%s\" is a INVALID DateTimeStr!\n",argv[1]);         return 1;     } }

user: user-2
content: sanf("%d,%d,%d", &year, &month, &day); 输入的字符串里面不要加逗号 这样写 sanf("%d%d%d", &year, &month, &day);

user: user-3
content: 引用 4 楼 qq_27144221 的回复:是输入日期，然后显示一段话，比如我输入5.25， 然后显示出今天我要干什么。 #include <stdio.h>   int main() {     int year = 0, month =0, day = 0;     printf("请输入年,月,日:");     sanf("%d,%d,%d", &year, &month, &day);     printf("日期：%d年%d月%d日\n", year, month, day);     printf("今天楼主应该学习基本的C语言语法，这么简单都不会\n“);     reurn 0; }

user: user-0
content: 引用 2 楼 a30037338 的回复: #include <stdio.h>  int main() {     int year = 0, month =0, day = 0;     printf("请输入年,月,日:");     sanf("%d,%d,%d", &year, &month, &day);     printf("日期：%d年%d月%d日\n", year, month, day);     reurn 0; }  这样吗 引用 2 楼 a30037338 的回复: #include <stdio.h>  int main() {     int year = 0, month =0, day = 0;     printf("请输入年,月,日:");     sanf("%d,%d,%d", &year, &month, &day);     printf("日期：%d年%d月%d日\n", year, month, day);     reurn 0; }  这样吗 是输入日期，然后显示一段话，比如我输入5.25， 然后显示出今天我要干什么。

user: user-4
content: cpp不是c++的吗

user: user-3
content: #include <stdio.h>  int main() {     int year = 0, month =0, day = 0;     printf("请输入年,月,日:");     sanf("%d,%d,%d", &year, &month, &day);     printf("日期：%d年%d月%d日\n", year, month, day);     reurn 0; }  这样吗

user: user-5
content: 看下你的源码
user-0 提问: 突然发现的这个问题  .一眼看不出来，运行错后也很难找到错误之处，等你来战？？

回复:
user: user-1
content: 是啊，scanf()在输入字符的时候会把回车当成输入，相邻两个输入字符的scanf()需要在后一个scanf()加空格 scanf("%c",&a) scanf("  %c",&b)   引用 3 楼 kellen_ 的回复:解决了   是我的锅   把scanf和gets的不同没辨别清楚  解决方法是在%s后价格空格    希望大家别犯这个错误

user: user-0
content: 解决了   是我的锅   把scanf和gets的不同没辨别清楚  解决方法是在%s后价格空格    希望大家别犯这个错误

user: user-0

user: user-0
content: 比如输入：110 zgh m 10    就会发生如下结果，真是纳闷，为什么会跳过输入性别sex那一个scanf，
user-0 提问: 结构体指针的一点问题

回复:
user: user-1
content: p->epc = (char)coulmn_value[1];很显然类型不匹配啊，前面是数组首地址，可以约等于char* ，你后面本来是二级指针 ，用数组转换一个指针，前面就应该是char*而不是char，p->epc = (char *)coulmn_value[1];如果结构体改为char*，就要给它分配内存，p->epc = （char *）malloc(len);

user: user-0
content: 把struct 里面的 epc 改为char *型编译不会报错 但是运行的时候会报Segmentation fault
user-0 提问: 用C语言怎么编写以下程序

回复:
user: user-1
content: 不明白你想要说什么？这几个好像没什么内在的联系？

user: user-2
content: 仅供参考：  //根据你的描述得到的正确输入 char input[4][6]=    //区分大小写 { 	"P", 	"F", 	"P+C", 	"P+C+F", }; int check(char *buf) { 	int i; 	for (i = 0; i < 4; i++) 	{ 		if (strcmp(input[i], buf) == 0) return 1; 	} 	return 0; } int main() { 	char buf[10]; 	printf("input:"); 	scanf("%s", buf); 	while (!check(buf)) 	{ 		printf("error,input again:"); 		scanf("%s", buf); 	}  	return 0; }

user: user-3
content: 你是打算用MFC 还是用CPP做

user: user-4
content: 因为你的条件较少, 简单点的做法就是几个if 语句就能搞得定了.  否则就是要分析一下了. P，P+C，P+C+F 这个分析如下.  必需要有P, 并且有F时必需要有C
user-0 提问: 我想用C语言写一个抢课的程序，请问要学些什么？

回复:
user: user-1
content: 数据库，网络编程，linux/unix，一门编程语言，

user: user-2
content: 还是用按键精灵判断屏幕内容吧，一下午就能写一个勤勤恳恳刷页面的小劳工。

user: user-3
content: 网络编程，互斥同步机制

user: user-4
content: 很多时候是知道有这一门课到时候就被抢完了～

user: user-5
content: 引用 2 楼 paschen 的回复:要学的东西很多，而且不仅涉及到C语言，估计等你有这技术，你已经不需要这东西了。。+1，用学校内网抢课无压力

user: user-6
content: 要学的东西很多，而且不仅涉及到C语言，估计等你有这技术，你已经不需要这东西了。。

user: user-7
content: 貌似听懂了楼主所说的，网上选课，楼主想弄个东西抢个好修的课！
user-0 提问: 用memset进行指针变量的初始化

回复:
user: user-1
content: unsigned short * pBits =(unsigned short*)memset( pBits, 0x24, 256*256*2 );//pBits是内容// 一旦create了,就可以直接操控PB IT s这个指针,     //*( PB IT s + xxxx ) = 255;  // 对某个像素赋值.   pBits都没有分配内存空间，初始化有何用？至于要分配都少空间，你应该清楚

user: user-2
content: 先malloc，再memset
user-0 提问: sqlite3_exec()函数返回SQLITE_OK表示语句执行成功还是查询成功

回复:
user: user-1
content: 引用 1 楼 yueyexianxwy 的回复:不知道为什么，明明数据库里面没有我要查找的数据，可是却ret = SQLITE_OK

user: user-0
content: callback的第二个参数是不是在没有数据的情况下也为1啊

user: user-2
content: 成功不代表有数据啊

user: user-3
content: 执行成功了。。。

user: user-0
content: 我感觉返回SQLITE_OK是表示我的这个查询操作是对的，但并不是查询成功，不知道是不是这样

user: user-0
content: 不知道为什么，明明数据库里面没有我要查找的数据，可是却ret = SQLITE_OK
user-0 提问: C语言中整型数组的每个元素在内存中是如何存放的

回复:
user: user-0
content: 我用的是VS2013，好像找不到汇编窗口和堆栈窗口，只找到反汇编窗口，并行堆栈和调用堆栈窗口，怎么打开汇编窗口和堆栈窗口呀？

user: user-1
content: 引用 8 楼 QQ919769936 的回复:我用的是VS2013，好像找不到汇编窗口和堆栈窗口，只找到反汇编窗口，并行堆栈和调用堆栈窗口，怎么打开汇编窗口和堆栈窗口呀？ VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-2
content: 这个应该是强制转换。。

user: user-1
content: 引用 11 楼 QQ919769936 的回复:[quote=引用 10 楼 zhao4zhong1 的回复:] [quote=引用 8 楼 QQ919769936 的回复:] 我用的是VS2013，好像找不到汇编窗口和堆栈窗口，只找到反汇编窗口，并行堆栈和调用堆栈窗口，怎么打开汇编窗口和堆栈窗口呀？ VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。[/quote] 老师，我问的是怎么打开visual studio 2013的汇编窗口和堆栈窗口，不是VC++6.0[/quote] 我还真不信visual studio 2013中打开汇编窗口、堆栈窗口对应的热键Alt+8、Alt+7和VC++6.0不兼容！ 如果真不兼容，请直接找微软投诉！！

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:[quote=引用 8 楼 QQ919769936 的回复:] 我用的是VS2013，好像找不到汇编窗口和堆栈窗口，只找到反汇编窗口，并行堆栈和调用堆栈窗口，怎么打开汇编窗口和堆栈窗口呀？ VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。[/quote] 老师，我问的是怎么打开visual studio 2013的汇编窗口和堆栈窗口，不是VC++6.0

user: user-3
content: 还涉及一个大小端的问题 对于小端 内存中存储的 1 是逆序的按照  0x01 0x00 0x00 0x00存储   这里的数组arr内存数据是  0x01 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x04 0x00 0x00 0x00 0x05 0x00 0x00 0x00  所以strlen返回 1

user: user-0
content: 原来如此，又涨知识了，多谢各位指点！！！

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对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-4
content: size_t strlen ( const char * str );  int[]  被 强转时只取第一个字符

user: user-5
content: 数组是存储在堆栈中，也就是先进后出的存储模式。 那个为什么返回是1，可以形象理解为：本来strlen是从头找道脚的，二数组的首地址是放到脚上的，strlen就只有从脚找到脚了，也就是一个单位，返回为1了

user: user-5
content: 恩，就是存储方式是小端存储的原因，高位时存储在低位上的。和我们习惯是按顺序写其实是大段存储了

user: user-6
content: ？？

user: user-5
content: 0x开头的都是十六进制的数，如0xffff，表示为机器码（二进制）： 11 11 11 11 11 11 11 11(B),   也就是表示方式不一样，一个十六进制可表示为四位二进制
user-0 提问: C语言描点画图 求大神~~~

回复:
user: user-1
content: http://www.easyx.cn

user: user-2
content: 1 把far去掉，以前的模型 2 只是画线吗？直接用DC的不 行吗

user: user-3
content: #define far/去掉 试试 (graphics.lib 这鬼东西不是 16 位的么 - - ... 有GDI/DirectX不用玩这鬼玩意干什么)
user-0 提问: （HELP）关于acm上提交代码会出现Runtime Error怎么处理

回复:
user: user-1
content: 逐字逐句深刻理解题意，是做任何题目的基本功。

user: user-2
content: #define MaxSize 100 题目上说的是字符串长度不超过20000
user-0 提问: vs2013编译c程序，出现无法启动程序“.exe”。系统找不到指定文件

回复:
user: user-0
content: 本贴结！ 问题出在编译出错，需要把scanf替换成scanf_s，把程序错误修改掉就可以啦~

user: user-0
content: 引用 18 楼 a30037338 的回复:[quote=引用 16 楼 u013409439 的回复:] 这个问题我也是问了度娘说是更安全，防止溢出之类的，就是不知其所以然~  scanf("%s", buf); //如果输入1234567890，buf只读取1，后面的部分会还在输入缓冲区当中。 下一次scanf的时候， 可能读到的就是2， 而不是你想输入的值  scanf_s("%s",buf,5);  //输入abcdefg， 还有buf只取5位，之后清除输入缓冲区 scanf_s("%d",&a, 1);  //下一次在输入不会读取到上一次的残留字符[/quote] 还是不太明白

user: user-0
content: [quote=引用 22 楼 erlian1992 的回复:] 如果以前没有问题，就是你写代码错了，仔细检查一遍，如果是刚有一直出现这个问题，就是兼容性问题，也可能是安装VS2013时少了一些组件，你可以重新卸载干净重新安装。[/quote  不是，就是scanf与scanf_s的问题。

user: user-1
content: 如果以前没有问题，就是你写代码错了，仔细检查一遍，如果是刚有一直出现这个问题，就是兼容性问题，也可能是安装VS2013时少了一些组件，你可以重新卸载干净重新安装。

user: user-2
content: 把void main 改成int main试一下

user: user-2
content: scanf可以用的，应该是你哪里写错了

user: user-3
content: 引用 17 楼 u013409439 的回复:[quote=引用 14 楼 kellen_ 的回复:]  你输入的时候可能两个数中间用的不是" , "，而是空格，   如果不是这个原因，你看看我写的这个，仅供参考； 大神是用什么编译软件写的？[/quote] 先说明下我是个3流大学的菜鸟  嘿嘿   我用的是一个不太严的   叫  cfree

user: user-4
content: 引用 16 楼 u013409439 的回复:这个问题我也是问了度娘说是更安全，防止溢出之类的，就是不知其所以然~  scanf("%s", buf); //如果输入1234567890，buf只读取1，后面的部分会还在输入缓冲区当中。 下一次scanf的时候， 可能读到的就是2， 而不是你想输入的值  scanf_s("%s",buf,5);  //输入abcdefg， 还有buf只取5位，之后清除输入缓冲区 scanf_s("%d",&a, 1);  //下一次在输入不会读取到上一次的残留字符

user: user-0
content: 引用 14 楼 kellen_ 的回复: 你输入的时候可能两个数中间用的不是" , "，而是空格，   如果不是这个原因，你看看我写的这个，仅供参考； 大神是用什么编译软件写的？

user: user-0
content: 引用 13 楼 a30037338 的回复:[quote=引用 12 楼 u013409439 的回复:] 但是我调试的时候没有错误啊，那是为什么呢？为什么不能用呢？我敲的是书上的例子。 那就用 scanf_s ， vs自己搞了一套更 “安全” 的函数。 char buf[5]={'\0'}; int a; scanf("%s", buf); //如果输入1234567890，后面的部分会被写到别的空间上去。  //以上代码如果用scanf_s,第二行应改为 scanf_s("%s, %d",buf,5, &a, 1); //表示最多读取4个字符，因为buf[4]要放'\0'[/quote] 这个问题我也是问了度娘说是更安全，防止溢出之类的，就是不知其所以然~

user: user-3
content: 你输入的时候可能两个数中间用的不是" , "，而是空格，   如果不是这个原因，你看看我写的这个，仅供参考；

user: user-4
content: 引用 12 楼 u013409439 的回复:但是我调试的时候没有错误啊，那是为什么呢？为什么不能用呢？我敲的是书上的例子。 那就用 scanf_s ， vs自己搞了一套更 “安全” 的函数。 char buf[5]={'\0'}; int a; scanf("%s", buf); //如果输入1234567890，后面的部分会被写到别的空间上去。  //以上代码如果用scanf_s,第二行应改为 scanf_s("%s, %d",buf,5, &a, 1); //表示最多读取4个字符，因为buf[4]要放'\0'

user: user-0
content: 引用 4 楼 fly_dragon_fly 的回复:下面提示不能使用scanf但是我调试的时候没有错误啊，那是为什么呢？为什么不能用呢？我敲的是书上的例子。

user: user-0
content: 引用 5 楼 hnwyllmm 的回复:那不是写着编译失败吗？ 但是我调试的时候没有错误啊，那是为什么呢？

user: user-0
content: 、 引用 2 楼 u011004037 的回复:编译出错了好吧, 好好看看下面的提示行不? 但是我调试的时候没有错误啊，那是为什么呢？

user: user-5
content: #pragma warning(disable:4996) ...

user: user-6
content: 引用 6 楼 a30037338 的回复:编译报错了， 不一定是scanf的问题， 还有可能是使用了未初始化的变量   [quote=引用 5 楼 hnwyllmm 的回复:] 猛地一看， 你和楼主像兄弟， 仔细一看， 情侣装[/quote] 我靠，还真没注意到

user: user-7
content: 把scanf换成scanf_s,重新编译试试

user: user-4
content: 编译报错了， 不一定是scanf的问题， 还有可能是使用了未初始化的变量   引用 5 楼 hnwyllmm 的回复: 猛地一看， 你和楼主像兄弟， 仔细一看， 情侣装

user: user-6
content: 那不是写着编译失败吗？