Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 有大佬能逐行解释一下代码吗？完全看不懂呜呜

回复:
user: user-0
content: 引用 7 楼 qzjhjxj的回复:a[i]表示二维数组每行首地址 嗯知道了谢谢！

user: user-1
content: a[i]表示二维数组每行首地址

user: user-0
content: 请问一下，针对这个代码，对于二维数组a[i][j]，输出a[i]的意思就是输出这个二维数组的这一行吗？就是说二维数组可以写成一维数组？？

user: user-0
content: 非常感谢哦！

user: user-1
content: #include<stdio.h> #include<string.h> int main(int argc, char* argv[]) {     char s[100],a[10][10],b[10];     int i,j,k,len,flag;      gets(s);                //输入一字符串：good morning teacther     len=strlen(s);          //取得字符串的长度值      j=0;k=0;flag=0;         //初始化     for(i=0;i<len+1;i++)   //注意i<len+1        if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')//判断是否是字母，是就是单词，一个一个字符去判断           {             a[k][j]=s[i];        //把每个单词的每个字符记录到a[0][1]...a[0][10],一个单词一行.             j++;                 //good     a[0][0-10]             flag=1;              //morning  a[1][0-10]           }                      //teacther a[2][0-10]        else if(flag==0) //如果不是字母，判断是否是单词的头部                   continue;             else            //否则就是尾部                 {                    a[k][j]='\0'; //每个单词的结束符                    k++;          //进入下一个单词准备                    j=0;          //a[k][0]                    flag=0;       //标志复位                 }     /*上面这段代码执行完，数组a中的结果：a[10][10]={"good\0",                                                     "morning\0",                                                     "teacther\0"                                                                 }     */      for(i=0;i<k;i++) //输出字符串中的单词，一个单词一行         puts(a[i]);  //a[0][0]..... good                      //a[1][0]      morning                      //a[2][0]      teacther      strcpy(b,a[0]); //把a[0]数组中第一个单词拷贝到数组b中，作为比较单词长度的初始值     for(i=1;i<k;i++)         if(strlen(a[i])>strlen(b))//与数组a中其他单词比较长度            strcpy(b,a[i]); // 找到最长单词，放入b数组中      puts(b); //输出最长的单词   teacther      return 0; }

user: user-2
content: 你知道这是什么语言，你知道啥是头文件，你知道哪个是主函数，你知道哪个是数组，甚至你都知道数组有多大。 瞧，你不是“完全”看不懂，你已经懂好多了。 说谎的不是好孩纸。  所以， 要么你说清楚具体哪里不懂； 要么你回去看那些能看懂的，然后合起书，靠自己把那些看懂了的用自己的方式写出来，调试运行到满意。然后再回来看这个。

user: user-3
content: 不是引文字母， 是英文字母

user: user-3
content: #include<stdio.h> #include<string.h> void main() { char s[100],a[10][10],b[10]; int i,j,k,len,flag; gets(s);//输入字符串 len=strlen(s); //取字符串长度 j=0;k=0;flag=0; for(i=0;i<len+1;i++)   //逐个字符处理输入字符串 if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') //凡是引文字母，即认为此字符为单词一部分 { a[k][j]=s[i];   //单词的字符逐个存入二维数组a, 一共10个单词，每单词长不超过10个字符， 所以a[10][10] j++; flag=1;    //不是单词结尾 } else if(flag==0) //继续取下一个单词 continue; else  //一个单词结束保存 { a[k][j]='\0';  k++; j=0; flag=0;   } for(i=0;i<k;i++) puts(a[i]);   //输出得到的每个单词  strcpy(b,a[0]);//求最长单词 for(i=1;i<k;i++) //遍历每个单词 if(strlen(a[i])>strlen(b))  //每个单词和b里保存单词比较长度 strcpy(b,a[i]); //如果比b里单词长， 取代b里单词 puts(b);  //输出最长单词 }
user-0 提问: 我怎么把串口接到的数据， 2个字节16位二进制数（有符号）的直接转化成十进制数值显示出来，主要这个部分不会写，不知道怎么写。

回复:
user: user-1
content: 像楼主你自己写的那样先调整字节序，然后在调过序的数组上像二楼那样强转即可。

user: user-1
content: 像楼主你自己写的那样先调整字节序，然后在调过序的数组上像二楼那样强转即可。

user: user-2
content: 从你的示例数据看，负数是用补码表示的，所以没问题。

user: user-0
content: to movsd  ,请问你这个  正负 都是可以的是吧

user: user-3
content: 它这个就是定点小数格式，固定7位小数的浮点数放大128倍转化为16位整数存储

user: user-2
content: printf("%f\n",*(short *)(buf)/128.0f);

user: user-2
content: union FIXVALUE { 	struct 	{ 		uint8_t lowPart; 		uint8_t highPart; 	}; 	short value; };  union FIXVALUE fv; fv.lowPart=buf[0]; fv.highPart=buf[1]; printf("%f\n",fv.value/128.0f);
user-0 提问: 这个题目不会做，大家能帮忙吗

回复:
user: user-1
content: 供参考：#include <stdio.h> #define N 30  void average(int *p,int n); void max( int *p,int n); void sort(int *p,int n);  int main(int argc, char* argv[]) {     int t[N]={0};      printf("Input %d day temperature:",N);     for(int i=0;i<N;i++)         scanf("%d",&t[i]);      average(t,N);     max(t,N);     sort(t,N);      return 0; }   void average(int *p,int n) {     int sum=0;     for(int i=0;i<n;i++)         sum += p[i];     printf("average=%d\n",sum/n); }  void max(int *p,int n) {     int max = p[0],h=0;     for(int i=0;i<n;i++)        if(max<p[i]){max = p[i];h = i;}     printf("hight temperature:%d, is %d day.\n",max,h+1);  }  void sort(int *p,int n) {     int t,temp;     for(int i=0;i<n;i++){         for(int j=t=i;j<n;j++){             if(p[t]>p[j]){                    t = j;             }         }         if(t != i){            temp = p[t];            p[t] = p[i];            p[i] = temp;         }         printf("%d%c",p[i],(i<n-1?' ':'\n'));     }  }

user: user-0
content: 引用 4 楼 jaj2003的回复:提示一下吧. 第一个算函数平均值就是总数/30  第二个函数就是数组的遍历  第三个函数就是数组排序，方法很多，可以冒泡排序，插入排序，堆排序，随便网上找个复制代码就行 但是要调用就不会

user: user-2
content: 提示一下吧. 第一个算函数平均值就是总数/30  第二个函数就是数组的遍历  第三个函数就是数组排序，方法很多，可以冒泡排序，插入排序，堆排序，随便网上找个复制代码就行

user: user-2
content: 不过你们刚学函数，就让你们排序是不是要求高了点

user: user-0
content: 引用 1 楼 jaj2003的回复:这种最基本的题目都不会，证明还是一个小白啊 对呀，我是小白，你能帮帮我吗，如果这里不适合我，能告诉我那些软件会适合我，就是基础问题，问了会有人帮忙，不会嫌弃我是小白

user: user-2
content: 这种最基本的题目都不会，证明还是一个小白啊
user-0 提问: 求数据结构 C语言 舞伴配对问题程序代码

回复:
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-0 提问: 求大佬解答下大一学生的问题

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: 或者说你得清楚，p，q，还有next这些东西都是指针，都是地址，结点的地址。 代码中就没有常规的结构体变量，也就是你说的“结点”。

user: user-2
content: 你细看代码，p和q是在同一行声明的，类型一样，都是指针。 链表这种东西，它的结点是动态申请出来的，没有通常意义上的变量名，只能用指针指着它来使用。

user: user-0
content: 引用 1 楼 user-3的回复:q是指向一块新开辟内存空间的指针哦，你对链表的概念还没领会透彻。 在图书馆翻阅书籍已经弄懂了，谢谢回答

user: user-3
content: q是指向一块新开辟内存空间的指针哦，你对链表的概念还没领会透彻。
user-0 提问: c语言基础如梦

回复:
user: user-1
content: 供参考：#include "stdio.h" #include "math.h" int main(int argc, char* argv[]) {     int a[100][10],i,j,N,M,sum=0,str=0,l,q;      float b[100]={0},c[10]={0},p=0,f,s=0,k;      scanf("%d%d",&N,&M);      for(i=0;i<N;i++)         for(j=0;j<M;j++)             scanf("%d",&a[i][j]); //输入学生成绩      for(i=0;i<N;i++)     {         sum=0;         for(j=0;j<M;j++)    //for(j=0;j<M;i++)         {             sum += a[i][j];         }         b[i] = float(sum)/float(M);  //平均成绩         printf("%.1f ",b[i]);     }     printf("\n");          for(j=0;j<M;j++)     {         str=0;         for(i=0;i<N;i++)         {                          //scanf("%d",a[i][j]);             str+=a[i][j];         }         c[j] = float(str)/float(N);         printf("%.1f ",c[j]);     }     printf("\n");          k=float(a[0][0]);     for(i=0;i<N;i++)//for(i=1;i<M;i++)     {         for(j=0;j<M;j++)//for(j=0;j<N;j++)         {             if(a[i][j]>k)             {                 k=float(a[i][j]);                 l=i;                 q=j;             }         }     }     printf("%.1f %d %d",k,l+1,q+1);//printf("%.1f %d %d",k,l,q);                                 //break;     printf("\n");      for(i=0;i<N;i++)     {         s=s+b[i]*4;     }     f=s/float(N*M);     for(i=0;i<N;i++)     {         p = p+pow(b[i]-f,2);     }     p=p/float(N);     printf("%.1f\n",p);          return 0; }

