Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言中,如果使用realloc时,数据移动会造成什么影响?

回复:
user: user-1
content: 1，现有堆内存够，原有基础上扩展 2，现有堆内存不够，重新分配并且拷贝值

user: user-2
content: 影响就是realloc后不要指望指针地址没变。

user: user-2
content: 提醒：Linux下，malloc,calloc,realloc,free都是开源的。

user: user-3
content: 首先要大致了解内存分配的方法，多数内存分配是基于MBC块的，即每一个内存块都是有个头，所有的内存块以链表方式链接，多数情况下出于效能原因会维持一个空闲内存链表。所以，一个已用内存之后就可能是一块空闲内存，好了，回到realloc 1）在当前内存块之后存在一个空闲内存块，其空闲内存块的大小+当前内存大小大于realloc要求的内存，此时，直接将之后空闲内存拆分为两个：一块和当前内存合并，另一块即新的空闲内存。修改相应表，此时，Realloc返回地址指针不会改变 2）反之，如果当前内存块紧邻不是空闲内存，或空闲内存块大小不够，此时，会在其他地方重新申请一个realloc申请大小的内存，同时，将之前的数据复制到新内存块，释放旧内存空间。此时，realloc返回地址指针会发生变化（主要问题，原地址指针不可用） 因此，解决方式，通常多数情况下我们假定realloc返回地址指针不是之前的地址指针  内存分配有三个函数：malloc、calloc、realloc。注意：malloc可以认为是基础，很多时候如果不介意效能，realloc和calloc可以用malloc实现，绝没有malloc不够内存会调用realloc一说。

user: user-4
content: 数据移动是系统控制的，判断是否需要移动也是系统控制的。如果你要做内存管理相关的控制，需要考虑这个问题，否则可以不用考虑这个可能的拷贝数据的问题。

user: user-5
content: 内存不够的话，找不到合适空间，就会失败。如果数据量太大，拷贝的时候又会费事。

user: user-6
content: 这段话的意思就是如果这块内存后面的自由内存能满足扩张需求那么就直接扩张 否则就找一块新的内存并把旧数据拷贝过去  有什么问题么？

user: user-7
content: malloc 分配的内存不够用会用到realloc
user-0 提问: c语言从文件读取后如何写排序，急求！！！！！！！江湖救急！！！！！

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<ctype.h>  #include<windows.h>  struct tel_book{     int num;     char name[20];     char sex[10];     char relationship[20];     char phone[20];     char address[100];     char email[100]; }stu; void add(); void list(); void sort(); void main() {      int choice;     system("cls");     while(1)     {         system("cls");          printf("\t\t\t\t\t\t\t\t      主菜单\n\n\n\n");         printf("\t        1.  录入信息           \n\n");         printf("\t                  2.  信息显示\n\n");         printf("\t        3.  信息排序          \n\n");         printf("\t   4.  退出系统\n\n");          printf("\n请输入序号1~4:");         choice = getch();         switch(choice)         {             case '1':                 add();break;              case '2':                 list();break;             case '3':                 sort();break;              case '4':                 system("cls");                  exit(0);                 break;             default :                 system("cls");                 printf("ERROR!");                 printf("\nAny key to continue");                 getch();                 break;         }     } } void add() {     FILE *f;     char test;     f=fopen("tel.dat","ab+");     if(f==0)     {         f=fopen("tel.dat","wb+");         system("cls");          getch();     }     while(1)     {         system("cls");         printf("\n 编号:");         scanf("%d",&stu.num);         printf("\n 姓名:");         scanf("%s", stu.name);         printf("\n 性别:");         scanf("%s", stu.sex);         printf("\n 关系:");         scanf("%s", stu.relationship);         printf("\n 电话:");         scanf("%s", stu.phone);         printf("\n 地址:");         scanf("%s", stu.address);         printf("\n 邮箱:");         scanf("%s", stu.email);         fwrite(&stu,sizeof(stu),1,f);         fflush(stdin);         system("cls");         printf("成功添加1 条记录");         printf("\n Press esc key to exit, Press Y to add other record:");         test=getche();         test=toupper(test);         if(test!='Y')             break;     }     fclose(f); }  void list() {     FILE *f;     if((f=fopen("tel.dat","rb"))==NULL)         exit(0);     system("cls");     printf("\n");     printf("编号\t姓名\t性别\t关系\t电话\t\t地址\t\t邮箱\n");     while(fread(&stu,sizeof(stu),1,f)==1)     {         printf("\n%d\t%s\t%s\t%s\t%s\t\t%s\t\t%s",stu.num,stu.name,stu.sex,stu.relationship,stu.phone,stu.address,stu.email);     }     printf("\n");     fclose(f);     getch(); } void sort(struct tel_book *book, int num) {     int i, j;  } 排序之前，现将目前的代码编译测试通过。 目前代码存在问题，scanf输入中，对于数组，不需要前面加&，因为数组名本身就是地址。 建议现将目前代码调试通过，能够得到正确的数据，然后再考虑排序或其他功能。因为在有问题的代码上去开发新的功能，只会让问题变的更加复杂～数据从文件中读取后，要在内存里存放，不然排序也没有数据。

