Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: Linux C下使用openssl实现SSL双向认证服务端代码实现

回复:
user: user-1
content: 在握手之前需要使用SSL_CTX_set_verify(SSL_CTX* ctx,int mode,int (*verify_callback)(int,X509_STORE_CTX*)); 接口来配置对应ssl类是否认证对方证书。

user: user-2
content: 问下 你这个问题解决了吗， 我这边遇到个类似的问题; 方便的话，还想请教下；

user: user-0
content: // 初始化CTX SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); SSL_CTX_new( TLSv1_client_method());  // 请求获取服务端证书 SSL_CTX_set_verify( ctx, SSL_VERIFY_PEER, verify_cb)  //加载客户端证书 SSL_CTX_load_verify_locations(); SSL_CTX_set_default_passwd_cb_userdata(); SSL_CTX_use_certificate_file() SSL_CTX_use_PrivateKey_file(); SSL_CTX_check_private_key();  //创建socket，略 connect()  // 加入SSL SSL_new(); SSL_set_fd(); SSL_connect();  这个是我的双向认证客户端模型，连接别人的服务端没有问题，但是连我自己的服务端就是连不上，SSL_connect()失败。

user: user-0
content: 别人是java写的服务端，客户端证书是别人提供的，连接没有问题。

user: user-3
content: 引用 2 楼 zhuzhisen 的回复:[quote=引用 1 楼 pengzhixi 的回复:] 一般是单向认证即客户端验证服务端证书，握手的时候服务端需要发送证书给客户端，以及公钥，选择的加密套件等  你这种是单向认证的情况，调用SSL_accept()就自动完成了，我的问题就是双向认证该怎么实现，如何从代码里面体现出来？[/quote]SSL_CTX_set_verify你这里不是要求了要进行客户端验证的么

user: user-4
content: 建立socket连接之前 设置要求验证对端参数，只要是下面几个函数 SSL_CTX_set_verify,  SSL_set_verify,  SSL_CTX_set_verify_depth, SSL_set_verify_depth

user: user-0
content: 引用 1 楼 pengzhixi 的回复:一般是单向认证即客户端验证服务端证书，握手的时候服务端需要发送证书给客户端，以及公钥，选择的加密套件等  你这种是单向认证的情况，调用SSL_accept()就自动完成了，我的问题就是双向认证该怎么实现，如何从代码里面体现出来？

user: user-3
content: 一般是单向认证即客户端验证服务端证书，握手的时候服务端需要发送证书给客户端，以及公钥，选择的加密套件等
user-0 提问: C语言，不要c++版本的怎么写？

回复:
user: user-1
content: 对于20%的数据，N<=1000  对于100%的数据，N<=10000000  这什么意思

user: user-2
content: http://blog.csdn.net/iwm_next/article/details/7450424 参考编程之美
user-0 提问: 求大神帮忙看看，if语句总是执行第一条

回复:
user: user-1
content: 楼上正解 附上易犯错误:http://m.blog.csdn.net/article/details?id=18666263

user: user-2
content: 比较用的是==,不是=，前者是比较，后者是赋值

user: user-0
content: 引用 2 楼 qq423399099 的回复:楼上正解 附上易犯错误:http://m.blog.csdn.net/article/details?id=18666263 谢谢！！！

user: user-0
content: 引用 1 楼 user-2 的回复:比较用的是==,不是=，前者是比较，后者是赋值 试过，真的解决了！谢谢！！！
user-0 提问: 求助：分块矩阵乘法，分块后各个子块之间相乘时候，如何控制元素下标？

回复:
user: user-1
content: 上 VLA ，  楼主可以看 6.7.6.3, 或者上一页也行。 这样写：  void func(int , int , float[*][*]); //prototype void func(int m, int n, float A[m][n]){}  然后函数里就可以直接用 A[i][j]

user: user-2
content: 那就struct封装成员数据和函数指针吧，又不用继承等性质

user: user-0
content: 引用 4 楼 ArthurJava 的回复:自己写个matrix类 亲这个程序目前需要使用C语言来实现，不好使用类。

user: user-2
content: 自己写个matrix类

user: user-0
content: 这个是我的意思，第一个代码太复杂了，意思是上述图片中的意思。请高手帮忙！  #include <stdio.h> #include <stdlib.h> typedef float data_type; //定义为32位浮点数   //暴力矩阵乘法 void R_Mult_tst(data_type *A[], data_type *B[], data_type *C[],int m,int n,int p) { 	int i=0, j=0, k=0; 	for (i = 0; i < m; i++) { //m行号 		for (j = 0; j < n; j++) { //列号 			for (k = 0; k < p; k++) {//并行 				//C[i][k] += A[i][j] * B[j][ k]; 			} 			printf("\n"); 		} 	} }  int main(void) {     int i=0,j=0;     data_type A[4][4] = {1.0,2.0,3.0,4.0,1.0,2.0,3.0,4.0,1.0,2.0,3.0,4.0,1.0,2.0,3.0,4.0};     data_type B[4][4] = {1.0,2.0,3.0,4.0,1.0,2.0,3.0,4.0,1.0,2.0,3.0,4.0,1.0,2.0,3.0,4.0};     data_type C[4][4]={0.0}; //将数组元素初始化为全0,防止出现莫名其妙的运算结果。     //这里如何采用二维数组的方式来传递参数，以便控制元素的下标？     R_Mult_tst(A[0],B[0],C[0],4,4,4); //调用暴力矩阵乘法      return 0; }

user: user-3
content: hehe ,如果用二位数组当作参数，用： 1. void R_Mult_tst(data_type A[][4], data_type B[][4], data_type C[][4],int m,int n,int p); 含义是必须指定列的大小！ 2.用二重指针void R_Mult_tst(data_type **A, data_type **B, data_type **C,int m,int n,int p);

user: user-4
content: 参考http://blog.sina.com.cn/s/blog_72b1bc6a0100rljb.html
user-0 提问: 请问用socket发送邮件的设计思路是什么？（C语言）

回复:
user: user-1
content: 邮件先上传到服务器，接收者再从服务器下载吧

user: user-2
content: 需要具备的知识： 1.TCP/IP协议会socket编程 2.POP3和SMTP协议  这些都会了，就不需要设计什么了。
user-0 提问: 问一下二叉搜索树的一个遍历问题？

回复:
user: user-1
content: 所有不带else的if都给未来埋下了逻辑隐患。

user: user-2
content: 楼上正解，主要确保返回的不是一个NULL指针

user: user-3
content: 如果左右子树不为空，则返回该子树指针

user: user-4

user: user-0
content: 给定一颗二叉搜索树，请找出其中的第k大的结点。例如， 5 / \ 3 7 /\ /\ 2 4 6 8 中，按结点数值大小顺序第三个结点的值为4。

user: user-0
content: TreeNode* KthNode(TreeNode* pRoot, unsigned int k)     {         if(pRoot){                  TreeNode *ret = KthNode(pRoot->left, k);                 if(ret) return ret;                 if(++count == k) return pRoot;                 ret = KthNode(pRoot->right,k);                 if(ret) return ret;         }         return nullptr;     }
user-0 提问: c语言两大难兄难弟之副作用！谁有最详细的官方资料

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）

user: user-2
content: [1]. C++ Reference Guide [2]. Stack Overflow: What exactly is a 'side-effect' in C++? [3].side effect in c

user: user-3
content: Accessing a volatile object, modifying an object, modifying a file, or calling a function that does any of those operations are all side effects, 11) which are changes in the state of the execution environment

user: user-0
content: 引用 1 楼 yuelengdihai 的回复:c语言解决问题思路是面向过程的 使用指针，分配和释放内存要自己手动操作  ?什么意思呀，我说的是有没有side effect的官方解释资料

user: user-2
content: c语言解决问题思路是面向过程的 使用指针，分配和释放内存要自己手动操作
user-0 提问: 用C做一个六边形怎么做啊？(c语言)

回复:
user: user-1
content: 用word或visio或ps或3dsmax画，不建议编程实现。

user: user-0
content: 引用 7楼一根烂笔头 的回复:寻找相应的图形开发库，不建议自己在终端里画好的

