Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言数据结构

回复:
user: user-1
content: 这个if(q==z==h) ，编译器会翻译成啥样啊？

user: user-2
content: if(q==z==h) 这条语句有问题，建议根据自己的需求改一下。C语言里没有这么写的语句；  不建议使用goto语句，goto语句可以改成循环（for/while/do...while）

user: user-3
content: 用递归为什么不用函数调用而是用goto呢？ goto在这种场景可读性太差了
user-0 提问: 链表不知道怎么哪错了？

回复:
user: user-0
content: 引用 6 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h>  typedef struct Student *PtNode;  struct Student {     int num;     float score;     PtNode Next; };  PtNode Creat (void) {     PtNode P, head, temp;      head = NULL;     temp= (PtNode)malloc (sizeof(struct Student));     scanf("%d%f", &temp->num, &temp->score);     while (temp->num != 0){         if(head==NULL)             head=temp;         else             P->Next=temp;         P=temp;         temp = (PtNode)malloc(sizeof(struct Student));          scanf("%d%f", &temp->num, &temp->score);     }     free(temp);   //free the node which not used     //P->Next==NULL;     P->Next = NULL;      return head; }  int main() {     PtNode pt;     pt = Creat();      while (pt!=NULL){         printf("\n%d %4.1f\n", pt->num, pt->score);         pt = pt->Next;     }      return 0; }  参考一下吧，除了==导致的不能退出之外，还有一个重要问题，那就是把最后一个temp释放了，因为这个temp没有加入到你的链表里，需要释放掉，防止内存泄露谢谢兄弟的提醒

user: user-0
content: 我已经找到问题了，在创建链表结束时赋值运算=写成了==，改回就好了，谢谢大家。

user: user-0
content: 引用 2 楼 niiiloc 的回复:死循环问题的关键就是看准退出循环的条件  是的，但是我不知道代码的输出部分有什么问题，能麻烦兄弟讲解一下么？

user: user-0
content: 引用 1 楼 King_of_Kindom 的回复:你的运行结果可以发一下吗  运行结果如下图，而且还在一直循环下去 麻烦兄弟帮忙看看，谢谢了

user: user-1
content: 死循环问题的关键就是看准退出循环的条件

user: user-2
content: 你的运行结果可以发一下吗

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

user: user-4
content: #include<stdio.h> #include<stdlib.h>  typedef struct Student *PtNode;  struct Student {     int num;     float score;     PtNode Next; };  PtNode Creat (void) {     PtNode P, head, temp;      head = NULL;     temp= (PtNode)malloc (sizeof(struct Student));     scanf("%d%f", &temp->num, &temp->score);     while (temp->num != 0){         if(head==NULL)             head=temp;         else             P->Next=temp;         P=temp;         temp = (PtNode)malloc(sizeof(struct Student));          scanf("%d%f", &temp->num, &temp->score);     }     free(temp);   //free the node which not used     //P->Next==NULL;     P->Next = NULL;      return head; }  int main() {     PtNode pt;     pt = Creat();      while (pt!=NULL){         printf("\n%d %4.1f\n", pt->num, pt->score);         pt = pt->Next;     }      return 0; }  参考一下吧，除了==导致的不能退出之外，还有一个重要问题，那就是把最后一个temp释放了，因为这个temp没有加入到你的链表里，需要释放掉，防止内存泄露
user-0 提问: windows C语言读取注册表获取已安装软件信息与控制面板中的信息不一致的问题

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:有时候信息可能存放在\HKEY_USERS中 HKEY_USERS中安装程序的信息很少，就算加上都不够

user: user-0
content: 引用 2 楼 qaz952727 的回复:楼主要注意32和64位的区别就可以了 我从这两个位置取的数据：HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall 和HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall 32位和64位的安装位置都有吧，还有其他的位置么

user: user-1
content: 楼主要注意32和64位的区别就可以了

user: user-2
content: 有时候信息可能存放在\HKEY_USERS中
user-0 提问: CreateProcess为什么很多命令都不能正确执行？而system却可以？！

回复:
user: user-0
content: 最后使用createprocess调用cmd完成了

user: user-1
content: CreateProcess相当于在“运行”里面输入命令 system相当于运行cmd后在控制台界面输入命令。
user-0 提问: 求解大佬，这段代码，改了下变量声明的顺序，就会出现完全不一样的结果

回复:
user: user-1
content: 引用 楼主 qq_40952763 的回复:今天测试strcpy溢出时候发现的 1. void main(void){ char outputvalue[16]; char inputvalue[21] = {"12345678901234567890"}; strcpy(outputvalue,inputvalue); printf("%s\n",&inputvalue); printf("%s\n",&outputvalue); } 2. void main(void){ char inputvalue[21] = {"12345678901234567890"}; char outputvalue[16]; strcpy(outputvalue,inputvalue); printf("%s\n",&inputvalue); printf("%s\n",&outputvalue); }  就改了下声明时间的顺序，就会导致结果不一样。。。    我思考的结果是，先声明的变量，占用了后面的内存，而后声明的变量，内存却在先声明的前面。。。 内存越界导致覆盖了附近声明的其他变量，讨论具体覆盖了谁没有意义。

user: user-0
content: 今天了解到的，x86栈向下生长，大概就是这个原因了

user: user-2
content: 要不怎么说strcpy不安全呢！

user: user-3
content: 写法是错的，内存越界 打印不一样只是栈内存被覆盖罢了

user: user-4
content: 你这个strcpy涉及到了非法内存操作（源字符串大于目标字符串长度），在不知名的内存上保存东西，本来就存在风险性，当打印这个字符串时，也会有不定的错误存在，自然而然有时结果就不一样了

user: user-5
content: 另外，在我的Linux系统下，交换声明的前后顺序结果还是一样的。都是第一种输出，这个跟编译器可能还是有一定关系的

user: user-5
content: printf("out: %p, in: %p\n", outputvalue, inputvalue); 加上这样一条语句（在strcpy之前加上这条语句）你就能理解为什么结果不一样了。另外，需要了解的strcpy是遇到'\0'停止拷贝，而不关心目标串的长度
user-0 提问: 静态变量

回复:
user: user-1
content: static 的i是程序刚运行时创建的，作用范围是{ }以内，所以最后的 i 的值3是main里经过循环得出的3，而不是循环里的。而循环里的 i 在循环期间一直存在，所以值不断累加，第一次 1+1*1得2，第二次2+2*2得6，第3次6+6*6得42。至此，所有结果已经明了。

user: user-2
content: 写这样的程序莫不是想不开吧，干嘛好几层作用域都定义i

user: user-3
content: 最好不要重名变量，作用域不一样，直接观察有时候会没注意

user: user-4
content: int i = 0; static int i=1;  你这是估计测试作用域的么？没有困难制造困难也要上。。。

user: user-5
content: for里面的静态变量只初始化一次

user: user-6
content: 谁这么写代码必然会被开除

user: user-7
content: 这么给你说吧，for循环外边的i是个定义在栈上的变量，for里面的i是定义在静态储存域上的变量，所以两个i的内存域就不同，for内部的以局部静态变量来运行，外部以局部临时变量来运行

user: user-8
content: 这个是一个变量作用域和生命周期的一个问题，建议不要同一个变量名出现在同一个函数内或语句块内？

user: user-9
content: for循环里面的i把外面的i给屏蔽了，所以外面循环的i从0加到3，最后输出3，代表了循环次数。里面的i声明为静态变量，只初始化一次，第一次循环结果1+1*1=2，第二次2+2*2=6，第三次6+6*6=42，跳出循环，结束。这里面注意两个点，一是作用域小的变量会屏蔽作用域大的变量，二是静态变量只初始化一次。

user: user-10
content: fot局部静态变量i和全局变量

user: user-11
content: 注意下命名。
user-0 提问: 关于异或的问题，小菜鸡求助~~~~

回复:
user: user-1
content: 拆成3部分看就明白了a＝a^b； b＝a^b； a＝a^b;最后a和b交换了数值

user: user-2
content: 从左至右，而不是从右至左。

user: user-3
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-3
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-4
content: 如果不懂这样的表达式，建议分开写（如果自己去写的话）。写出的代码除了自己懂以外，也是需要让别人看懂才行的。

user: user-5
content: 首先 这种写法 又蠢又恶心  然后 你忘记了 考虑 最右边的操作 a^=b 这里 a已经不是a了 是a^b的结果 后面 你说的 b = 原来的a  这里没问题  最后是 a ^= b 这里是 a = a^b a是 最开始a^b的结果 b你前面说了是 原来的a 原来a^原来b^原来a a 结果原来b

user: user-6
content: a^=b^=a^=b  1. a^=b     a=a^b  b=b 2. b^=a     a=a^b b=b^(a^b)=a 3. a^=b     a=(a^b)^a=b  b=a
user-0 提问: 关于求完数的一题，小菜鸡求大神帮帮忙~~~

回复:
user: user-1
content: 引用 5 楼 小丫么小菜鸡 的回复:引用 3 楼 niiiloc 的回复：你就不能学学调试么？你问的所有问题都能自己调试解决我用的dev++工具，如何调试呀  请在关键节点加入printf打印，这就是一种调试方式：通过打印来调试

user: user-0
content: 引用 3 楼 niiiloc 的回复：你就不能学学调试么？你问的所有问题都能自己调试解决我用的dev++工具，如何调试呀

user: user-2
content: 24不是完数。  1+2+3+4+6+8+12 != 24。。  问题原因在于，下面这个部分。。不是把约数加到等于原数字。。而是把所有约数相加，如果等于原数字。才是完数。  if(sum==i) {   flag=1;   break;  }    改了一下程序（简单改了一下，规范性，健壮性什么的没有改），运行后（100以内的约数），就是正确的了。   #include<stdio.h> int main(){   int n,m,count=0;   int sum;   int flag;   int a[20];   scanf("%d",&n);   scanf("%d",&m);   for(int i=n;i<=m;i++){     for(int z=0;z<=19;z++){       a[z]=0;     }      count =0;     flag = 0;     sum = 0;      for(int j=1;j<i;j++){       if((i%j) == 0){         a[count]=j;         sum+=j;         count++;       }     }      if(sum == i){       flag = 1;     }      if(flag==1){       for(int z=0;z<=count;z++){           printf("%d,%d",sum,a[z]);           printf("\n");       }     }   } }

user: user-3
content: #include <stdio.h> #include <string.h> int isPerfectNum(int value); int main(){ 	for(int i=1;i<1001;i++){ 		if(!isWanshu(i)){ 			printf("%d\n",i); 		} 	} 	getchar(); 	return 0; } int isPerfectNum(int value){ 	int iRet=0; 	int sum=0; 	for(int i=1;i<value/2+1;i++){ 		if(value%i==0){ 			sum+=i; 		} 	} 	if(sum==value){ 		iRet=0; 	}else{ 		iRet=1; 	} 	return iRet; }

user: user-1
content: 你就不能学学调试么？你问的所有问题都能自己调试解决

user: user-4
content: #include<stdio.h>  int main() {     int n,m,cnt=0;     int sum;     int a[20];     scanf("%d",&n);     scanf("%d",&m);      for(int i = 0; i <= 19; i++)         a[i] = 0;      for(int i = n; i <= m; i++) {         if (i % 10 != 6 && i % 10 != 8)    //根据完全数的特质，必须是6/8结尾的数；             continue;          sum = 0;         for(int j = 1; j <= i / 2; j++) {    //除于2，来减少循环次数，提高效率             if(i%j == 0)                 sum += j;         }         if(sum == i)             a[cnt++] = i;      }      for(int i = 0; i < cnt; i++){         printf("%d ", a[i]);     }     printf("\n");      return 0; }  参考一下吧；  根据完全数的特质可以提高程序的运行效率；
user-0 提问: 关于对指针进行&运算

回复:
user: user-1
content: C语言的核心灵魂就是指针，这是其他语言所没有的。

user: user-2
content: 引用 28 楼 qq_43807092的回复:[quote=引用 3 楼 jiaoyun007的回复:][quote=引用 1 楼 qq_40260025 的回复:] 定义一个指针: char *p;  它此时代表一个地址，因为你没有对它初始化，所有它指向的地方可能非法，但你仍然可将它看作一个地址。 而   &p 就是对指针取地址，即地址的地址。 p已经是内存区间一个具体地址了，那它地址的地址，指的什么呢？[/quote] P为0*00000000作为指针时是一个地址。[/quote] 对p取地址时，这时p是一个数，相当于对这个数取地址。

user: user-2
content: 引用 3 楼 jiaoyun007的回复:[quote=引用 1 楼 qq_40260025 的回复:] 定义一个指针: char *p;  它此时代表一个地址，因为你没有对它初始化，所有它指向的地方可能非法，但你仍然可将它看作一个地址。 而   &p 就是对指针取地址，即地址的地址。 p已经是内存区间一个具体地址了，那它地址的地址，指的什么呢？[/quote] P为0*00000000作为指针时是一个地址。

user: user-2
content: 引用 3 楼 jiaoyun007的回复:[quote=引用 1 楼 qq_40260025 的回复:] 定义一个指针: char *p;  它此时代表一个地址，因为你没有对它初始化，所有它指向的地方可能非法，但你仍然可将它看作一个地址。 而   &p 就是对指针取地址，即地址的地址。 p已经是内存区间一个具体地址了，那它地址的地址，指的什么呢？[/quote] *是指向的意思?，求解

user: user-3
content: 你就把char*看作数据类型，取地址是一种运算，p本身存储的是一个字符串的首地址，而对p取地址之后，得到的就是p对应存储单元的地址，是char**类型

user: user-4
content: *p 是一个指针，所指向的存储空间的地址存在p中。&p的话就是p的地址，也即存 指向存储空间地址 的存储空间的地址。

user: user-5
content: 感谢分享，小白刚好学到指针

user: user-6
content: char *p;    这是定义一个变量；既然是定义变量那么这个变量（变量名是p,类型是char*)就有一个内存空间,这个内存空间就有一个地址，这个地址就是变量p的地址，即&p.        p的类型是char*也就是说p是个指向char类型数据的指针，p中存放的数据是一个char类型数据的地址，而&p，也就是p的地址，p是char*类型，&p类型就是char**, 所以如果要存放&p应该用char **pointer;来存放，意思是pointer是个指针，  存放的地址类型是char*类型数据（p）的地址（&p）。    或者简单地说p这个指针是来存放别人的地址的，&p是p自身的地址（因为p也是个变量，也有内存空间）。

