Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求找错

回复:
user: user-0
content: [color=#FF00FF]accept[/color ] #include <stdio.h> #include <string.h> #include <ctype.h>  int isspecial(char c) {     char str[] = "~!@#$%^";     int i;      for(i = 0; i < 7; i ++)     {         if(c == str[i])             return 1;     }     return 0; }  int main() {     int m,flag;     int a[10], cnt;     char c;      scanf("%d", &m);     getchar();     while(m --)     {         flag = 0;         cnt = 0;         a[0] = a[1] = a[2] = a[3] =a[4] =0;         while((c = getchar()) != '\n')         {             if(isupper(c))                 a[0]++,cnt ++;             else if(islower(c))                 a[1]++,cnt ++;             else if(isdigit(c))                 a[2]++,cnt ++;             else if(isspecial(c))                 a[3]++,cnt ++;             else cnt ++;          }         if(a[0]>0)             flag++;         if(a[1]>0)             flag++;         if(a[2]>0)             flag++;         if(a[3]>0)             flag++;         if((8<=cnt&&cnt<=16)&&flag>=3)             printf("YES\n");         else printf("NO\n");     }     return 0; }

user: user-0
content: 引用 6 楼 neverthinkaboutit 的回复:楼主请看四楼 除了cnt 没有清零之外还有后面的判断楼主写错了 if((cnt >= 8) && (cnt <= 16) && (flag >= 3))楼主脑残了，O(∩_∩)O谢谢

user: user-1
content: 正如楼上所说，，楼主你初始化cnt的时候没给它赋值，里面是个随机的垃圾值，运行肯定出错。

user: user-2
content: 楼主请看四楼 除了cnt 没有清零之外还有后面的判断楼主写错了 if((cnt >= 8) && (cnt <= 16) && (flag >= 3))

user: user-3
content: 引用 3 楼 u012421456 的回复:输入数据第一行包含一个数M，接下有M行 楼主的代码不是这样啊 ++ 楼主的是输入一个立即判断一个

user: user-4
content: cnt没清零

user: user-5
content: 输入数据第一行包含一个数M，接下有M行 楼主的代码不是这样啊

user: user-3
content: 百度一下，断点调试 或者，我最近写了一个算法分析器，你可以试试 http://yun.baidu.com/share/link?shareid=3030815990&uk=2988004704

user: user-0
content: 代码贴的有点问题 #include <stdio.h> #include <string.h> #include <ctype.h>  int isspecial(char c) {     char str[] = "~!@#$%^";     int i;      for(i = 0; i < 7; i ++)     {         if(c == str[i])             return 1;     }     return 0; }  int main() {     int m,flag;     int a[10], cnt;     char c;      scanf("%d", &m);     getchar();     while(m --)     {         flag = 0;         a[0] = a[1] = a[2] = a[3] =a[4] =0;         while((c = getchar()) != '\n')         {             if(isupper(c))                 a[0]++,cnt ++;             else if(islower(c))                 a[1]++,cnt ++;             else if(isdigit(c))                 a[2]++,cnt ++;             else if(isspecial(c))                 a[3]++,cnt ++;             else cnt ++;          }         if(a[0]>0)             flag++;         if(a[1]>0)             flag++;         if(a[2]>0)             flag++;         if(a[3]>0)             flag++;         if((8<=cnt&&cnt>=16)&&flag>=3)             printf("YES\n");         else printf("NO\n");     }     return 0; }
user-0 提问: Visual C++中释放动态分配的二维数组为什么会出现中断？编译无错。

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

user: user-2
content: t_x = (double**)malloc(sizeof(double*)*num_rowx); 一次malloc对应一次free t_x[i] = projection(begin_x[i], end_x[i], 2 * r); 你的projection()函数内有没有malloc

user: user-0
content: 引用 4 楼 user-4 的回复:第3点的意思是，如果你所使用的内存是由动态连接库中申请的，那么释放亦应该由该库释放 在 debug 模式下可能不会有什么问题，但在 release 模式下会报错 之前的相关代码是这样的  t_x = (double**)malloc(sizeof(double*)*num_rowx); ... t_x[i] = projection(begin_x[i], end_x[i], 2 * r);  没有使用动态链接库啊。。

user: user-3
content: 可以试试智能指针，auto_ptr<>, shared_ptr<> 之类的

user: user-0
content: 引用 7 楼 CharlesSimonyi 的回复:t_x = (double**)malloc(sizeof(double*)*num_rowx); 一次malloc对应一次free t_x[i] = projection(begin_x[i], end_x[i], 2 * r); 你的projection()函数内有没有malloc 有啊：  double *projection(double a, double b, double d) { 	double *c; 	int i = 0; 	c = (double*)malloc(sizeof(double)*((int)ceil(((b - a) / d)) + 1)); 	c[0] = a; 	while (c[i++] < b) 		c[i] = c[i - 1] + d;  	c[i] = 0; 	return c; }

user: user-4
content: 第3点的意思是，如果你所使用的内存是由动态连接库中申请的，那么释放亦应该由该库释放 在 debug 模式下可能不会有什么问题，但在 release 模式下会报错

user: user-4
content: 1、内存在释放前的操作过程中存在越界操作 2、内存之前已经释放过了，你出错时释放的地址为无效地址 3、该段内存不是你申请的你不能访问

user: user-3

user: user-0
content: IDE为visual stdio 2013。大家新年快乐~
user-0 提问: 为什么以下这个程序必须用getchar()？

回复:
user: user-1
content: 是不是因为getchar读取每个字符，而scanf会跳过换行符，空格，制表符。（我也是刚学，说的可能不对，一起讨论下）

user: user-2
content: ch是一个char类型，只能存储一个字符，在第一层while循环中，每一次循环ch只能接受到输入端的一个字符，比如你输入了个adsas，只有第一a被存入到了ch中，然后再进行循环内的下部操作，但是如果少了最后的那个while语句，下一次循环的时候a后面的字符d就会被存储到ch中，显然这不是程序设计者的意图，但造成这种情况的原因是由于用户的不规范的输入，所以必须使用第二个while语句在用户输入回车之前将前面所有的字符内容滤掉，以保证下次输入的时候是新读取的一行。  （感觉说的好像不是很对，，可能也说的不是很清楚，，楼主看看就好，，各位大神也轻喷！谢谢。。）

user: user-3
content: 你是这样写的吧  ch=getchar()!='\n' 原因：使用getchar()函数   你输入一个字符，然后回车，资格字符被getchar()接收，但是还有个回车符留在缓冲区，这样再有一个getchar（）就会接收这个回车。所以  本来你是应该输入的次数跟实际不一样的是吧 解决方案：每次使用getchar（）之后应该再使用一次getchar()接收回车，像scanf()就不会接收回车，你可以记下来他们的区别

user: user-3
content: 你是这样写的吧  ch=getchar()!='\n'

user: user-4
content: 用来过滤这一行的的除首字符以外其余输入的字符

user: user-5
content: 接收回车的。。。

user: user-6
content: 你自己跟踪程序一步步分析可以看懂的。
user-0 提问: 渣渣求助大神，为什么下面的程序进行到第一个scanf就停止了？

回复:
user: user-1
content: scanf ("%d%", &width); 在你输入的数字后面加上“%”

user: user-2
content: 应该不止一个问题，楼上说的都是第二个吧。

user: user-2
content: 求给分数。 第一个scanf后要补上一行getchar（）.不然在你输入第一个数字敲下回车时，那个／n字符会传给下一个scanf。应该还有其他解决办法，我习惯用这个笨办法了。

user: user-3
content: scanf是很严格按照格式输入的，格式化字符一定要匹配，数据在内存中的存储方式不一样，按照不同方式解析的结果也就不一样，int %d  unsigned %u float %f double %lf …… 请参考：格式化说明符部分http://baike.baidu.com/view/1390039.htm

user: user-4
content: scanf的那个地方错了吧 应该是%u

user: user-5
content: 使用unsigned width,precision;输出的时候应该用%u\n, 还有%d%是哪里也错了。 其他错误还不清楚，没细看。。最近在学习C++ ，没有怎么研究C语言 希望可以帮到你

user: user-6
content: 输入格式问题： scanf ("%d%", &width); usigned int 类型输入用"%u" unsigned width; scanf("%u", &width); printf("%u\n", width);

user: user-7
content: “%d%”是什么意思？
user-0 提问: 关于scanf的一个用法，很久都没弄懂。

回复:
user: user-1
content: %c 前面加空格可以过滤掉换行

user: user-2
content: scanf("%c",vex[i]); ===> scanf("%c",&vex[i]);

user: user-3
content: 在每个scanf后面加上while循环去掉会车符试试

user: user-4
content: %c前面加个空格。" %c"

user: user-1
content: 引用 8 楼 szdphsw 的回复:引用 4 楼 Automation_dmu 的回复:%c 前面加空格可以过滤掉换行确实是可以，可是不知道为什么语法啊

user: user-0
content: 引用 4 楼 Automation_dmu 的回复:%c 前面加空格可以过滤掉换行确实是可以，可是不知道为什么

user: user-0
content: 引用 3 楼 mymtom 的回复:scanf("%c",vex[i]); ===> scanf("%c",&vex[i]);我是打错了，不好意思，不过加上&还是解决不到问题

user: user-0
content: 引用 1 楼 FancyMouse 的回复:%c前面加个空格。" %c"按照你这样确实可以解决问题，但是不知道为什么

user: user-5
content: 也可以把内容都输完再摁回车，但还是会读一个回车。其实不用遍历，直接读取字符串就好了。
user-0 提问: 有谁能和我解释下这个复杂的函数是什么意思吗

回复:
user: user-1
content: 楼上犀利..的确是这样..

user: user-2
content: fun的参数类型是void (*)(void *), 返回值类型是void (*)(void *) 给个简单例子 void p1(void *) {} void (*fun(void (*p)(void *)))(void *){     return p; } auto f =fun(&p1);

user: user-1
content: *p是什么？发出来还能帮你参考下

user: user-3
content: 不会 就算会了又有什么意义。楼主不要在这种方面浪费时间为好
user-0 提问: Presentation Error

回复:
user: user-0
content: accept #include <stdio.h> #include <string.h>  void fun(int a[],int n) {     int i, j, t;      for(i = 0; i < n-1; i ++)     {         for(j = 0; j < n-1-i; j ++)         {             if(a[j] > a[j+1])                 t = a[j], a[j] = a[j+1], a[j+1] = t;         }     } } int main() {     int a[100], b[100];     int n, m, i, j, cnt, flag;      while(scanf("%d %d", &n, &m), m || n)     {         cnt = 0;         for(i = 0; i < n; i ++)         {             scanf("%d", &a[i]);         }         fun(a,n);         for(i = 0; i < m; i ++)         {             scanf("%d", &b[i]);         }         if(m == 0)             {                 for(i = 0; i < n; i ++)                 {                     printf("%d ", a[i]);                 }                 printf("\n");                 continue;             }         fun(b,m);         for(i = 0; i < n; i++)         {             flag = 0;             for(j = 0; j < m; j ++)             {                 if(a[i] == b[j])                 {                     flag = 1;                     break;                 }             }             if(flag == 0)                 {                     cnt ++;                     printf("%d ",a[i]);                 }         }         if(cnt == 0)             printf("NULL\n");         else printf("\n");     }     return 0; }

user: user-1
content: 为了简化问题，每个元素后面跟一个空格.  好像最后一个元素后面也有一个空格？
user-0 提问: C语言如何让结束指定进程中的指定线程

回复:
user: user-1
content: 引用 1 楼 dengyejing 的回复:BOOL WINAPI TerminateThread(   _Inout_  HANDLE hThread,   _In_     DWORD dwExitCode ); 可以结束线程。至于线程的句柄从哪里来，就看是什么线程了，如果是你自己创建的，那你从返回值就可以得到，如果是其它程序创建的，你可以先枚举出来，再从中选择。枚举线程参考https://msdn.microsoft.com/en-us/library/windows/desktop/ms686852(v=vs.85).aspx  还能结束其他进程的线程？

user: user-2
content: BOOL WINAPI TerminateThread(   _Inout_  HANDLE hThread,   _In_     DWORD dwExitCode ); 可以结束线程。至于线程的句柄从哪里来，就看是什么线程了，如果是你自己创建的，那你从返回值就可以得到，如果是其它程序创建的，你可以先枚举出来，再从中选择。枚举线程参考https://msdn.microsoft.com/en-us/library/windows/desktop/ms686852(v=vs.85).aspx

user: user-3
content: pthread_cancel()
user-0 提问: 结构体中含有指针，并写入文件，该如何读取

回复:
user: user-1
content: 你的程序写的一塌糊涂, 本想给你改改, 看了一会果断放弃了.... 给你修改比重新写一个还累, 等晚上有空再说吧

user: user-1
content: 引用您好，我还是有些地方不清楚，难道fwrite之后就得将指针free掉，fread的时候再给指针分配空间？这样好像不行啊 我的程序初次运行时没有错误，数据内容感觉都正确的写入文件了，但是关闭后再次运行时，它连par[i].count数值都错了，这是为什么呢？还有如果这时给指针分配空间，感觉也读不出文件里的内容 麻烦你了，谢谢~  1. 运行时数据存放在内存中, malloc, free操作是针对内存的操作, 你创建的局部变量, 全局变量等等都是存放在内存中, 程序重启或者内存掉电都会重新分配内存. 2. fwrite和fread是IO接口, 读写的是存储设备,也就是掉电或者程序重启不会丢失数据的东西.  当你的程序重新启动后, 结构中的para指针指向的数据已经不复存在, 即便你知道你上一次运行程序时的内存地址, 也读不到原来的数据了. 因此需要将数据按可读可写的规则存放在存储设备中, 以备下次使用. 事实上我给出的那个方案真的很简单. 由两部分组成的一条协议,  第一部分是4个字节长度, 存放的是第二部分的长度,  第二部分是不定长的一堆数据.  因为是fread和fwrite是FIFO的, 因此一定要先写第一部分, 再写第二部分. 读的时候先读第一部分, 再读第二部分. 如果这样还不能解释... 我黔驴技穷了.

user: user-1
content: 首先, 你这个结构体 引用struct paragraph { char *para;//每段写入字符个数不确定，所以用指针，能动态解决这一问题 int count;//每段字符个数 }; 大小为8个字节, 也就是说 sizeof(struct paragraph) 等于8. 这里读出来的count是有效的, para是无效的. 我就说一下简单的存取这个结构的思路.  1. 写 //struct paragraph st = xxx; fwrite(&st .count, 4, 1, p_file); fwrite(st.para, st .count, 1, p_file);  2.读 struct paragraph st = {0}; fread(&st.count, 4, 1, p_file); st.para= (char*)malloc(st.count); fread(st.para, st.count, 1, p_file);
user-0 提问: 如何解决switch(ch)(ch为字符型变量)中，输入选择后，程序把enter键当输入信息的问题？

回复:
user: user-1
content: 消除\n,看这个行不  char c; while ( (c=getchar()) == '\n')         continue;

user: user-0
content: 再来个问题，红色是问题所在
user-0 提问: 入门问题，求解答

回复:
user: user-1
content: number定义为双精度浮点数 (long)number 表示什么意思呢？   是不是这样定义的呀？ double number; (long)number;  如果是的话，(long)number表示将number强制转换为长整形。

user: user-2
content: 强制转换为long
user-0 提问: 我想在C语言中建立一个数组，这个数组中每一个格子  都存放一个数组  求解怎么写？

回复:
user: user-1
content: vc6.0中正常运行

user: user-2
content: //在堆中开辟一个4×5的二维int数组 #include <stdio.h> #include <malloc.h> int **p; int i,j; void main() {     p=(int **)malloc(4*sizeof(int *));     if (NULL==p) return;     for (i=0;i<4;i++) {         p[i]=(int *)malloc(5*sizeof(int));         if (NULL==p[i]) return;     }     for (i=0;i<4;i++) {         for (j=0;j<5;j++) {             p[i][j]=i*5+j;         }     }     for (i=0;i<4;i++) {         for (j=0;j<5;j++) {             printf(" %2d",p[i][j]);         }         printf("\n");     }     for (i=0;i<4;i++) {         free(p[i]);     }     free(p); } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19

user: user-3
content: 1楼应该是对的吧，初始化一个指向字符变量的的指针数组，然后把每个字符串的地址存进该数组内。

user: user-4
content: 引用 6 楼 shenshihao520 的回复:似乎是printf的问题  printf("%s\n", arr[0]);  arr[0]需要以‘\0’结尾   问题是怎么把他加上去   arr[0]+'\0'行吗  求各位大神指点 printf函数没问题，估计是终端编码问题。也不是你所说的arr[0]需要以"\0"结尾，arr[0]里面存放的是字符串字面量"shen"的地址，而且"shen"作为字符串的话，本身在其后面就有一个隐式的"\0"。

user: user-4
content: 引用 6 楼 shenshihao520 的回复:似乎是printf的问题  printf("%s\n", arr[0]);  arr[0]需要以‘\0’结尾   问题是怎么把他加上去   arr[0]+'\0'行吗  求各位大神指点  不可以，数组不能直接拿来运算，也不能初始化，用strcat函数，将"\0"连接到字符串字面量"shen"后面，strcat(arr[0],"\0")

user: user-5
content: 就是二维数组

user: user-0
content: 似乎是printf的问题  printf("%s\n", arr[0]);  arr[0]需要以‘\0’结尾   问题是怎么把他加上去   arr[0]+'\0'行吗  求各位大神指点

user: user-6
content: char array[16][256]

user: user-0
content: 引用 3 楼 shenshihao520 的回复:[quote=引用 1 楼 user-9 的回复:] #include<stdio.h>  int main(){ 	char* arr[4];   //4是字符串指针的数量，数组大小 	char* name = "shen"; 	arr[0] = name; 	printf("%s\n", arr[0]); } [/quote]为什么输出是这样的？

user: user-0
content: 引用 1 楼 user-9 的回复:#include<stdio.h>  int main(){ 	char* arr[4];   //4是字符串指针的数量，数组大小 	char* name = "shen"; 	arr[0] = name; 	printf("%s\n", arr[0]); }

user: user-0
content: 引用 9 楼 jeaham 的回复:[quote=引用 6 楼 shenshihao520 的回复:] 似乎是printf的问题  printf("%s\n", arr[0]);  arr[0]需要以‘\0’结尾   问题是怎么把他加上去   arr[0]+'\0'行吗  求各位大神指点 printf函数没问题，估计是终端编码问题。也不是你所说的arr[0]需要以"\0"结尾，arr[0]里面存放的是字符串字面量"shen"的地址，而且"shen"作为字符串的话，本身在其后面就有一个隐式的"\0"。[/quote]那您的意思就是一楼是正解 只要解决终端编码问题就OK了？

user: user-7
content: 按1楼编译运行正常

user: user-8
content: 试试二维数组。

user: user-9
content: #include<stdio.h>  int main(){ 	char* arr[4];   //4是字符串指针的数量，数组大小 	char* name = "shen"; 	arr[0] = name; 	printf("%s\n", arr[0]); }
user-0 提问: 求助uva227

回复:
user: user-1
content: ①首先，第33行和第41行有个小错误，应该是x-1>=1，y-1>=1，而不是x-1>=0，y-1>=0。 ②然后回到主要矛盾上，关键在第11行，不能通过新读入的字符是'Z'而判断程序的结束，因为square中的字母是可以包含字符'Z'的，比如输入  ZRGSJ XDOKI M VLN WPABE UQHCF ARRBBL0  输出应该是  Puzzle #1: Z R G S J X O K L I M D V B N W P   A E U Q H C F  ③然后再注意第16、17行，如果i==1,j==1时直接continue，那么当空格正好处于p[1][1]的位置时，x、y的值能得到正确计算吗？  问题的解决方法很多，我帮你稍微改了下，AC代码：http://acm.hust.edu.cn/vjudge/problem/viewSource.action?id=3374194，建议你自己再整理下输入部分的处理。

user: user-2
content: getchar换成_getch.
user-0 提问: 才入门，一程序问题求解答

回复:
user: user-0
content: 太棒了！！^_^^_^^_^，对的诶

user: user-0
content: 好像还是不行

user: user-1
content: 楼上正解； 1.问题一： scanf("%c ",&answer);    %C后多了一个空格，去掉空格。 2.问题二：（是在问题一解决后的情况） scanf("%lf", &value); 会在输入缓冲区留下一个回车符，scanf("%c ",&an/wer);读取了这个回车符.  因此，解决方法如下： （1）方法1： printf(" \n Enter a value:"); scanf("%lf", &value); total += value ; ++count; fflush(stdin);                        加这句，刷新标准输入缓冲区  printf("\n Do you want to enter another value ? (Y or N):"); scanf(" %c",&answer);  printf("\n %c",answer); fflush(stdin);                        加这句，刷新标准输入缓冲区 if(answer == 'N') break; （2）方法2： scanf(" %c",&answer); 在%c前边加空格； 说明第一个里的空格用来过滤空白符。本句效果，读取首个不为空白符的字符。 3.补充： （1）scanf("%d",&number);等，可以自动忽略先导空白符。 scanf("%c ",&answer);不忽略空白符的原因，可能是因为，空白符本身就是字符，而%c本来就是用来接受字符的，而且有时需要统计这些空白符。 （2）获取字符可以使用getchar()函数;

user: user-2
content: 试试接收前清空键盘缓冲区。
user-0 提问: 请问这个结构那里有问题，还有我想把BanQi[8]初始化成那样要怎么办？

回复:
user: user-0
content: 引用 1 楼 sholber 的回复:声明的语法都没搞清。 能说说哪里错了吗？ typedef struct students { 	char name[10]; 	int num; 	float chinese; 	float math; 	float english; 	float physics; 	float chemistry; 	float average; 	float sum; 	struct students *next; }student; 像这个就是对的，我对比了下没看出什么问题

user: user-1
content: 声明的语法都没搞清。

user: user-2
content: 引用 4 楼 LS1jun 的回复:[quote=引用 3 楼 user-2 的回复:] 那样定义没有错，你想初始化 BanQi[8]可以这样：HangBan.BanQi[8]={0,0,0,0,0,0,0,0}; 谢谢回答，我现在已经编译好了，是其他错误让编译程序对结构报错了。[/quote] 嗯嗯，么么哒。。我也是刚刚开始学C++呀。迷茫。

user: user-0
content: 引用 3 楼 user-2 的回复:那样定义没有错，你想初始化 BanQi[8]可以这样：HangBan.BanQi[8]={0,0,0,0,0,0,0,0}; 谢谢回答，我现在已经编译好了，是其他错误让编译程序对结构报错了。

user: user-2
content: 那样定义没有错，你想初始化 BanQi[8]可以这样：HangBan.BanQi[8]={0,0,0,0,0,0,0,0};
user-0 提问: 做金融行业软件开发的新人，有些迷茫，求大神们指点迷津？

回复:
user: user-1
content: 楼主这是正常的··· 你想提升技术的话可能也就只能抽象各种业务逻辑，抽象共同点，抽象出来成为框架 不过这东西可真不是那么容易的

user: user-2
content: 引用 8 楼 Evankaka 的回复:[quote=引用 1 楼 Raffin 的回复:] 做C哪里LOW了，做JAVA的都是智商低的。 后一句可不敢苟同了，语言这东西，和人的智商有关系么？[/quote]  当然有关系，连指针都搞不懂，给你看一串*&**就晕的人还能说自己智商高？ 我不是说所有做JAVA的智商都低，做C的智商都高，但是比例上肯定做C的人智商高。

user: user-3
content: 楼主是自学成才吗？还是大学是混出来的？  随便一个计算机专业，老师都会告诉你，程序设计的整个工作流程中，写代码的工作量只有20%

user: user-3
content: 引用 1 楼 Raffin 的回复:做C哪里LOW了，做JAVA的都是智商低的。   +10086  学会java然后来学c和c++的   想自杀 学会c/c++的再去学java   简单一b

user: user-4
content: C语言本来就是用来做系统、嵌入式、硬件开发的，那样才high，用C语言来做业务逻辑，当然就发挥不出来了，如果我是搞C语言的，肯定不会选择金融行业。

user: user-5
content: 使用飞机这种工具的人智商一定比使用汽车这种工具的人智商高。

user: user-6
content: 引用 9 楼 Raffin 的回复:[quote=引用 8 楼 Evankaka 的回复:] [quote=引用 1 楼 Raffin 的回复:] 做C哪里LOW了，做JAVA的都是智商低的。 后一句可不敢苟同了，语言这东西，和人的智商有关系么？[/quote]  当然有关系，连指针都搞不懂，给你看一串*&**就晕的人还能说自己智商高？ 我不是说所有做JAVA的智商都低，做C的智商都高，但是比例上肯定做C的人智商高。[/quote] 我也不争了，语言这东西只是个工具，为什么你们老喜欢喷来喷去的呢？

user: user-6
content: 引用 1 楼 Raffin 的回复:做C哪里LOW了，做JAVA的都是智商低的。 后一句可不敢苟同了，语言这东西，和人的智商有关系么？

user: user-7
content: 难度一般都在需求分析整理

user: user-0
content: 引用 2 楼 user-8 的回复:一半的功夫花在了解银行业务方面了， ===> 这就对了！ 如果工作3年后，你发现百分之八十的功夫花在了解银行业务方面，那么，恭喜你，你是银行业务专家了。可是技术上提升不是很大，我感觉做金融的写代码的难度不是很大！

user: user-0
content: 引用 1 楼 Raffin 的回复:做C哪里LOW了，做JAVA的都是智商低的。现在不知道做c要学什么了，给点意见呗?

user: user-0
content: 引用 楼主 u012343001 的回复:入职两个月的新人，现在有点迷茫，本人做的是金融行业的软件开发，用的是c,最近接触的两个项目，一个是给银行做数转，另一个配报文做交易，感觉代码难度不大，一半的功夫花在了解银行业务方面了，感觉学的东西太少，不知道有没有做过这方面的大神给点建议，我总觉得做c的比做Java呀，android呀等一些语言要low一些，自己毕业后参加了半年的嵌入式培训，c,lsd,java,android都学过，不知道做哪个方向好，如果做c从事哪些方面比较好呢？现在感觉做c不知道要学些什么东西了，给点建议呗？

user: user-8
content: 一半的功夫花在了解银行业务方面了， ===> 这就对了！ 如果工作3年后，你发现百分之八十的功夫花在了解银行业务方面，那么，恭喜你，你是银行业务专家了。

user: user-2
content: 引用 5 楼 u012343001 的回复:[quote=引用 2 楼 user-8 的回复:] 一半的功夫花在了解银行业务方面了， ===> 这就对了！ 如果工作3年后，你发现百分之八十的功夫花在了解银行业务方面，那么，恭喜你，你是银行业务专家了。可是技术上提升不是很大，我感觉做金融的写代码的难度不是很大！[/quote]  既然碰到了也算有缘，我就说点关于技术和业务的事情。 我是开发SAP（一种ERP软件）的，ERP开发的一大特点是处于业务和技术的交界处。 C开发是搞底层为主，JAVA开发搞Web为主，SAP开发侧重业务本身。 SAP的开发很多在技术方面只是停留在写业务逻辑和使用框架上，跟你碰到的情况类似。  如果你是喜欢技术想往技术路线发展（特指IT技术），那么就不要去了解太多业务的知识，因为你今天做了银行项目，你不能保证下次还是做银行项目，假如你下次做个零售业的项目，你的银行知识就一点用处都没有。只有IT技术本身才是跨行业的。  假如你觉得你不擅长编程，那么会使用开发工具进行一些逻辑开发就已经足够，之后早点选定一个行业，学习它的业务知识转为业务专家兼懂IT的人。  我个人觉得C语言去搞企业企业应用级别的开发应该项目不多，应用级别的开发一般都用更高级的语言了，C语言应该是用来开发底层驱动和算法之类的。

user: user-2
content: 做C哪里LOW了，做JAVA的都是智商低的。
user-0 提问: 关于数集的子集

回复:
user: user-1
content: 路过的，表示没看出（2,3）出现的最多。

user: user-0
content: 引用 3 楼 czarten 的回复:我看了半天没看出为什么是2 3 就是（1 5）（2 6）（2 3）里有（2 3） 共出现3次最多

user: user-2
content: 我看了半天没看出为什么是2 3

user: user-0
content: 引用 1 楼 user-3 的回复:统计最多出现的次数吗？ 恩

user: user-3
content: 统计最多出现的次数吗？
user-0 提问: char str[4];  str = "abc"; error

回复:
user: user-1
content: 引用 14 楼 cfjtaishan 的回复:但是你能用arr=xx这样操作？我们对于概念可能有误解或者理解有差异，但是实际操作，arr = xx;是不可以的。arr是数组名。。 arr = XX;是不可以的  不妨碍 arr 可以是一个左值 数组名有一个特点 在某些情况下会做强制类型转换  转换结果不是左值 所以不可以 而且 不是所有左值都可以写在赋值符号左边的  能写在赋值符号左边的仅仅是 可修改左值

user: user-2
content: 引用 13 楼 lin5161678 的回复:[quote=引用 12 楼 cfjtaishan 的回复:]  左值，我的理解是赋值号的左边，你的理解呢？ 你的理解完全是错的  以前也许是这样  但C语言发展到现在 这个说法已经不能自洽了  早就被废除了  现在的说法是  引用An lvalue is an expression (with an object type other than void) that potentially designates an object; 一个指定对象的非void类型的表达式  arr这个表达式 指定了一个数组对象 是一个左值  符合规定的[/quote] 但是你能用arr=xx这样操作？我们对于概念可能有误解或者理解有差异，但是实际操作，arr = xx;是不可以的。arr是数组名。。

user: user-2
content: 引用 11 楼 lin5161678 的回复:引用 10 楼 cfjtaishan 的回复:[quote=引用 6 楼 lin5161678 的回复:] [quote=引用 5 楼 cfjtaishan 的回复:] 数组名是不能做左值的。数组名有时候可以做左值 有时候不行 别一竿子都打死 for example? [/quote] int arr[10]; &arr  一元&运算符的操作数只有2种可能 不是 函数名 就是 左值  arr 不是函数名  那么这个arr 就只能是左值了  [/quote] 左值，我的理解是赋值号的左边，你的理解呢？

user: user-1
content: 引用 10 楼 cfjtaishan 的回复:引用 6 楼 lin5161678 的回复:[quote=引用 5 楼 cfjtaishan 的回复:] 数组名是不能做左值的。数组名有时候可以做左值 有时候不行 别一竿子都打死 for example? [/quote] int arr[10]; &arr  一元&运算符的操作数只有2种可能 不是 函数名 就是 左值  arr 不是函数名  那么这个arr 就只能是左值了

user: user-1
content: 引用 12 楼 cfjtaishan 的回复:左值，我的理解是赋值号的左边，你的理解呢？ 你的理解完全是错的  以前也许是这样  但C语言发展到现在 这个说法已经不能自洽了  早就被废除了  现在的说法是  引用An lvalue is an expression (with an object type other than void) that potentially designates an object; 一个指定对象的非void类型的表达式  arr这个表达式 指定了一个数组对象 是一个左值  符合规定的

user: user-2
content: 引用 6 楼 lin5161678 的回复:引用 5 楼 cfjtaishan 的回复:数组名是不能做左值的。数组名有时候可以做左值 有时候不行 别一竿子都打死 for example?

user: user-3
content: 数组名和指针名不是同一个概念，两者有一定的区别

user: user-4
content: 引用Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined. 引用An assignment operator shall have a modifiable lvalue as its left operand.  str ="abc"; 右边表达式"abc"类型是char [4], 转换为char *；  左边表达式str的类型char [4], 也会转换为char*, 但是不是一个左值， 不满足第二条。

user: user-1
content: 另外 答题  数组可以通过类型转换 转换为指针 指针不能通过类型转换 转换为数组 完毕

user: user-1
content: 初始化不是赋值 各自适用不同的语法条款  没什么可比性  别看到 = 就瞎凑上去 C里面成吨的符号重用 一个符号在不同上下文 意思是不一样的

user: user-5
content: 数组都不可以直接用 = 来赋值，除非是初始化

user: user-6
content: 错了 <string.h>

user: user-6
content: strcpy使用这个函数，头文件包含  #include <stdio.h>

user: user-1
content: 引用 5 楼 cfjtaishan 的回复:数组名是不能做左值的。数组名有时候可以做左值 有时候不行 别一竿子都打死

user: user-2
content: 数组名是不能做左值的。
user-0 提问: Debug_fault

回复:
user: user-1
content: 挨个检查修改吧 编译提示的错误比较清楚了

user: user-2
content: void str_sort (const char * [], int);  //function prototype char * pS [NUM_P]; //Array of string pointers 参数的类型是指向 const char * 的指针；ps的类型是指向char *的指针。形参和实参所指向的类型不兼容。 参见以下这个帖子的46楼：http://bbs.csdn.net/topics/390946225
user-0 提问: 求教，怎样用vs2013用fwrite把数据正确地写入文件？

回复:
user: user-1
content: 楼主的结构体，写入文件后是二进制的，用记事本当然是这个样子啊。

user: user-2
content: fopen_s(&fp, "D:\\tese1.txt", "wb")     //以二进制方式操作文件。 把b去掉

user: user-3
content: fwrite 写的时候把 &stu[i] 解析为 unsigned char 数组 由于结构里面有不同的类型，分开写入文件 size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); Internally, the function interprets the block pointed by ptr as if it was an array of (size*count) elements of type unsigned char.
user-0 提问: 字符指针的引用问题

回复:
user: user-1
content: 代码一堆问题，给你指出其中一个： for(;str != '\0' ;++i) ---------------------------> for(;(*str) != '\0' ;++i)

user: user-2
content: 可以考虑用另外一个指针处理，或者使用一个新的字符数组来拷贝str

user: user-2
content: arr[idx]='\0';    str = &str[i];    //这个地方的问题；    printf ("split str is %s \n",str);    spstr = arr;

user: user-0
content: 知道我的问题在哪了  传的是个指针 没错，但我在splitstr函数里改了str指针的值   但没有改更改函数splitstr2stack中的值     想问下 我应该怎么样做呢？

user: user-3
content: “按指针传递 应该修改原字串” char * 可以修改指针指向的字符串内容，而不是指针本身 char ** 可以  char * foo(char * p) {     p = 1;     // 根本不影响外面的指针     *p = 'a'; // 可以修改 p 指向的内容     return p; }  foo(pStr);
user-0 提问: n个节点的平衡二叉树的深度，与这些节点 理想平衡二叉树的深度  相差不能超过多少？  求围观 求大神解答！

回复:
user: user-1
content: 平衡二叉树高度跟完全二叉树的确是不同的。 也并不是差1. 因为平衡二叉树在高度为h情况下 最小节点数为Fibonacci数列（下标并不恰好对应），最多节点数则为2^h 所以在节点数为n的情况下其最大高度应该为对应刚好比他大fibonacci数列所对应的高度（反证法）

user: user-2
content: 其实这个平衡二叉树是用在哪个方面的？除了纯理论研究外。

user: user-3
content: 好像可以参考一下堆排序的原理。

user: user-4
content: 除了最后一层其他都得是满的  你可以试试来个层序遍历 看看哪层少了

user: user-0
content: 不知道表达清楚了没有， 先自顶一个， 有大神要看代码的话，我再发代码
user-0 提问: windows 和 linux 下，文件字符串长度问题

回复:
user: user-1
content: 何故?  只需要把文件以二进制方式打开, 然后看里面的内容即知.    C库函数  fopen("1.txt", "rb");  二进制方式打开 , 然后读取出来即可知道了.

user: user-2
content: linux的end of line是'\n', windows的end of line是\r\n
user-0 提问: 关于变量名和函数名从文件读取的问题

回复:
user: user-1
content: 《程序员的自我修养——链接、装载与库》

user: user-2
content: 我觉得你首先最应该考虑的是你的需求是否真有必要这样实现

user: user-3
content: 1.用条件语句，根据输入选择执行相应的函数就行了。 2.用dl库动态加载库，把从文件读取的函数名作为dlsym()的第二个参数。

user: user-3
content: 用条件语句，根据输入选择执行函数就行了。既然你都想到要拿到函数地址，强转类型再去执行。难道就不能直接用函数名么，要知道函数名就是函数地址呀。还有个办法就是用dl库动态加载，把从文件读取的函数名作为dlopen()的第二个参数。

user: user-4
content: 1.参照.ini文件读取函数； 2.参照显示载入DLL中的GetProcAddress;

user: user-5
content: 你愿意写一些if的话, 到时可以简单的实现.   这样就类似一个脚本解析器

user: user-6
content: C++用std::map C没有map, 自己实现一个

user: user-7
content: 需要 pdb 文件， exe 文件里面通常不包含符号信息的

user: user-8
content: 可执行文件中的函数并未真正与地址绑定，此操作要延迟到动态装载器载入程序之时。  或者你能实现相当于装载器的功能，就可知道函数的实际加载地址，再根据符号表，动态链接也是能实现的！

user: user-9
content: 别想太多了  就一堆if 别去想什么变量名函数名了  直接字符串比较   大体思路是行不通的 exe里面哪里来的函数名
user-0 提问: 菜鸟关于变长数组（VLA）的问题

回复:
user: user-1
content: 函数参数跟定义变量不同, 也不遵循先左后右的规则. 将定义中的数组改为 int **a 或者 int *a[] and, 把你函数定义的分号去掉

user: user-2
content: 『我试着写了一个例子，但是VC报错，求原因』

user: user-3
content: 把参数的a[m][n]改成**a就行了。c++只传数组指针，不管长度，所以括号里的m,n没用。

user: user-4
content: 引用 2 楼 user-5 的回复:[quote=引用 1 楼 sholber 的回复:]  int a [sizeof (int)];                //非法。 这个a 不是VLA 为什么会非法? [/quote] 手误。sorry。 还有，第二个例子应该是m而不是n

user: user-5
content: 引用 1 楼 sholber 的回复:int a [sizeof (int)];                //非法。 这个a 不是VLA 为什么会非法?

user: user-4
content: If an identifier is declared to be an object with static or thread storage duration, it shall not have a variable length array type. That is，若一个标识符被声明为具有静态存储期或者线程存储期，则它不能是变量长度数组类型。 int a [sizeof (int)];                //非法。 int main (void) {/* …… */} void f (int m) {     int a [n];                            //合法。     /* …… */ }
user-0 提问: getopt_long参数struct option

回复:
user: user-1
content: struct option {   const char *name;   /* has_arg can't be an enum because some compilers complain about      type mismatches in all the code that assumes it is an int.  */   int has_arg;   int *flag;   int val; };

user: user-0
content: 帖子没人回复怎么办？
user-0 提问: 菜鸟对于const和常量指针的困惑！

回复:
user: user-1
content: 把里面的*理解成指向。。。就很容易理解了，比如 const int * a 解读出来就是：a指向const int，也就是指针a指向的是一个常整型。所以。。a是可写的，a指向的那个变量，是不可写的。

user: user-2
content: root@jusse ~/develop# cat -n cc_const.c       1  #include <stdio.h>      2      3  int main(int argc, char *argv[])      4  {      5      int a = 10;      6      int b = 20;      7      const int *cpa = &a;      8      int * const pca = &a;      9      const int * const cpca = &a;     10     11      cpa = &b;     12      *cpa = 30;     13      pca = &b;     14      *pca = 40;     15      cpca = &b;     16      *cpca = 50;     17     18      printf("a: %d, b: %d\n", a, b);     19     20      return 0;     21  }  root@jusse ~/develop# gcc -Wall -g -o cc_const ./cc_const.c  ./cc_const.c: In function ‘main’: ./cc_const.c:12:5: error: assignment of read-only location ‘*cpa’ ./cc_const.c:13:5: error: assignment of read-only variable ‘pca’ ./cc_const.c:15:5: error: assignment of read-only variable ‘cpca’ ./cc_const.c:16:5: error: assignment of read-only location ‘*cpca’  从上面代码你就可以知道哪个可以变哪个不能变了。 我是这么简单记的，const离哪个近哪个就不能变，比如const int *a，那么int不可变，int * const a，那么a不可变，const int * const，那么int和a都不可变。

user: user-3
content: const是告诉编译器修饰的是一个常量，不可以修改，修改了编译器就会报告出错。但是和常量还是有区别的。 const int a;是指a的值不可以改变，但是可以在定义时进行初始化； 另外，const的位置不一样，修饰的内容也会有所不同。

user: user-4
content: 这儿有个老帖子。 int const *p和int *const的区别 http://bbs.csdn.net/topics/310124559

user: user-4
content: 是不是这样，const 跟着什么，什么的值就不能变？ 理不清楚  下面是在百度搜索【int * const 】找到的  const int a; int const a; 这两个写法是等同的，表示a是一个int常量。 const int *a; 表示a是一个指针，可以任意指向int常量或者int变量，它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。 int * const a; 表示a是一个指针常量，初始化的时候必须固定指向一个int变量，之后就不能再指向别的地方了。 int const * const a;表示a是一个指针常量，初始化的时候必须固定指向一个int常量或者int变量，之后就不能再指向别的地方了，它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。
user-0 提问: 【求助】大神请留步，关于数组问题

回复:
user: user-1
content: 哦, 上边 *t[n] 说错了, t[n]是这个数组的第n个元素, *t[n]表示 t[n] 这个指针指向的内存的值. 拆解一下  char* p = t[n]; char c = *p;

user: user-1
content: 引用我想问的是在gettext函数中，gets(t[n])是什么意思，读入文本行的话为什么是一个【一维数组】呢？而且*t[n]又是什么意思？ 1. gets(t[n]) 是获取一行字符串, 遇到换行符或EOF时停止. t[n]是字符串首地址, 读到的内容是从t[n]开始到换行或EOF结束. 2. 参数char (*t)[LEN] 可以理解为一个指针的指针, 它有LEN个, 每一个都指向一个字符串数组. 3. *t[n]  数组下标[]的优先级大于*的优先级, 因此这是一个指向数组的指针. 即一个指向数组t[n]的指针.

user: user-2
content: *t[n]是第n行的第一个字符，类似与t[n][0]

user: user-2
content: gets(t[n])是char text[MAXLINE][LEN];数组text的第n行，数组text是有MAXLINE行和LEN列（char类型长度）；

user: user-3
content: gets(t[n])的意思是获取字符，就是运行程序时你从键盘上输入的字符。是stdio.h头文件里面包含的获取字符的函数。 (*t)[LEN]的意思是指向一维数组的的指针变量。而*t[n]是一个指针数组，两个是不一样的。一个是指针变量，一个是指针数组。

user: user-4
content: 先搞清楚t的类型 ，t的类型是 char(*)[LEN], 也就是它是一个指针，指向的内容类型是char[len]的一维数组，不容易理解的话你可以把它当做二维数组，那么t[0]对应的地址就是text[0],*t[n]的意思就是t[n][0]

user: user-0
content: 我想问的是在gettext函数中，gets(t[n])是什么意思，读入文本行的话为什么是一个【一维数组】呢？而且*t[n]又是什么意思？
user-0 提问: 求助，关于编译通过，运行失败，修改再次编译出问题

回复:
user: user-0
content: 原因确实是程序在后台运行，但是无法直接在任务管理器里找到。找到了一种解决办法：打开控制台->输入taskkill -IM XXX.exe /F强制关闭所有XXX.exe相关的服务。  不知道还有没有大神有更好的解决办法

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 不是这样的，我的意思是编译后的可执行程序崩溃后，就不能再次修改了（我知道问题出在哪，修改源代码编译就通不过），感觉是在后台运行着，但是在任务管理器里也找不到，编译时的提示信息为：ld.exe||cannot open output file bin\Debug\Caesar.exe Permission denied|

user: user-0
content: 引用 1 楼 NexTor 的回复:是不是任务管理器中还有caesar.exe在运行呀，应该不用重启电脑，先在任务管理器中把那个caesar.exe停掉再试一下 任务管理器里没有

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

user: user-2
content: 是不是任务管理器中还是有caesar.exe没有停掉，应该不用重启电脑的，可以先看看任务管理器中有没有caesar.exe，然后去停掉caesar.exe再试

user: user-2
content: 是不是任务管理器中还有caesar.exe在运行呀，应该不用重启电脑，先在任务管理器中把那个caesar.exe停掉再试一下

user: user-3
content: 引用 1 楼 NexTor 的回复:是不是任务管理器中还有caesar.exe在运行呀，应该不用重启电脑，先在任务管理器中把那个caesar.exe停掉再试一下+1，lz可能写的时GUI程序，然后程序没显示界面

user: user-4
content: 把你工程里的DEBUG文件夹里的东西都删除了，重新编译链接就行了
user-0 提问: C/C++ printf变参函数的实现机制和源代码

回复:
user: user-0
content: 多谢赵老师 @zhao4zhong2 ,@赵4老师 。

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

user: user-2
content: 一个普通的函数，看源码推荐看VC的，在crt/src目录下就有
user-0 提问: 帮忙用c语言解一个sin,cos 的方程式

回复:
user: user-1
content: 解方程，高中时候应该会这个，但现在，不会了……

user: user-2
content: 这个是非线性问题，可以用牛顿法（拟牛顿法）求解，你可以搜一下非线性方程组求解，一般会提到的

user: user-3
content: 大哥，这是纯数学题
user-0 提问: C指针内存泄露

回复:
user: user-0
content: 偶！我明白了，谢谢

user: user-1
content: p       = num; 这句把p的地址改变了

user: user-2
content: 先malloc后得到内存地址然后赋给p，然后这句p = num又把num的地址赋给p，从而导致之前malloc的内存泄露，最后free(p)是释放num的内存而不是之前malloc得到的内存，也是错误的。
user-0 提问: 不明白了，帮忙看看，求解释.

回复:
user: user-1
content: 函数声明是为了告诉编译器参数的类型，即使你不写后面的参数的名字也没关系，编译器在检查声明的时候是不检查参数名的，只检查类型。 这里你第一个参数是POINT类型，说明你告诉编译器第一个参数是POINT结构体，而不是一个指针。 //void RotatePoint (POINT pt[], int iNum, int iAngle) //上面和下面效果是是一样的（在函数声明的时候） //void RotatePoint (POINT , int iNum, int iAngle) /***************************************************************************/ 如果你要传入指针，就必须告诉编译器你的参数类型是指针，和参数名没关系。 //void RotatePoint (POINT* pt[], int iNum, int iAngle) //表示你传入了一个指针数组

user: user-2
content: POINT pt[]  说明pt变量是一个POINT类型的数组   这有啥问题吗？

user: user-3
content: 数组也可以理解为一个指针。传参也是传地址过去咯
user-0 提问: BPS基础入门题提交一直runtime error，提交了好多次了

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:首先这词是叫bfs…… 其次吧，!vis[x*2]&&x<=50000这么写是要越界访问的。你得两个条件倒一下。 噢噢，明白了

user: user-1
content: 是bfs吧，RE一般就是越界了

user: user-2
content: 首先这词是叫bfs…… 其次吧，!vis[x*2]&&x<=50000这么写是要越界访问的。你得两个条件倒一下。
user-0 提问: 新人求助

回复:
user: user-1
content: 先弄清楚scanf_s，它之所以是scanf的安全版本，就是因为加入了长度检测，防止缓冲区溢出 所以scanf_s比scanf 要多一个参数，就是限制的长度  此外scanf_s不是标准库函数，是VS的函数，所以不是很建议使用

user: user-2
content: https://msdn.microsoft.com/en-us/library/w40768et.aspx

user: user-0
content: 后面我了解到的三种读入读出字符串：1 在自己的cpp最上一行加 #define _CRT_SECURE_NO_WARNINGS，这样即可在后面用scanf读取字符串。2，使用scanf_s 但是后面scanf_s("%s", s);即第二个S后面要变成scanf_s("%s",s,400);。3，就是使用fgets，具体用法不祥说
user-0 提问: 请教c51如何提取unicode编码的短信中的数字，存入数组

回复:
user: user-0
content: 老师：我想在C51单片机使用，能再指教一下吗。

user: user-1
content: C51不支持sscanf函数吗？

user: user-1
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。 #include <stdio.h> char s[]="0036003300370032003200330031"; char d[32]; char *p; int i; int main() {     p=s;     i=0;     while (1) {         if (1!=sscanf(p,"003%1d",&d[i])) break;         d[i]+='0';         i++;         p+=4;     }     d[i]=0;     printf("%s",d);//6372231     return 0; }
user-0 提问: memcpy优化问题

回复:
user: user-1
content: memcpy(str, "123456789", 100-1); 数组越界了 未定义行为 结果没有意义

user: user-2
content: memcpy(str, "123456789", 100-1); 这句确实越界操作 了。

user: user-3
content: 太多了，分两部分发  从 src 4B -> dst 4B 你发现确实很快，有尾巴的时候单独处理一下 但是很奇怪你发现有时候性能反而更低了 原来有些平台下内存访问需要对齐的，从 0 开始取 4 字节，一次就完成了，从 3 开始取 4 字节居然要访问两次内存 先从内存取 0~3，扔掉 0~2，再从内存取 4~7，扔掉7，拼出一个 3~6 那肯定不能无脑的从 src 开始搞 4 字节了，你会怎么修改你的 memcpy？ 先想办法把 src 按字节取到某个边界上，再开始 4B copy 好，那么回头看一下你的代码，为什么结果是随机的呢，这与你的 src 和 dst 地址的起始位置是有关系的， 其中部分按字节copy了，另一部分又按 4B copy 了，而且触发的条件是不一样的

user: user-3
content: 哦，还是你啊，那就接着聊聊，首先指出一个问题，你上一个帖子说编译器优化，这是不对的 库函数的优化与编译器的优化是两种概念 假设库函数 memcpy 是你来实现的，按字节来copy基本都能写的出来 但是很快有开发人员向你抱怨 memcpy 性能低下， 因为内存的访问位宽不断在增加，内存很快，但相对于 CPU 终究还是瓶颈 一次访问一个字节压力太大（不考虑 Cache 等问题） 实际上一次内存的访问可以取到 4B，8B ... 那么你怎么来优化你的 memcpy 呢？ 你肯定想设计一个能一次 copy 4B 的 memcpy，不足 4B 或者不是 4B整数倍数怎么办？ 那就特殊处理一下（不可能用除法这种东西的 ^^）

user: user-4
content: msdn上解释的很清楚。src和dst存储空间重叠的场合，执行结果是未知的。 memcpy(str+2, "123456789", 9)；

user: user-5
content: void * memcpy ( void * destination, const void * source, size_t num );  To avoid overflows, the size of the arrays pointed by both the destination and source parameters, shall be at least num bytes, and should not overlap (for overlapping memory blocks, memmove is a safer approach).

user: user-6
content: 楼上解释得很清楚了 还有第一个memcpy也有问题，字符串没有那么大，你访问了不属于你的内存

user: user-7
content: 引用 10 楼 zhao4zhong1 的回复: 因为 copy的语义是操作后新目标和旧源内容相同且旧源的内容保持不变。 move的语义是操作后新目标和旧源内容相同且旧源的内容不一定保持不变。  所以 在源和目标内存覆盖的情况下，根本不可能实现copy！只能实现move    如果连这两者的语义都分不清的码农非要在不可能实现copy的情况下使用copy，那只能后果自负了！

user: user-7
content: http://bbs.csdn.net/topics/390983785
user-0 提问: 求大家帮忙看看这段代码哪里出错了？

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-1
content: double用%lf float用%f

user: user-1
content: 仅供参考#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.
user-0 提问: 关于未知长度的数组定义

回复:
user: user-1
content: 定义指针形式，再具体使用动态分配内存就好了。 不过这里还是需要知道你输入元素的长度，一般还是需要另外定义一个数组a[MAX]来判断需要分配的内存； 所以一般情况下一维数组不太用malloc，在二维及以上的时候用得比较多

user: user-2
content: 用标准模板库的std::string，它会根据你的字符串长度在堆上自动分配内存，而且效率也挺高，LZ可以研究下!

user: user-2
content: 用标准模板库的std::string，它会根据你的字符串长度在堆上自动分配内存，而且效率也挺高，LZ可以研究下!

user: user-3
content: p = (int *) malloc (sizeof(int));这就是动态数组的模型，

user: user-0
content: 哎，我试了一下，无论如何都需要知道一个需要的空间大小，否则怎么都不行的！谢谢各位的回答，让我也学习到不少东西！

user: user-0
content: 引用 7 楼 shenwansan_gz 的回复:lz的意思是定义一个完美的字符数组，可以储存任意长度的字符串？ 如果是这个意思的话，malloc也是要求知道分配内存的长度的吧！       比较简单的一个做法是，使用加一个参数来说明数组长度，以便分配内存 但是我需要的长度会随程序的运行和用户输入来决定的啊，用户说啥时候结束就啥时候结束输入，这样的话malloc就不好用了！

user: user-0
content: 引用 4 楼 Sean10 的回复:定义指针形式，再具体使用动态分配内存就好了。 不过这里还是需要知道你输入元素的长度，一般还是需要另外定义一个数组a[MAX]来判断需要分配的内存； 所以一般情况下一维数组不太用malloc，在二维及以上的时候用得比较多 我们拿二维举个例子，比如一个arr[][8]，我现在需要一个字符串数组，但是我不知道几个字符串，只知道是每个字符串有最多7个字符。而且字符串个数随用户输入而变的。我该怎么办，如果我就像前面那样定义的话，二维数组是连续存放的，后续定义的一些空间就会接在他后面，再往arr里写字符串就会覆盖后面的数据。

user: user-4
content: lz的意思是定义一个完美的字符数组，可以储存任意长度的字符串？ 如果是这个意思的话，malloc也是要求知道分配内存的长度的吧！       比较简单的一个做法是，使用加一个参数来说明数组长度，以便分配内存

user: user-0
content: 引用 2 楼 paschen 的回复:用标准模板库的std::string，它会根据你的字符串长度在堆上自动分配内存，而且效率也挺高，LZ可以研究下! 好的，需要深入研究下！

user: user-0
content: 引用 1 楼 anlory 的回复:p = (int *) malloc (sizeof(int));这就是动态数组的模型， 但是这样的话在内存中由于是动态数组，我事先什么都没有写，只是一个int大小的空间，我后面又分配了一个其他空间，会不会在int的空间后面接着分配出来？如果这样的话我写第二个int的时候会不会把第二次分配的空间覆盖掉？
user-0 提问: 关于结构体字段名已参数传入的问题

回复:
user: user-1
content: 直接写成成员函数不就行了嘛

user: user-2
content: 进行比较，如果结构体中字段较多的话，用一个switch case语句，当字符串是A，在A字段赋值，当字符串是B，在B字段赋值......

user: user-3
content: http://bbs.csdn.net/topics/390887494 这个帖子和楼主需求相似，该帖一楼回答得分。  Idle_ 回复于： 2014-09-17 09:21:08 c/c++可不是解释执行的语言。编译后结构体中并不存在什么名字。 想实现目的那么需要你手工建立一个名字字符串和结构中偏移量的对照表然后查表从名字获取偏移量再根据偏移量去读取具体数据。

user: user-3
content: 上面各位回答似乎没对需求。 楼主是想通过参数指定要赋值的结构体变量， 难点应该是判断结构体变量名是否与输入参数一致。但是，这个问题似乎不好办。 关注，等高人解答。

user: user-4
content: struct helloworld{    char hello[32];    char world[32]; }test;  set_default(test.hello, "123321"); 只会这样

user: user-5
content: 结构体内字段偏移量的问题是可以解决的 有一个经典的宏 #define offsetof(TYPE, FIELD)  ((size_t)&((TYPE *)0)->FIELD) 这是计算 FIELD 在结构中的偏移量，利用了 0 地址的一个小把戏  你可以用结构指针再加这个偏移量取得字段地址，用来赋值 你这个问题我还是不建议这么搞

user: user-6
content: 用strncpy确保数组拷贝不越界

user: user-7
content: set_default("hello", "123321"); set_default("world", "12321"); 你是要这两条语句分别赋值hello和world？那在函数里边写个字符串判断就行了吧。还是你要动态的改变变量名？那好像不行吧

user: user-8
content: 引用 2 楼 zhao4zhong1 的回复:小心驶得万年船：set_default(struct helloworld * str,  const char *item, const char *value) {         strncpy(str->hello, item ,31);(str->hello)[31]=0;         strncpy(str->world, value,31);(str->world)[31]=0; }  先不管item和value是否为NULL 就你这种作风，就像揩完屁股之后还要验一下是否擦净 唉。 赵老湿啊赵老湿， 你好湿 好诗！！

user: user-9
content: 小心驶得万年船：set_default(struct helloworld * str,  const char *item, const char *value) {         strncpy(str->hello, item ,31);(str->hello)[31]=0;         strncpy(str->world, value,31);(str->world)[31]=0; }

user: user-10
content: set_default(struct helloworld * str,  const char *item, const char *value) {         strcpy(str->hello, item);         strcpy(str->world, value); }   是这个意思吗
user-0 提问: c语言小问题

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”  理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！+1

user: user-2
content: 随便找本讲c或者c++的书，前三章之内必会告诉你反斜杠+数字是什么意思的............

user: user-3

user: user-4
content: 最好找本教材来熟悉一下语法。

user: user-4
content: 这是啥输出啊！没看到这样输出的。 printf(" %c  %c  %c  %c" , '41','\41',"41",41")中，‘41’，‘\41’，"41",41分别是什么意思！ %c是输出单个字符 \表示的是转义符 你可以将他设置为变量，一一输出。 初学C时，最后找本教材来熟悉一下语法。

user: user-5
content: 查MSDN是Windows程序员必须掌握的技能之一。

user: user-5
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”  理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-6
content: 这是个蛮有意思的问题，一般情况下单引号表述的是字符而不是字符串。 所以第一个的‘41’就有点费解，不过编译器既然能够编译过就有他的道理。 用VC6.0试验分析了下，发现在VC6.0环境下‘41’实际上是个32位的值0x00003431 这样第一个就有答案了0x00003431 强制类型转换为char型值就是0x31就是字符‘1’ 再举个例子 int a = '1234' 那么a的值就是0x31323334 这样可能更容易理解‘xxxx'的含义，但如果int a = '12345' 那么编译器就会报错了。  第二个‘\41’这个实际上就是转义字符\ddd 八进制的应用，八进制的41就是十进制的33，十六进制的0x21也就是字符'!'  第三个"41"的值是不固定的，因为返回的是字符串"41"地址的低8bit值，可能debug & release版本值就不一样了，要看编译器把"41"字符串放在哪儿。  第四个41就很简单了，十进制的41也就是十六进制的0x29也就是字符')'

user: user-7
content: 你在哪看到这么输出的

user: user-8
content: 1  !  �  )
user-0 提问: 统计数组中重复的元素（简易版统计单词频率，有图有真相）

回复:
user: user-1
content: 应该是int *end=numbers +100吧？引用 3 楼 fly_dragon_fly 的回复:1 . 直接加起来减去5050（1+..100) 2.  int receptionist(int numbers[]) {      int s=0;      int *end=numbers +101;      while(numbers!=end)            s +=*numbers++;      return s-5050; }