user: user-2
content: 寻找相应的图形开发库，不建议自己在终端里画

user: user-0
content: 引用 5楼赵4老师 的回复:百度找不到在MSDN里面找。 原理参考《高中数学》三角函数。好的

user: user-1
content: 百度找不到在MSDN里面找。 原理参考《高中数学》三角函数。

user: user-1
content: #pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> extern "C" HWND WINAPI GetConsoleWindow(); void HideTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = FALSE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } void ShowTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = TRUE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } int main() {     HWND  hwnd;     HDC   hdc;     int x[6],y[6];     int i;      for (i=0;i<6;i++) {         x[i]=150+(int)(100.0*cos(i*60.0/180.0*3.1416));         y[i]=150+(int)(100.0*sin(i*60.0/180.0*3.1416));     }     system("color F0");     system("cls");     HideTheCursor();     hwnd  = GetConsoleWindow();     hdc   = GetDC(hwnd);     MoveToEx(hdc,x[0],y[0],NULL);     LineTo(hdc,x[1],y[1]);     LineTo(hdc,x[2],y[2]);     LineTo(hdc,x[3],y[3]);     LineTo(hdc,x[4],y[4]);     LineTo(hdc,x[5],y[5]);     LineTo(hdc,x[0],y[0]);     ReleaseDC(hwnd,hdc);     getchar();     system("color 07");     system("cls");     ShowTheCursor();     return 0; }

user: user-3
content: 用三角函数吧

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:#pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> extern "C" HWND WINAPI GetConsoleWindow(); void HideTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = FALSE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } void ShowTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);      if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = TRUE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } int main() {     HWND  hwnd;     HDC   hdc;     int x[6],y[6];     int i;      for (i=0;i<6;i++) {         x[i]=150+(int)(100.0*cos(i*60.0/180.0*3.1416));         y[i]=150+(int)(100.0*sin(i*60.0/180.0*3.1416));     }     system("color F0");     system("cls");     HideTheCursor();     hwnd  = GetConsoleWindow();     hdc   = GetDC(hwnd);     MoveToEx(hdc,x[0],y[0],NULL);     LineTo(hdc,x[1],y[1]);     LineTo(hdc,x[2],y[2]);     LineTo(hdc,x[3],y[3]);     LineTo(hdc,x[4],y[4]);     LineTo(hdc,x[5],y[5]);     LineTo(hdc,x[0],y[0]);     ReleaseDC(hwnd,hdc);     getchar();     system("color 07");     system("cls");     ShowTheCursor();     return 0; }  想问问原理是什么？需要用到哪些函数？有的百度找不到啊

user: user-0
content: 想问问原理是什么，用到了什么函数？
user-0 提问: 请问：以下程序功能是求一个什么数

回复:
user: user-1
content: rg是2~31 i%rg[j]!=0：rg[j]不是i的约数， hit==2：rg中不是i约数的数有2个 hit1+1==hit2：这2个 不是i约数的数 是相邻的 这里把  不是i约数的2个数 称为 非约数对，那么有以下定理： 定理1:2~31中除去 非约数对 以外的数都是i的约数。这里把 2~31中除去 非约数对 以外的数 称为 准约数。 定理2:i的最小正值为 所有准约数 的最小公倍数，设此值为T。  首先，非约数对不可能包含2~15的数，因为如果 非约数对 包含2~15的数（设为k），那么2k<31,由定理1，2k是i的约数，那么k肯定也是i的约数，与前提矛盾。所以，非约数对不可能包含2~15的数。 那么，16~31中,非约数对可以包含质数（准约数中不包含此质数，那么，此质数就不是T的约数），也可以包含 质数^n 形式的数（设这种数为x=p^n，那么2~31中，设除x以外的数的最小公倍数为y，对y分解质因数，p的指数必然是n-1）。所以，非约数对 可以包含：16，17，19，23，25，27，29，31。其中，相邻的只有16,17。所以，所求 非约数对 为 16,17。  那么，i的最小正值T就是2~15,18~31的最小公倍数：2123581660200。i的通项为：2123581660200*k(其中k为奇数，且k不是17的倍数)。  但是，INT_MAX：2147483647，2123581660200>2147483647，所以原程序不会输出任何数。

user: user-2
content: 应该是INT_MAX-1

user: user-2
content: 应该是INT_MAX-2，只有奇数才能被显示

user: user-2
content: 求I 并且最后会显示1

user: user-3
content: 这个程序根本求不出数吧 rg先初始化成2,3,4......30,31 然后是i从1循环到INT_MAX，每次循环开始hit=0;hit1=hit2=-1; 然后是内层j循环，如果满足if(i%rg[j]!=0)那么进入分支  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: 执行到最后没有满足if(hit==2 && hit1+1==hit2)，所以也没printf("%ld\n",i);
user-0 提问: 为什么结构不可以用名字来传递地址？而且可以赋值给同类型的结构？

回复:
user: user-1
content: 因为同一类型的不同元素个数的数组，是两种数据类型 而C为了方便，在表达式中刻意不去区分两种元素个数不同的数组。 因此，数组赋值的时候，没有办法知道数组的元素个数。 此外，也因此没法统一，对不同元素个数的数组赋值. int a[1], int b[2]; a=b ;这个式子中，解析的时候，并不考虑a,b 都有几个元素。 假设允许赋值， 按照现有规则 a,b都只会解析为数组首元素的地址。 这两个地址值a,b都是不可写的，因此不能赋值。  如果扩充一下，允许赋值。 这里又存在二义性了，到底应该给a的几个元素赋值？ 这个赋值表达什么意思，也就是不确定的了 因此，C没法对数组赋值。  如果，仅仅允许相同元素个数的数组赋值，还不如干脆不允许更好些。 C++继承了C的这个做法，因此也就没法赋值了。

user: user-0
content: 引用 1 楼 user-2 的回复:结构是类型，而数组是变量。 当你看到类型是结构的数组就知道了。  结构既然是类型，其实就是定义了一个内存布局。  那不是也有用结构类型定义的结构变量？

user: user-0
content: 引用 2 楼 lm_whales 的回复:结构可以整体赋值，也可以整体初始化 数组只能初始化 早期数组和结构都不可以整体赋值，都只能初始化。 结构是不同类型（也可以全同，还可以有位段）的组合。结构的每个成员如何存放，跟对齐模式有关， 成员之间可能有对齐间隙。 数组是同一类型数组的聚合。每个数据之间不存在间隙。  结构的成员按名存取。 数组成员按位置存取。  虽然同是聚合类型，但内部结构是不同的。 编译器处理方式也是不同的。  结构，编译器要知道每个成员的名字，和结构对象本身的名字。 数组，编译器只要知道第一个元素的位置，（以及数组元素个数）， 和整个数组的名字就可以了。 既然数组元素之间不存在内存缝隙，那不是对数组进行相同元素类型的数组赋值更好操作，既然复杂的结构都能赋值，为什么数组不能赋值？

user: user-1
content: 结构可以整体赋值，也可以整体初始化 数组只能初始化 早期数组和结构都不可以整体赋值，都只能初始化。 结构是不同类型（也可以全同，还可以有位段）的组合。结构的每个成员如何存放，跟对齐模式有关， 成员之间可能有对齐间隙。 数组是同一类型数组的聚合。每个数据之间不存在间隙。  结构的成员按名存取。 数组成员按位置存取。  虽然同是聚合类型，但内部结构是不同的。 编译器处理方式也是不同的。  结构，编译器要知道每个成员的名字，和结构对象本身的名字。 数组，编译器只要知道第一个元素的位置，（以及数组元素个数）， 和整个数组的名字就可以了。

user: user-2
content: 结构是类型，而数组是变量。 当你看到类型是结构的数组就知道了。  结构既然是类型，其实就是定义了一个内存布局。
user-0 提问: 一个批量改名程序  求教

回复:
user: user-0
content: 啊，试了下果然是这样，恍然大悟。 谢谢了^_^

