Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: cygwin中文问题？

回复:
user: user-0
content: 引用 4 楼 ForestDB 的回复:你的源文件是utf8的？你console的locale设定是怎样的？谢谢啊，看了下是编码选错了，选的是UTF-8 改成GBK就好了

user: user-1
content: printf语句之前做个清屏操作试试

user: user-2
content: 你的源文件是utf8的？你console的locale设定是怎样的？

user: user-3
content: 字符集的问题是C编程最麻烦的地方之一，你的问题不但与程序本身有关，也与编译器有关，不能一概而论。

user: user-4
content: 缺少格式控制符%s，按理来说应该会报错，不能运行，不同编译器不一样，加个格式控制符是是。 printf("%s",'hello world !你好世界'\n);

user: user-5
content: 不一定对，仅供参考： #include <stdio.h> #include <locale.h>   int main(void) {    setlocale(LC_ALL,"chs");     printf("%s","hello,word!你好世界\n");     return 0; }
user-0 提问: 怎样进一步提高编程能力

回复:
user: user-1
content: 程序白痴也来求经验

user: user-2
content: 我感觉你还没有入门  编程这个行业，门槛很模糊，很可能你学了一两年了，也能动手做一些东西了但你其实还是根本没有入门.....  又看php又看java有学c++  这就是在作死   php仍了，用c++入门   把c++学好了  其他语言都是浮云  找本c++ primer plus看几遍先

user: user-3
content: 不能一直看书，每看了一点，有收获后就立即实践，选书也要注意好坏先后，只有做过了才是会了。加油！！！

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

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

user: user-5
content: 多写代码，多写代码，还是多写代码

user: user-6
content: 数据结构与算法  自己动手做一个小项目试试  试试在线编程题，比如zoj，poj等等

user: user-7
content: 在CSDN多看多问吧...................

user: user-4
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-8
content: 用你会用的语言去做一个小东西把。还有去看开源软件的代码，比如nginx，curl，学习别人的设计。
user-0 提问: c语言用ADO操作MYSQL问题

回复:
user: user-1
content: 返回值仅表示对mysql服务访问的一种执行状态。是OK的。 至于你所查询的记录是否存在数据或者为空，要看你查询到的数据再做断定了。  比方，我用渔网捞鱼，网下水到收网，动作连贯，没有碰到障碍物神马的，说明我本次捞鱼的动作是OK的。 至于有没有鱼在网里...你得再看一眼了。

user: user-2
content: 返回OK只代表执行正常，不代表就有记录吧
user-0 提问: 在C语言中如何读取MATLAB 的.mat文件中的数据

回复:
user: user-1
content: 编译出来的库你有没有调用初始化。。貌似****institu什么的。记得有两个函数是初始化的

user: user-2
content: mlfCell2struct ？

user: user-3
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不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: 关于指针的一些问题？

回复:
user: user-1
content: 楼主可以看一下——http://blog.csdn.net/u012421456/article/details/20296865

user: user-2
content: 解释如下: p1 = &a : p1变量的  值 为一个地址-------&a *p1 = a : p1变量存储的地址所关联的存储区,存放数据a  (或者以pi指向的地址为起始位置的sizeof(int)字节的内存存放数据a)   你要明白,*是一个操作符-----解引用.*p1就对指针p1进行了一次解引用操作.p1是一个指针变量,和你熟悉的int变量等在概念上是没有区别的,仅仅是存储的东西不一样而已. 比如int型变量a ,你可以对他做一些操作,比如&(取地址),指针变量也有一些可取的操作,比如*(解引用),&(取地址-----指针变量也可以取地址),这些变量能应用的操作不同而已,概念上没有区别.  ------------------------------------- 我的解释和书本的解释在用语上不同.你可以找本书看一看. ---------------------------------------- 第二个问题解释 p1 = p2;   把p2的值复制给p1,p1原来的值被新值覆盖(就是p1存储 了一个新地址嘛!和int a = b道理是一样的,数据类型不同而已) *p1 = *p2:(p1的值不变----指向的地址不变,但是该地址关联的存储区所存放的数据改变了)  ------------------------- 第三个问题的解释 略

user: user-3
content: 1，没区别 2，有区别

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

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

user: user-0
content: strSQL.Format(_T("select * from user")); 这样的sql语句就没问题
user-0 提问: 求助， 关于文件备份  断电保护 的问题

回复:
user: user-1
content: 在每次写数据文件成功后，更新信息文件，记录当前写好的位置。这里的写成功必须是flush到磁盘成功后为准。 不用文件名切换来切换去的。信息文件记录的位置就是最后确认已经成功的位置。续传的时候从这开始。

user: user-2
content: 写操作中缓冲区里，没真正写入 sync一下

user: user-3
content: 现代电脑恐怕就算你拔掉电插头，内存中待写缓冲区的内容也会写到硬盘上，硬盘磁头也会安全降落到停止区吧。

user: user-3
content: http://bbs.csdn.net/topics/390787357  搜“robocopy"
user-0 提问: 关于将c语言输出结果写入到TXT文件的问题咨询【c语言】

回复:
user: user-1
content: FILE*fp; FILE*fp1;  fp=fopen("1.txt","a");  if (fp) {     fprintf(fp,"1\n");     fclose(fp);  }  fp1=fopen("beiyong5.txt","a");  if (fp1) {     fprintf(fp1,"1\n");     fclose(fp1);  }

user: user-2
content: 我记得"a"模式需要原文件存在。你可以试一下用"w+"来打开
user-0 提问: 困惑了一个晚上的问题= =求思路

回复:
user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:先按从大到小排序，然后深搜   怎么深搜= =

user: user-1
content: 先按从大到小排序，然后深搜

user: user-2
content: 遍历没说错，只是光遍历不行，还要回溯。  对于第一个数，如果是解的一部分，那么，继续处理剩下的几个数，总和调整为9-1=8，剩下的数递归处理 同时再考虑第一个数不是解的一部分，那么对剩下的4个数继续处理，总和还是9，递归之

user: user-3
content: 01背包问题，这里给个代码，供参考。 #define N 1000 int input[N+1]; int path[N+1]; void PrintComm( int n, int a[], int curSum, int curIndex, int totalSum ); int main(int argc, char* argv[]) { 	int n,sum,i; 	scanf("%d%d", &n, &sum);//输入数字个数与要求的和     for ( i=0; i<n; i++ ) scanf( "%d", &input[i+1] ); 	input[0] = 0; 	path[0] = 0; 	PrintComm(n, input, 0, 0, sum); 	return 0; }   void PrintComm( int n, int a[], int curSum, int curIndex, int totalSum ) {  	 int i;      if ( curIndex > n ) return; 	 if ( curSum == totalSum )  //和相等输出路径 	 { 	     for ( i=0; i<=curIndex; i++ ) 		 { 		     if ( path[i] ) printf( "%d ", i ); 		 } 		 printf( "\n" ); 		 return; 	 } 	 if ( curSum > totalSum ) return;       path[curIndex+1] = 0;      PrintComm(n, a,curSum, curIndex+1, totalSum);      path[curIndex+1] = 1;      PrintComm(n,a,curSum+a[curIndex+1], curIndex+1, totalSum); }

user: user-0
content: 还是不太懂= =
user-0 提问: C语言栈的问题，求大神帮解答

回复:
user: user-1
content: 这应该分配一个一维数组，象现在什么都不是的

user: user-2
content: a为char类型的时候可以用EOF来结束循环。 while((a=getchar())!=EOF) //循环体。 ;  用ctrl+Z可以输入EOF字符

user: user-2
content: 为什么我看着不像顺序栈而像链栈。。。。

user: user-3
content: 用一个特定的整数指示结束，比如-999。     if (a == -999)           ......
user-0 提问: 关于结构体的一些问题？

回复:
user: user-1
content: 可以这么引用  ((int*)pa)[0]=1;

user: user-2
content: 引用 8 楼 darknightghost 的回复:[quote=引用 5 楼 sholber 的回复:] [quote=引用 4 楼 darknightghost 的回复:] struct student *p; p=stu;  引用可以这样: (p+下标)->成员名 或 p[下标].成员名  指向数组的指针可以当数组用的  你的意思是 int a [100]; int (* pa) [] = a; pa是指向数组的指针。你的意思是可以象下面这样当数组用？－－! pa[0]=1;[/quote] 我说的是指向数组的指针,你整个指针数组出来..[/quote]  int (* pa) [] 到底是指向数组类型的指针，还是指针类型的数组？唵？