user: user-2
content: 唉妈, 怎么老写秃噜....  int fun(int* nums, int count) {   map<int, int> m;   for(int n = 0; n < count; n++)   {     auto ret = m.insert(std::pair<int,int>(nums[n], nums[n]));     if(ret.second == false)       return ret.first->second;   }   return 0; }

user: user-3
content: 求和减去1-100的和

user: user-4
content: 直接求和减去5050

user: user-5
content: 由于数的范围是100，计数会比较简单  #include <stdio.h> #include <stdlib.h> #include <time.h>  #define N 100  int receptionist(int numbers[]) {     int i;     int count[N] = {0};      for (i = 0; i < N + 1; i++)     {         if (count[numbers[i]]++)         {             return numbers[i];         }     }      return 0; }  int main(int argc, char *argv[]) {     int i, j;     int numbers[N + 1];     int pos, num;      srand(time(NULL));      pos = rand() % 101;     num = rand() % 100 + 1;      numbers[pos] = num;     j = 1;     for (i = 0; i < N + 1; i++)     {         if (i != pos)         {             numbers[i] = j++;         }     }      for (i = 0; i < N + 1; i++)     {         printf("%3d ", numbers[i]);         if (i % 10 == 9)         {             printf("\n");         }                  }     printf("\n=======================================\n");      printf("%d\n", receptionist(numbers));     return 0; }