user: user-0
content: 引用 4 楼 user-2的回复:调试吧，看看执行到哪行的时候弹出的段错误。 不会调试

user: user-2
content: 调试吧，看看执行到哪行的时候弹出的段错误。

user: user-0
content: 引用 2 楼 user-2的回复:子曾经曰过，要规避段错误，就得从心所欲不逾矩。 你是猴子派来的逗比吗？，大佬别装萌新了，帮我看看具体哪错了？怎么改？

user: user-2
content: 子曾经曰过，要规避段错误，就得从心所欲不逾矩。

user: user-2
content: 段错误就是越界嘛。  或者野指针，哦，不指针啊，那这句不算。
user-0 提问: 键入数组值，却显示乱码，为什么？？？

回复:
user: user-1
content: 乱码在哪里？

user: user-2
content: 或许是断点断着呢 或许是没敲回车 或许是此m非彼m 或许是显示的一个代码，运行的另一个代码 或许是我没吃早饭造成的

user: user-0
content: 第二张图错了，应该是这张。

user: user-0
content: 图二是我给m数组赋的值，图一是我逐语句调试中的自动窗口监视的内容，我给m数组赋值123456789之后，监视的窗口显示的是“？？”（红色的部分）
user-0 提问: C程序。救救孩子。

回复:
user: user-1
content: 引用 5 楼 user-2 的回复:嗯，我要是自己写，我也用宽字符，舒服。 但是这是我以前亲自感受过char数组的复杂麻烦的。 不感受一下印象不深啊。 用char数组至少还分gbk和utf8两种编码，麻烦。

user: user-2
content: 嗯，我要是自己写，我也用宽字符，舒服。 但是这是我以前亲自感受过char数组的复杂麻烦的。 不感受一下印象不深啊。

user: user-1
content: 操作汉字不用wchar_t用char数组太复杂且容易出错

user: user-1
content: 抄我的作业。不懂就在百度搜，边搜边理解学习。

user: user-1
content: 抄我的作业。不懂就在百度搜，边搜边理解学习。

user: user-0
content: 引用 6 楼 赵4老师的回复:[quote=引用 5 楼 user-2 的回复:]嗯，我要是自己写，我也用宽字符，舒服。 但是这是我以前亲自感受过char数组的复杂麻烦的。 不感受一下印象不深啊。 用char数组至少还分gbk和utf8两种编码，麻烦。[/quote] 老师我搞定了！谢谢您哦。

user: user-2
content: 你可以不必像四老师写得那么到位，你可以自己测试一下在你自己的平台上每个汉字的编码占用几个字节，然后自己写一个char数组版本的。
user-0 提问: 请问我这个代码哪错了，为什么输出的不对?

回复:
user: user-1
content: a[i]=b[i][j]这里a[i]要改成a[j].因为你现在计算的是j行的就低值.另外不知道你的行列是由i还是j表示,如果j是行.那你要改成a[j]=b[j][i]

user: user-2
content: 把代码贴出来让大家参考修改不好吗

user: user-0
content: 引用 1 楼 自信男孩的回复:*下面的第一行的循环后面缺少一个大括号呢，这个大括号要把紧接着第二个循环内也要扩在里面。根据自己的需求，看一下是否需要这么改 我加了但还是不对

user: user-3
content: *下面的第一行的循环后面缺少一个大括号呢，这个大括号要把紧接着第二个循环内也要扩在里面。根据自己的需求，看一下是否需要这么改
user-0 提问: 节点的知识

回复:
user: user-0
content: 引用 4 楼 赵4老师的回复:数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633 谢谢老师，明白了

user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: 先理清指针和链表

user: user-3
content: 楼主的意思就是尾插法创建链表吧；   xxx *create_link() {     xxx *tail, *head;      head = (xxx *)malloc(sizeof(xxx));     if (!head)         exit(0);     tail  = head;      while ()     {         p = (xxx *)malloc(sizeof(xxx));         scanf(xxx);         tail->next = p;         tail = p;     }     tail->next = NULL;      return head; } 供参考～

user: user-4
content: 你得先理清指针和结点的关系， 另外，这些概念来自哪里，哪里的旁边就有你需要的内容，以及其它。
user-0 提问: PAT 1025 反转链表 (25分)用C语言实现，请帮忙找找问题在哪里

回复:
user: user-0
content: 引用 8 楼 forever74 的回复:毕竟题目只规定了K不大于N，没说K是0咋办。  要不你排除一下？毕竟做过分母的。题目说K和N都是正整数，所以不是这个问题哦，现在发现哪里错了，是没有对多余的数据进行排除，输入数据里有可能有不存在于链表中的杂数据。还是谢谢你啦

user: user-0
content: 引用 7 楼 赵4老师 的回复:[quote=引用 6 楼 isunnyday 的回复:][quote=引用 5 楼 forever74的回复:]你的截图中的两个带圈的i难道没有透露一些信息？ 没有哦，点进去只说与答案不符，没有说哪里有误，也没有告诉我们测试数据具体是什么[/quote] 无非是在一些边界条件下你没满足呗。 比如： 空链表 只有一个节点的链表 99999个节点的链表 10​0000个节点的链表 …… [/quote]  引用 7 楼 赵4老师 的回复:[quote=引用 6 楼 isunnyday 的回复:][quote=引用 5 楼 forever74的回复:]你的截图中的两个带圈的i难道没有透露一些信息？ 没有哦，点进去只说与答案不符，没有说哪里有误，也没有告诉我们测试数据具体是什么[/quote] 无非是在一些边界条件下你没满足呗。 比如： 空链表 只有一个节点的链表 99999个节点的链表 10​0000个节点的链表 …… [/quote]现在知道哪里错了，没有对非链表的数据进行排除，输入数据里有可能存在多余的数据

user: user-0
content: 引用 5 楼 forever74的回复:你的截图中的两个带圈的i难道没有透露一些信息？ 没有哦，点进去只说与答案不符，没有说哪里有误，也没有告诉我们测试数据具体是什么

user: user-1
content: 你的截图中的两个带圈的i难道没有透露一些信息？

user: user-0
content: 有人看看么

user: user-1
content: 毕竟题目只规定了K不大于N，没说K是0咋办。  要不你排除一下？毕竟做过分母的。

user: user-2
content: 引用 6 楼 isunnyday 的回复:[quote=引用 5 楼 forever74的回复:]你的截图中的两个带圈的i难道没有透露一些信息？ 没有哦，点进去只说与答案不符，没有说哪里有误，也没有告诉我们测试数据具体是什么[/quote] 无非是在一些边界条件下你没满足呗。 比如： 空链表 只有一个节点的链表 99999个节点的链表 10​0000个节点的链表 ……

user: user-0
content: 引用 1 楼 赵4老师 的回复:数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633非常感谢教我用单链表排序的方法，我也去看看。另外，这个题目我是用结构体数组做的，能否帮忙检查上面的代码，谢谢呀

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
user-0 提问: 二维数组  c语言解决问题

回复:
user: user-1
content: int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};     int i, j, sum = 0;     for (i = 0; i < 3; i++)     {         for (j = 0; j < 4; j++)         {             if (a[i][j] % 2 == 0)             {                 sum += a[i][j];                 printf("%d, %d\n", i , j);             }         }     }     printf("%d\n", sum);
user-0 提问: 能给解释解释ch2为什么是D吗？

回复:
user: user-0
content: 那%c是输出字母吗？

user: user-1
content: ch2='A'+'6'-'3';      //  = 'A'+ 3个位置     = ABCD

user: user-2
content: 常用字符的ASCII码是要求记忆的。具体来说，大写、小写字母及数字都是连续的，所以这题一看就明白了

user: user-3
content: 格式化输出的原因，ch1是%d输出，是67吧，在字符映射表里面就是C，ch2是%c输出，所以就直接输出D了

user: user-3
content: 把ASCII码取出来，做对应的相加减，再对应回去，就能理解了，注意十进制和十六进制的转换
user-0 提问: 为什么少了注释的那句输出时就出错

回复:
user: user-1
content: 引用 4 楼 Aa_1z 的回复:[quote=引用 2 楼 xws245925587的回复:]假设你的水壶只能倒5杯水，你现在倒完了，你不加点水，怎么继续倒啊 为什么要重复申请啊，每次输入都要申请一次，我又没释放这个p[/quote]  瞧，关键在于提问，你早说了这句话，大家就知道了你不晓得什么是链表，才好针对性地回答。 先了解一下链表，了解了以后就知道，这些都是套路，不走这些套路的就不是链表了。

user: user-2
content: 你申请了一个内存节点,然后把它插入链表,然后把它改改又插入...最后所有节点都是同一个内存,所以数据全部相同.不用想也知道错了.

user: user-0
content: 引用 2 楼 xws245925587的回复:假设你的水壶只能倒5杯水，你现在倒完了，你不加点水，怎么继续倒啊 为什么要重复申请啊，每次输入都要申请一次，我又没释放这个p

user: user-3
content: 引用 2 楼 xws245925587 的回复:假设你的水壶只能倒5杯水，你现在倒完了，你不加点水，怎么继续倒啊 这相当于你要创建一个新的链表出来，你不得给他分配下内存呀

