Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 不知道要怎么做，希望大佬给个答案，我再来学习学习。

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: Linux：    <Ctrl+D>  Windows：    <Enter>、<Ctrl+Z>、<Enter>

user: user-3
content: 前来观摩观摩

user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-4
content: # include <stdio.h>  # define N 5  void woo (int a []) {     static int g = 0;      if (g ++ < N) scanf ("%d", a), woo (a + 1);     else return;      printf ("%d ", * a); }  int main (void) {     woo ((int [N]){0}); //需要使用支持C99的编译器 }

user: user-5
content: #include <stdio.h>  #define N 250  int main (void) {     int a [N], * p = a;      while (p < a + N && scanf ("%d", p++) == 1)         ;     p--;     while (--p >= a) printf ("%d ", * p); } 供参考～  终止输入，LINUX用ctrl +d，Windows下用ctrl+z

user: user-0
content: 引用 6 楼 均陵鼠侠的回复:# include <stdio.h>  # define N 5  int main (void) {     int a [N], * p = a;     while (p < a + N) scanf ("%d", p ++);     while (-- p >= a) printf ("%d ", * p); } 额，编译错误。。

user: user-6
content: 1 2 3 -2 -6^Z -6 -2 3 2 1 请按任意键继续. . .

user: user-4
content: # include <stdio.h>  # define N 5  int main (void) {     int a [N], * p = a;     while (p < a + N) scanf ("%d", p ++);     while (-- p >= a) printf ("%d ", * p); }

user: user-6
content: 输入完数字后，想退出，按下CTRL键+Z键，再按回车。

user: user-0
content: 引用 3 楼 user-6的回复:[quote=引用 2 楼 m0_53683570 的回复:][quote=引用 1 楼 user-6的回复:]供参考：#include<stdio.h> #define N 50  int main() {      int a[N],*p=a,i=0;      while(scanf("%d",&a[i++])!=EOF && i<N);//ctrl+z 结束输入      for(p=p+i-2;p>=a;p--)          printf("%d ",*p);      printf("\n");            return 0; } 为什么一直显示格式错误，我应该没打错[/quote]格式错误，应该是语法上有错误。左上角复制代码，粘贴到编译器里看看。[/quote] 编译器里面为什么输入完数字后换行他没有输出?是没退出循环吗？。。不知道为什么退不出来，

user: user-6
content: 引用 2 楼 m0_53683570 的回复:[quote=引用 1 楼 user-6的回复:]供参考：#include<stdio.h> #define N 50  int main() {      int a[N],*p=a,i=0;      while(scanf("%d",&a[i++])!=EOF && i<N);//ctrl+z 结束输入      for(p=p+i-2;p>=a;p--)          printf("%d ",*p);      printf("\n");            return 0; } 为什么一直显示格式错误，我应该没打错[/quote]格式错误，应该是语法上有错误。左上角复制代码，粘贴到编译器里看看。

user: user-0
content: 引用 1 楼 user-6的回复:供参考：#include<stdio.h> #define N 50  int main() {      int a[N],*p=a,i=0;      while(scanf("%d",&a[i++])!=EOF && i<N);//ctrl+z 结束输入      for(p=p+i-2;p>=a;p--)          printf("%d ",*p);      printf("\n");            return 0; } 为什么一直显示格式错误，我应该没打错

user: user-6
content: 供参考：#include<stdio.h> #define N 50  int main() {      int a[N],*p=a,i=0;      while(scanf("%d",&a[i++])!=EOF && i<N);//ctrl+z 结束输入      for(p=p+i-2;p>=a;p--)          printf("%d ",*p);      printf("\n");            return 0; }
user-0 提问: 遇到难题了，没一点想法，希望大佬帮忙看看

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: fgets，读取一行，遇到回车返回。  也可以用循环判断'\n'字符；  while ((ch = getchar()) != '\n')     ;

user: user-3
content: 供参考：#include<stdio.h> int main() {     int n=0,m=0;     while(scanf("%d%d",&n,&m)!=EOF && (getchar()!='\n'));//输入ctrl+z 或 回车 结束输入     printf("n=%d,m=%d\n",n,m);          return 0; }
user-0 提问: c 关于union结构指针内存释放问题

回复:
user: user-0
content: 我先以为不可能是double free的，一直以为是corruption (out)， 最后用gdb一点一点调试才发现是double free的问题。 3楼说的对，申请内存http的内存后，email也指向的http的内存，所以不为NULL了，造成了double free.

user: user-1
content: struct a{ ... union { int *x; double *y; } temp; } haha,*pp=&haha; ... pp->temp.x=malloc(sizeof(int)*100); //correct using of x // pp->x=... ;  // incorrect using of x ... free(pp->temp.x);