user: user-6
content: 方法一：将101个正整数相加，再减去“1到100的和”。 方法二：遍历101个正整数，用一个位序列记录某个数是否出现过。 方法一要作固定次数的加法运算和一次减法运算，方法二可能会提前发现重复数。

user: user-7
content: 1 . 直接加起来减去5050（1+..100) 2.  int receptionist(int numbers[]) {      int s=0;      int *end=numbers +101;      while(numbers!=end)            s +=*numbers++;      return s-5050; }

user: user-8
content: 全加起来减去 n*(n+1)/2 就行了吧，n==100.

user: user-9
content: #include <stdio.h> #include <windows.h> #include <ctime>  //计算的原理 //(101个数字的和)-(1至100的和)==重复的那个数   int receptionist(int numbers[]) {     int sum101 = 0;     for (int i = 0; i < 101; ++i)     {         sum101 += numbers[i];     }      //自然数前n项[0-n]和公式n*(n-1)/2     //前101项和[0-100]     int sum100 = 101*(101 - 1)/2;      return sum101 -sum100; } int main() {     //初始化101个数     int arr[101] = {0};     for (int i = 0; i < 100; ++i)     {         arr[i] = i + 1;     }     srand(unsigned(time(0)));     arr[100] = (rand() % 99) + 1;//这个是重复的数      //计算     printf("实际重复的是 %d\n", arr[100]);     printf("计算重复的是 %d\n", receptionist(arr));     system("pause"); }

