Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请高手来帮忙解释一下continue的一个问题！

回复:
user: user-1
content: continue只是终止本次循环，继续下次循环，而导致退出的原因是下一次循环前的判断不成立

user: user-2
content: continue结束当前此次循环,break结束整个循环

user: user-3
content: 这里你应该使用break;

user: user-0
content: 引用 3 楼 Sandrer 的回复:continue 不会退出循环，而是从循环开始的地方执行 你可以看看汇编代码，它只是简单的做了一个跳转，跳转的地方就是循环开始的地方  而 break 则是跳转到循环结束的地方 但是 the c primer 上面说continue会忽略部分循环甚至终止它！如果可以是否能帮忙看一下我刚才的回复，看说的对不对。谢谢

user: user-0
content: 引用 1 楼 pww20055 的回复:[quote=引用 楼主 pww20055 的回复:] 才学了continue和break，发现很多人都说continue只是终止本次循环，不会导致整个循环退出。但是我觉得在有些时候应该能退出整个循环，例如 while ((ch=getchar())!='#') {   if(ch=='\n')     continue:   statements } 当输入\n的时候就会退出while,所以请教一下，continue在什么时候会终止循环？我个人理解这里使用了continue导致了忽略getchar()，所以退出while，因为该while条件等价与 while(ch!='#') { if(ch=='\n') continue; statements ch=getchar(); }[/quote] 刚才发现这个好像没有终止循环！所以请问高手在输出回车以后它跳过进入下一个循环，但是下一个循环没有扫描的输入才会执行while后面的语句？并不是直接退出，请高手解答

user: user-4
content: continue 不会退出循环，而是从循环开始的地方执行 你可以看看汇编代码，它只是简单的做了一个跳转，跳转的地方就是循环开始的地方  而 break 则是跳转到循环结束的地方

user: user-5
content: 你这个代码贴的太精简了。。。我都有点看不懂。。。  continue后面跟个':'是什么意思。。。  statements是什么意思。。。  ？？？

user: user-0
content: 引用 楼主 pww20055 的回复:才学了continue和break，发现很多人都说continue只是终止本次循环，不会导致整个循环退出。但是我觉得在有些时候应该能退出整个循环，例如 while ((ch=getchar())!='#') {   if(ch=='\n')     continue:   statements } 当输入\n的时候就会退出while,所以请教一下，continue在什么时候会终止循环？我个人理解这里使用了continue导致了忽略getchar()，所以退出while，因为该while条件等价与 while(ch!='#') { if(ch=='\n') continue; statements ch=getchar(); }

user: user-6
content: 注意：getchar函数虽然是从stdin缓冲区提取一个字符，但如果stdin缓冲区没有字符，getchar会等待用户输入，直到输入‘\n’才返回。 所以楼主的程序运行状况如下： 输入一行字符，如果包含‘#’，则输入回车后程序退出； 输入一行字符，如果不包含‘#’，则输入回车后程序继续运行。

user: user-7
content: continue只是终止本次循环，继续下次循环，也就是说加入当前是循环第三次，遇到了continue，那么continue下面的代码不执行，直接进行第四次循环
user-0 提问: 修改密码程序

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

user: user-2
content: for(j=0;j<13;j++) write_data(table9[j]);//清屏显示成功 // 循环只有上面一句吧，到这里j的值固定为13，等于执行了一句Users[13]=bb[13] Users[j]=bb[j]; //更改用户密码  还有，怎么没看见对输入长度的控制，bb和cc的长度肯定是6吗？会不会大于6或者小于6？

user: user-2
content: if(k>6)     //两次一样 如果两次一样，循环结束的时候k=6，所以要改成 if(k==6)  或者 if(k>=6)
user-0 提问: 第15行提示左值指定const对象  是怎么回事

回复:
user: user-1
content: 其实你这第7行也是错的：  test.cpp:7: 错误：未初始化的常量‘target’ test.cpp:15: 错误：assignment of read-only variable ‘target’   const是一个C语言的关键字，它限定一个变量不允许被改变，有的时候你初始化了一个变量之后不希望有修改操作时就可以用const修饰，但是const是要有初始化的。  跑了一下你的程序，是要猜测rand()%100+1出来的随机数是吧，呵呵！

user: user-2
content: const int target; 常量、变量要区分

user: user-3
content: 第一句const 去掉

user: user-4
content: const int target;, target是常量，所以在第15行不能被赋值。
user-0 提问: dll无法注入到靶子

回复:
user: user-0
content: 没有写错 是我的文件的后缀名错了 应该是.c  而不是cpp  希望遇到这样问题的 朋友注意了

user: user-1
content: _declspec(dllexport) 这个写错了把 是 __declspec(dllexport)

user: user-2
content: 全部折叠全部展开      代码：全部 代码：多个 代码：Visual Basic 代码：C# 代码：Visual C++ 代码：J# 代码：JScript   Visual Basic C# Visual C++ J# JScript Visual C++  DLL  发送反馈意见     动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法，使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中，该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。  动态链接与静态链接的不同之处在于：动态链接允许可执行模块（.dll 文件或 .exe 文件）仅包含在运行时定位 DLL 函数的可执行代码所需的信息。在静态链接中，链接器从静态链接库获取所有被引用的函数，并将库同代码一起放到可执行文件中。  使用动态链接代替静态链接有若干优点。DLL 节省内存，减少交换操作，节省磁盘空间，更易于升级，提供售后支持，提供扩展 MFC 库类的机制，支持多语言程序，并使国际版本的创建轻松完成。  下列主题提供有关对 DLL 编程的详细信息。  本节内容 应用程序和 DLL 之间的区别  描述应用程序和 DLL 之间的基本区别。  使用 DLL 的优点  描述动态链接的优点。  DLL 常见问题  提供有关 DLL 的常见问题解答。  将可执行文件链接到 DLL  描述与 DLL 的显式链接和隐式链接。  初始化 DLL  讨论当 DLL 加载时必须执行的 DLL 初始化代码（如分配内存）。  运行时库行为  描述运行时库如何执行 DLL 启动序列。  LoadLibrary 和 AfxLoadLibrary  讨论如何使用 LoadLibrary 和 AfxLoadLibrary 显式链接到 DLL。  GetProcAddress  讨论如何使用 GetProcAddress 获取 DLL 中导出函数的地址。  FreeLibrary 和 AfxFreeLibrary  讨论当不再需要 DLL 模块时如何使用 FreeLibrary 和 AfxFreeLibrary。  Windows 用来定位 DLL 的搜索路径  描述 Windows 操作系统用来定位系统上的 DLL 的搜索路径。  动态链接到 MFC 的规则 DLL 的模块状态  描述动态链接到 MFC 的规则 DLL 的模块状态。  扩展 DLL  解释通常实现从现有 Microsoft 基础类库类派生的可重用类的 DLL。  创建纯资源 DLL  讨论只包含资源（如图标、位图、字符串和对话框等）的纯资源 DLL。  MFC 应用程序中的本地化资源：附属 DLL  提供对附属 DLL 的增强支持，该功能有助于创建针对多种语言进行本地化的应用程序。  导入和导出  描述如何将公共符号导入应用程序或从 DLL 导出函数。  Active 技术和 DLL  使对象服务器得以在 DLL 内完全实现。  DLL 中的自动化  描述“MFC DLL 向导”中的“自动化”选项提供的内容。  MFC DLL 命名约定  讨论 MFC 中包含的 DLL 和库如何遵循结构化命名约定。  从 Visual Basic 应用程序调用 DLL 函数  描述如何从 Visual Basic 应用程序中调用 DLL 函数。  相关章节 将 MFC 作为 DLL 的一部分使用  描述规则 DLL，它使您可以将 MFC 库作为 Windows 动态链接库的一部分来使用。  MFC 的 DLL 版本  描述如何将 MFCxx.dll 和 MFCxxD.dll（其中 x 是 MFC 版本号）共享动态链接库用于 MFC 应用程序和扩展 DLL。  常见编程方法  提供有关下列内容的主题链接：描述有关 Visual C++ 库的概念信息和讨论各种编码技术和方法。  发送反馈意见，就此主题向 Microsoft 发送反馈意见。

