Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 问个问题 涉及javascript  和一些底层知识.因为我知道C 版块有赵老师

回复:
user: user-1
content: 找个开源的javascript实现研究之。 据说Chrome就是开源的。

user: user-0
content: 引用 6 楼 ForestDB 的回复:如果只是想学好JS，那么“底层”只是充分条件，非必要条件。  但是在计算机的世界中，但凡要更上一层楼，或多或少都会接触到些“底层”的知识。  哦

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:为什么不使用Chrome或FireFox自带的js调试器调试js呢？ 赵老师好啊 火狐的那个插件嘛 在用啊

user: user-2
content: 如果只是想学好JS，那么“底层”只是充分条件，非必要条件。  但是在计算机的世界中，但凡要更上一层楼，或多或少都会接触到些“底层”的知识。

user: user-1
content: 为什么不使用Chrome或FireFox自带的js调试器调试js呢？

user: user-3
content: 本人对语言的一些底层逻辑和实现，虽有挺多接触但还不是很深刻，有什么说得不对的地方还请大家见谅

user: user-3
content: 真要研究底层的东西确实是需要很大毅力和比较多方面的知识的  再来感觉不大适合用JS入手，因为JS根本没有涉及具体内存的操作，内存分配，销毁，怎么读写完全是由引擎来管理

user: user-3
content: 引用 2 楼 baidu_37533913 的回复:那大哥你的意思就是说：我如果想要学好JS  那必须倒回去。把 计算机组成原理   编译原理 操作系统  数据结构 这些东西搞透彻了 才能学JS ?  你题意是说研究底层的实现吧？那当然是需要了解很多基础的知识了 如果你只是说学怎么用JS，或者熟练掌握JS，那你完全可以没有任何计算机基础就入手  就本版块来说研究熟悉c/c++底层实现的人数比例也不会很高 而且科班出身的哪个没学过计算机组成原理，数据结构，算法，编译原理甚至汇编？

user: user-0
content: 引用 1 楼 jianwen0529 的回复:不了解js引擎是怎么实现的，又是如何在管理对象的  只能给出几点建议或者失误的地方： 1：目前两大主流型的编译方式：编译型程序，解释型程序，你可以网上找些资料了解  2： 继续,js代码就是告诉浏览器，他该干什么。什么时候 改变一个DIV的背景颜色，什么时候让一个DIV  display:'none';  这些更倾向于CSS和HTML DOM吧？  3： function Box(){}        浏览器执行这一句:   请问在 堆内存中就会被谁 划分一块区域用来存储 这个 构造函数?他是存放在堆内存中的吗？如果不是 他应该在内存中的什么地方？  function Box();这是一个函数啊，只是代码而已 var box=new Box();才是创建对象  4： 我以前自学过C , int  a;     这在C中是申明一个 整形变量a,但是没有赋值,所以此时 变量a的值应该 NULL.  看位置，内置类型的全局变量才会初始化为0 局部变量的值是随机的 再者，在c中 #define NULL (void*)0 NULL其实是这个void*指针，并不等同于0（虽然0可以转换为任何指针）  5： 由于int 型 占4个字节大小内存.所以 系统会在内存中分配4字节大小的空间给变量a.  int的占用大小是编译器相关的，它只规定了int不能小于多少bit，不能说一定是4字节，只是大多编译器选择4字节罢了 32位和64位程序下也不一定相同  6： 那么在这张内存表中就会存放 变量a 和与之对应的内存地址  为什么会记录它们的地址呢    那大哥你的意思就是说：我如果想要学好JS  那必须倒回去。把 计算机组成原理   编译原理 操作系统  数据结构 这些东西搞透彻了 才能学JS ?

user: user-3
content: 不了解js引擎是怎么实现的，又是如何在管理对象的  只能给出几点建议或者失误的地方： 1：目前两大主流型的编译方式：编译型程序，解释型程序，你可以网上找些资料了解  2： 继续,js代码就是告诉浏览器，他该干什么。什么时候 改变一个DIV的背景颜色，什么时候让一个DIV  display:'none';  这些更倾向于CSS和HTML DOM吧？  3： function Box(){}        浏览器执行这一句:   请问在 堆内存中就会被谁 划分一块区域用来存储 这个 构造函数?他是存放在堆内存中的吗？如果不是 他应该在内存中的什么地方？  function Box();这是一个函数啊，只是代码而已 var box=new Box();才是创建对象  4： 我以前自学过C , int  a;     这在C中是申明一个 整形变量a,但是没有赋值,所以此时 变量a的值应该 NULL.  看位置，内置类型的全局变量才会初始化为0 局部变量的值是随机的 再者，在c中 #define NULL (void*)0 NULL其实是这个void*指针，并不等同于0（虽然0可以转换为任何指针）  5： 由于int 型 占4个字节大小内存.所以 系统会在内存中分配4字节大小的空间给变量a.  int的占用大小是编译器相关的，它只规定了int不能小于多少bit，不能说一定是4字节，只是大多编译器选择4字节罢了 32位和64位程序下也不一定相同  6： 那么在这张内存表中就会存放 变量a 和与之对应的内存地址  为什么会记录它们的地址呢
user-0 提问: 红色的地方有什么错，好像没有运行到

回复:
user: user-0
content: 谢谢各位大佬

user: user-0
content: 为什么结不了帖，怎么结帖，第一次用，这个网站很好啊