user: user-3
content: 假设你的水壶只能倒5杯水，你现在倒完了，你不加点水，怎么继续倒啊

user: user-4
content: 出什么错误？  创建链表，先申请节点，后插入链表中。
user-0 提问: 各位大佬大哥进来瞧瞧，帮小弟看一下作业呗

回复:
user: user-1
content: 嗯，书中才有黄金屋，大哥可没有。  左移1位就是乘2，左移n位就是乘2的n次方，左移n-1位就是乘2的n-1次方。 所以分子是2的n次方减1，分母是2的n-1次方。

user: user-0
content: 引用 1 楼 user-1的回复:printf("%d/%d\n",(1<<n)-1,1<<n-1); 我小白白一枚  (1<<n)-1,1<<n-1)这啥高端操作。。是左移吗？麻烦大哥解释一下

user: user-0
content: (1<<n)-1,1<<n-1  这是啥高端操作，是 我小白白一个

user: user-1
content: printf("%d/%d\n",(1<<n)-1,1<<n-1);
user-0 提问: 这个错误应该怎样修改

回复:
user: user-1
content: 另外你那两个for根本不是在排序。 排序的话，内层的循环条件一定会引用外层的循环变量。

user: user-0
content: 我是不是还需要写一个#include <memcopy.h>

user: user-2
content: 字符串的赋值，需要借助strcmp/memcpy，不能直接赋值。看一下你的name是不是直接赋值了  没看到你的结构体定义，可能还有其他类型是char []类型，是不是也直接赋值了？！
user-0 提问: 求助 同一个代码无法运行两次

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:就看while后边的分号，它刚才也不应该好使。 瞎了瞎了  谢谢!

user: user-1
content: #include <stdio.h> #include <stdlib.h>  typedef struct node {     int value;     struct node* next; }node;  int main(void) {      node* head = (node*)malloc(sizeof(node));     node* begin = head;     scanf_s("%d", &begin->value);     //while (begin->value != 0);     while (begin->value != 0)     {         begin->next = (node*)malloc(sizeof(node));         begin = begin->next;         scanf_s("%d", &begin->value);     }     begin->next = NULL;     begin = head;     while (begin != NULL) {         printf("%d", begin->value);         begin = begin->next;     }     return 0; } 供参考～

user: user-2
content: 就看while后边的分号，它刚才也不应该好使。
user-0 提问: C语言求助

回复:
user: user-0
content: 引用 2 楼 forever74的回复:你的i和输入的字母有啥关系？ for行末尾带分号意欲何为？ getchar竟然放在for上方，是一次就够的意思么？ 我那个i就是为了那个c+=25-2*i，其他两个的确错了啊，谢谢好人，

user: user-0
content: 引用 1 楼 智者知已应修善业的回复:2i是什么？2*i 改过来了，谢谢

user: user-1
content: 你的i和输入的字母有啥关系？ for行末尾带分号意欲何为？ getchar竟然放在for上方，是一次就够的意思么？

user: user-2
content: 2i是什么？2*i
user-0 提问: 大佬求解   出错了  但我不知道为啥错了

回复:
user: user-0
content: 谢谢  我参考你的建议  已经解决我的问题了   谢谢

user: user-1
content: 函数是void类型的返回值，因此不能用L去接收函数的返回值。

user: user-1
content: #include<stdio.h> #include<stdlib.h>  #define sizemax   50  //void SeqList_creat(SeqList *&L,int array[],int n); //void SeqList_Bulle(SeqList *&L,int n); //void SeqList_output(SeqList *&L,int n); typedef struct {     int date[sizemax];     int length; }SeqList;  void SeqList_creat(SeqList *&L,int array[],int n); void SeqList_Bulle(SeqList *&L,int n); void SeqList_output(SeqList *&L,int n);  int main(){     SeqList *L=NULL;     int a[]={3,7,2,10,1};     //int n=5;     int n=sizeof(a)/sizeof(a[0]);     if (n > sizemax)         n = sizemax;     //L=SeqList_creat(L,a[],n);   //这行错了 但我不知道啥原因   [Error] expected primary-expression before ']'     SeqList_creat(L, a, n);   //这行错了 但我不知道啥原因   [Error] expected primary-expression before ']'     printf("排序前：\n");     SeqList_output(L,n);      return 0; }  void SeqList_creat(SeqList *&L,int array[],int n) {     int i=0;      L=(SeqList*)malloc(sizeof(SeqList));     for(i=0;i<n;i++)     {         L->date[i] = array[i];     }     L->length=n; }  void SeqList_Bulle(SeqList *&L,int n) {     int i,j,temp=0;     for(i=0;i<n-1;i++)         for(j=0;j<n-i-1;j++)         {             if(L->date[j]<L->date[j+1])             {                 temp=L->date[j];                 L->date[j]=L->date[j+1];                 L->date[j+1]=temp;             }         }  }  void SeqList_output(SeqList *&L,int n) {     int i;     printf("this list:\n");     for(i=0;i<n;i++)     {         printf("%d ",L->date[i]);     }     putchar(10); } 供参考～  数组名是数组的首地址；
user-0 提问: 求求大神给我解答一下该怎么用回溯实现，脑回路卡死了想不出来！！！

回复:
user: user-1
content: #include <vector> #include <iostream>  void BackTrackSubArrays(std::vector<char> &vecTemp, size_t &nCount, size_t nTotal, size_t nBegin, const std::vector<char> &vecArray) {     if (vecTemp.size() == nTotal)     {         ++nCount;         return;     }      for (size_t i = nBegin; i < vecArray.size(); i++)     {         vecTemp.push_back(vecArray[i]);         BackTrackSubArrays(vecTemp, nCount, nTotal, i + 1, vecArray);         vecTemp.pop_back();     } }  void SubArrays(const std::vector<char> &vecArray) {     std::vector<char> vecTemp;     vecTemp.reserve(vecArray.size());     size_t nCount = 0;     for (size_t i = 0; i <= vecArray.size(); i++)     {         BackTrackSubArrays(vecTemp, nCount, i, 0, vecArray);         std::cout << "长度为" << i << "的子集有：" << nCount << "个" << std::endl;         nCount = 0;     } }  int main() {     SubArrays({ 'A','D','F','Z','K','L','O' }); //此处用到c++11的初始化语法，如果编译器不支持c++11，请自己构造std::vector<char>输入     return 0; } //长度为0的子集有：1个 //长度为1的子集有：7个 //长度为2的子集有：21个 //长度为3的子集有：35个 //长度为4的子集有：35个 //长度为5的子集有：21个 //长度为6的子集有：7个 //长度为7的子集有：1个 //

user: user-2
content: #include <vector> #include <iostream>  void BackTrackSubArrays(std::vector<char> &vecTemp, size_t &nCount, size_t nTotal, size_t nBegin, const std::vector<char> &vecArray) { 	if (vecTemp.size() == nTotal) 	{ 		++nCount; 		return; 	}  	for (size_t i = nBegin; i < vecArray.size(); i++) 	{ 		vecTemp.push_back(vecArray[i]); 		BackTrackSubArrays(vecTemp, nCount, nTotal, i + 1, vecArray); 		vecTemp.pop_back(); 	} }  void SubArrays(const std::vector<char> &vecArray) { 	std::vector<char> vecTemp; 	vecTemp.reserve(vecArray.size()); 	size_t nCount = 0; 	for (size_t i = 0; i <= vecArray.size(); i++) 	{ 		BackTrackSubArrays(vecTemp, nCount, i, 0, vecArray); 		std::cout << "长度为" << i << "的子集有:" << nCount << "个" << std::endl; 		nCount = 0; 	} }  int main() { 	SubArrays({ 'A','D','F','Z','K','L','O' }); //此处用到c++11的初始化语法，如果编译器不支持c++11，请自己构造std::vector<char>输入 	system("pause"); 	return 0; }
user-0 提问: 萌新路过

回复:
user: user-1
content: 引用 2 楼 再也不想做leader了！的回复:[quote=引用 1 楼 赵4老师的回复:]https://www.baidu.com/s?wd=DevC%E4%B8%8A%E5%86%99%E7%9A%84%E6%B8%B8%E6%88%8F%E5%8F%AF%E4%BB%A5%E5%9C%A8%E9%87%8C%E9%9D%A2%E6%B7%BB%E5%8A%A0%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90 人有多大胆，地有多大产。 填百度搜索框时，你敢啥都填，百度就敢啥都搜。  试了之后不行啊[/quote] 照搜索结果中一条试不行的话，就照下一条不一样的再试，直到行为止。

user: user-0
content: 引用 1 楼 赵4老师的回复:https://www.baidu.com/s?wd=DevC%E4%B8%8A%E5%86%99%E7%9A%84%E6%B8%B8%E6%88%8F%E5%8F%AF%E4%BB%A5%E5%9C%A8%E9%87%8C%E9%9D%A2%E6%B7%BB%E5%8A%A0%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90 人有多大胆，地有多大产。 填百度搜索框时，你敢啥都填，百度就敢啥都搜。  试了之后不行啊