user: user-2
content: 老老实实照MSDN中“开发工具和语言、Visual Studio文档、Visual C++、常见编程方法、DLL”一章的内容学习DLL

user: user-3
content: 加上 extern "C"
user-0 提问: 今天百度面试一到小的字符串处理题做的不好，睡不着，求大神帮忙分析下，能贴点代码吗

回复:
user: user-1
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8
user-0 提问: 编写一个测试一个串是否为回文的递归函数的代码

回复:
user: user-1
content: //[x,y) bool ispal(const char *s,int x,int y){     if(y-x<=1) return true;     return s[x]==s[y-1] && ispal(s,x+1,y-1); }

user: user-2
content: 楼上精彩
user-0 提问: windows内存管理中内存碎片的问题

回复:
user: user-1
content: 所以才要内存对齐

user: user-2
content: 这里的内存分配你要从虚拟内存地址去考虑。资料中是要求分配连续内存地址，中间不能有被其他已经使用的地址隔开的。

user: user-0
content: 难道这个只是为了使用非分页内存的情况？

user: user-3
content: 连续内存...那本书是windows驱动开发技术详解
user-0 提问: 红色部分怎么理解？？

回复:
user: user-1
content: 引用 2 楼 henuyx 的回复:红色部分，其是是想求value的y次方除以z取余。 一步一步来思考： 第一步就是 result = result * value % z, 循环y次，就得出结果  但是这样做是不是还能再优化呢？答案是肯定的。我们先用递归的思路思考一下： 比如 已经得到 result = result * value %z 那么 如果y是2 的话 那利用上面的 result 就可以得到 result = result * result %z 如果y是 4的话，再利用上一步的result，可以得到result = result * result %z 如果y是8的话，继续利用上一步的result，可以得到：result = result * result %z ......  其实红色的部分就是要把上述的递归部分转化成循环的方法来实现。 具体红色那样做对不对呢？我现在还不想给你结论！（其实我还没优化到那一步，不许揭穿我！）  ------------------------ 个人见解。  说得有道理. 其实就跟2进制一样,从低位到高位这样跌起来.有1就加起来.

user: user-2
content: 红色部分，其是是想求value的y次方除以z取余。 一步一步来思考： 第一步就是 result = result * value % z, 循环y次，就得出结果  但是这样做是不是还能再优化呢？答案是肯定的。我们先用递归的思路思考一下： 比如 已经得到 result = result * value %z 那么 如果y是2 的话 那利用上面的 result 就可以得到 result = result * result %z 如果y是 4的话，再利用上一步的result，可以得到result = result * result %z 如果y是8的话，继续利用上一步的result，可以得到：result = result * result %z ......  其实红色的部分就是要把上述的递归部分转化成循环的方法来实现。 具体红色那样做对不对呢？我现在还不想给你结论！（其实我还没优化到那一步，不许揭穿我！）  ------------------------ 个人见解。

user: user-0
content: 引用 2 楼 henuyx 的回复:红色部分，其是是想求value的y次方除以z取余。 一步一步来思考： 第一步就是 result = result * value % z, 循环y次，就得出结果  但是这样做是不是还能再优化呢？答案是肯定的。我们先用递归的思路思考一下： 比如 已经得到 result = result * value %z 那么 如果y是2 的话 那利用上面的 result 就可以得到 result = result * result %z 如果y是 4的话，再利用上一步的result，可以得到result = result * result %z 如果y是8的话，继续利用上一步的result，可以得到：result = result * result %z ......  其实红色的部分就是要把上述的递归部分转化成循环的方法来实现。 具体红色那样做对不对呢？我现在还不想给你结论！（其实我还没优化到那一步，不许揭穿我！）  ------------------------ 个人见解。 2楼的朋友，，谢了哈，懂了一些，，，红色那里是对的

user: user-3
content: 把%z去掉就是快速冪的算法，

user: user-4
content: x^y = x^(y/2) y为偶数 x^y = x * x^(y/2) y为奇数
user-0 提问: 各位帮我解释下这段简单代码！

回复:
user: user-1
content: 不成立就继续往下判断把，应该是这样的。。。

user: user-2
content: 我回答的时候楼主应该已经有答案了。但我给点建议。可以在每个if（）后面加上printf（你想要知道的值），输出中间结果，观察，问来问去自己试一遍反而最有印象~哈哈。if()括号里不为0的话，就执行下一条。

user: user-3
content: 找几个数一步一步按程序在纸上执行就明白了

user: user-4
content: if的意思就是判断两个数的大小然后是否交换。  如果条件不成立，当然是跳出当前if()判断，继续执行下一条语句。

user: user-5
content: 就是把abc这三个数从小到大输出，如果不成立就不执行

user: user-6
content: 你可以在VC里点F9设置断点，设置临时变量输入你要试的值，单步调试F10，一步一步看不就得了

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

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

回复:
user: user-1
content: 看堆栈调试一下你的程序呗

user: user-2
content: 意思是栈被破坏了. 可能由于你的main中对某个数组操作的时候, 越界了. 导致main函数的调用栈信息被破坏, 不能返回到正确的地方.

user: user-3
content: 在进入main函数后，在当前堆栈顶设置内存修改观察点： 2. 设置观察点(WatchPoint) 观察点一般用来观察某个表达式(变量也是一种表达式)的值是否变化了。如果有变化，马上停住程序。有下面的几种方法来设置观察点： watch <expr> 为表达式(变量)expr设置一个观察点。一旦表达式值有变化时，马上停住程序。 rwatch <expr> 当表达式(变量)expr被读时，停住程序。 awatch <expr> 当表达式(变量)的值被读或被写时，停住程序。 info watchpoints 列出当前设置的所有观察点。    将所有sprintf和strcpy，strcmp改为对应的snprinf,strncpy,strncmp
user-0 提问: pdf图片逆时针旋转90度

回复:
user: user-0
content: 不是为了给自己加分，发帖前没有仔细研究如何设置图片方向，等发出后才能明白。所以想赶快结贴。

user: user-0
content: 自己已经找到答案

user: user-1
content: 帮结帖蹭分。
user-0 提问: 有个手机号后7位隐藏了，但是有整条源代码，求大神翻译～～

回复:
user: user-1
content: 别个加密就是为了安全, 如果这样就破了..... 那还有什么安全可言.

user: user-2
content: 这玩意需要有个密码吧

user: user-3
content: 初步怀疑为3DES加密算法的结果

user: user-4
content: 破解了告诉我...

user: user-5
content: 引用 5 楼 user-6 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] 为什么不"0000000'～“9999999”逐个试呢？ 成本高啊，就是短信1毛一条，也要10万块钱才能找到[/quote] 我还以为你有将"13900000000"转换为类似“5ebecb45d7a66e719199d899boa134eb”的源代码呢！

user: user-6
content: 引用 4 楼 zhao4zhong1 的回复:为什么不"0000000'～“9999999”逐个试呢？ 成本高啊，就是短信1毛一条，也要10万块钱才能找到

user: user-5
content: 为什么不"0000000'～“9999999”逐个试呢？
user-0 提问: socket怎样实现广域网通信

回复:
user: user-1
content: 如果是家里的路由，进192.168.1.1->DHCP服务器->静态地址分配,->添加自己的MAC地址，并设置IP 转发规则->虚拟服务器(虚拟服务器定义了广域网外部端口和局域网网络服务器之间的映射关系，所有对该广域网外部端口的访问将会被重定位给通过IP地址指定的局域网网络服务器)->设置外部端口号、内部端口号、IP地址、协议  如果是学校的网，应该要向学校的信息化建设处申请吧

user: user-2
content: 要用公网ip才行吧。