user: user-10
content: //不考虑空间复杂度的话 int receptionist(int numbers[]) { 	int N[101]; 	for(int a = 0; a < 101; a++) 	{ 		N[a] = 0; 	} 	for(int i = 0; i < 101; i++) 	if(N[numbers[i]] > 0) 	{ 		return numbers[i]; 	} 	else 	{ 		N[numbers[i]]++; 	} 	return 0; }
user-0 提问: 关于数据结构中广义表搜索的问题。。

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

回复:
user: user-1
content: 引用 5 楼 cutmelon 的回复:[quote=引用 4 楼 u012309996 的回复:] [quote=引用 1 楼 cutmelon 的回复:] 崩溃在最后一句了吧，当时p==NULL，你还调用p->pnext 去掉还是崩溃[/quote] 呵呵，我没仔细看所有的代码，就看了最后一个函数，最明显会崩溃的地方就上面说的了 如果还崩溃，估计就是free这句了，当时的p是否一个无效指针，自己调试一下吧[/quote] 闲着无聊帮你看了一遍，你这个问题啊，哈哈 你不要只是把 p->pnext=NULL;去掉了事，要把它改成 pHead->pnext=NULL; 因为你的主函数在释放之后又遍历了一次，这次是会崩溃的哦，因为你的链表头后续了一个无效指针。 另外主函数退出之前没有释放pHead，有内存系泄露啊