user: user-1
content: https://www.baidu.com/s?wd=DevC%E4%B8%8A%E5%86%99%E7%9A%84%E6%B8%B8%E6%88%8F%E5%8F%AF%E4%BB%A5%E5%9C%A8%E9%87%8C%E9%9D%A2%E6%B7%BB%E5%8A%A0%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90 人有多大胆，地有多大产。 填百度搜索框时，你敢啥都填，百度就敢啥都搜。
user-0 提问: 关于指针的循环 小问题

回复:
user: user-1
content: A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价

user: user-2
content: 请参考《C++数组地址偏移》 希望能够帮到您！

user: user-0
content: 引用 6 楼 赵4老师 的回复:[quote=引用 5 楼 ctrigger 的回复:][quote=引用 4 楼 赵4老师 的回复:][quote=引用 3 楼 ctrigger 的回复:]两段代码的for循环都没结束标志，都是错的。 你觉得*p1不是结束标志？[/quote] 我说的是题主，不是说你的。你回答是正确的。[/quote] 题主的问题不是出在没结束标志，而是没显式初始化第5个元素后面第6个元素对应的内存中的值，即使不声明第6个元素，程序越界去读第6个元素以及后面各元素时，照样会读第6个元素以及后面各元素对应的内存中的值，至于什么时候能碰到恰巧有0值，那就不一定了。[/quote] 不好意思，给分点错人了 sry

user: user-0
content: 多谢各位解惑，总是忘记指针溢出，谢谢。

user: user-1
content: 引用 3 楼 ctrigger 的回复:两段代码的for循环都没结束标志，都是错的。 你觉得*p1不是结束标志？

user: user-3
content: 两段代码的for循环都没结束标志，都是错的。

user: user-1
content: #include <stdio.h> int main() {      int a1[6] = {1,2,3,4,5,0};     int* p1 = a1;     for (; *p1; p1++) {         printf("%d, 0x%p\n", *p1, p1);     }       char a2[6] = {'1','2','3','4','5','\0'};     char* p2 = a2;     for (; *p2; p2++) {         printf("%c, 0x%p\n", *p2, p2);     }      return 0; } //1, 0x0135FBE4 //2, 0x0135FBE8 //3, 0x0135FBEC //4, 0x0135FBF0 //5, 0x0135FBF4 //1, 0x0135FBFC //2, 0x0135FBFD //3, 0x0135FBFE //4, 0x0135FBFF //5, 0x0135FC00 //  其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-4
content: 第一段代码输出只是巧合 你已经越界了 两段代码都是错的 都没有0结尾  循环检查0没意义

user: user-5
content: 这不是小问题，溢出从来就不会是小问题哦。 对于用 *p 作为结束条件的，要让最后一个值为 0，以便结束循环 可以这样做： 第一个 int a[6] = {1,2,3,4,5,0} 第二个 char a[6] = {'1', '2', '3', '4', '5', '\0'}  还有，建议养成好习惯，指针用完后，给它赋值NULL 就是在代码最后加上一行 p = NULL    这样可以在很大程度是避免形成“野指针”

user: user-1
content: 引用 5 楼 ctrigger 的回复:[quote=引用 4 楼 赵4老师 的回复:][quote=引用 3 楼 ctrigger 的回复:]两段代码的for循环都没结束标志，都是错的。 你觉得*p1不是结束标志？[/quote] 我说的是题主，不是说你的。你回答是正确的。[/quote] 题主的问题不是出在没结束标志，而是没显式初始化第5个元素后面第6个元素对应的内存中的值，即使不声明第6个元素，程序越界去读第6个元素以及后面各元素时，照样会读第6个元素以及后面各元素对应的内存中的值，至于什么时候能碰到恰巧有0值，那就不一定了。

user: user-3
content: 引用 4 楼 赵4老师 的回复:[quote=引用 3 楼 ctrigger 的回复:]两段代码的for循环都没结束标志，都是错的。 你觉得*p1不是结束标志？[/quote] 我说的是题主，不是说你的。你回答是正确的。
user-0 提问: 用指针修改数组某一列

回复:
user: user-1
content: 你没有发现跟书上比起来你的括号有点窄么？ 没有把*括进来，就是事故原因。

user: user-2
content: 楼主的第二个循环用p=&a[0]是做什么？
user-0 提问: C语言程序:学生成绩管理系统

回复:
user: user-0
content: 引用 1 楼 user-1的回复:主要用到的是结构体、数组、排序这些知识点，你看菜单选项对应调用的函数就知道用到哪些知识点了 谢谢你哟，

user: user-1
content: 主要用到的是结构体、数组、排序这些知识点，你看菜单选项对应调用的函数就知道用到哪些知识点了
user-0 提问: C，求大佬教教！

回复:
user: user-1
content: 且不说题干中“再加上”怎么理解； 单说浮点数不能用==进行比较，这是一个常识性的不该犯的错误。  哪怕用 int r=sqrt(n); if(r*r==n)... 之类的也行啊。

user: user-2
content: 我是参考一楼写的小学生代码 #include<stdio.h> #include<math.h> #define N  999999 int main(){ 	int a; 	int i=0; 	for(i=0;i<N;i++) 	{ 			double m=sqrt(i+100); 	        double n=sqrt(i+168);         	if(m==(int)m)              if(n==(int)n) 	            printf("%d\n",i);	  	} 	 	return 0; }

user: user-2
content: 引用 1 楼 user-3 的回复:供参考  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h>  int isSquare(int n) {     double c = sqrt(n);     if (c == (int)c)         return 1;     else         return 0; }  int main() {     int i, n=9999;     for (i = 0; i < n; i++)     {         if (isSquare(i + 100) && isSquare(i + 168))             printf("%d\n", i);     }          	system("pause"); 	return 0; }     太棒了   解决了我思考的问题    if（c==（int）c）

user: user-3
content: 供参考  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h>  int isSquare(int n) {     double c = sqrt(n);     if (c == (int)c)         return 1;     else         return 0; }  int main() {     int i, n=9999;     for (i = 0; i < n; i++)     {         if (isSquare(i + 100) && isSquare(i + 168))             printf("%d\n", i);     }          	system("pause"); 	return 0; }
user-0 提问: C语言怎么打开、读和写文件

回复:
user: user-1
content: 为什么要选择C盘根目录这么敏感的地方呢？ 疑似权限不够。 找个别的盘符写着玩嘛。

user: user-2
content: 引用 2 楼 weixin_52907368 的回复:[quote=引用 1 楼 自信男孩的回复:]把scanf放到fopen和判断fp之后呢，另外scanf也有问题，改成这样： scanf("%s", c); 试试吧，  打开文件失败可能跟scanf有关系，先调换位置，测试一下，再改一下scanf测试一下。 已经把scanf写到fp的判断之后了，但是直接就出来create file failed了，直接结束程序[/quote] 改scanf呢？

user: user-3
content: 把谭浩强的书上的例子抄一遍，全会了。。

user: user-0
content: 引用 1 楼 自信男孩的回复:把scanf放到fopen和判断fp之后呢，另外scanf也有问题，改成这样： scanf("%s", c); 试试吧，  打开文件失败可能跟scanf有关系，先调换位置，测试一下，再改一下scanf测试一下。 已经把scanf写到fp的判断之后了，但是直接就出来create file failed了，直接结束程序

user: user-2
content: 把scanf放到fopen和判断fp之后呢，另外scanf也有问题，改成这样： scanf("%s", c); 试试吧，  打开文件失败可能跟scanf有关系，先调换位置，测试一下，再改一下scanf测试一下。
user-0 提问: 一道难题，求帮助！

回复:
user: user-0
content: 引用 1 楼 user-1的回复:作业还是自己完成好啊 但是是真不会呀，还要用四种方法。头都大了

user: user-1
content: 作业还是自己完成好啊
user-0 提问: c语言中不使用全局变量？

回复:
user: user-1
content: 传参，或者通过函数返回值得到。比如定义一个接口函数，用于获取模块内部的全局变量或者静态全局变量；

user: user-0
content: 模块内部的全局变量内部定义，内部使用，用来实现该模块功能的中间值吧。

user: user-0
content: 不好意思，忘记说了，用的stm32 单片机，ram有限，使用的lwoop框架，技术负责人说这样用的目的是方便他统一申请内存，不希望有全局变量或静态变量在编译的时候占用内存空间。

user: user-2
content: static 修饰的全局变量就是被限制在本文件的。
user-0 提问: c语言程序设计跪求大佬用c语言写

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：仅供参考： #include <stdio.h> #include <stdlib.h> #include <string.h>  int my_cmp(const void *a, const void *b) { 	char str1[10], str2[10]; 	sprintf(str1, "%d", *(int *)a); 	sprintf(str2, "%d", *(int *)b); 	return strcmp(str1, str2); }  int main(void) { 	FILE *fp; 	int a[20], n, i; 	 	/* 输入n的值 */ 	scanf("%d", &n); 	if(n > 20) 	{ 		printf("输入n <= 20\n"); 		return 1; 	} 	/* 输入n个整数 */ 	for(i = 0; i < n; i++) 	{ 		scanf("%d", &a[i]); 	} 	/* 快速排序 */ 	qsort(a, n, sizeof(int), my_cmp); 	/* 打开文件 */ 	fp = fopen("result.txt", "w"); 	if(fp == NULL) 	{ 		printf("打开文件失败\n"); 		return 1; 	} 	/* 输出结果 */ 	for(i = 0; i < n; i++) 	{ 		fprintf(fp, "%d", a[i]); 	} 	/* 关闭文件 */ 	fclose(fp); 	 	return 0; } 大一新生表示看的不是很懂[face]monkey2:019.png[/face][face]monkey2:019.png[/face]