user: user-2
content: 你还是先别考虑怎么排序了 你读取的数据都没有存储起来怎么排序？至少你需要个tel_book stus[N]数组存储所有读取到的数据然后再看情况进行排序
user-0 提问: 怎么样实行浏览全部学生信息

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  void displayAll() {     struct student *p;     printf("学生总数:%d\n", TOTAL_NUM);      /*     if(head != NULL)     {         do         {             printf("%10d%10s%10d%10s%10s\n",p->num,p->name,p->age,p->sex,p->E_mail);             p=p->next;         } while(p!=NULL); }         */     if (!head) {         printf("无学生信息!\n");     }     p = head;     while (p) {         printf("%10d%10s%10d%10s%10s\n",p->num,p->name,p->age,p->sex,p->E_mail);         p = p->next;     }     printf("\n"); }   void query_by_num() {     int num;     struct student *p1;     printf("请输入学生的学号：");     scanf("%d", &num);     if(head==NULL)     {         printf("无学生记录！\n");         return;     }      /*        head==p1;         while(num!=p1->num && p1->next!=NULL)        p1=p1->next;        if(num == p1->num)        {        printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");        printf("-------------------------------------------------------------------------------");        display(p1);        }        else        printf("没有该学生记录，请核对！");        */     p1 = head;      while (p1) {         if (p1->num == num)             break;         p1 = p1->next;     }     if (p1) {         printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");         printf("-------------------------------------------------------------------------------");         display(p1);     } else {         printf("没有该学生记录，请核对！");     } } void freeAll() {     struct student *p1, *p2; p1=p2=head;     while(p1)     {         p2=p1->next;         free(p1);         p1=p2;     } }   建议修改如上！  displayAll函数中，p是野指针，不能直接用。需要先p = head;   注意，query_by_num函数中问题主要是head == p1，即非赋值，判断也没有意义。正确的语句应该是p1 = head;
user-0 提问: 为什么输入正确的学号，运行结果显示的是“无学生记录”急需 求大神帮助

回复:
user: user-1
content: void query_by_num() {     int num;     struct student *p1; printf("请输入学生的学号：");     scanf("%ld", &num);     if(head==NULL)     {         printf("无学生记录！\n");         return;     }      /*     head==p1;      while(num!=p1->num && p1->next!=NULL)         p1=p1->next;     if(num == p1->num)     {         printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");         printf("-------------------------------------------------------------------------------");         display(p1);     }     else         printf("没有该学生记录，请核对！");     */     p1 = head;      while (p1) {         if (p1->num == num)             break;         p1 = p1->next;     }     if (p1) {         printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");         printf("-------------------------------------------------------------------------------");         display(p1);     } else {         printf("没有该学生记录，请核对！");     } } void freeAll() {     struct student *p1, *p2; p1=p2=head;     while(p1)     {         p2=p1->next;         free(p1);         p1=p2;     } } 建议修改如上！  注意，问题主要是head == p1，即非赋值，判断也没有意义。正确的语句应该是p1 = head;
user-0 提问: 阅读程序题，其中红色的这段代码运行过程是怎么样的，求解

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

回复:
user: user-1
content: #include <stdio.h>  #define MAX_SIZE 10 struct node {     char name1[32];     int num1;     char name2[32];     int num2; };  void bubble_sort(struct node *arr, int len);  int  get_data_from_file(struct node *arr, int size); void set_data_into_file(struct node *arr, int len); void print_list(struct node *arr, int len);  int main(void) {     struct node arr[MAX_SIZE];     int num;      num = get_data_from_file(arr, MAX_SIZE);     printf("Before sort!\n");     print_list(arr, num);     bubble_sort(arr, num);     printf("After sort!\n");     print_list(arr, num);     printf("Write file!\n");     set_data_into_file(arr, num);     return 0; }     void print_list(struct node *arr, int len) {     int i;      for (i = 0; i < len; i++)         printf("%s %d, %s %d\n", arr[i].name1, arr[i].num1, arr[i].name2, arr[i].num2); }  int  get_data_from_file(struct node *arr, int size) {     int i, cnt = 0;     int ret;      FILE *fp = fopen("record.txt", "r");     if (!fp) {         fprintf(stderr, "open file error!\n");         return -1;     }      for (i = 0; i < size; i++) {         ret = fscanf(fp, "%s %d, %s %d\n", arr[i].name1, &arr[i].num1,  arr[i].name2, &arr[i].num2);         if (ret == EOF)             break;         cnt++;     }      return cnt; }  void set_data_into_file(struct node *arr, int len) {     int i, cnt = 0;     int ret;      FILE *fp = fopen("record.txt", "w");     if (!fp) {         fprintf(stderr, "open file error!\n");         return;     }     for (i = 0; i < len; i++) {         ret = fprintf(fp, "%s %d, %s %d\n", arr[i].name1, arr[i].num1, arr[i].name2, arr[i].num2);     }  }  void bubble_sort(struct node *arr, int len) {     int i, j;     struct node tmp;      for (i = 0; i < len; i++)         for (j = 0; j < len - 1; j++) {             if (arr[j].num1 < arr[j+1].num1) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             }         } }   作为一个参考吧，建议还是自己能动手练练。即使是别人写好的，也建议自己测试，运行一下

user: user-1
content: 文件操作，建议使用fscanf/fprintf读写文件； 然后以第二个数据作为排序的条件；
user-0 提问: 如何在主函数里边实现二叉树的销毁，清空树的操作，还有判断是否为空

回复:
user: user-1
content: 已经有销毁操作了，为什么还要实现二叉树的销毁，清空呢，在主函数里也已经调用了。判断二叉树是否为空也已经有了，只是没有调用。 可以在遍历的函数里调用一下，判断二叉树是否为空。 void preOrderTraverse(BiTree T) {     if(!BinTreeEmpty(&T))     {         printf("data = %d\n", visit(T));         preOrderTraverse(T->lchild);         preOrderTraverse(T->rchild);     } } printf("there are %d number nodes.\n"); 这句有问题呢，printf缺少一个参数。  手里拿着碗，还到处找碗，

user: user-2
content: 你这代码不都已经写了创建，遍历，销毁二叉树了吗？不过销毁二叉树，最好是在后序遍历里释放内存
user-0 提问: 二叉树的初始化，销毁，清空树，判断是否为空

回复:
user: user-0
content: 谢谢楼上了~

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include "math.h"  #define OK 1 #define ERROR 0  typedef int Status;     /* Status是函数的类型,其值是函数结果状态代码，如OK等 */  typedef int TElemType;  typedef struct BiTNode  /* 结点结构 */ {    TElemType data;      /* 结点数据 */    struct BiTNode *lchild,*rchild; /* 左右孩子指针 */ }BiTNode,*BiTree;   /* 构造空二叉树T */ Status InitBiTree(BiTree *T) {     *T = NULL;     return OK; }  /* 检查二叉树是否为空*/ Status BinTreeEmpty(BiTree *T) {     if(*T == NULL)         return 1;     else         return 0; } /* 销毁二叉树T */ void DestroyBiTree(BiTree *T) {     if(*T)     {         if((*T)->lchild) /* 有左孩子 */             DestroyBiTree(&(*T)->lchild); /* 销毁左孩子子树 */         if((*T)->rchild) /* 有右孩子 */             DestroyBiTree(&(*T)->rchild); /* 销毁右孩子子树 */         free(*T); /* 释放根结点 */         *T=NULL; /* 空指针赋0 */     } }  /* 将二叉树清为空树*/ void ClearBiTree(BiTree *T) {     if(*T == NULL)         return;     ClearBiTree(&(*T)->lchild);     ClearBiTree(&(*T)->rchild);     free(*T); }  /* 按前序输入二叉树中结点的值（一个字符） */ /* #表示空树，构造二叉链表表示二叉树T。 */ void CreateBiTree(BiTree *T) {     TElemType ch;      scanf("%d", &ch);      if(ch == -1)      //#代表这个节点没有子树。         *T = NULL;     else     {         *T = (BiTree)malloc(sizeof(BiTNode));          //malloc生成一个内存空间并且强制转化为BiTree类型，类似new的作用。         if(!*T)             exit(OVERFLOW);         (*T)->data = ch; /* 生成根结点 */         CreateBiTree(&((*T)->lchild)); /* 构造左子树 */         CreateBiTree(&((*T)->rchild)); /* 构造右子树 */      //函数参数的传递是单向值传递，当我们是需要改变一个指针的值时，就需要用二重指针做参。     } }  int visit(BiTree T) {     return T->data; }  // 先序遍历 void preOrderTraverse(BiTree T) {     if(T)     {         printf("data = %d\n", visit(T));         preOrderTraverse(T->lchild);         preOrderTraverse(T->rchild);     } }  // 中序遍历 void inOrderTraverse(BiTree T) {     if(T)     {         inOrderTraverse(T->lchild);         printf("data = %d\n", visit(T));         inOrderTraverse(T->rchild);     } }  // 后序遍历 void postOrderTraverse(BiTree T) {     if(T)     {         postOrderTraverse(T->lchild);         postOrderTraverse(T->rchild);         printf("data = %d\n", visit(T));     } }  int main() {     BiTree T;     InitBiTree(&T);     CreateBiTree(&T);     preOrderTraverse(T);     ClearBiTree(&T);     return 0; } 递归方法，主要还是要理解创建的方法～
user-0 提问: 使用C语言编写：求解一元二次方程X2+5X+6=0的根。始终有一个错误   

回复:
user: user-1
content: 什么错误？错误分很多种：逻辑错误，编译错误，链接错误，运行时错误等等。可以从错误的提示确定属于哪一类。你遇到的错误提示是什么？请贴出来，这样大家可能就能快速定位了。正如1楼所说，没加分号等。

user: user-2
content: 这是对的呀，没有错啊，编译如果报错也只是return 0 没有加；啊。

user: user-3
content: #include  <stdio.h> #include  <math.h>  int main ( void ) {     //将方程的三个系数保存到计算机中     int a = 1;     int b = 5;     int c = 6;     double  delta;   //定义delta     double  x1;     //定义其中一个根为x1     double  x2;     //定义其中另一个根为x2      delta = b*b - 4*a*c;  //定义delta = b*b - 4*a*c     if (delta > 0)     {         x1 = ( - b + sqrt( delta )) / ( 2*a );          x2 =  ( - b - sqrt( delta )) / ( 2*a );         printf ( "该方程有两个根分别为\n" );         printf ( "x1 = %f \n",x1 );         printf ( "x2 = %f \n",x2 );     }     else if ( delta == 0)     {         x1 = ( -b ) / ( 2 * a);         x2 = x1;         printf ( "该方程只有一个根它为\n" );         printf ( "x1 = x2 = %f\n",x1);     }     else     {         printf( "该方程无解\n" );     }      return 0; }  注意coding style.

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

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

user: user-5
content: return 0 没加分号。
user-0 提问: C语言有关txt文件读取的问题，小白求问

回复:
user: user-0
content: 引用 2 楼 cfjtaishan 的回复:#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h>  int student = 0; void Load(); struct StuInfo {     int id;     char name[20];     char sex[12];     char num[20];     float score; }stu[50];  void Load() {     int i;     FILE*fp;     fp = fopen("StuInfo1.txt", "r");     if (fp == NULL) {         printf("The file can't be opened.\n");         return;     }      for (i = 0; !feof(fp); i++) {         fscanf(fp, "%d %s %s %s %f\n", &stu[i].id, stu[i].name, stu[i].sex, stu[i].num, &stu[i].score);         printf("%d %s %s %s %f\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].num, stu[i].score);     }     fclose(fp);     student = i; }  int main() {     Load();      return 0; }  用这个代码试一下； 问题如下： 1. 文件打开一次即可，你的程序里打开了两次。 2. 根据你的文件内容，建议的数据结构修改如下：  struct StuInfo {     int id;     char name[20];     char sex[12];     char num[20];     float score; }stu[50];  这儿已经定义50个学生信息，因此在Load不建议在继续使用局部变量stu[50]了。 3. 返回局部变量数据，没有意义。因为函数Load执行结束，局部变量会随着函数自动被释放，因此返回已经被释放的地址是未定义行为； 4. fscanf/fprintf是格式化读写文件，因此格式应该和文件里的数据格式一致。 5. 注意一下feof，建议从网上找一下feof函数使用时应该注意的事项；你的代码在使用这个函数时，缺乏健壮性，因此还是注意下。十分感谢！！！！！

user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h>  int student = 0; void Load(); struct StuInfo {     int id;     char name[20];     char sex[12];     char num[20];     float score; }stu[50];  void Load() {     int i;     FILE*fp;     fp = fopen("StuInfo1.txt", "r");     if (fp == NULL) {         printf("The file can't be opened.\n");         return;     }      for (i = 0; !feof(fp); i++) {         fscanf(fp, "%d %s %s %s %f\n", &stu[i].id, stu[i].name, stu[i].sex, stu[i].num, &stu[i].score);         printf("%d %s %s %s %f\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].num, stu[i].score);     }     fclose(fp);     student = i; }  int main() {     Load();      return 0; }  用这个代码试一下； 问题如下： 1. 文件打开一次即可，你的程序里打开了两次。 2. 根据你的文件内容，建议的数据结构修改如下：  struct StuInfo {     int id;     char name[20];     char sex[12];     char num[20];     float score; }stu[50];  这儿已经定义50个学生信息，因此在Load不建议在继续使用局部变量stu[50]了。 3. 返回局部变量数据，没有意义。因为函数Load执行结束，局部变量会随着函数自动被释放，因此返回已经被释放的地址是未定义行为； 4. fscanf/fprintf是格式化读写文件，因此格式应该和文件里的数据格式一致。 5. 注意一下feof，建议从网上找一下feof函数使用时应该注意的事项；你的代码在使用这个函数时，缺乏健壮性，因此还是注意下。

user: user-2
content: fscanf时,  %s提取字符串, 肯定会提取出全部了, 只能用正则表达式  %[^ ]  修改为这样 fscanf(fp,"%d%[^ ]%[^ ]%d%f", stu[i].id, stu[i].name, stu[i].sex, stu[i].num, stu[i].score);
user-0 提问: C程序中，kill(0,SIGKILL)如何保证父进程不被杀死？

回复:
user: user-1
content: 引用 3 楼 weixin_33398032 的回复:[quote=引用 2 楼 user-2的回复:]进程中至少要有一个线程，否则进程也会结束了 你的意思是，父进程中有一个线程的情况下，kill(0,SIGKILL)不会杀死父进程吗？[/quote] 照样会。

user: user-0
content: 引用 2 楼 user-2的回复:进程中至少要有一个线程，否则进程也会结束了 你的意思是，父进程中有一个线程的情况下，kill(0,SIGKILL)不会杀死父进程吗？

user: user-2
content: 进程中至少要有一个线程，否则进程也会结束了

user: user-1
content: 遍历所有子进程并逐一杀死。
user-0 提问: 数据结构单链表操作函数 严蔚敏版

回复:
user: user-1
content: 引用是C++编程相对C语言独有的语法，相当于C语言里的指针，但是还有一些不同的。 对比如下： 引用： GetElem(LinkList &L ,int i ,ElemType &e)  指针： GetElem(LinkList *L ,int i ,ElemType *e)  注意，在指针里，在GetElem函数里，L， e都是指针。

user: user-2
content: 前者按引用传递，可以在函数中修改  后者按值传递，函数中的形参是实参的复制值

user: user-3
content: 指针即地址 引用即别名

user: user-4
content: 区别就在于，LinkList  &L是引用类型，他可以在函数中修改L的值，能在函数域外也有效，但是LinkList  L却不行，在函数中将L修改后，退出了函数，其值依然是函数修改之前的值，这也是在设计函数时的一种技巧。  如果楼主还不懂，去百度一下引用类型。
user-0 提问: 怎么理解这个代码 C++

回复:
user: user-1
content: 输出最大值最小值

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

user: user-3
content: 这段C代码的目的是输入5个数字，最后输出5个数字中的最大值和最小值。

user: user-4
content: 楼上的回答很仔细啊。

user: user-5
content: nt main(void) { 	float in = true; 	int i, a, max, min; 	for (i = 0; i < 5; i++) //循环5次 	{ 		scanf("%d", &a); //输入一个整型数 		if (in)  //in初值为true，条件成立，执行if分支。 		{ 			max = min = a; //max=min=第一次接收到的a值 			in = false; //in赋值为false，下次循环进入时，if条件不满足，不再执行这个if分支。 		} 		if (max < a)  //新接收到的a值如果大于max，max就等于新接收到的a值 			max = a; 		if (min > a)  //新接收到的a值如果小于max，min就等于新接收到的a值 			min = a; 	}  	printf("Max = %d\nMin = %d\n", max, min); //循环结束，打印最终的max,min值。 	return 0; } 用心回答每个问题，如果对您有帮助，请采纳答案好吗，谢谢！

user: user-6
content: 引用 4 楼 wyyy2088511 的回复:循环输入5次数，每次打印最最大和最小数！ 不是每次打印吧，只打印一次

user: user-7
content: 循环输入5次数，每次打印最最大和最小数！
user-0 提问: 自学关于整数上浮和浮点数上浮和下浮的代码，求老司机帮看看对不对，谢谢！

回复:
user: user-1
content: 你这个 结果只看你%后面的格式字符的格式的

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437 一眼include\float.h

user: user-3
content: c = a * b;c是整型变量，将a * b的值赋值给c，会将乘积的结果截断，保留整数。即使用lf输出也只是保留整数部分。再说c是占4个字节，b是long double 16个字节，c无法将结果存放呢；与其叫溢出，不如叫截断了
user-0 提问: 多线程未定义的引用

回复:
user: user-1
content: 有蹊跷, 慢慢找

user: user-0
content: 谢啦。。。。。。。。

user: user-2
content: pthread_mutex_destroy(&mutex);     pthread_cond_destroy(&cond);     pthread_cond_destroy(&cond1); 单词拼写错误；注意下：destroy: ro还是or，
user-0 提问: 自学遇到困难，求各位前辈帮帮忙！

回复:
user: user-1
content: 另外语法非常乱，先定义了字符x, y z  ，把字符a啊赋值给 x ,....  然后以输入字符串输出x ,y ,z , 然后又输入什么什么  ，代码完全看不明白什么意思 ，代码只能一步一步来表述的，几乎不可以颠倒次序

user: user-1
content: 是单个字符，不是单子字符

user: user-1
content: 你 %c表示输出单字字符 ，%o才表示以八进制表示整数，另外定义字符最好char char1 ,char2  ;   来表示

user: user-2
content: scanf("%d\n",&x); printf("%c\n",x);

user: user-0
content: 能具体点么?因为我现在在自学，知识面有限，看的云里雾里的。

user: user-3
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-0
content: 在运行的时候，显示  Run-Time Check Failure #3 - The variable 'c' is being used without being initialized.       请问下这是因为什么？

user: user-0
content: 我重新改动了下你的  代码如下，我输入66，你的运行结果是6,b,c. #include<stdio.h> int main() {     //int a,b,c;     char x,y,z;       x ='a';     y ='b';     z ='c';       printf("请输入一个ASCII值（如66），ASCII值的取值范围是0-256\n");     scanf("%c,%c,%c", &x, &y, &z);     printf("%c，%c，%c\n", x, y, z);     printf("以上就是你输入的ASCII值所对应的字符\n");       //getchar();     //getchar();     getchar();     return 0; }      而我在我原来打代码上修了，再和你的对了下，感觉一模一样，但是，输入66，我的运行结果一下子是3个问号，再重新运行，又改成别的了，，我好晕，，好急，，  #include<stdio.h> int main() {     int a,b,c;     char x,y,z;      x='a';     y='b';     z='c';       printf("请输入一个ASCII值（如66），ASCII值的取值范围是0-256\n");     scanf("%c,%c,%c",&x, &y, &z);     printf("%c,%c,%c\n",&x, &y, &z);     printf("以上就是你输入的ASCII值所对应的字符\n");      getchar();     getchar();     getchar();     return 0; }   求解惑，我真的晕了。。

user: user-4
content: #include<stdio.h> int main() {     //int a,b,c;     char x,y,z;      x ='a';     y ='b';     z ='c';      printf("请输入一个ASCII值（如66），ASCII值的取值范围是0-256\n");     scanf("%c,%c,%c", &x, &y, &z);     printf("%c，%c，%c\n", x, y, z);     printf("以上就是你输入的ASCII值所对应的字符\n");      //getchar();     //getchar();     getchar();     return 0; } 代码里有中文字符，比如scanf中存在中文的逗号，去掉scanf中的\n回车符，不然输入无法结束。标准输入是行缓冲，所以不需要在scanf中加'\n' a,b,c没有使用，建议注释掉。
user-0 提问: QSqlTableModel::removeRows()删除数据库不彻底，代码如下：

回复:
user: user-0
content: 最后追踪，发现是语句 sqlmodel.submitAll();出现问题： QSqlError("8180", "QODBC3: Unable to execute statement", "[Microsoft][ODBC SQL Server Driver][SQL Server]The data types nvarchar(max) and ntext are incompatible in the equal to operator. [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared.")

user: user-1
content: try...catch...
user-0 提问: 求大神指导我这样求数组的逆置怎么多出来一个元素

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

user: user-1
content: 边界条件

user: user-2
content: #include <iostream> #include <stdio.h>  int max(int *s) {     int value=*s;     for(int i=1;i<10;i++)     {         if(value<*(s+i))         {             value=*(s+i);         }     }     return value; } int inverse(int *a, int len) {     int *p = a;     int *b = a + len - 1;     while (p < b)     {         int temp=*p;         *p = *b;         *b = temp;         p++;         b--;     }     for(int i = 0; i< len; i++) {         printf("%d\n", *(a+i));     }      return *a; }  int main() {     int buf[10] = {34,21,56,23,13,67,17,48,22,24};     //int i =max(buf);     //printf("%d\n",i);     printf("%d\n",inverse(buf, 10));     return 0; } 自己解决了问题更好呀。建议inverse传递两个参数进去。另外，p和b的自增，去掉前面的*，因为你没有对引用做处理。

user: user-3
content: 指出你的一个问题，*p++, *b--是没有意义的，虽然运行结果没有错。不知你有没有想过，既然只是想将p和b做指针偏移；为什么还要“*”呢？ 直接使用p++, b-- 就OK了。

user: user-4
content: 找到原因就结贴给分吧。另外，再指出你一个问题：*p++; *b--;最好写成p++, b--

user: user-4
content: 把main函数里的printf("%d\n",inverse(buf));改成inverse(buf);

user: user-0
content: 对不起打扰大家了，找到原因了，return *a，它返回了一个24 这样改了一下就没有问题了 void inverse(int *a) { int *p = a; 	int *b = a+9; 	while (p < b) 	{ 		int temp=*p; 		*p = *b; 		*b = temp; 		*p++; 		*b--; 	}   for(int i=0;i<10;i++)    { 	printf("%d\n",*(a+i));    } 		 }  int main() { 	int buf[10]={34,21,56,23,13,67,17,48,22,24}; 	//int i =max(buf);      //printf("%d\n",i); 	inverse(buf); 	return 0; }
user-0 提问: 求大神解释一下这个c语言程序

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

user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-2
content: void query_by_num() {     int num;     struct student *p1;     printf("请输入学生的学号：");     scanf("%ld", &num);     if(head==NULL)     {         printf("无学生记录！\n");         return;     }     p1=head;     while(num!=p1->num && p1->next!=NULL)         p1=p1->next;     if(num == p1->num)     {         printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");         printf("-------------------------------------------------------------------------------");         display(p1);     }     else         printf("没有该学生记录，请核对！"); } void freeAll() {     struct student *p1, *p2; p1=p2=head;     while(p1)     {         p2=p1->next;         free(p1);         p1=p2;     } }  query_by_num是通过num寻找某个学生的信息。 通过遍历链表，找到num和输入的相等的学生信息； 若链表为空，则直接返回，提示无此学生信息； 若链表不为空：若找到，则输出该学生的信息；若未找到返回并提示未找到。 freeAll是释放链表。

user: user-3
content: 这就是一个链表的储存、遍历、释放。 其中student是该链表的数据结构，所有数据都存放在该结构体中，通过指针方式可以遍历所有有效数据。 你弄懂了链表就知道这是干嘛的了。
user-0 提问: 把程序读取出来，写入到一个新的程序，不能正常运行。

回复:
user: user-0
content: 引用 4 楼 lgbxyz 的回复:windows写文件，使用文本模式（w）, 与使用二进制模式（wb）是有区别的。 在文本模式下，\n 会被自动替换成 \r\n，这样写出来的文件长度就跟预料中的不一样了。 而在二进制模式下，会原封不动的写入,不会做改变。linux下没有这种问题.  谢谢指点

user: user-1
content: windows写文件，使用文本模式（w）, 与使用二进制模式（wb）是有区别的。 在文本模式下，\n 会被自动替换成 \r\n，这样写出来的文件长度就跟预料中的不一样了。 而在二进制模式下，会原封不动的写入,不会做改变。linux下没有这种问题.

user: user-0
content: 引用 2 楼 bravery36 的回复:FILE* new_stream = fopen("C://jsb.exe","w"); 改为 FILE* new_stream = fopen("C://jsb.exe","wb");  谢谢你，可以了。但是为什么 w不可以，要用 wb呢

user: user-2
content: FILE* new_stream = fopen("C://jsb.exe","w"); 改为 FILE* new_stream = fopen("C://jsb.exe","wb");

user: user-3
content: 比较一下新文件和源文件的大小，文件属性
user-0 提问: 关于extern的问题

回复:
user: user-1
content: 这种问题，搜索下关键字系统的了解下更好。 1,extern可以置于变量或者函数前，以标示变量或者函数的定义在别的文件中，提示编译器遇到此变量和函数时在其他模块中寻找其定义; 2,extern告诉链接器在链接的时候用C函数规范来链接（详细查阅，C/C++链接规范）

user: user-2
content: extern是引用别处定义的全局变量。这个extern的地方是声明，不是定义。定义应该在工程的某个地方，建议在头文件或者源文件里寻找这个全局变量。

user: user-3
content: 引用 2 楼 hou09tian 的回复:同意楼上所说的。 在C++中，声明使得变量名字为程序所知，一个文件如果想使用别处定义的变量则必须包含对那个变量的声明。而定义负责创建与变量相关的实体。如果想声明一个变量而非定义它，就在变量名前添加关键字extern，而且不要显示地初始化变量。  extern int i;//声明 int j;//声明  extern语句如果包含初始值就不再是声明，而变成定义了  extern double pi = 3.1416;//定义  所以，要看一下源代码中使用extern时有没有对其进行初始化，如果已经初始化，则该变量是定义；如果没有初始化，则说明只是对变量进行声明，那么肯定在程序的其它位置处对该变量进行定义，比如头文件或者库文件。但是如果是在dll库文件中定义该变量，那么应该对该变量声明为 extern _declspec(dllimport)。。。。 所以建议在包含所有程序源代码所在的文件夹下搜索这个变量，看看是不是在程序的其它文件中包含了这个变量的定义 笔误，这里应该是  extern int i;//声明 int j;//声明并定义

user: user-3
content: 同意楼上所说的。 在C++中，声明使得变量名字为程序所知，一个文件如果想使用别处定义的变量则必须包含对那个变量的声明。而定义负责创建与变量相关的实体。如果想声明一个变量而非定义它，就在变量名前添加关键字extern，而且不要显示地初始化变量。  extern int i;//声明 int j;//声明  extern语句如果包含初始值就不再是声明，而变成定义了  extern double pi = 3.1416;//定义  所以，要看一下源代码中使用extern时有没有对其进行初始化，如果已经初始化，则该变量是定义；如果没有初始化，则说明只是对变量进行声明，那么肯定在程序的其它位置处对该变量进行定义，比如头文件或者库文件。但是如果是在dll库文件中定义该变量，那么应该对该变量声明为 extern _declspec(dllimport)。。。。 所以建议在包含所有程序源代码所在的文件夹下搜索这个变量，看看是不是在程序的其它文件中包含了这个变量的定义

user: user-4
content: 如果extern声明变量同时给变量赋初值，认为该变量已经定义。 范例如下：  extern int var = 0;  //使用了var，且var有定义，编译成功 int main(void) {  var = 10;  return 0; }  除了这种情况，extern只是声明变量，如果要使用该变量，一定要在别的地方定义此变量。还是上面的例子：  extern int var ;  //使用了var，但var只声明未定义，编译失败 int main(void) {  var = 10;  return 0; }   对第三方库而言，.h文件暴露接口，真正的定义在.lib或者.dll文件中，这两类文件是二进制文件，所以找不到是正常的。  用心回答每个问题，如果对您有帮助，请采纳答案好吗，谢谢！
user-0 提问: C语言写的记事本可以实现另存为功能吗？

回复:
user: user-1
content: 调用 GetSaveFileName 让用户选择一个路径，然后写入到这个路径。

user: user-0
content: 如果要另存在其他路径下，怎么做？

user: user-2
content: 可以，另存为即用户提供新的保存文件名，将内存里的数据（记事本内容）写入新的文件即可。会有打开文件，写文件，关闭文件的一些操作。

user: user-0

user: user-3
content: 参考Notepad++源代码？

user: user-4
content: 另存为无非就是在新的目录下新建一个文件，然后把源文件的内容拷贝到新文件。 相关技术：C语言文件操作。fopen, fread, fwrite
user-0 提问: 求用stm32f103rb开发板写显示其cpu电压的代码

回复:
user: user-0
content: 您有代码吗？有的话可以给我发一个吗

user: user-1
content: CPU电压肯定是3.3V啊

user: user-0
content: 我搜了，没找到，所以来找大神帮忙。 您可以帮我找个嘛，谢谢了！

user: user-0
content: 望各路大神伸出援助之手！

user: user-2
content: 百度、必应、搜狐、……搜相关关键字。
user-0 提问: 知道函数的功能，那么函数参数该如何定义？

回复:
user: user-1
content: 引用 3 楼 g62r83t27 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 参考Google Protobuf源代码。 我只想问一个函数接口，你却让我看一个工程。。。。。。 使坏啊，赵老师[/quote] 斩草要除根！

user: user-2
content: 引用 4 楼 g62r83t27 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] 需要定义两个函数吧，一个是处理协议B的函数，一个是解析协议A的，解析协议B的函数由解析函数A的调用。 函数的传入参数，对于函数A，传递的是包含协议A和B的缓存数据，还有就是缓存数据的长度。函数B传入参数那应该是协议B数据开始的位置（地址）和数据的长度 B是被A包含的，我需要一个处理A的，把A 中的B分离出来，给DealB，把不属于B的A给DealA， 现在我要写的是SearchA(。。。。。。)，SearchA中不能调用DealA，也不能调用DealB，只能通过参数和返回值告诉你什么情况下调用DealA且传给DealA什么数据，和什么情况下调用DealB和传递给DealB什么数据。。。 [/quote] 那就通过searchA函数的返回值来确定是调用A还是调用B，通过参数的传出参数来确定buffer开始的多少个字节开始是A协议或者B协议开头； 如果还想知道B协议的长度，那么再用一个传出参数得到协议的长度。

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:需要定义两个函数吧，一个是处理协议B的函数，一个是解析协议A的，解析协议B的函数由解析函数A的调用。 函数的传入参数，对于函数A，传递的是包含协议A和B的缓存数据，还有就是缓存数据的长度。函数B传入参数那应该是协议B数据开始的位置（地址）和数据的长度 B是被A包含的，我需要一个处理A的，把A 中的B分离出来，给DealB，把不属于B的A给DealA， 现在我要写的是SearchA(。。。。。。)，SearchA中不能调用DealA，也不能调用DealB，只能通过参数和返回值告诉你什么情况下调用DealA且传给DealA什么数据，和什么情况下调用DealB和传递给DealB什么数据。。。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:参考Google Protobuf源代码。 我只想问一个函数接口，你却让我看一个工程。。。。。。 使坏啊，赵老师

user: user-2
content: 需要定义两个函数吧，一个是处理协议B的函数，一个是解析协议A的，解析协议B的函数由解析函数A的调用。 函数的传入参数，对于函数A，传递的是包含协议A和B的缓存数据，还有就是缓存数据的长度。函数B传入参数那应该是协议B数据开始的位置（地址）和数据的长度

user: user-1
content: 参考Google Protobuf源代码。
user-0 提问: 求每个选项解释一次和静态变量会怎样

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

user: user-2
content: 这个程序考察的是变量的声明周期： 全局变量,static静态变量，是在内存的数据段申请的空间，其生命周期是整个程序开始到程序的结束； 局部变量，即在函数内或语句体内定义的变量，其作用域函数或语句体内有效，其生命周期是函数的创建开始到函数调用结束； 另外，需要注意的是当局部变量名和全局变量名同名时，局部变量会屏蔽全局变量，即在函数内全局变量无效。

user: user-3
content: 这个是考变量作用域与优先级 1, 在fun中定义了k,  局部变量优先, 所以全局变量k被隐藏,就像没有一样. fun函数中全部都是使用的局部变量k 回到main中后, 仍然是全局变量k 2. fun 中使用的也是全局变量k,   这就不用解释了  3. 首先 fun中的k也是一个局部 变量,局部优先,所以在fun中仍然会隐藏掉全局的k.   只是它是static的,  在函数内部的static变量只被会定义一次, 以后的调用就使用的都是同一个, 不会像普通变量那样, 每次都重新分配. 比如第一个调用fun, k++后变成2, 第二次调用fun, 再k++就变成3了.   回到main中printf时, 跟1相同, 是使用全局的k  4. 跟2是一样的, 只是少了每次fun中初始化为1.

user: user-4
content: 2和4就是改变全局变量的值 3，static延长函数生命周期，自己查下他的作用，还有是怎么实现的

user: user-4
content: 1.一个函数执行时，从栈里分配局部变量的空间，函数执行结束时会回收栈里分配的空间。
user-0 提问: 数据存储问题

回复:
user: user-1
content: 出现乱码是正常的，因为x是int类型的，以fputc是按字节写入的，那么很有肯定是有乱码的。 建议改成fprintf(fp, "%d\n", x[i][j]);  void save(int(*x)[M]) {     FILE *fp;     printf("输入存放的文件名：");     char filename[10];     scanf("%s", filename);     if ((fp = fopen(filename, "w")) == NULL)     {             printf("无法打开此文件\n");             exit(0);         }     int i, j;     for (i = 0; i < N; i++)     {             for (j = 0; j < M; j++)             {                 fprintf(fp, "%d\n", x[i][j]);                     }         }     fclose(fp); }

user: user-0
content: 引用 1 楼 user-3 的回复:“w” 改成 “wt” fputc 改成 fprintf 谢谢，完成了， fprintf(fp,"%d",*(*(x + i) + j)); 			fputs("\n", fp);

user: user-2
content: 这里存的是数字1，2，3等对应的字符当然是乱码，不是存的的'1'，'2'

user: user-3
content: “w” 改成 “wt” fputc 改成 fprintf
user-0 提问: restrict 关键字 的作用

回复:
user: user-0
content: 明白啦～十分感谢上面的回复～受到帮助真是太感动啦~

user: user-1
content: restrict 只是告诉编译器，以便于优化  而并不是用于确保地址不重叠

user: user-2
content: restrict的定义是 ( restrict type qualifier )： During each execution of a block in which a restricted pointer P is declared (typically each execution of a function body in which P is a function parameter), if some object that is accessible through P (directly or indirectly) is modified, by any means, then all accesses to that object (both reads and writes) in that block must occur through P (directly or indirectly), otherwise the behavior is undefined.  也就是说，restrict是程序员告诉编译器额外的信息：在restric所修饰指针P所生存的作用域内，程序员保证只有指针P是指向P所指向的这片内存的，没有‘别人’可以修改这个指针指向的这片内存，所有修改都得通过这个指针来。这就有助于编译器优化代码，如果程序员违反这个约定，则行为时未定义的。  举个栗子  int fun(int *a, int *b) {     *a = 5;     *b = 6;     return *a + *b;    //不一定返回11 }  如果指针a和指针b指向同一个对象，*b = 6会导致 *a为6，返回12.所以编译器在做return *a + *b 的时候需要重新读取*a 的值。  fun:     movl $5,(%rdi)    #存储5到*a     movl $6,(%rsi)    #存储6到*b     movl (%rdi),%eax    #重新读取*a     addl $6,%eax      #加上6     ret  如果我们确保两个指针不会指向同一个对象，则可以使用restrict修饰指针变量  int rfun(int *restrict a, int *restrict b) {     *a = 5;     *b = 6;     return *a + *b;  }  编译器可以根据这个信息做优化  rfun:     movl $11,%eax   #在编译期就可以计算出11     movl $5,(%rdi)    #存储5到*a     movl $6,(%rsi)    #存储6到*b     ret  总而言之，restrict是为了告诉编译器指针独享指针所指向的内存，从而编译器能生成更优化的机器码。编译器是无法检测指针是否独享指针指向内存的，所以如果程序员使用restrict，那么程序员也需要遵守相应的契约保证才能得出正确的代码，否则，行为是未定义的。

user: user-2
content: restrict的定义是 ( restrict type qualifier )： During each execution of a block in which a restricted pointer P is declared (typically each execution of a function body in which P is a function parameter), if some object that is accessible through P (directly or indirectly) is modified, by any means, then all accesses to that object (both reads and writes) in that block must occur through P (directly or indirectly), otherwise the behavior is undefined.  也就是说，restrict是程序员告诉编译器额外的信息：在restric所修饰指针P所生存的作用域内，程序员保证只有指针P是指向P所指向的这片内存的，没有‘别人’可以修改这个指针指向的这片内存，所有修改都得通过这个指针来。这就有助于编译器优化代码，如果程序员违反这个约定，则行为时未定义的。  举个栗子  int fun(int *a, int *b) {     *a = 5;     *b = 6;     return *a + *b;    //不一定返回11 }  如果指针a和指针b指向同一个对象，*b = 6会导致 *a为6，返回12.所以编译器在做return *a + *b 的时候需要重新读取*a 的值。  fun:     movl $5,(%rdi)    #存储5到*a     movl $6,(%rsi)    #存储6到*b     movl (%rdi),%eax    #重新读取*a     addl $6,%eax      #加上6     ret  如果我们确保两个指针不会指向同一个对象，则可以使用restrict修饰指针变量  int rfun(int *restrict a, int *restrict b) {     *a = 5;     *b = 6;     return *a + *b;  }  编译器可以根据这个信息做优化  rfun:     movl $11,%eax   #在编译期就可以计算出11     movl $5,(%rdi)    #存储5到*a     movl $6,(%rsi)    #存储6到*b     ret  总而言之，restrict是为了告诉编译器指针独享指针所指向的内存，从而编译器能生成更优化的机器码。编译器是无法检测指针是否独享指针指向内存的，所以如果程序员使用restrict，那么程序员也需要遵守相应的契约保证才能得出正确的代码，否则，行为时未定义的。
user-0 提问: 明明文件已经建立了，为什么文件里什么内容都没有

回复:
user: user-1
content: 引用 2 楼 zuoside__lord 的回复:引用 1 楼 ipqtjmqj 的回复:用w会将原文件清空，可是我要写进去啊，不用w用什么， 用a,append

user: user-0
content: 引用 1 楼 ipqtjmqj 的回复:用w会将原文件清空，可是我要写进去啊，不用w用什么，

user: user-1
content: 用w会将原文件清空

user: user-2
content: 单步跟踪程序运行，检查是否执行到写操作，同时在fclose后再查看文件中的内容
user-0 提问: 怎么才能让第一行的“*”从1个开始  而不是2个

回复:
user: user-1
content: int main() {     int i,j;     for (i = 0; i < 10; i++) {         for (j = 0; j <=i ; j++) {             printf("*");         }         printf("\n");     } }

user: user-2
content: j <= i + 1  去掉 +1 或者去掉 = 都行

user: user-0
content: #include <stdio.h>  int main() {     int i,j;     for (i = 0; i < 10; i++) {         for (j = 0; j <= i + 1; j++) {             printf("*");         }         printf("\n");     } }
user-0 提问: 结构体内不同的变量要怎么输入？

回复:
user: user-1
content: %s并不是按逗号进行分割  你可以分成多个scanf，各输入间用回车分隔

user: user-2
content: 我的印象中输入时scanf是认空格和回车为数据分隔符的

user: user-2
content: 引用 2 楼 xian_wwq 的回复:输入字符串之间用空格分割, 可以实现scanf函数连续输入多个字符串。 例如：  char s1[100],s2[100],s3[100]; scanf("%s%s%s",s1,s2,s3);  如果输入it is bad回车，s1中将存放it, s2中存放is, s3中存放bad。   scanf("%d,%s,%s,%d",&p1->number,p1->name,p1->sex,&p1->age);   中的”,'最好去掉，否则输入的时候就要加上”,“ 如果要输入有空格的字符串该怎么写呢

user: user-3
content: 输入字符串之间用空格分割, 可以实现scanf函数连续输入多个字符串。 例如：  char s1[100],s2[100],s3[100]; scanf("%s%s%s",s1,s2,s3);  如果输入it is bad回车，s1中将存放it, s2中存放is, s3中存放bad。   scanf("%d,%s,%s,%d",&p1->number,p1->name,p1->sex,&p1->age);   中的”,'最好去掉，否则输入的时候就要加上”,“

user: user-4
content: 题目中的现象是正常的。 用%s，会将之后对应的输入都视为字符串接收。  解决办法是对四个成员分别输入：         printf("input number:\n"); 	scanf("%d", &p1->number); 	printf("input name:\n"); 	scanf("%s", p1->name); 	printf("input sex:\n"); 	scanf("%s", p1->sex); 	printf("input age:\n"); 	scanf("%d", &p1->age); 用心回答每个问题，如果对您有帮助，请采纳答案好吗，谢谢！
user-0 提问: 新手C语言入门，求助！

回复:
user: user-0
content: 虽然是个很简单的问题，却困扰了我一下午，谢谢！

user: user-1
content: char *q = (char*)malloc(strlen(s) - strlen(p) + 1);  //q分配了 5 - 3 + 1 = 3个字符 	int i; 	for (i = 0; i < strlen(s) - strlen(p); i++) {  //循环体中只处理了前2个字符 		printf("%d\n", i); 		q[i] = s[i]; 		printf("%c\n", q[i]);  	} 	q[i] = '\0';   //第3个字符需赋值为字符串结束符，否则q[3]是不确定值，就会出现题目中的现象 用心回答每个问题，如果对您有帮助，请采纳答案好吗，谢谢！
user-0 提问: 指针在子函数里面赋值为什么回到主函数又变回原来的值，求解答

回复:
user: user-1
content: 指针指向地址，不是赋值，地址不是值

user: user-2
content: 只是改变了形参的指向

user: user-3
content: 因为你的指针是按值传递的，函数中的形参只是实参的复制品，你在函数中修改的也只是一个复制品，不会影响外面的实参  如果要在函数中修改指针，需要传递指针的地址

user: user-4
content: 楼主可以利用指针写一个swap交换两个整数的函数，在main中：输出两个数，调用swap交换两个数，再输出两个数。 然后改写成交换两个指针变量的值，就容易理解为什么形参要用指针的指针了。

user: user-5
content: 你这个问题，是没考虑局部变量的作用域问题。局部变量，只在函数内存在，函数结束后就会消失。就是说你传进去一个地址，被调用函数中改变了这个地址，但是被调用函数结束后，这个地址是会消失的。所以，主函数中打印地址，肯定是不会改变的。另外，我感觉你有个指针的用法，你弄糊涂了。传递指针是为了在被调用函数中改变这个指针所指向的内容，这个指针的地址是没办法改变的。因为C语言的变元传递是值传递！传递指针说白了就是传递一个地址的值，但可以在被调用函数中改变这个指针所指向内容的值，而不是改变这个指针的指向！同时希望多交流，我也是C刚看完！QQ：1010256995。
user-0 提问: c语言基础问题。求指点

回复:
user: user-1
content: 我也想知道啊

user: user-0
content: 请你弄明白，我现在大一学习c语言，还没进入IT行业，这只是我碰到的一道题，还没到代码编程程度，更还没到面试什么的，请不要说那些话语，不想回答我没强迫你，我请教的是别人

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

user: user-3
content: 逗号运算符的使用，建议写个main函数，把这几条语句加进去测试一下。

user: user-4
content: 在C语言中，多个表达式可以用逗号分开，其中用逗号分开的表达式的值分别结算（从左向右计算），但整个表达式的值是最后一个表达式的值。

user: user-5
content: 考察的是逗号运算符和逗号表达式 逗号表达式的一般形式为 　 表达式1，表达式2 逗号表达式的求解过程是：先求解表达式1，再求解表达式2。整个逗号表达式的值是表达式2的值。 1. 6 2. 30 3. 12 4. 12

user: user-6
content: 这些奇技淫巧只适用于得瑟

user: user-7
content: 其实这些语法不用去深究，要弄懂调试一下就行了。 现实项目中用这些语法，我保证你会被打死！

user: user-8
content: 你这么写， 能过面试算我输。
user-0 提问: 初学C语言，这是什么意思呢。

回复:
user: user-1
content: malloc申请的是堆上的空间，堆上的空间是手动申请需要手动释放，否则会导致内存溢出（死循环操作，会导致内存空间逐步被申请完），和堆上的空间枯竭。堆上的内存都快用完了，颠倒怎么还能运行流畅呢

user: user-0
content: 引用 1 楼 wanggui2015的回复:无线循环申请内存，你的电脑应该会秒死机。。。 哇，突然觉得要是C语言没学好，好可怕啊，

user: user-2
content: 无线循环申请内存，你的电脑应该会秒死机。。。
user-0 提问: hash表的数组初始化问题

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:hash表数组中的元素是每个链表的头，即数组的个数就是链表的个数。通过hash的值先找到对应的链表头，然后再遍历链表找到对应的节点。 Hash的值应该是作为数组的索引吧，但是用链表实现的话，链表的地址不是分散的吗，那为什么可以做到O(1)的查找时间

user: user-1
content: 基础是数组， 数组的每一个元素是一个结构体，结构体里有链表

user: user-2
content: hash表数组中的元素是每个链表的头，即数组的个数就是链表的个数。通过hash的值先找到对应的链表头，然后再遍历链表找到对应的节点。

user: user-1
content: 因为hash会有碰撞，即几个不同的key用同样的hash算法 得到相同的 hash值。 用这个hash值当作数组索引，那么就出现了多对一的情况，所以相同hash值的元素用一条链表串起来， 当计算出hash值时，还要比较一下到底是哪一个key。  hash值得范围越大越浪费空间，但是多对一的情况就会越少， O(1) 只是理解值
user-0 提问: 求纠正翻译一段c语言的crc8算法

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

user: user-0
content: 注，所有数都为16位数值=？
user-0 提问: NotifyIME 什么时候被调用？

回复:
user: user-1
content: 换个别的开源输入法参考之？

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:那个 别的输入法可以打标点符号，就这个开源输入法的打不出来。有补丁呢？

user: user-1
content: 那个

user: user-1
content: 你哪个微软的PPT没准需要打最新的补丁。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:[quote=引用 4 楼 u012403370 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 换个输入法再试试。 我在开发输入法呢[/quote] 参考这方面的开源项目？[/quote] 嗯，用了开源项目。好像是在微软的PPT上打不上标点符号，我写了日志文件发现的。这个函数没什么反应。

user: user-1
content: 引用 4 楼 u012403370 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 换个输入法再试试。 我在开发输入法呢[/quote] 参考这方面的开源项目？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:换个输入法再试试。 我在开发输入法呢

user: user-0
content: 我在开发输入法呢

user: user-1
content: 换个输入法再试试。

user: user-0
content: 我的邮件箱是925397370@qq.com,有福利哟
user-0 提问: 函数返回值与参数指针的区别

回复:
user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数

user: user-2
content: 一个是值拷贝，一个是直接对指定变量地址操作。

user: user-3
content: 你那个extYcValue是不是在多个c文件里面定义了，你说的函数返回赋值和指针赋值结果不一样的情况，应该不可能会出现。你把完整代码贴出来看看

user: user-4
content: 引用 3 楼 paschen 的回复:b = function1(); 之后b的值也会变成-0.003698的  但是，把这条语句写去主函数里，而不是在全局范围 如果不写在main函数里，或者其他函数里，楼主肯定不会编译通过，更不用说结果不一样了。

user: user-4
content: 引用 6 楼 g62r83t27 的回复:这个函数返回值赋值，也只在特定文件里面赋值才会出问题，在有的文件里面不出问题。。。。  函数返回值获得函数的值和通过传入传出参数得到值都是一样的，是两种获得函数返回值的方式；  对于浮点数，要考虑它的精度问题。建议你使用int类型作为返回值和函数传出参数的类型，将a,b,c也定义成int类型，然后在看两种方式的结果是否一致。

user: user-0
content: 这个函数返回值赋值，也只在特定文件里面赋值才会出问题，在有的文件里面不出问题。。。。

user: user-5
content: 引用 4 楼 g62r83t27 的回复:[quote=引用 3 楼 paschen 的回复:] b = function1(); 之后b的值也会变成-0.003698的  但是，把这条语句写去主函数里，而不是在全局范围[/quote]  应该不会这样，你可以再看下生成的汇编代码

user: user-0
content: 引用 3 楼 paschen 的回复:b = function1(); 之后b的值也会变成-0.003698的  但是，把这条语句写去主函数里，而不是在全局范围

user: user-5
content: b = function1(); 之后b的值也会变成-0.003698的  但是，把这条语句写去主函数里，而不是在全局范围

user: user-0
content: 引用 1 楼 user-6 的回复:值是一样的，你是怎么看的结果 debug http://www.hanxinxin.com/pic/pic1.png http://www.hanxinxin.com/pic/pic2.png

user: user-6
content: 值是一样的，你是怎么看的结果

user: user-0
content: 引用 9 楼 qwqwqw408 的回复:你那个extYcValue是不是在多个c文件里面定义了，你说的函数返回赋值和指针赋值结果不一样的情况，应该不可能会出现。你把完整代码贴出来看看 代码无法贴出来，太多了，我只能大概描述我所能描述的东西  1， extYcValue属于extYcValue.c文件的的全局变量，其他地方无定义 2， aiDcAdGet为aiDcAd.c的实现函数，其他地方无同名函数的实现，两个.c文件，不在同一个目录里面  3， 其中，aiDcAd.c中也存在调用返回类型为float的函数，不过调用的是同文件里面的函数，这时候赋值正常。。
user-0 提问: C语言结构组问题，对指定字符和学号尾数进行比较

回复:
user: user-1
content: 不用拷贝，直接比较或者直接用strstr查看输入的尾号是不是学号的子串  #include <stdio.h> #include <string.h>  #define N 16  typedef struct {     char num[10];     int s; } STREC;  int fun(STREC a[],char studno[],int n ) {     //--ksstart（注释不能删除）—     //考生代码从此开始编写     //--ksend---     int i;      for (i = 0; i < n; i++) {         if (strstr(a[i].num, studno)) {             a[i].s += 10;             break;         }     }      return i; }  int main() {     STREC s[N] = { {"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},         {"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},         {"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},     {"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};     int i, n = 0;     n = fun(s, "001", N);     printf("%d\n",n);      for(i = 0; i < N; i++) {         printf("%s %4d\n",s[i].num,s[i].s);     }     printf("\n");      return 0; }

user: user-2
content: 用strcpy拷贝，strcmp比较

user: user-0
content: 怎么拷贝啊。。。。我只知道怎么拷贝一个字符不会写拷贝字符串。。。。

user: user-2
content: 你把学号尾部对应位数的字符串拷贝出来，然后跟指定字符串比较一下，如果相等就加分
user-0 提问: 形参为数组形式的函数该如何调用？

回复:
user: user-1
content: 数组名或指针均可,都代表一个地址

user: user-2
content: 传递对应元素类型的数组或者指针

user: user-3
content: int main(void) {     char src[] = "helloworld";     char dst[32];      copy_n(dst, src, 5);     puts(dst); }  按照对应的参数传递实参就可以了。

user: user-4
content: 是的，对应的是指针

user: user-5
content: 数组形参会退化成指针，传的也是指针。
user-0 提问: 有哪位大神知道怎么在freeradius中增加access-challenge?网上搜到的不行

回复:
user: user-1
content: 还不如说说具体你用什么编译环境，怎么编译不过的，编译出错提示信息是啥。

user: user-0
content: 你处理过freeradius的挑战应答吗，帮帮忙呗
user-0 提问: 请问有没有将C语言新标准C11的书籍或资料？推荐一下。

回复:
user: user-1
content: 李忠，标准C语言指南，电子工业出版社

user: user-2
content: http://baike.baidu.com/link?url=OPjBPDYyMClIhvwNcXkI1M4vzE0Qfwe88Nxd2N83DHsL2tJTIIhtf4PMotZ6aw8zDhe7pdqBm7p-fYD8B4Ix6K 网上应该比较多一些吧

user: user-3
content: http://en.cppreference.com/w/c

user: user-4
content: 网上搜一下C11概览就行,增加的基本都是高级功能,一般也用不到, 能用到也最好不用,因为没有移植性. 目前工作中是不会使用C11的,最新的gcc默认 使用-std=gnu11, c11版本还有许多bug和功能未完善

user: user-5
content: 个人觉得C11不如把C++当C用。
user-0 提问: How to configure Environment Modules as static way?

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:仅供参考：Load the math library, and print the cosine of 2.0:  #include <stdio.h> #include <dlfcn.h>  int main(int argc, char **argv) {     void *handle;     double (*cosine)(double);     char *error;      handle = dlopen ("libm.so", RTLD_LAZY);     if (!handle) {         fprintf (stderr, "%s\n", dlerror());         exit(1);     }      dlerror();    /* Clear any existing error */     *(void **) (&cosine) = dlsym(handle, "cos");     if ((error = dlerror()) != NULL)  {         fprintf (stderr, "%s\n", error);         exit(1);     }      printf ("%f\n", (*cosine)(2.0));     dlclose(handle);     return 0; }  If this program were in a file named "foo.c", you would build the program with the following command:   gcc -rdynamic -o foo foo.c -ldl   Libraries exporting _init() and _fini() will want to be compiled as follows, using bar.c as the example name:   gcc -shared -nostartfiles -o bar bar.c      您好，感谢您的回复。 这个软件是执行 configure 产生Makefile，然后make，make install 安装。 configure有很多option，我用了 --with-static，最后在 Makefile 中生成 一行 STATIC = -static。 到最后编译生成的 可执行程序，却仍然依赖 libtcl8,4.so，让人很费解。 搞了很多天了。 还是没有搞定。 有静态编译和安装过的Environment Modules的朋友可以指导下吗？

user: user-1
content: 仅供参考：Load the math library, and print the cosine of 2.0:  #include <stdio.h> #include <dlfcn.h>  int main(int argc, char **argv) {     void *handle;     double (*cosine)(double);     char *error;      handle = dlopen ("libm.so", RTLD_LAZY);     if (!handle) {         fprintf (stderr, "%s\n", dlerror());         exit(1);     }      dlerror();    /* Clear any existing error */     *(void **) (&cosine) = dlsym(handle, "cos");     if ((error = dlerror()) != NULL)  {         fprintf (stderr, "%s\n", error);         exit(1);     }      printf ("%f\n", (*cosine)(2.0));     dlclose(handle);     return 0; }  If this program were in a file named "foo.c", you would build the program with the following command:   gcc -rdynamic -o foo foo.c -ldl   Libraries exporting _init() and _fini() will want to be compiled as follows, using bar.c as the example name:   gcc -shared -nostartfiles -o bar bar.c

user: user-2
content: 这应该是linux内容了
user-0 提问: C语言视频教程

回复:
user: user-0
content: 谢谢7楼提供的网站

user: user-0
content: 慕课网上Linux C怎么学习方便？必须安装Linux操作系统吗？

user: user-1
content: http://c.biancheng.net/cpp/ http://www.51zxw.net/ http://blog.jobbole.com/category/c-cpp/ http://club.topsage.com/forum-121-1.html

user: user-0
content: 谢谢各位老师和长辈的回复！

user: user-2
content: 可以到慕课网去找，那里有免费的课程，老师都是各大院校的讲师，教授，很有用

user: user-3
content: 可以看一下C Primer plus这本书

user: user-4
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

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

user: user-0
content: 好的。谢谢赵老师
user-0 提问: 数组元素的地址

回复:
user: user-0
content: 不好意思。我最近忙于考试复习，没及时回复。另外，各位的答案对我很有帮助，尤其是赵老师的视频，解开了我的疑惑，而且让我对地址有更深的了解。谢谢各位。

user: user-1
content: 一个地址单元 与 一个字节 不是一码事

user: user-2
content: http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组

user: user-3
content: 书本上说的这个地址单元是不是没有说的很详细。但是对于int类型的数组，每个元素就是占4个字节的内存，内存是一个字节为单位的，既然是一个单元，那么这个单元就是4个字节。

user: user-4
content: 一楼正解，你要在意地址单元这个字眼，内存并不认识什么是地址单元，它只知道一个int类型的变量长度为4个字节，这个才是真理，其他都是浮云
user-0 提问: 请各位大哥们帮忙改一下错误，在这里感谢大家了

回复:
user: user-1
content: 函数里定义函数，这是那种语言支持的语法？看你的是C语言，怎么可以这么写？ typedef 重命名的名字呢？ 代码不好改，我看有多个main，你这个是多个程序还是一个程序？

user: user-2
content: 百度搜相关关键字。

user: user-0
content: 这是我们的作业，课程设计。是从别的地方找来的，自己学识太浅，表示解决不了。唉。希望有大神帮忙

user: user-3
content: 新手表示都看不懂，你是自学的么
user-0 提问: 关于C语言在linux下的标准输入问题

回复:
user: user-0
content: 好的,谢谢大家,大致懂了～

user: user-1
content: 为什么不 man 相关函数 呢？

user: user-2
content: http://en.cppreference.com/w/c/io/fscanf http://en.cppreference.com/w/c/io/gets

user: user-3
content: gets是遇到回车才会结束，中间可以有空格，tab等字符； scanf遇到回车结束，因为标准输入也是行缓冲，遇到回车就会把输入缓存里的数据刷到内存了。但是scanf输入时，刷到内存里的数据与gets不一样，若scanf遇到空格，会将空格之前的数据赋值给变量；
user-0 提问: C语言求助！急！const void*内存分配问题

回复:
user: user-1
content: 引用 4 楼 paranet 的回复:fun_fix:  main:  还是内存泄露    [quote=引用 2 楼 adlay 的回复:]  int func_fix(const void** data, unsigned int* len) {     int error;         *data=func(&len, &error);     return error; }  int main() {    const void* data = NULL;    func_fix(&data  .... } [/quote]  你发一个线程退出的图片如何说明有内存泄露呢?  有内存泄露你得着释放内存的地方是不是写错了.

user: user-2
content: 引用 4 楼 paranet 的回复:fun_fix:  main:  还是内存泄露    [quote=引用 2 楼 adlay 的回复:]   int func_fix(const void** data, unsigned int* len) {     int error;         *data=func(&len, &error);     return error; }  int main() {    const void* data = NULL;    func_fix(&data  .... } [/quote]  使用的时候去掉data前面的&,调用QTTSAutoGet时，也要去掉audio_len前的&

user: user-0
content: fun_fix:  main:  还是内存泄露    引用 2 楼 adlay 的回复: int func_fix(const void** data, unsigned int* len) {     int error;         *data=func(&len, &error);     return error; }  int main() {    const void* data = NULL;    func_fix(&data  .... }

user: user-3
content: int func_fix(const void** data, unsigned int* len) {     int error;         *data=func(len, &error);     return error; }  main中调用 const void* pData = NULL; unsigned int len; int error = func_fix(&pData, & len); ... if(pData)   free(pData);

user: user-1
content: int func_fix(const void** data, unsigned int* len) {     int error;         *data=func(&len, &error);     return error; }  int main() {    const void* data = NULL;    func_fix(&data  .... }

user: user-2
content: func是用于申请空间的吗？
user-0 提问: 代码问题

回复:
user: user-0
content: 可以说的具体一点么？因为流量、压力是需要用户设置的，所以这一串数据是说明已经设置好数据可以传输了么？后面的00 00 00是不是设置的数据值？

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

user: user-1
content: 字节值

user: user-0
content: #define	R1_Lenth		4			//串口1接收缓冲长度为4，  与泵通信

user: user-0
content: 这是单片机通过串口控制泵的开机、关机等

user: user-2
content: 同楼上，最好能给出具体问题。

user: user-3
content: 这是什么，有没有这个问题的背景？
user-0 提问: 求告知红色部分代码每行的详细解释  由于用来描述边框的一些字符不能出现在文章和标题中，已经删去那部分代码，可能导致程序不能运行

回复:
user: user-1
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。  console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309