user: user-1
content: 引用 4 楼 u012309996 的回复:[quote=引用 1 楼 cutmelon 的回复:] 崩溃在最后一句了吧，当时p==NULL，你还调用p->pnext 去掉还是崩溃[/quote] 呵呵，我没仔细看所有的代码，就看了最后一个函数，最明显会崩溃的地方就上面说的了 如果还崩溃，估计就是free这句了，当时的p是否一个无效指针，自己调试一下吧

user: user-2
content: 引用 1 楼 cutmelon 的回复:崩溃在最后一句了吧，当时p==NULL，你还调用p->pnext 去掉还是崩溃

user: user-3
content: 好吧，我上面说的话有些不负责任，你可以搜索，如果不清楚再来问。

user: user-3
content: 跟踪调试可以解决绝大多数的问题。 想知道怎么跟踪吗？网络搜索吧。满世界都是。

user: user-1
content: 崩溃在最后一句了吧，当时p==NULL，你还调用p->pnext
user-0 提问: 新手 数组 问题求助

回复:
user: user-1
content: 引用 1 楼 a1193561652 的回复:c，d未初始化。然而二楼早已看穿真相

user: user-0
content: 谢谢啊 这错误太低级了

user: user-2
content: c，d未初始化。
user-0 提问: 怎么入手蓝牙开发？