user: user-1
content: 仅供参考： #include <stdio.h> #include <stdlib.h> #include <string.h>  int my_cmp(const void *a, const void *b) { 	char str1[10], str2[10]; 	sprintf(str1, "%d", *(int *)a); 	sprintf(str2, "%d", *(int *)b); 	return strcmp(str1, str2); }  int main(void) { 	FILE *fp; 	int a[20], n, i; 	 	/* 输入n的值 */ 	scanf("%d", &n); 	if(n > 20) 	{ 		printf("输入n <= 20\n"); 		return 1; 	} 	/* 输入n个整数 */ 	for(i = 0; i < n; i++) 	{ 		scanf("%d", &a[i]); 	} 	/* 快速排序 */ 	qsort(a, n, sizeof(int), my_cmp); 	/* 打开文件 */ 	fp = fopen("result.txt", "w"); 	if(fp == NULL) 	{ 		printf("打开文件失败\n"); 		return 1; 	} 	/* 输出结果 */ 	for(i = 0; i < n; i++) 	{ 		fprintf(fp, "%d", a[i]); 	} 	/* 关闭文件 */ 	fclose(fp); 	 	return 0; }
user-0 提问: 计算边长是1到20时的正方形的周长，直到周长大于50为止

回复:
user: user-1
content: 不会输出的，只会在外面循环

user: user-2
content: 不会输出，写在外面c=80

user: user-3
content: 如果if语句写到for循环外面，for循环执行完，c = 4 * 20 = 80;这时c<=50不成立，当然没有输出了啊

user: user-0
content: 大佬们救救孩子吧
user-0 提问: vs code无法搜索中文的问题

回复:
user: user-1
content: 首选项->设置   搜索file.encoding  将语言设置成工作区主要语言即可。类似楼主这样的可以设置成GB 2312 即可。

user: user-2
content: 遇到了，目前还不知道怎么解决，烦。

user: user-3
content: 搜索默认使用的应该是utf-8，你的编辑是gb2312  "files.autoGuessEncoding"应该对应的是后者  前面的可以查下怎么改，改不了的话可以把所有文件改成utf-8编码（点一下右下角的gb2312，保存为utf-8）

user: user-0
content: 能指导一下吗？你这话讲的跟没讲一样唉😔

user: user-4
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
user-0 提问: 有没有类似memcpy的功能但是是复制数组指定位置开始的n个长度数据到另一个数组的方法

回复:
user: user-1
content: 引用 3 楼 MOVELASER 的回复:[quote=引用 1 楼 user-3 的回复:]你说的不就是memcpy吗  那就用memcpy完事了 memcpy只能拷贝起始位置开始吧，我需要非起始位置[/quote]谁说非起始位置，指针移动不就行了，memcpy(a , b+1);//从b+1字节开始拷贝

user: user-1
content: 引用 4 楼 MOVELASER 的回复:引用 2 楼 yiyefangzhou24 的回复:strcpy((char *) , (char *));您好，非字符数组强制转换然后，strncpy

user: user-2
content: int a[10]; int b[4]; memcpy((void *)&b[0],(void *)&a[3],4*sizeof(int));//将a[3],a[4],a[5],a[6]分别赋值给b[0],b[1],b[2],b[3]

user: user-3
content: 引用 3 楼 MOVELASER 的回复:[quote=引用 1 楼 user-3 的回复:]你说的不就是memcpy吗  那就用memcpy完事了 memcpy只能拷贝起始位置开始吧，我需要非起始位置[/quote]memcpy(desc, src+10, 20);

user: user-0
content: 引用 2 楼 yiyefangzhou24 的回复:strcpy((char *) , (char *));您好，非字符数组

user: user-0
content: 引用 1 楼 user-3 的回复:你说的不就是memcpy吗  那就用memcpy完事了 memcpy只能拷贝起始位置开始吧，我需要非起始位置

user: user-1
content: strcpy((char *) , (char *));

user: user-3
content: 你说的不就是memcpy吗  那就用memcpy完事了
user-0 提问: c语言输出问题

回复:
user: user-1
content: 分了三次scnaf，多半有你输入格式的问题

user: user-0
content: 引用 3 楼 user-2的回复:[quote=引用 2 楼 sytth 的回复:]帮我输入结果一下，我一直输出0.0 想让别人帮你一个字母一个字母敲？？？[/quote] 分了三次scanf，弄好了，

user: user-2
content: 引用 2 楼 sytth 的回复:帮我输入结果一下，我一直输出0.0 想让别人帮你一个字母一个字母敲？？？

user: user-0
content: 帮我输入结果一下，我一直输出0.0

user: user-1
content: 1.sum没有初始化，建议float sum = 0.0; 2.scanf输入的时候，去掉q->name前面的&符号 3.sum/=5;还是建议改成sum/=5.0
user-0 提问: 结构体，链表输出不对

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: #include<stdio.h> #include <stdlib.h> #include<malloc.h>  struct Employee {     int num;     float pay;     struct Employee* next; };  struct Employee* creat() {     struct Employee* head, * p1, * p2;     int n=0;     p1 = p2 = (struct Employee*)malloc(sizeof(struct Employee));     if (!p1)         exit(0);     head = NULL;     //scanf("%d%f", &p1->num, &p2->pay);     scanf("%d%f", &p1->num, &p1->pay);     while (p1->num != 0)     {         n = n + 1;         if (n == 1)             head = p1;         else             p2->next = p1;         p2 = p1;         p1 = (struct Employee*)malloc(sizeof(struct Employee));         if (!p1)             exit(0);         //scanf("%d%f", &p1->num, &p2->pay);         scanf("%d%f", &p1->num, &p1->pay);     }     p2->next = NULL;     free(p1);   //最后一个p1没有链入链表里，释放掉;      return(head);              //返回链表中第一个节点得起始地址 } void list(struct Employee* head) {     struct Employee* p;     p = head;     printf("The linked list:\n");     if(head!=NULL)         do         {             printf("%d,%.2f\n", p->num, p->pay);             p = p->next;         } while (p != NULL); }  int main() {     struct Employee* head;     head = creat();     list(head);     return 0; } 供参考～  对比一下，找一下自己的问题～

user: user-0
content: 引用 楼主 AruNi° ഒ 的回复:如图，为什么第一行没有了，却把0 0也输出来了？？？  #include<stdio.h> #include<malloc.h> struct Employee { 	int num; 	float pay; 	struct Employee* next; }; struct Employee* creat() { 	struct Employee* head, * p1, * p2; 	int n=0; 	p1 = p2 = (struct Employee*)malloc(sizeof(struct Employee)); 	head = NULL; 	scanf("%d%f", &p1->num, &p2->pay); 	while (p1->num != 0) 	{ 		n = n + 1; 		if (n == 1) 			head = p1; 		else 			p2->next = p1; 		p2 = p1; 		p1 = (struct Employee*)malloc(sizeof(struct Employee)); 		scanf("%d%f", &p1->num, &p2->pay); 	} 	p2->next = NULL; 	return(head);              //返回链表中第一个节点得起始地址 } void list(struct Employee* head) { 	struct Employee* p; 	p = head; 	printf("The linked list:\n"); 	if(head!=NULL) 		do  		{ 			printf("%d,%.2f\n", p->num, p->pay); 			p = p->next; 		} while (p != NULL); } int main() { 	struct Employee* head; 	head = creat(); 	list(head); 	return 0; }

user: user-0
content: 引用 2 楼 自信男孩的回复:贴源码吧～不建议贴图片～ 好的👌🏻

user: user-0
content: 引用 1 楼 user-3的回复:遍历链表为咐用do...while呢 一般都是这样：  while(p->next != NULL) {     printf("%d, %f", p->num, p->pay);     p=p->next; }  问题出在哪啊？像你这样改了也不对，直接没有第一个职工的工资了。

user: user-2
content: 贴源码吧～不建议贴图片～

user: user-3
content: 遍历链表为咐用do...while呢 一般都是这样：  while(p->next != NULL) {     printf("%d, %f", p->num, p->pay);     p=p->next; }
user-0 提问: 圈叉棋设计，替换字符出现问题（大佬救命）

回复:
user: user-0
content: 引用 4 楼 曲九合的回复:问一下，这个是手机c语言编译器吧，软件叫什么名字啊？在哪里可以下载到？谢谢 C语言编译器IDE，在手机的应用市场里就有

user: user-0
content: 引用 4 楼 曲九合的回复:问一下，这个是手机c语言编译器吧，软件叫什么名字啊？在哪里可以下载到？谢谢 全称为 C语言编译器IDE  ，华为手机应用市场里就有的

user: user-1
content: 问一下，这个是手机c语言编译器吧，软件叫什么名字啊？在哪里可以下载到？谢谢

user: user-0
content: 引用 2 楼 user-2的回复:   a[i][j]='O';//79; 谢谢大佬，我就是缓冲字符这一块出了问题

user: user-2
content: a[i][j]='O';//79;