user: user-1
content: 引用 5 楼 sholber 的回复:[quote=引用 4 楼 darknightghost 的回复:] struct student *p; p=stu;  引用可以这样: (p+下标)->成员名 或 p[下标].成员名  指向数组的指针可以当数组用的  你的意思是 int a [100]; int (* pa) [] = a; pa是指向数组的指针。你的意思是可以象下面这样当数组用？－－! pa[0]=1;[/quote] 我说的是指向数组的指针,你整个指针数组出来..

user: user-1
content: 我是这个意思  int a[100]; int* pa;  pa=a;  pa[0]=1;   pa[下标]<=>a[下标]

user: user-2
content: 不明白“结构体数组指针”是什么意思，以及你所谓的“引用”是个什么情况。 是指向“元素类型为结构体的数组”的指针？

user: user-2
content: 引用 4 楼 darknightghost 的回复:struct student *p; p=stu;  引用可以这样: (p+下标)->成员名 或 p[下标].成员名  指向数组的指针可以当数组用的  你的意思是 int a [100]; int (* pa) [] = & a;  pa是指向数组的指针。你的意思是可以象下面这样当数组用？－－! pa[0]=1;

user: user-2
content: 引用 4 楼 darknightghost 的回复:struct student *p; p=stu;  引用可以这样: (p+下标)->成员名 或 p[下标].成员名  指向数组的指针可以当数组用的  你的意思是 int a [100]; int (* pa) [] = a; pa是指向数组的指针。你的意思是可以象下面这样当数组用？－－! pa[0]=1;

user: user-1
content: struct student *p; p=stu;  引用可以这样: (p+下标)->成员名 或 p[下标].成员名  指向数组的指针可以当数组用的

user: user-2
content: 给定声明： struct student  {/* …… */} stu [100]; 为了引用stu，则： 一，可以声明一个指向struct student类型的指针： struct student * pstu = stu; 除非做为sizeof和&运算符的操作数，元素类型为T的数组被转换为指向T的指针，且指向数组的第一个元素。因为stu是数组，元素类型是struct student，所以被转换为指向struct student的指针，即struct student *，可以赋给pstu。 二，向函数传递struct student类型的指针： struct student * pstu = stu; void f (struct student *); f (pstu);     //直接传递指针。 f (stu);     //数组传递时被自动转换为指向其第一个元素的指针。

user: user-0
content: 引用 1 楼 sholber 的回复:不明白“结构体数组指针”是什么意思，以及你所谓的“引用”是个什么情况。 是指向“元素类型为结构体的数组”的指针？ 就是 struct student {  ... ... ... }stu[100]; 定义一个结构体数组，然后怎么用指针引用？
user-0 提问: 在windows下用C语言写了关于socket的程序，用mingw无法编译成功，但是改成C++程序就可以，这是为什么

回复:
user: user-0
content: 楼上正解   除此之外 把29行改成 if (connect(sclient, (struct sockaddr *)&serAddr, sizeof(struct sockaddr_in)) == SOCKET_ERROR)

user: user-1
content: 还有35行,c的声明必须放在函数开头

user: user-1
content: 注意c和c++语法上的细微区别 例如25行 sockaddr_in serAddr;改为 struct sockaddr_in serAddr;  别以为不用类,模板等c++的特性c和c++完全一样,他们语法有区别的,比如c++声明结构体变量时不用加struct,c必须加 另外c里面没有bool,我以前看到过有新手在c里声明bool变量...
user-0 提问: 实现atoi函数 最后一步数学运算总也出不来正确结果

回复:
user: user-0
content: 万分感谢，学习中......

user: user-1
content: num+=ch[n]*ten;//ch[n]*ten这里的运算不能得出正确的指  ch[n]是char，也就是说，读入的'1'还是'1', 对应int是0x31, 不是1 改成num+=(ch[n]-0x30)*ten;//ch[n]*ten  另外，最后也不用双循环这么麻烦  num=0; n=0; while(ch[n] != 0)    {        num = num*10+(ch[n]-0x30)        ++n;    }

user: user-2
content: 参考下列文件中任一个： C:\Microsoft SDK\src\crt\atox.c C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\atox.c C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\ATOX.C C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\atox.c C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\atox.c C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\atox.c
user-0 提问: 将两个升序排列的双链表合并成一个升序排列的双链表的函数

回复:
user: user-1
content: typedef struct Node { 	int Index; 	void * data; 	struct Node * next, *prev; }Node;   Node * merge(Node *first,Node* second) { 	Node * NodeNext,*NodePrev; 	Node * Head,*WorkNode; 	 	if(first->Index < second->Index)	 	{ 		Head=first; 		first = first->next; 	} 	else 	{ 		Head=second; 		second = second->next; 	} 	WorkNode = Head; 	 	Node * temp=NULL; 	 	while(first!= NULL && second != NULL)	 	{ 		if(first->Index < second->Index) 			temp = first; 		else 			temp = second; 		 		WorkNode->next = temp; 		temp->prev = WorkNode; 		temp= temp->next; 		WorkNode = WorkNode->next; 	} 	 	temp=NULL; 	 	if(first==NULL) 		temp = second; 	else 		temp = first; 	 	while(temp) 	{ 		WorkNode->next= temp; 		temp->prev= WorkNode; 		temp= temp->next; 		WorkNode = WorkNode->next; 	} 	WorkNode->next = NULL; 	 	return Head; }

user: user-2
content: 直接百度一个吧，这种代码太多了
user-0 提问: 请哪位老师帮我写一个模拟智能家居的代码

回复:
user: user-1
content: 这个嵌入式开发的问题，至少1人月吧，连同需求分析、开发、测试等等，时间更长。毕竟是商用的，而不是写段演示代码。

user: user-2
content: 这种东西有困难，继续围观

user: user-3
content: 好难啊！！！

user: user-4
content: 你在搞什么鸟

user: user-5
content: 100分帮你写个这个？我觉得不太可能，占个位置围观一下。 嘿嘿，盗用一下

user: user-6
content: 楼主想想就该知道，哪能有人直接给个这个，再说，给你了，你看的懂吗？给人交过去，问你你清楚吗？建议从网上着一些相关的作品，好好看看人家的东西，看能看懂不，不会了，想不明白，再问人吧

user: user-7
content: 建议还是百度吧...

user: user-8
content: 对啊，100分写这个，我是太闲了，并且连个需求什么的都没贴，神能凭空写出来！

user: user-9
content: #include <stdio.h>  int main() { 	for(;;) 	{ 		switch(接收函数) 		{ 			case 1: 			.... 			break; 			case 2: 			.... 			break; 			case 3: 			.... 			break; 		} 	} }  不谢

user: user-10
content: 就算你爹 是李嘉成 你觉得这样的代码，你能买得起吗？ 就算你能买得起，你觉得别人是2B吗？

user: user-11
content: 100分帮你写个这个？我觉得不太可能，占个位置围观一下。
user-0 提问: C (mysql)   Error: 2014: Commands out of sync; you can't run this command now

回复:
user: user-1
content: 可以试试看  先  sync

user: user-1
content: 引用 2 楼 u012889234 的回复:[quote=引用 1 楼 q3733353520 的回复:] 可以试试看  先  sync  什么意思？[/quote]   引用 2 楼 u012889234 的回复:[quote=引用 1 楼 q3733353520 的回复:] 可以试试看  先  sync  什么意思？[/quote]  http://blog.csdn.net/luketty/article/details/5745000

user: user-0
content: 引用 1 楼 q3733353520 的回复:可以试试看  先  sync  什么意思？
user-0 提问: 问一个51单片机LED流水灯的延时问题

回复:
user: user-0
content: 比如说单片机晶振是12Mhz，那130,38怎么计算

user: user-1
content: 这种要算指令周期的延时不可靠     来个中断你的延迟就错了       还是老老实实用定时器做吧  不需要算指令周期   不需要掐指头算多少指令

user: user-2
content: 想问下延时函数为什么是循环嵌套，a=130，b=38是什么意思是，  这是计算来的，跟晶振的频率有关，不同的晶振频率不同，延时的代码也不一样。主要是调整循环次数来生成不同的指令条数达到延时目的