user: user-1
content: rename 函数执行失败了，因为2个表示路径参数中有'\n'符， fgets后把字符串的‘\n’变成‘\n’
user-0 提问: C语言，变量的值没有被改变再次输出的时候出现莫名的值

回复:
user: user-1
content: win7+vc++2010 express 结果(未修改代码)

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

user: user-3
content: Linux下没有这个问题，windows下没有调试环境也不愿意看代码

user: user-4
content: 刚开始学表示不懂，帮顶期待高手

user: user-5
content: 打断点，单步调试
user-0 提问: [C语言]检测socket连接状态

回复:
user: user-0
content: 引用 3 楼 赵4老师的回复:为什么不 WinExec("cmd /c netstat -na >netstat.txt",SW_HIDE); //然后读文件netstat.txt的内容 呢？ 你跑题了吧，我问的是socket

user: user-0
content: 引用 1 楼 小灸舞的回复:对端正常close socket，或者进程退出（正常退出或崩溃），对端系统正常关闭 这种情况下，协议栈会走正常的关闭状态转移，使用epoll的话，一般要判断如下几个情况 处理可读事件时，在循环read后，返回结果为0 处理可写事件时，write返回-1，errno为EPIPE EPOLLERR或EPOLLHUP或事件  对端非正常断开，比如服务器断电，网线被拔掉 这种情况下，协议栈无法感知，SO_KEEPALIVE这个选项的超时事件太长并不实用，一般还是以应用层的heartbeat来及时发现 那样太费时间了吧，有没有更直接简单的，比如tcp_info结构

user: user-1
content: 为什么不 WinExec("cmd /c netstat -na >netstat.txt",SW_HIDE); //然后读文件netstat.txt的内容 呢？

user: user-2
content: 对端正常close socket，或者进程退出（正常退出或崩溃），对端系统正常关闭 这种情况下，协议栈会走正常的关闭状态转移，使用epoll的话，一般要判断如下几个情况 处理可读事件时，在循环read后，返回结果为0 处理可写事件时，write返回-1，errno为EPIPE EPOLLERR或EPOLLHUP或事件  对端非正常断开，比如服务器断电，网线被拔掉 这种情况下，协议栈无法感知，SO_KEEPALIVE这个选项的超时事件太长并不实用，一般还是以应用层的heartbeat来及时发现
user-0 提问: c语言数组 与结构体类型

回复:
user: user-1
content: GCC的扩展属性, 是GCC独有的，是用来优化编译器的。

user: user-2
content: Avr-gcc 中汇编器生成的目标文件（object-file）至少包含四个段，分别为: .text 段、.data段 、 .bss 段和.EEPROM 段，它们包括了程序存储器（FLASH）代码，内部RAM 数据，和EEPROM 存储器内的数据。这些段的大小决定了程序存储器（FLASH）、数据存储器（RAM）、EEPROM 存储器的使用量，关系如下： 程序存储器（FLASH）使用量 = .text + .data   数据存储器（RAM）使用量 = .data + .bss [+ .noinit] + stack [+ heap]  EEPROM 存储器使用量 = .EEPROM  参考http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Attribute-Syntax.html#Attribute-Syntax

user: user-3
content: 这是GCC的扩展属性，问题这里是告诉编译器将数据存储到指定的“段“中，((aligned(2), packed))是以2字节对齐存放
user-0 提问: C语言符号运算符

回复:
user: user-0
content: 没事，我解决了，谢谢

user: user-1
content: 这里的运算符优先级一般认为和程序C语言的运算符优先级无关，这里可以自己规定算术运算的优先级。为什么不能实现呢？

user: user-0
content: 求大神帮忙呀
user-0 提问: c文件操作

回复:
user: user-1
content: 刚想说需要fseek 我觉得应当是都在缓冲区的，除非手动刷新或者fclose了才行 用fp指针读的时候也是从缓冲区里面读的，所以能够读到

user: user-2
content: 楼主你已经明白了，当时第一次文件读写的时候跟你一样，哎 但我有个疑问，到底那些数据是在缓冲区还是在文件里？？ 如果在缓冲区，你前移几个字符是不管用的。 所以如果让前移几个字符奏效的话：用setbuf(fp,NULL);关闭缓冲区。

user: user-3
content: fgets(cch,49,stdin);  你这里不是读了49个字符，然后默认一个结束字符？

user: user-0
content: 引用 7 楼 user-3 的回复:fgets(cch,49,stdin);  你这里不是读了49个字符，然后默认一个结束字符？谢谢你啊，我搞清楚了，不是这里的问题，是我读写只打开了一次文件，文件指针在我写入后已经指向最后一个字符了，所以要想读出来，应该前移写入的几个字符，或者应该重新关闭再打开一次，好多知识都搞混了，谢谢你啊

user: user-3
content: 引用 5 楼 TsingSoftware2014 的回复:引用 4 楼 user-3 的回复:[quote=引用 3 楼 TsingSoftware2014 的回复:] [quote=引用 2 楼 user-3 的回复:] fwrite(cch,49,1,fp);你好，谢谢 你的回复，我知道fwrite可以读出来，但是就想看对于字符串的时候，为什么这样就打印不出来 你的fwrite函数参数是错的 fwrite（）函数原型：size_t fwrite（const viod * restrict ptr, size_t size, size_t nmeb, FILE * restrict fp）;  size_t类型是sizeof运算符返回的类型，通常是unsigned int 类型。指针ptr是要将要写入的数据块的地址，size表示要写入的数据块的大小（以字节为单位）。nmemb表示数据块的数目。fp指定要写入的文件。  char buffer[256];   fwrite（buffer, 256, 1, fp）;将256字节大小的数据从buffer指向的内存缓冲区写入fp指向的文件。[/quote]你好，就算改成fwrite(cch,50,1,fp);跟你的保持一致也是报一样的问题的。[/quote]  fwrite(cch,49,1,fp);

user: user-0
content: 引用 4 楼 user-3 的回复:引用 3 楼 TsingSoftware2014 的回复:[quote=引用 2 楼 user-3 的回复:] fwrite(cch,49,1,fp);你好，谢谢 你的回复，我知道fwrite可以读出来，但是就想看对于字符串的时候，为什么这样就打印不出来 你的fwrite函数参数是错的 fwrite（）函数原型：size_t fwrite（const viod * restrict ptr, size_t size, size_t nmeb, FILE * restrict fp）;  size_t类型是sizeof运算符返回的类型，通常是unsigned int 类型。指针ptr是要将要写入的数据块的地址，size表示要写入的数据块的大小（以字节为单位）。nmemb表示数据块的数目。fp指定要写入的文件。  char buffer[256];   fwrite（buffer, 256, 1, fp）;将256字节大小的数据从buffer指向的内存缓冲区写入fp指向的文件。[/quote]你好，就算改成fwrite(cch,50,1,fp);跟你的保持一致也是报一样的问题的。

user: user-3
content: 引用 3 楼 TsingSoftware2014 的回复:引用 2 楼 user-3 的回复:fwrite(cch,49,1,fp);你好，谢谢 你的回复，我知道fwrite可以读出来，但是就想看对于字符串的时候，为什么这样就打印不出来 你的fwrite函数参数是错的 fwrite（）函数原型：size_t fwrite（const viod * restrict ptr, size_t size, size_t nmeb, FILE * restrict fp）;  size_t类型是sizeof运算符返回的类型，通常是unsigned int 类型。指针ptr是要将要写入的数据块的地址，size表示要写入的数据块的大小（以字节为单位）。nmemb表示数据块的数目。fp指定要写入的文件。  char buffer[256];   fwrite（buffer, 256, 1, fp）;将256字节大小的数据从buffer指向的内存缓冲区写入fp指向的文件。

user: user-0
content: 引用 2 楼 user-3 的回复:fwrite(cch,49,1,fp);你好，谢谢 你的回复，我知道fwrite可以读出来，但是就想看对于字符串的时候，为什么这样就打印不出来

user: user-3
content: fwrite(cch,49,1,fp);

user: user-0
content: 顶自己一下，打印出来一堆的a
user-0 提问: 关于windows 键盘钩子的问题