回复:
user: user-1
content: 到kernel里面翻翻源码吧   肯定有的

user: user-2
content: bluez 开源蓝牙代码

user: user-3
content: 可以看一下中国电子网

user: user-4
content: 坐等，也想学习

user: user-0
content: 引用 1 楼 user-5 的回复:如果硬件可以不用关心得话，做单片机c语言控制蓝牙得代码应该挺多，再搞懂一下蓝牙的通讯协议，就可以测试一下了，当然用arm,安卓嵌入式得系统，更方便了，直接用封装好了的通讯socket多谢回复，有这方面比较好的源码网站推荐么，我上pudn里搜了几个都不是完整的

user: user-5
content: 如果硬件可以不用关心得话，做单片机c语言控制蓝牙得代码应该挺多，再搞懂一下蓝牙的通讯协议，就可以测试一下了，当然用arm,安卓嵌入式得系统，更方便了，直接用封装好了的通讯socket
user-0 提问: 在快速使用WM_LBUTTONDOWN的时候怎么不触发WM_LBUTTONDBLCLK

回复:
user: user-1
content: createwindow是WS_风格，不能修改CS的，确实是不需要CS_DBLCLKS,这需要在RegisterClass的时候修改 比如 ：      WNDCLASS  wc;    wc.style =0 ; // 就是这里    ...    RegisterClass(&wc);    CreateWindow 用这个注册的窗口就可以了