user: user-2
content: 引用 1 楼 自信男孩 的回复:两次释放了，看到是double free了。     union {         struct http_context *http;         struct email_context *email;         //TODO ftp smb     }; 这样定义，没有名字，你怎么访问http和email呢？ 你是不是对email已经释放一次了？http和email共用空间，你把申请的空间放在http中，其实email放的是相同的内容。

user: user-3
content: 你是不是其他地方有free(tuple->email)啊？

user: user-2
content: 两次释放了，看到是double free了。     union {         struct http_context *http;         struct email_context *email;         //TODO ftp smb     }; 这样定义，没有名字，你怎么访问http和email呢？
user-0 提问: 如何在外部中断while(1)循环？

回复:
user: user-1
content: 按Ctrl+Break键

user: user-2
content: 你的这个函数是在while(1)里吗？如果是可以考虑满足条件时，break出； 如果不在while(1)里，那么就需要其他线程（进程）里调用这个函数，可以考虑写一个变量值，在while(1)判断某个变量值break；出～
user-0 提问: 刚学指针，还不怎么会用，希望大佬帮帮忙，我运行时输入后没有输出，希望大佬能告诉我为什么?给个正确答案更好

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 3 楼 m0_53683570 的回复:我写的程序为什么退不出来，能解释一下吗？不是输入换行就会退出吗？ scanf的返回值不会等于'\n'，看一下scanf的返回值你就知道了：  return the number of input items successfully matched and assigned, which can be fewer than provided for, or even        zero in the event of an early matching failure. return the number of input items successfully matched and assigned, which can be fewer than provided for, or even        zero in the event of an early matching failure. 这是scanf返回值的描述，可以参考一下～

user: user-0
content: 我写的程序为什么退不出来，能解释一下吗？不是输入换行就会退出吗？

user: user-2
content: 引用 1 楼 自信男孩 的回复:没有输出的原因是还没有从while循环中退出来，即while是当=='\n'时退出；  修改一下  #include <stdio.h>  #define MAX_ARR_SIZE    (50) int main(void) {     int array[MAX_ARR_SIZE], *p;      int i = 0;      while (i < MAX_ARR_SIZE && scanf("%d", &array[i++]) == 1)         ;      p = array + i - 2;      for (; p >= array; p--)         printf("%d\n", *p);      return 0; } 供参考～  #include <stdio.h>  #define MAX_ARR_SIZE    (50) int main(void) {     int array[MAX_ARR_SIZE], *p;      int i = 0;      p = array;     while (p < array + MAX_ARR_SIZE && scanf("%d", p++) == 1)         ;      //p = array + i - 2;      for (p = p - 2; p >= array; p--)         printf("%d\n", *p);      return 0; } 供参考～ 终止输入的方式Linux用ctrl+d，Windows用ctrl+z

user: user-2
content: 没有输出的原因是还没有从while循环中退出来，即while是当=='\n'时退出；  修改一下  #include <stdio.h>  #define MAX_ARR_SIZE    (50) int main(void) {     int array[MAX_ARR_SIZE], *p;      int i = 0;      while (i < MAX_ARR_SIZE && scanf("%d", &array[i++]) == 1)         ;      p = array + i - 2;      for (; p >= array; p--)         printf("%d\n", *p);      return 0; } 供参考～  #include <stdio.h>  #define MAX_ARR_SIZE    (50) int main(void) {     int array[MAX_ARR_SIZE], *p;      int i = 0;      p = array;     while (p < array + MAX_ARR_SIZE && scanf("%d", p++) == 1)         ;      //p = array + i - 2;      for (p = p - 2; p >= array; p--)         printf("%d\n", *p);      return 0; } 供参考～
user-0 提问: C# 语法问题

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 3 楼 zhangm_tt 的回复:[quote=引用 1 楼 真的小白啊的回复:]相当于同时声明一个变量  if (value is int) {      int i = value; }   哦，好像明白了，if（e.control is IStyleInterface ctrl）这句话，就理解为if（e.control is IStyleInterface）｛IStyleInterface ctrl= e.control as IStyleInterface｝ 对吗？[/quote]  是的

user: user-0
content: 引用 1 楼 真的小白啊的回复:相当于同时声明一个变量  if (value is int) {      int i = value; }   哦，好像明白了，if（e.control is IStyleInterface ctrl）这句话，就理解为if（e.control is IStyleInterface）｛IStyleInterface ctrl= e.control as IStyleInterface｝ 对吗？

user: user-0
content: 引用 1 楼 真的小白啊的回复:相当于同时声明一个变量  if (value is int) {      int i = value; }   那这句话无法理解啊！如果value是int类型，就返回一个刚定义的i值，不明白

user: user-2
content: 相当于同时声明一个变量  if (value is int) {      int i = value; }
user-0 提问: 这个运行结果为什么是错的

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 3 楼 weixin_56874565 的回复:为啥要定义x=0？ 初始化，不然是一个随机值，如果是随机值正好为'\n'那岂不是一次也不执行了。

user: user-0
content: 为啥要定义x=0？

user: user-2
content: #include<stdio.h> //void main() int main() {     int a=0,b=0,c=0,d=0;     char x = 0;     while(x!='\n')     {         x=getchar();         if((x<='z'&&x>='a')||('A'<=x&&x<='Z'))             a++;         else if(x>='0'&&x<='9')             b++;         else if(x==' ')             c++;         else             d++;     }     //printf("a=%d,b=%d,c=%d,e=%d\n",&a,&b,&c,&d);     printf("a=%d,b=%d,c=%d,e=%d\n",a,b,c,d); }   供参考～

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

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 大学混日子吧，就是这个后果

user: user-3
content: 看来从二点到七点都会，值八十多分，足够了。

user: user-4
content: 你上课只听60%，下课练习下也不至于做不来这个。都是超级简单的

user: user-5
content: 早干啥去了？

user: user-6
content: 网上搜搜吧。一点不会，这个是无解的。因为都给你写出来，你也是看不懂的。
user-0 提问: C入门

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include<stdio.h> int main(){     int n = 0;     for(n= 100;n <= 200;n++){         int i = 0;         for(i = 2; i*i < n;i++){             if(n % i == 0){                 break;             }         }         if(i >= n){             printf("%d\n",n);         }     }        return 0; }  供参考～    #include<stdio.h> int main(){     int i;     int num[10];     int max;     printf("请输入10个数：");     for(i = 0;i < 10;i++)         scanf("%d",&num[i]);     for(i =1,max = num[0];i < 10;i++)    //i从1开始         if (max < num[i])             max = num[i];         //max = num[i]>max?num[i] : max;         printf("max = %d\n",max);     return 0; } 供参考～
user-0 提问: pitia上的题目，代码的结果没问题，在线提交总提示运行超时

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 7 楼 qq_37949449 的回复:为什么会这样呢？ 哪位大哥可以解答一下这个没有为什么，其实long int 也没什么问题，就像给一个人安排了500平的房子，不合理而已。long int 占位多点，所以计算的时候，十个手指不够了，还得把脚趾也搬出来了，白白浪费了资源。

user: user-3
content: 卡时间通常需要O(1)算法，O(n)不行  #include <stdio.h>  int main() {   double h, n, m = 1;    scanf("%lf%lf", &h, &n);   if (n == 0) h = 0;   *(unsigned long long *)&m |= -1ull << (54 - (int)n) & 0x000fffffffffffffull;   printf("%.1f %.1f\n", h * (((int)n > 1) + m), h / (1ull << (int)n));    return 0; }

user: user-0
content: 为什么会这样呢？ 哪位大哥可以解答一下

user: user-0
content: 破案了 超时都是因为定义了long int型变量

user: user-0
content: 还是运行超时

user: user-2
content: 这样改下，试试：#include <stdio.h> int main() {  	long int h; 	long int n; 	double s=0,x=0; 	int i; 	scanf("%d %d",&h,&n); 	s=x=h; 	for(i=1;i<n;i++)//for(i=1;i<=n;i++) 	                //	if(i==1) 	                //		s+=x; 	                //	else        { 	   	x*=0.5; 	   	s+=2*x;        }     x*=0.5; 	printf("%.1f %.1f\n",s,x);//'\n'              return 0; }

user: user-0
content: 引用 1 楼 user-5 的回复：输出末尾加上换行符？试了，还是报超时[face]monkey2:019.png[/face]

user: user-0
content: 引用 8 楼 自信男孩 的回复：#include <stdio.h> int main() {      long int h;     long int n;     double s=0,x=0;     int i;     scanf("%ld %ld", &h,&n);     x = h;      i = 0;     while (i < n) {         s += x + x / 2;         x /= 2;         i++;     }      printf("%.1lf %.1lf\n", s, x);      return 0;     /*     for(i=1;i<=n;i++)         if(i==1)             s+=x;         else{             x*=0.5;             s+=2*x;         }         x*=0.5;     }     printf("%.1f %.1f",s,x);     */ } 试试这个版本～只要定义了long int型变量，在线提交就会显示超时，代码在vs上运行没问题。

user: user-4
content: #include <stdio.h> int main() {      long int h;     long int n;     double s=0,x=0;     int i;     scanf("%ld %ld", &h,&n);     x = h;      i = 0;     while (i < n) {         s += x + x / 2;         x /= 2;         i++;     }      printf("%.1lf %.1lf\n", s, x);      return 0;     /*     for(i=1;i<=n;i++)         if(i==1)             s+=x;         else{             x*=0.5;             s+=2*x;         }         x*=0.5;     }     printf("%.1f %.1f",s,x);     */ } 试试这个版本～

user: user-2
content: 供参考：#include <stdio.h> int main() {  	long int h; 	long int n; 	double s=0,x=0; 	int i; 	scanf("%d %d",&h,&n); 	x=h; 	for(i=1;i<=n;i++) 		if(i==1) 			s+=x; 		else{ 			x*=0.5; 			s+=2*x; 		}     x*=0.5; 	printf("%.1f %.1f\n",s,x);//'\n'              return 0; }

user: user-5
content: 输出末尾加上换行符？
user-0 提问: 间接访问运算(*p)用异或运算交换所指变量的值出错

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 仅供参考：#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-0
content: 引用 1 楼 自信男孩 的回复:#include<stdio.h> int main(void) {     int a=1,b=2;     int *p1,*p2;      p1=&a,p2=&b;     printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2); #if 0     printf("No.1: %d\n", (*p1 ^= *p2));     printf("%d\n", *p1);     printf("No.2: %d\n", (*p2 ^= *p1));     printf("%d\n", *p2);     printf("No.2: %d\n", (*p1 ^= *p2));     printf("%d\n", *p1); #else     *p1^=*p2^=*p1^=*p2; #endif     printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);      return 0; } 供参考～  if和else都是一样的，else部分的分解版本就是if 0的执行部分；  执行结果： a=1,b=2,*p1=1,*p2=2 a=2,b=1,*p1=2,*p2=1   我运行了你的代码，结果没变，和原来的一样。。

user: user-3
content: #include<stdio.h> int main(void) {     int a=1,b=2;     int *p1,*p2;      p1=&a,p2=&b;     printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2); #if 0     printf("No.1: %d\n", (*p1 ^= *p2));     printf("%d\n", *p1);     printf("No.2: %d\n", (*p2 ^= *p1));     printf("%d\n", *p2);     printf("No.2: %d\n", (*p1 ^= *p2));     printf("%d\n", *p1); #else     *p1^=*p2^=*p1^=*p2; #endif     printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);      return 0; } 供参考～  if和else都是一样的，else部分的分解版本就是if 0的执行部分；  执行结果： a=1,b=2,*p1=1,*p2=2 a=2,b=1,*p1=2,*p2=1
user-0 提问: 求助大佬，究竟是哪里出了问题？

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 3 楼 自信男孩的回复:[quote=引用 2 楼 m0_57436055 的回复:][quote=引用 1 楼 自信男孩的回复:]很明显你编译的不是2.2.c这个源文件吧。上面的编译结果是文件名是中文的那个源文件～ 然后我把运行出来的一长串删了就正常了，这又是为什么呢？[/quote] 你的代码没问题（图片里的），也没有涉及到后面编译提到的问题。所以，这个属于环境（编辑编译）使用问题，不是代码问题。 编译出错的error说明是其他源码编译出来的～[/quote] 喔喔妙啊非常感谢呀！

user: user-2
content: 引用 2 楼 m0_57436055 的回复:[quote=引用 1 楼 自信男孩的回复:]很明显你编译的不是2.2.c这个源文件吧。上面的编译结果是文件名是中文的那个源文件～ 然后我把运行出来的一长串删了就正常了，这又是为什么呢？[/quote] 你的代码没问题（图片里的），也没有涉及到后面编译提到的问题。所以，这个属于环境（编辑编译）使用问题，不是代码问题。 编译出错的error说明是其他源码编译出来的～

user: user-0
content: 引用 1 楼 自信男孩的回复:很明显你编译的不是2.2.c这个源文件吧。上面的编译结果是文件名是中文的那个源文件～ 然后我把运行出来的一长串删了就正常了，这又是为什么呢？

user: user-2
content: 很明显你编译的不是2.2.c这个源文件吧。上面的编译结果是文件名是中文的那个源文件～
user-0 提问: 为什么会有错误，真心不知道错在哪了？求大佬帮帮忙!

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 三日不练手生，这是一个非常简单的程序，先由我来提供一个版本，再请赵4老湿提供自己的版本。 # include <stdio.h> # include <math.h>  int main (void) {     int fst, lst, cnt = 0, sum = 0;          scanf ("%d%d", & fst, & lst);      for (int d = 2; fst <= lst; fst ++, d = 2)         while (fst % d != 0)             if (d ++ > sqrt (fst))             {                 cnt ++, sum += fst;                 break;             }      printf ("%d %d\n", cnt, sum); }

user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-3
content: 注意一下，如果输入的是m > n则这个程序一次也不会运行，如果m, n为负数或者其中一个为负数，也不能完全运行吧

user: user-4
content: m如果真的是1，你的代码就每次循环都会掉进if(m==1)分支，就不做正经事了。
user-0 提问: 问一个c primer plus上的问题

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=msvc-160

user: user-3
content: man scanf_s 哦，windows 没有 manual，跳转到 scanf_s 接口直接看参数说明吧

user: user-4
content: 书上的是scanf，而你的编译器要求是scanf_s，只是对scanf再次进行了封装，比scanf更安全，因为它限定了缓存长度，可以有效防止越界； 多出的这个参数不能传入4，而需要传入40；

user: user-5
content: scanf() 与 scanf_s() 是有区别的。第10行正确的应该是：scanf_s("%s",name,40) ;  https://blog.csdn.net/weixin_44093867/article/details/97525914?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161889596316780269825965%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161889596316780269825965&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-97525914.pc_search_result_no_baidu_js&utm_term=scanf_s%E4%B8%8Escanf%E7%9A%84%E5%8C%BA%E5%88%AB
user-0 提问: c语言数字炸弹双人游戏

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 自信男孩 的回复：gnum, num都定义两份吧，循环的退出以两人都猜中，并且已经猜中的不用输入（加上判断）可否细说

user: user-0
content: 引用 1 楼 自信男孩 的回复：gnum, num都定义两份吧，循环的退出以两人都猜中，并且已经猜中的不用输入（加上判断）可否打代码出来

user: user-2
content: gnum, num都定义两份吧，循环的退出以两人都猜中，并且已经猜中的不用输入（加上判断）
user-0 提问: 救救我吧？

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 6 楼 信仰之跃849 的回复:[quote=引用 5 楼 ZWW975的回复:]pow 第一个参数没有整型的，第一个参数要类型转换下 pow(2.0,n); 然后返回值 怎么返回值？[/quote]你把 2 改成2.0还会报错吗

user: user-0
content: 引用 5 楼 ZWW975的回复:pow 第一个参数没有整型的，第一个参数要类型转换下 pow(2.0,n); 然后返回值 怎么返回值？

user: user-2
content: pow 第一个参数没有整型的，第一个参数要类型转换下 pow(2.0,n); 然后返回值

user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-3
content: if (j=1)//应该是=还是==? 没发现这个有问题吗？         #include <math.h>         double pow(double x, double y);        float powf(float x, float y);        long double powl(long double x, long double y);         Link with -lm.     Feature Test Macro Requirements for glibc (see feature_test_macros(7)):         powf(), powl():            _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L                || /* Since glibc 2.19: */ _DEFAULT_SOURCE                || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

user: user-4
content: double pow( double x, double y ); float powf( float x, float y ); long double powl( long double x, long double y ); define pow(X, Y) // Requires C11 or higher  double pow( double x, int y );  // C++ only float pow( float x, float y );  // C++ only float pow( float x, int y );  // C++ only long double pow( long double x, long double y );  // C++ only long double pow( long double x, int y );  // C++ only
user-0 提问: c语言fprintf函数文件内是乱码

回复:
user: user-1
content: 引用 3 楼 qq_53455956 的回复: 还是乱码啊！！！ 为什么呢？？？？？ 因为你的head节点的name是随机值呀，你没给head节点的name输入或修改任何内容呀。你看看你的写文件是不是第一个写的是head节点的name?

user: user-0
content: 还是乱码啊！！！ 为什么呢？？？？？

user: user-2
content: name 只有10个字节，字符串最后一个字节需要是结束符 '\0' 你是不是输入了超过10个字节，或者正好10个字节的内容了？ 考虑用 scanf_s 替换 scanf  另外 chance 这个临时字符串没用  赵4老师说的也对

user: user-3
content: new是保留字
user-0 提问: 文件问题

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 不是读写函数出错，而是读出来的内容出错。因为以文本形式写进去的，以二进制形式去读，可能会出现问题，

user: user-0
content: 引用 4 楼 赵4老师 的回复：不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fputc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fscanf,fprintf,fgets,fgetc,fputc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了谢谢赵四老师耐心解答[face]monkey2:002.png[/face]

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

user: user-0
content: 引用 1 楼 赵4老师 的回复：所有文件的内容都只是一系列二进制字节。那这里说的文件中有\r和\n指的是在哪里，它这里的打开一个文件是指的我们鼠标双击的这种打开吗，这个是不是要学些底层知识才能弄明白啊，我不是cs的，现在只学了c语言，是不是应该再看些其它相关的书

user: user-3
content: 所有文件的内容都只是一系列二进制字节。
user-0 提问: 来位义夫解释下

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 这是递归呢，停止递归是遇到c=='*'

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

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 冒泡排序，代码第24行需修改下，for(j=0; j<m-i; j++) 这句，修改为：for(j=0;j<m-i-1;j++)

user: user-0
content: 引用 1 楼 自信男孩的回复:ch长度是1，用%s很明显越界呢。这个问题你之前就提出来过吧，给你的回复越界问题没解决？ C语言的str列数是可变的，这个不支持的，支持固定长度的数组； 哦哦哦，我看到啦，终于找到了，感谢

user: user-2
content: 建议楼主贴代码，大家方便。

user: user-3
content: ch长度是1，用%s很明显越界呢。这个问题你之前就提出来过吧，给你的回复越界问题没解决？ C语言的str列数是可变的，这个不支持的，支持固定长度的数组；
user-0 提问: 关于C语言宏定义

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 报什么错误？在代码里又是如何使用s, area呢？这些是关键，不能说单单的宏定义会报错或不报错。重点是如何用的，宏定义就是等价替换，放在代码里看看是否符合语法规则～

user: user-3
content: 你用的是全角分号吧

user: user-4
content: 引用 11 楼 qzjhjxj 的回复:[quote=引用 10 楼 Dream1018 lin 的回复:][quote=引用 8 楼 真相重于对错 的回复:]宏就是文本替换，你那个肯定不对。 相当于 printf("...",xxxxxx ;); 所以说所有的宏定义最后边都不需要 " ; " 对吗？ 可是为什么在某些情况下又可以呢？ 比如说： [/quote]这个相当于执行一次空语句，再多加几个也没感觉t = div(x,y);;;;;;[/quote] 怎么会对？“;”代表的语句的结束，但是你前面是调用printf函数，函数调用时，函数名后面的括号一定要匹配，所以肯定不对啊

user: user-0
content: 引用 11 楼 qzjhjxj 的回复:[quote=引用 10 楼 Dream1018 lin 的回复:][quote=引用 8 楼 真相重于对错 的回复:]宏就是文本替换，你那个肯定不对。 相当于 printf("...",xxxxxx ;); 所以说所有的宏定义最后边都不需要 " ; " 对吗？ 可是为什么在某些情况下又可以呢？ 比如说： [/quote]这个相当于执行一次空语句，再多加几个也没感觉t = div(x,y);;;;;;[/quote] 明白了。谢谢大佬

user: user-5
content: 用do {……} while(0)括住宏，解决分号结束问题。

user: user-6
content: 引用 10 楼 Dream1018 lin 的回复:[quote=引用 8 楼 真相重于对错 的回复:]宏就是文本替换，你那个肯定不对。 相当于 printf("...",xxxxxx ;); 所以说所有的宏定义最后边都不需要 " ; " 对吗？ 可是为什么在某些情况下又可以呢？ 比如说： [/quote]这个相当于执行一次空语句，再多加几个也没感觉t = div(x,y);;;;;;

user: user-0
content: 引用 8 楼 真相重于对错 的回复:宏就是文本替换，你那个肯定不对。 相当于 printf("...",xxxxxx ;); 所以说所有的宏定义最后边都不需要 " ; " 对吗？ 可是为什么在某些情况下又可以呢？ 比如说：

user: user-2
content: 肯定不行呢，看看楼上这位大咖已经给你等价替换出来了。  引用 8 楼 真相重于对错 的回复:宏就是文本替换，你那个肯定不对。 相当于 printf("...",xxxxxx ;);

user: user-4
content: 宏就是文本替换，你那个肯定不对。 相当于 printf("...",xxxxxx ;);

user: user-0
content: 我感觉会不会是连续声明两个宏定义，所以两者之间不能有 " ; "  ？  当只有一个宏定义的时候，“ ; ”便可有可无？ 不太明白为什么。。。求大神空降回答。

user: user-0
content: 引用 1 楼 早打大打打核战争 的回复:你用的是全角分号吧用的是半角符号

user: user-0
content: 引用 2 楼 自信男孩 的回复:报什么错误？在代码里又是如何使用s, area呢？这些是关键，不能说单单的宏定义会报错或不报错。重点是如何用的，宏定义就是等价替换，放在代码里看看是否符合语法规则～ 你看一下，就是这样报错，其他的情况都没问题。

user: user-7
content: 如果s(a,b,c) 在后面代码中直接参与运算，则不加分号，比如 s(a,b,c) +123； //这个里s不能有加号  直接调用，不参与运算则可以加，建议不要加了 s(a,b,c)

user: user-5
content: VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
user-0 提问: 【C语言求助】静态链表执行赋值语句时暂停运行

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

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

user: user-3
content: #include <stdio.h> #include <math.h> #include <stdlib.h> struct node {     int num;     struct node *next; }node;  int main(void) {     //struct node num,* head, * p=head;     struct node num, *head, *tail, *p;     //int ordinal=1,remain=13;      //开辟13个节点     //在节点里存入数据num：1~13      //if(p!=NULL) printf("Not NULL...\n");     //printf("%d ",p->num);     head = NULL;     for(int i=0;i<13;i++)     {         p = (struct node *)malloc(sizeof(struct node));         if (!p)             exit(0);         if (!head)             head = p;         else             tail->next = p;         p->num=i+1;         printf("%d ",p->num);         tail = p;         //p=p->next;     }      p->next = NULL;      p = head;     while (p) {         printf("%d ",p->num);         p = p->next;     }     printf("\n");      return 0; } 供参考～

user: user-4
content: 暂停运行是指什么？参考楼主的代码修改，生成带头节点的13个节点的链表，同时往里存入1-13，供参考：#include <stdio.h> #include <math.h> #include <stdlib.h> struct node {     int num;     struct node *next; }node; void main() {     struct node num,* head, * p,*q;     //int ordinal=1,remain=13;     //开辟13个节点     //在节点里存入数据num：1~13     head = (struct node *)malloc(sizeof(struct node));     head->next = NULL;     q = head;     if(q!=NULL) printf("Not NULL...\n");     //printf("%d ",p->num);     for(int i=0;i<13;i++)     {         p = (struct node *)malloc(sizeof(struct node));         p->num=i+1;         p->next=NULL;         q->next=p;         q=p;         printf("i=%d,%d\n",i,p->num);         //p=p->next;     }     q=head->next;     while(q){           printf("%d\n",q->num);           q=q->next;     }     //p=NULL;     system("pause"); }

user: user-5
content: head是野指针
user-0 提问: 求助

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 你倒是发个清晰点的照片啊。
user-0 提问: 为什么这里是错的？

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 添加选项-std=c99

user: user-2
content: 把int i;放在for之前试试； 编译已经给于提示了，C99标准支持你这种写法～ 要么改成for循环前定义i,要么添加循环-std=c99

user: user-3
content: C90并不允许在for后面的圆括号里声明循环变量。 删掉int并在函数体开头写int i;可以满足一切C编译器的喜好。
user-0 提问: 多项式求和

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 多项式的式子呢？

user: user-0
content: [face]monkey2:019.png[/face]
user-0 提问: 在查询数据库时遇到的一个问题

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 用try语句捕获该捕获的异常。

user: user-0
content: dddddd
user-0 提问: 为什么我输入的入栈元素只有最后一根能出栈？不应该是出栈六个不一样的吗

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 user-2的回复:供参考：#include<stdio.h> #include<stdlib.h>  #define STACK_INIT_SIZE 100 #define STACKINCREMNT   10 #define OVERFLOW        0 #define ERROR           0 #define OK              1  typedef struct {      int *top ;      int *base;      int stacksize; }SqStack;  int InitStack(SqStack &L) {      L.base=(int*)malloc(10*sizeof(int));      if(!L.base)  exit(OVERFLOW);      L.top=L.base;      L.stacksize=10;      return OK; } int GetTop(SqStack L,int &e) {      if(L.base==L.top)return  ERROR;      e=*(L.top-1);      return OK; } int Push(SqStack &L,int e) //int Push(SqStack L,int e) {      if(L.top-L.base>=L.stacksize){         L.base=(int*)realloc(L.base,(L.stacksize+STACKINCREMNT) * sizeof(int));         L.top=L.base+L.stacksize;         L.stacksize=L.stacksize+STACKINCREMNT;      }      *(L.top++) = e;      return OK; } int Pop(SqStack &L,int &e) //int Pop(SqStack L,int &e) {      if(L.top != L.base)         e=*(--L.top); //e=*(L.top--)      return OK;       //e; }  int main() {      int i,n,m;      SqStack L;      InitStack (L);      for(i=0;i<6;i++){          scanf("%d",&n);          Push(L,n);      }      for(m=0;m<6;m++){          Pop(L,n);          printf("%d\n",n);      }            return 0; } 谢谢了，已经解决了，没有取地址

user: user-2
content: 供参考：#include<stdio.h> #include<stdlib.h>  #define STACK_INIT_SIZE 100 #define STACKINCREMNT   10 #define OVERFLOW        0 #define ERROR           0 #define OK              1  typedef struct {      int *top ;      int *base;      int stacksize; }SqStack;  int InitStack(SqStack &L) {      L.base=(int*)malloc(10*sizeof(int));      if(!L.base)  exit(OVERFLOW);      L.top=L.base;      L.stacksize=10;      return OK; } int GetTop(SqStack L,int &e) {      if(L.base==L.top)return  ERROR;      e=*(L.top-1);      return OK; } int Push(SqStack &L,int e) //int Push(SqStack L,int e) {      if(L.top-L.base>=L.stacksize){         L.base=(int*)realloc(L.base,(L.stacksize+STACKINCREMNT) * sizeof(int));         L.top=L.base+L.stacksize;         L.stacksize=L.stacksize+STACKINCREMNT;      }      *(L.top++) = e;      return OK; } int Pop(SqStack &L,int &e) //int Pop(SqStack L,int &e) {      if(L.top != L.base)         e=*(--L.top); //e=*(L.top--)      return OK;       //e; }  int main() {      int i,n,m;      SqStack L;      InitStack (L);      for(i=0;i<6;i++){          scanf("%d",&n);          Push(L,n);      }      for(m=0;m<6;m++){          Pop(L,n);          printf("%d\n",n);      }            return 0; }
user-0 提问: 段错误:您的程序发生段错误，可能是数组越界，堆栈溢出（比如，递归调用层数太多）等情况引起

回复:
user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: ListNode* ReverseList(ListNode* pHead) {     if (!pHead)    //判断头结点是否为NULL         return NULL;          ListNode* q = NULL;         ListNode* g = NULL;         q = pHead->next;         pHead->next = NULL;         while(q!=NULL){             g = q->next;             q->next = pHead;             pHead = q;             q = g;         }        return pHead;     } }; 供参考   翻转基本上没什么问题（进入参数先判断一下是否为空链表），建议查一下传入该函数的参数是否正常（传入的链表是否正常）；

user: user-3
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
user-0 提问: 如何安装第三方库？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-1
content: C和C++完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: C语言

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考：#include <stdio.h>  int main() {    int i,tmp,rmd,sum;    for(i=100; i<=999; i++){        tmp=i;        sum=0;        while(tmp>0){              rmd=tmp%10;              sum+=rmd*rmd*rmd;              tmp/=10;        }        if(sum==i){          printf("%d\n",i);        }    }    return 0; }
user-0 提问: 求助，请问这个函数哪里有问题

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 数据结构小白请教各位大佬一个问题

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include<stdio.h> #include<stdlib.h>  #define TRUE 1 #define FALSE 0 #define OK  1 #define ERROR 0 #define INFEASIBLE  -1 #define OVERFLOW   -2 //#define NULL ((void *)0)  typedef int Status; typedef int ElemType;  typedef struct LNode {     ElemType data;     struct LNode  *next; }LNode,*LinkList;  typedef  LNode *LinkList; void CreateList_L(LinkList *L, int n); void MergeList_L(LinkList La, LinkList Lb, LinkList *Lc); void OutputList(LinkList L);  void  CreateList_L(LinkList *L, int n) {     int i;     LinkList p;     *L = (LinkList)malloc(sizeof(LNode));     (*L)->next = NULL;     for (i = 0; i < n; ++i) {         p = (LinkList)malloc(sizeof(LNode));         scanf("%d",&p->data);         p->next = (*L)->next;         (*L)->next = p;     } }//CreateList_L void MergeList_L(LinkList La, LinkList Lb, LinkList *Lc) {     LinkList pa, pb, pc;     pa = La->next; pb = Lb->next;     *Lc = pc = La;     while(pa&&pb)         if (pa->data<=pb->data) {             pc->next = pa; pc = pa; pa = pa->next;         }         else { pc->next = pb, pc = pb, pb = pb->next; }     pc->next = pa ? pa : pb;     free(Lb); }//MergeList_L void OutputList(LinkList L) {     LinkList q;     q=L->next;     while(q){         printf("%d",q->data);         q=q->next;     } }//OutputList_L int main() {     LinkList L1,L2,L3;     printf("Please enter the element of L1:\n");     CreateList_L(&L1, 4);     printf("Please enter the element of L2:\n");     CreateList_L(&L2, 4);     printf("The LinkList L1 is:\n");     OutputList(L1);     printf("The LinkList L2 is:\n");     OutputList(L2);     MergeList_L(L1, L2, &L3);     printf("The LinkList L3 is:\n");     OutputList(L3);     return 0; } 供参考～  试一下这个版本，然后对比一下这两个代码的区别，找出自己的问题；  另外，重点学习一下参数传递，传入参数、传出参数等等；

user: user-0

user: user-0
content: 我的单链表可以输入但无法输出，语法没有错误，请各位大佬帮忙看一看
user-0 提问: 问问大佬，这个咋弄啊，C语言设计，球球救救孩子吧

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 关于网络编程定时器使用

回复:
user: user-1
content: 可以添加心跳机制，即client每隔5秒发一个心跳包，包的大小可以随意定义，只要server能识别这是一个心跳包即可，服务器（也需要一个定时器）定时去检查上次收到心跳包的时间和现在做差，大于5秒则直接关闭连接～

user: user-2
content: 跟你用的网络模型有关，如果使用了select或者epoll，直接用它们自带的定时器就可以，如果时间长短不合适，可以加个倍数关系，比如select 1秒阻塞时间，那就返回5次再清理旧的链接，判断是否是旧链接也很简单，就看select的结果就可以了 如果采用定时器，那就得自己实现一个了，比较麻烦
user-0 提问: 求助，c语言简单问题

回复:
user: user-1
content: Segmentation fault (core dumped)指段错误，一般指非法地址访问，就是访问到不可以读写的内存位置，这是系统从安全角度，保证系统正常运行所必须的～  比如一个系统才能访问的地址，一个自定义程序去访问（比如读写）这个地址上的内容，那么就可能导致系统异常，因此不允许其访问～

user: user-0
content: 引用 5 楼 forever74的回复:是啊，那里不能单引号。 哦，好的，谢谢

user: user-0
content: 引用 5 楼 forever74的回复:是啊，那里不能单引号。 哦，好的，谢谢

user: user-2
content: 是啊，那里不能单引号。

user: user-0
content: 引用 2 楼 forever74的回复:Error CFFFF: 楼主眼花看错了。 是说单引号是错误的使用方法吗

user: user-0
content: 是说单引号是错误的使用方法吗

user: user-2
content: Error CFFFF: 楼主眼花看错了。

user: user-3
content: 不过引号里面的内容不是单个字符，就不要用单引号吧。虽然PHP里面单引号可以替代双引号，但是C/C++这类严谨的语言用不得

user: user-4
content: fopen()用法，供参考：https://blog.csdn.net/weixin_33878457/article/details/85712854?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1331978.858.16185879177551633&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control Segmentation fault (core dumped)的错误，这句话意思就是段错误（核心转储），Core Dump 是操作系统在进程收到某些信号而终止运行时，将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。在这里出现这问题，按你的描述就是操作文件时出现无法解析的字符，所以上面给了fopen()用法链接供参考。
user-0 提问: 请问一下这个程序怎么运行不了，出现的错误是什么意思，应该怎么改

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: scanf中的score缺少&和[],或者直接这样：  scanf("%d", score + i);

user: user-3
content: 这个函数的声明和实现，两边不一样呢，在声明的地方中间少了's'，红圈标出。
user-0 提问: if条件中使用取反出现问题

回复:
user: user-1
content: 供参考：#include<stdio.h>  int main() {     unsigned char data1,data2; //unsigned char 的取值范围为0~255     unsigned char temp;     data1=0x01;     data2=0xfe; //254     temp = ~data2;     //这里隐含强制转换，无符号数                        //注意，计算机存储的都是数的补码，无论是正数还是负数     //if(data1 == ~data2)// ~data2 按位取反，在内存中形式为 -255,-255 != 1;并不是我们想像的0x01.     if(data1 == temp)    //这里temp=0x01        printf("temp1和temp2想等\n");     else        printf("temp1和temp2不相等\n");      printf("data2:0x%x,temp:0x%x\n",data2,temp);     system("pause");     return 0; }

user: user-0
content: 引用 1 楼 qzjhjxj 的回复:供参考：#include<stdio.h>  int main() {     unsigned char data1,data2; //unsigned char 的取值范围为0~255     unsigned char temp;     data1=0x01;     data2=0xfe; //254     temp = ~data2;     //这里隐含强制转换，无符号数                        //注意，计算机存储的都是数的补码，无论是正数还是负数     //if(data1 == ~data2)// ~data2 按位取反，在内存中形式为 -255,-255 != 1;并不是我们想像的0x01.     if(data1 == temp)    //这里temp=0x01        printf("temp1和temp2想等\n");     else        printf("temp1和temp2不相等\n");      printf("data2:0x%x,temp:0x%x\n",data2,temp);     system("pause");     return 0; }  感谢大佬热心的回答  哈哈

user: user-0
content: 引用 4 楼 真相重于对错 的回复:[quote=引用 3 楼 dajkhsdawe 的回复:][quote=引用 2 楼 真相重于对错 的回复:]~ 操作符的结果是int，自动扩至32位。并不是你想的还是unsigned char. unsigned char最高位按符号位处理，扩展到结果高位，除符号位外，其余按位反转。 0xfe 按位取反后的实际是 0xffffff01。这个结果就是-255. 你的判断这么写就可以了  if(data1==(unsigned char)~data2)  取反会发生强制类型转换吗[/quote] 不是强制类型转换，专业名词叫整形提升。   引用 3 楼 dajkhsdawe 的回复:[quote=引用 2 楼 真相重于对错 的回复:]~ 操作符的结果是int，自动扩至32位。并不是你想的还是unsigned char. unsigned char最高位按符号位处理，扩展到结果高位，除符号位外，其余按位反转。 0xfe 按位取反后的实际是 0xffffff01。这个结果就是-255. 你的判断这么写就可以了  if(data1==(unsigned char)~data2)  取反会发生强制类型转换吗[/quote] 如果你有疑虑请去查c/c++标准。这个是王八的屁股-规定。[/quote]   哈哈  原来如此    感谢感谢

user: user-2
content: 引用 3 楼 dajkhsdawe 的回复:[quote=引用 2 楼 真相重于对错 的回复:]~ 操作符的结果是int，自动扩至32位。并不是你想的还是unsigned char. unsigned char最高位按符号位处理，扩展到结果高位，除符号位外，其余按位反转。 0xfe 按位取反后的实际是 0xffffff01。这个结果就是-255. 你的判断这么写就可以了  if(data1==(unsigned char)~data2)  取反会发生强制类型转换吗[/quote] 不是强制类型转换，专业名词叫整形提升。   引用 3 楼 dajkhsdawe 的回复:[quote=引用 2 楼 真相重于对错 的回复:]~ 操作符的结果是int，自动扩至32位。并不是你想的还是unsigned char. unsigned char最高位按符号位处理，扩展到结果高位，除符号位外，其余按位反转。 0xfe 按位取反后的实际是 0xffffff01。这个结果就是-255. 你的判断这么写就可以了  if(data1==(unsigned char)~data2)  取反会发生强制类型转换吗[/quote] 如果你有疑虑请去查c/c++标准。这个是王八的屁股-规定。

user: user-0
content: 引用 2 楼 真相重于对错 的回复:~ 操作符的结果是int，自动扩至32位。并不是你想的还是unsigned char. unsigned char最高位按符号位处理，扩展到结果高位，除符号位外，其余按位反转。 0xfe 按位取反后的实际是 0xffffff01。这个结果就是-255. 你的判断这么写就可以了  if(data1==(unsigned char)~data2)  取反会发生强制类型转换吗

user: user-2
content: ~ 操作符的结果是int，自动扩至32位。并不是你想的还是unsigned char. unsigned char最高位按符号位处理，扩展到结果高位，除符号位外，其余按位反转。 0xfe 按位取反后的实际是 0xffffff01。这个结果就是-255. 你的判断这么写就可以了  if(data1==(unsigned char)~data2)
user-0 提问: 小白提问

回复:
user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 你输入了两个字符，'N'和'\n' 因此输出两个字符，'n'（'N'+32）和'*'（'\n'+32）

user: user-3
content: '\n'也是会在下次的scanf中被c接收的。  查一下*的字符的ascii值：42正好匹配；

user: user-4
content: \n的码值是10，加上32以后就是42
user-0 提问: 一道C语言编程题目，代码看不明白，请大家帮忙看看

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考：https://www.cnblogs.com/polebug/p/3502565.html

user: user-0
content: 引用 1 楼 自信男孩的回复:恩，可以用的。  //#include<bits/stdc++.h> #include <stdio.h> #include <stdlib.h>  //using namespace std;  char s[50];  int main(){     int d1,d2,d3;     int cnt=0;     char op;     //while(gets(s)){     while(scanf("%d%c%d=%d", &d1, &op, &d2, &d3) == 4){         //d3=1000;         //sscanf(s,"%d%c%d=%d",&d1,&op,&d2,&d3);         if(d1+d2==d3&&op=='+')         {             cnt++;         }         if(d1-d2==d3&&op=='-')         {             cnt++;         }     }     printf("%d\n",cnt);     return 0; } 供参考～   建议查一下sscanf函数实现；可以看成scanf从s中读取值匹配%d和%c 谢谢你的回答，但是wa哦

user: user-3
content: 恩，可以用的。  //#include<bits/stdc++.h> #include <stdio.h> #include <stdlib.h>  //using namespace std;  char s[50];  int main(){     int d1,d2,d3;     int cnt=0;     char op;     //while(gets(s)){     while(scanf("%d%c%d=%d", &d1, &op, &d2, &d3) == 4){         //d3=1000;         //sscanf(s,"%d%c%d=%d",&d1,&op,&d2,&d3);         if(d1+d2==d3&&op=='+')         {             cnt++;         }         if(d1-d2==d3&&op=='-')         {             cnt++;         }     }     printf("%d\n",cnt);     return 0; } 供参考～   建议查一下sscanf函数实现；可以看成scanf从s中读取值匹配%d和%c
user-0 提问: 为什么这里不要加&和【】

回复:
user: user-0
content: 引用 1 楼 user-4 的回复：别的格式符对应变量加&是为了取地址，而数组名本身就是地址，加方括号就不是地址了，加&就画蛇添足了。多谢

user: user-0
content: 引用 4 楼 自信男孩 的回复：scanf对应的a的位置要求的是地址，而数组a的名字就是数组的首地址，因此不需要加&  楼主定义的a是int类型数组，而用%s输入，类型不匹配吧，虽然不影响程序运行～，根据楼主的程序逻辑，应该将a定义成char类型的数组；   另外，c=c的操作没意义，建议删除；多谢🙏

user: user-0
content: 引用 5 楼 家有萌宝V 的回复：其实楼上已经回答的很清楚了。 int a [100] = {1,2,3,,,,,,,,,,100} 这里， a的值就是指向这一百个数的数组(栈)的指针。那么&a就是这个数组名的地址。你要表达的是通过键盘输入正数，并将整数存入到这个数组中。 那么 scanf参数接受的肯定不是数组名的地址&a， 而是数组的地址，也就是a，希望回答能帮到你。好的，多谢🙏

user: user-1
content: 其实楼上已经回答的很清楚了。 int a [100] = {1,2,3,,,,,,,,,,100} 这里， a的值就是指向这一百个数的数组(栈)的指针。那么&a就是这个数组名的地址。你要表达的是通过键盘输入正数，并将整数存入到这个数组中。 那么 scanf参数接受的肯定不是数组名的地址&a， 而是数组的地址，也就是a，希望回答能帮到你。

user: user-2
content: scanf对应的a的位置要求的是地址，而数组a的名字就是数组的首地址，因此不需要加&  楼主定义的a是int类型数组，而用%s输入，类型不匹配吧，虽然不影响程序运行～，根据楼主的程序逻辑，应该将a定义成char类型的数组；   另外，c=c的操作没意义，建议删除；

user: user-0
content: 引用 1 楼 user-4 的回复：别的格式符对应变量加&是为了取地址，而数组名本身就是地址，加方括号就不是地址了，加&就画蛇添足了。那[]呢

user: user-3
content: scanf("%s",a)是输入一个字符串，不是一个字符，由于字符数组名已经代表数组存放的字符串的首地址，所以不用加取地址运算符&，后面也不用方括号[]指出数组元素都下标。望采纳

user: user-4
content: 别的格式符对应变量加&是为了取地址，而数组名本身就是地址，加方括号就不是地址了，加&就画蛇添足了。
user-0 提问: 求助帖

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 修正楼上：printf("d=%.4f\n",d); printf("c=%.4f\n",c); printf("s=%.4f\n",s);

user: user-2
content: 供参考：#include "stdio.h" #define pi 3.14159 int main( ) {     float r,d,c,s;     scanf("%f",&r);//scanf("%.4lf",&r);     if(r<0 || r>10000) return -1;     d=2*r;     c=2*pi*r;     s=pi*r*r;     printf("d=%.4lf\n",d);     printf("c=%.4lf\n",c);     printf("s=%.4lf\n",s);          return 0; }

user: user-3
content: #include <stdio.h> #include <math.h>  #define PI 3.14159  #define MAX_SIZE    10000  int main(void) {     float r,d,c,s;     //scanf("%.4lf",&r);     scanf("%f",&r);      if (r < 0 || (r > MAX_SIZE && fabs(r - MAX_SIZE) > 1e-6))         return -1;      d = 2 * r;     c = 2 * PI * r;     s = PI * r * r;      printf("d=%.4lf\n",d);     printf("c=%.4lf\n",c);     printf("s=%.4lf\n",s);      return 0; } 供参考～
user-0 提问: c语言问题

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 不一定执行，因为越界访问是未定义行为～

user: user-3
content: 不一定  其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-4
content: 拍照的时间，写个test也可以试验出来了
user-0 提问: 写了一个用fwrite写入文件流的DLL，但是引用DLL时参数传不进去

回复:
user: user-1
content: //dllmain.c  /* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> #include <stdio.h>  DLLIMPORT void sendData(const char *jsondata,int len) { 	printf("1\n"); 	FILE *f; 	printf("2\n");     f = fopen( "d:\\json.txt" , "wb" );     printf("3\n");     fwrite(jsondata, len , 1, f );     printf("4\n");     //fflush(f);     fclose(f); }    BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { 	switch(fdwReason) 	{ 		case DLL_PROCESS_ATTACH: 		{ 			break; 		} 		case DLL_PROCESS_DETACH: 		{ 			break; 		} 		case DLL_THREAD_ATTACH: 		{ 			break; 		} 		case DLL_THREAD_DETACH: 		{ 			break; 		} 	}  	/* Return TRUE on success, FALSE on	failure	*/ 	return TRUE; }  //dll.h  #ifndef _DLL_H_ #define _DLL_H_  #if BUILDING_DLL #define DLLIMPORT __declspec(dllexport) #else #define DLLIMPORT __declspec(dllimport) #endif  DLLIMPORT void sendData(const char *jsondata,int len);  #endif  //调用  #include <stdio.h> #include <stdlib.h> #include <windows.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */  int main(int argc, char *argv[]) { 	typedef	void (*FUNT)(const char*,int); 	HMODULE	hMod = LoadLibrary("createdll.dll"); 	if(hMod	!= NULL) 	{ 		printf("%s\n","success!!!"); 		FUNT Data =	(FUNT)GetProcAddress(hMod,"sendData"); 		Data("123",3); 	} 	else 		printf("%s\n","failed!!!");  	    	return 0; }

user: user-0
content: 感谢赵四老师帮我解决那个DLL中fwrite的问题，我有几个疑问1、为什么要加const，虽然我知道这是声明只读。2、const char *和const char [ ]，在我感觉下是相同的，但是用了后者就不行了。3、为什么fwrite中的len要在外面声明，我直接给他固定值的话文本后面会乱码。若赵四老师有空的话希望能帮我解答，或者推荐我这个新手看看什么学习资料比较好，再次感谢

user: user-1

user: user-0
content: 太感谢赵四老师了，牛！
user-0 提问: 冒泡排序

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 3 楼 哇咔咔biu 的回复:[quote=引用 2 楼 自信男孩的回复:]首先对ch的scanf是越界访问问题，结果是未定义的。另外str是可变数组，C语言不支持这种定义～ 那请问我可以怎么改呀，我改了几次还是不行[/quote] 首先ch定义为8字节长度，后面的对ch的操作都不需要修改了； 第二定义好二维数组（长度确定），而不是用可变数组；

user: user-0
content: 引用 2 楼 自信男孩的回复:首先对ch的scanf是越界访问问题，结果是未定义的。另外str是可变数组，C语言不支持这种定义～ 那请问我可以怎么改呀，我改了几次还是不行

user: user-2
content: 首先对ch的scanf是越界访问问题，结果是未定义的。另外str是可变数组，C语言不支持这种定义～

user: user-3
content: 第24行改为：for(j=0;j<m-i-1;j++)
user-0 提问: ccf ISBN不能拿满分

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考：#include<stdio.h> int main() {         char a[15]={0};         int i,sum=0,j=1;         scanf("%s",&a) ;         for(i=0; i<11; i++) {             if(a[i]>='0' && a[i]<='9') {                sum+=(a[i]-'0')*j;                j++;             }         }         if((sum%11==(a[12]-'0'))||(a[12] == 'X')){                     printf("Right\n");         } else {                     if(sum%11!=10)                         a[12]=sum%11+'0';                     else                         a[12]='X';                     printf("%s\n",a);         }                  return 0; }
user-0 提问: c语言，输入一个文件（不一定是当前文件夹），如何在同一目录下输出一个文件其文件名为原文件名加上前缀

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: https://blog.csdn.net/a_ran/article/details/41551955

user: user-3
content: 学习一下readdir和rename这两个函数～
user-0 提问: c语言求解

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 可参
user-0 提问: 在python里用def构建函数的时候能不能调用math库啊？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: import math def myfunc():     print(math.sin(30*math.pi/180))

user: user-3
content: 当然可以  你定义的函数里可以调用math库中的函数

user: user-0
content: 引用 1 楼 user-4的回复:不知道你啥意思，def是定义函数的，是在自己函数里面调用math库里的函数？ 对对对，就是不知道能不能这样写

user: user-0
content: 对对对，就是不知道能不能这样写

user: user-4
content: 不知道你啥意思，def是定义函数的，是在自己函数里面调用math库里的函数？
user-0 提问: python的一个作业，不知道哪有问题，这张学的是构建函数和函数调用等等

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: python中range(a,b)表示从a到b-1

user: user-3
content: 可以这么调用，但你的循环变量控制有问题  # -*- coding: UTF-8 -*- import math n = 10 sum = 0 for i in range(1, n+1): 	sum += math.factorial(i) print sum
user-0 提问: 刚学c语言求大佬帮忙解答.

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 基本的结构体使用题目，自己先试着写写吧，不出错，怎么知道结构体不能这么用呢？！
user-0 提问: C语言中关于int与long int

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: https://zh.cppreference.com/w/c/language/arithmetic_types

user: user-3
content: C语言标准规定了一些类型  然后规定了这些类型的最小范围而没有规定精确范围  所以不同平台上的实现不一样  标准制定者跟编译器实现者分离  是导致类问题的根本原因 因为使用C的平台太多了 不同平台有不同平台的需求 所以标准必须要综合各方面利益（俗称和稀泥）

user: user-4
content: 所以才有了 int8,int16,int32,int64类型。

user: user-5
content: int和long的长度是看编译器的，int至少2字节，long不短于int，你说两者相等只能说你的编译器是这样实现的；  对于64位编译器，int是32bit长度，而long int是64bit长度（在64Ubuntu系统下测试）。  你如果用过turbo C，就能知道int表示的范围比long小的；