回复:
user: user-0
content: 能不能 在处理函数前 就调用 CallNextHookEx(g_Hook, nCode, wParam, lParam); 将消息传下去  再对键码进行分析？ 这样就不会卡到了  可行吗

user: user-0
content: 引用 1 楼 LubinLew的回复:楼主动机不纯啊。。。 已经记录文件了，应该在空闲的时候向server发送文件， TCP不行用UDP不就OK了 udp 不是容易丢包吗

user: user-1
content: 钩子都是b  引用 2 楼 Unixb 的回复:[quote=引用 1 楼 LubinLew的回复:]楼主动机不纯啊。。。 已经记录文件了，应该在空闲的时候向server发送文件， TCP不行用UDP不就OK了 udp 不是容易丢包吗[/quote] 那只是相对于TCP而言， 如果动不动就丢包，你觉得这个协议有存在的必要吗？ 当然如果网络环境特别差，丢包现象还是容易发生的

user: user-0
content: 引用 4 楼 追梦青年的回复:创建一个线程去处理数据发送。另外把发送数据的socket设置为非阻塞模式，我知道socket读或写可以设置超时，不清楚连接是不是也可以如此设置。 创建线程也一样阿  如果没处理完就传递   下一个键盘消息便会丢失

user: user-2
content: 创建一个线程去处理数据发送。另外把发送数据的socket设置为非阻塞模式，我知道socket读或写可以设置超时，不清楚连接是不是也可以如此设置。

user: user-1
content: 楼主动机不纯啊。。。 已经记录文件了，应该在空闲的时候向server发送文件， TCP不行用UDP不就OK了
user-0 提问: 关于指针作为函数参数的问题

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  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: user-2
content: 第2个函数中的形参p是局部变量，和main中的p毫无关系，因此在change中改变p的值，使其指向bb,但main中的p仍然指向bb，所以仍然显示20.8

user: user-3
content: 先理解调用函数时发生的操作： 推荐去百度：函数调用过程。  #include <stdio.h> #include <stdlib.h> double aa=10.8; double bb=20.8; void change(double *p)//把aa的地址传过来 { *p=99;//把aa的值改成99 } void main() { double *p=&aa; change(p); printf("%f",*p);//这里p还是指向aa的地址，因此显示99 system("pause"); }  #include <stdio.h> #include <stdlib.h> double aa=10.8; double bb=20.8; void change(double *p)//把aa的地址传过来，传到形参p的存储空间，此空间会在函数结束调用后释放掉 { p=&bb;//把形参p的值改成bb的地址 }//调用结束，形参p的空间被释放 void main() { double *p=&aa; change(p); printf("%f",*p);//实参p的值还是aa的地址，因此显示10.8 system("pause"); }  综上所述，你的change(),第一次改变aa的值，第二次相当于什么都没做。

user: user-4
content: 第二个的change函数，p=&bb一点用都没，函数内的p指针和main函数的p刚进函数的时候都指向了aa所在的地址 然后你让函数内的p指针指向了bb，对main函数内的p指针毫无影响 PS:如果要改变指针所指向区域的值，那么传一级指针就可以了 如果要改变指针本身的值（换句话来说就是改变指针的指向，让它指向另一个变量）那么需要传二级指针或者引用

user: user-5
content: 其实你的change函数屁用都没有

user: user-5
content: void change(double *p) { *p=&bb; }  这样就能变成20.8了

user: user-5
content: 第一个将aa改写为99了，而第二个则将p改写为bb的地址了  p是普通变量，跟*p一点关系都没有
user-0 提问: 这段代码改成指针怎么写？

回复:
user: user-0
content: 引用 2 楼 renwotao2009 的回复:a b是char指针，不是char没有存储char的空间你的scanf读入数据放到哪哦，明白了

user: user-0
content: 引用 1 楼 qq_28098403 的回复:运行可以通过？输出结果是啥？我觉得应该是历遍的时候没有第一个字符没有调用那个函数没明白？运行时直接崩溃了

user: user-1
content: 你的a 、b 是个指针，你都没分配内存，就开始放入字符串

user: user-2
content: char *a,*b;你的a,b指针在未初始化之前都指向了一个未知的区域 你通过scanf试图向那个未知的区域写入数据，运行的时候肯定会提示异常的

user: user-3
content: malloc

user: user-4
content: a b是char指针，不是char没有存储char的空间你的scanf读入数据放到哪

user: user-5
content: 运行可以通过？输出结果是啥？我觉得应该是历遍的时候没有第一个字符没有调用那个函数
user-0 提问: 新手自学C语言，关于浮点数的输出

回复:
user: user-1
content: printf 中%f 类型是float, %lf是double, 不过不定参数中, float类型做为参数传递时候会提升至double(标准规定的), 而scanf中, %f类型对应是float*, %lf则是double*,

user: user-2
content: scanf("%lf",&nu);

user: user-3
content: printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则（在printf这样的函数的可变参数列表中 ，不论作用域内有没有原型，都适用这一规则）float型会被提升为double型。因此printf()只会看到双精度数。 对于scanf，情况就完全不同了，它接受指针，这里没有类似的类型提升。（通过指针）向float存储和向double存储大不一样，因此，scanf区别%f和%lf。

user: user-4
content: 改成float测试没问题啊
user-0 提问: 关于跳舞配对的问题

回复:
user: user-1
content: 仅供参考：//舞会上，男士们（m人）和女士们（n人, n<m）进入舞厅时，各自排成一队。跳舞开始时，依次从男队和女队的队头上各出一人配成舞伴。 //男队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。在第t首曲子时，第x个女生和第几个男生配对跳舞？ #include <stdio.h> #include <string.h> #define MAX 26 int m,n,t,x,y,i,j,k; char md[MAX]; char nd[MAX]; char c; void main() {     while (1) {         printf("Input n m(1<=n<m<=%d):",MAX);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1<=n && n<m && m<=MAX) break;         }     }     while (1) {         printf("Input t x(1<=t<=%d 1<=x<=%d):",MAX,n);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&t,&x)) {             if (1<=t && t<=MAX && 1<=x && x<=n) break;         }     }     for (i=0;i<m;i++) md[i]='A'+i;     for (i=0;i<n;i++) nd[i]='a'+i;     k=0;     for (i=0;i<t;i++) {         printf("%2d: ",i+1);         for (j=0;j<n;j++) {             c=' ';             if (i==t-1 && j==x-1) {c='*';y=k+1;}             printf("%c%c%c",md[k],nd[j],c);             k=(k+1)%m;         }         printf("\n");     }     printf("%d\n",y);  }

user: user-2
content: http://blog.csdn.net/johnnyhu90/article/details/10283103
user-0 提问: C++新手，请问大神如何使用C++第三方库

回复:
user: user-1
content: 主要使用include中的头文件和native中的snappy32.dll和snappy32.lib库文件 解压出来后，在VisualStudio中进行设置：“ 项目属性” - “VC++目录“ 包含目录添加解压出来的include文件夹路径 库目录添加解压出来的native文件夹路径 然后在代码中写： #include <snappy.h> #pragma comment(lib,"snappy32.lib") 编译成功后要运行时，需要把native文件夹下的snappy32.dll和你的exe放在一起  也可以不设置“ 项目属性” - “VC++目录“ 而是直接把解压出来的include文件夹下的所有头文件拷贝到你的工程目录中，native文件夹下的snappy32.lib也拷贝到你的工程目录中。 然后在代码中写： #include "snappy.h" #pragma comment(lib,"snappy32.lib") 编译成功后要运行时，需要把native文件夹下的snappy32.dll和你的exe放在一起

user: user-0
content: 引用 1 楼 qq423399099 的回复:库文件应该都在bin目录下吧，头文件在include目录下 在工程属性里配置下库目录，附加依赖项，代码里include头文件然后试试 谢谢，不过还是版主的详细