user: user-2
content: 我会告诉你在双击时发送单击消息也可么

user: user-3
content: CreateWindow()函数创建窗口，其中有一个参数是窗口风格，把这个参数改成没有CS_DBLCLKS的就行了。

user: user-0
content: 引用 1 楼 a1193561652 的回复:窗口不加CS_DBLCLKS风格就好了。  初学者 能不能具体一点

user: user-3
content: 窗口不加CS_DBLCLKS风格就好了。
user-0 提问: 求找错！！！

回复:
user: user-0
content: 引用 7 楼 wanbinbing 的回复:怎么没贴出正确答案？ Result : Accept #include <stdio.h>  int gcd(int a, int b) {     int tmp, r, mul;     if(a < b)         tmp = a, a = b, b = tmp;     while(b!=0)     {         r = a % b;         a = b;         b = r;     }     return  a; }  int lcm(int a, int b) {     return a/gcd(a, b)*b; }  int main() {     int n, i, min;     int str[120];      while(scanf("%d",&n) != EOF)     {         for( i = 0; i < n; i ++)         {             scanf("%d",&str[i]);         }         if(n == 1)         {             printf("%d\n",str[0]);             continue;         }         min = lcm(str[0], str[1]);         for(i = 2; i < n; i ++)         {             min=lcm(min,str[i]);         }         printf("%d\n",min);     }     return 0; }