user: user-3
content: 想问下延时函数为什么是循环嵌套，a=130，b=38是什么意思是， 因为要延时，然后就弄个双层循环，但是什么都不干，，a=130，b=38这是通过计算出来的，一般和你单片机的晶振有关。
user-0 提问: C语言 指针 字符指针数组

回复:
user: user-1
content: 所有作为函数参数的数组最终都会退化为指针。char * str []-----》char** str

user: user-2
content: void print_str(char *str[],int n)//这里的*str[]是一个字符指针数组，当然不能仅仅认为它只是一个字符指针,所以不能写成*str，可以这样理解吗？ {                                //这里的*str[]可以换一种表达方式吗????????  -------------------------------------------------------------------------- 首先，指针类型是以它指向的类型为特征的。不同的指针类型区别在于它们各自指向的类型。 char * str []是一个元素类型为“指向char类型的指针”的数组。 如果数组类型出现在函数参数列表中，则它被调整为指向数组首元素的指针。因此，char * str []和char * * str在函数原型中是一样的。

user: user-2
content: 引用 4 楼 liuchang910781261 的回复:[quote=引用 2 楼 FightForProgrammer 的回复:] 所有作为函数参数的数组最终都会退化为指针。char * str []-----》char** str 谢谢大神~~~ 所有作为函数参数的数组最终都会退化为指针，受教了。。。。。。 [/quote] “退化”这个词用得真是~~~&%$#%$^& 为什么叫退化？怎么就退化了？干嘛要退化？这个词说明C语言的知识来路不正……我没说是野路子……但不代表我不是这样想的哈……

user: user-0
content: 引用 2 楼 FightForProgrammer 的回复:所有作为函数参数的数组最终都会退化为指针。char * str []-----》char** str 谢谢大神~~~ 所有作为函数参数的数组最终都会退化为指针，受教了。。。。。。

user: user-0
content: 引用 1 楼 sholber 的回复:void print_str(char *str[],int n)//这里的*str[]是一个字符指针数组，当然不能仅仅认为它只是一个字符指针,所以不能写成*str，可以这样理解吗？ {                                //这里的*str[]可以换一种表达方式吗????????  -------------------------------------------------------------------------- 首先，指针类型是以它指向的类型为特征的。不同的指针类型区别在于它们各自指向的类型。 char * str []是一个元素类型为“指向char类型的指针”的数组。 如果数组类型出现在函数参数列表中，则它被调整为指向数组首元素的指针。因此，char * str []和char * * str在函数原型中是一样的。 谢谢大神~~~
user-0 提问: scanf 缺省输入的疑问

回复:
user: user-1
content: n1 n2 n3的顺序完全颠倒，比如我输入 n1 n2 n3   1 2 3  结果输出却是 3  0 0 这是完全颠倒吗？？ 不是 原因如一楼所说，当然，这个在一定情况下也是有些用处的 http://zhidao.baidu.com/question/493114473.html?qbl=relate_question_1&word=scanf%20%25*d

user: user-0
content: 引用 7 楼 Data_Flow 的回复:你输入123 前面的12都被忽略了 3被赋值给n1了 而n2,和n3都被初始化为0.所以输出是3 0 0 嗯嗯

user: user-2
content: 你输入123 前面的12都被忽略了 3被赋值给n1了 而n2,和n3都被初始化为0.所以输出是3 0 0

user: user-3
content: http://bbs.csdn.net/topics/390471779 #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-4
content: 受教了。。。。。

user: user-0
content: 引用 2 楼 u012421456 的回复:n1 n2 n3的顺序完全颠倒，比如我输入 n1 n2 n3   1 2 3  结果输出却是 3  0 0 这是完全颠倒吗？？ 不是 原因如一楼所说，当然，这个在一定情况下也是有些用处的 http://zhidao.baidu.com/question/493114473.html?qbl=relate_question_1&word=scanf%20%25*d  嗯，多谢提醒，问题描述不是太准确，一楼很好的解决了我的问题，你给的答案也不错，受用了，刚刚开始接触，多谢！

user: user-0
content: 引用 1 楼 CharlesSimonyi 的回复:scanf("%*d %*d %d",&n1);  这样就行了，前两个%*d既然忽略输入，当然不需要传入参数。 真正接收的是%d，只接收了一个数字，自然只需要传入一个变量来接收这个数字。  scanf("%*d %*d %d",&n1,&n2,&n3); 这样的话后面多传入的&n2,&n3是没有用的。  哦 明白了，说到死是因为%*d不接受输入，没必要在后面给上输入变量了，刚刚又看了下书，确实是这样，输入变量只有一个，后面两个是自己瞎想出来的，这就好解释了！多谢了

user: user-5
content: scanf("%*d %*d %d",&n1);  这样就行了，前两个%*d既然忽略输入，当然不需要传入参数。 真正接收的是%d，只接收了一个数字，自然只需要传入一个变量来接收这个数字。  scanf("%*d %*d %d",&n1,&n2,&n3); 这样的话后面多传入的&n2,&n3是没有用的。
user-0 提问: 结构体数组指针？

回复:
user: user-1
content: 引用 2 楼 CharlesSimonyi 的回复:pstu[i] 你对指针使用了数组下标，得到的已经不是个指针了，而是对象本身 我也顺便学习了~~~

user: user-2
content: 指针指向一个结构数组，那么pstu[i]为索引I的值，为一个结构，固用pstu[i]取得一个结构，再取其下的一个字段，将输入写入的是这个字段的地址，故为&(pstu[i].id))，若优先级不清楚，那就用括号来提升优先级，这个级 是万能的

user: user-3
content: 你是访问数组元素，而不是指针本身

user: user-4
content: 定义的指针，应该用->

user: user-5
content: 一般，结构体和类中，对于非结构指针实例用"."（下面的pt）,而指针型的结构体实例用"->"（下面的*p）。 举例子来说：  #include <iostream> using namespace std; struct point {     int x;     int y; //包含两个变量成员 }; void main() {     point pt;     point *p;     pt.x=1;      pt.y=2;     cout<<pt.x<<endl<<pt.y<<endl;//不能用“->”     cout<<p->x<<endl<<p->y<<endl;//不能用“.” }  这是结构体的，类也是一样的。 这是我百度的，楼主可以参考学习~~~~

user: user-6
content: pstu [i].id

user: user-7
content: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

user: user-8
content: pstu[i] 你对指针使用了数组下标，得到的已经不是个指针了，而是对象本身

user: user-9
content: scanf("%d",(&pstu[i])->id);  注意优先级
user-0 提问: 字符数组用printf函数16进制输出格式？

回复:
user: user-1
content: 引用 2 楼 zhao4zhong1 的回复:void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }  太感谢了！！！！！！这么实用标致的一段代码。

user: user-2
content: 引用 4 楼 my_xxh 的回复:[quote=引用 3 楼 lm_whales 的回复:] 问题解决了。感谢泥的回答。我是新手，懂得太少。。想问问关于这方面（类似上述问题相关的c语言编程细节方面）有资料推荐。分享嘛？谢谢[/quote] 这种 细节问题 1）C，C++标准 2）各种编译器的文档 3）一些C，C++书籍，例如C程序设计语言 之类的---  英文原版比较好，看不懂原版（我也看不懂），看翻译版，讲的比较透彻                C primer                 C++primer 一些教材，可能不会讲的太细致。 毕竟那些教材，只是介绍一些入门知识而已。

user: user-0
content: 引用 3 楼 lm_whales 的回复:%mx, 之类的格式输出，输出宽度不够，忽略输出宽度，直接全部输出 在输出前，转换为无符号类型，可以避免这种问题,,,,  所有较短整型，在调用 printf 之类的输出流函数的时候，会转换为int 类型， 而 char 类型缺省实现，并不是 unsigned char，通常是 signed char; 转化为int 的时候，会做符号位扩展 问题解决了。感谢泥的回答。我是新手，懂得太少。。想问问关于这方面（类似上述问题相关的c语言编程细节方面）有资料推荐。分享嘛？谢谢