user: user-0
content: 引用 2 楼 CharlesSimonyi 的回复:主要使用include中的头文件和native中的snappy32.dll和snappy32.lib库文件 解压出来后，在VisualStudio中进行设置：“ 项目属性” - “VC++目录“ 包含目录添加解压出来的include文件夹路径 库目录添加解压出来的native文件夹路径 然后在代码中写： #include <snappy.h> #pragma comment(lib,"snappy32.lib") 编译成功后要运行时，需要把native文件夹下的snappy32.dll和你的exe放在一起  也可以不设置“ 项目属性” - “VC++目录“ 而是直接把解压出来的include文件夹下的所有头文件拷贝到你的工程目录中，native文件夹下的snappy32.lib也拷贝到你的工程目录中。 然后在代码中写： #include "snappy.h" #pragma comment(lib,"snappy32.lib") 编译成功后要运行时，需要把native文件夹下的snappy32.dll和你的exe放在一起 太感谢版主了

user: user-2
content: 库文件应该都在bin目录下吧，头文件在include目录下 在工程属性里配置下库目录，附加依赖项，代码里include头文件然后试试
user-0 提问: 这样声明正确么

回复:
user: user-0
content: 是不是编译器分不清               double  * malloc(30*sizeof(double))                                        究竟是double  （*malloc(30*sizeof(double))）                                          还是（double  *）malloc(30*sizeof(double))

user: user-1
content: 引用 7 楼 fornetuse123 的回复:或者强制类型转换这样ptd=double  *malloc(30*sizeof(double))这样写，不是才更简洁，那个(double *)代表什么含义   [quote=引用 6 楼 qq423399099 的回复:] [quote=引用 5 楼 fornetuse123 的回复:] 或者强制类型转换这样ptd=double  *malloc(30*sizeof(double))这样写，不是才更简洁，那个(double *)代表什么含义 你malloc(30*sizeof(double))返回的是一个void * 也就是说给你返回的是一个长度是30*8个字节的在堆上开辟的一块存储空间的首地址 这个首地址通过给你返回一个void *来使用 double（ *malloc(30*sizeof(double))）是啥？先取*变成void类型，然后再用double强转？ 表达式必须是指向完整类型的指针 [/quote]  *malloc(30*sizeof(double))不是对malloc开辟内存首地址的解引用么，那不就是将首地址中的内容转换为double类型？嗯 明白为什么要对指针进行类型强转换，而不是对首地址内存内容进行转换了。  现在就剩下为什么要用(double *)将double括起来呢？这个不懂，为什么编译器没法识别double *[/quote] 因为*会先和后面的部分先结合，而不是先和double结合形成double * 加上括号既可以增加可读性也防止这个情况发生

user: user-2
content: 引用 楼主 fornetuse123 的回复:可是(double *)，这里为什么要用圆括号，  这样不正好是将malloc分配的内存块的首地址给了ptd么？  类开转换，malloc返回的void*   引用 楼主 fornetuse123 的回复:sizeof(double)这里为什么不是sizeof(ptd)  这样不正好是将malloc分配的内存块的首地址给了ptd么？  ptd类型是double*，而不是double，sizeof(ptd)结果是4（32位时）

user: user-0
content: 或者强制类型转换这样ptd=double  *malloc(30*sizeof(double))这样写，不是才更简洁，那个(double *)代表什么含义   引用 6 楼 qq423399099 的回复:[quote=引用 5 楼 fornetuse123 的回复:] 或者强制类型转换这样ptd=double  *malloc(30*sizeof(double))这样写，不是才更简洁，那个(double *)代表什么含义 你malloc(30*sizeof(double))返回的是一个void * 也就是说给你返回的是一个长度是30*8个字节的在堆上开辟的一块存储空间的首地址 这个首地址通过给你返回一个void *来使用 double（ *malloc(30*sizeof(double))）是啥？先取*变成void类型，然后再用double强转？ 表达式必须是指向完整类型的指针 [/quote]  *malloc(30*sizeof(double))不是对malloc开辟内存首地址的解引用么，那不就是将首地址中的内容转换为double类型？嗯 明白为什么要对指针进行类型强转换，而不是对首地址内存内容进行转换了。  现在就剩下为什么要用(double *)将double括起来呢？这个不懂，为什么编译器没法识别double *

user: user-1
content: 引用 5 楼 fornetuse123 的回复:或者强制类型转换这样ptd=double  *malloc(30*sizeof(double))这样写，不是才更简洁，那个(double *)代表什么含义 你malloc(30*sizeof(double))返回的是一个void * 也就是说给你返回的是一个长度是30*8个字节的在堆上开辟的一块存储空间的首地址 这个首地址通过给你返回一个void *来使用 double（ *malloc(30*sizeof(double))）是啥？先取*变成void类型，然后再用double强转？ 表达式必须是指向完整类型的指针

user: user-0
content: 引用 3 楼 qq423399099 的回复:malloc的原型：void *malloc(unsigned int num_bytes); 返回值是void *所以我们一般使用的时候需要将其强制转换为我们需要的类型，所以前面会加一个(double *) 如果不加括号，楼主觉得编译器能识别的了这是在转换一个指针的类型吗？ sizeof(ptd)也是不行的，因为ptd是一个指针，对一个指针sizeof永远都是4  恩 sizeof 明白了，可是强制类型转换这样ptd=double（ *malloc(30*sizeof(double))）这样写，不是才正确，那个(double *)代表什么含义

user: user-0
content: 或者强制类型转换这样ptd=double  *malloc(30*sizeof(double))这样写，不是才更简洁，那个(double *)代表什么含义

user: user-1
content: malloc的原型：void *malloc(unsigned int num_bytes); 返回值是void *所以我们一般使用的时候需要将其强制转换为我们需要的类型，所以前面会加一个(double *) 如果不加括号，楼主觉得编译器能识别的了这是在转换一个指针的类型吗？ sizeof(ptd)也是不行的，因为ptd是一个指针，对一个指针sizeof永远都是4

user: user-0
content: 引用 1 楼 Rewen 的回复:习惯用法是sizeof(double)，理解起来也方便的啊。 ptd 指向的是30个double大小的内存区域。 如果sizeof(ptd)的话，首先ptd没有指向任何东西，sizeof(ptd)就识别不出来是什么啊 ptd不是已经由double *ptd;声明为double类型了么

user: user-3
content: 习惯用法是sizeof(double)，理解起来也方便的啊。 ptd 指向的是30个double大小的内存区域。 如果sizeof(ptd)的话，首先ptd没有指向任何东西，sizeof(ptd)就识别不出来是什么啊
user-0 提问: 【数据结构】OJ显示Segmentation fault:段错误，检查是否有数组越界，指针异常，访问到不应该访问的内存区域

回复:
user: user-1
content: 更正一下： 4.AddPoyln 函数略长，刚看第一个if就觉得有点奇怪，如果链表a的第一项的指数大于链表b的第一项指数，就让pb1和p1往后移了一个节点（如果链表a=3x^2+4x^3,链表b=x+2x^2）,那第一个if过后，p1就已经指向了4x^3,根本没有机会和链表b的2x^2合并啊？

user: user-1
content: 看了一下其他几个函数： 1.CreatPoyln有内存泄露，应该在循环结束完free(p) 2.PrintfPoyln函数，如果遇到空链表，那么会段错误产生异常（OJ里应该会测试这种情况） 3.DestroyPoyln函数，好像没有free头结点啊？ 4.AddPoyln 函数略长，刚看第一个if就觉得有点奇怪，如果链表a的第一项的系数大于链表b的第一项系数，就让pb1和p1往后移了一个节点（如果链表a=3x^2+4x^3,链表b=x+2x^2）,那第一个if过后，p1就已经指向了4x^3,根本没有机会和链表b的2x^2合并啊？ PS：由此没有往下看，试了一组测试用例，结果崩了
user-0 提问: C语言动态数组使用的问题

回复:
user: user-1
content: 引用 1 楼 qq423399099 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 你是赵老师的马甲！

user: user-2
content: 猜测楼主 if (jag = NULL) 想要表达的是： if (jag == NULL) 吧

user: user-3
content: 判相等 == if (jag = NULL) return 1;

user: user-4
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 关于scanf函数用法 求解惑

回复:
user: user-1
content: http://en.cppreference.com/w/c/io/fscanf

user: user-2
content: 好像叫忽略输入符