user: user-1
content: for(i=0;i<=j;i++)     {         if(L->data[i].no==item)         {             return (i+1);         }     }  这个no是char *， item是int不能直接比较吧，没有仔细看逻辑，这个地方是肯定有问题的，也许是：  if( atoi(L->data[i].no) == item）

user: user-2
content: LocItem是不是有执行，如果没有执行，往前查，如果有执行，L->len是不是为0

user: user-3
content: if (L->data[i].no == item) // no是char*类型，item是int类型，他们不能直接比较  修改为  // atoi 是把一个字符串包含的字符数字转换为int类型 // 需要#include <stdlib.h> if (atoi(L->data[i].no) == item)  或者  char tmp[10]; sprintf(tmp, "%d", item); // 把item存储在字符串中 if (strcmp(L->data[i].no, item) == 0) // 比较两个字符串的内容是否相同

user: user-1
content: gdb 加个断点调试一下看看是不是执行到？
user-0 提问: 此简易计算加减法小代码哪里有问题？

回复:
user: user-0
content: 引用 1 楼 jianwen0529 的回复:scanf("%ld%ld",&num1,&num2); 改为 scanf("%lf%lf", &num1, &num2); // double的格式是 %lf  感谢，检查了10+分钟就没看到格式控制符的错误

user: user-1
content: scanf("%ld%ld",&num1,&num2); 改为 scanf("%lf%lf", &num1, &num2); // double的格式是 %lf
user-0 提问: C语言中位运算右移和左移

回复:
user: user-1
content: 就是看是不是要当作乘除2了

user: user-2
content: Try it and you will get an answer.

user: user-3
content: c语言的移位操作 　　左移时总是移位和补零。 　　右移时无符号数是移位和补零，此时称为逻辑右移; 　　而有符号数大多数情况下是移位和补最左边的位（也就是补最高有效位），移几位就补几位,此时称为算术右移。

user: user-4
content: 这个问题在C语言的前几章节里有介绍，至于补0或者补1，要看被移位的是有符号数还是无符号数。 对于无符号数，右移高位补0，对于有符号数高位补1（可能对特定的系统或者编译器）；

user: user-5
content: 仅供参考：#include <stdio.h> unsigned short int ui;   signed short int si; int main() { 	ui=(unsigned short int)0x8000u; 	si=(  signed short int)0x8000; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si); 	ui=ui>>1; 	si=si>>1; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si);  	printf("--------------\n"); 	ui=(unsigned short int)0x8000u; 	si=(  signed short int)0x8000; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si); 	ui=((  signed short	int)ui)>>1; 	si=((unsigned short	int)si)>>1; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si);  	return 0; } //ui=32768 //si=-32768 //ui=16384 //si=-16384 //-------------- //ui=32768 //si=-32768 //ui=49152 //si=16384

user: user-6
content: 对于无符号整数，右移后左边补0；对于有符号整数，可能补1或0，对于VC2010，补1。

user: user-7
content: 对于unsigned类型，右移空出来的左端用0补充 ，对于有符号的类型，结果依赖于机器。空出的位可能用0补充，或使用符号位的副本补充。

user: user-8
content: 无符号数肯定是补0 有符号数依据编译器的实现

user: user-9
content: 补0。你试一下不就知道了
user-0 提问: HDOJ-1002 A+Bproblem一直WA 小白求大神帮助

回复:
user: user-1
content: 网上找下AC的代码吧。 1.看看你们的输入输出格式是不是一致 2.多测试一些样例

user: user-0
content: 引用 3 楼 qq423399099 的回复:网上找下AC的代码吧。 1.看看你们的输入输出格式是不是一致 2.多测试一些样例    请问一下 做题的时候有时候好久都不能做出来  是应该全靠自己想出来还是看一下别人的代码提供一下思路呀

user: user-0
content: 引用 2 楼 HHUPUP 的回复:还是WA啊   请问一下 做题是应该自己独立想出来 还是看一下别人的代码呀

user: user-0
content: 好的好的 谢谢啦

user: user-0
content: 还是WA啊

user: user-2
content: case改成Case，注意大小写
user-0 提问: 在C中给从VBA中传过来的自定义对象赋值疑问

回复:
user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！

user: user-2
content: 没这么用过，一般是用com做中转，所以不知道为何出错 你可以看看这一片文章
user-0 提问: c语言问题

回复:
user: user-1
content: main函数是整个程序的切入点，即运行的时候是从main函数里第一条语句开始执行的。main函数与系统交互的参数就是main函数里的两个参数（参数个数和参数内容）； 我们都能理解自定义函数里，我们通过传递实参来调用自定义函数。同样，main作为与系统接口的函数，那么main可以理解为一个子函数，调用它的是系统。系统可以传递参数进来，也可以定义main的参数为void.

user: user-2
content: 不知道这个是不是你需要的http://blog.csdn.net/tong_xin2010/article/details/41008863

user: user-3
content: 引用 2 楼 qq_24282081 的回复:这我知道，可是他没有让用户输入的语句啊，直接就存储吗  这是C++编译的执行程序的入口点，由系统调用，参数也由系统处理之后传进来的  很类似exe调用dll，dll函数作为入口点，由exe中调用，参数由它传递过来

user: user-0
content: 这我知道，可是他没有让用户输入的语句啊，直接就存储吗

user: user-3
content: int main(int argc, char *argv[]) //argc指明输入参数个数，argv存储参数的字符串形式
user-0 提问: 字符串的修改（串）

回复:
user: user-1
content: 代码可读性很差，局部变量太多，随意定义。循环变量i,j,k，这是大家通用的。计数变量cnt(count)也是大家通用的，定义这些变量大家基本上都能理解是什么意思，做什么的。还有如果有些变量特殊，建议使用单词或者对应单词的缩写。 gets不建议使用，不安全。使用scanf或者fgets代替gets

user: user-2
content: 什么问题？感觉你这个程序有点危险，主要还是0的问题，也就是字符串结尾的问题。保险期间，建议声明数组时初始化为0.  char a[80]={0}, b[80]={0}, c[80]={0};
user-0 提问: fread以二进制读取变量和实际看到的不一样

回复:
user: user-0
content: 引用 3 楼 zgl7903 的回复:用无符号BYTE  UINT 数据 谢谢高手，我加个unsigned解决了

user: user-0
content: A程序 int main() { 	int f = 5152628; 	printf("%d", f); 	getchar(); 	return 0; } B程序 int main() { 	FILE *WinIn; 	ULONGLONG i; 	int sum; 	char buffer; 	if (WinIn = fopen("A.exe", "rb+")) 	{ 		printf("OPEN TEST1.EXE SUCCESS"); 		printf("\n"); 		getchar(); 	} 	else 	{ 		printf("OPEN A.EXE FAIL"); 		getchar(); 		exit(0); 	}        fseek(WinIn, 0xbe7, SEEK_SET); 	sum = ftell(WinIn); 	printf("LOCATION IS %x",sum); 	printf("\n");         for(i = 0;i <06 ;i++)        { 	fread(&buffer,1,1,WinIn); 	printf("%x",buffer);         }         getchar();         fclose(WinIn);         return 0; }

user: user-0
content: 对了，用的是VSC2015，程序是.cpp  引用 2 楼 jianwen0529 的回复:怎么个格式写出去，就怎么个格式读进来  把读写代码贴出来才好分析 用一个char保存，用%X打印的

user: user-1
content: 用无符号BYTE  UINT 数据

user: user-2
content: 怎么个格式写出去，就怎么个格式读进来  把读写代码贴出来才好分析

user: user-0
content: 对了，用的是VSC2015，程序是.cpp
user-0 提问: 能自由排版的C语言就是好，就是好呀就是好呀就是好！

回复:
user: user-1
content: 百度搜的代码啊? 好个粑粑啊

user: user-2
content: 棒棒哒，初学者正在学使用csdn

user: user-0
content: 受 SQLite 多年青睐，C 语言到底好在哪儿？ https://www.oschina.net/news/99485/why-is-sqlite-coded-in-c

user: user-3
content: http://bbs.csdn.net/topics/380157851?page=1 哈哈，看了赵老师这几篇，真的觉得很有意思。 在不考虑代码内容、代码可读性又保证代码正确的情况下，探索代码的编码风格和手法，确实是一件很有趣的事情。

user: user-4
content: C 语言编程可以写成这个样子，厉害厉害

user: user-5
content: C代码的优雅，哈奥！

user: user-6
content: 挽尊。。。。。。 谁还敢说我们程序员没有艺术细胞！！！

user: user-7
content: 接分，赵老师威武

user: user-8
content: 接点分，支持赵老师，

user: user-9
content: 我悄悄的来接分，把以前发给赵老师的分接回来

user: user-10
content: 一度与怪异发生关联之后，会更容易被怪异所吸引。

user: user-11
content: 能(wu)自(chan)由(jie)排(ji)版(wen)的(hua)C(da)语(ge)言(ming)，嗨！就是好，就是好呀就是好呀就是好！

user: user-12
content: 这个好看是好看，读懂干啥就不容易了。不过C语言是永远的爱！爱C语言的自由自在，无所不能。这是距离汇编语言最近的高级语言，感觉整个电脑都尽在手中。 用java之类的面向对象语言总是缚手缚脚的。虽然java也是好语言.......

user: user-13
content: 赵老师比较有时间，尽情研究

user: user-14
content: 这个我点赞 了。。反正我觉得很牛。只是我看不懂。。。写成这样还可以跑起来也是好代码了

user: user-15
content: 赵4老师威武

user: user-16

user: user-0
content: C语言怪异代码大赛历届作品大全 1984～1996，1998，2000，2001，2004～2006，2011，2012http://download.csdn.net/detail/zhao4zhong1/5538847

user: user-0
content: http://bbs.csdn.net/topics/390150105

user: user-17
content: 挽。。挽。。挽
user-0 提问: 关于回调函数LRESULT CALLBACK  的分号？？

回复:
user: user-1
content: 手动敲一遍。  如果还有那么就不是这一段的问题。

user: user-2
content: 看起来这应该是一个windows程序 是不是你没有包含必须的头文件导致那些并没有定义就使用了？

user: user-3
content: 建议你重新敲一下代码。有时候是因为字符格式问题，复制的有时候是不可以用的。特别是采用不同格式保存 。单看这个看不出来

user: user-4
content: 标点符号必须用英文的

user: user-5
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。
user-0 提问: 新手代码改错请多多指教

回复:
user: user-1
content: if和else后面最好是{}要不然就是后面的第一个语句。你加了;也就是空语句。

user: user-0
content: 感谢指明，很受启发！

user: user-2
content: lf和else的括号后应该不加分号吧

user: user-3
content: #include <stdio.h> #include <math.h>  int main(void) {     int x, a, b, sum, sub, multi, mod;     float dev;      printf ("Please input n:\n");     scanf ("%d", &x);      if (x > 0) {         a = x /100;         b = x % 100;         printf ("%d, %d\n", a, b);     } else {         a = -abs(x) / 100;         b = -abs(x) % 100;          printf ("%d, %d\n", a, b);     }      printf ("a = %d, b = %d\n", a, b);     sum = a + b;     printf ("sum = %d\n", sum);     sub = a - b;     printf ("sub=%d\n", sub);     multi = a * b;     printf ("multi=%d\n",multi);     if (b ==0) {         printf ("The second operator is zero!\n");     } else {         dev = a *1.0 / b;         printf ("dev=%.2f\n", dev);         mod = a % b;         printf ("mod=%d\n", mod);     }       return 0; } 基本语法错误，建议自己一个一个的解决；LZ是初学C语言吗？问题比较多了，另外，求余数的运算，除数也是不能为0的。

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

回复:
user: user-1
content: 在Linux下编译和运行没有问题

user: user-2
content: 引用 3 楼 Jack_zhuiyi 的回复:不是。。。这个define是因为我在VS上运行，不加的话，scanf会报错。。。  报错的话， 请把它加在 项目属性的 预处理器定义中：

user: user-0
content: n的大小是0—10

user: user-0
content: 自己编译器编译链接答案均是对的…交到oj上就报那个错了…

user: user-3
content: 运行时错误，单步调试下，看具体是哪行代码出错

user: user-0
content: 不是。。。这个define是因为我在VS上运行，不加的话，scanf会报错。。。

user: user-2
content: #define _CRT_SECURE_NO_WARNINGS 这行的锅

user: user-0
content: 题目大致描述是给定一个n，和一个2^n长的位串，如3，10001011，将位串不断二分，左边作为左子树，右边作为右子树。当位串包含1和0时节点存'F'，位串全为0时，节点存'B'，位串全为1时，存'I'。输出时，后序遍历树，输出一个字符串。
user-0 提问: 求助，关于素数的判断与输出，

回复:
user: user-1
content: 好猥琐的代码

user: user-2
content: f(n%i==0) { flag=1; i=i+1;  红色那句，在找到素数之后，终止了while循环，当然只能找到一个素数

user: user-3
content: #include<stdio.h> #include<math.h>  int judgeprime(int n) {     int k,i,flag;     k=sqrt((double)n);     i=2;flag=0;     while(i<=k&&flag==0)     {         if(n%i==0)         {             flag=1;             i=i+1;         }       else {             i++;         }     }     return(!flag); } int main() {     int k;     for(k=3;k<100;k=k+2)     {         //printf("%d",k);         if(judgeprime(k)==1)         {             printf("%d\n",k);         }     }      return 0; }

user: user-3
content: #include<stdio.h> #include<math.h>  int judgeprime(int n) {     int k,i,flag;     k=sqrt((double)n);     i=2;flag=0;     while(i<=k&&flag==0)     {         if(n%i==0)         {             flag=1;             i=i+1;         }         else {             i++;         }     }     return(!flag); } int main() {     int k;     for(k=3;k<100;k=k+2)     {         //printf("%d",k);         if(judgeprime(k)==1)         {             printf("%d\n",k);         }     }      return 0; } 注意判断条件，i的值也是需要变化的

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

user: user-5
content: Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-6
content: 循环判断条件在if语句里，在条件不成立时成为死循环，把判断条件移出来就行了

user: user-7
content: #include<stdio.h> #include<math.h> int judgeprime(int n) { 	int k, i, flag; 	k = sqrt((double)n); 	i = 2; flag = 0; 	while (i <= k&&flag == 0) 	{ 		if (n%i == 0 || n%(i+2) == 0) 		{ 			flag = 1; 			 		} 	i = i + 1;//把这个提出来啊，不能只在里边转啊。成死循环了 	} 	return(!flag); } void main() { 	int k; 	for (k = 3; k<100; k = k + 2) 	{ 		printf("%d\t", k); 		if (judgeprime(k) == 1) 		{ 			printf("%d\n", k); 		} 	} 	 }
user-0 提问: 利用二叉搜索树的中序遍历进行排序时遇到问题，求助

回复:
user: user-0
content: 引用 1 楼 jianwen0529 的回复:把p的指针值赋给q，只会改变q的指针值，并不会影响root中即后续左右子树的指针值（注意是指针值，不是指向的内存）   void TreeBuild(int num) {     if (root == NULL)     {         root = (struct BiSearchTree *)malloc(sizeof(struct BiSearchTree));         root -> data = num;         root -> lchild = root -> rchild = NULL;     }     else     {         p = (struct BiSearchTree *)malloc(sizeof(struct BiSearchTree));         p->data = num;         p->lchild = p->rchild = NULL;                  //增加一个parent指针，来记录数据插入点的父节点，然后把数据插入到此节点的左右子树当中         parent = q = root;         while(q != NULL)         {             parent = q;             if (num > q -> data && q->rchild)             {                 q = q -> rchild;             }             else if (num < q->data && q->lchild)             {                 q = q -> lchild;             }             else             {                 break;             }         }                  if (num > q->data)         {             parent->rchild = p;         }         else         {             parent->lchild = p;         }     } }  谢谢，我明白了。

user: user-1
content: parent这个指针有些多余了，修改如下          q = root;         while(q != NULL)         {             if (num > q -> data && q->rchild)             {                 q = q -> rchild;             }             else if (num < q->data && q->lchild)             {                 q = q -> lchild;             }             else             {                 break;             }         }                   if (num > q->data)         {             q->rchild = p;         }         else         {             q->lchild = p;         }

user: user-1
content: 把p的指针值赋给q，只会改变q的指针值，并不会影响root中即后续左右子树的指针值（注意是指针值，不是指向的内存）   void TreeBuild(int num) {     if (root == NULL)     {         root = (struct BiSearchTree *)malloc(sizeof(struct BiSearchTree));         root -> data = num;         root -> lchild = root -> rchild = NULL;     }     else     {         p = (struct BiSearchTree *)malloc(sizeof(struct BiSearchTree));         p->data = num;         p->lchild = p->rchild = NULL;                  //增加一个parent指针，来记录数据插入点的父节点，然后把数据插入到此节点的左右子树当中         parent = q = root;         while(q != NULL)         {             parent = q;             if (num > q -> data && q->rchild)             {                 q = q -> rchild;             }             else if (num < q->data && q->lchild)             {                 q = q -> lchild;             }             else             {                 break;             }         }                  if (num > q->data)         {             parent->rchild = p;         }         else         {             parent->lchild = p;         }     } }
user-0 提问: 很想使用vs学习c，但是怎么弄都是用不了，各位看看有方法吗?

回复:
user: user-1
content: Linux下编程，可以考虑找我。

user: user-2
content: 这个SDK可以单独安装的。不会加我Q。510323535

user: user-3
content: 提示已经说得很清楚了，确实sdk  你安装vs的时候是不是缺少选择某些项？ 打开安装包文件，选择增加或者删除功能看看是不是sdk没有勾选安装  实在不行就下个2013 或者 2015的正式版本

user: user-0
content: 辛苦各位再帮我看看

user: user-0

user: user-0
content: 引用 1 楼 jianwen0529 的回复:.c 怎么在头文件那栏？  把它移除，在源文件项右键——增加——然后找到这个文件添加进去   不是很懂， 具体点

user: user-3
content: .c 怎么在头文件那栏？  把它移除，在源文件项右键——增加——然后找到这个文件添加进去
user-0 提问: 将十进制转换为十六进制后的数组，如何返回，在主函数中得到应用

回复:
user: user-0
content: 按照一楼做了简单改动，以解决

user: user-1
content: int* aa1(int num) { int *result = (int*)malloc(sizeof(int)*100);  return result; }  void aa2(int num, int result[]) { //result代替你a }  int main() { int x; int *ret = aa1(x); free ret;  int arr[100[; aa2(x, arr); }
user-0 提问: 如何有效清空udp socket的缓存

回复:
user: user-1
content: recvfrom读到的数据是内核给的，如果要清也是清内核里收到的数据。 不建议清除缓存的方式处理，建议你收到数据之后判断一下数据内容，不是自己想要的直接丢掉即可呢； 如果去清缓存会增加难度。
user-0 提问: mingw gcc 编译helloworld 不生成可执行文件

回复:
user: user-1
content: 引用 4 楼 w1641 的回复:@DelphiGuy，执行as --32 hello.s -o hello.o也没有文件生成  我用tdm-gcc-64 5.1测试是正常的，你看看目录的访问权限。

user: user-2
content: 注意有无错误信息。  关了杀毒软件。

user: user-3
content: cmd输入 gcc -help 测试配置是否正确  编译的时候先进入到你文件所在目录

user: user-0
content: @cfjtaishan， 啥问题，怎么解决 @DelphiGuy，执行as --32 hello.s -o hello.o也没有文件生成

user: user-1
content: gcc -c hello.s -o hello.o 应该用 as --32 hello.s -o hello.o

user: user-4
content: 不是程序的问题，应该是编译环境的问题；

user: user-0
content: 同时尝试了单步调试， 首先执行gcc -E hello.c -o hello.i，生成了19KB大小的hello.i，个人认为这部执行时没有问题的 再次执行gcc -S hello.i -o hello.s，生成了1KB大小的文件hello.s， 然后想通过gcc -c hello.s -o hello.o，就没有结果文件生成了，也不报错。  第二步生成的hello.s用文本方式打开如下， 	.file	"hello.c" 	.def	___main;	.scl	2;	.type	32;	.endef 	.section .rdata,"dr" LC0: 	.ascii "hello world!\0" 	.text 	.globl	_main 	.def	_main;	.scl	2;	.type	32;	.endef _main: LFB6: 	.cfi_startproc 	pushl	%ebp 	.cfi_def_cfa_offset 8 	.cfi_offset 5, -8 	movl	%esp, %ebp 	.cfi_def_cfa_register 5 	andl	$-16, %esp 	subl	$16, %esp 	call	___main 	movl	$LC0, (%esp) 	call	_puts 	movl	$0, %eax 	leave 	.cfi_restore 5 	.cfi_def_cfa 4, 4 	ret 	.cfi_endproc LFE6: 	.ident	"GCC: (GNU) 4.8.1" 	.def	_puts;	.scl	2;	.type	32;	.endef  哪位大侠帮忙看下，是什么原因导致的，谢谢
user-0 提问: 求教 Visual Studio Code 开发C语言 如何 格式化代码 ？

回复:
user: user-1
content: Alt+F8

user: user-2

user: user-2
content: 我也是用vscode来编辑c语言项目的，但是按ctrl+alt+F或者如下图一样，选中所有的代码之后然后点击右键，选择格式化代码，也是没有任何变化

user: user-3
content: LZ解决了吗？我也遇到了

user: user-0
content: 已经选了， 用鼠标 全部都选中了。。。。 有哪个项目 但是 点了后 也没反应。。。 感觉是不是需要配置 格式文件啊？ 还是怎么样？

user: user-4
content: 你试试是不是需要选择文本才能进行格式化  —————————————————————————————— 代码格式化： Shift+Alt+F，或 Ctrl+Shift+P 后输入 format code 引用自http://www.cnblogs.com/bindong/p/6045957.html
user-0 提问: poj1029 输入总是有问题，求解答

回复:
user: user-1
content: scanf("%c",&com); /*接收了缓存里的'\n'回车了。*/  建议在这句上面加上一句：  getchar(); scanf("%c",&com);

user: user-2
content: 网上找下AC的代码吧。 1.看看你们的输入输出格式是不是一致 2.多测试一些样例
user-0 提问: 在线等！

回复:
user: user-1
content: 好多问题： 1.没有#endif 2.第22行student[];应该是student[MAXSIZE]; 3.第39行，return 0;应该是return; 4.第30,36行，你的Student结构体根本没有成员变量叫name,num,age的

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

user: user-3
content: 另外，scanf格式 %s后面的name,no都不需要再加&，因为本身就是数组，数组名就是地址。

user: user-3
content: 你的代码编译有比较多的语法问题，首先运用的结构体成员未定义，很明显和结构体定义的不符。 C语言不支持可变数组，所以长度需要是固定的。

user: user-4
content: 一般是少 { }之类的  你struct少了一个 }
user-0 提问: 帮我看下这个程序有没有问题，这个c prime里面的 

回复:
user: user-0
content: #include<stdio.h> int main(void) { 	float megabits; 	float megabytes;  	float seconds; 	printf("请输入你家的网速："); 	scanf("%f",&megabits) ; 	printf("请输入你要下载的程序大小："); 	scanf("%f",&megabytes); 	seconds=megabytes/megabits*8; 	printf("At %.2f megabits per seconds," 	"a file of %.2f megabytes.\n",megabits,megabytes); 	printf("downloads in %.2f seconds",seconds); 	return 0; 	  }    错误的位置我改了，主要是对于seconds的算法错了 真是一个宝地

user: user-1
content: 除十次都可以  seconds=megabytes/(megabits/8); 或者 seconds=megabytes*8/megabits;  2.20 ÷ 18.12 ÷ 8 跟  2.20 ÷ (18.12 ÷ 8)  可不一样

user: user-0
content: 请输入你家的网速：18.12 请输入你所下载的文件大小：2.20 At 18.12 megabits per seconds,a file of 2.20 mmegabytes downloads in 0.02 seconds. 请按任意键继续. . .   但是为什么最后会出现这个结果呢，正常结果应该是0.97

user: user-0
content: 程序里面允许   seconds = megabytes/(megabits*8);，这么写么？感谢了

user: user-2
content: #include<stdio.h> int main(void) {     float megabits;     float megabytes;     float seconds;      printf("请输入你家的网速：");     scanf("%f",&megabits);     printf("请输入你所下载的文件大小：");     scanf("%f,",&megabytes);     seconds = megabytes/(megabits*8);     printf("At %.2f megabits per seconds,a file of %.2f mmegabytes\n",megabits, megabytes);     printf("downloads in %.2f seconds.\n", seconds);     return 0;  } 最后一个输出缺少东西。

user: user-2
content: #include<stdio.h> int main(void) {     char name [20];     float megabits;     float megabytes;     float seconds;      printf("请输入你家的网速：");     scanf("%f",&megabits);     printf("请输入你所下载的文件大小：");     scanf("%f,",&megabytes);      seconds = megabytes/(megabits*8);     printf("At %.2f megabits per seconds,a file of %.2f mmegabytes\n",megabits,megabytes);     printf("downloads in %.2f seconds.\n");     return 0;  } 除两次，为啥不除于后两个数的乘积呢？ 灵活一些
user-0 提问: 用char *指针从源到目的复制一个int或者double数组

回复:
user: user-1
content: 毫无区别，memcpy不管类型的，都是按字节内容拷贝

user: user-0
content: 比如源和目的都用char *指针，就是把指针指向那一个字节作为char复制到目的数组，目的字节对源字节的位模式没有改变（因为用相同类型的指针），对吗？

user: user-2
content: 完全没问题，只要不是转换类型进行解析

user: user-3
content: 能，和类型没关，你复制的长度大小正确就没问题

user: user-4
content: 我的理解，不论什么数据在内存里存放的方式都是一样的，0和1，而我们读出来的数据不一样，是因为我们用不同的格式读取的，不如整型，float类型等等； 只要注意大小端，传输是没问题的； 以下是我的demo: #include <stdio.h> #include <string.h>  int main(void) {     int i;     double dnum = 125.887;     int num = 345;      char buf[32];      memcpy(buf, &dnum, sizeof(dnum));     for (i = 0; i < sizeof(dnum); i++) {         printf("%u ", *((unsigned char *)buf+i));     }     printf("\n");     dnum = *(double *)buf;     printf("num = %lf\n", dnum);      memcpy(buf, &num, sizeof(num));     for (i = 0; i < sizeof(num); i++) {         printf("%u ", *((unsigned char *)buf+i));     }     printf("\n");      num = *(int *)buf;     printf("num = %d\n", num);      return 0; }
user-0 提问: 文件指针复制文件

回复:
user: user-1
content: 引用 12 楼 huang5hun 的回复:[quote=引用 10 楼 huang5hun 的回复:] [quote=引用 6 楼 cfjtaishan 的回复:] [quote=引用 3 楼 huang5hun 的回复:] fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件 是否亲自试过？[/quote] 以前做实验的时候， 就是这样做过的。[/quote] 这是我当时写的代码， 还有保存 #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(int argc, char const *argv[]) {     unsigned char *srcFile = "src.docx";     unsigned char *descFile = "desc.docx";     unsigned char readBuf[1024] = { 0 };     FILE *srcFp = NULL;     FILE *descFp = NULL;      srcFp = fopen(srcFile, "rb");     descFp = fopen(descFile, "wb");      while( fread(readBuf, 1024, 1, srcFp) == 1 ) {         fwrite(readBuf, 1024, 1, descFp);     }     fwrite(readBuf, 1024, 1, descFp);     fclose(srcFp);     fclose(descFp);     return 0; } [/quote] 你拿一个文档里带有图片，各种格式和颜色的文本试一下～

user: user-2
content: 引用 10 楼 huang5hun 的回复:[quote=引用 6 楼 cfjtaishan 的回复:] [quote=引用 3 楼 huang5hun 的回复:] fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件 是否亲自试过？[/quote] 以前做实验的时候， 就是这样做过的。[/quote] 这是我当时写的代码， 还有保存 #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(int argc, char const *argv[]) {     unsigned char *srcFile = "src.docx";     unsigned char *descFile = "desc.docx";     unsigned char readBuf[1024] = { 0 };     FILE *srcFp = NULL;     FILE *descFp = NULL;      srcFp = fopen(srcFile, "rb");     descFp = fopen(descFile, "wb");      while( fread(readBuf, 1024, 1, srcFp) == 1 ) {         fwrite(readBuf, 1024, 1, descFp);     }     fwrite(readBuf, 1024, 1, descFp);     fclose(srcFp);     fclose(descFp);     return 0; }

user: user-2
content: 引用 7 楼 zhao4zhong1 的回复:[quote=引用 3 楼 huang5hun 的回复:] fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件 还要加  putc( toupper(ch), destination );改为 putc( ch, destination );[/quote] 恩恩。是我忽略了。

user: user-2
content: 引用 6 楼 cfjtaishan 的回复:[quote=引用 3 楼 huang5hun 的回复:] fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件 是否亲自试过？[/quote] 以前做实验的时候， 就是这样做过的。

user: user-1
content: 引用 3 楼 huang5hun 的回复:fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件 是否亲自试过？

user: user-3
content: 因为 word (docx) 不是文本模式

user: user-4
content: txt是一般的文本格式，你用文本读写的话，遇到'\0'结束，对txt是没有问题的 但是word有他自己的一套格式，例如有文件头之类的协议，还有各种样式那些，这些里面可能都包含'\0'，用文本读写遇到'\0'就会停下来了，肯定没到文档结束。 对于这类文件要用二进制读写，首先要获取文件的大小，然后按文件大小进行二进制读，再进行二进制写，就可以了

user: user-5
content: 引用 8 楼 qq423399099 的回复:fopen不能读word http://wenku.baidu.com/link?url=yoohBrctju_PjGUBmdkoJHvHucpu7S9mkDjpOX3E27Sv8K1Gidm_-Os9mXAWnBhJ7-sORw9PXRZO3TVxHAOa8jvXC6sUtSResGHZF-6MGfa 如果只是想拷贝一份一模一样的副本，还是可以的。

user: user-6
content: fopen不能读word http://wenku.baidu.com/link?url=yoohBrctju_PjGUBmdkoJHvHucpu7S9mkDjpOX3E27Sv8K1Gidm_-Os9mXAWnBhJ7-sORw9PXRZO3TVxHAOa8jvXC6sUtSResGHZF-6MGfa

user: user-5
content: 引用 3 楼 huang5hun 的回复:fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件 还要加  putc( toupper(ch), destination );改为 putc( ch, destination );

user: user-2
content: fopen(fileName, "rb") fopen(fileName, "wb") 这样就可以了，因为docx是二进制文件

user: user-7
content: docx中的x代表是压缩的，就算没有x, doc格式也是闭源的，只有微软知道了

user: user-1
content: 因为读写的文件不是文本格式
user-0 提问: 65000次循环计算，后五万组数据全是0，或者65535

回复:
user: user-1
content: int改为long int 或 long int改为long long int

user: user-2
content: 检查下是不是溢出了

user: user-0
content: 前面一万多次循环得到的数据是正常的，后面的数据就全是0或者65535了，这是问什么啊？
user-0 提问: 关于C语言编程结果数据出错，求助

回复:
user: user-1
content: 学会调试程序比调通这个程序更重要； 学会打工挣钱比这顿先吃个饱更重要。

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

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

user: user-3
content: #include <stdio.h> #include <conio.h>  #define N 2 struct Test{     char name[50];     float s1;     float s2;     float s3;     float s4;     float sum; }; main() {     struct Test subject[N],t;     int i,j;     for(i=0;i<N;i++){         printf("请输入第%d个学生的姓名：",i+1);         scanf("%s", subject[i].name);         printf("请输入第%d个学生的科目一成绩：",i+1);         scanf("%f",&subject[i].s1);         printf("请输入第%d个学生的科目二成绩：",i+1);         scanf("%f",&subject[i].s2);         printf("请输入第%d个学生的科目三成绩：",i+1);         scanf("%f",&subject[i].s3);         printf("请输入第%d个学生的科目四成绩：",i+1);         scanf("%f",&subject[i].s4);          subject[i].sum=subject[i].s1+subject[i].s2+subject[i].s3+subject[i].s4;     };     for(i=0;i<N-1;i++){         for(j=i+1;j<N;j++){             if(subject[i].sum<subject[j].sum)                  t=subject[i],subject[i]=subject[j],subject[j]=t;         }     }     printf("名次\t姓名\t科目一\t科目二\t科目三\t科目四\n");     for(i=0;i<N;i++){         printf("第%d名\t",i+1);         printf("%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",subject[i].name,subject[i].s1,subject[i].s2,subject[i].s3,subject[i].s4,subject[i].sum);     }     getch(); } 三个方面的错误： 1.输入时，由于name是数组，要去掉前面的&； 2.输入时，其他都是成绩信息，%f； 3.输出时，少一个%f，由于是成绩信息，建议以%.1f输出，因为多的小数点也没意义。

user: user-4
content: 改完结果就对了兄弟

user: user-4
content: 你读取成绩时用了scanf("%s",&subject[i].name);      成绩用%f ，结尾的时候你用的%f
user-0 提问: 对fread（）的返回值中说的 a short item count (or zero) 不理解

回复:
user: user-1
content: 引用 3 楼 cfjtaishan 的回复:On  success,  fread()  and  fwrite() return the number of items read or written.  This number equals the number of bytes transferred only when size is 1.  If an error occurs, or the end of the        file is reached, the return value is a short item count (or zero). 出错的情况下，才会有这句话。 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 意思就是在出错的情况下，返回值是0或者小于size * nmemb的大小； 上面我的说法有错的地方，返回值是0或者小于nmemb的大小；

user: user-1
content: On  success,  fread()  and  fwrite() return the number of items read or written.  This number equals the number of bytes transferred only when size is 1.  If an error occurs, or the end of the        file is reached, the return value is a short item count (or zero). 出错的情况下，才会有这句话。 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 意思就是在出错的情况下，返回值是0或者小于size * nmemb的大小；

user: user-2
content: 返回类型是size_t ，这是一个无符号整数，不可能为负值

user: user-2
content: The total number of elements successfully read is returned. If this number differs from the count parameter, either a reading error occurred or the end-of-file was reached while reading. In both cases, the proper indicator is set, which can be checked with ferror and feof, respectively. If either size or count is zero, the function returns zero and both the stream state and the content pointed by ptr remain unchanged. size_t is an unsigned integral type.  参考 http://www.cplusplus.com/reference/cstdio/fread/?kw=fread  返回成功读入的项数 如果返回0，则表示遇到其他错误，比如流或者buffer为NULL等 如果返回小于count（包含0），那么就是读入错误或者到达文件结尾（判断errno和feof） 如果count == 0，则返回0，错误状态和文件指针不改变  fread不会返回负数
user-0 提问: 关于gets(a)的问题

回复:
user: user-1
content: 摒弃gets(str) 使用fgets(str,len,stdin);

user: user-2
content: 1.没法把44存在一个char字符里 2.%d会读到第一个非字符数字（%d如果只能读一个数字字符就停下来也太傻了吧？）

user: user-3
content: char只能代表一个字符，不可能两个字符用一个char  但你可以转换成数字类型，如int，这样可以一个变量直接保存44

user: user-4
content: gets()和sscanf都是将输入的数据以字符串的形式存放在字符数组a中，既然是字符串，那么每个都是独立的字符，即44在数组a中就是字符4和字符4； 如何转成数值44，可以考虑通过解析字符数组a，然后使用atoi函数或者使用sscanf. #include<stdio.h>   int main(void) {     char a[16] = "44+2-32";     int num1, num2, num3;      sscanf(a, "%d+%d-%d", &num1, &num2, &num3);      printf("%d %d %d \n", num1, num2, num3);      return 0; } 建议使用字符串分割，atoi这样的函数来处理；  另外，不建议使用gets函数，不安全。

user: user-5
content: 引用 1 楼 qq_18888869 的回复:你表述的问题很不清晰啊。我猜测你问的是两个问题。 1。gets()是读取字符串，你输入44+2-32最后是以ascll码的形式存储在数组里的，你不是也定义了数组是char类型的呀。 2.用%d读取i的时候一直读取到第一个非数字吧 ，你好好看看书这是很基本的scanf用法    那个就是在a[]数组里以各个字符的ascll码形式存储的，4的ascll码是52

user: user-5
content: 你表述的问题很不清晰啊。我猜测你问的是两个问题。 1。gets()是读取字符串，你输入44+2-32最后是以ascll码的形式存储在数组里的，你不是也定义了数组是char类型的呀。 2.用%d读取i的时候一直读取到第一个非数字吧 ，你好好看看书这是很基本的scanf用法
user-0 提问: C语言指定目录下搜索打印特定格式文件

回复:
user: user-1
content: #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <dirent.h>   #define MAX_NAME_LEN    32  DIR *open_dir(const char *dir_name) {     DIR *dp = opendir(dir_name);     if (!dp) {         fprintf(stderr, "open directory %s error, %s",                 dir_name, strerror(errno));         return NULL;     }      return dp; }  int main(void) {     char dir_name[MAX_NAME_LEN];     DIR *dp;     struct dirent *dirp;      printf("Please input a directory name: ");     scanf("%s", dir_name);      dp = open_dir(dir_name);     if (!dp)         return -1;      while ((dirp = readdir(dp))) {         if (strstr(dirp->d_name, ".tif"))             printf("filename: %s\n", dirp->d_name);     }       return 0; } C语言是这样输出某个目录下的指定格式文件的。

user: user-2
content: 这语言是c++，

user: user-1
content: 这似乎是C++的语法格式吧
user-0 提问: 关于野指针的一些问题

回复:
user: user-1
content: VS2013下，调试根本会断下来，指示stu未被初始化。

user: user-2
content: 野指针不一定会导致报错。野指针只是会造成不确定的结果，可能正常，也可能报错。例如你野指针指向的区域刚好是被分配出去的空间，那么就不会报错，但可能会不慎修改了那个区域原有的数据，这样打印出来是正常的，不过可能影响了别的变量数据  在linux下编译器刚好给你野指针分配的随机数不在栈区或者堆区，例如指向的位置在程序代码区，那就会报段错误  总之编译器和操作系统的不同，都会导致展现的形式不一样，所以必须避免野指针

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

user: user-4
content: 操作野指针是未定义行为

user: user-5
content: 野指针不代表空指针  能访问不代表是对的  没崩溃只是运气

user: user-6
content: 随机地址，是跟操作系统有关吗，分配规则不一样，

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:野指针不是随机分配的空间，野指针是指，指针变量里存放的数据（地址）是随机数，那么它指向的内存空间有可能是可读可写的，有可能是非可读可写；野指针很容易出现段错误，那么就是该随机地址指向了不可读或者不可写，或者既不可读也不写。 不用野指针主要是这个随机地址，不能保证指向的空间是可读可写的。所以，一定要给指针赋值一个可读可写的地址，通过malloc或者指向一个数组都可以。 好吧，是我的编译器有毛病，这个本来全部都不应该打印出来的，不知道为什么我用的编译器打印出来了。我在Linux下用了一下全部都是段错误。现在没有疑问了。

user: user-7
content: 野指针不是随机分配的空间，野指针是指，指针变量里存放的数据（地址）是随机数，那么它指向的内存空间有可能是可读可写的，有可能是非可读可写；野指针很容易出现段错误，那么就是该随机地址指向了不可读或者不可写，或者既不可读也不写。 不用野指针主要是这个随机地址，不能保证指向的空间是可读可写的。所以，一定要给指针赋值一个可读可写的地址，通过malloc或者指向一个数组都可以。
user-0 提问: 关于一道c语言编程题，各位帮忙看一下

回复:
user: user-1
content: 引用或者指针 void swap(char *p, char *q) { char temp = 'a'; *p = temp; *q = *p; }  void swap(char &p, char &q) { char temp = 'a'; p = temp; q = p; } 这个问题涉及到参数的传递，值传递，一般情况下，形参在方法内有效，无法更改实参的内容。

user: user-2
content: void swap(const char  *a, const char *b) {     char *tmp=(char*)malloc(sizeof(char)*40);     if (!tmp) {         fprintf(stderr, "malloc error!\n");         return;     }     strcpy(tmp, a);     strcpy(a, b);     strcpy(b, tmp);      free(tmp); }  申请了就要使用，不要申请之后没有使用）注意申请了temp，但是使用的是t）； 另外，注意你的数组a是字符数组，还是字符指针数组，如果是字符二维数组还好，若是字符指针数组还需要注意申请空间。

user: user-3
content: void swap(char *a,char *b)  // 调用时候传入 char* 类型的实参 {     char *temp=(char*)malloc(sizeof(char)*40);     strcpy(t,a);     strcpy(a,b);     strcpy(b,t);     free(temp); // 记得销毁不需要的内存，否则容易导致内存泄漏 }

user: user-4
content: malloc()与free()函数要一起用，不然很可能造成很多的内存被用而外溢

user: user-2
content: void swap( char  *a,  char *b) {     char *tmp=(char*)malloc(sizeof(char)*40);     if (!tmp) {         fprintf(stderr, "malloc error!\n");         return;     }     strcpy(tmp, a);     strcpy(a, b);     strcpy(b, tmp);       free(tmp); } 不好意思，去掉const，strcpy原型里是这样的 char *strcpy(char *dest, const char *src);

user: user-5
content: 引用 2 楼 cfjtaishan 的回复:void swap(const char  *a, const char *b) {     char *tmp=(char*)malloc(sizeof(char)*40);     if (!tmp) {         fprintf(stderr, "malloc error!\n");         return;     }     strcpy(tmp, a);     strcpy(a, b);     strcpy(b, tmp);      free(tmp); }  申请了就要使用，不要申请之后没有使用）注意申请了temp，但是使用的是t）； 另外，注意你的数组a是字符数组，还是字符指针数组，如果是字符二维数组还好，若是字符指针数组还需要注意申请空间。 参数的 const 错了 想清楚再写

user: user-6
content: 引用 3 楼 zhengchengyy 的回复:void swap(const char  *a, const char *b) {     char *tmp=NULL;     strcpy(tmp, a);     strcpy(a, b);     strcpy(b, tmp); }  如果不申请动态内存，这样也有错 指针并不会分配空间，这也是它和数组的区别

user: user-0
content: void swap(const char  *a, const char *b) {     char *tmp=NULL;     strcpy(tmp, a);     strcpy(a, b);     strcpy(b, tmp); }  如果不申请动态内存，这样也有错
user-0 提问: 新手求助，为什么给age输入20的时候，xp不是30呢？而是1102053386

回复:
user: user-1
content: vs2008没问题

user: user-2
content: 引用 4 楼 weixin_37671669 的回复:是不是我编译器问题呢，我是刚开始学习c，推荐一个好的编译器，简单点就好了，现在用的是C-FREE  在windows下用vs2010或者更新的版本 在linux下用gcc或者g++

user: user-3
content: 用VS吧：http://blog.csdn.net/cometnet/article/details/19551125

user: user-4
content: 程序没问题，可以正常输出，并得到预期结果；

user: user-3
content: VS结果是30，楼主贴一下你输入输出的截图吧

user: user-0
content: 是不是我编译器问题呢，我是刚开始学习c，推荐一个好的编译器，简单点就好了，现在用的是C-FREE

user: user-5
content: vs2010是显示30啊，你怎么输入的？
user-0 提问: 用文件指针复制一个文件

回复:
user: user-1
content: 调试的时候在工程目录下即可  外部执行就放在当前工作目录下（默认是程序所在的目录，可以用代码修改工作目录）

user: user-2
content: 把你的编译后的可执行文件放到和你要打开的文件同一目录下即可。同时要打开的文件需要已经存在，即需要事先创建； 建议你不要是用gets，因为gets不安全。
user-0 提问: 条件编译错误疑问

回复:
user: user-0
content: 引用 3 楼 cfjtaishan 的回复:#elif defined _MSC_VER 这就对了，也想到会出这种错误！

user: user-0
content: 呵呵，重启之后又不出现错误了，真是怪事！

user: user-1
content: #elif defined _MSC_VER

user: user-1
content: #include <windows.h>   #ifdef ADD_EXPORTS     #define ADDLL_API __declspec(dllexport) #elif defined _MSC_VER       #define ADDLL_API __declspec(dllimport) #else     #define ADDLL_API #endif  //ADD_EXPORTS 用defined试试， #elif defined _MSC_VER

user: user-2
content: 我的vs2010没显示错误啊，是不是别的问题
user-0 提问: 利用函数进行括号匹配  (()()())()

回复:
user: user-1
content: 仅供参考：#include<stdio.h> #include<malloc.h> #include<string.h> #define STACK_INIT_SIZE 10 #define STACK_GROW_SIZE 5 #define ELEMTYPE char #define OK 1 #define ERROR 0 typedef struct { /*建立一个栈的首结点*/     ELEMTYPE * base;     ELEMTYPE * top;     int stacksize; } SpStack; int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/     s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));     if (!s->base) return ERROR;     s->top=s->base;     s->stacksize=STACK_INIT_SIZE;     return OK; } int StackEmpty(SpStack *s) { /*判断栈是否为空*/     if (s->top==s->base) return OK;     else                 return ERROR; } int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/     if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/         s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));         if (!s->base) return ERROR;         s->stacksize+=STACK_GROW_SIZE;         s->top=s->base+s->stacksize;     }     *s->top++=e;     return OK; } int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/     if (StackEmpty(s)) return ERROR;     *e=*(--s->top);     return OK; } int Comp(ELEMTYPE a,ELEMTYPE b) {     if ((a=='('&&b!=')')       ||(a=='['&&b!=']')       ||(a=='{'&&b!='}')) {         return ERROR;     } else return OK; } int Count(SpStack *s) {     ELEMTYPE e[STACK_INIT_SIZE*2];     ELEMTYPE e1;     int i;      InitStack(s);     fgets(e,STACK_INIT_SIZE*2,stdin);     if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;     printf("%s\n",e);     for (i=0;e[i]!='\0';i++) {         switch (e[i]) {         case '(':         case '[':         case '{':             Push(s,e[i]);             break;         case ')':         case ']':         case '}':             if (StackEmpty(s)) {                 printf("%*s↖右括号多余\n",i+1,"");                 return(ERROR);             } else Pop(s,&e1);             if (!Comp(e1,e[i])) {                 printf("%*s↖左右匹配出错\n",i+1,"");                 return(ERROR);             }         }     }     if (!StackEmpty(s)) {         printf("%*s↖左括号多余\n",i,"");         return(ERROR);     } else {         printf("匹配正确\n");         return(OK);     } } void main() {     SpStack s;     Count(&s);     free(s.base); }

user: user-2
content: 到也不能说想法就错了，如果遇到)())())这种，想用计数的方法匹配就需要添加一个count计数器，遇到"("，计数器＋1，否则计数器－1，如果计数器出现负值，函数结束，括号不匹配。 但是弊端也很明显，如果读取的字符过多，运行效率会变得极差。 还有一种用栈匹配的方法，思想差不多，遇到左括号压栈，右括号弹栈(弹出的是左括号，且不将右括号压入栈中)，最后如果出现栈中不为空的情况，则不匹配。 方法很多，关于楼主的情况，开头提到的应该可以解决问题。

user: user-3
content: 引用 楼主 jashdf123 的回复:代码的批注中有我不能理解的地方，我能想到的办法就是一个个检查过去，检查到一个（号，标记加1，检查到）号标记减一，但是效率低。 利用下面这个算法会方便，但是我并不能完全理解。 想法是错误的 怎么匹配  )()(

user: user-4
content: 代码的批注中有我不能理解的地方，我能想到的办法就是一个个检查过去，检查到一个（号，标记加1，检查到）号标记减一，但是效率低  这个算法跟代码的算法，谁优谁劣犹未可知  前者是顺序判断。优点在于不用花费递归调用的开销，缺点是必须全部判断完字符串  后者是从内到外，从左到右判断（）的匹配情况。优点在于假设其中一对括号匹配出错（内到外），那么立即停止，缺点就是增加递归调用的开销，比如下面这种情况，可能计算不出结果 ((((((((......成千上万......)))))))  再说你这个算法本身就有问题。如下测试代码  b = false; char p[] = ")"; f(p, 0);
user-0 提问: win7下C语言怎么知道udp数据从哪个网卡接收到的

回复:
user: user-1
content: 是这样的，你收到的recvfrom函数里面会有一个参数是结构体指针（最后两个）struct sockaddr, 里面有发送方的IP和端口信息。由于socket只绑定协议，用GetAdaptersInfo得到所有网卡，放在IP_ADAPTER_INFO里面，根据info的掩码和地址来判断是哪个网卡。

user: user-2
content: 应该是第一块网卡，你可以抓包一下，看下是哪个网卡
user-0 提问: （需要报酬也可以）是否可以做一个小插件，放到，U盘里面让U盘的文件防拷贝，防删除？

回复:
user: user-0
content: 引用 9 楼 zilaishuichina 的回复:[quote=引用 7 楼 cz12980 的回复:] 感谢各位的回答。但是该功能是客户的需求。  只要做到不让用户误操作删除即可。也就是表面上的限制而已即可。不排除破解。  如通过"安全"设置可以达到用户不可以“删除”文件及其文件夹。  但是“安全” 里面没有，“不被复制”的设置。目前就是缺少这个，不知道这么让用户不可删除。    只是表面上的限制的话， 把你不想被用户复制/删除的文件，放到一个不可访问的文件夹里面就好了  如何创建一个不可访问的文件夹  [/quote]   而并没有不给复制  的安全设置，不给删除倒是有的。

user: user-1
content: 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！

user: user-2
content: lz的需求只能通过硬件实现，U盘是肯定不行的 ”不能删除“，则存储媒介只有光盘才能勉强符合 “不能复制“，则需要人为在光盘上制造坏道（参考防拷贝的VCD的做法），让光驱读不过去（但注意，依然有少部分软件能读过坏道的）  所以 ，不如把你的商业软件 做成web，让用户只能通过web服务器来访问你的商业数据，这样lz就可以在服务器上设置操作权限，达到你的需求

user: user-3
content: “不可以被复制出去即可”说明文件不可读，“不可以被删除掉”说明不可写。 不可读、不可写，这个东西有什么用？

user: user-4
content: 软件方面是做不到的，不运行的程序跟普通数据没什么差别

user: user-5
content: 引用 1 楼 ooolinux的回复:感觉应该在硬件层面来解决。 Linux的文件系统，文件有可读、可写、可执行等属性，如果去掉可读和可写属性，也许能部分满足你的要求。 文件和目录属性。字数。。

user: user-2
content: 引用 7 楼 cz12980 的回复:感谢各位的回答。但是该功能是客户的需求。  只要做到不让用户误操作删除即可。也就是表面上的限制而已即可。不排除破解。  如通过"安全"设置可以达到用户不可以“删除”文件及其文件夹。  但是“安全” 里面没有，“不被复制”的设置。目前就是缺少这个，不知道这么让用户不可删除。    只是表面上的限制的话， 把你不想被用户复制/删除的文件，放到一个不可访问的文件夹里面就好了  如何创建一个不可访问的文件夹

user: user-6
content: 做一个编码器/解码器。u盘接到编码器解码器，编解码器接到电脑；由编解码器管理U盘，使用你自创的文件系统，这样，你接入编解码器能正常的访问U盘数据，但如果U盘直接接入电脑，电脑会认为是没有格式化的盘

user: user-0
content: 感谢各位的回答。但是该功能是客户的需求。  只要做到不让用户误操作删除即可。也就是表面上的限制而已即可。不排除破解。  如通过"安全"设置可以达到用户不可以“删除”文件及其文件夹。  但是“安全” 里面没有，“不被复制”的设置。目前就是缺少这个，不知道这么让用户不可删除。

user: user-5
content: 感觉应该在硬件层面来解决。 Linux的文件系统，文件有可读、可写、可执行等属性，如果去掉可读和可写属性，也许能部分满足你的要求。
user-0 提问: 关于C语言printf前缀修饰符

回复:
user: user-1
content: 可以确定的讲，没有%l格式输出或者输入。 建议你把自己的代码贴出来。

user: user-2
content: %l 被当成了格式输入  如果要输出一个百分号，要写成%%  也就是写成 %%l 就可以输出 %l

user: user-3
content: http://blog.csdn.net/TrueLie/article/details/1692942?locationNum=4&fps=1 楼主如果不清楚printf的用法，可以看看这个。

user: user-4
content: 本来就没有%l 这个格式吧
user-0 提问: 顺序表的各种算法操作中，为什么有的函数形参用*&L,有的函数形参用*L

回复:
user: user-1
content: 如果你要在函数中修改指针本身的值（不是指针指向内存的值）的时候就要按引用传递

user: user-2
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-3
content: 楼主可以写一个swap交换两个整数的函数，在main中：输出两个数，调用swap交换两个数，再输出两个数。函数参数试试用指针和引用两种方法。 然后改写成交换两个指针变量的值，就容易理解了。

user: user-4
content: 看你需不需要在函数中改变指针的指向 如果需要就可以传一级指针的引用（*&L）或者二级指针（**） 普通的一级指针只能改变指针所指的内容

user: user-5
content: 参数分为单纯的传入参数和传入传出参数； 单纯的传入参数就是把链表的头地址传到子函数，不需要子函数处理之后将改变的内容传回调用函数； 传入传出参数就是要求传到子函数之后，在子函数里处理操作之后将结果再传回调用函数；举个例子，一个子函数是计算一个数的阶乘，通过传一个数值到子函数，还想将计算的结果带出来，就需要传地址值进去，这样，修改地址值里的值，就能改变调用函数里的变量数值。

user: user-6
content: 只要是改变了L就必须用引用，改变一个指针变量的方式有三种：第一种是传指针的地址，即其二级指针；第二种是传指针的引用，就是你的情况；第三种是通过返回值将指针值返回，这个时候要用指针去接收返回值

user: user-7
content: 你说得对,改变指针本身的值的要用引用,函数InitList中有针对L的赋值语句,所以用了引用
user-0 提问: C萌新求助，关于文件删除某一行。

回复:
user: user-1
content: 假设一个文件1.txt  文件内容为10个字符：  ABCDEFGHIJ  我希望把CD删掉，再存回1.txt  步骤为：  1、定义一个足够长的buff：如char buff[100]，将1.txt中的内容全部读入buff，此时buff中为“ABCDEFGHIJ\0”。  2、在内存中将“CD”删除，即将“CD”后面的“EFGHIJ”往前移2个字符，前移之后，将末尾空出来的2个字符设为'\0'，此时内存中的数据变为“ABEFGHIJ\0\0\0”。  3、将“ABEFGHIJ\0\0\0”全部写回1.txt

user: user-2
content: 引用 9 楼 qq_20553613 的回复:[quote=引用 8 楼 cfjtaishan 的回复:] [quote=引用 7 楼 qq_20553613 的回复:] [quote=引用 4 楼 cfjtaishan 的回复:] 文件是不支持指定删除文件中的某一行或者某一个字符或者字符串；所以，需要将文件里的内容先读到内存中（自己创建的数组或者链表），然后通过查找内存（数组或者链表），删除对应的内存数据（对应的节点），最后将剩余的数据再写到文件里；这样文件就是最新的不包含指定数据的文件。 比如，sqlite删除某条数据，数据库执行的操作就是上述过程吗？[/quote] 数据库就另当别论了，数据库是比较复杂的；我所说的是文本文件；通过C语言的文件读写对文件的操作； [/quote] 明白，当时一个小产品上需要对结果数据搜索、增、删、查、改（单片机跑实时系统），如果不用数据库，C语言操作普通的文件该如何实现？[/quote] 如果仅仅是对简单的数据进行保存，可以考虑文本文件；数据量不大，可以考虑文本文件，因为简单，效率还高（数据库可能会有其他对你而说不需要的功能）。如果数据有一定的格式，可以考虑ini格式文件。 增，删，改，查这些都是将文件内容加载到内存，然后在内存中操作的，在需要的时候再同步到文件。

user: user-3
content: 引用 9 楼 qq_20553613 的回复:[quote=引用 8 楼 cfjtaishan 的回复:] [quote=引用 7 楼 qq_20553613 的回复:] [quote=引用 4 楼 cfjtaishan 的回复:] 文件是不支持指定删除文件中的某一行或者某一个字符或者字符串；所以，需要将文件里的内容先读到内存中（自己创建的数组或者链表），然后通过查找内存（数组或者链表），删除对应的内存数据（对应的节点），最后将剩余的数据再写到文件里；这样文件就是最新的不包含指定数据的文件。 比如，sqlite删除某条数据，数据库执行的操作就是上述过程吗？[/quote] 数据库就另当别论了，数据库是比较复杂的；我所说的是文本文件；通过C语言的文件读写对文件的操作； [/quote] 明白，当时一个小产品上需要对结果数据搜索、增、删、查、改（单片机跑实时系统），如果不用数据库，C语言操作普通的文件该如何实现？[/quote] 如果不想用关系型的大型数据库，就用sqite吧，不算太大功能齐全，你自己实现也不会比它更好了。文本只适合简单的内容。

user: user-4
content: 引用 8 楼 cfjtaishan 的回复:[quote=引用 7 楼 qq_20553613 的回复:] [quote=引用 4 楼 cfjtaishan 的回复:] 文件是不支持指定删除文件中的某一行或者某一个字符或者字符串；所以，需要将文件里的内容先读到内存中（自己创建的数组或者链表），然后通过查找内存（数组或者链表），删除对应的内存数据（对应的节点），最后将剩余的数据再写到文件里；这样文件就是最新的不包含指定数据的文件。 比如，sqlite删除某条数据，数据库执行的操作就是上述过程吗？[/quote] 数据库就另当别论了，数据库是比较复杂的；我所说的是文本文件；通过C语言的文件读写对文件的操作； [/quote] 明白，当时一个小产品上需要对结果数据搜索、增、删、查、改（单片机跑实时系统），如果不用数据库，C语言操作普通的文件该如何实现？

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

user: user-2
content: 引用 7 楼 qq_20553613 的回复:[quote=引用 4 楼 cfjtaishan 的回复:] 文件是不支持指定删除文件中的某一行或者某一个字符或者字符串；所以，需要将文件里的内容先读到内存中（自己创建的数组或者链表），然后通过查找内存（数组或者链表），删除对应的内存数据（对应的节点），最后将剩余的数据再写到文件里；这样文件就是最新的不包含指定数据的文件。 比如，sqlite删除某条数据，数据库执行的操作就是上述过程吗？[/quote] 数据库就另当别论了，数据库是比较复杂的；我所说的是文本文件；通过C语言的文件读写对文件的操作；

user: user-4
content: 引用 4 楼 cfjtaishan 的回复:文件是不支持指定删除文件中的某一行或者某一个字符或者字符串；所以，需要将文件里的内容先读到内存中（自己创建的数组或者链表），然后通过查找内存（数组或者链表），删除对应的内存数据（对应的节点），最后将剩余的数据再写到文件里；这样文件就是最新的不包含指定数据的文件。 比如，sqlite删除某条数据，数据库执行的操作就是上述过程吗？

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

user: user-2
content: 文件是不支持指定删除文件中的某一行或者某一个字符或者字符串；所以，需要将文件里的内容先读到内存中（自己创建的数组或者链表），然后通过查找内存（数组或者链表），删除对应的内存数据（对应的节点），最后将剩余的数据再写到文件里；这样文件就是最新的不包含指定数据的文件。

user: user-3
content: 一般而言只能全部读到内存里面，然后重新写一个新文件。

user: user-0
content: 那个，具体怎么实现？

user: user-7
content: 读取——删除——覆盖写入
user-0 提问: 在字符串中查找字符

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

user: user-2
content: 判断语句要细心，=不等与==

user: user-3
content: if(*(str1+i)=c)  //不是等于‘c’

user: user-4
content: if(*(str1+i)='c')  判断相等用的是 ==  （两个=）  其实这里判断是与字符'c'，如果你要判断的是变是c，要去掉单引号

user: user-5
content: char *str_find(char*str1,char c) //这里的c是变量 {     int i;       for(i=0;i<strlen(str1);i++)         if(*(str1+i)='c') // 这里的 c 是字面字符             return str1+i;     return NULL; }

user: user-6
content: char *str_find(char*str1,char c) {     int i;       for(i=0;i<strlen(str1);i++)         if(*(str1+i) == c) /*改一下此处*/             return str1+i;     return NULL; }
user-0 提问: eclipse for c/c++下scanf有问题

回复:
user: user-1
content: 写个更简单的程序测试下scanf，看看是代码问题还是别的问题造成的

user: user-2
content: 引用 3 楼 youkan0521 的回复:[quote=引用 1 楼 cyfcsd 的回复:] 在前面加一句fflush(stdin);试试  这不涉及scanf和printf的顺序问题。我试了一下也不可以[/quote] 奥，停不下来挺异常的，但更异常的是里面居然每次有“有意义的内容”，你看到的command可能不是上面定义的那个

user: user-0
content: 引用 1 楼 cyfcsd 的回复:在前面加一句fflush(stdin);试试  这不涉及scanf和printf的顺序问题。我试了一下也不可以

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

user: user-2
content: 在前面加一句fflush(stdin);试试
user-0 提问: 求数据结构树的结点a,b,e构成路径的路径长度?

回复:
user: user-0
content: 这是技术论坛吧？    不关你的事你说这么多没用的

user: user-1
content: 引用 5 楼 prayer163 的回复:[quote=引用 4 楼 Pingo520的回复:]首先你去看看路径长度的定义是什么，然后按照那个长度定义自己数一下就行了。如果你老实按照定义计算出来的结果和电子书上的结果不对，要么就是定义出错i，要么就是书上的结果出错。至于是定义出错还是结果出错，你去搜下路径长度定义不就行了嘛 我有一个答案，可是如果不能证明答案，那这本书我还怎么看? 如果这本书连这个都会印错，那我直接删掉! 我就纳闷了，在这问个问题，你们答的这么费劲呢[/quote] 你有一个答案，网上也有很多答案，为什么不去直接搜答案。赵老师和我回答的虽然不是直接的答案，但是是解决很多问题的途径。授人以鱼不如授人以渔。当然，你不认同不接受不关我们的事

user: user-0
content: 引用 4 楼 Pingo520的回复:首先你去看看路径长度的定义是什么，然后按照那个长度定义自己数一下就行了。如果你老实按照定义计算出来的结果和电子书上的结果不对，要么就是定义出错i，要么就是书上的结果出错。至于是定义出错还是结果出错，你去搜下路径长度定义不就行了嘛 我有一个答案，可是如果不能证明答案，那这本书我还怎么看? 如果这本书连这个都会印错，那我直接删掉! 我就纳闷了，在这问个问题，你们答的这么费劲呢

user: user-0
content: 引用 1 楼 赵4老师的回复:不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！ 可是这问题你到底会不会?

user: user-1
content: 首先你去看看路径长度的定义是什么，然后按照那个长度定义自己数一下就行了。如果你老实按照定义计算出来的结果和电子书上的结果不对，要么就是定义出错i，要么就是书上的结果出错。至于是定义出错还是结果出错，你去搜下路径长度定义不就行了嘛

user: user-1
content: 赵老师遭到质疑了

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！
user-0 提问: C语言矩阵遍历四个象限

回复:
user: user-0
content: 好比一个游戏中出现的手枪，它是怎么随机出现和给定坐标的，若出现在有效区边界上或者之外时要怎么处理

user: user-0
content: 边界就是随便给的，只是要写出边界是怎么处理的

user: user-0
content: 不是矩阵的四个象限，而是给定区域从任意位置出发的一个矩阵遍历，划分为四个区域就相当于是四个象限

user: user-1
content: 给你个框架吧，大概就是这个样子  void ergodicRightUp(matrix m,int i,int j)//右上方，第一象限 {     int r = 0;     int c = 0;     int width = m.Width();     for(r=0; r<=i; r++){         for(c=j; c<width; c++){             //访问m[r][c]         }     } }

user: user-2
content: 矩阵怎么分四个象限？边界条件又是什么？

user: user-3
content: 请举至少5个例子。
user-0 提问: PAT1004总是显示段错误，读入n名学生的姓名、学号、成绩，分别输出成绩最高和成绩最低学生的姓名和学号

回复:
user: user-1
content: 网上找下AC的代码吧。 1.看看你们的输入输出格式是不是一致 2.多测试一些样例

user: user-0
content: 总是显示段错误，要怎么该呢
user-0 提问: 编译链接都没错，一运行就报错，求大神指路

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

user: user-2
content: F5调试运行吧,  没有格式化的代码, 看起好累.  F5调试运行,  报错的时候看堆栈, 还有各变量是否正确.  这样就可以看到的.  关于链表的程序, 一般都是空指针, 或者野指针问题.

user: user-3
content: 代码真够长的，函数体太长，可以尝试简化一下；变量太多，可以考虑使用数组。 变量car是0时，除数为0了，这个没有做判断。

user: user-4
content: 这个程序真是够长啊，运行错八成是野指针在作祟，你还是单步调试一下吧