user: user-7
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-8
content: 插嘴一句，指针搞不明白，，，，学习c很艰辛

user: user-9
content: 指针取地址就是二维指针，再取地址就是三维了，嘿嘿

user: user-10
content: char *p 相当于定义一个变量p的指针（可以理解同时做了定义变量p和变量p的指针两件事），可以是值或者字符串之类的，而&p表示这个获得变量p在内存中的存储地址，是一个固定的值，也就是获得*p所指向的地址值。 所以你的函数中&p1,&p2作为一个地址值一直没变，而p1与p2则随着你的定义与赋值而变。 仅个人理解，有问题请指出。

user: user-11
content: p1对应的是指针变量里的值，&p1是指变量p1的地址，这个地址是栈上的地址，因为p1是局部变量。 由于p1指向0，即指向NULL，那就是0地址；&p1就是一个函数func3栈上的地址； p2指向的地址是随机的，所以输出p1的地址是一个随机的地址，&p2和&p1一样是局部变量，并且是挨着的，所以地址值相差4(32位系统）；   下面p1, p2都指向了"abc"的首地址，因此输出的p1, p2是相同的，同样&p1, &p2的地址没有变化那也是上面一样的值。

user: user-12
content: 引用 3 楼 jiaoyun007 的回复:[quote=引用 1 楼 qq_40260025 的回复:] 定义一个指针: char *p;  它此时代表一个地址，因为你没有对它初始化，所有它指向的地方可能非法，但你仍然可将它看作一个地址。 而   &p 就是对指针取地址，即地址的地址。 p已经是内存区间一个具体地址了，那它地址的地址，指的什么呢？[/quote] 形成了一个临时变量。

user: user-13
content: 指针实质是一段数字 对指针取地址就是获取这段数字在内存中的位置

user: user-0
content: 结贴了，谢谢各位！

user: user-0
content: 引用 18 楼 zhao4zhong1 的回复:十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495 好好看看！！

user: user-0
content: 引用 12 楼 sinat_37764097 的回复:这个问题的确能让初学者头疼，  多谢画图！！

user: user-7
content: 十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-7
content: 引用 16 楼 jiaoyun007 的回复:[quote=引用 11 楼 zhao4zhong1 的回复:] http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 您是大鳄，哈哈！[/quote]
user-0 提问: 求助   关于C# byte数组转化为image的相关问题！

回复:
user: user-0
content: 好的 谢谢楼上的大佬

user: user-1
content: c#的论坛在这： https://bbs.csdn.net/forums/CSharp

user: user-0
content: 今天回来测试了一下  连上了开发板（含有stm32单片机和ov7670）进行测试，一开始由于忘记修改图像像素大小（之前改了下写的是240X320）导致图像显示模糊，而且显示的图像大小也有问题：      经过调整后（将显示的bitmap像素大小修改为120X160） 用摄像头对准二维码：   上位机显示部分居然能显示出部分的二维码：   而且清晰度也还是可以的：   目前为止 最主要的问题就是 采集的图像不能完整的显示出来，有大神知道这个是什么问题么？
user-0 提问: 求助：结构体使用不知道哪里出了错，打.或者->都没有那个展开的选项

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复：[quote=引用 2 楼 cfjtaishan 的回复:] #include<stdio.h>  #define M 10 typedef struct{     int key; //}HashTable[m]; }HashTable;  #define NULLKEY 0  int H(int key){     return key % M; } int SearchHash(HashTable *HT,int key){     int H0,Hi;     H0=H(key);     if(HT[H0].key==NULLKEY)         return -1;     else if(HT[H0].key==key)         return H0;     else{         for(int i=1;i<M;i++){             Hi=(H0+i) % M;             if(HT[Hi].key==NULLKEY)                 return -1;             else if(HT[Hi].key==key)                 return Hi;         }         return -1;     }      return 0; } void InsertHT(HashTable *HT,int key,int n) {     int a;     a=key % M;     //if(HT[n].key) }  void CreateHT(HashTable *HT,int x[]){     int i;     for(i=0;i < M+1;i++){         HT[i].key=-1;     }     for(i=0;i<M+1;i++){         InsertHT(HT, x[i], i);     } }  int main() {     HashTable HT[M];     int x[]={65,22,74,13,28,89,41,85,93,40,27};     H(1);     SearchHash(HT,1);     return 0; } 对比一下，建议注意一下typedef的使用[/quote]谢谢^_^

user: user-1
content: 引用 2 楼 cfjtaishan 的回复:#include<stdio.h>  #define M 10 typedef struct{     int key; //}HashTable[m]; }HashTable;  #define NULLKEY 0  int H(int key){     return key % M; } int SearchHash(HashTable *HT,int key){     int H0,Hi;     H0=H(key);     if(HT[H0].key==NULLKEY)         return -1;     else if(HT[H0].key==key)         return H0;     else{         for(int i=1;i<M;i++){             Hi=(H0+i) % M;             if(HT[Hi].key==NULLKEY)                 return -1;             else if(HT[Hi].key==key)                 return Hi;         }         return -1;     }      return 0; } void InsertHT(HashTable *HT,int key,int n) {     int a;     a=key % M;     //if(HT[n].key) }  void CreateHT(HashTable *HT,int x[]){     int i;     for(i=0;i < M+1;i++){         HT[i].key=-1;     }     for(i=0;i<M+1;i++){         InsertHT(HT, x[i], i);     } }  int main() {     HashTable HT[M];     int x[]={65,22,74,13,28,89,41,85,93,40,27};     H(1);     SearchHash(HT,1);     return 0; } 对比一下，建议注意一下typedef的使用

user: user-1
content: #include<stdio.h>  #define M 10 typedef struct{     int key; //}HashTable[m]; }HashTable;  #define NULLKEY 0  int H(int key){     return key % M; } int SearchHash(HashTable *HT,int key){     int H0,Hi;     H0=H(key);     if(HT[H0].key==NULLKEY)         return -1;     else if(HT[H0].key==key)         return H0;     else{         for(int i=1;i<M;i++){             Hi=(H0+i) % M;             if(HT[Hi].key==NULLKEY)                 return -1;             else if(HT[Hi].key==key)                 return Hi;         }         return -1;     }      return 0; } void InsertHT(HashTable *HT,int key,int n) {     int a;     a=key % M;     //if(HT[n].key) }  void CreateHT(HashTable *HT,int x[]){     int i;     for(i=0;i < M+1;i++){         HT[i].key=-1;     }     for(i=0;i<M+1;i++){         InsertHT(HT, x[i], i);     } }  int main() {     HashTable HT[M];     int x[]={65,22,74,13,28,89,41,85,93,40,27};     H(1);     SearchHash(HT,1);     return 0; }

user: user-2
content: 这个没事，看你使用的软件规定的书写格式
user-0 提问: 如果 va_end只是把 指针指向0位置, 那实际这行代码不是必须的?!

回复:
user: user-1
content: 得看堆栈是否平衡。

user: user-0
content: 引用 2 楼 weixin_41724510 的回复:va_end(argptr); 这行代码的作用是清理工作，相当于释放动态分配的内存，也就是free(); 只有在调用va_end(argptr); 之后，再使用va_start重新初始化argptr后，才能使用变量argptr。 当然，自己试试去掉有没有影响即可。   试过了，自己有个可变参数的函数，短时间内重复调用这个函数没毛病。 但是长时间不知道会不会有隐患

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:去掉试试不就知道了。   试过了，自己有个可变参数的函数，短时间内重复调用这个函数没毛病。 但是长时间不知道会不会有隐患

user: user-2
content: va_end(argptr); 这行代码的作用是清理工作，相当于释放动态分配的内存，也就是free(); 只有在调用va_end(argptr); 之后，再使用va_start重新初始化argptr后，才能使用变量argptr。 当然，自己试试去掉有没有影响即可。

user: user-1
content: 去掉试试不就知道了。
user-0 提问: win7下运行的控制台程序，如何设置ctrl+v来输入字符串？

回复:
user: user-1
content: 用鼠标是可以粘贴，至于复制，就不清楚了。

user: user-2
content: 不支持快捷键而已，可以鼠标左键选择，用鼠标右键的快捷菜单操作。

user: user-3
content: 快速编辑模式下，点击鼠标右键粘贴；按住鼠标左键拖动选择，单击鼠标右键拷贝。
user-0 提问: C语言十进制转二进制

回复:
user: user-1
content: #include<iostream> using namespace std; void main() {    int n,i,j=0;    int a[1000];    cin>>n;    i=n;    while(i)    {     a[j]=i%2;     i/=2;     j++;         }    for(i=j-1;i>=0;i--)     cout<<a[i];    cout<<endl; }  https://blog.csdn.net/qq_41446560/article/details/80034932 网上都有，自己搜一下。

user: user-2
content: 使用除2取余

user: user-3
content: #include <cstdio> #include <cstdlib>  int main() { 	int nums[1000];  	int c; 	int len = 0; 	printf("请输出一个十进制数字，以#号键结束(例如 9527# )\n: "); 	while ((c = getchar()) != '#') 	{ 		nums[len++] = c - '0'; 	}  	printf("十进制: "); 	for (int i = 0; i < len; ++i) 		printf("%d", nums[i]); 	printf("\n");  	int bins[3322]; 	int blen = 0;  	int beg = 0; 	while (beg != len) 	{ 		int mod = 0; 		bool z = true; 		for (int i = beg; i < len; ++i) 		{ 			int s = mod * 10 + nums[i];  			mod = s % 2; 			nums[i] = s / 2;  			if (z) 			{ 				if (nums[i] == 0) 					++beg; 				else 					z = false; 			} 		}  		bins[blen++] = mod; 	}  	printf("二进制: "); 	for (int i = blen - 1; i >= 0; --i) 	{ 		printf("%d", bins[i]);  		//if (i % 4 == 0) 		//	printf(" "); 	} 	printf("\n");  	system("pause");  	return 0; }

user: user-4
content: 有个库函数   itoa，你搜搜。

user: user-1
content: 引用 4 楼 htttw 的回复:不是这个意思，是n本身就是1000位长度的，用一个int肯定放不下啊 http://blog.51cto.com/9492221/1564392，这是超长10进制转16进制的例子。稍微改改就可以了

user: user-0
content: 引用 2 楼 housecarl 的回复:#include<iostream> using namespace std; void main() {    int n,i,j=0;    int a[1000];    cin>>n;    i=n;    while(i)    {     a[j]=i%2;     i/=2;     j++;         }    for(i=j-1;i>=0;i--)     cout<<a[i];    cout<<endl; }  https://blog.csdn.net/qq_41446560/article/details/80034932 网上都有，自己搜一下。   不是这个意思，是n本身就是1000位长度的，用一个int肯定放不下啊

user: user-0
content: 引用 1 楼 zhouqunhai 的回复:使用除2取余  1000位长度的十进制数怎么除2？
user-0 提问: strcpy函数中为什么不能直接return strDest呢？而使用另外的一个指针address？

回复:
user: user-1
content: strDest已经在循环中不断++走远了，已经不是原来的strDest了

user: user-2
content: 因为这个操作：strDest++，这个操作就是已经将strDest指向了目标串的末尾，返回目标串的末尾没有意义，应该返回的是目标串的首地址

user: user-3
content: 函数传递，strDest只是局部变量发生变化了

user: user-4
content: 优先级是 ++ > * 的，所以，strDest的地址已经发生偏移了，指向的不是原来的地址了，建议这种问题直接调试，观察地址和内存的变化

user: user-5
content: strDest 已经++了啊，当然如果你不关心这个函数的返回值，那返回啥都没关系的，不影响拷贝的结果。

user: user-6
content: strDest 指针已经被不断++ 赋值 了。地址已经飘远了。不是字符串首地址了
user-0 提问: 调和级数

回复:
user: user-0
content: 这是c和Java。当初一起写的，所以就一起放出来了。

user: user-0
content: enmm其实就是一道题，然后我给代码直接放出来了。

user: user-1
content: 问题是什么？不同语言计算结果不一样？那可能是精度的关系

user: user-2
content: 展示下c++, c, java的实现差别？

user: user-3
content: 楼主的问题是什么？

user: user-4
content: 有什么问题吗？结果呢？
user-0 提问: 求问该算法题，小白不会代码，求大佬的代码！要能运行的（C语言）

回复:
user: user-1
content: 要么自学问点重点问题，要么给钱叫人帮忙做。

user: user-2
content: 看不了这么长的问题，估计有时间回答问题的人也不多吧

user: user-3
content: 福大的吧。

user: user-4
content: 每次过来求作业答案，累不累啊

user: user-5
content: 我靠，打星际的时候，如果神族的水晶塔都让人拆了，就直接gg了，还修啥啊。。。。

user: user-0
content: 不好意思，输入样例有误，第二组最后一行输入1 6，是不需要的，可以忽略！！
user-0 提问: 问道算法题，求能运行的代码，各位大佬！（C语言）

回复:
user: user-1
content: 还好不是后羿，不然我们都该同情嫦娥了。。。 这题可能的解法： 1. 算出n个箭支的总长度，代码用for循环累加就行了。 2. 找出总长度的所有可能的约数/因子，貌似还是for循环 3. 找出n个箭支的最大长度，没必要排序，还是for 循环一个个比下去 4. 列出所有大于等于最大长度的约数就是结果吧  这个貌似就是考验for循环的使用？
user-0 提问: 奇怪的 指针转换，求解

回复:
user: user-0
content: 1. 编译没问题，就是运行出错。 2. short_t 这个结构体，就是用于强制字节序的。  3. 单独gcc 跑了一下，一点问题没有，也不存在越界 #include <stdio.h>   2 #include <stdint.h>   3    4 typedef struct {   5     int8_t low  ;   6     int8_t hig   ;   7 }short_t ;   8    9 void main()  10 {  11     short_t data[10] ;  12     data[0].low = 1 ;  13     data[0].hig = 2 ;  14     data[1].low = 3 ;  15     data[1].hig = 4 ;  16   17     int i ;  18     for( i = 2; i < 10; i++ )  19     {  20         data[i] = *(short_t*)&i ;  21     }  22   23     for(i = 0 ; i < 10 ; i++ )  24     {  25         printf("%x \n", (*(int16_t*)((int8_t*)((char*)&(data[i])))) );  26     }  27 }  输出： 201  403  2  3  4  5  6  7  8  9  总结： 一点问题没有，也许嵌入式端编译器的锅？？

user: user-1
content: 注意下类型长度以及偏移

user: user-2
content: 这个参考下前面的一个帖子，指针和数组在取地址符时候结果并不一样

user: user-3
content: 前面说的方法, 都有一个前提.  字节序相同哈.  字节序不同, 是不能这样直接拿的.

user: user-3
content: 取个值需要这么复杂吗?  char buf[0x100];  short val =  *(short*)&buf[4]; //可以直接把第5个字节起的2个字节,解析成一个short类型.  其它类型, 都可以参考这样来取值.  int val =  *(int*)&buf[4];  doubble val =  *(doubble *)&buf[4];  .......

user: user-4
content: 求解为什么会这样

user: user-5
content: 你把类型定义里面的low和high位置交换一下试试。
user-0 提问: 求一段C语言的遍历中英文组合的char方法！

回复:
user: user-1
content: 为什么不直接用wchar_t呢？

user: user-2
content: 引用 6 楼 smwhotjay 的回复:分割含有中英文的字符串  字符串 中文分割 汉字分割 是否有开放的c语言工具类直接使用。

user: user-3
content: 分割含有中英文的字符串  字符串 中文分割 汉字分割

user: user-3
content: 这个问题 应该叫 中文分割。

user: user-2
content: 引用 3 楼 cfjtaishan 的回复:char s = "ABC123你好"; 这句如果是依据代码是有问题，s是一个字符，后面是一个字符串； 改成如下，是可以的 const char *s = "ABC123你好";  接下来就是另一个问题了：ABC123是都可以输出的，对于中文不是用一个字符表示的 对的，我尝试过wchar等方法，一直没能实现。

user: user-4
content: char s = "ABC123你好"; 这句如果是依据代码是有问题，s是一个字符，后面是一个字符串； 改成如下，是可以的 const char *s = "ABC123你好";  接下来就是另一个问题了：ABC123是都可以输出的，对于中文不是用一个字符表示的

user: user-2
content: 引用 1 楼 baiywcwttfln 的回复:这要看你char 是什么编码，gbk 还是utf8 您好，char的声明方式上是可以指定编码方式吗？按照以上的声明方式是什么编码

user: user-5
content: 这要看你char 是什么编码，gbk 还是utf8
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-2
content: 不难，基础要好一点就能推出来！

user: user-3
content: http://www.doc88.com/p-2819102704066.html 看看这篇文章，多加了一层积分

user: user-0
content: 引用 1 楼 user-4 的回复:https://blog.csdn.net/seek97/article/details/81294097?utm_source=blogkpcl6  看看这篇 一阶互补我理解了，就是二阶的不懂

user: user-4
content: https://blog.csdn.net/seek97/article/details/81294097?utm_source=blogkpcl6  看看这篇
user-0 提问: 求大神看看我最大公约数错在哪了~

回复:
user: user-1
content: 返回0其实也是没问题的，仔细看，楼主的gcd函数里面是有个输出的，所以说返回什么都无所谓，只要保存了结果就好，重点是在那个if上。从另一方面说，这种子函数里面不建议直接打印值，可参考楼上代码。

user: user-2
content: #include <stdio.h>  int gcd(int x,int y);  int main() {     int x;     int y;     int z;     scanf("%d",&x);     scanf("%d",&y);     z=gcd(x,y);     printf("%d\n",z); }  int gcd(int x,int y) {     int t;     while (y != 0){         t=x%y;         x=y;         y=t;     }      return x; } 参考一下吧

user: user-3
content: 两个问题，  函数gcd 里面if 改成while 返回值是x ，而不是直接返回0

user: user-4
content: gcd函数永远返回0 ？ 我总感觉这里贴代码的人在害楼主而不是帮他

user: user-5
content: #include<stdio.h> int main() {     int m, n, temp, i;     printf("Input m & n:");     scanf("%d%d", &m, &n);     if(m<n)  /*比较大小，使得m中存储大数，n中存储小数*/     { /*交换m和n的值*/         temp=m;         m=n;         n=temp;     }     for(i=n; i>0; i--)  /*按照从大到小的顺序寻找满足条件的自然数*/         if(m%i==0 && n%i==0)         {/*输出满足条件的自然数并结束循环*/             printf("The GCD of %d and %d is: %d\n", m, n, i);             break;         }         return 0; }

user: user-5
content: 将两个数a，b相除，如果余数c不等于0，就把b的值给a，c的值给b，直到c等于0。
user-0 提问: 关于调用函数的一题，我小白，求大神帮帮忙~！

回复:
user: user-1
content: #include <stdio.h> #include<math.h>  double funcos(double e,double x);  int main(int argc, char **argv) {     double x;     double e;     scanf("%lf", &e);     scanf("%lf", &x);     double cos;     cos=funcos(e, x);     printf("%lf\n",cos);      return 0; }  double funcos(double e,double x) {     double sum = 0;     double t;     int den = 0, flag = 1;     int result = 1, i;      do {         t = 1.0 * flag * pow(x, den)/result;         sum += t;         den += 2;          result = 1;         for(i = 1; i <= den; i++)             result *= i;         flag = -flag;     } while(fabs(t) < e);      return sum; }  参考一下吧， 注意每次result的值每次都要复位（赋值1）

user: user-2
content: 这个函数不对吧，这个。。。cos转换成啥式子来这？

user: user-3
content: 书上写的是错的

user: user-4
content: 学他的语法结构就行了 至于算法结果  确实错了
user-0 提问: 求树的高度/深度（非二叉树）

回复:
user: user-1
content: 大佬能给个解答啊   刚刚也遇到这个问题了

user: user-2
content: 和二叉树区别不大。就是从2变成了x（0<x<某个正整数》）

user: user-0
content: 算了，我弄出来了

user: user-3
content: m度树 求树高应该怎么编写啊
user-0 提问: 关于一道数组循环问题，求大神帮帮忙看看.

回复:
user: user-0
content: 引用 6 楼 cfjtaishan 的回复:#include <stdio.h>  int main(int argc, char **argv) {     int n;     int m;     int flag;      scanf("%d",&n);     int num1[n];     for(int i=0;i<n;i++){         scanf("%d", &num1[i]);     }      scanf("%d",&m);     int num2[m];     for(int i=0;i<m;i++){         scanf("%d",&num2[i]);     }      for(int i=0;i<n;i++) {         flag=0;         for(int j=0;j<m;j++){             if(num1[i]==num2[j]){                 flag = 1;                 break;              }         }         for(int k=0;k<i;k++){             if(num1[k]==num1[i]){                 flag=1;                 break;             }         }         if(flag==0){             printf("%d  ",num1[i]);         }       }      printf("\n");      for(int i=0;i<m;i++){         flag=0;         for(int j=0;j<n;j++){             if(num1[j]==num2[i]){                 flag=1;                 break;             }         }         for(int k=0; k<i;k++){             if(num2[k]==num2[i]){                 flag=1;                 break;             }         }         if(flag==0){             printf("%d  ",num2[i]);         }     } }  不过，建议把n作为循环变量的地方改成k，这样可能会更好理解一些，不然代码看着不易理解。 改成k之后，测试过，能得到预期的结果。 ------------------------------------------------------------------------------------------------- 不好意思啊，我刚用dev++，运行无异常，所以我结贴了。。。。 突然间一分钟后你回复了，不然我就给你分了.  不好意思了 大神

user: user-1
content: #include <stdio.h>  int main(int argc, char **argv) {     int n;     int m;     int flag;      scanf("%d",&n);     int num1[n];     for(int i=0;i<n;i++){         scanf("%d", &num1[i]);     }      scanf("%d",&m);     int num2[m];     for(int i=0;i<m;i++){         scanf("%d",&num2[i]);     }      for(int i=0;i<n;i++) {         flag=0;         for(int j=0;j<m;j++){             if(num1[i]==num2[j]){                 flag = 1;                 break;              }         }         for(int k=0;k<i;k++){             if(num1[k]==num1[i]){                 flag=1;                 break;             }         }         if(flag==0){             printf("%d  ",num1[i]);         }       }      printf("\n");      for(int i=0;i<m;i++){         flag=0;         for(int j=0;j<n;j++){             if(num1[j]==num2[i]){                 flag=1;                 break;             }         }         for(int k=0; k<i;k++){             if(num2[k]==num2[i]){                 flag=1;                 break;             }         }         if(flag==0){             printf("%d  ",num2[i]);         }     } }  不过，建议把n作为循环变量的地方改成k，这样可能会更好理解一些，不然代码看着不易理解。 改成k之后，测试过，能得到预期的结果。

user: user-2
content: 编译就有问题吧 你代码问题在for循环里面的局部变量混乱不清 29/52行都有问题，你的n已经用作数组长度，为什么还拿来做循环递增的变量？

user: user-0
content: 引用 3 楼 qq_36790578 的回复:int num[n]; 怎么编译通过的 c99以后数组定义都可以用变量定义长度

user: user-3
content: int num[n]; 怎么编译通过的

user: user-4
content: 把 n  m 都改为4， i 去掉重复初始化，  运行输出就是   5 7 2 3  逻辑好像没 问题

user: user-5
content: 第8\24行能编译过么
user-0 提问: 关于求解一个递归函数的时间复杂度的问题

回复:
user: user-1
content: 算时间复杂度是可以作简化的，题目没要求求Tn的值

user: user-2
content: T(n) = n + T(n-1) / 2，将n和/2都看成是常量

user: user-3
content: 递归次数是n次，没毛病
user-0 提问: C语言网--进制转换（C）

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-0
content: 也有其他的方案，只不过这个更简单而已。这是很久之前写的了，因为最近带新生才想起来发。

user: user-1
content: 简单，但不一定高效。

user: user-2
content: printf/scanf是格式话输出和输入函数。既然可以格式化操作，那么就可以按照格式输出不同的数据

user: user-3
content: 没毛病啊，简单高效

user: user-4
content: 没毛病，printf格式化可以搞定

user: user-5
content: 可以啊，可是一些特殊的进制是没有格式符的，而写成进制转换的通用代码是无所谓什么进制的

user: user-6
content: 本身就可以输出啊。

user: user-7
user-0 提问: 哇 智障儿童求教

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h>  #define NUMBER_COUNT 2  int main() { 	int   numbers[NUMBER_COUNT]; 	int   i, value, input; 	char  key = '\0'; 	char* opt = "+-*/"; 	printf("请输入相应数字选择运算方式(ESC退出)：\n1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n"); 	while ((key = _getch()) != 0x1b) //0x1b: ESC  	{ 		srand(time(NULL)); 		for(i = 0; i < NUMBER_COUNT; i++) 			numbers[i] = rand() % 100 + 1; 		switch (key) 		{ 		case '1': 			value = numbers[0] + numbers[1]; 			break; 		case '2': 			value = numbers[0] - numbers[1]; 			break; 		case '3': 			value = numbers[0] * numbers[1]; 			break; 		case '4': 			value = numbers[0] / numbers[1]; 			break; 		default: 			continue; 		} 		printf("\n%d%c%d\n请输入结果：\n", numbers[0],opt[key - '1'],numbers[1]); 		scanf_s("%d",&input); 		fflush(stdin); 		printf("%s", value == input ? "你很棒！\n" : "有点遗憾，继续加油！\n"); 		printf("\n请再次选择运算方式(ESC退出)：\n"); 	} 	system("pause"); 	return 0; }

user: user-2
content: 单步调试很重要，能直观看到问题所在

user: user-3
content: 写好代码就好了，对自己要有自信。 其实你的代码没多大问题，就需要对编程一些细节或者说是编程的陷阱也要多了解一些。这样能让我们更好的运用编好程序。

user: user-3
content: #include<stdio.h> #include<stdlib.h> #include<time.h>  int main() {     int n1, n2, answer, input,flag1;     char flag, c;     flag = 'y';      printf("请输入相应数字选择运算方式：\n1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n我的选择是：");     while (flag != 'N')     {         flag1 = 1;         if (flag == 'y' || flag == 'Y')         {             printf("请再次选择运算方式：\n");         }         srand(time(NULL));         n1 = rand() % 100 + 1;         n2 = rand() % 100 + 1;         scanf_s("%d",&c);         switch (c)         {             case 1:{                        answer = n1 + n2;                        c = '+';                        break;                    }             case 2:    {                            answer = n1 - n2;                            c = '-';                            break;                        }             case 3:    {                            answer = n1 * n2;                            c = '*';                            break;                        }             case 4:    {                            answer = n1 / n2;                            c = '/';                            break;                        }             default:{                         printf("输入有误！\n");                         flag1 = 0;                     }         }          if (flag1) {             printf("%d%c%d\n请输入结果：\n",n1,c,n2);             scanf_s("%d",&input);             if (input == answer)                 printf("你很棒！\n");             else                 printf("有点遗憾，继续加油！\n");         }         printf("继续游戏输入Y，退出输入N\n");         //scanf_s("%c",&flag);         getchar();    //for '\n'         flag = getchar();     }     system("pause");     return 0; } 参考一下吧  解决你的方法就是再加一个getchar();这个操作是为了“吸收”残留在输入缓冲区里的'\n'换行符。 建议flag判断'y'， 'Y'，详见上面的代码

user: user-4
content: scanf_s("%d",&c); 你这个输入能输出case 里面的内容 而不是“输入有误”才奇怪 c是char   应该会转为ascii输出

user: user-5
content: 1. 没有处理回车字符 2. flag1始终为1，没有清零

user: user-0
content: 做题前嘲笑题目智障 结果像狗屎求教大佬鸭
user-0 提问: 嵌入式C，char*字符串组合的问题

回复:
user: user-0
content: 引用 3 楼 英雄@末路 的回复:可能的错误多了 temp没分空间 temp没有记录首地址 temp是函数里临时变量，从函数返回就没了 。。。。 没代码不好猜  最后的结果是没有分配空间。 是我对堆栈的理解还不太到位。

user: user-1
content: 提问题 也至少把需要的都贴出来   你的char* 有没有\0 都不一定

user: user-2
content: 你是不是返回的是temp呢，这只是函数体，建议将整个函数贴出来。如果输出不出来，应该是返回的地址不对

user: user-3
content: 可能的错误多了 temp没分空间 temp没有记录首地址 temp是函数里临时变量，从函数返回就没了 。。。。 没代码不好猜

user: user-4
content: 我也怀疑直接返回temp，要知道temp++后指针（地址）会增加，temp已经不是字符串的首地址了
user-0 提问: 菜鸟问题？？？

回复:
user: user-0
content: 为什么等于12？说一下具体的过程

user: user-1
content: 引用 7 楼 ZiYang1024 的回复:为什么等于12？说一下具体的过程    把这段代码放到编译运行，就能看到答案了。。。

user: user-2
content: 引用 8 楼 cfjtaishan 的回复:#include <stdio.h> #include <stdlib.h>  int *p; void P(int *x) {     int m,n,t;     printf(" ");     scanf("%d%d",&m,&n);      t=*(x+m);     *(x+m)=*(x+n);     *(x+n)=t;  } void R(int *x,int y) {     for(int i=0;i<y/2;i++)         *(x+i)=*(x-y-i);  }  void D(int *x,int y) {     int t;     printf(" ");     scanf("%d",&t);     for(int i=0;i<y;i++)         *(x+i)=*(x+i)/t; }  void M(int *x,int y) {     int t;     printf(" ");     scanf("%d",&t);     for(int i=0;i<y;i++)         *(x+i)=*(x+i)*t; }  void S(int *x,int y) {     int t;     printf(" ");     scanf("%d",&t);     for(int i=0;i<y;i++)         *(x+i)=*(x+i)+t; }  void caozuo(int *x,int y) {     char a;     scanf("%c",&a);     switch(a)     {         case 'S':S(x,y);break;         case 'M':M(x,y);break;         case 'D':D(x,y);break;         case 'R':R(x,y);break;         case 'P':P(x);break;     }  }   int main() {     int n,m;     scanf("%d%d",&n,&m);     printf("\n");      p = (int *)malloc(sizeof(int) * n);     if (!p)         return -1;     for(int i=0;i<n;i++)         scanf("%d",p+n);     getchar();     printf("\n");     for(int j=0;j<m;j++)         caozuo(p,n);     for(int l=0;l<n;l++)         printf("%d ", *(p+l));       free(p);      return 0; }   参考一下吧 使用NULL指针导致的段错误 抱歉发错了

user: user-2
content: #include <stdio.h> #include <stdlib.h>  int *p; void P(int *x) {     int m,n,t;     printf(" ");     scanf("%d%d",&m,&n);      t=*(x+m);     *(x+m)=*(x+n);     *(x+n)=t;  } void R(int *x,int y) {     for(int i=0;i<y/2;i++)         *(x+i)=*(x-y-i);  }  void D(int *x,int y) {     int t;     printf(" ");     scanf("%d",&t);     for(int i=0;i<y;i++)         *(x+i)=*(x+i)/t; }  void M(int *x,int y) {     int t;     printf(" ");     scanf("%d",&t);     for(int i=0;i<y;i++)         *(x+i)=*(x+i)*t; }  void S(int *x,int y) {     int t;     printf(" ");     scanf("%d",&t);     for(int i=0;i<y;i++)         *(x+i)=*(x+i)+t; }  void caozuo(int *x,int y) {     char a;     scanf("%c",&a);     switch(a)     {         case 'S':S(x,y);break;         case 'M':M(x,y);break;         case 'D':D(x,y);break;         case 'R':R(x,y);break;         case 'P':P(x);break;     }  }   int main() {     int n,m;     scanf("%d%d",&n,&m);     printf("\n");      p = (int *)malloc(sizeof(int) * n);     if (!p)         return -1;     for(int i=0;i<n;i++)         scanf("%d",p+n);     getchar();     printf("\n");     for(int j=0;j<m;j++)         caozuo(p,n);     for(int l=0;l<n;l++)         printf("%d ", *(p+l));       free(p);      return 0; }   参考一下吧 使用NULL指针导致的段错误

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

user: user-4
content: 这里面i干什么了？没用了吧~~

user: user-5
content: 等差数列算一下就好了，忽略循环里的打印

user: user-2
content: 建议自己试一下，编程不是只靠看而不靠动手的

user: user-1
content: 12
user-0 提问: c#冒泡程序用了个类怎么return整个数组哇，谁能救救我55555555

回复:
user: user-1
content: public int[] maopao(int[] arr)     {         for (int i = 0; i < arr.Length - 1; i++)         {             if (arr[i] > arr[i + 1])             {                 int k = arr[i];                 arr[i] = arr[i + 1];                 arr[i + 1] = k; ///这里还差个return数组              }         } return arr; }

user: user-2
content: 像第一个类函数定义那样，如果是new的数组，是可以通过返回数组首地址（其实就是指针）； 返回数组就是返回数组名，因为数组名就是数组的首地址

user: user-3
content: c#不懂，到 .Net 分区里面的c# 论坛去问吧。

user: user-4
content: 可以发到这里面 https://bbs.csdn.net/forums/CSharp

user: user-5
content: 有这么多人找不到C#论坛么
user-0 提问: 数据结构中的关于*&的用法

回复:
user: user-1
content: 指针引用。

user: user-2
content: http://www.cppblog.com/doing5552/archive/2010/09/28/127994.html 看下这个帖子, 你就明白了

user: user-2
content: 中的*&L不就是等于L吗？  在定义变量的时候,  这个叫指针变量的引用SqList*&L 相当于 SqList **L   一般是用在函数内部会修改指针的情况下. 比如 void  CreateList( SqList** L) {      *l = new SqList; }  一般不建议这些指针与引用的混用,  有指针的地方, 最好全部用指针, 给后面填坑的兄弟少点障碍.

user: user-3
content: 还没学到C++吧

user: user-4
content: *&是直接引用L，**是用指针间接引用L

user: user-5
content: 这里的& 是引用的意思，并不是取地址的意思。引用是C++中专用的，可以去看一下。

user: user-6
content: 建议看一下C++中的引用。这里是使用&引用。而不是C语言的&然后在SqList *强制类型转换一下。
user-0 提问: 关于循环问题.有一题没思路，求大神帮帮忙~~！！

回复:
user: user-1
content: 由于数字全部为互质数，为了减少运算量，可以找出符合   11   7 【最大数】条件的数字32，每次累加77【为了减少运算量】。 然后整除 5 和 6 查看余数。 效率有一定优化，但不是最好的算法。

user: user-2
content: 最笨的方法 就整除的问题

user: user-3
content: 这个感觉挺简单，假设人数是n，n-1能被5整除，n-5能被6整除，n-4能被7整除，n-10内被11整除，找到这个数字就行了，这个数字肯定比10大，从11开始找，参考代码如下：  #include<stdio.h> void main() { 	int n=11;  	while(!((n-1)%5==0&&(n-5)%6==0&&(n-4)%7==0&&(n-10)%11==0)) 	{ 		n++; 	}  	printf("%d\n",n);    }

user: user-4
content: 韩信，在点兵时，为了知道有多少兵，同时又能保住军事机密，便让士兵排队报数：      按从1至5报数，记下最末一个士兵报的数为1；      再按从1至6报数，记下最末一个士兵报的数为5；      再按1至7报数，记下最末一个士兵报的数为4；      最后按从1至11报数，最末一个士兵报的数为10； 5、6、7、11的最小公倍数是2310。 所以楼主写个循环，for (i=0;i<2310;++i) 如果i同时满足：除以5余1、除以6余5、除以7余4、除以11余10，那么i就是答案。  如果用数学方法求解，用n表示要求算的结果。 n/5余数是1，那么令n=5a+1(a以及后面用到的b、c、d都是非负整数) 从1至6报数，记下最末一个士兵报的数为5，也就是说n/6的余数是5，a=2、8、14、20... 令a=6b+2，并代入n，得到n=30b+11。 按1至7报数，记下最末一个士兵报的数为4；换言之n/7余数是4 n=30b+11=(28b+7)+(2b+4)。其中(28b+7)/7是不会有余数的，所以要保证n/7余数是4，就必须保证(2b+4)/7余数是4 b=0、7、14、21...，所以令b=7c，并代入n，得到n=210c+11。 “最后按从1至11报数，最末一个士兵报的数为10”，也就是说n/11余数是10。 n=210c+11=(209c+11)+c。其中(209c+11)/11不会有余数，所以要保证n/11余10，就必须保证c/11余10。 c=10、21、32、43...所以记c=11d+10。并代入n，得到n=2310d+2111。 所以韩信至少有2111名士兵。

user: user-5
content: 引用 3 楼 ckc的回复:笨办法。 1到11报数，最后一个是10，那么这个数除11余数是10 设置一个循环，从10开始，每次加11， 判断除5是不是余1 判断除6是不是余5 判断除7是不是余4 如果全部都符合，就是答案 不过这个问题数学上有更好的解法 请问还有什么更好的解答，求告诉

user: user-6
content: 这个其实是数学思想，没有数学思想，很难转化成编程语言 从之前楼主三天打鱼两天晒网的问题看，楼主对这类模的问题没啥思路，建议可以从找规律搞起

user: user-7
content: 请参考：中国剩余定理 额外参考：《射雕英雄传》郭靖背着黄蓉去找南僧求医遇阻

user: user-8
content: 笨办法。 1到11报数，最后一个是10，那么这个数除11余数是10 设置一个循环，从10开始，每次加11， 判断除5是不是余1 判断除6是不是余5 判断除7是不是余4 如果全部都符合，就是答案 不过这个问题数学上有更好的解法

user: user-9
content: 从数学上解决这个题应该不难，先从数学上把这个题解决了，然后你的思路就来了，把数学上的解决方法再移植到C++/C

user: user-10
content: #include<iostream> #define SIZE 1000000 using namespace std; int main(void) {     int soldier_num;     for(soldier_num=21;soldier_num<SIZE;soldier_num++)     {         if(soldier_num%5==1&&soldier_num%6==5&&soldier_num%7==4&&soldier_num%11==10)         {             cout<<"the number of the soldier is:"<<soldier_num;             break;         }     } }

user: user-11
content: 效率高，要从数学角度考虑： 由第一个条件可知，该数个位只能是1或者6，第二三条件可以排除6，从第四条件可知该数能表达为11n+10的形式，又因个位数必须是1，所以这个n只能是1、11、21... 所以：  #include <stdio.h>  int main() {   for (int i = 1, j; (j = 11 * i + 10); i += 10)     if (j % 5 == 1 && j % 6 == 5 && j % 7 == 4 && j % 11 == 10)       {printf("%d\n", j); break;}    return 0; }   只需要测试19个数就能得出答案，而不需要测试200多或者2000多个数。

user: user-12
content: 引用 3 楼 ckc 的回复:笨办法。 1到11报数，最后一个是10，那么这个数除11余数是10 设置一个循环，从10开始，每次加11， 判断除5是不是余1 判断除6是不是余5 判断除7是不是余4 如果全部都符合，就是答案 不过这个问题数学上有更好的解法 这个好，比++效率高多了。

user: user-13
content: 直接弄个循环，上限1000000，挨个除，设置条件都满足时跳出，条件为对5取余为1，且 对6取余为5....   简单粗暴。

user: user-12
content: n = 10; while(1） {     if(n%5==1 && n %6 == 5 && n %7 == 4 %% n % 11 = 10)       break;     n++ } printf("%d\r\n",n);  求一个最小的出来就行了，这个如果数大小没限制，应该不止一个答案
user-0 提问: 关于HDMI。

回复:
user: user-1
content: 你是要找跟这个类似的吗？ https://github.com/Digilent/Nexys-Video-HDMI  https://reference.digilentinc.com/learn/programmable-logic/tutorials/nexys-video-hdmi-demo/start

user: user-2
content: 这个去阅读hdmi 文档比较好点

user: user-3
content: 要建立连接，遵从J具体版本HDMI协议，与网络不太一样。 具体查HDMI吧，这可不是一两句说的清的。
user-0 提问: algraph agraph graph有什么区别呢

回复:
user: user-1
content: 图的存储结构不一样，如ALGraph是表示图以领接表方式存储。

user: user-2
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。

user: user-3
content: 建议用一下，试一下看看结果是怎样的
user-0 提问: c\c++读取二进制文件，出现行数错误，求解！

回复:
user: user-1
content: 仔细看二进制。。0a，表示换行。。fgets读到这里，相当于一行结束了。。后面的000000，都是补上去的。  然后下一行以 1c开始了。

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

user: user-3
content: 引用 2 楼 Forward__J 的回复:[quote=引用 1 楼 sinat_37764097 的回复:] 代码问题，不用想了。  那为什么前18行正常，甚至18行到1c之前也是正常的，而1c就输出到了下一行，原1c位置自动补零？请问这个哪方面有问题呢？[/quote] 你得贴代码啊

user: user-0
content: 引用 5 楼 hjwang77 的回复:二进制文件读取，用fread挺好的，为什么换成fgets，是不是换成fgets之后出现问题的？ fgets是按行读取，由于判断换行符问题，不知道在读你这个文件时候会有啥问题。  谢谢大佬，是真的fgets问题，用fread就没问题了，非常感谢！

user: user-4
content: 二进制文件读取，用fread挺好的，为什么换成fgets，是不是换成fgets之后出现问题的？ fgets是按行读取，由于判断换行符问题，不知道在读你这个文件时候会有啥问题。

user: user-0
content: 引用 3 楼 hjwang77 的回复:你上面的需求不是在某处断开，自动补零的么？ “然后在某行某处出现断开，断开外置自动补零”  这难道不是你代码的需求？如果不是的话，把read/write那几句贴出来看看吧，是不是缓冲分配有问题   我的需求是从bat文件里按每行读取16进制的数据，bat文件里用UE打开是每行16个16进制的数，文件读取的代码如下

user: user-4
content: 你上面的需求不是在某处断开，自动补零的么？ “然后在某行某处出现断开，断开外置自动补零”  这难道不是你代码的需求？如果不是的话，把read/write那几句贴出来看看吧，是不是缓冲分配有问题

user: user-0
content: 引用 1 楼 sinat_37764097 的回复:代码问题，不用想了。  那为什么前18行正常，甚至18行到1c之前也是正常的，而1c就输出到了下一行，原1c位置自动补零？请问这个哪方面有问题呢？

user: user-3
content: 代码问题，不用想了。
user-0 提问: 请问如何将循环语句中esmd.yImfsR.get(i-1)不同值，提取出来。

回复:
user: user-1
content: 会C后，再学会Matlab还不是洒洒水嘛。

user: user-2
content: 这不是C语言

user: user-1
content: arri=[]; for i=1:len     subplot(len,1,i);     arri(i)=esmd.yImfsR.get(i-1);     plot(t, arri(i));     %xlabel('t');     if i==1         ylabel('Y');     elseif i==len         ylabel('R');     else         ylabel(strcat('Imf',num2str(i-1)));     end end for i=1:len     fprintf('arri(i:%d):%f\n',i,arri(i)) end
user-0 提问: 学习C语言碰到了一个问题

回复:
user: user-1
content: 考虑实际你的逻辑问题是，else是无条件执行一次的，理论上，你什么都不输入都会输出。

user: user-2
content: 你的回车被读取了，所以计算机以为你输入了两个字符

user: user-3
content: 我的IDE没问题

user: user-4
content: 大概是你自己不小心加了个空格?

user: user-5
content: 估计你可能是不小心碰到空格了，我在2015里是没有问题的，运行并正确输出结果，建议你多试几次，确认下是不是真的有问题。

user: user-6
content: 引用 2 楼 qq_17755271 的回复:我用VS2017就这样显示，我用我同学VC6.0可以正常显示，怎么回事啊 我也加上conio.h了 不显示在控制台，这个重点，你之前已经录入一个空格了，只不过控制台没显示 不过你的那个1怎么显示出来的

user: user-0
content: 我用VS2017就这样显示，我用我同学VC6.0可以正常显示，怎么回事啊 我也加上conio.h了

user: user-6
content: getch():  所在头文件:conio.h  函数用途:从控制台读取一个字符，但不显示在屏幕上  函数原型:int getch(void)
user-0 提问: c语言数组

回复:
user: user-1
content: size of是计算长度的

user: user-2
content: a,b是数组名，使用scanf时不用加&, 因为在C语言中数组名就代表该数组的起始地址。代码如下 scanf("%s",a); scanf("%s",b); 另外a，b，store的定义需要初始化0。

user: user-3
content: 数组最后一个元素之后要再加一个元素设为‘\0’，就是a[strlen(a)+1]='\0'

user: user-4
content: 记得使用\0结束符

user: user-5
content: 你应该养成一个好习惯，声明变量的时候同时初始化。strlen（）是用来结算字符个数的，从第一个地址开始往后计数，遇到0('\0',NULL)结束结束。

user: user-6
content: a,b, store没有初始化，里面存随机数字 ，存字符串时候如果不是0（\0），会对你的字符串判断有影响。 用for循环上来先都初始化成0在用。

user: user-7
content: 应该是缺少'\0'导致的。在拷贝字符串时，注意一下字符串的结束标记'\0'

user: user-8
content: 记得使用\0结束符

user: user-9
content: strlen不是用来计算数组长度的。
user-0 提问: 计算YUV图像的PSNR遇到的编译问题

回复:
user: user-1
content: memcpy(src1, hfile1, HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV); memcpy(src2, hfile2, HAN_DSTDATA_Y + HAN_DSTDATA_UV);  拿文件句柄做内存拷贝？ 这里是不是有啥误解啊，呵呵。
user-0 提问: GDB无法调试

回复:
user: user-1
content: 能通过啊。。

user: user-0
content: 我按你们说的做了，还是没用 在使用run命令时，会跳出这些错误。 [New Thread 21252.0x1930] warning: Can not parse XML library list; XML support was disabled at compile time  [New Thread 21252.0x3790] asdffdsfgdb: unknown target exception 0x4000001f at 0x401490  Thread 1 received signal ?, Unknown signal. 0x0009df88 in ?? () 我设置了断点 接下来都不可以查看变量的值

user: user-2
content: gcc helloworld.c  -o hellowrold -g3  gdb hellowrld.exe  //-g3 写入Debug信息 //.exe可选

user: user-3
content: 需要编译生成可执行文件，而不是.o文件  gdb +可执行文件

user: user-0
content: 不行
user-0 提问: 共享内存映射到进程空间的什么位置？

回复:
user: user-1
content: VMMap不是已经显示出了每块内存是否是Shareable了吗？

user: user-0
content: 还没有得到满意的答复

user: user-1
content: 引用 6 楼 bandaoyu 的回复:引用 5 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！哎 还是不太明白 要是能做你的小弟就好了 可以整天围着你学习 在这里天天发帖求助也可以。

user: user-1
content: 理解和讨论之前请先学会如何观察！

user: user-1

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！哎 还是不太明白 要是能做你的小弟就好了 可以整天围着你学习

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533呃 看不懂耶 老大

user: user-2
content: 共享内存不是进程内的地址空间，而是进程外的。  https://blog.csdn.net/skyroben/article/details/72625028

user: user-1
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
user-0 提问: 请教C语言问题

回复:
user: user-1
content: patb1020是什么？

user: user-0
content: 感谢以上大佬不吝赐教，谢谢大家！ 我排序出错了，还望看到此贴的新手引以为戒。

user: user-2
content: 引用 5 楼 weixin_38885956 的回复:虽然这种问题属于最优解问题，但就这题而言直接比较单价也是可行的。 你在降序的时候犯了个小错误，你没加循环。。。。。  for(int i = 0; i < n; i++) 	    if(cake[i].price<cake[i+1].price){//降序排列  	        temp = cake[i].price; 	        cake[i].price = cake[i+1].price; 	        cake[i+1].price = temp; 	         	        temp = cake[i].sell; 	        cake[i].sell = cake[i+1].sell; 	        cake[i+1].sell = temp; 	         	        temp = cake[i].store; 	        cake[i].store = cake[i+1].store; 	        cake[i+1].store = temp; 	    }   一层循环能做到降序？我记得需要2层循环吧

user: user-2
content: #include<stdio.h>  struct mooncake {     double store;     double sell;     double price; }cake[1010];  int main() {     int n;//月饼种类     int i, j;     double D;//市场最大需求量      scanf("%d%lf",&n,&D);     for(i = 0;i < n;i++){         scanf("%lf", &cake[i].store);//某种月饼库存量     }     for(i = 0;i <n;i++){         scanf("%lf",&cake[i].sell);//某种月饼总售价         cake[i].price = cake[i].sell/cake[i].store;//单价     }     struct mooncake  temp;     for (j = 0; j < n; j++)         for (i = 0; i < n - j - 1; i++)             if (cake[i].price < cake[i+1].price){//降序排列                 temp = cake[i];                 cake[i] = cake[i+1];                 cake[i+1] = temp;             }     double ans = 0;     for(i = 0;i<n;i++){         if(cake[i].store<=D){             D-=cake[i].store;             ans+=cake[i].sell;         }         else{             ans+=cake[i].price*D;             break;         }     }     printf("%.2f\n",ans);     return 0; }  参考一下吧  排序是有问题的

user: user-3
content: 虽然这种问题属于最优解问题，但就这题而言直接比较单价也是可行的。 你在降序的时候犯了个小错误，你没加循环。。。。。  for(int i = 0; i < n; i++) 	    if(cake[i].price<cake[i+1].price){//降序排列  	        temp = cake[i].price; 	        cake[i].price = cake[i+1].price; 	        cake[i+1].price = temp; 	         	        temp = cake[i].sell; 	        cake[i].sell = cake[i+1].sell; 	        cake[i+1].sell = temp; 	         	        temp = cake[i].store; 	        cake[i].store = cake[i+1].store; 	        cake[i+1].store = temp; 	    }

user: user-4
content: 引用 3 楼 yz_555 的回复:我理解的题目的意思是：将(最大需求量)分成(月饼种类)的份数有多少种分法，并取出其中最赚钱的一种。你的代码里好像没有对价格排序的部分，最后的结果是怎么得出来的？ 额。抱歉，我理解错了，只要尽量把最值钱的月饼卖出去就能得到最优解。

user: user-4
content: 我理解的题目的意思是：将(最大需求量)分成(月饼种类)的份数有多少种分法，并取出其中最赚钱的一种。你的代码里好像没有对价格排序的部分，最后的结果是怎么得出来的？

user: user-5
content: //降序排列 排序没成功

user: user-0
content: 我的运行结果是错的
user-0 提问: 0x010C1AD8 处有未经处理的异常(在 Project1.exe 中):  0xC0000005:  读取位置 0xCDCDCDCD 时发生访问冲突

回复:
user: user-1
content: int main() {     int i, j;     double data[4][4] =     { { 1, 2, 3, 4, },         { 2, 1, 4, 5, },         { 5, 4, 3, 5, },         { 7, 6, 5, 4 } };     //double ** p = new double *[100];     double **p = (double **)malloc(sizeof(double *) * 4);     for (i = 0; i < 4; i++)         p[i] = (double *)malloc(sizeof(double));     matrix_inv(p, 4);     for (i = 0; i < 4; i++)     {         for (j = 0; j < 4; j++)         {             printf("p[i][j]\r");         }         printf("\n");     }      system("pause");     return 0; } 参考一下吧。  主要是你申请的p也是申请了100个指针，而这些指针还都是野指针。并没有给这些指针申请指定的空间

user: user-2
content: 运行捕捉异常，看断在哪句上。

user: user-2
content: 0xCDCDCDCD  debug模式。野指针。也可以说空指针，指针没有初始化为空。

user: user-3
content: windows里常见的内存填充数据含义  * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory 漱 * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers 涵?  * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory 很?  * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger 撅饰 * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files 烫烫 * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory 屯屯 * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory 葺葺 * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory 蕲蕲 * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash  * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory  * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory

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