user: user-3
content: * 是scanf函数中的一种修饰符           表示输入项输入后不转送给任何向量             %s     是格式  控制符        %s用在输入函数中表示输入一个字符串  遇到空格回车  结束  两者一起用              表示将 当前的一个字符串输入后不送给任何变量  执行后光标到了这个字符串后面          也就相当于跳到了下一个字符串前面             一般字符串之间都是用空格  隔离的  所以 是跳到了下一个空白字符处

user: user-4
content: %*(TYPE) 的作用是按（TYPE）的类型读取数据，但不将其储存至任何变量中，而是直接丢弃。  scanf("%*s"); 的作用就是将stdin缓冲区中后续的内容按字符串的方式处理，并丢弃掉。  比如：如果stdin中的用户输入为：  1  text (\n) 调用scanf("%d", &a); 后，a 的值为1，但stdin的缓冲区中还残留有“text"这一字符串。如果不丢弃掉，那么下一次再执行 rc = scanf("%d”, &a); 时会失败（rc == 0)。
user-0 提问: 每次执行程序就会停止工作

回复:
user: user-1

user: user-2
content: DEBUG 调试 进入堆栈 可以看出程序异常的位置 查看变量值~~~

user: user-3
content: 引用 5 楼 zhao4zhong1 的回复:  这一个表情代表的意思是：眼过千遍不如手过一遍！书看千行不如手敲一行！…………以下省略300字

user: user-4
content: 你的country只是一个包含6个char*的数组，这6个char*的指针并没有分配内存

user: user-5
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-5
content: 代码崩溃是因为你没有给指针分配空间，它指向的是一块未知的内存区域，你直接用scanf写入自然崩溃 我这里用malloc为每个字符串开辟空间，同时楼主的change函数也有问题，楼主那样直接交换  #include <stdio.h> #include <string.h> #include <stdlib.h> void main (void) { 	void change(char*p1,char*p2);  	char*country[6]; 	int i,j,n=6; 	printf("请输入5个国家名字：\n"); 	for(i=1;i<n;i++) 	{ 		char buff[64] = {0}; 		scanf("%s", buff); 		country[i] = (char *)malloc(strlen(buff) + 1); 		strcpy(country[i], buff); 	} 		 	printf("名字排序如下:\n"); 	for(i=1;i<n;i++) 		for(j=1;j<n-i;j++) 			change(country[j+1],country[j]); 	for(i=1;i<n;i++)  		printf("%s\n",country[i]); } void change(char*p1,char*p2) { 	char temp[64] = {0}; 	if(strcmp(p1,p2)<0) 	{ 		strcpy(temp, p1); 		strcpy(p1, p2); 		strcpy(p2, temp); 	}  }

user: user-6
content: 打印日志，就知道哪几行代码有崩溃
user-0 提问: 哪错了求大神看下

回复:
user: user-1
content: 去掉红色那个括号  struct yyy nn={{"string constant"},{{"text"},{7,8},{12.3}},{"address"}},{"a","b","c"}};

user: user-2
content: 楼主是不仔细造成的，有两个地方： 1.struct yyy nn={{"string constant"},{{"text"},{7,8},{12.3}},{"address"}},{"a","b","c"}};这里的address后面多了一个} 2.printf("%s%s %d %d %1f\n%s%s%s%s\n",rr.dd,rr.mm.aa,rr.mm.bb[0],rr.mm.bb[1],rr.mm,rr.ee,rr.ff[0],rr.ff[2]);这句 rr.mm.cc写成了,rr.mm 少传一个参数,rr.ff[1]  #include <stdio.h> #include <string.h> struct xxx { 	char aa[30]; 	int bb[2]; 	double cc; }; struct yyy { 	char dd[50]; 	struct xxx mm; 	char *ee; 	char *ff[3]; }; void main (void) { 	struct xxx qq={{"sample"},{0,1},{5.4}}; 	struct yyy nn={{"string constant"},{{"text"},{7,8},{12.3}},{"address"},{"a","b","c"}}; 	struct yyy pp,rr; 	strcpy(pp.mm.aa, "in structure"); 	strcpy(pp.dd,"structure");  	pp.mm.bb[0]=10; 	pp.mm.bb[1]=12; 	pp.mm.cc=57.8; 	pp.ee="pointer and"; 	pp.ff[0]="array"; 	pp.ff[1]="of"; 	pp.ff[2]="ponter."; 	rr=pp;  	printf("%s%s %d %d %1f\n%s%s%s%s\n",rr.dd,rr.mm.aa,rr.mm.bb[0],rr.mm.bb[1],rr.mm.cc,rr.ee,rr.ff[0],rr.ff[1],rr.ff[2]); }
user-0 提问: 【数据结构新手】一元多项式相加问题

回复:
user: user-0
content: 引用 4 楼 qq423399099 的回复:楼主是不是又调试了别的函数？ 就main函数里InitPoyln，CreatPoyln，PrintfPoyln函数应该是没问题的    恩恩，谢谢啦

user: user-1
content: 楼主是不是又调试了别的函数？ 就main函数里InitPoyln，CreatPoyln，PrintfPoyln函数应该是没问题的

user: user-0
content: 加上去了，还是不行