user: user-3
content: 引用 1 楼 guicaisa 的回复:我刚才又百度了半天，学校用的网应该是内网吧，如果想拿自己电脑做服务器的话，就得用端口映射，将学校的公网的ip的某个端口与私网内自己的ip地址做映射才行，，是这样吗。具体怎么做端口映射我也不是很懂！想就这个问题请教下各位。 学校的话，基本不用想了，你应该不会有权限修改端口映射的 自己家里还有希望

user: user-0
content: 我刚才又百度了半天，学校用的网应该是内网吧，如果想拿自己电脑做服务器的话，就得用端口映射，将学校的公网的ip的某个端口与私网内自己的ip地址做映射才行，，是这样吗。具体怎么做端口映射我也不是很懂！想就这个问题请教下各位。
user-0 提问: 文件读取的文件结束符

回复:
user: user-1
content: 对于第一个结果 我不太懂windows的结果 因为 文件虽然有5个字符 但是还有一个文件结束符 所以最后应该是6个字符 文件结束符，根本就不会存在文件里。  对于第二个结果 我不懂linux的结果 就算要输出文件结束符 为什么会输出一个换行 Linux下的文本编辑器，会自动加上换行符

user: user-2
content: 我在CSDN论坛发帖内容中如未注明Linux，都默认仅Windows。

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

user: user-3
content: 把%c换成%x

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

回复:
user: user-1
content: int main() {   int cnt=0;  for (int i=0; i<1<<15; i++)  {   int k=2;   int n=0;   int x=i;   int flag=1;   for (int j=1; j<=15; j++)   {    if (x&1)     k*=2;    else     k--;    if (k==0&&x)    {     flag=0;     break;    }    n+=x&1;    x>>=1;   }   if ( n !=5 || (i & (1<<14)) || !flag || k != 0)    continue;   cnt++;  }  printf("%d",cnt);  char ch;  ch = getchar();  return 0; }

user: user-2
content: 没有涉及指针，都很好调试的

user: user-3
content: 不用int   用实数看看

user: user-4
content: 调试，跟踪下，看是不是每一步都跟预期一样的..

user: user-5
content: 循环太多，自己调试吧，反正我这运行结果是 0 the types of Libai are:0 Press any key to continue
user-0 提问: 链表与文件的读取与保存问题，求大神帮看看，给跪了

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: feof(fp)是可以的， 但while(1)结合fscanf()返回值，是一种更好的方案

user: user-0
content: 引用 4 楼 zhangxiangDavaid 的回复:修改如下：  void save(struct goods *head) { 	struct goods *p1; 	FILE *fp; 	p1 = head;  	fp = fopen("date.txt", "w"); 	while (p1 != NULL) 	{ 		fprintf(fp, "%d %s %d %d\n", p1->ID, p1->name, p1->price, p1->count); 		p1 = p1->next; 	} 	fclose(fp); 	printf("保存成功\n"); } struct goods *readInfo() { 	struct goods *p1, *p2, *head; 	FILE *fp; 	int flag; 	n = 0; 	while ((fp = fopen("date.txt", "r")) == NULL) 	{ 		printf("加载文件失败"); 	} 	head = NULL; 	while(1) 	{ 		p1 = (struct goods *)malloc(sizeof(struct goods)); 		if (4 != fscanf(fp, "%d %s %d %d\n", &p1->ID, p1->name, &p1->price, &p1->count)) break; 		n = n + 1; 		if (n == 1) 		{ 			head = p1; 		} 		else  		{ 			p2->next = p1; 		} 		p2 = p1; 	}; 	fclose(fp); 	p2->next = NULL; 	free(p1); 	save(head); 	return head; }  为什么我用fopen这个判断条件不可以呢?

user: user-0
content: 引用 4 楼 zhangxiangDavaid 的回复:修改如下：  void save(struct goods *head) { 	struct goods *p1; 	FILE *fp; 	p1 = head;  	fp = fopen("date.txt", "w"); 	while (p1 != NULL) 	{ 		fprintf(fp, "%d %s %d %d\n", p1->ID, p1->name, p1->price, p1->count); 		p1 = p1->next; 	} 	fclose(fp); 	printf("保存成功\n"); } struct goods *readInfo() { 	struct goods *p1, *p2, *head; 	FILE *fp; 	int flag; 	n = 0; 	while ((fp = fopen("date.txt", "r")) == NULL) 	{ 		printf("加载文件失败"); 	} 	head = NULL; 	while(1) 	{ 		p1 = (struct goods *)malloc(sizeof(struct goods)); 		if (4 != fscanf(fp, "%d %s %d %d\n", &p1->ID, p1->name, &p1->price, &p1->count)) break; 		n = n + 1; 		if (n == 1) 		{ 			head = p1; 		} 		else  		{ 			p2->next = p1; 		} 		p2 = p1; 	}; 	fclose(fp); 	p2->next = NULL; 	free(p1); 	save(head); 	return head; }  可以说一下我错哪里了吗 我这没有编译环境 看着很麻烦 麻烦您了

user: user-2
content: 修改如下：  void save(struct goods *head) { 	struct goods *p1; 	FILE *fp; 	p1 = head;  	fp = fopen("date.txt", "w"); 	while (p1 != NULL) 	{ 		fprintf(fp, "%d %s %d %d\n", p1->ID, p1->name, p1->price, p1->count); 		p1 = p1->next; 	} 	fclose(fp); 	printf("保存成功\n"); } struct goods *readInfo() { 	struct goods *p1, *p2, *head; 	FILE *fp; 	int flag; 	n = 0; 	while ((fp = fopen("date.txt", "r")) == NULL) 	{ 		printf("加载文件失败"); 	} 	head = NULL; 	while(1) 	{ 		p1 = (struct goods *)malloc(sizeof(struct goods)); 		if (4 != fscanf(fp, "%d %s %d %d\n", &p1->ID, p1->name, &p1->price, &p1->count)) break; 		n = n + 1; 		if (n == 1) 		{ 			head = p1; 		} 		else  		{ 			p2->next = p1; 		} 		p2 = p1; 	}; 	fclose(fp); 	p2->next = NULL; 	free(p1); 	save(head); 	return head; }

user: user-0
content: 帮帮忙吧大神们

user: user-0
content: 这个问题困扰我好几天了

user: user-0
content: 有没有能帮帮我的各位
user-0 提问: C语言中scanf被跳过的问题（不是输入字符）

回复:
user: user-1
content: VS上没问题，估计是编译器差异造成的

user: user-2
content: 在VC上面也没有问题

user: user-3
content: 这么奇怪，在Linux下可以输入哦，可能是缓冲区的问题，按楼上说的那样试试刷一下缓冲区再scanf；

user: user-4
content: 仅供参考：#include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>10) {             printf("Input too long(>9)!\n");             continue;         }         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }

user: user-5
content: 恩, 有可能是缓存问题. 在scanf前加个fflush(stdin);试试

user: user-6
content: 难道是输入缓冲区有数据，我乱猜的，不懂编程，hello world水平。
user-0 提问: C语言，关于函数的形参实参的小问题

回复:
user: user-1
content: 前面几个楼说的很对，值传递 地址传递的区别吧   --------------------- 怎么总是会邀请回答呢？不是那么多人回答过了吗

user: user-0
content: 一个小问题都有这么多人回答，实在是感谢。 分数有限，人人都有

user: user-2
content: static double sum=0; 把它放在ErrorCalculate() 中  然后去掉double sum这一参数！

user: user-3
content: 如果变量声明是全局的话，data3没有必要作为实参传递，应该把函数中的形参删掉 如果你的data3不是全局变量，在进入ErrorCalculate函数时候会把data3当做short类型的数组，所以才会有上面的结果 其实你可以用指针啊，形参声明数组多麻烦啊。 double ErrorCalculate(short *a,short *b,int wave,double * sum) 改成上面的形式试一试，调用地方一样。没有编译器就不帮你调试了。