user: user-2
content: 供参考：#include <stdio.h> int main(int argc, char* argv[]) {     //char a[3][3]={49,50,51,52,53,54,55,56,57},n;     char a[3][3]={'1','2','3','4','5','6','7','8','9'},n;//这样定义是否更清晰     int x,m,i,j;     m=2;     for(x=0;x<10;x++)     {         m++;         printf(" %c  :  %c   : %c\n",a[0][0],a[0][1],a[0][2]);         printf("--- + --- + ---\n");         printf(" %c  :  %c   : %c\n",a[1][0],a[1][1],a[1][2]);         printf("--- + --- + ---\n");         printf(" %c  :  %c   : %c\n",a[2][0],a[2][1],a[2][2]);         printf("--- + --- + ---\n");         printf("1-9代表九宫格中的位置，请输入1-9落子\n");         scanf("%c",&n);         getchar(); //吃掉缓冲区多余字符         for(i=0;i<3;i++)         {             for(j=0;j<3;j++)             {                 if(a[i][j]==n && m%2==0)                 {                     a[i][j]='X'; //88；这样定义是否更清晰                 }                 if(a[i][j]==n && m%2!=0)                 {                     a[i][j]='0';//79;                 }                 else                 {                     continue;                 }             }         }     }     return 0; }
user-0 提问: 问题：
s[j++]=a[i];与s[++j]=a[i];的区别

回复:
user: user-1
content: ++j 是先加再用j的值 j++ 是先用j的值再加1

user: user-2
content: 楼主理解正确，答案选A。A答案的执行顺序就是s[j]=s[i];j+1; 。如果是s[++j]=a[i]，执行顺序是j+1;s[j]=s[i]; 。规则就这么定的。
user-0 提问: 各位大佬，帮忙看看呗

回复:
user: user-0
content: 谢谢你，谢谢你

user: user-1
content: 第三题  #include <stdio.h>  int CheckPhoneNum(char *num) {     char *p = num;     int len = 0;     while (*(p++) != '\0')     {         len++;     }     for (int i = len - 1; i > len - 5; i--)     {         if (num[i] >= '0' && num[i] <= '9')         {             continue;         }         else         {             return 1;         }     }     if (num[len - 5] != '-')     {         printf("num[%d] is not -\n",len-5);         return 1;     }     for (int i = len - 6; i > len - 9; i--)     {         if (num[i] >= '0' && num[i] <= '9')         {             continue;         }         else         {             printf("前缀num[%d] %d is not number\n",i,num[i]);             return 1;         }     }     if (num[len - 8] == '0')     {         printf("num[%d] is not -\n",len-5);         return 1;     }     int sum = 0;     for (int i = 0; i < len - 9; i++)     {         sum += num[i] - '0';     }     if (sum == 0)     {         if (num[len - 9] == '-')         {             printf("num[%d] is -\n",len-9);             return 1;         }     }     else     {         if (num[len - 9] != '-')         {             printf("num[%d] is not -\n",len-5);             return 1;         }     }     return 0; }  int main(void) {     char num[15];     scanf("%s", num);     if (CheckPhoneNum(num) == 0)     {         printf("%s符合规定\n", num);     }     else     {         printf("%s不符合规定\n", num);     }      return 0; }

user: user-1
content: 第二题 #include <stdio.h> int judge(int a[], int n, int *cd) {     if (n < 3)         return -1;     int i, j, tmp;     for (i = 0; i < n; i++)     {         for (j = i + 1; j < n; j++)         {             if (a[i] > a[j])             {                 tmp = a[i];                 a[i] = a[j];                 a[j] = tmp;             }         }     }     *cd = a[1] - a[0];     for (i = 0; i < n - 1; i++)     {         if (*cd != (a[i + 1] - a[i]))         {             *cd = 0;             return 1;         }     }     return 0; }  int main(void) {     int a[50] = {0};     int n, cd;     scanf("%d", &n);     for (int i = 0; i < n; i++)     {         scanf("%d", &a[i]);     }     if (judge(a, n, &cd) == 0)     {         printf("%d", cd);     }     return 0; }

user: user-1
content: 第一题  #include <stdio.h> int isprime(int n) {     int i;     if (n < 2)         return 0;     for (i = 2; i < n; i++)     {         if (n % 2 == 0)         {             return 0;         }     }     return 1; }  int resolve(int n) {     int i;     for (i = 2; i < n; i++)     {         if (isprime(i) && isprime(n - i))         {             return i;         }     }     return 0; }  int main(void) {     int n, m;     int res;     scanf("%d %d", &n, &m);     for (int i = n; i <= m; i++)     {         res = resolve(i);         if (res != 0)         {             printf("%d=%d+%d\n", i, res, i - res);         }     }     return 0; }
user-0 提问: 怎么搞定字符串变量之间的比较大小，赋值问题

回复:
user: user-1
content: 引用 3 楼 weixin_52907368 的回复:[quote=引用 1 楼 user-2的回复:]visit是什么类型？ 从while(visit[j]!=‘\0’)可以判断visit是个char数组，那么visit[j]就是char类型，所以不符合strcmp的参数类型 因为你的代码不全，不知道你想干啥，单纯为了修改代码 strcmp(x,visit[j])可以改成strcmp(x,&visit[j])//visit[j]是char类型&visit[j]就是char*类型，才符号strcmp的参数类型 visit[j]=x可以改成strcpy(&visit[j], x)//要用字符串拷贝的方式 谢谢，明白了，我就是想知道这个strcmp和strcpy怎么用[/quote]  网上有很多这样的例子，建议楼主先看一下这两个函数的原型，以便了解应该传什么参数进去

user: user-0
content: 引用 1 楼 user-2的回复:visit是什么类型？ 从while(visit[j]!=‘\0’)可以判断visit是个char数组，那么visit[j]就是char类型，所以不符合strcmp的参数类型 因为你的代码不全，不知道你想干啥，单纯为了修改代码 strcmp(x,visit[j])可以改成strcmp(x,&visit[j])//visit[j]是char类型&visit[j]就是char*类型，才符号strcmp的参数类型 visit[j]=x可以改成strcpy(&visit[j], x)//要用字符串拷贝的方式 谢谢，明白了，我就是想知道这个strcmp和strcpy怎么用

user: user-2
content: visit是什么类型？ 从while(visit[j]!=‘\0’)可以判断visit是个char数组，那么visit[j]就是char类型，所以不符合strcmp的参数类型 因为你的代码不全，不知道你想干啥，单纯为了修改代码 strcmp(x,visit[j])可以改成strcmp(x,&visit[j])//visit[j]是char类型&visit[j]就是char*类型，才符号strcmp的参数类型 visit[j]=x可以改成strcpy(&visit[j], x)//要用字符串拷贝的方式

user: user-1
content: strcmp(&x, &visit[i]) 这样试试～
user-0 提问: 小白求教

回复:
user: user-0
content: 引用 12 楼 forever74的回复:其实你编译时的最后一条警告C6279已经指出了这个问题，可是你忽略了。 其实我是有看到的，只不过不知道是括号的形式错了，总之感谢大佬的指正

user: user-1
content: str2=new char[i+4];  if(!fp1) {   printf(...);   return; }

user: user-1
content: 其实你编译时的最后一条警告C6279已经指出了这个问题，可是你忽略了。

user: user-0
content: 引用 9 楼 forever74的回复:你写的是圆括号啊老大 new char(i+4)是申请1个字节的空间并用 i+4的值进行初始化的意思 对不起，看到了，已经改正了，谢谢大佬，我太傻了，基本格式都打错了

user: user-0
content: 引用 9 楼 forever74的回复:你写的是圆括号啊老大 new char(i+4)是申请1个字节的空间并用 i+4的值进行初始化的意思 那要如何解决呢，大佬，这个难题困扰我很久了

user: user-1
content: 你写的是圆括号啊老大 new char(i+4)是申请1个字节的空间并用 i+4的值进行初始化的意思

user: user-0
content: 引用 6 楼 forever74的回复:我说的是编译警告， 你说的是运行时弹出的对话框啊。  那不是好像，就是你使用的内存范围超出了new申请的 造成的。 你关注过那个方括号了么？ 我试着申请了更大内存，依然会报错

user: user-0
content: 确实关注了，但仍不知如何解决

user: user-1
content: 我说的是编译警告， 你说的是运行时弹出的对话框啊。  那不是好像，就是你使用的内存范围超出了new申请的 造成的。 你关注过那个方括号了么？

user: user-0
content: 引用 1 楼 forever74的回复:str2=new char[i+4];  if(!fp1) {   printf(...);   return; } 好像是动态分配内存出了问题

user: user-0
content: 引用 2 楼 自信男孩的回复:当文件打开失败后，就不要考虑向后继续执行了。 我加了返回值，还是报错，运行不出来，好像是动态分配内存的问题

user: user-0
content: 引用 1 楼 forever74的回复:str2=new char[i+4];  if(!fp1) {   printf(...);   return; } 我加上了返回值，但是还是会报错

user: user-2
content: 当文件打开失败后，就不要考虑向后继续执行了。
user-0 提问: 严蔚敏 数据结构 算法4.2 有个地方不明白呀 为什么是S1[0]?

回复:
user: user-1
content: 从楼主画红线的位置可以感觉到， 当时楼主忐忑的心情，不安地猜测着，一个字符串为什么会与两个整数相加呢？  下雨天留客天留我不留？