user: user-0
content: 引用 1 楼 qq423399099 的回复:问题出在你没有将链表的最后一个节点的next指针置为NULL 这样就导致了调用PrintfPoyln打印节点的时候越界访问导致异常 PS：同时在CreatPoyln函数里还需要free(p),否则这个地方有内存泄露  Status CreatPoyln(LinkList *l) {     //【2】尾插法建立链表     LinkList p,r;     r = (*l);     while (1)     {         p = (LinkList)malloc(sizeof(Node)); //        printf("请输入多项式的系数和指数：");         scanf("%d %d",&p->data.coef,&p->data.index);         if(p->data.coef == -1&&p->data.index == -1)             break;         r->next = p;         r = p;     } 	free(p); //需要释放掉p 	r->next = NULL; //最后一个节点的next要置为NULL     return OK; }  加上去了，还是不行

user: user-1
content: 问题出在你没有将链表的最后一个节点的next指针置为NULL 这样就导致了调用PrintfPoyln打印节点的时候越界访问导致异常 PS：同时在CreatPoyln函数里还需要free(p),否则这个地方有内存泄露  Status CreatPoyln(LinkList *l) {     //【2】尾插法建立链表     LinkList p,r;     r = (*l);     while (1)     {         p = (LinkList)malloc(sizeof(Node)); //        printf("请输入多项式的系数和指数：");         scanf("%d %d",&p->data.coef,&p->data.index);         if(p->data.coef == -1&&p->data.index == -1)             break;         r->next = p;         r = p;     } 	free(p); //需要释放掉p 	r->next = NULL; //最后一个节点的next要置为NULL     return OK; }
user-0 提问: 做一个测量温度的产品

回复:
user: user-1
content: 成本基本取决于温度测量精度和数据传送方式，最低端的是ds18b20加串口通信，整体算下来200以下； 但是场合要求高或者处理数据方法复杂的话就不好说了。。。
user-0 提问: C语言静态链表改为动态链表问题

回复:
user: user-1
content: #include<stdio.h> #include<malloc.h> #define NULL 0 struct name { 	int num; 	struct name *next; }; int search(struct name *head,int x); void insert(struct name *head);  void main() { 	int n,res,x; 	struct name a,b,c; 	struct name *p,*p1,*head; 	head = (struct name*)malloc(sizeof(struct name)); 	head->next = NULL; 	insert(head);  	printf("请输入要查找的元素:"); 	scanf("%d",&x);  	res=search(head,x); 	if(res==0) 		printf("没有找到元素!\n"); 	else 		printf("节点序号为:%d\n",res); }  void insert(struct name *head) { 	int x; 	struct name *p,*p1; 	p = head; 	printf("请输入链表元素:"); 	 	scanf("%d",&x); 	while(x!=0) 	{ 		p1 = (struct name*)malloc(sizeof(struct name)); //创建新节点 		p1->num = x;    //给新的结点赋值 		p->next = p1;   //让当前结点的next指针指向新创建的结点 		p = p1;    //让p指向当前最后的结点 		scanf("%d",&x); 	} 	p->next=NULL;//将最后一个结点的next置为NULL }  int search(struct name *head,int x) { 	int i=1; 	struct name *p=head->next; 	while(p!=NULL) 	{ 		if(p->num==x) 			break; 		p=p->next; 		i++; 	} 	if(p==NULL) 		return 0; 	else return i; }

user: user-2
content: return(head);//这句干吗的？ int search(struct name *head,int x)先声明下再使用
user-0 提问: 双三次插值算法  放大图片  图片直接花了 求解

回复:
user: user-1
content: 在矩形  -sx/2+x,-sy/2+y  sx/2+x,sy/2+y   范围内的点是有贡献的点

user: user-1
content: 那就采用效率低，但是效果好的方法吧  假设 sx,sy 分别是 x,y 方向的缩放比 求出，dst 的每个像素在 src 的位置 对 dst每个像素 点（x,y） 有贡献的点在     -sx/2+x, x,sx/3+x，-sy/2+y,sy/2+y 之间的所有像素点 在这个范围的所有点求出加权平均值，可以用 立方插值相同的方法

user: user-1
content: 插值的时候，注意不要溢出

user: user-1
content: 图像缩放，应该求出目标图像在原图像的位置，用这个位置做参数 进行缩放 在该位置周围找若干图像点，进行插值 如果缩放比例太大，图像细腻，走样在所难免  如果要求清晰，就不能采用简单的插值了 而应该对每个对目标图像有贡献的点， 做加权平均值，方法可以和Cube 插值相同，但是计算量不是一般的大

user: user-0

user: user-2
content: 建议楼主使用PS创建一个尺寸尽量小比如4像素x3像素的图片辅助单步调试你的代码。

user: user-0
content: 我就是这么做的啊  不知道哪里出了问题
user-0 提问: 数组指针的问题：数组的大小和地址赋值

回复:
user: user-1
content: int (*p)[2]和int (*p)[3]是不同类型的指针， (*p)[3]是指向每行有3个元素的一维，因此不能指向其他数组

user: user-2
content: int (*p)[2];  这里的2是指列数，而不是行数

user: user-3
content: 我试了下，这里p的类型不是int*的，而是int[][2],就是行指针的意思，因为你定义的a每行有两个元素，所以你下面定义p的时候也应该是2，如果你定义为a[][5]=...下面你得定义(*p)[5]才行。

user: user-4
content: 这是一个数组指针，p是一个指向含2个元素的数组的指针 p=a;使得p是指向了a, 如果是p+1那么，其实跳过的是2个int的长度（跳过一个数组，这个数组长度是2），由声明的时候int (*p)[2]决定的 p+1指向的是第三个元素（即3），p+2指向的是第五个元素（即5） (*p)[0]是1，(*p)[1]是2..............

user: user-5
content: 那个2是不能改成3的，2告诉指针，指针的步长是2，p+1跳的是2个整形的内存块，若改为3，则跳的是3个整形的内存块，a的类型指定了a的步长是2，是3的话相当于类型不一样了

user: user-6
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-0
content: 看了#2和#3，基本明白了。
user-0 提问: 用getchar不用scanf的原因

回复:
user: user-1
content: scanf 的 %f 对应 float*, 请用%lf

user: user-2
content: scanf("%lf", &a)

user: user-3
content: 楼主原来的a = getchar();也不对的吧？ getchar只能读入一个字符给a, 同时scanf("%f", &a)也是不行的，类型需要严格匹配 printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则（在printf这样的函数的可变参数列表中 ，不论作用域内有没有原型，都适用这一规则）float型会被提升为double型。因此printf()只会看到双精度数。 对于scanf，情况就完全不同了，它接受指针，这里没有类似的类型提升。（通过指针）向float存储和向double存储大不一样，因此，scanf区别%f和%lf。
user-0 提问: 问一个试题的回答规范

回复:
user: user-1
content: 很明显题目问的是整个表达式的值

user: user-2
content: http://baike.baidu.com/link?url=JH9DKpiLMUjKQQjjqGYfiOgki-2pGiSGAwZbKtitxq_BBZAk8bwz30DRBO_W_Ko2AuJDjkTr8vRYPVtBhL0eqq int a1,a2,b=2,c=7,d=5; a1=(++b,c--,d+3); a2=++b,c--,d+3; 对于给a1赋值的代码，有三个表达式，用逗号分开，所以最终的值应该是最后一个表达式的值，也就是(d+3)的值，为8，所以a1的值为8。 对于给a2赋值的代码，也是有三个表达式，这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8，但a2=4（第2行代码运算完时，b=3，即第3行代码运行时，b的值为4）。

user: user-3
content: 逗号表达式，结果为3

user: user-4
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-5
content: 逆波兰式分析一下就知道了...............

user: user-6
content: 3，分号结果是最后一个表达式

user: user-7
content: 没意思....

user: user-8
content: 根据优先级（=高于,），应该是：  (a=1),(a+=1),(a+1),(a++) 的结果  而不是  a=(1,a+=1,a+1,a++)

user: user-9
content: 表达式 a=1,a+=1,a+1,a++ 的值是____________。

user: user-10
content: 表达式的值是____________。

user: user-11
content: 等于2？…………………………

user: user-12
content: 指的应该是前面整个逗号表达式的值
user-0 提问: 【一个简单的连通问题】为什么输出总会晚一步

回复:
user: user-1
content: scanf 里面去掉\n  否则会去多匹配一个空白符

user: user-2
content: scanf("%d %d\n", &p, &q)改成scanf("%d %d", &p, &q) 多了\n,scanf里不需要用\n

user: user-3
content: 大家好厉害，赞一个。。。。。。。。。。。。
user-0 提问: 不同PC主机加载时候执行不同内容

回复:
user: user-0
content: var window= WScript.CreateObject("WScript.Shell");  var FS = WScript.CreateObject("Scripting.FileSystemObject");  //var network = new ActiveXObject('WScript.Network');  var network = WScript.CreateObject("WScript.Network");  var hostname = network.computerName;  WScript.echo(hostname);   if ((hostname="PC1")){ 	try{ 		network.MapNetworkDrive ("z:", "\\\\137.135.137.200\\aa"); 	} 	catch (ex){ 		WScript.Echo ("Error for mapping w drive in Admin with IP:" + ex.message); 	} }   找到了，自己顶自己~~

user: user-1
content: Windows 脚本宿主     UserName 属性 请参阅 运行脚本 | WshNetwork 对象 返回用户名。  object.UserName  参数 object  WshNetwork 对象。  说明 字符串。  如果在登录脚本中使用了该属性，请参见创建自动登录脚本。  示例 下面的示例演示 UserName 属性的用法：  <package>    <job id="vbs">       <script language="VBScript">          Set WshNetwork = WScript.CreateObject("WScript.Network")          WScript.Echo "Domain = " & WshNetwork.UserDomain          WScript.Echo "Computer Name = " & WshNetwork.ComputerName          WScript.Echo "User Name = " & WshNetwork.UserName       </script>    </job>     <job id="js">       <script language="JScript">          var WshNetwork = WScript.CreateObject("WScript.Network");          WScript.Echo("Domain = " + WshNetwork.UserDomain);          WScript.Echo("Computer Name = " + WshNetwork.ComputerName);          WScript.Echo("User Name = " + WshNetwork.UserName);          }       </script>    </job> </package> 请参阅 运行脚本 | WshNetwork 对象    --------------------------------------------------------------------------------  © 2001 Microsoft Corporation. 保留所有权利。

user: user-0
content: 识别主机名的语句怎样写？
user-0 提问: 这个C程序运行结果为什么有乱码产生？求最多约数问题

回复:
user: user-1
content: 当一个未初始化赋值的时候(至少是vc 下未初始化的内存)默认是0xCCCCCCCC;，他在内存就默认保存为-858993460 即二进制的11001100 11001100 11001100 11001100； 十六进制的CCCCCCCC;而汉字 "烫" 的编码恰好就是1100110011001100: 楼主以后碰到字符数组输出烫，指针报错0xCCCCCCCC，以及变量打印-858993460一般都是未初始化导致的

user: user-0
content: thank you

user: user-2
content: printf("请输入两个数a和b:%d,%d\n",a,b); 这里的a，b没有赋值。改成  printf("请输入两个数a和b:“);
user-0 提问: C语言

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: 浮点数在计算机内是无法精确存储的，float m=0.90;存储在计算机内的数只是无限接近0.90而已（可能是0.899999999也可能是0.90000001） 楼主加上这两句打印应该就能明白了  #include<stdio.h> void main() { 	float m=0.90; 	int n=10; 	printf("%.20f\n", m); 	printf("%.20f\n", m * n); 	printf("%d\n",(int)(n*m)); }

user: user-3
content: 0.9在计算机里面不能完全精确存储，比如可能是0.899999，所以乘以10强制类型转换会出现不想要的结果。
user-0 提问: 请求帮助

回复:
user: user-0
content: 我是都不会呀，难道还能调试

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

user: user-0
content: 不会呀，求解

user: user-2
content: 可以堆排序啊

user: user-0
content: 这个有问题吧，如果子树以下有比一开始的i要大，那就没法交换了呀

user: user-2
content: void Heapify(Heap H, unsigned int i)   {       unsigned int l = (i+1) << 1 - 1;  //left child = 2i-1, -1 ?:data[0..n-1]       unsigned int r = (i+1) << 1 ; // right child = 2i       unsigned int largest = 0;       int capacity = H->heapMaxIndex;          if(l <= capacity && H->data[l] > H->data[i])           largest = l ;       else           largest = i ;              if(r <= capacity && H->data[r] > H->data[largest])           largest = r ;          if(largest!=i)       {              //exchange            int tmp ;           tmp = H->data[largest];           H->data[largest] = H->data[i];           H->data[i] = tmp;                      Heapify(H,largest);       }else{           return ;       }          }
user-0 提问: 里面的IF（IN（OP））不知道是什么，用keil运行不了

回复:
user: user-1
content: MAIN.C(29): warning C206: 'In': missing function-prototype MAIN.C(29): error C267: 'In': requires ANSI-style prototype 这两行的意思是没有找到“In”函数的原型，原因是你没有包含声明“In”函数的头文件。 解决方式是在main函数前增加#include "xxxx.h"  ，xxxx.h是包含In函数的声明的头文件 又或者在main函数前定义In函数。

user: user-2
content: In函数的实现呢？
user-0 提问: 一串字符串两两组合转化为十六进制数

回复:
user: user-1
content: 多谢user-4和赵4老师，您们的2个小程序在uｂｕｎｔｕ 12.04都能运行，结果正确，多谢分享！

user: user-2
content: 引用 2楼赵4老师 的回复: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。 #pragma warning(disable:4996 4018) #include <stdio.h> #include <string.h> char *s="00A404000E315041592E5359532E4444463031"; int L,i,v,n; char b[100]; int main() {     for (i=0;i<strlen(s)/2 && i<100;i++) {         sscanf(s+i*2,"%2X",&v);         b[i]=(char)v;     }     n=i;     for (i=0;i<n;i++) printf("%02X ",(unsigned char)b[i]);     return 0; } //00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31

user: user-3
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。 #pragma warning(disable:4996 4018) #include <stdio.h> #include <string.h> char *s="00A404000E315041592E5359532E4444463031"; int L,i,v,n; char b[100]; int main() {     for (i=0;i<strlen(s)/2 && i<100;i++) {         sscanf(s+i*2,"%2X",&v);         b[i]=(char)v;     }     n=i;     for (i=0;i<n;i++) printf("%02X ",(unsigned char)b[i]);     return 0; } //00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31

user: user-4
content: #include <stdlib.h> #include <stdio.h>  unsigned char * parse_uchar_array(unsigned char * arr, const char * src) {     int i = 0, j = 0, charread = 0;     unsigned char v;     while (sscanf(src + j, "%2hhx%n", &v, &charread) > 0)     {         arr[i++] = v;         j += charread;     }     return arr + i; }  int main() {     char * data = "00A404000E315041592E5359532E4444463031";     unsigned char result[20] = { 0 };     unsigned char * e = parse_uchar_array(result, data);     for (unsigned char * pv = result; pv != e; ++pv)     {         printf("%02hhx ", *pv);     }     printf("\n");     return 0; } 注意：某些版本的VS可能不能正确识别%hhx
user-0 提问: 帮忙看一下

回复:
user: user-1
content: 拼写错误 调用和定义是fuction1  声明是function1   (多了一个n)

user: user-0
content: 没办法，，是软件工程专业的，，，，，，，，，，，，，，

user: user-2
content: 可以用些IDE 比如VS 加Resharper等插件 起点高点 别直接用记事本加gcc编译器那样练习。 本来你可以选择一个简单的人生  你非要选择困难模式 本身就是一个错误。 什么输入1000字文章。只有强迫症的人和很傻的人才会去做。那已经是20年前的程序员了,年代不同了。

user: user-3
content: 1楼负责帮你找到问题。 2楼负责帮你不再犯同类问题。

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

回复:
user: user-1
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-2
content: 大整数可以考虑用char型字符数组存储
user-0 提问: C++ win32 文件的读入错误  0xC0000005:  读取位置 0x4327A150 时发生访问冲突。

回复:
user: user-0
content: 已解决 是因为读取文件时fscanf_s(pfile,"%d",&(g_map[i][j]));     d%前面少一个空格 导致不能一个字符一个字符的读取

user: user-1
content: 引用 1 楼 qq423399099 的回复:很明显是指针的越界访问，极有可能是楼主代码中对于数组访问的下标有问题  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 我的txt  文本里边全是0和1 ，为什么读入进来的数是很大的数字呢 按理说temp应该等于0或者1 啊 我一步步调试了 但是实在发现不了错误啊

user: user-2
content: 很明显是指针的越界访问，极有可能是楼主代码中对于数组访问的下标有问题  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 求解问题，我已经深刻思考了，但还是不会，希望帮帮忙

回复:
user: user-1
content: 根据左括号确定child，右括号和逗号确定sibling

user: user-0
content: 看清题目，输入的是广义表

user: user-2
content: 根据lz题目创建二叉树  CSTree CreateBiTree(){     ElemType ch;     CSTree T;     scanf("%c",&ch);     if(ch=='#')T=NULL;     else{         T = (CSTree)malloc(sizeof(CSTNode));         T->data = ch;         T->child = CreateBiTree();         T-> sibling = CreateBiTree();     }     return T;//返回根节点 }
user-0 提问: C语言链表问题

回复:
user: user-1
content: #include<stdio.h> #include<malloc.h> #define NULL 0  struct name  { 	int num; 	struct name *next; };  int FindNode(struct name *head, int x) { 	int i = 1; 	struct name *p=head->next; 	while(p) 	{ 		if(p->num == x) 			break; 		p=p->next; 		i++; 	} 	return p == NULL ? 0 : i; }  void main() {	 	int x; 	struct name a; 	struct name b; 	struct name c; 	struct name d; 	struct name *p; 	struct name *head; 	head=(struct name*)malloc(sizeof(struct name)); 	a.num=1; 	b.num=2; 	c.num=3; 	head->next=&a; 	a.next=&b; 	b.next=&c; 	c.next=NULL; 	printf("请输入要查找的元素:"); 	scanf("%d", &x); 	int res = FindNode(head, x); 	if(res == 0) 		printf("没有找到元素!\n"); 	else 		printf("节点序号为:%d\n", res); }

user: user-0
content: 引用 1 楼 旧剑鞘的回复:struct name { int num; struct name *next; }; 节点里面只有num和next指针，序号是num? 寻找的的x是个什么鬼？ 序号是节点的序号

user: user-0
content: 引用 1 楼 旧剑鞘的回复:struct name { int num; struct name *next; }; 节点里面只有num和next指针，序号是num? 寻找的的x是个什么鬼？ x是num中的数据

user: user-2
content: struct name { int num; struct name *next; }; 节点里面只有num和next指针，序号是num? 寻找的的x是个什么鬼？