user: user-4
content: 你应该把  static double sum=0;  声明为全局的 并且ErrorCalculate()不必使用double sum这一参数

user: user-5
content: 最后一个形参你得设置成引用，设置成引用，就是对对象本身的操作，会改变对象本身，你传值，只是对它的副本进行操作，sum当然是0

user: user-0
content: 引用 4 楼 wsdhren 的回复:代码的计算逻辑没有细看，有以下意见可供参考： 1. 从你贴出的代码和你描述的需求上看，这里没有必要使用static 2. 当sum传入ErrorCalculate函数时，ErrorCalculate函数中得sum参数实际时你传入的sum的一个拷贝，所以函数中无论怎样操作sum，在函数结束后你再输出sum，结果都会时函数处理前的值。 3. 如果你希望函数执行后sum值有变化：（1）直接用返回值去赋值；（2）传入sum的指针，对指针进行操作。  之前传入了数组形参，把自己误导了。其实数组也是指针。我明白了，非常感谢。  顺便问一下，把sum声明为 enternal 有用么？

user: user-6
content: 形参sum得到的是实参sum的值 函数中形参的值改变了 返回后形参没了 原sum还是原值  形参应该为指针 传sum的地址

user: user-7
content: 我是这样理解的，你有一个静态全局的sum，有一个静态局部的sum。调用ErrorCaculate时，全局的sum值给了局部的sum，操作的也是这个静态局部sum，调用返回时，静态局部sum虽然还在，但出了访问范围了。此时你输出的应是静态全局那个sum，此值并没有变化。

user: user-8
content: 传值调用与传址调用

user: user-9
content: 代码的计算逻辑没有细看，有以下意见可供参考： 1. 从你贴出的代码和你描述的需求上看，这里没有必要使用static 2. 当sum传入ErrorCalculate函数时，ErrorCalculate函数中得sum参数实际时你传入的sum的一个拷贝，所以函数中无论怎样操作sum，在函数结束后你再输出sum，结果都会时函数处理前的值。 3. 如果你希望函数执行后sum值有变化：（1）直接用返回值去赋值；（2）传入sum的指针，对指针进行操作。

user: user-10
content: short data3[65536][128]   栈上的也这么大？？