user: user-2
content: s[0]存放的是他的长度  引用 3 楼 C2S2D2Nshishabi 的回复:引用 1 楼 真相重于对错 的回复:S1[0]是第一个串的长度，T的第1个字符到第S[0]个字符，被赋予了S1的数据，所以T[S1[0]+S[2]] 放置S2的数据还是有点不明白，T的第1个字符到第S[0]个字符，被赋予了S1的数据，所以T[S1[0]+S[2]] 放置S2的数据，如果这么说的话，为什么前面还要加个S1[0]呀，S1[0]不是放在了第一个串长的后面了吗？不应该是先1...S1[0]，再S1[0]吗？

user: user-1
content: 很久没见过这么奇葩的脑洞了。 用C的风格说，这里的..是优先级最低的省略号，两边的加号都比它的优先级高，你得先去理解两边的加号，然后把各自的和作为省略号的上下限，OK？

user: user-0
content: 引用 1 楼 真相重于对错 的回复:S1[0]是第一个串的长度，T的第1个字符到第S[0]个字符，被赋予了S1的数据，所以T[S1[0]+S[2]] 放置S2的数据还是有点不明白，T的第1个字符到第S[0]个字符，被赋予了S1的数据，所以T[S1[0]+S[2]] 放置S2的数据，如果这么说的话，为什么前面还要加个S1[0]呀，S1[0]不是放在了第一个串长的后面了吗？不应该是先1...S1[0]，再S1[0]吗？

user: user-2
content: 比如S1 = 3"ABC"  S2=4"1234" 那么红线上一句话执行完后 T=？"ABC" 然后从S1[0]+1 开始 ，也就是4到 S[0]+S2[0] ,也就是7，这4个位置，放置”1234“

user: user-2
content: S1[0]是第一个串的长度，T的第1个字符到第S[0]个字符，被赋予了S1的数据，所以T[S1[0]+S[2]] 放置S2的数据
user-0 提问: 求助

回复:
user: user-1
content: -先考虑--b == d++  因为前置--所以b的值为8（9-1） d的++为后置，所以对比的时候d还是8 所以成立 当比较完后d自增变成9  然后9赋值给a 然后再次自增变成10

user: user-2
content: 后缀++是先使用再变量自增1 --b计算得8，d++先使用d，所以8==8成立，然后d变为9，因为8==8成立，所以执行a=d++，先使用d，所以a=9，然后d变为10，所以最终a是9
user-0 提问: 萌新求教

回复:
user: user-1
content: while循环出大问题啦。	int n, i = 1, sum = 0; 	scanf("%d", &n); 	while (i <= n) 	{ 		if (n % i == 0) 		{ 			sum = sum + 1; 		} 		i++; 	} 	printf("%d\n", sum); 仅供参考
user-0 提问: 看看为啥不对

回复:
user: user-1
content: 大约是你执行输入函数的时候输入的格式不对，所以那些scanf都失败了。

user: user-0
content: 不知道哪里错了

user: user-2
content: 第28行输出中 printf("%d %s %s %d %d\n",          cla[i].num, cla[i].name, cla[i].teacher, cla[i].term, cla[i].person);，老师的名字是字符串输出，所以结构体里应该改为：struct Class{        int   num;        char  name[10];        char  teacher[10];//老师名字是字符串        int   term;        int   person; };

user: user-3
content: teacher应该定义成字符数组吧，看到input函数里用的是%s，如果还用字符，那么这儿的%s就会导致越界，因为%s要接收字符，至少要2个字符，因为'\0'也占一个字符。  同样的道理print里用%s输出了teacher  所以，建议楼主把teacher定义成字符数组，比如char teacher[32];  定义数组长度建议定义成2的n次幂的大小，这个n根据你的预判数组长度决定。
user-0 提问: 大锅们，请问为什总是vs提醒我第一个else应输入一个语句，可是下面不是有吗

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

user: user-2
content: 下面这句多了‘：’号引用if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));

user: user-3
content: 它上方的if行末尾多余分号， 死记硬背之。
user-0 提问: 衣食父母们，来了来了！！！

回复:
user: user-1
content: x=m*i+a=n*j+b n*j=m*i+(a-b); j=(m*i+(a-b))/n; 循环i，找到(m*i+(a-b))%n==0即可，如果i超出int范围（变成负数）说明无解

user: user-0
content: 就是想看看你们有没有更简洁的方法

user: user-2
content: 不知道你在说啥
user-0 提问: 小白求解

回复:
user: user-1
content: 纯粹因为就那么不超过10行代码，索性给你写了。 建议这种问题LZ还是自己先写一下，有问题再问。 int f(int a, int b) {     return a>b ? 1 : (a<b ? -1 : 0); } int main() {     int a, b;     scanf("%d%d", &a, &b);     printf("%d", f(a, b));     return 0; }

user: user-2
content: void func(int a, int b) {     if (a > b)         printf("1\n");     else if(a < b)         printf("-1\n");     else         printf("0"); }
user-0 提问: C语言余数

回复:
user: user-0
content: 引用 5 楼 ctrigger 的回复:[quote=引用 4 楼 mswpp 的回复:]因为你的有错呀，哈哈哈哈 眼睛瞪大一点，都是对的。[/quote]我说的不是你的，哈哈哈哈

user: user-1
content: 引用 4 楼 mswpp 的回复:因为你的有错呀，哈哈哈哈 眼睛瞪大一点，都是对的。

user: user-0
content: 因为你的有错呀，哈哈哈哈

user: user-1
content: 简单粗暴，仅供参考：#include <stdio.h>   int main(void) {     unsigned int a, b, m, n, x;     scanf("%d%d%d%d", &m, &n, &a, &b);          x = 1;     while(x)     {         if ((x % m == a) && (x % n == b))         {             printf("有解：x=%u", x);             return 0;         }         x++;     }          printf("无解");          return 1; }