user: user-2
content: %mx, 之类的格式输出，输出宽度不够，忽略输出宽度，直接全部输出 在输出前，转换为无符号类型，可以避免这种问题,,,,  所有较短整型，在调用 printf 之类的输出流函数的时候，会转换为int 类型， 而 char 类型缺省实现，并不是 unsigned char，通常是 signed char; 转化为int 的时候，会做符号位扩展

user: user-3
content: void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-4
content: printf("ptr_File[K]=%02X\n",ptr_File[K]);
user-0 提问: 求急急急！！请高手

回复:
user: user-0
content: 引用 2 楼 q3733353520 的回复: for(i=0;j<3;i++)  // for(i=0; i<3; i++)  太粗心了 { for(j=0;j<2;j++) { p=(struct lnode *)malloc(sizeof(struct lnode)); p->data=ch[i][j]; q->next=p; p->next=NULL; q=p; }     木哈哈， 搞了2天了，太谢谢指点了

user: user-1
content: for(i=0;j<3;i++)  // for(i=0; i<3; i++)  太粗心了 { for(j=0;j<2;j++) { p=(struct lnode *)malloc(sizeof(struct lnode)); p->data=ch[i][j]; q->next=p; p->next=NULL; q=p; }

user: user-2
content: 你调试跟踪一下不就知道了
user-0 提问: 我的程序在Dev——c++上运行出现错误，可是在机房的时候没错啊？？这是怎么回事，求指教！！

回复:
user: user-1
content: queueptr是你自己写的结构体么？没发现有啊。还是你想定义queue ptr_front;？？？ 另外queueptr rear后面少一个分号

user: user-1
content: 错误你也不贴出来。。
user-0 提问: C语言求助

回复:
user: user-1
content: 换个方法也可以试试

user: user-0
content: 引用 8 楼 coding_hello 的回复:[quote=引用 6 楼 sinat_23887977 的回复:] [quote=引用 1 楼 coding_hello 的回复:] char *temp;改成 static char temp[1024];  //假设输入的字符串长度不超过1023 是因为原程序中temp是自动存储的变量，函数调用完后temp中的内容就消失。所以要定义成静态变量？[/quote]  是的，不能返回局部变量的地址，这是基本原则。static能部分解决问题。但是有多线程访问冲突的问题[/quote]感谢！

user: user-2
content: 引用 8 楼 coding_hello 的回复:[quote=引用 6 楼 sinat_23887977 的回复:] [quote=引用 1 楼 coding_hello 的回复:] char *temp;改成 static char temp[1024];  //假设输入的字符串长度不超过1023 是因为原程序中temp是自动存储的变量，函数调用完后temp中的内容就消失。所以要定义成静态变量？[/quote]  是的，不能返回局部变量的地址，这是基本原则。static能部分解决问题。但是有多线程访问冲突的问题[/quote] “多线程访问冲突问题”使用和线程ID有一一对应关系的数组下标访问static数组来解决。

user: user-3
content: temp的问题，可以在使用前申请空间，然后再返回temp指针就可以了

user: user-4
content: 引用 6 楼 sinat_23887977 的回复:[quote=引用 1 楼 coding_hello 的回复:] char *temp;改成 static char temp[1024];  //假设输入的字符串长度不超过1023 是因为原程序中temp是自动存储的变量，函数调用完后temp中的内容就消失。所以要定义成静态变量？[/quote]  是的，不能返回局部变量的地址，这是基本原则。static能部分解决问题。但是有多线程访问冲突的问题

user: user-0
content: 运行崩溃了。

user: user-5
content: 怎么个错法？？结果出错还是运行崩溃？

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

user: user-0
content: 引用 1 楼 coding_hello 的回复:char *temp;改成 static char temp[1024];  //假设输入的字符串长度不超过1023 是因为原程序中temp是自动存储的变量，函数调用完后temp中的内容就消失。所以要定义成静态变量？

user: user-6
content: 引用 4 楼 q3733353520 的回复: #include <stdio.h> #include <string.h> #include <stdlib.h>  char *invert(char *s); int main(void) { 	char str[81]; 	do 	{ 		puts("input string:"); 		gets(str); 		puts("invert:"); 		puts(invert(str)); 		puts("input any char except q to go on."); 		gets(str); 	} 	while(*str!= 'q'); 	puts("Quit."); 	return 0; }  char *invert(char *s) { 	int i, n; 	n = strlen(s); 	char *temp =  (char *)malloc(n);  	for(i = 0; i < n; i++) 	{ 		*(temp + i) = *(s + n - 1 -i);  //		printf("temp[%d] = [%c]   s = [%c]\n",i, *(temp+i), *(s+n-1-i)); 	} 	*(temp + i) = '\0'; 	return temp; }   忘记了  函数后面要free一下

user: user-6
content: #include <stdio.h> #include <string.h> #include <stdlib.h>  char *invert(char *s); int main(void) { 	char str[81]; 	do 	{ 		puts("input string:"); 		gets(str); 		puts("invert:"); 		puts(invert(str)); 		puts("input any char except q to go on."); 		gets(str); 	} 	while(*str!= 'q'); 	puts("Quit."); 	return 0; }  char *invert(char *s) { 	int i, n; 	n = strlen(s); 	char *temp =  (char *)malloc(n);  	for(i = 0; i < n; i++) 	{ 		*(temp + i) = *(s + n - 1 -i);  //		printf("temp[%d] = [%c]   s = [%c]\n",i, *(temp+i), *(s+n-1-i)); 	} 	*(temp + i) = '\0'; 	return temp; }

user: user-4
content: char *temp;改成 static char temp[1024];  //假设输入的字符串长度不超过1023
user-0 提问: C语言中如何定义全局结构体数组？

回复:
user: user-1
content: 在.c文件中定义，不能在函数中定义 用到的地方用 extern 声明下

user: user-2
content: 如果这是一个数据结构，提供一个批操作该数据结构的函数 如果仅仅是全局变量，为了方便  直接在 xxx.c中，函数外部定义数组 在 .h 中 extern 声明，需要的地方  #include "xxx.h" 函数中处理全局变量，如果不涉及多线程，多进程， 实际上很方便的 多线程，多进程测需要同步  全局变量，不宜太多，如果有可能，尽量不用全局变量 结构数组和普通数组，几乎没有区别

user: user-3
content: 放在某一个*.c 文件中定义 在其它需要用到的c文件中用 extern 再定义一次 如果你放在头文件中定义，那么其它需要用它的代码文件会报错xxx已在xxx中定义
user-0 提问: 求前指点，C语言入门已看完，下一步该怎么学习？

回复:
user: user-1
content: 引用 2 楼 SUNKESS 的回复:[quote=引用 1 楼 user-1 的回复:] 个人建议： C还需要继续深入，如果你不会指针，那就不算学会了C语言。 数据结构和算法无论怎样都必须去学。 C#和Java都能够掌握更好，但其实深入学习C和学习Java、C#并不冲突。   非常感谢，还想请问哪些书籍可以帮助深入学习C语言的呢？可否推荐一下[/quote] 《C和指针》

user: user-0
content: 引用 1 楼 user-1 的回复:个人建议： C还需要继续深入，如果你不会指针，那就不算学会了C语言。 数据结构和算法无论怎样都必须去学。 C#和Java都能够掌握更好，但其实深入学习C和学习Java、C#并不冲突。   非常感谢，还想请问哪些书籍可以帮助深入学习C语言的呢？可否推荐一下

user: user-1
content: 个人建议： C还需要继续深入，如果你不会指针，那就不算学会了C语言。 数据结构和算法无论怎样都必须去学。 C#和Java都能够掌握更好，但其实深入学习C和学习Java、C#并不冲突。
user-0 提问: 为什么这段排序运行结果是错的