user: user-11
content: SNR=ErrorCalculate(data3,data4,wave,&sum);   double ErrorCalculate(short a[65536][128],short b[65536][128],int wave,static double * sum) {     double sum_tmp = 0;      double SNR=0;     for (int i = 0; i < 65536; i++)     {         sum_tmp+=(a[i][wave]-b[i][wave])*(a[i][wave]-b[i][wave]);     }     sum_tmp=sum_tmp/65536;//sum_tmp是均方值     SNR = 10*log10((255*255) /sum_tmp );     *sum = sum_tmp;     return SNR; }

user: user-12
content: sum=sum/65536;//sum是均方值 有可能是上一步计算完，sum的值就是0吧。
user-0 提问: 如何在vs2013中运行一个多文件的程序？

回复:
user: user-1
content: 出现重定义的问题原因： 一个项目中同名函数只能定义一次。 如果在源文件1中加入#include“源2.cpp”     就等于是在源文件1中又定义了一次其内容  所以显示重定义 认真理解报错内容 共勉  实例： all.h里： #include<iostream> using namespace std; void dispaly1(); void dispaly2();  dispaly1.cpp里： #include“all.h”  void dispaly1() {  } int main() { dispaiy1(); dispaly2(); return 0; }   dispaly2.cpp里： #include“all.h”  void dispaly2() {  }

user: user-0
content: 引用 6 楼 xxl19900724 的回复:你把那三个外部函数声明放到你各自源文件里，在你的main()函数里调用 还是不行啊

user: user-0
content: #include "file2.c" #include"file3.c" #include"file4.c"  把这三行去除即可。

user: user-0
content: 引用 8 楼 xxl19900724 的回复:你试试用命名空间的方法包含你那几个函数 问题解决了，这个例子是我敲得谭浩强《c语言程序设计》书上的例子，上面有一节专门讲述“如何运行一个多文件的程序”的三种情况下的方法，当然上面肯定没有在vs2013编译环境下的多文件运行方法，所以我就尝试了书上的第三种方法用“#include”命令，将另外三个文件file2.c、file3.c、file4.c包含到file1.c中，所在在文件一中的开头加了三行： #include "file2.c" #include"file3.c" #include"file4.c" 进行编译就出现了如图所示的问题。 解决办法就是不用管这些456，直接按例子上敲上去，main（）函数里面3行声明在这里就管用。 由此我发现：在vs2013编译环境下，没有那么多456，直接开干~~

user: user-2
content: 你试试用命名空间的方法包含你那几个函数

user: user-2
content: 你把那三个外部函数声明放到你各自源文件里，在你的main()函数里调用

user: user-0
content: 引用 4 楼 ldplsj 的回复:[quote=引用 3 楼 ldplsj 的回复:]  你基本上每个文件里都定义了一遍那三个函数，重复定义了  每个定义一个，在Main()所在的文件里调用就可以了  另外的三个文件file2/3/4中，没有用到其他两个的，不要加头文件[/quote] 其他三个我没有加，只有file2.c加了#include<stdio.h>啊

user: user-3
content: 引用 3 楼 ldplsj 的回复:你基本上每个文件里都定义了一遍那三个函数，重复定义了  每个定义一个，在Main()所在的文件里调用就可以了  另外的三个文件file2/3/4中，没有用到其他两个的，不要加头文件

user: user-3
content: 你基本上每个文件里都定义了一遍那三个函数，重复定义了  每个定义一个，在Main()所在的文件里调用就可以了

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:.c不需要#include  我是照着书上敲得

user: user-4
content: .c不需要#include
user-0 提问: 文件输出

回复:
user: user-1
content: 我能说，我只是copy了你的代码然后在Linux下g++编译后运行，没有出现你描述的现象吗   另外，1楼我想问问，你确定Linux用gcc能编译通过吗，我用gcc编译报如下错误： /tmp/ccGpl1qQ.o:(.eh_frame+0x12)：对‘__gxx_personality_v0’未定义的引用 collect2: ld 返回 1

user: user-2
content: 100 99 98 97 96 95 94 93 92 91  90 89 88 87 86 85 84 83 82 81  80 79 78 77 76 75 74 73 72 71  70 69 68 67 66 65 64 63 62 61  60 59 58 57 56 55 54 53 52 51  50 49 48 47 46 45 44 43 42 41  40 39 38 37 36 35 34 33 32 31  30 29 28 27 26 25 24 23 22 21  20 19 18 17 16 15 14 13 12 11  10 9 8 7 6 5 4 3 2 1

user: user-2
content: 若使用fwrite和fread，请使用"~b"的模式打开文件 修改如下：  /*  将 1 - 100 写入文件 然后倒序读出来 */ #include <stdio.h> #include <stdlib.h> int main(void) { 	FILE* pfile = NULL; 	int val = 0; 	long cnt = 0L; 	int i = 0;  	// open the file 	//pfile = fopen("abc.txt", "w"); 	pfile = fopen("1.txt", "wb"); 	if (!pfile) 	{ 		fprintf(stderr, "can not open the file \n"); 		exit(1); 	}  	// write the file 	for (val = 1; val <= 100; ++val) 	{ 		fwrite(&val, sizeof(int), 1, pfile); 	}  	// close the file 	fclose(pfile);  	// open the file 	pfile = fopen("1.txt", "rb");  	for (i = 1; i <= 100; ++i) 	{ 		fseek(pfile, -i * sizeof(int), SEEK_END); 		fread(&val, sizeof(int), 1, pfile); 		printf("%d ", val); 		if (i % 10 == 0) printf("\n"); 	}  	// close the file 	fclose(pfile); 	return 0; }

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

user: user-3
content: 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-3
content: 输出上卷到屏幕外面了吧。我猜。

user: user-4
content: 正常啊 linux gcc 环境下面
user-0 提问: socket程序运行不了

回复:
user: user-1
content: 不能运行, 总会找到哪里执行错了撒.   你这个程序, 从头到尾, 只有开头那点点有错误判断, 后面全部没有了. 判断好每一个函数返回值, 然后再看是什么错.  还有, 你的程序在完成第一个连接的接待前, 是不能得到第二个连接的.  因为你们要聊完5句话啊.

user: user-0
content: 引用 2 楼 lovesmiles 的回复:好难帮你，你应该建个控件台工程。  大哥我真是蠢。。。。。让你看笑话了。。。。

user: user-2
content: 好难帮你，你应该建个控件台工程。

user: user-3
content: http://bbs.csdn.net/topics/390374955
user-0 提问: 求教C语言图形编程的问题

回复:
user: user-1
content: 那要看你的窗口大小， 比如 1280*720，那么你按比例计算即可

user: user-2
content: y坐标＝第3行×每行所占像素高度 x坐标＝第4列×每列所占像素宽度

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:GetClientRect The GetClientRect function retrieves the coordinates of a window's client area. The client coordinates specify the upper-left and lower-right corners of the client area. Because client coordinates are relative to the upper-left corner of a window's client area, the coordinates of the upper-left corner are (0,0).   BOOL GetClientRect(   HWND hWnd,      // handle to window   LPRECT lpRect   // address of structure for client coordinates );   Parameters hWnd  Handle to the window whose client coordinates are to be retrieved.  lpRect  Pointer to aRECT structure that receives the client coordinates. The left and top members are zero. The right and bottom members contain the width and height of the window.  Return Values If the function succeeds, the return value is nonzero.  If the function fails, the return value is zero. To get extended error information, callGetLastError.   Remarks Windows CE: Command bars are included in the client area.  QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Windows Overview, Window Functions, GetWindowRect,RECT  赵4老师，你好，我英语不好。。。请问一下：如果我已经画一个五子棋的棋盘的话，要在棋盘上某个特定地点落子，如何确定棋子的坐标以便在我能在那个特定地点画棋子呢？就比如说我要在棋盘的第3行第4列画棋子，我怎么知道第3行第4列的横纵坐标是多少呢

user: user-2
content: GetClientRect The GetClientRect function retrieves the coordinates of a window's client area. The client coordinates specify the upper-left and lower-right corners of the client area. Because client coordinates are relative to the upper-left corner of a window's client area, the coordinates of the upper-left corner are (0,0).   BOOL GetClientRect(   HWND hWnd,      // handle to window   LPRECT lpRect   // address of structure for client coordinates );   Parameters hWnd  Handle to the window whose client coordinates are to be retrieved.  lpRect  Pointer to aRECT structure that receives the client coordinates. The left and top members are zero. The right and bottom members contain the width and height of the window.  Return Values If the function succeeds, the return value is nonzero.  If the function fails, the return value is zero. To get extended error information, callGetLastError.   Remarks Windows CE: Command bars are included in the client area.  QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Windows Overview, Window Functions, GetWindowRect,RECT

user: user-3
content: 在网上搜vc绘图，然后安装之后包含graphics.h头文件就可以随意的绘图了
user-0 提问: 求大神帮看此大数相加代码是否有问题

回复:
user: user-1
content: 楼主的代码中，随着p2不断减少，极有可能越过最小边界。 试一下，测试用例 999999999999999 + 9

user: user-2
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110

user: user-0
content: 然而事实证明我的16位的9加 上9结果还是对的    -_-||...

user: user-0
content: 可是我的并没有什么不对啊

user: user-1
content: 修改如下：  #include<stdio.h> #include<string.h> #define size 1001  int main() { 	char str1[size], str2[size], *num1, *num2, *p1, *p2; 	int ncase/*多组输入数目*/, mcase = 1/*输出时的第几个输出计数器*/, up/*进位存储器*/, len1, len2, len; 	scanf("%d", &ncase); 	while (ncase--) 	{ 		scanf("%s %s", str1, str2); 		printf("case %d:\n", mcase++); 		printf("%s + %s = ", str1, str2); 		len1 = strlen(str1);/*分别计算两数长度*/ 		len2 = strlen(str2); 		if (len1 >= len2)/*把num1赋较大数的数组首地址num2赋较小数的数组首地址，且保证len1存长数组长度len2存短数组长度*/ 		{ 			num1 = str1; 			num2 = str2; 		} 		else 		{ 			num1 = str2; 			num2 = str1; 			len = len1; 			len1 = len2; 			len2 = len; 		} 		up = 0;/*进位赋初值0*/ 		//for (p1 = num1 + len1 - 1, p2 = num2 + len2 - 1; p1 >= num1; p1--, p2--)/*从各自最小位逐位相加，以较大数的最高位为边界*/ 		for (p1 = num1 + len1 - 1, p2 = num2 + len2 - 1; p2 >= num2; p1--, p2--)/*从各自最小位逐位相加，以较大数的最高位为边界*/ 		{ 			//if (p2 < num2)/*当高位无数时补0*/ 			//	*p2 = 48; 			*p1 = *p1 + *p2 - 96 + up;/*由ascII码值化为十进制值*/ 			up = 0; 			if (*p1 >= 10)/*如果此位相加结果十进制值大于10则作减10处理*/ 			{ 				*p1 -= 10; 				up = 1;/*进位寄存器赋1*/ 			} 			*p1 += 48;/*再次化为ascII码以供输出*/ 		} 		if (up == 1)/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/ 			//printf("1"); 		{ 			while (p1 >= num1) 			{ 				*p1 += 1; 				if (*p1 > '9') 				{ 					*p1 = '0'; 					up = 1; 					p1--; 				} 				else break;   //无进位，直接跳出 			} 			if (p1 < num1) printf("1"); 		} 		printf("%s\n", num1);/*输出经加法处理改动的大数组*/ 		if (ncase != 0) 			printf("\n"); 	} 	return 0; }
user-0 提问: 缓冲呢溢出问题！！有源代码！！

回复:
user: user-1
content: 引用 3 楼 zhangxiangDavaid 的回复:把所有的 point_to_card[card_count] = (char*)malloc(sizeof(char)*strlen(current_name)); 改为 point_to_card[card_count] = (char*)malloc(sizeof(char)*(strlen(current_name)+1)); 是哦。最后还有个结束符

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

user: user-3
content: 把所有的 point_to_card[card_count] = (char*)malloc(sizeof(char)*strlen(current_name)); 改为 point_to_card[card_count] = (char*)malloc(sizeof(char)*(strlen(current_name)+1));

user: user-4
content: 另外在赋上一句,定义为数组的char是有初始地址的,没必要再malloc

user: user-4
content: 字符串溢出,把空间定义大点。 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h>  const char card[] = "IDB_CARD_";  const char *card_4[] = { "SWORD_", "WAND_", "PENT_", "CUP_" };  const char *card_royal[] = { "KING", "KNAVE", "QUEEN", "KNIGHT" };  char *point_to_card[78] = { NULL };    int sort[78] = { 0 };//the card's sorting  int main()//this is a model to get name in dll ,it's ok?? { char current_name[50] = "\0", num[10] = "\0";//字符串溢出,把空间定义大点。 int count = 0, big_count = 0, card_count = 0;  int i; strcpy(current_name, card); for (big_count = 1; big_count <= 5; big_count++) { 	if (big_count == 1) 	{ 		for (count = 0; count <= 21; count++) 		{ 			itoa(count, num, 10); 			strcat(current_name, num); 			point_to_card[card_count] = (char*)malloc(sizeof(char)*strlen(current_name)); 			strcpy(point_to_card[card_count], current_name); 			strcpy(current_name, card); 			card_count++; 			 		} 	} 		else{ 			for (count = 1; count <= 14; count++) 			{ 				if (count <= 10) 				{ 					strcat(current_name, card_4[big_count - 2]); 					itoa(count, num, 10); 					strcat(current_name, num); 					point_to_card[card_count] = (char*)malloc(sizeof(char)*strlen(current_name)); 					strcpy(point_to_card[card_count], current_name); 					strcpy(current_name, card); 					card_count++; 					 				}  				else 				{ 					strcat(current_name, card_4[big_count - 2]); 					strcat(current_name, card_royal[count - 11]); 					point_to_card[card_count] = (char*)malloc(sizeof(char)*strlen(current_name)); 					strcpy(point_to_card[card_count], current_name); 					strcpy(current_name, card); 					card_count++; 					 				} 			} 		} 	} }
user-0 提问: 华为oj测试为什么缺少一种情况

回复:
user: user-1
content: 没设格式，真心不好看  #include <stdio.h>  static int search_tab(const char *tab, int len) { 	int i; 	int k = 0; 	char s = -1; 	 	for (i = 0; i < len; ++i) { 		if (tab[i] == 0) { 			continue; 		} 		 		if (s == -1) { 			s = tab[i]; 		} 		else { 			if (s != tab[i]) { 				return 0; 			}	 		} 		k++;			 	} 	 	return k;	 }  int get_min_period(const char *input) { 	char tab[256] = {0}; 	int s; 	 	while (*input != '\0') { 		tab[*input++]++;		 	} 	 	s = search_tab(tab, sizeof(tab)); 	 	return s; }  /* test */ int main(void) { 	int s; 	char *p = "abcabcabcabcabc"; 	 	s = get_min_period(p); 	 	if (s) { 		printf("palindrome, min period: %d\n", s); 	} 	else { 		printf("Non palindrome\n"); 	} 	 	return 0;	 }

user: user-1
content: 随手写了一个，不过只能检测完整的回文  #include <stdio.h>  static int search_tab(const char *tab, int len) { 	int i; 	int k = 0; 	char s = -1; 	 	for (i = 0; i < len; ++i) { 		if (tab[i] == 0) { 			continue; 		} 		 		if (s == -1) { 			s = tab[i]; 		} 		else { 			if (s != tab[i]) { 				return 0; 			}	 		} 		k++;			 	} 	 	return k;	 }  int get_min_period(const char *input) { 	char tab[256] = {0}; 	int s; 	 	while (*input != '\0') { 		tab[*input++]++;		 	} 	 	s = search_tab(tab, sizeof(tab)); 	 	return s; }  /* test */ int main(void) { 	int s; 	char *p = "abcabcabcabcabc"; 	 	s = get_min_period(p); 	 	if (s) { 		printf("palindrome, min period: %d\n", s); 	} 	else { 		printf("Non palindrome\n"); 	} 	 	return 0;	 }

user: user-2
content: 对于类似于“abcdef”这种字符串，总可以返回自身长度吧
user-0 提问: windows程序设计例题疑问

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:CreateWindow UpdateWindow GetDC ReleaseDC 检查一下自己是不是打错，打漏，弄错大小写  好了，，此贴终结，，，，，，我脑残，，

user: user-1
content: CreateWindow UpdateWindow GetDC ReleaseDC 检查一下自己是不是打错，打漏，弄错大小写
user-0 提问: 求助，程序编译出错

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

user: user-2

user: user-3
content: 提示说明变量外部符号_DibLoadImage无法链接，很可能是没有导入包含函数DibLoadImage的lib和dll的问题。

user: user-4
content: 程序崩溃时，中止程序，查看调用堆栈，定位到出错的代码处
user-0 提问: MATLAB写的年龄估计程序，svm建立的模型测试出的label永远是1

回复:
user: user-1
content: yytaihcrr@126.com

user: user-1
content: 哥，我是一样的，能不能把你的代码发一份给我看看？   matlab的年龄估计。
user-0 提问: c语言读取txt文档，有程序，但是要读取的文档没有

回复:
user: user-0
content: 这只是程序读取的部分，程序是可以运行的。因为这个程序我是拿过来修改的，没有txt文档，所以程序中读取txt部分我不太懂。这个是多种格式读取。谢谢大家的回复，我自己研究了很长时间，最后写出txt文档了，只要按照scacnf所要求的格式严格依次在txt中逐行输入数据就可以了，感谢大家！

user: user-1
content: 多种格式混合读取

user: user-2
content: 根据代码推测文件格式？

user: user-3
content: ,&n,&m,&pq,&pv,&duidi,&eps 这些东西的定义呢。你确定可以编过么
user-0 提问: 关于C中随机数的一个问题

回复:
user: user-0
content: 谢谢您，受教了

user: user-1
content: 不要把srand放在取随机数的地方，这玩意初始一次就够了。然后每一次的rand()里面会有线性同余的方法作一下叠代运算。
user-0 提问: 将一个含n个字符的字符串从第m个字符开始的全部字符复制成另一个字符串，为什么结果少最后一个字符？

回复:
user: user-1
content: 上面有个地方讲错了啊。。。“证据就是在你的输出代码中并没有任何换行符，但是输出内容却自动换行了。”这句话是错的，，我脑残了，，请自动过滤，，。。

user: user-1
content: # include <stdio.h>  void copy(char *, int, int);  int main(void) { 	int n, m; 	int i; 	char str[20] = {0}; 	printf("enter num\n"); 	scanf("%d %d", &n, &m); 	getchar(); 	 	for (i = 0; i < n; i++) 	{ 		scanf("%c", &str[i]); 	} 	copy(str, m, n);  	return 0; }  void copy(char * str, int m, int n) { 	int i; 	for (i = m-1; i < n; i++) 		printf("%c", str[i]); 	printf("\n"); }  问题出在你输入数字之后按下的那个回车，被下面循环中的获取字符操作，存在了字符数组里，你看上去输入的是qwerty，其实应该是\nqwert并没有Y。你传进去的参数m是2，在数组中是第三个元素，即w，所以输出的内容是wert。证据就是在你的输出代码中并没有任何换行符，但是输出内容却自动换行了。在scanf2个数字之后使用getchar()接住换行符，或者使用flushall()清空缓冲区即可。 引用赵老师的名言，F9加断点，F5执行，F10单步执行，自己观察监视器中各个变量的实时数据，进行推测哪里出错了。然后F11进入函数什么的，后面的我不会编了。好了就说到这里，不知道我上面的解答有没什么错误，后续跟上即可。
user-0 提问: 新手求助[文本]C语言如何删除文本内指定的的字符或单词 插入字符或单词怎么实现？

回复:
user: user-0
content: 引用 1 楼 henuyx 的回复:我来说说我的理解。  首先，文本文件在磁盘上的存储一般是一块一块连续的，  如果单纯修改文件的内容（一对一修改），这种情况下不会修改文件的长度，这样还好，直接读到那个位置将新数据写入即可。  但是如果涉及到了文件长度的修改，比如删除了一些字符，或者是插入了一些字符，这样必然会影响之后的数据位置的偏移。  所以我的思路是，先读出数据，存到一个buffer里，然后按要求修改数据，最后再把数据写入文件（写入之前将文件truncate为0）。  上面的思路有一个问题，如果文件比较大，那buffer也不可能想多大就多大对吧， 可以每次读出一部分数据比如2048个字节，先修改这2048个字节的数据，再写入另外一个新的文件，继续读数据，修改，再继续追加写入那个新的文件。最后将旧文件删除，将新文件名字改为旧文件的名字。 （这里注意一种情况，就是，每次读出的数据，最后那个单词什么的，可能被截截断了，所以要做一个特殊处理）。   ----------------- 个人理解，大神一般都在楼下面。  存到缓存区之后可以随便自主修改的吗？我不知道怎么实现这个功能…

user: user-0
content: 引用 2 楼 xiaohuh421 的回复:既然是初学者, 那就不要考虑太多.  最简单的实现场景即可. 1. 读取原文件到内存缓冲区.  (可以假定文件不超过1K) 2. 按需要增删改查字符串. 3. 重新写回文件. 先做好这个, 再来看1楼提到大文件操作, 你就明白得多了. 按需要增删改 要怎么实现的？ 例如文本内容 ------------------------------------------ abc test is abc dfg test1 ------------------------------------------ 例如我要在里面某个位置增加一个字符或字符串 要怎么找到我需要的位置呢？删除也同理

user: user-0
content: 按需要增删改 要怎么实现的？  例如文本内容 ------------------------------------------ abc test is abc dfg test1 ------------------------------------------ 例如我要在里面某个位置增加一个字符或单词，要怎么找到我需要的位置并插入呢？删除也同理

user: user-1
content: 既然是初学者, 那就不要考虑太多.  最简单的实现场景即可. 1. 读取原文件到内存缓冲区.  (可以假定文件不超过1K) 2. 按需要增删改查字符串. 3. 重新写回文件. 先做好这个, 再来看1楼提到大文件操作, 你就明白得多了.

user: user-2
content: 我来说说我的理解。  首先，文本文件在磁盘上的存储一般是一块一块连续的，  如果单纯修改文件的内容（一对一修改），这种情况下不会修改文件的长度，这样还好，直接读到那个位置将新数据写入即可。  但是如果涉及到了文件长度的修改，比如删除了一些字符，或者是插入了一些字符，这样必然会影响之后的数据位置的偏移。  所以我的思路是，先读出数据，存到一个buffer里，然后按要求修改数据，最后再把数据写入文件（写入之前将文件truncate为0）。  上面的思路有一个问题，如果文件比较大，那buffer也不可能想多大就多大对吧， 可以每次读出一部分数据比如2048个字节，先修改这2048个字节的数据，再写入另外一个新的文件，继续读数据，修改，再继续追加写入那个新的文件。最后将旧文件删除，将新文件名字改为旧文件的名字。 （这里注意一种情况，就是，每次读出的数据，最后那个单词什么的，可能被截截断了，所以要做一个特殊处理）。   ----------------- 个人理解，大神一般都在楼下面。
user-0 提问: 求助 一个打字测速的软件的核心while部分始终达不到预期效果 C语言初学者。。

回复:
user: user-1
content: 3楼砖家说得很对。

user: user-2
content: 查找问题办法：屏蔽一部分功能，测试剩余部分，再减少屏蔽内容继续测试

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

user: user-4
content: 能否把代码贴好吗？

user: user-0
content: 大神帮帮我吧！！！
user-0 提问: 位运算，除法与位数的关系 问题

回复:
user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-2
content: B=A/16     这个它会把A/16的结果是8位   但B只取低四位的值

user: user-3
content: 看汇编，明白一切

user: user-4
content: 右移分为逻辑右移和算术右移，C语言中对于无符号数据采取逻辑右移，此时高位用0填充；但对于有符号数据则采用算术右移，高位用符号位填充。对于这两种情况，右移k位都等效于除以2^k，仅在对结果的舍入上有细微的差别。

user: user-5
content: 引用 2 楼 q3733353520 的回复:#include <stdio.h>  int main() { 	short int *b = (unsigned short int)41855;  	char *a = &b;  	printf("a = [%x]\n", *a); 	printf("b = [%x]\n", *b); } #include <stdio.h> 不好意思 例子有问题  int main() { 	short int b = 41855;  	char *a = &b;  	printf("a = [%hx]\n", *a); 	printf("b = [%hx]\n", b); }

user: user-5
content: #include <stdio.h>  int main() { 	short int *b = (unsigned short int)41855;  	char *a = &b;  	printf("a = [%x]\n", *a); 	printf("b = [%x]\n", *b); }

user: user-6
content: 右移和除法是等效的 你说的第一种情况A1是8位，但是高4位都是0，和4位有啥区别呢？主要是看保存A的类型所占用的位数。 B=A/16和B=A>>4等效。把A右移四位之后的结果保存到B
user-0 提问: 新手上机练习编译该用什么编译器

回复:
user: user-1
content: 引用 9 楼 zhao4zhong1 的回复:先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm+1

user: user-2
content: 我以前一直用VC6的IDE ,现在我发现 eclispe + MinGW 很好用，还能写JAVA, 和手机应用开发。优点：单步运行调试程序，只要你想看到的变量，基本都能看到，比VC强，功能强大。如果只对数据结构算法感兴趣，TC就足以，很小。也很好

user: user-3
content: 我以前一直用VC6的IDE ,现在我发现 eclispe + MinGW 很好用，还能写JAVA, 和手机应用开发。优点：单步运行调试程序，只要你想看到的变量，基本都能看到，比VC强，功能强大。如果只对数据结构算法感兴趣，TC就足以，很小。也很好。

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

user: user-5
content: vs2015 https://www.visualstudio.com/zh-cn/downloads/visual-studio-2015-downloads-vs

user: user-6
content: +1 引用 5 楼 mymtom 的回复:code::Blocks

user: user-7
content: dev-c++ gcc

user: user-8
content: code::Blocks

user: user-9
content: vc6好一些,vs有些复杂.

user: user-0
content: 都说VS，我就去下来看看，谢谢啦

user: user-10
content: VS gcc

user: user-11
content: VS吧，我觉得挺好的
user-0 提问: glibc源代码如何入手研究

回复:
user: user-1
content: 引用 1 楼 zmlovelx 的回复:在linux下结合find   grep 等工具查找，事半功倍。 英雄所见略同

user: user-2
content: 在linux下结合find   grep 等工具查找，事半功倍。
user-0 提问: C语言及程序设计通关秘籍，一般人不告诉他

回复:
user: user-1
content: 看了，想去学习，。。。。

user: user-2
content: 我想去 进一步了解C语言

user: user-3
content: 可以代写单片机程序吗？

user: user-3
content: 有没有代写程序的

user: user-4
content: 还是得有本好书。 《C语言非常道》了解一下。

user: user-5
content: 不错，表示个人用着还算不错

user: user-6
content: 丢了十几年，为了孩子再拿起来，看着还行。。。

user: user-7
content: 刚开始就想放弃

user: user-8
content: 不明觉厉，很厉害的样子

user: user-9
content: 学习了，谢谢大神！

user: user-10
content: 点个赞，老师好，10个字符

user: user-11
content: 能不能试听一下啊

user: user-12
content: 引用 12 楼 虱尊的回复:还有价格 高人说过学习不能谈钱 大哥说的很有道理

user: user-13

user: user-12
content: 所谓的秘籍也就是持之以恒的学习和耐力吧

user: user-14
content: kindle格式的文档有没有啊

user: user-15
content: 基础东西，对于初学者有用

user: user-16
content: 学习了，已收藏

user: user-17
content: 了解一下！！！！

user: user-18
content: 数据结构不会
user-0 提问: 请教高手一个关于循环处理字符串的程序问题，多谢

回复:
user: user-1
content: #include<ctype.h> #include<stdbool.h> #define STOP '|' int main() {     char c;     char prev;     long n_chars;     int n_lines;     int n_words;     int p_lines;     bool inword;      while (1) {         n_chars = 0L;         n_lines = 0;         n_words = 0;         p_lines = 0;         inword = false;         printf("Enter text to be analyzed(|to terminate,Ctrl+C to exit);\n");         prev = '\n';         while ((c = getchar()) != STOP) {             n_chars++;             if (c == '\n')                 n_lines++;             if (!isspace(c) && !inword) {                 inword = true;                 n_words++;             }             if (isspace(c) && inword)                 inword = false;             prev = c;         }         if (prev != '\n')             p_lines = 1;         printf("characters=%ld,words=%d,lines=%d,", n_chars, n_words, n_lines);         printf("partial lines=%d\n", p_lines);     }     return 0; }

user: user-1
content: ctrl+c有时候不行就用Ctrl+Break，如果还是不行，点cmd窗口右上角的×，如果还是不行，在任务管理器里面结束进程cmd.exe!

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include<ctype.h> #include<stdbool.h> #define STOP '|' int main() {     char c;     char prev;     long n_chars;     int n_lines;     int n_words;     int p_lines;     bool inword;      while (1) {         n_chars = 0L;         n_lines = 0;         n_words = 0;         p_lines = 0;         inword = false;         printf("Enter text to be analyzed(|to terminate,Ctrl+C to exit);\n");         prev = '\n';         while ((c = getchar()) != STOP) {             n_chars++;             if (c == '\n')                 n_lines++;             if (!isspace(c) && !inword) {                 inword = true;                 n_words++;             }             if (isspace(c) && inword)                 inword = false;             prev = c;         }         if (prev != '\n')             p_lines = 1;         printf("characters=%ld,words=%d,lines=%d,", n_chars, n_words, n_lines);         printf("partial lines=%d\n", p_lines);     }     return 0; } 赵老师，不好意思，我才查了吓知道ctrl+c是强制退出

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include<ctype.h> #include<stdbool.h> #define STOP '|' int main() {     char c;     char prev;     long n_chars;     int n_lines;     int n_words;     int p_lines;     bool inword;      while (1) {         n_chars = 0L;         n_lines = 0;         n_words = 0;         p_lines = 0;         inword = false;         printf("Enter text to be analyzed(|to terminate,Ctrl+C to exit);\n");         prev = '\n';         while ((c = getchar()) != STOP) {             n_chars++;             if (c == '\n')                 n_lines++;             if (!isspace(c) && !inword) {                 inword = true;                 n_words++;             }             if (isspace(c) && inword)                 inword = false;             prev = c;         }         if (prev != '\n')             p_lines = 1;         printf("characters=%ld,words=%d,lines=%d,", n_chars, n_words, n_lines);         printf("partial lines=%d\n", p_lines);     }     return 0; } 赵老师，请问实现ctrl+c退出是那一句，我觉得在输入ctrl+c以后第二个while虽然没实现但是第一个while条件仍然为真，应该会继续等待输入，而不是退出，请赵老师解答
user-0 提问: 使用指针数组进行字典排序的问题

回复:
user: user-1
content: 这个指针数组排序，理论上是不是应该直接换指针就可以了吗，，那个swap换的不是字符串的第一个字符吗。。。

user: user-2
content: 引用 1 楼 user-3 的回复:我这一个都运行不正常。。swap出错。 你的dic保存的字符串是常量，不能更改吧   +1

user: user-3
content: 我这一个都运行不正常。。swap出错。 你的dic保存的字符串是常量，不能更改吧
user-0 提问: 一个设备插上以后驱动是如何被调用的

回复:
user: user-1
content: VID 和 PID 相同的产品太多了，只要是同一个产品，她们就是相同的。 假定我们生产鼠标，我们的鼠标都有同一个 VID ，这是需要申请的。 然后，我们不同的产品类型使用不同的 PID 。这样在驱动里就可以使用不同的驱动程序了。

user: user-0
user-0 提问: N皇后问题的两种算法速度比较

回复:
user: user-1
content: 在第一种算法中，同一个数字出现多次也只进行一次计算，第二种算法则每次都要重新计算。

user: user-2
content: 参考代码 https://github.com/user-2/Practice-Code-For-CPP/blob/master/20150326001.c
user-0 提问: 如何解决vs打开制作好的控制台程序会闪退的问题

回复:
user: user-1
content: static void Main(string[] args) {                                     Console.ReadLine(); //后面加一个这个语句 }

user: user-2
content: system("pause")；

user: user-3
content: 加上  system("pause")

user: user-4
content: 在return 0前面加个getchar();
user-0 提问: 用循环让scanf函数输入字符串的问题

回复:
user: user-1
content: 刚才忘了，还有一种情况，就是程序结束的时候，缓冲区里的内容也会输出。  试试这个：   printf("123");   sleep(3);   printf("abc\n"); 如果改成"123\n"，或者在sleep之前加上fflush(stdout)，运行结果就会有变化。

user: user-1
content: printf的输出是有缓冲的。printf的第一步把要输出的内容放到一个缓冲区里，第二步才是真正输出。 两种情况下缓冲区里的内容会被输出：一个是遇到\n，另一个是强制flush 13         printf("%c",ch); fflush(stdout); /* 加上这行试试 */  15         sleep(3);
user-0 提问: C语言，信息系统如何做到删除数组？

回复:
user: user-1
content: 读取->判断写-> 完

user: user-2
content: 吧文件读到内存中来，不想删除的部分重新写进磁盘，要删除部分则不写。吧原文件删除。
user-0 提问: gcc下面enum要怎么用啊，好像跟其他的不一样，好奇怪

回复:
user: user-0
content: 谢啦

user: user-1
content: enum x{aa,bb,cc};  C:       enum x x1;  c++:      x x1;   // ----------------------------- 对于 struct 也一样. 所以才会常常搭配 typedef

user: user-2
content: enum x{aa,bb,cc}; enum x x1;
user-0 提问: 不能调试了，不是程序问题，我用了好多个正确的例子尝试了，有不用重装的方 法吗？？

回复:
user: user-1
content: 重装吧  要不了多久

user: user-2
content: 路径是否包含中文？

user: user-3
content: 你确定你选的不是release？
user-0 提问: C的字符串与数组问题请教

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

user: user-0
content: 谢谢楼上 各位的解答。看来我对这个存储空间没怎么考虑，以为有个地址就行了。

user: user-2
content: 楼上各位大哥已说出原委，，，，char *只分配了自己这个指针数据类型的4个字节的内存，而字符数组是真真正正的在内存中开辟了一块用于存字符的空间。

user: user-3
content: char *str;只是定义了一个指针，没有指向可用的内存，而char str[100]是定义了一个字符数组，长度为100，本身就是一块可用的内存。

user: user-4
content: 引用 2 楼 u011076569 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 都没有分配内存，往哪里读入呢？ 意思是必须用malloc分配一块空间才行是吧。  我试过 char *buffer;  buffer = malloc(100* sizeof(char)); 确实可以。谢谢。另外请教是不是我们给char *buffer = "test"这么赋值的时候 会自动分配空间是吧。我之前 的char*buffer是没有分配空间的。[/quote] char *buffer = "test" 这并不是自动分配空间，而是指向一个已存在的空间，"test"在常量区

user: user-5
content: 没地方存。。。

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:都没有分配内存，往哪里读入呢？ 意思是必须用malloc分配一块空间才行是吧。  我试过 char *buffer;  buffer = malloc(100* sizeof(char)); 确实可以。谢谢。另外请教是不是我们给char *buffer = "test"这么赋值的时候 会自动分配空间是吧。我之前 的char*buffer是没有分配空间的。

user: user-4
content: 都没有分配内存，往哪里读入呢？
user-0 提问: 想询问下下面这个我搞不清的是啥意思

回复:
user: user-1
content: 引用 8 楼 zhangxiangDavaid 的回复:参考4楼的，进行解析 谢谢捧场！

user: user-2
content: 参考4楼的，进行解析

user: user-3
content: 把一个参数是俩uint8_t，返回值是int32_t的函数指针改名为m_set_t

user: user-4
content: 有个简单的方法： 没有typedef就是定义变量； 有了typedef就是定义类型。  int a; // 定义a为int类型变量 typedef int a; // 定义a为类型  void (*foo)(); // 定义foo为函数指针变量 typedef void (*foo)(); // 定义foo为函数指针类型

user: user-0
content: 引用 3 楼 ForestDB 的回复:1L2L都忽略了typedef么？就是被那个typedef的有点误导

user: user-5
content: m_set_t 是函数指针，指向返回值是int32_t，参数0是uint8_t，参数1是uint8_t b的函数。

user: user-1
content: 仅供参考：//char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-4
content: 1L2L都忽略了typedef么？

user: user-6
content: 声明一个指针函数，m_set_t 是函数指针，指向返回值是int32_t，最后面的是参数