user: user-2
content: 不是告诉你思路了吗？ x=m*i+a=n*j+b 推出 n*j=m*i+(a-b) 推出 j=(m*i+(a-b))/n 因为 i 和 j 是整数，所以(m*i+(a-b))必须能被n整除才能保证 j 是整数 所以，i从0一直循环到整数的最大值，看看能否有满足条件的 i，找到 i 就是有解，否则就是无解  int mian() {     int a,b,m,n,i;     scanf("%d%d%d%d", &m, &n, &a, &b);     for (i=0; ; i++) {         if (i<0) {             printf("无解");             break; //i越界变成负数说明无解         }         else if ((m*i+a-b)%n == 0) {             printf("有解：x=%d", m*i+a);             break;         }     }     return 0; }
user-0 提问: 用*号打印实型心形图案

回复:
user: user-1
content: #include <conio.h> #include <stdlib.h> int main() {     system("chcp 437");     cprintf("\3\3\3\3\3\3\3\3\3");     return 0; }

user: user-2
content: 写的好！ 接下来考虑写短一些吧。
user-0 提问: PAT 1020 月饼 (25分) 用C语言实现，请帮忙找找问题在哪里

回复:
user: user-0
content: 引用 3 楼 user-1的回复:for(j=i+1;... 确实是这里错了，我之前看了好久都没有看出来，当局者迷呀，改后就全部运行成功了，非常感谢^_^

user: user-1
content: for(j=i+1;...

user: user-0
content: 引用 1 楼 user-1的回复:排序的两个for就写的不对，仔细一下。 检查了几遍，也没有发现哪里错了呢，帮忙看下哦，谢谢

user: user-1
content: 排序的两个for就写的不对，仔细一下。
user-0 提问: C语言文件操作代码

回复:
user: user-1
content: 引用 2 楼 m0_46788383 的回复:[quote=引用 1 楼 自信男孩的回复:]自己先写写吧，不是很难的需求～ 是真的不会写唉[/quote] 那就找找原因，为什么写不出来。一句都写不出来，还是懒得去写。起码框架之类的，对的写不出来，错误的也能写出来吧  不尝试怎么知道，尝试了写不对这是两码事

user: user-0
content: 引用 1 楼 自信男孩的回复:自己先写写吧，不是很难的需求～ 是真的不会写唉

user: user-1
content: 自己先写写吧，不是很难的需求～
user-0 提问: 求大神解决 为什么我的vs2019写的C语言代码打开文件后在屏幕或者记事本显示都是一排方框

回复:
user: user-1
content: 写代码，给你几点建议 1. 一定要做错误检查，不要怕麻烦。 err,  err1的返回值 都正确么  2. 代码一定要简单易懂。 ( (ch = getc(fp) != '#')   --->>>( ( ch = getc(fp) )  != '#' )  3. 要学会写调试代码，确定故障发生的原因。 例如， 发生错误时， 是文件打开错误， 还是读取字符的错误，还是文件写入的错误  4.感觉想乱码，看看官网的函数使用方法吧。 你输入文件的内容是英文还是中文，估计是中文吧， 先用英文试试，如果好用。在试试中文。 怎么感觉putc 函数的问题。 VC的函数不熟。 ]https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-s-wfopen-s?view=msvc-160

user: user-0
content: 引用 1 楼 往事如烟0819 的回复：写代码，给你几点建议 1. 一定要做错误检查，不要怕麻烦。 err,  err1的返回值 都正确么  2. 代码一定要简单易懂。 ( (ch = getc(fp) != '#')   --->>>( ( ch = getc(fp) )  != '#' )  3. 要学会写调试代码，确定故障发生的原因。 例如， 发生错误时， 是文件打开错误， 还是读取字符的错误，还是文件写入的错误  4.感觉想乱码，看看官网的函数使用方法吧。 你输入文件的内容是英文还是中文，估计是中文吧， 先用英文试试，如果好用。在试试中文。 怎么感觉putc 函数的问题。 VC的函数不熟。 ]https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-s-wfopen-s?view=msvc-160我改好了 多谢提点  向你学习大佬 你给的建议很nice

user: user-2
content: 我也是这个问题，你解决了吗？

user: user-0
content: 引用 1 楼 往事如烟0819 的回复：写代码，给你几点建议 1. 一定要做错误检查，不要怕麻烦。 err,  err1的返回值 都正确么  2. 代码一定要简单易懂。 ( (ch = getc(fp) != '#')   --->>>( ( ch = getc(fp) )  != '#' )  3. 要学会写调试代码，确定故障发生的原因。 例如， 发生错误时， 是文件打开错误， 还是读取字符的错误，还是文件写入的错误  4.感觉想乱码，看看官网的函数使用方法吧。 你输入文件的内容是英文还是中文，估计是中文吧， 先用英文试试，如果好用。在试试中文。 怎么感觉putc 函数的问题。 VC的函数不熟。 ]https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-s-wfopen-s?view=msvc-160大佬我这个运行没啥问题 就是生成的txt文件用记事本打开时显示是一串方框 我把输出流转到屏幕显示也是一串方框  这是为啥啊 求解

user: user-0
content: 引用 1 楼 往事如烟0819 的回复：写代码，给你几点建议 1. 一定要做错误检查，不要怕麻烦。 err,  err1的返回值 都正确么  2. 代码一定要简单易懂。 ( (ch = getc(fp) != '#')   --->>>( ( ch = getc(fp) )  != '#' )  3. 要学会写调试代码，确定故障发生的原因。 例如， 发生错误时， 是文件打开错误， 还是读取字符的错误，还是文件写入的错误  4.感觉想乱码，看看官网的函数使用方法吧。 你输入文件的内容是英文还是中文，估计是中文吧， 先用英文试试，如果好用。在试试中文。 怎么感觉putc 函数的问题。 VC的函数不熟。 ]https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-s-wfopen-s?view=msvc-160大佬 这个运行上都没有问题 最后也直接生成了写入的txt文件 就是文件里的英文语句显示出来是一串方框
user-0 提问: 问题（指针基础）：字符串复制函数返回复制后字符串首地址值,无法打印该字符串

回复:
user: user-0
content: 谢谢楼上的各位，问题解决了！！！

user: user-1
content: 1. s3 指向的地址空间 h3[100], 没有被初始化。  重点  局部变量，数组， 必须在使用前，进行初始化。 原因 局部变量的初始值不定, 很危险。(从栈空间分配， 其值为上次别人剩下的值)

user: user-2
content: #include<stdio.h> char *strcopy(char *t,const char *s) {     char *temp = t;     while(*temp++=*s++);//temp s 中记录的地址值是在增加变化     return t; //返回的地址值是字符串首地址不变的  }  int main(int argc, char* argv[]) {      char h1[100],h2[100],h3[100];     char *s1,*s2,*s3;     s1=h1;     s2=h2;     s3=h3; // 这里 s3 -> h3[100]的地址     scanf("%s",s2);     s3=strcopy(s1,s2);//这里 s3 -> s1的地址，即h1[100]的地址。     printf("%s\n",s3);     return 0;  } //程序执行完，h1[100]和h2[100]的内容一致，h3[100]并没有变化。

user: user-2
content: 楼主，程序修改下，是否更容易让你理解，指针只是记录地址的一个变量。#include<stdio.h> char *strcopy(char *t,const char *s) {     char *temp = t;     while(*temp++=*s++);     return t;  }  int main(int argc, char* argv[]) {      char h1[100],h2[100],h3[100];     char *s1,*s2,*s3;     s1=h1;     s2=h2;     s3=h3;     scanf("%s",s2);     s3=strcopy(s1,s2);     printf("%s\n",s3);     return 0;  }

user: user-3
content: 是啊，你return的那个t已经漂移了好远。  很契合 刻舟求剑 哦。

user: user-4
content: char *strcopy(char *t,const char *s) {     while(*t++=*s++);     return t;//这里的t已经指向了传进来数据的尾部了  }
user-0 提问:  请教一下前辈们这里类型转换的问题

回复:
user: user-0
content: 感谢各位老师，冬至快乐

user: user-1
content: 为了不引起对齐错误也就是总线错误，要么费心计算需要多少填充字节，要么像这样粗鲁地转换成32位或64位（依系统而定）。

user: user-1
content: 栈这种东西我们喜欢比喻为子弹夹。 照你的想法，弹夹里面可以7.62mm和5mm还有12mm的混合还不出啥问题？  尽管指针尤其是void指针可以以字节为单位移动，但是混压不同尺寸的数据很容易引起总线错误啊。

user: user-2
content: 去掉你认为多余的转换，看编译是否报错，编译如果不报错的话，用-2147483648,2147483647,0,-1,1作为数据，运行测试一下看结果是否如你所愿。
user-0 提问: free指针时报错

回复:
user: user-1
content: 如果你不想再申请内存空间 那就没有必要malloc和free。 你直接用fvalue的地址空间就好 。 对吧；

user: user-2
content: 请时刻牢记free和malloc一定是成对出现的，没有用malloc，就不要用free

user: user-1
content: 你是想要把f_value的内容赋值给fp(malloc分配的空间吧) int main(int argc, char **argv) { 	float f_value[] = { 1,2,3,4,5 }; 	float *fp=NULL; 	 	fp = (float *)malloc(30 * sizeof(float)); 	if ( fp != NULL ) 	{ 		memcpy(fp, &f_value[0],  sizeof( f_value) ); 	} 	else 	{ 		/* Error process......	*/ 	} 	 	free(fp); 	return 0; 	 }

user: user-0
content: 感谢！。。。f_value如果是传参怎么办？ int Dll_Start(float *f_value) { 	 	float *fp = NULL; 	//fp = (float *)malloc(30 * sizeof(float)); 	fp = f_value;  	free(fp); 	return 0; }

user: user-3
content: 那不能先free再赋值么?

user: user-4
content: f_value改成动态数组，也用malloc申请内存就可以 数组内存是固定的，在栈里，函数结束栈退出后会自动被回收，所以你自己不能free栈里的内存。 动态分配内存是在堆上的，跟栈没关系，栈退出也不会自动回收，所以才需要自己去free。

user: user-5
content: free只能释放malloc开辟的内存，f_value是栈变量，不用free

user: user-4
content: fp=f_value不是不可以，那你就没必要free了。 理由上面已经说过了，f_value是栈内存，栈退出会自动回收，不能自己free。 也就是说你的dll_start函数内部不需要管理free，因为dll_start不知道参数的指针是指向栈内存还是堆内存，所以没必要去强制free。free应该由内存申请的者去自己控制，dll_start不需要越俎代庖。

user: user-0
content: 引用 5 楼 往事如烟0819 的回复:你是想要把f_value的内容赋值给fp(malloc分配的空间吧) int main(int argc, char **argv) { 	float f_value[] = { 1,2,3,4,5 }; 	float *fp=NULL; 	 	fp = (float *)malloc(30 * sizeof(float)); 	if ( fp != NULL ) 	{ 		memcpy(fp, &f_value[0],  sizeof( f_value) ); 	} 	else 	{ 		/* Error process......	*/ 	} 	 	free(fp); 	return 0; 	 }  感谢。。。这里只能用memcpy？？我尝试过，这个有点慢，实际应用中，我的数据量有点大，就没有直接fp = f_value;的办法吗？

user: user-0
content: 引用 6 楼 chxchxkkk 的回复:请时刻牢记free和malloc一定是成对出现的，没有用malloc，就不要用free 谢谢，我知道，我的意思是即使用了malloc，也会报错。这里。
user-0 提问: 有没有人能够看一下我这段代码出现了什么问题？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:修改如下，供参考：void account(int a) {     printf("\nname 用户\n");     printf("please input the account:\n");     char ch[] = { 'l','o','g','i','n','_','v','i','s','i','o','n','1','.','0','.','3' };     char b[17];     int i = 0;     int t = 0;     while (i < 17 && t == 0)     {         scanf_s("%c", &b[i]);         if (b[i] == '\n')         {             t = 1;         }         i++;     }     i = 0;     t = -1;     while (i < 17)     {         if (ch[i] == b[i])         {            i++;         }         else         {            t++;            i = 0;            //account(t);            break;         }     }      if (i != 17)         account(t);     else         password(1); } 运行出来是正确的，谢谢啦

user: user-0
content: 我看一下，再编译一次，看有没有问题，谢谢啦。

user: user-1
content: 修改如下，供参考：void account(int a) {     printf("\nname 用户\n");     printf("please input the account:\n");     char ch[] = { 'l','o','g','i','n','_','v','i','s','i','o','n','1','.','0','.','3' };     char b[17];     int i = 0;     int t = 0;     while (i < 17 && t == 0)     {         scanf_s("%c", &b[i]);         if (b[i] == '\n')         {             t = 1;         }         i++;     }     i = 0;     t = -1;     while (i < 17)     {         if (ch[i] == b[i])         {            i++;         }         else         {            t++;            i = 0;            //account(t);            break;         }     }      if (i != 17)         account(t);     else         password(1); }