user: user-1
content: 0和1已经得到公倍数了，i应该从2开始， WA的原因我想应该是有溢出 在求lcm时，不应该先做乘法，可以会溢出 ，应该差不多这样  int lcm(int a,int b) {     return a/gcd(a,b) * b; }

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

user: user-3
content: 怎么没贴出正确答案？

user: user-4
content: 引用 3 楼 adusuccessfully 的回复:1、求最小公倍数最起码涉及到两个数，所以我认为没必要判断n=1的情况； 2、1楼的解答是对的，第二个for循环n要从0开始； 3、我对楼主的程序加了一些说明性的汉字，如下：  #include <stdio.h> int gcd(int a, int b) { 	int tmp, r, mul; 	mul = a * b; 	if(a < b) 		tmp = a, a = b, b = tmp; 	while(b!=0) 	{ 		r = a % b; 		a = b; 		b = r; 	} 	return mul / a; }  int main() { 	int n, i, min; 	int str[120]; 	printf("请输入要输入数的个数n(n>=2):"); 	while(scanf("%d",&n) != EOF) 	{ 		printf("请输入%d个数:",n); 		if(n == 1) 		{ 			printf("要求最小公倍数，至少要有两个数\n"); 			printf("请输入要输入数的个数n(n>=2):"); 			//printf("%d\n",str[0]); 			continue; 		} 		for( i = 0; i < n; i ++) 		{ 			scanf("%d",&str[i]); 		} 		min = gcd(str[0], str[1]); 		for(i = 0; i < n; i ++) 		{ 			min=gcd(min,str[i]); 		} 		printf("这%d个数的最小公倍数是：%d\n",n,min); 		printf("请输入要输入数的个数n(n>=2):"); 	} 	return 0; }  下面是测试结果： 其实我是想说的是i从2开始，因为他前面有一句min = gcd(str[0], str[1])；不过应该不影响结果，只是做一次无用的运算，但是楼主说有问题我想会不会是a*b溢出了。

user: user-5
content: 1、求最小公倍数最起码涉及到两个数，所以我认为没必要判断n=1的情况； 2、1楼的解答是对的，第二个for循环n要从0开始； 3、我对楼主的程序加了一些说明性的汉字，如下：  #include <stdio.h> int gcd(int a, int b) { 	int tmp, r, mul; 	mul = a * b; 	if(a < b) 		tmp = a, a = b, b = tmp; 	while(b!=0) 	{ 		r = a % b; 		a = b; 		b = r; 	} 	return mul / a; }  int main() { 	int n, i, min; 	int str[120]; 	printf("请输入要输入数的个数n(n>=2):"); 	while(scanf("%d",&n) != EOF) 	{ 		printf("请输入%d个数:",n); 		if(n == 1) 		{ 			printf("要求最小公倍数，至少要有两个数\n"); 			printf("请输入要输入数的个数n(n>=2):"); 			//printf("%d\n",str[0]); 			continue; 		} 		for( i = 0; i < n; i ++) 		{ 			scanf("%d",&str[i]); 		} 		min = gcd(str[0], str[1]); 		for(i = 0; i < n; i ++) 		{ 			min=gcd(min,str[i]); 		} 		printf("这%d个数的最小公倍数是：%d\n",n,min); 		printf("请输入要输入数的个数n(n>=2):"); 	} 	return 0; }  下面是测试结果：

user: user-6
content: 100000 100000

user: user-4
content: for(i = 1; i < n; i ++)  {         min=gcd(min,str[i]);  } i从1开始？
user-0 提问: 求助：关于debug error的问题！

回复:
user: user-1
content: http://bbs.csdn.net/topics/390471779

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

user: user-2
content: 引用 4 楼 xingxing991219 的回复:[quote=引用 1 楼 user-4 的回复:] 我之前因为SCANF 浮点变量也老是出现这个问题。你试下把DOUBLE 变量先赋初值。在SCANF前面加句fahrenheit=0;  就是这样：（我加了一个fahrenheit = 0;） [/quote] double的要换成%lf就可以了。  #include<stdio.h>  int main() {     int input_type;  //用于判断输入是否为数字  是为1，否为0     double fahrenheit=0;       input_type = scanf("%lf",&fahrenheit);     printf("%d\t%lf",input_type, fahrenheit);       return 0; }

user: user-0
content: 引用 1 楼 user-4 的回复:我之前因为SCANF 浮点变量也老是出现这个问题。你试下把DOUBLE 变量先赋初值。在SCANF前面加句fahrenheit=0;  就是这样：（我加了一个fahrenheit = 0;）

user: user-0
content: 引用 1 楼 user-4 的回复:我之前因为SCANF 浮点变量也老是出现这个问题。你试下把DOUBLE 变量先赋初值。在SCANF前面加句fahrenheit=0;  可是我初始化了之后，fahrenheit的值就一直变成了0，scanf完了也不会改变，初始化的值是多少它就一直是多少

user: user-3
content: 出现的问题是这个 “runtime error R6002   - floating point not loaded” 像楼上那样写就可以解决这个问题。 下面是从网上找到的解答这是由于scanf的一个bug造成， 在前面一行加入float fahrenheit=0; 使得scanf使用浮点数前先初始化过浮点数就OK.

user: user-4
content: 我之前因为SCANF 浮点变量也老是出现这个问题。你试下把DOUBLE 变量先赋初值。在SCANF前面加句fahrenheit=0;