回复:
user: user-1
content: void swap(ElementType *a, ElementType *b ) { ElementType t; *a=t;*a=*b;*b=t;  //错了   t=*a, *a=*b, *b=t;// 应该是这个 }

user: user-2
content: 怎么搞这么复杂呢
user-0 提问: K&R第六章二叉树问题

回复:
user: user-1
content: struct tnode *addtree(struct tnode *p, char *w) {    int cond;    if (p == NULL){  //当p为NULL的时候才会分配空间并返回空间地址,即root为NULL会返回空间地址，否则还是返回root值     p = talloc();     p->word = strdup(w);     p->count = 1;     p->left = p->right = NULL;    } else if ((cond = strcmp(w, p->word)) == 0)         p->count++;     else if (cond < 0)         p->left = addtree(p->left, w);     else         p->right = addtree(p->right, w);     return p; }

user: user-2
content: root就是根节点 你仔细看addtree函数 后面的添加操作是深度递归的
user-0 提问: 求推荐

回复:
user: user-1
content: win32 程序设计 但是从头开始学有点麻烦  但是你可以C# 写界面  +c语言的dll 写你的具体处理， 这样不违反 规定吧

user: user-2
content: 必须学习MFC啊，侯捷的《深入浅出MFC》

user: user-3
content: GTK+

user: user-0
content: 我看看c#好不好学～

user: user-4
content: c++可以用win32程序设计或者mfc
user-0 提问: 能用writefile函数写一个整型数组到一个文件夹吗？

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

user: user-2
content: 整型数组也是一样的写进去啊，如果是写到txt中，打开看到内容是乱码 如果写之前用itoa转换一下，打开看就不会乱码

user: user-0
content: 但是用fprintf函数就能写入整型的数到文件中！

user: user-0
content: 我把它转换成字符串就能写入了。
user-0 提问: C语言中函数atoi的理解问题

回复:
user: user-1
content: 另外还有atof与strtod这两个函数，可以把字符串转换成符点型变量

user: user-1
content: 原理的话你可以自己写一个就明白了，比如：   int my_atoi(const char* p) { 	if(p==NULL) 		exit(1); 	bool neg_flag=false;  //符号标记 	int res=0;    //结果     if(p[0] == '+' || p[0] == '-') 		neg_flag = (*p++ != '+'); 	while(isdigit(*p)) 		res = res * 10 + (*p++ - '0'); 	return neg_flag ? -res : res; }

user: user-1
content: 用处都是字符串转成整型变量  /************************************************************ C语言库函数名: atoi、atol 功 能: 把字符串转换成整型数（长整型数）. 名字来源:array to integer 的缩写. 原型: int atoi(const char *nptr); long atol(const char *nptr); 函数说明: 参数nptr字符串，如果第一个非空格字符不存在 或者不是数字也不是正负号则返回零，否则开始做类型转换， 之后检测到非数字(包括结束符 \0) 字符时停止转换， 返回（长）整型数。如果传入的字符串为空，或者字符串包含 的内容非阿拉伯数字序列，则函数返回默认值0。 附加说明：atol()与使用strtol(nptr,(char**)NULL,10);结果相同 头文件: #include <stdlib.h> *************************************************************/  /******************************************************************************************* strtol 函数及其参数 　　long int strtol(const char *nptr,char **endptr,int base); 函数的解释说明 　　这个函数会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36，或0。     参数base代表采的进制方式，如base值为10则采用10进制，若base值为16则采用16进制等。 	当base值为0时则是采用10进制做转换，但遇到如'0x'前置字符则会使用16进制做转换、 	遇到'0'前置字符而不是'0x'的时候会使用8进制做转换。一开始strtol()会扫描参数nptr字符串， 	跳过前面的空格字符，直到遇上数字或正负符号才开始做转换，再遇到非数字或字符串 	结束时('\0')结束转换，并将结果返回。若参数endptr不为NULL，则会将遇到不合条件而终止 	的nptr中的字符指针由endptr返回；若参数endptr为NULL，则会不返回非法字符串。  strtol是atoi的增强版，主要体现在这几方面： 　　1.不仅可以识别十进制整数，还可以识别其它进制的整数，取决于base参数。  　　2.endptr是一个传出参数，函数返回时指向后面未被识别的第一个字符。可以据此判断出错的情况。  　　3.如果字符串中的整数值超出long int的表示范围（上溢或下溢），则strtol返回它所能表示的       最大（或最小）整数，并设置errno为ERANGE。  而strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。用法和strtol类似。 ********************************************************************************************/

user: user-2
content: 理解和讨论之前请先学会如何观察！  参考 CRT\SRC\ATOX.C CRT\SRC\STRTOL.C  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  单步atoi和strtol函数对应的汇编代码几步后，就会来到该函数对应的C/C++源代码处。  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-3

user: user-4
content: 其实可以自己先试试谷歌百度的

user: user-5
content: 看了文档后你会发现后者比前者更灵活，更安全，更强大。  比如 atol("aaaaaaa")，会返回0,但这里是逻辑不安全的，你不知道是否真的是字符串"0"  而strtol，有了第二个参数就可以避免这个问题了：  char* end;   int val = strtol("aaaaa", &end, 10);    if ( *end )     fprintf(stderr,"string invalide\n");   else     printf("Conversion ok\n");

user: user-6
content: 有时间在这里问，还不如google搜索一下，更全面更详细……

user: user-7
content: 顶楼上的大神...  楼主，你手上应该有C语言函数库文档，在不清楚的时候以便查看！你说的两个函数可以在文档中查得。
user-0 提问: 默默的问一个守形数的问题

回复:
user: user-1
content: 引用 3 楼 lclovehlm 的回复:这是求大数的守形数，，。。。 不好意思，原来没理解 那 那个加法 就是求平方（乘法）的一部分 乘数的个十百位数 和被乘数 相乘之后还的加一次。   （abc）×（efg） = abc×e + abc×f×10  + abc×g×100  中的加法

user: user-0
content: 引用 4 楼 xionggch 的回复:这是两个大数相加 从第i位加到第k位 for(w =0,m = i;m<=k;m++){// 这段代码不懂它的作用！！ u = c[m]+b[m]+w; //第m位相加 w = u/10;               //第m位相加和的进位(即十位数上的数) c[m] = u%10;       //第m位相加和的个位上的数 } 我知道这个两个数相加。。。。。我只是不知道那段代码在里面的作用。。。。

user: user-0
content: 我知道这个两个数相加。。。。。我只是不知道那段代码在里面的作用。。。。

user: user-2
content: 这是两个大数相加 从第i位加到第k位 for(w =0,m = i;m<=k;m++){// 这段代码不懂它的作用！！ u = c[m]+b[m]+w; //第m位相加 w = u/10;               //第m位相加和的进位(即十位数上的数) c[m] = u%10;       //第m位相加和的个位上的数 }

user: user-0
content: 这是求大数的守形数，，。。。

user: user-1
content: 看不懂， 确实没必要写的这么复杂啊  1 先确定数m的位数，假设 为 n， 然后取得数 10^n  2 然后求m平安 对于10^n的余数  3 判定余数 是否等于 m？

user: user-3
content: 这问题不难，但这样写不好看啊。。。。。。。。。而且写得有得复杂了
user-0 提问: C语言问题，为什么这一段循环无法终止

回复:
user: user-0
content: 引用 7 楼 jacksonfan 的回复:[quote=引用 6 楼 mortimer7866 的回复:] 不呀！我想说的是for (p[j] = head[j]; p[j]; prior=p[j],p[j] = p[j]->next)这一句中第一个分号后的p[j]是判断条件，如果p[j]是NULL，那么for循环就结束了  p[j]!=NULL; [/quote] p[j]与p[j]!=NULL是一样的，)已经调试成功了，似乎是代码格式的问题，然后还有一些其他的问题我已经解决了，谢谢大家

user: user-1
content: 引用 3 楼 mortimer7866 的回复:可是第一个分号后面的p[j]就是判断条件呀 你以为是if语句判断对错么

user: user-0
content: 可是第一个分号后面的p[j]就是判断条件呀

user: user-1
content: 引用 6 楼 mortimer7866 的回复:不呀！我想说的是for (p[j] = head[j]; p[j]; prior=p[j],p[j] = p[j]->next)这一句中第一个分号后的p[j]是判断条件，如果p[j]是NULL，那么for循环就结束了  p[j]!=NULL;

user: user-0
content: 引用 4 楼 jacksonfan 的回复:[quote=引用 3 楼 mortimer7866 的回复:] 可是第一个分号后面的p[j]就是判断条件呀 你以为是if语句判断对错么[/quote] 不呀！我想说的是for (p[j] = head[j]; p[j]; prior=p[j],p[j] = p[j]->next)这一句中第一个分号后的p[j]是判断条件，如果p[j]是NULL，那么for循环就结束了

user: user-2
content: 检查循环控制条件，和自增变量

user: user-3
content: 太长不看。。

user: user-1
content: for (p[j] = head[j]; p[j]; prior=p[j],p[j] = p[j]->next) 没判断条件怎么结束呢
user-0 提问: 关于批处理指令中进入子控制台后的指令执行

回复:
user: user-0
content: 引用 5 楼 ckc 的回复:su是打开一个新的shell 所以su之后再执行什么代码是不灵的， 需要用 su -c 要执行的命令 这样才可以。 同样adb shell也是， 看下adb可以不可以带参数直接执行 3句指令中 adb shell 和 su 都会打开一个新的shell; 其中adb shell 可以带参数....但是adb shell中的su不能带参数执行.......................偏偏要操作的文件需要su权限..............无奈的紧啊.. 目前我的思路是写个控制台程序,createprocess 一个cmd, 创建的时候重定向cmd的标准输入输出到pipe管道...然后用writefile一句指令一句指令的写进去执行...完事再3个exit指令退出cmd......

user: user-1
content: su是打开一个新的shell 所以su之后再执行什么代码是不灵的， 需要用 su -c 要执行的命令 这样才可以。 同样adb shell也是， 看下adb可以不可以带参数直接执行

user: user-0
content: 引用 2 楼 u011779875 的回复:貌似可以用管道 试试  能稍微具体点么,我对shell脚本方面的东西不是很熟悉

user: user-0
content: 引用 1 楼 q3733353520 的回复:adb shell; su; echo "" > ffff.txt 这个试过不成啊....

user: user-2
content: 貌似可以用管道 试试

user: user-3
content: adb shell; su; echo "" > ffff.txt
user-0 提问: 刚刚学习c 求解释

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

user: user-2
content: //①从头查找 head=a; tail=a; //②找到第一个非*的字符 while(*tail=='*') {tail++;} //③从这个非*字符开始，把后面的字符全复制到字符串开始 while(tail!='\0')//这应该是\0 { *head=*tail; head++; tail++;} //④复制完成后，把复制之后的字符串后面全部涂成* while(head!='0')//这应该是\0 { *head='*'; head++;}  例如，字符串******abc*** ①*head = * ,*tail = *,都在开头 ②*head = * ,*tail = a, ③字符串为abc***abc***，*head = a (第二个a),*tail = \0 ④从第二个a开始，后面都涂成*，字符串为abc*********，*head = \0,*tail = \0

user: user-3
content: 你的初衷是判断是否是字符串末尾吧，应该这样子  while (*tail!='\0')  while (*head!='\0')

user: user-4
content: while(*head) while(*tail)  这些地址本身不可能为0的
user-0 提问: select一直返回0 为什么

回复:
user: user-0
content: 引用 8 楼 fly_dragon_fly 的回复:sa.sin_port=8888; 端口不对吧，网络字节序 改过了还是不行 客户端程序是这样的#include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <linux/in.h> #include <sys/types.h> #include <time.h> #include <string.h>  int main() { 	int fd; 	char senddata[20]={"456123"}; 	fd = socket(AF_INET,SOCK_DGRAM,0); 	struct socketaddr_in sa; 	memset(&sa,0,sizeof(sa)); 	sa.sin_family=AF_INET; 	sa.sin_port=htons(8888); 	//inet_aton("127.0.0.1",&sa.sin_addr.s_addr); 	sa.sin_addr.s_addr = htonl(INADDR_ANY); 	memset(sa.sin_zero, 0x00, 8); 	sendto(fd,senddata,strlen(senddata),0,(struct sockaddr *)&sa,sizeof(struct sockaddr_in)); 	close(fd); }

user: user-1
content: sa.sin_port=8888; 端口不对吧，网络字节序

user: user-2
content: 可能是根本没收到数据  抓包试试吧

user: user-0
content: 引用 5 楼 q3733353520 的回复: revbytes= recvfrom(fd,revbuff,1,0,(struct sockaddr*)&recvaddr,&sinsize);  //recvaddr 没有初始化 这个是不用初始化的吧 它是在recvfrom函数内初始化的

user: user-2
content: revbytes= recvfrom(fd,revbuff,1,0,(struct sockaddr*)&recvaddr,&sinsize);  //recvaddr 没有初始化

user: user-0
content: 引用 3 楼 alex_my 的回复:这个你希望它返回什么？  < 0? =0? >0?  你这是服务端程序吧，有客户端连上来吗？  如果没有客户端连接上来，10秒后该返回值是什么？ 如果有客户端连上来，该返回值是什么？  如果不希望这样, 做为小例子，可以设置最后一个参数为nullptr 我用的是UDP，有客户端发消息的，服务端select就是返回0

user: user-3
content: 这个你希望它返回什么？  < 0? =0? >0?  你这是服务端程序吧，有客户端连上来吗？  如果没有客户端连接上来，10秒后该返回值是什么？ 如果有客户端连上来，该返回值是什么？  如果不希望这样, 做为小例子，可以设置最后一个参数为nullptr

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:首先需要判断有没有正确的连接接进来吧，所谓正确的连接是指连接的端口要正确。 我用的udp 没有连接

user: user-4
content: 首先需要判断有没有正确的连接接进来吧，所谓正确的连接是指连接的端口要正确。
user-0 提问: 如何实现对数计算 以10为底的log

回复:
user: user-1
content: 就 log10(x) = log(x) / log10 啊, 算自然对数用 log( (1+x)/(1-x) ) = 2 * SUM( (x**(2*n+1) / (2*n+1) )  (n>=0)  这个级数... 用 log(x*2**n) == n*log2 + log(x)  把自变量换到 [1,2) 范围内, 算到上面的公式里就在 [0,1/3)  的范围, 要10来位的精度只要级数前面10来项就够了..

user: user-2
content: 查表

user: user-3
content: 300 =2.xx...5000=3.xxxx 其实查表很简单的， 如果是实数运算，可以用级数算，不过收敛速度可能不够快 一般数学函数，需要专门的算法， 不然的话， 虽然也能够的到结果， 不过精度，效率很成问题

user: user-3
content: 如果结果也是整数的话，除法即可
user-0 提问: 【求助】数组直接初始化等于｛｝是什么操作？

回复:
user: user-1
content: 复习C语法中的初始化语法。 declaration :  declaration-specifiers init-declarator-list opt ;   initializer :  assignment-expression { initializer-list }   /* For aggregate initialization */  { initializer-list , }  initializer-list :  initializer initializer-list , initializer

user: user-2
content: #include <stdio.h> #include <stdlib.h>   int main() {     int iArr_1[3][6] = {};     int iArr_2[3][6] = {0};     int iArr_3[3][6] = {1};      int i = 0;     int j = 0;      for(i = 0 ; i < 3;i++)         for(j = 0 ; j < 6;j++)         {             printf("%d ",iArr_1[i][j]);             if(j == 5)                 printf("\n");         }     system("pause");     return 0; }

user: user-3
content: 引用 4 楼 cll131421 的回复:[quote=引用 3 楼 user-3 的回复:] int iArr_1[3][6] = {};？？？这也可以了吗 C数组，结构初始化，一般不足补零，多半要求至少有一个元素的。 可能我用的不是标准和C语言环境，我用的VS2010，在我的编译环境下是可以的。 执行完成后，所有元素被初始化为0[/quote]  也许是标准呢，也许是VC自己的做法 不过习惯上写成 {0}的比较多。

user: user-0
content: 引用 3 楼 user-3 的回复:int iArr_1[3][6] = {};？？？这也可以了吗 C数组，结构初始化，一般不足补零，多半要求至少有一个元素的。 可能我用的不是标准和C语言环境，我用的VS2010，在我的编译环境下是可以的。 执行完成后，所有元素被初始化为0

user: user-3
content: int iArr_1[3][6] = {};？？？这也可以了吗 C数组，结构初始化，一般不足补零，多半要求至少有一个元素的。
user-0 提问: 关于 渣打银行金融市场软件开发部（中国）“Mini Code Marathon”赛题：连通块最少 的程序交流问题

回复:
user: user-1
content: 错了，矩阵是这样的 11110001111 11110000011 11111111011 11110000011 11110011111

user: user-1
content: 也不是，比如 11110001111 11110000011 11111111011 11110000011 为了使红色的连通块成立，红绿连通块必须连城一个连通块。

user: user-0
content: 输出的打错个0，抱歉 输出： 11101 11100 11111 00000 10111

user: user-0
content: 听了你的解释我感觉对题目有的新的认识，应该是我一开始就审错题了，谢谢提示！ 是不是只有像这样一开始数字1是连接着的部分才需要进行转换？像是： 输入： 10101 10100 11111 00000 10111 输出： 11100 11100 11111 00000 10111

user: user-1
content: 觉得逻辑就不对呀，你实验输入的 4,5 10001 00100 00100 01010 就是一个完美的情况，不需要改0。 题目说要使连通快最少，又没有说矩阵内只能有一个连通块。
user-0 提问: CSAPP 书中问题求解

回复:
user: user-1
content: 引用 7 楼 pengzhixi 的回复:...一个地址指向一个字节，4个地址就指向四个字节啊 补充：一个字节8位，用两位十六进制数表示。

user: user-2
content: ...一个地址指向一个字节，4个地址就指向四个字节啊

user: user-3
content: 引用 5 楼 sz523921551 的回复:[quote=引用 4 楼 jim5197 的回复:] [quote=引用 2 楼 sz523921551 的回复:] [quote=引用 1 楼 user-5 的回复:] int现在都是32位了，4字节 对呀，int就应该是四字节，但是按书上的说法不是占了两字节么？[/quote] 书上是对的，0x101这些16进制表示的是每个字节的地址，一共4字节[/quote] 但是0x101 0x102 中的每个16进制不因该只是占用了4位吗？[/quote] 每个16进制是占用了4位，但是跟它指向的地址没有关系

user: user-0
content: 引用 4 楼 jim5197 的回复:[quote=引用 2 楼 sz523921551 的回复:] [quote=引用 1 楼 user-5 的回复:] int现在都是32位了，4字节 对呀，int就应该是四字节，但是按书上的说法不是占了两字节么？[/quote] 书上是对的，0x101这些16进制表示的是每个字节的地址，一共4字节[/quote] 但是0x101 0x102 中的每个16进制不因该只是占用了4位吗？

user: user-3
content: 引用 2 楼 sz523921551 的回复:[quote=引用 1 楼 user-5 的回复:] int现在都是32位了，4字节 对呀，int就应该是四字节，但是按书上的说法不是占了两字节么？[/quote] 书上是对的，0x101这些16进制表示的是每个字节的地址，一共4字节

user: user-4
content: sizeof(short) sizeof(int) sizeof(long)  看看输出。

user: user-0
content: 引用 1 楼 user-5 的回复:int现在都是32位了，4字节 对呀，int就应该是四字节，但是按书上的说法不是占了两字节么？

user: user-5
content: int现在都是32位了，4字节
user-0 提问: 刚学完了C语言的课程，下一步该怎么提高呢？

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

user: user-2
content: 如果感觉还行，可以去看数据结构与算法

user: user-2
content: 可以去试一下网上的那些编程题，像zoj、poj等等

user: user-3
content: c++ Primer  Plus（第6本）中文版 ，首选读物，没有之一！

user: user-4
content: 引用 2 楼 Yick__ 的回复:C程序设计语言很好的一本书，没看一遍都会有收获是每看一遍，就是项目做完之后

user: user-4
content: C程序设计语言很好的一本书，没看一遍都会有收获

user: user-5
content: 占个沙发~~~请问LZ跟老师做的是什么项目呢？？向楼主推荐书《C++大学教程》（第七版），每章课后有很多练习题~~ 下面是源代码和每张课后题的答案资源链接http://download.csdn.net/detail/adusuccessfully/8196821
user-0 提问: 关于C++调用函数参数的问题

回复:
user: user-1
content: 引号多余啦 tab.open("filename",ios::binary|ios::in); ===> tab.open(filename, ios::binary|ios::in);

user: user-2
content: int main() {  	string c; 	fstream table; 	table.open("test.dat",ios::binary|ios::in);  int read(string filename) { 	fstream tab; 	tab.open("filename",ios::binary|ios::out);

user: user-3
content: tab.open("filename",ios::binary|ios::in);//看看这句
user-0 提问: 请教一个C++的问题，帮朋友问的。

回复:
user: user-1
content: 不懂啊，貌似挺难的，在这里不一定能找到很好的解答~~~

user: user-2
content: 这完全是 VBA for AutoCAD 或 3DS MAX Script 的节奏啊！
user-0 提问: C语言bool值

回复:
user: user-1
content: #include “stdbool.h" bool？是这个意思吗（我也是刚学，不知道对不对）

user: user-2
content: 其实bool这种东西我一直觉得没必要  c的精神、也是c最出彩的地方，就是在计算机的效率+可移植性 和 程序员的写代码效率 之间找到了最佳的平衡点  如果想提升前者而去用汇编，就会削弱后者；而如果想提升后者而去用比c更高级的语言，就会削弱前者  加个bool，就是在提升后者削弱前者----------当然，你可以说现在硬件不在乎一个bool......  本来就没有bool这种东西，而是用int来表示逻辑真和假的  搞个bool 可以让代码看起来更亲近于人 但必然就会离机器远了一点点---当然这个一点点今天看来完全可以忽略不计   这也就是为什么后来c和c++里都加了bool的缘故

user: user-3
content: C99引入了_Bool类型  头文件stdbool.h 可使用bool代替关键字_Bool表示这种类型,并用true和false代替1和0  如: #include<stdbool.h> bool isPrime=true;  或 _Bool isPrime=1;  上述两者是等价的,在支持C99标准的C语言中可以使用

user: user-4
content: 引用 7 楼 CharlesSimonyi 的回复:参考stdbool.h的做法，用int当做bool用，1当作true，0当作false  typedef int bool; #define true 1 #define false 0   在C语言中，如此所说的去做就ok了。

user: user-5
content: C语言里有BOOL  BOOL其实是int型  楼主可以百度：BOOL与bool的区别

user: user-6
content: C99之前的标准中是没有bool类型的，C99标准引入了_Bool类型，当包含头文件stdbool.h时，可以使用bool类型名，不过现在我们使用的很多编译器不支持C99标准

user: user-7
content: 提示我非法字符只有取图了

user: user-8
content: 引用An object declared as type _Bool is large enough to store the values 0 and 1. c99

user: user-9
content: 引用 1 楼 hxl199109 的回复:bool类型是C++才引入的，c中没有bool类型，可以使用0和1 引用 2 楼 ralln 的回复:用int 呗，0---false，1---true 引用 3 楼 huashuncai123 的回复:如果我没有记错的话，在C语言中，应该也有enum枚举类型，就可以通过该类型来创建一个BOOL： enum BOOL{false,true}; 引用 5 楼 love625763877 的回复:是在while（） 的条件表达式的结果 是 0 或非零， 而没有表达式结果 = bool值一说吗。 引用 6 楼 starytx 的回复:0和非0就行了 引用 7 楼 CharlesSimonyi 的回复:参考stdbool.h的做法，用int当做bool用，1当作true，0当作false  typedef int bool; #define true 1 #define false 0  引用 8 楼 Yick__ 的回复:C语言中 （bool型）int    1是true , 0是false 引用 10 楼 yangyunzhao 的回复:用0、1表示false、true。但是判断的时候，只判断0和非0  睁开眼睛看看世界吧，不要沉溺在以前的时代，还乱发表议论。 翻翻最新的C语言标准，看看到底有没有布尔类型，看看_Bool是啥吧。

user: user-10
content: 用0、1表示false、true。但是判断的时候，只判断0和非0

user: user-11
content: C90标准中是没有bool型的 只用 1 和0 来代替 但是C99标准中就规定了 _Bolean 类型，就是bool类型的 ，希望帮到你

user: user-12
content: C语言中 （bool型）int    1是true , 0是false

user: user-13
content: 参考stdbool.h的做法，用int当做bool用，1当作true，0当作false  typedef int bool; #define true 1 #define false 0

user: user-14
content: 0和非0就行了

user: user-0
content: 是在while（） 的条件表达式的结果 是 0 或非零， 而没有表达式结果 = bool值一说吗。

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

user: user-16
content: 如果我没有记错的话，在C语言中，应该也有enum枚举类型，就可以通过该类型来创建一个BOOL： enum BOOL{false,true};

user: user-17
content: 用int 呗，0---false，1---true

user: user-18
content: bool类型是C++才引入的，c中没有bool类型，可以使用0和1
user-0 提问: 全屏代码的实现

回复:
user: user-1
content: 仅供参考#pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {     PAINTSTRUCT ps;     HDC hdc;     HFONT hfont,ohfont;     RECT r;     COLORREF oc;      switch(message) {     case WM_CLOSE://按Alt+F4退出         PostQuitMessage(0);         break;     case WM_PAINT:         BeginPaint(hWnd, &ps);         hdc = ps.hdc; // the device context to draw in         GetClientRect(hWnd, &r); // Obtain the window's client rectangle         hfont = CreateFont(240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");         ohfont=(HFONT)SelectObject(hdc,hfont);         oc=SetTextColor(hdc,0x00C080FF);         SetBkMode(hdc, TRANSPARENT);         TextOut(hdc,r.left+r.right/2-720, r.top+r.bottom/2-120,"最短画图程序",12);         SelectObject(hdc,ohfont);         SetTextColor(hdc,oc);         DeleteObject(hfont);         EndPaint(hWnd, &ps);         break;     default:         return DefWindowProc(hWnd, message, wParam, lParam);     }     return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {     MSG msg             = {0};     WNDCLASS wc         = {0};     HBRUSH hbrh;     hbrh=CreateSolidBrush(0x00000000);     wc.lpfnWndProc      = WndProc;     wc.hInstance        = hInstance;     wc.hbrBackground    = hbrh;     wc.lpszClassName    = "minwindowsapp";     wc.hCursor          = LoadCursor(NULL,IDC_ARROW);     if( FAILED(RegisterClass(&wc)) ) return 1;      if(FAILED(CreateWindow(wc.lpszClassName,                         "Minimal Windows Application",                         WS_POPUP|WS_VISIBLE,                         0,                         0,                         GetSystemMetrics(SM_CXSCREEN),                         GetSystemMetrics(SM_CYSCREEN),                         0,                         0,                         hInstance,                         NULL)))         return 2;      while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {         DispatchMessage( &msg );     }     DeleteObject(hbrh);     return 0; }
user-0 提问: 考试程序分析题，求解答 

回复:
user: user-1
content: 引用 15 楼 sholber 的回复:[quote=引用 14 楼 chengye_xin 的回复:] [quote=引用 12 楼 qxd12345678 的回复:] [quote=引用 11 楼 chengye_xin 的回复:] 这什么野鸡学校的考试。。。main函数居然没有返回类型。。。差评  c语言中 省略返回类型相当于说函数的类型为int  只是C++逐步淘汰了这种用法[/quote]  C99就没有这种写法了吧。。。[/quote] 嘎嘎~~C99就规定，在声明中至少要有一个类型指定符。[/quote] 高校的考题几百年不变 老师怎么会去在意

user: user-2
content: 引用 14 楼 chengye_xin 的回复:[quote=引用 12 楼 qxd12345678 的回复:] [quote=引用 11 楼 chengye_xin 的回复:] 这什么野鸡学校的考试。。。main函数居然没有返回类型。。。差评  c语言中 省略返回类型相当于说函数的类型为int  只是C++逐步淘汰了这种用法[/quote]  C99就没有这种写法了吧。。。[/quote] 嘎嘎~~C99就规定，在声明中至少要有一个类型指定符。

user: user-3
content: 引用 12 楼 qxd12345678 的回复:[quote=引用 11 楼 chengye_xin 的回复:] 这什么野鸡学校的考试。。。main函数居然没有返回类型。。。差评  c语言中 省略返回类型相当于说函数的类型为int  只是C++逐步淘汰了这种用法[/quote]  C99就没有这种写法了吧。。。

user: user-4
content: s = 0 7：s++ 6: 5:s+=2 4:s++ 3: 2: 1:s++ 0:s+=2  最终 s = 7

user: user-1
content: 引用 11 楼 chengye_xin 的回复:这什么野鸡学校的考试。。。main函数居然没有返回类型。。。差评  c语言中 省略返回类型相当于说函数的类型为int  只是C++逐步淘汰了这种用法

user: user-3
content: 这什么野鸡学校的考试。。。main函数居然没有返回类型。。。差评

user: user-5
content: 这个并不难，根据k的变化，一步一步分析s的变化： 	 k=7;s=1; k=6; k=5;s=3; k=4;s=4; k=3; k=2; k=1;s=5; k=0;s=7; 故最后，s=7  switch语句的匹配要点：如果没有break，则后面的case不用匹配，就执行，直到遇到break或结束

user: user-6
content: 引用 楼主 qq_24735581 的回复:（1）以下程序的运行结果是__ __。并分析过程 #include <stdio.h> main() {     int s=0,k;     for (k=7;k>=0;k--)     {         switch(k)         {             case 1:             case 4:             case 7: s++; break;             case 2:             case 3:             case 6: break;             case 0:             case 5: s+=2; break;         }     }     printf("%d",s);}  输出结果：7                分析过程： 循环7次s会加3次1加2次2 你说s是几？

user: user-7
content: 赵老师，你的答案老是一样的。我复制下来如何？引用 1 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-8
content: 正解引用 4 楼 u010030181 的回复:先把switch case的运作原理弄清楚来，那么答案也就出来了……

user: user-9
content: 感觉也是，这种题不该问，应该自己弄懂的……

user: user-10
content: 仔细点~断点设置

user: user-11
content: case 7: s++; break;   case 6: break;   case 5: s+=2; break;   case 4:  case 7: s++; break;  case 3: case 6: break;  case 2: case 3: case 6: break;  case 1: case 4: case 7: s++; break;  case 0: case 5: s+=2; break;

user: user-12
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-13
content: 先把switch case的运作原理弄清楚来，那么答案也就出来了……

user: user-14
content: 1 4 7的情况都做了s++,0 5 的情况做了s+=2
user-0 提问: 求解答…

回复:
user: user-1
content: 比如说  char buffer[] = "abc"; 这句话的意思是  用字符串abc给buffer初始化  编译器会自动分配4个字节给buffer所在的空间 (加上\0) char buffer[5] = "abc"  同上 编译器不会自动分配空间  会赋值 a b c \0 (buffer[4]在有些编译器没赋值的自动补\0)   对于目标文件 linux .o   windows .obj  (在链接成可执行文件之前格式) 而char *a=＂abc＂; 只是用一个指针引用 这个字符串常量"abc"的地址    右边的字符串常量 “abc”一般保存在 .rodata中 有的编译器特殊情况下会保存在.data段中   而char buffer[] 这个是 保存在栈中的。  虚拟内存地址空间的概念 每一个程序都会装作到一个虚拟内存空间的这种概念（下面没完全按虚拟内存 从高到低的顺序写）  ------------ 系统内核 堆 栈    .rodata //只读数据段 .data    //可读数据段                --------------cache----------------->  真实的物理内存   .bss     // .text     //代码段 ....... ------------

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

user: user-0
content: 哦哦谢谢啦～～

user: user-0
content: 那数组呢？为什么可以？

user: user-3
content: char *a=＂abc＂;声明的是一个常量字符串，字符串中的内容是不可用修改的 char a[]=＂abc＂;声明的才是字符数组，是可以修改的

user: user-4
content: "abc"表示一个常量字符串，你让一个指针指向这样的内存地址，不可以对其进行修改，因为是常量内容
user-0 提问: 为什么溢出了啊？？

回复:
user: user-1
content: 引用while(scanf("%d",&n)!=EOF)

user: user-2
content: 哪里有求和？

user: user-3
content: 只要是数据，都会溢出。

user: user-4
content: 输入的是一个多大的数？

user: user-5
content: 不要这么用scanf，关于scanf的介绍——

user: user-0
content: 输入的就是数啊。。。

user: user-6
content: 同上scanf返回的是正确读取的个数； 这里用getchar()吧一般是while((c=getchar())!=EOF) ;

user: user-7
content: scanf返回的是读取的输入字符的个数，这个条件能够满足吗？

user: user-8
content: 输入啥了？不是数字吧  scanf返回的是读取的输入的个数，不要这么判断循环结束
user-0 提问: 好奇怪啊

回复:
user: user-1
content: 引用 1 楼 xiaodong0795 的回复:w+多了一个可读,可用fread读，不加则用不了赞同

user: user-2
content: w+多了一个可读,可用fread读，不加则用不了