Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C指针问题

回复:
user: user-1
content: 楼上的指引不错

user: user-2
content: 参看：http://baike.baidu.com/link?url=Mgj7A5ptGaAXAzLJvARVSGFRax86KL853vDeSSEBLKpwPTDz40cVOTB2fTGrp4SdV9XXQE88FrThXgY3i2-_o_

user: user-3
content: 另外补充一下，你提的这个问题说明你的基础知识不够牢固，还是把C语言相关的书籍多看几遍吧

user: user-3
content: 我总结一下： 1、首先你定义了一个字符指针用来指向一个字符串，这是字符串的另一种表示形式 2、在你的printf函数中格式控制参数是%s即输出一个字符串 3、如果你想输出字符串的地址，格式控制参数应该是%d、%p等

user: user-4
content: 你把格式化字符%s改成%p就是打印指针值了

user: user-5
content: printf见到%s就会打印该地址保存的字符串

user: user-6
content: *mesg确实是这个地址保存的内容，但是他只限于一个字符。如果要打印整个字符串，就得用%s printf("*mesg=%c\n",*mesg);  用%c可以输出第一个字符，也就是'D'

user: user-6
content: mesg确实是个地址，但是，注意这里用的是%s，printf见到%s就会打印该地址保存的字符串。 如果要打印地址，用%d、%x、%p之类的都可以。
user-0 提问: 求助大神，关于数组

回复:
user: user-0
content: 如：共有100道题目，给10个人选择，每人选择其中10道题目，先选择的人所选的题目，后面的人不能选择；需要先选择的人取消掉选中的题目后，后面的人才能选择该题目 如何利用动态数组完成该程序！谢谢

user: user-1
content: 对楼主的题目感到迷惑

user: user-2
content: 楼主要的是什么？ 所有的组合？还是组合的个数？
user-0 提问: c语言的scanf输入有问题，找不到问题在哪里，请高手指教~

回复:
user: user-0
content: 引用 2 楼 wang0635 的回复:"%d,%d" 第一个整数输入结束紧跟一个逗号。为什么？你自己写的程序这样要求的。 谢谢，问题解决了~~

user: user-0
content: 引用 1 楼 qq_29467321 的回复:输入时，12和13中间加个“，”。试下   谢谢，问题解决了，的确是少个逗号，忘记了键入数据时要跟scanf双引号里的格式一样了。

user: user-1
content: 又是输入格式的问题，把C语言的书好好看看吧

user: user-2
content: "%d,%d" 第一个整数输入结束紧跟一个逗号。为什么？你自己写的程序这样要求的。

user: user-3
content: 输入时，12和13中间加个“，”。试下
user-0 提问: 求大神解答问题~~~

回复:
user: user-1
content: 仅供参考：void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-2
content: extern char *strupr(char *s); 将字符串s转换为大写形式,只转换s中出现的小写字母，不改变其它字符。返回指向s的指针。

user: user-3
content: strupr(); ??  参数可以为空的吗.. 编译都不能够通过, 能运行??
user-0 提问: 求大神 帮忙看看为什么无法绘制按钮图片

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:(WPARAM)IMAGE_BITMAP 果然可以了 为什么不能是BS_BITMAP呢?  是不是我加载的时候定义成IMAGE_BITMAP 了?

user: user-1
content: (WPARAM)IMAGE_BITMAP
user-0 提问: 对话框显示不正常,不能拖动,什么原因,请高手指教!

回复:
user: user-0
content: 有木有高手帮忙指点下呀??

user: user-0
content: 我知道可以自动生成,但是那就不知道怎么实现的,所以才想要用API的方式来实现.

user: user-0
content: 我猜是下边这个函数最后一个参数没设置对,但是要设置多少呢? MSDN上说,最后这个参数是初始化时,要发送给对话框处理函数的消息参数,没有例子, DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_AboutBox), hwnd, (DLGPROC)AboutDlgProc,NULL) ;

user: user-1
content: 建议你用visual studio 2013建一个win32程序，他自动生成的代码就有显示关于对话框的。

user: user-2
content: http://bbs.csdn.net/topics/390374955

user: user-0
content: 高手请进来帮忙解决下呀!!
user-0 提问: 给指针赋值出错了

回复:
user: user-1
content: 指针的地址和指针指向的地址是不一样的。 float* p1是指针，float（*p2）[4]是数组指针。 单独拿出来做赋值是不行的。 p1是float*型的指针，p2是指向数组的指针，数组元素都是指针 所以p1和p2[1],p2[2],p2[3],p2[4]是等价的。

user: user-2
content: 建议把（*pointer）[4]搞清楚

user: user-3
content: float *search(float pointer[4],int n) {     float *pt;     pt=pointer+n;        //error     return pt; }

user: user-4
content: 指针和指针能一样吗

user: user-5
content: pointer有个*和[], 可以当做二维数组,pt只有一个*, 当做一维的, 改成这样 pt=pointer[n];

user: user-6
content: 看c数组本质：http://blog.csdn.net/zhangxiangdavaid/article/details/38111983

user: user-7
content: float **pt;     pt=pointer+n;        //error    return *pt;  float *pt;     pt=pointer[n];        //error     return pt;

user: user-6
content: pt和pointer的类型不一样。
user-0 提问: C语言正则表达式问题

回复:
user: user-1
content: 仅供参考：//摘自《代码之美》 // 字符     含义 // .        匹配任意的单个字符 // ^        匹配输入字符串的开头 // $        匹配输入字符串的结尾 // *        匹配前一个字符的零个或者多个出现 #include <stdio.h> int matchhere(char *regexp, char *text);  int matchstar(int c, char *regexp, char *text) {// matchstar: search for c*regexp at beginning of text    do {// a * matches zero or more instances        if (matchhere(regexp, text)) return 1;    } while (*text != '\0' && (*text++ == c || c == '.'));    return 0; } int matchhere(char *regexp, char *text) {// matchhere: search for regexp at beginning of text    if (regexp[0] == '\0') return 1;    if (regexp[1] == '*') return matchstar(regexp[0], regexp+2, text);    if (regexp[0] == '$' && regexp[1] == '\0') return *text == '\0';    if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text)) return matchhere(regexp+1, text+1);    return 0; }  int match(char *regexp, char *text) {// match: search for regexp anywhere in text     if (regexp[0] == '^') return matchhere(regexp+1, text);     do {// must look even if string is empty         if (matchhere(regexp, text)) return 1;     } while (*text++ != '\0');     return 0; } void main() {     printf("%d==match(abc ,abc)\n",match("abc" ,"abc"));     printf("%d==match(^a  ,abc)\n",match("^a"  ,"abc"));     printf("%d==match(c$  ,abc)\n",match("c$"  ,"abc"));     printf("%d==match(a.c ,abc)\n",match("a.c" ,"abc"));     printf("%d==match(a.*c,abc)\n",match("a.*c","abc"));     printf("-------------------\n");     printf("%d==match(ABC ,abc)\n",match("ABC" ,"abc"));     printf("%d==match(^B  ,abc)\n",match("^B"  ,"abc"));     printf("%d==match(A$  ,abc)\n",match("A$"  ,"abc"));     printf("%d==match(a..c,abc)\n",match("a..c","abc"));     printf("%d==match(a.*d,abc)\n",match("a.*d","abc")); } //1==match(abc ,abc) //1==match(^a  ,abc) //1==match(c$  ,abc) //1==match(a.c ,abc) //1==match(a.*c,abc) //------------------- //0==match(ABC ,abc) //0==match(^B  ,abc) //0==match(A$  ,abc) //0==match(a..c,abc) //0==match(a.*d,abc)

user: user-2
content: 我靠，楼主是想自己写一个正则库？

user: user-3
content: 如果位数固定了直接取就行了，这样速度最快，如果位数不固定，用正则的话楼上已经写了。如果不能满足要求，再将后面的加上

user: user-4
content: 看起来用不上正则, 试试吧 [a-z]+\\d{8}(\\d\\d)

user: user-0
content: 额       原串是   abc20150703551111.012txt   规律应该是     abcYYYYMMDD??1111.012txt 目的要通过传给程序一个正则表达式     把原串里面的??两位数字取出来

user: user-3
content: 原始串是什么样？你要截取的子串“abc20150703551111.012txt”有何规律？例如：长度固定，格式固定。 把要求列清楚才能写对应的匹配表达式，至于你说的提取55，如果子串有规律，直接group就出来了。 所以前提是你要把原始串和提取串规律描述清楚。
user-0 提问: int *p[4] 与 int (*p)[4] 有何区别

回复:
user: user-1
content: 这个简单，类型识别的依据是C语言的运算符优先级，括号优先级最高，其次是[]和.和->  int *p[4]，先定位标志符p，然后根据运算符优先级确定p的结合顺序。 1）p的左边是*（指针），右边是[4]，显然[]优先级较高，p与[4]结合，p[4]，意思是p是长度为4的数组。 2）把p[4]看作一个整体，那么它的右边没东西了，然后看左边，*（指针），*(p[4])，数组元素的类型是指针。 3）把*(p[4])看作一个整体，右边没有，继续看左边，int，int (*(p[4]))，指针的类型是int。 结论：p是长度为4的数组，数组的每个元素的类型是指针，指针指向int类型。  int (*p)[4]，先定位标志符p。 1）先看p的右边，括号的优先级最高，括号内为*p，即p是指针。 2）*p看作一个整体，再往右边看，(*p)[4]，指针指向长度为4的数组。 3）把(*p)[4]看作一个整体，往右看，没东西了，那就往左看，int，数组元素的类型是int。 结论：p是指针，指向长度为4的数组，数组的元素类型是int。

user: user-0
content: 20分钟就结贴，够快吧

user: user-2
content: 两者对应的是指针数组与数组指针 指针数组：数组的元素是指针变量 数组指针：指向数组的指针变量

user: user-3
content: int *p[4]  ,, p 是4个元素的数组,每个元素类型为int *  int (*p)[4] , p 是指针, 对应类型为int [4]
user-0 提问: 栈

回复:
user: user-1
content: 1. 在InitStack返回之前加一行S.top = S.base; 2. pop的第二个参数改成引用，SElemType &e

user: user-1
content: 1. 在InitStack返回之前加一行S.top = S.base; 2. pop的第二个参数改成引用，SElemType &e
user-0 提问: 求带  大神，看书自学时看到的一个问题

回复:
user: user-1
content: bool mine[11]; void high(int d) {     for(;d<=10;d++) mine[d]=1; } void low(int d){     for(;d>=1;d--) mine[d]=1; } int main() {     int n;     char ans[200];     while(scanf("%d",&n)==1 && n){         gets(ans);gets(ans);         if(!strcmp(ans,"too high")) high(n);         else if(!strcmp(ans,"too low")) low(n);         else{             printf("%s\n", mine[n] ? "yes" : "maybe");             memset(mine,0,sizeof mine);         }     }     return 0; }
user-0 提问: 求大神帮忙解答

回复:
user: user-1
content: 给的测试用例，空格是不是太多了

user: user-2
content: 3 4 5 1 1 0 2 0 2 6 2 7 1 4 2 3 1 0 0 后面两组分别是4人和5人分数吗,这怎么看
user-0 提问: 新手用printf的困惑，不知道你碰到没有

回复:
user: user-1
content: #include<stdio.h> int main() { 	int i, t; 	t = 1; 	i = 2; 	while (i <= 5) 	{ 		t = t * i; 		i = i + 1; 		printf("%d\n", t);  //把printf移动到循环内部 	} 	return 0; } //2 //6 //24 //120

user: user-2
content: 你好好看看C语言的书吧，你这是要被别人喷的节奏

user: user-3
content: 你第一个printf在while循环里，所以每运行一次循环输出一次；第二个printf在循环外，所以当循环运行完毕才会输出，所以只有一个输出

user: user-4
content: while的作用范围问题，你把第二个的while的大括号写到printf后面就会是你说的那种结果

user: user-5
content: while后面加{}，作用范围不同，第一个是printf()语句在while{}里面，每执行一次循环输出一次，而第二个printf()语句在while{}外面，执行完while{}之后再执行printf()语句

user: user-6
content: 我擦，你是小学生?第一段循环一次打印一次，有错?第二段循环结束，打印结果有错?你先去理解while的含义
user-0 提问: 跪求大神指点

回复:
user: user-0
content: 引用 7 楼 user-1 的回复:你这个extern回调函数是在cpp里声明的嘛，你把它放到头文件里就木有问题了，要不把你源码发上来看看 不是吧.. 我在头文件中自定义的函数  要在源文件中 extern  才能在源文件中调用这个函数. 我是把消息回调函数 写入头文件中 然后把源文件中调用! 源文件:(cs.c)  extern LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);  头文件:  LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {    //......... }

user: user-1
content: 你这个extern回调函数是在cpp里声明的嘛，你把它放到头文件里就木有问题了，要不把你源码发上来看看

user: user-0
content: 引用 5 楼 user-1 的回复:你应该把  extern HWND CreateButton(char*,int,int,int,int,HWND,HMENU);//自绘风格按钮  放在头文件里，把  HWND CreateButton(char* text,int x,int y,int w,int h,HWND zwnd,HMENU ID)//创建 Button  返回窗口句柄 {     HWND Q = CreateWindow ("BUTTON",text,         WS_CHILD | WS_VISIBLE | BS_BITMAP | BS_ICON |WS_TABSTOP,//样式顺序 子窗口 可显示  自绘样式         x,y,w,h,//x y 宽高 客户区位置  大小         zwnd,ID,//子窗口ID         (HINSTANCE) GetWindowLong(zwnd, GWL_HINSTANCE),NULL);     return Q; }  放相应的源文件里 也就是说，全局函数的声明要放在头文件里，它的实现要放在源文件里，你把这两个放反了。  我现在又恢复,真是操蛋.... 不是你说的放反了 而是我把消息回调函数 独立放在另一个头文件中 就出现了这错误. 放回源文件 又神奇的好了 可以编译了 . 但是我想知道为什么 ? 我也引用了这个头文件 而且 也用 extern 声明的回调函数 居然报错在另一个文件  我一直用VC6.0 编写的

user: user-1
content: 你应该把  extern HWND CreateButton(char*,int,int,int,int,HWND,HMENU);//自绘风格按钮  放在头文件里，把  HWND CreateButton(char* text,int x,int y,int w,int h,HWND zwnd,HMENU ID)//创建 Button  返回窗口句柄 {     HWND Q = CreateWindow ("BUTTON",text,         WS_CHILD | WS_VISIBLE | BS_BITMAP | BS_ICON |WS_TABSTOP,//样式顺序 子窗口 可显示  自绘样式         x,y,w,h,//x y 宽高 客户区位置  大小         zwnd,ID,//子窗口ID         (HINSTANCE) GetWindowLong(zwnd, GWL_HINSTANCE),NULL);     return Q; }  放相应的源文件里 也就是说，全局函数的声明要放在头文件里，它的实现要放在源文件里，你把这两个放反了。

user: user-0
content: 引用 2 楼 user-1 的回复:擦，不是#include"windows.h"的问题，你肯定已经包含了。你把b.c和a.h的内容换一下，extern的东西写在a.h头文件里，然后在b.c里#include"a.h"。这样就行了。你把这两个东西放反了。 我b.c里包含有 a.h . 你有空看下源码么? 是写界面的 我实在找不出来怎么回事了

user: user-0
content: 引用 2 楼 user-1 的回复:擦，不是#include"windows.h"的问题，你肯定已经包含了。你把b.c和a.h的内容换一下，extern的东西写在a.h头文件里，然后在b.c里#include"a.h"。这样就行了。你把这两个东西放反了。 哥哥 你给我说晕了

user: user-1
content: 擦，不是#include"windows.h"的问题，你肯定已经包含了。你把b.c和a.h的内容换一下，extern的东西写在a.h头文件里，然后在b.c里#include"a.h"。这样就行了。你把这两个东西放反了。

user: user-1
content: 你有没有#inlcude "windows.h"?
user-0 提问: 【求助】福利啊，发一个开源浏览器源码。编译器问题

回复:
user: user-0
content: 像这么多的源码，我该如何把他们都编译，生成exe或者什么，该怎么改？

user: user-0
content: 引用 1 楼 user-1 的回复:我是2013的，没atl库编译不了，要不你发来？ 源码我已经附上

user: user-1
content: 我是2013的，没atl库编译不了，要不你发来？
user-0 提问: 求助C语言问题

回复:
user: user-1
content: 指针p没有初始化

user: user-2
content: 不光是那个问题，下面是修改的程序，你看看吧 #include <stdio.h>    float plus(int n,float *p);  int main() { 	int n; 	float a[]={0}; 	float *p=a; 	printf("请输入n:\n"); 	scanf("%d",&n); 	printf("%f\n",plus(n,p));  	return 0; }  float plus(int n,float *p) { 	float i; 	float k=0; 	if (n%2==0) 	{ 		for(i=1;i<=(n/2);i++) 		{ 			k+=1/(2*i);   	    }     }     else    {         for(i=1;i<=((n+1)/2);i++)         {            k+=1/(2*i-1);         }    } 	*p=k; 	return *p; }

user: user-3
content: 这是作业题吧，来来来  #include <stdio.h>   float odd(int n) { 	double ret = 0; 	for (float i =1; i <= n; i += 2, ret += 1/i); 	return ret; } float event(int n) { 	double ret = 0; 	for (float i = 2; i <= n; i += 2, ret += 1/i); 	return ret; } float plus(int n) { 	float(*p)(int); 	if (n % 2)p = odd; 	else p = event; 	return p(n); } int _tmain(int argc, _TCHAR* argv[]) { 	int n; 	printf("请输入n\n"); 	scanf("%d", &n); 	printf("%f\n", plus(n)); 	return 0; }

user: user-0
content: 这个好像是指针变量P没有分配空间 一定要用指针函数的话怎么解决这个问题？
user-0 提问: 求教关于define和条件编译的一个代码

回复:
user: user-1
content: 举个例子 EXT_DO_C  int  fun()  编译时 #ifdef MODEINIT_DO_C #define EXT_DO_C              ／／这里变成   int  fun() #else #define EXT_DO_C extern      ／／这里变成  extern  int  fun() #endif

user: user-2
content: 不接就是空，什么也没有

user: user-1
content: 不接后缀（应该是替换的内容）  就是将EXT_DO_C   替换为空
user-0 提问: 关于比较运算中的自动类型转换的疑问

回复:
user: user-1
content: 因为是无符号数的缘故

user: user-2
content: 无符号的比较运算和有符号的是不一样的 （unsigned）-1>1                      true

user: user-3
content: 引用 5 楼 jianwen0529 的回复:无符号数不可能为负数，当用一个负数赋值依旧是一个负数 跟LS说的一样  更正下 无符号数不可能为负数，当用一个负数赋值依旧是一个正数

user: user-3
content: 无符号数不可能为负数，当用一个负数赋值依旧是一个负数 跟LS说的一样

user: user-4
content: 同意一楼，打印m，n的数据看看

user: user-0
content: GetTickCount64()返回的值要上百年才会溢出,我才开机几天,没有溢出,我看过,改成下面这样就能正确运行,所以我认为是自动类型转换的问题  	ULONGLONG m = GetTickCount64(); 	ULONGLONG n = m + 2000; 	if (m>n+1000)  ///////////// 	{ 		printf("Error"); 	}

user: user-5
content: 两个无符号类型的数相减，结果是无符号类型的，比如说m = 0，n = 2000。m - n = -2000，-2000用无符号类型表示就是一个很大的值，还知道补码是怎么回事么？

user: user-6
content: 一种可能： m较大，致使m + 2000溢出，所以n会偏小，m-n=max-2000>2000
user-0 提问: ios 关于swrevealviewcontroller 的问题

回复:
user: user-0
content: 自问自答：在需要进行跳转页面增加如下代码： ViewController* mainview = [[ViewController alloc]init];     UINavigationController* nav = [[UINavigationController alloc]initWithRootViewController:mainview];     self.viewController = nav;     [self.revelController setFrontViewController:self.viewController animated:YES];
user-0 提问: 为什么这段归并排序的代码通过编译后不能运行？

回复:
user: user-1
content: 引用 4 楼 Richard_00 的回复:zhangxiangDavaid的代码：int *tmp = malloc(sizeof(int)*n);应该改成int *tmp = (int*)malloc(sizeof(int)*n); 哈哈，在vc下不需要这样

user: user-2
content: zhangxiangDavaid的代码：int *tmp = malloc(sizeof(int)*n);应该改成int *tmp = (int*)malloc(sizeof(int)*n);

user: user-0
content: 二位的代码很简洁，谢谢。

user: user-3
content: 你这个程序有点凌乱，下面是我写的一个归并排序的程序，你可以参考一下，希望可以给你帮助，主要还是要理清算法的过程 #include<stdio.h>  #define max 5  void mergearray(int a[],int first,int mid,int last) { 	int i=first,j=mid+1; 	int m=mid,n=last; 	int k=0; 	int temp[max];  	while(i<=m&&j<=n) 	{ 		if(a[i]<=a[j]) 			temp[k++]=a[i++]; 		else  			temp[k++]=a[j++]; 	}  	while(i<=m) 		temp[k++]=a[i++];  	while(j<=n) 		temp[k++]=a[j++];  	for(i=0;i<k;i++) 		a[first+i]=temp[i]; }  void mergesort(int a[],int first,int last) { 	if(first<last) 	{ 		int mid=(first+last)/2; 		mergesort(a,first,mid); 		mergesort(a,mid+1,last); 		mergearray(a,first,mid,last); 	} }  int main() { 	int i; 	int a[max]={4,3,1,7,6}; 	mergesort(a,0,max-1); 	for(i=0;i<max;i++) 	printf("%2d",a[i]); 	return 0; }

user: user-1
content: 换一个思路，比如下面这个：  void mergearray(int *a, int first, int mid, int last, int *tmp) { 	int i, j, k, r; 	k = r = 0; 	i = first, j = mid + 1; 	do 	{ 		if (a[i] <= a[j]) tmp[k++] = a[i++]; 		else tmp[k++] = a[j++]; 	} while (i <= mid && j <= last); 	while (i <= mid) tmp[k++] = a[i++]; 	while (j <= last) tmp[k++] = a[j++]; 	do 	{ 		a[first + r] = tmp[r]; 		r++; 	} while (r < k); } void mergesort(int *a, int first, int last, int *tmp) { 	if (first < last) 	{ 		int mid = first + ((last - first) >> 1); 		mergesort(a, first, mid, tmp); 		mergesort(a, mid + 1, last, tmp); 		mergearray(a, first, mid, last, tmp); 	} } void MergeSort(int *a, int n) { 	int *tmp = malloc(sizeof(int)*n); 	mergesort(a, 0, n - 1, tmp); 	free(tmp); } int main(void) { 	int arr[] = { 2,1,6,4,0,3,9,5,8,7 }; 	MergeSort(arr, 10); 	return 0; }
user-0 提问: onvif 测试工具搜索不到设备

回复:
user: user-0
content: 引用 3 楼 user-2 的回复:[quote=引用 2 楼 qq_27115241 的回复:] 我们有一套是用gsoap库实现的，不过每次对接的时候别家的NVR时他们都会添加其他结构体成员，每次都要重新编译gsoap库，而且库太大了，我们就想自己再写一套onvif出来，不用gsoap库了。  现在搞得测试工具都搜索不到了 自己写一套onvif，工作量可不小。discovery只是第一步。我还是建议用过gsoap来做。不知道你们是怎么做的，我用gsoap的discovery插件的功能， 基本主流的nvr都可以识别。[/quote]  你说的这个使用discovery插件功能是必须要在使用gsoap库的基础上吗？  不使用gsoap库能用discovery插件功能不？

user: user-1
content: 貌似Onvif Device Manager 不处理 <wsa5>标记

user: user-1
content: wireshark / tcpdump 抓包分下看看设备发现请求的区别 看看Onvif Device Manager 的设备发现请求有哪些  <XX:probe>？？

user: user-2
content: 引用 2 楼 qq_27115241 的回复:我们有一套是用gsoap库实现的，不过每次对接的时候别家的NVR时他们都会添加其他结构体成员，每次都要重新编译gsoap库，而且库太大了，我们就想自己再写一套onvif出来，不用gsoap库了。  现在搞得测试工具都搜索不到了 自己写一套onvif，工作量可不小。discovery只是第一步。我还是建议用过gsoap来做。不知道你们是怎么做的，我用gsoap的discovery插件的功能， 基本主流的nvr都可以识别。

user: user-0
content: 我们有一套是用gsoap库实现的，不过每次对接的时候别家的NVR时他们都会添加其他结构体成员，每次都要重新编译gsoap库，而且库太大了，我们就想自己再写一套onvif出来，不用gsoap库了。  现在搞得测试工具都搜索不到了

user: user-2
content: 为何不用gsoap来实现server？ gsoap有onvif discovery的插件，很方便
user-0 提问: 【求助】关于浮点数运算的误差问题

回复:
user: user-0
content: 引用 5 楼 hhhhhhhhhhkkkkkkkkkk 的回复:自己要做大数运算就只能把数据存成字符串了。。。。。。很麻烦，又慢。所以能用直接的就用直接的。 当然你空了可以自己实现一个新的数类，以后做一些小东西时就可以偷懒了。  恩恩，听你的吧，做新类还是有空再说。 3Q！

user: user-1
content: 自己要做大数运算就只能把数据存成字符串了。。。。。。很麻烦，又慢。所以能用直接的就用直接的。 当然你空了可以自己实现一个新的数类，以后做一些小东西时就可以偷懒了。

user: user-0
content: 引用 1 楼 hhhhhhhhhhkkkkkkkkkk 的回复:不设计新类而减少误差，你应该注意以下几点： 1.避免两个相近的数相减 2.避免除数接近0. 所以，如果有： a0-b0+a1-b1+a2-b2...... 应该这样计算： tmp0=a0+a1+a2+...... tmp1=b0+b1+b2+...... ret=tmp0-tmp1. 这样可以避免减法误差。 如果有 a0/b0*a1/b1*a2/b2...... 其中b0,b1,b2.....接近于0 你应该先把b0,b1,b2......乘一个数以让它们远离0(这个数你看情况选，这里我假设b0,b1,b2......是10^(-5)级的小数。我选10^5作为这个数） 令r=10^5 原式=a0/(b0*r)/r  *a1/(b1*r)/r  *a1/(b1*r)/r   *......  谢谢大大回复，你提供的方法确实可行，因为模型改变后每次生成的代码都不同，每次都做代码处理工作量有点大才想有没有一劳永逸的办法。主要是想偷懒…… 接下来还有多输入多输出的模型要建，输入的数大小也不确定，要边考虑数字处理边对生成的算法做加工。好难…… 所以才想到建新类的，不过一想到系统资源……估计这懒是偷不得……

user: user-2
content: libgmp/mpfr/mpir

user: user-1
content: 还有： 防止大数吃小数 避免大数做乘数。

user: user-1
content: 不设计新类而减少误差，你应该注意以下几点： 1.避免两个相近的数相减 2.避免除数接近0. 所以，如果有： a0-b0+a1-b1+a2-b2...... 应该这样计算： tmp0=a0+a1+a2+...... tmp1=b0+b1+b2+...... ret=tmp0-tmp1. 这样可以避免减法误差。 如果有 a0/b0*a1/b1*a2/b2...... 其中b0,b1,b2.....接近于0 你应该先把b0,b1,b2......乘一个数以让它们远离0(这个数你看情况选，这里我假设b0,b1,b2......是10^(-5)级的小数。我选10^5作为这个数） 令r=10^5 原式=a0/(b0*r)/r  *a1/(b1*r)/r  *a1/(b1*r)/r   *......
user-0 提问: 关于C语言函数指针的问题

回复:
user: user-0
content: 引用 9 楼 zhangxiangDavaid 的回复:这样可好：  static int val; int *a(void) { 	return &val; } void b(int*(*ptr)(void)) { 	(*(ptr()))++; } int main(void) { 	val = 0; 	b(a); 	printf("val=%d\n", val);   //val=1 	return 0; }  引用 9 楼 zhangxiangDavaid 的回复:这样可好：  static int val; int *a(void) { 	return &val; } void b(int*(*ptr)(void)) { 	(*(ptr()))++; } int main(void) { 	val = 0; 	b(a); 	printf("val=%d\n", val);   //val=1 	return 0; }   非常感谢！我把你们的方法都好好的琢磨琢磨，理解一下。再次感谢！

user: user-1
content: 这样可好：  static int val; int *a(void) { 	return &val; } void b(int*(*ptr)(void)) { 	(*(ptr()))++; } int main(void) { 	val = 0; 	b(a); 	printf("val=%d\n", val);   //val=1 	return 0; }

user: user-2
content: static int val; int* a(void) {         return &val; } void b(int* (*ptr)(void)) {         int* p = ptr(); //*p操作的就是 val } b(a);//注意 a 不能加()

user: user-0
content: 引用 4 楼 lin5161678 的回复:[quote=引用 2 楼 user-3 的回复:]哦 还有一点忘记说了  更加题主的标签  这是C语言代码  那么 你的改法就是语法错误了  C语言没有引用[/quote]  我在下面做了一些说明，大神可以看看，如果想实现该如何破，提供个思路

user: user-1
content: static int val; int a(void) { 	val++; 	return val; } void b(int(*ptr)(void)) { 	ptr(); } //调用 b(a);

user: user-0
content: 引用 2 楼 user-3 的回复:我擦，你那val都是静态的了，直接val++呗。 如果你是想通过a函数来操作的话，a函数应该返回val的引用，而不是值，如下  static int val; int &a(void)  {         return val;  } void b(int& (*ptr)(void)) {      ((*ptr)())++; }  这样就能实现val++了。这里的(*ptr)()就是val的引用。 首先感谢回答。我讲下我项目的问题吧，看看大神有没有什么合适的实现方法。  //工程中含有若干文件,都属于是嵌入式的界面文件，属于同一类型 f1.c  //含有static  int val1,  fun1() ,fun1()需要对val1进行操作。 f2.c  //同上面的结构 f3.c  //同上  因为 函数fun1,2,3功能一样，我就想把他们写成同一个函数。但是val1,2,3却不能由同一个全局来代替。所以我就想get到val123的值再操作。就搞的晕了

user: user-2
content: 引用 2 楼 user-3 的回复:哦 还有一点忘记说了  更加题主的标签  这是C语言代码  那么 你的改法就是语法错误了  C语言没有引用

user: user-2
content: 引用 2 楼 user-3 的回复:我擦，你那val都是静态的了，直接val++呗。 如果你是想通过a函数来操作的话，a函数应该返回val的引用，而不是值，如下  static int val; int &a(void)  {         return val;  } void b(int& (*ptr)(void)) {      ((*ptr)())++; }  这样就能实现val++了。这里的(*ptr)()就是val的引用。 1 这里的static 表示的不是静态  全局变量自带静态光环 这个static做的是其他文件看不到这个变量  2 直接 ptr() 就能获得 val的引用 你是 * 操作是多余的  不会错 但是难看

user: user-3
content: 我擦，你那val都是静态的了，直接val++呗。 如果你是想通过a函数来操作的话，a函数应该返回val的引用，而不是值，如下  static int val; int &a(void)  {         return val;  } void b(int& (*ptr)(void)) {      ((*ptr)())++; }  这样就能实现val++了。这里的(*ptr)()就是val的引用。

user: user-2
content: 做不到
user-0 提问: 关于while循环对函数调用的影响

回复:
user: user-1
content: 你加break，当result==0时就跳出了循环，返回的当然是sucess。 不加break就成了死循环，循环执行完第一遍后又执行第二遍、第三遍、子子孙孙无穷尽也。当函数返回值result!=0时，当然就会出现failed了。

user: user-2
content: 目前，还看不出来

user: user-3
content: 并不会  你试试 bool bRet = true; while( bRet ) { if( ) { bRet = false; } }

user: user-0
content: 引用 2 楼 GKatHere 的回复:不会执行 printf("read block failed !\r\n"); 就是没有break的时候执行返回值是正确的，加上break返回值是错误的

user: user-4
content: 不会执行 printf("read block failed !\r\n");

user: user-5
content: 不知道你在说什么，这个不关while循环的事情吧
user-0 提问: 我编写的不能返回该位置值也不能返回该位置。题目是能查找数据在数组中的位置，并返回该位置值，如果该数据不在数组中则返回-1；

回复:
user: user-1
content: 引用 4 楼 stephen_w__ 的回复:search 里的索引要从 0 开始,,传入数组的实际大小,main 里直接输出结果就可以 printf("%d\n",search(a,sizeof(a),n));  int search(int *p,int n,int c) {     int i = 0;     if(p)         for(;i<n;++i)             if (*(p+i)==c)                 return i + 1;   //显示从第一位算             return -1; }  数组大小应该是  sizeof(a)/sizeof(int) ,改下

user: user-1
content: search 里的索引要从 0 开始,,传入数组的实际大小,main 里直接输出结果就可以 printf("%d\n",search(a,sizeof(a),n));  int search(int *p,int n,int c) {     int i = 0;     if(p)         for(;i<n;++i)             if (*(p+i)==c)                 return i + 1;   //显示从第一位算             return -1; }

user: user-2
content: 要尽可能的简单：  #include <stdio.h> int search(int *p, int n, int c); int main(void) { 	int a[5] = { 0,1,2,3,4 }; 	int i; 	int b; 	int res; 	for (i = 0; i < 5; i++) 		printf("%d\n", a[i]); 	printf("please input the number to search:"); 	scanf("%d", &b); 	res = search(a, 6, b); 	if (-1 == res) printf("Can not find it!\n"); 	else printf("find it! It is in %d\n", res); 	return 0; } int search(int *p, int n, int c) { 	int i; 	int flag = 0; 	for (i = 0; i < n; i++) 		if (*(p + i) == c) 			return i; 	return -1; }

user: user-3
content: #include<stdio.h>  int search(int *p,int n,int c);  int main() {     int a[5]={0,1,2,3,4};     int i;     int b;     int res;     for(i=0;i<5;i++)         printf("%d\n",a[i]);     printf("please input the number to search:");     scanf ("%d",&b);     res=search(a,5,b);     if(res!=-1)         printf("%d\n",a[res]);     else  printf("-1\n");     return 0;  }   int search(int *p,int n,int c) {     int i;     int flag=0;     for(i=0;i<n;i++)         if (*(p+i)==c)          {              flag=1;              break;          }     if (flag)         return i;     else         return (-1); }

user: user-4
content: res=search(a,6,b);                //res=search(a,5,b);  int search(int *p,int n,int c) { int i; int flag=0; for(i=1;i<n;i++) // for(i=0;i<n;i++)  // { if (*(p+i)==c) { flag=1; break; } //} if (flag==1) { printf("%d\n",i); *p=i;  // printf("%d\n",*(p+i)); return (*p);  // return *(p+i) } else return (-1); }
user-0 提问: 急！用C语言编的一个学生籍贯信息记录簿出现问题

回复:
user: user-0
content: 帮忙修改一下代码吧，上面那个是代码的链接

user: user-1
content: 定义参数时给个初始值  参数未初始化引起的异常大数据

user: user-0
content: 管理员删帖吧，问题已与他人联系解决
user-0 提问: 递归求最小值，出问题了，请教大神！！！

回复:
user: user-1
content: 修改如下：  int my_min(int *arr, int n) { 	if (1 == n) return arr[0]; 	int i = my_min(arr + 1, n - 1); 	return arr[0] <= i ? arr[0] : i; } int main(void) { 	int a[] = { 2,0,1,5,3,8,4,9,6,7 }; 	int n = sizeof(a) / sizeof(a[0]); 	printf("%d\n", my_min(a, n)); 	return 0; } //0

user: user-2
content: 你的代码执行的是min(a,100)，但是你实际上需要的是min(a, 3) 另外，你的数组没有初始化，只有前三个赋值了，后面97个数里面有哪些值就不一定了。改成int a[100] = {0},i;这样的结果就会是0

user: user-2
content: 改成printf("min:%d\n", min(a, i));

user: user-0
content: 输出来是这样的！！！

user: user-3
content: 用strlen获取有效字符串长度

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

回复:
user: user-0
content: 可是得不到jkds*^*(HKEEEklIejilg，而是jkds*^*(HKEEEklI蘣jil蘣。@zhao4zhong1

user: user-1
content: 直接一个个拷一下就可以了 int ChangeString(char *s) {     if(!s) return -1;     char *d=s;     while(*s){         char ch=*s++;         if(islower(ch) && s[0]==ch && s[1]==ch)         {             ch = ch=='z' ? 'a' : ch+1;             s+=2;         }         *d++ =ch;     }     *d='\0';     return 0; }

user: user-2
content: 显然，一次操作是不行的：因为修改过后，会引起副作用。 这样可好：  char *changString(char *s) { 	if (!s) return NULL; 	int i, j, flag, n; 	flag = 0; 	n = strlen(s); 	int count = 0; 	for (i = 0; i < n; i++) 	{ 		if (s[i] >= 'a' && s[i] <= 'z') 		{ 			if (0 == count) count++; 			else if (s[i] == s[i - 1]) 			{ 				if (3 == ++count) 				{ 					s[i - 2] = (s[i] == 'z' ? 'a' : s[i] + 1); 					memmove(s + i - 1, s + i + 1, strlen(s + i + 1) + 1); 					n = strlen(s + i - 1); 					i -= 2; 					flag = 1; 					count = 0; 				} 			} 			else count = 0; 		} 	} 	if (flag) changString(s); 	return s; } int main(void) { 	char s[] = "jkds*^*(HKEEEklIdddjilfff";   //"jkds*^*(HKEEEklIejilg" 	printf("%s\n", changString(s)); 	return 0; }

user: user-3
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
user-0 提问: 大神看看这段简单代码为什么运行错误，帮忙纠正

回复:
user: user-1
content: 。。。。。 printf中双引号里面的是要原样输出的。除了输出格式外。 楼上给出了printf用法。

user: user-2
content: #include<stdio.h> int main() { int a, b, c;  a = 4; b = a++; if (a < b) { printf("c = ％d\n ", c=a); } else { printf("c = %d\n", c=b); }  return 0; }    还有你这个肯定是a=b+1 啊啊啊啊;

user: user-3
content: b=a++  这是?

user: user-4
content: 不知楼主，要干什么……

user: user-5
content: 不知道你的目的是什么？姑且认为a小于b时，c等于a。  #include<stdio.h> int main() {     int a, b, c;      a = 4;     b = a++;     if (a < b) {         c = a;         printf("c = ％d\n ", a);     } else {         c = b;         printf("c = %d\n", b);     }  return 0; }

user: user-6
content: printf("c = %d\n", c);	输入字符的类型。
user-0 提问: C创建窗口失败，怎么调试

回复:
user: user-0
content: 顶一下。。试过很多办法，比如判断设为==NULL什么的，修改window类的大小、风格参数等等，但是还是会创建失败。 逐步调试时，判断前，也就是createwindow前是这样   判断后是这样，hwnd就为NULL了。   什么地方不对

user: user-0
content: 插入的地方是MessageBox 创建失败 的上一行。

user: user-0
content: 引用 4 楼 user-1 的回复:GetLastError()提示什么？  我用这个 void ShowError(){ 	TCHAR *lpMsgBuf; 	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 		NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 		(LPTSTR)&lpMsgBuf, 		0, 		NULL); 	MessageBox(NULL, lpMsgBuf,TEXT(""), MB_ICONERROR); }  结果是这样

user: user-1
content: GetLastError()提示什么？

user: user-0
content: 引用 2 楼 user-1 的回复:调试模式，看看断电停在哪里  没可添加的断点。其他都是正常的，就是不知道为什么CreateWindow会失败，然后返回NULL指针。我也不能在CreateWindow里面加断点吧。。话说能看到这个API的实现吗

user: user-1
content: 调试模式，看看断电停在哪里

user: user-0
content: 我运行时就一直都是创建失败
user-0 提问: 悬挂指针问题

回复:
user: user-1
content: 一般编译器会 （1）尽量避免读写内存、磁盘等存储设备以减缓硬件的老化 （2）尽量避免不必要的操作以缩短时间。 所以编译器并没有真正与擦除这些地方的值（这会浪费很多时间）而只是直接改变指针的位置（如果你过汇编的话就很好理解了）。 知道为什么会有数据恢复这些软件吗？ 就是因为windows在彻底删除文件时并没有把文件的真正数据写成其他值（不仅会加快硬件老化，而且会浪费大把时间），连文件索引都没擦，只是把文件标记为删了而已。数据恢复软件就是把这些索引通过一定的算法重新恢复出来了。

user: user-2
content: 淋雨不一定会感冒，但我们总是劝人们不要淋雨，对吗？

user: user-2
content: 引用 2 楼 tianshuaiok 的回复:楼主你好，来听听小老弟给你讲讲吧！ 首先，你要搞清楚fun()的返回值代表几层含义。 返回函数指针跟数组的首地址，因为他们是同一个，这下明白了吧。你打印整形，当然是5。 你得再想想？

user: user-1
content: 其实这里你用vs2013运行的话，编译器会警告你返回临时或局部变量地址。就像他们说的那样，C标准没有定义这种行为，所以编译器即不赞成也不阻止你运行。

user: user-3
content: 未定义行为  销毁后地址值依然指向该内存  如果这块内存没有被其他程序占用也没有被程序所修改，其值可能是正确的

user: user-4
content: // 不是销毁了, 返回的局部变量的指针是指向栈内的指针,  FUN返回时, 栈指针(esp)会倒退几位, 当再压栈时, 原值会被修改. // 而此处没有被修改 // 试试 int *fun(){      int a[] = {5};            return a; } int *fun2(){      int a[] = {6};            return a; } int main(){      int *q;     q = fun();  fun2();                         // 将会修改栈内的值    printf("%d\n",q[0]);    // 6      system("pause");     return 0; }

user: user-5
content: 楼主你好，来听听小老弟给你讲讲吧！ 首先，你要搞清楚fun()的返回值代表几层含义。 返回函数指针跟数组的首地址，因为他们是同一个，这下明白了吧。你打印整形，当然是5。

user: user-6
content: 输出结果未定义，也就是可能会输出正确的
user-0 提问: 求解释 C初学者

回复:
user: user-0
content: 谢谢了，这是细节问题，让我看到了自己的不足。

user: user-1
content: 编译器在读到空格时判定读取到EOF，所以你输入两个数，实际上他他只读取到空格之前的数并在下面输出。

user: user-2
content: scanf("%d ",&c); 上述语句中的%d后面你为什么还加一个“空格”呢？
user-0 提问: c的问题，谢谢

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:或者就简单在gets(s)前面加一行 scanf("%c", &s[0]);这样应该也行。总之要想法把缓冲区里留下的那个回车清掉。    谢谢，可以了。  方便留一下联系方式么？有什么问题可以直接问您的？每次遇到问题都得等好长时间才能解决，老师又经常见不到。

user: user-1
content: 或者就简单在gets(s)前面加一行 scanf("%c", &s[0]);这样应该也行。总之要想法把缓冲区里留下的那个回车清掉。

user: user-1
content: 你输入15的时候，会敲一个回车，这个回车留在缓冲区里，被gets读到，于是s就是一个空串。 对于有些编译器，可以在gets前面加一个fflush(stdin); 就可以把缓冲区清空。但不是所有编译器都支持的。 自己手动解决也可以： printf("请输入一个英文句子："); do{ gets(s); } while (s[0] == '\0');  printf("您输入的英文句子是：
user-0 提问: 关于&&和||运算符优先级的问题

回复:
user: user-1
content: Short-circuit evaluation

user: user-2
content: 优先级高表示 ++a || ++b && ++c 是 ++a || (++b && ++c) 而不是 (++a || ++b) && ++c  其次这些运算都是从左向右演算的。  举四则运算的例子： 1 + 2 * 3 *比+优先级高，表示上式为 1 + (2 * 3) 而不是 (1 + 2) * 3 但是它们都是从左向右演算的，即就+而言 它先演算1  就原问题而言，就||而言 先演算++a  其次就是||是短路的

user: user-0
content: 引用 2 楼 user-3 的回复:对啊，｜｜ 符号不是先执行左边  成功了 就不看右边么？  可是优先级高的不先算吗？

user: user-3
content: 对啊，｜｜ 符号不是先执行左边  成功了 就不看右边么？

user: user-0
content: VC6 、win2003
user-0 提问: if(p==NULL)和if(!*p)作用相同还是相反？求解释

回复:
user: user-1
content: 引用 2 楼 user-4 的回复:前面写错了  if(p==NULL)   和 if(!p)   效果相反    早期的指针 空指针NULL的值是0 if(p==NULL)    相当于 if（p==0）  if(!p)  相当于 if(!（p!=0）)  就一个意思，通常我爱写成if(!p) NULL 的宏就是0， 另外新版编译器都支持推荐用nullptr 另外“ if(!p)  相当于 if(!（p!=0）” 这什么意思，不懂，if(!p) 就是p为零（即!p不为零）时候执行

user: user-2
content: if(p==NULL) ==> if(p==0) if(!*p) ==> if(*p==0)

user: user-3
content: 根本就没有可比性：  char * p = NULL; if (p == NULL) // true if (!*p) // crash  char a = '\0'; char * p = &a; if (p == NULL) // false if (!*p) // true  char a = 'A'; char * p = &a; if (p == NULL) // false if (!*p) // false  当然，如果LZ问的是 if (p == NULL) 和 if (!p) 的话，两个条件是等价的，简单的判断方法就是使用真值表。

user: user-4
content: 前面写错了  if(p==NULL)   和 if(!p)   效果相反    早期的指针 空指针NULL的值是0 if(p==NULL)    相当于 if（p==0）  if(!p)  相当于 if(!（p!=0）)

user: user-4
content: 不同的东西 p==NULL   判断指针是不是空指针 !*p   是对p指针指向的char  进行取反操作 if(p==NULL)   和 if(!p)   效果相同，但与指针判空 建议使用前者
user-0 提问: c语言写的长整数加法

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110
user-0 提问: 嵌入式C语言进程问题

回复:
user: user-0
content: 引用 2 楼 whizer 的回复:弄一个10s定时器，处理函数中做＋1操作。帮忙看一下哪里错了吧，不提示错误，结果就是不显示长整型 #include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<fcntl.h>  #include<sys/types.h>  #include<unistd.h>  #include<sys/wait.h>  int main()  {     pid_t pid;           int i,fd;           long int *n=0;           char *buf="This is a Daemon\n";           pid=fork();           if(pid<0)          {                  printf("Error fork\n");                  exit(1);           }           else if(pid>0)          {                 exit(0);           }           setsid();           chdir("/");           umask(0);           for(i=0;i<getdtablesize();i++)          {                   close(i);          }     while(1)         {                   if((fd=open("/tmp/daemon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0)                   {                            printf("Open file error\n");                            exit(1);                     }                     write(fd,buf,strlen(buf)+1);            write(fd,n,*n++);                   close(fd);                    sleep(10);          }           exit(0);  }

user: user-1
content: 弄一个10s定时器，处理函数中做＋1操作。

user: user-2
content: 问错版块了，到“硬件、嵌入式”区
user-0 提问: 怎样把这句话分成多条语句啊

回复:
user: user-1
content: 实现成类成员函数赋值？

user: user-2
content: char *p[2]; p[0]="abc"; p[1]="def";

user: user-3
content: 引用 4 楼 K8001 的回复:[quote=引用 2 楼 user-3 的回复:] 要什么样的多条语句  大致这样的:  char *p...........;   定义p变量  strcpy(p,"abd");      给p所指向的数组赋值,语句不一定正确,完成给数组赋值就行  [/quote] char *src[5]={"abc", "def"},char *p[5]; for(int i=0;i<5;i++) {     p[i] =new char[100];      strcpy(p[i],src[i]); }

user: user-0
content: 引用 2 楼 user-3 的回复:要什么样的多条语句  大致这样的:  char *p...........;   定义p变量  strcpy(p,"abd");      给p所指向的数组赋值,语句不一定正确,完成给数组赋值就行

user: user-0
content: 引用 1 楼 FightForProgrammer 的回复:实现成类成员函数赋值？  现在不考虑类,就拆成多条语句就行

user: user-3
content: 要什么样的多条语句
user-0 提问: 求c语言 源代码

回复:
user: user-1
content: https://www.baidu.com/s?wd=%E5%AD%A6%E7%94%9F%E6%88%90%E7%BB%A9%E6%8E%92%E5%BA%8F%201.%20%E5%AD%A6%E7%94%9F%E6%88%90%E7%BB%A9%E6%8E%92%E5%BA%8F%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%9F%BA%E6%9C%AC%E8%A6%81%E6%B1%82%EF%BC%9A%20%E5%81%87%E8%AE%BE%E6%9F%90%E5%B9%B4%E7%BA%A7%E6%9C%894%E4%B8%AA%E7%8F%AD%EF%BC%8C%E6%AF%8F%E4%B8%AA%E7%8F%AD%E6%9C%8945%E5%90%8D%E5%90%8C%E5%AD%A6%EF%BC%8C%E6%9C%AC%E5%AD%A6%E6%9C%9F%E6%9C%895%E9%97%A8%E8%AF%BE%E7%A8%8B%E8%80%83%E8%AF%95%EF%BC%8C%E6%AF%8F%E9%97%A8%E8%AF%BE%E7%A8%8B%E6%88%90%E7%BB%A9%E6%98%AF%E7%99%BE%E5%88%86%E5%88%B6%E3%80%82%E5%81%87%E5%AE%9A%E6%AF%8F%E4%B8%AA%E5%90%8C%E5%AD%A6%E7%9A%84%E6%88%90%E7%BB%A9%E8%AE%B0%E5%BD%95%E5%8C%85%E5%90%AB%EF%BC%9A%E5%AD%A6%E5%8F%B7%E3%80%81%E5%A7%93%E5%90%8D%E5%90%84%E9%97%A8%E8%AF%BE%E7%A8%8B%E7%9A%84%E6%88%90%E7%BB%A9%E5%85%B17%E9%A1%B9%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%AD%A6&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_n=2&rsv_sug3=1&inputT=1980&rsv_sug4=1981
user-0 提问: 各位大神求解决！！！！！！

回复:
user: user-1
content: 问题是什么呢

user: user-2
content: 问题在楼主本机硬盘上的图片文件“/Users/MAC/Desktop/屏幕快照 2015-06-30 上午11.31.15.png”中。 等待楼下高级黑客黑掉楼主的电脑查看图片文件“/Users/MAC/Desktop/屏幕快照 2015-06-30 上午11.31.15.png”的内容以及楼主电脑磁盘中其它位置的艳照……后，再在此帖贴出问题的答案以及艳照……
user-0 提问: Windows 已在 new_to_C.exe 中触发一个断点。。。求助，实在找不出问题在哪里

回复:
user: user-1
content: main_peak_location1[i+1]，Bottom[j]这些你都需要看看是否越界了

user: user-0
content: subbottomlocation1[i]=j;///////在这里 就在这一行报错的

user: user-0
content: 不知道怎么弄了

user: user-0
content: 越界问题我看过了，么有越界

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

user: user-3
content: 代码没上全。。。。
user-0 提问: NULL指针可以FREE多次吗 ?    为什么

回复:
user: user-1
content: 什么都不会做的

user: user-2
content: 见 free 源码

user: user-3
content: 引用 1 楼 misskissC 的回复:见 free 源码 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\free.c /*** *free.c - free an entry in the heap * *       Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: *       Defines the following functions: *           free()     - free a memory block in the heap * *******************************************************************************/  #include <cruntime.h> #include <malloc.h> #include <winheap.h> #include <windows.h> #include <internal.h> #include <mtdll.h> #include <dbgint.h> #include <rtcsup.h>  /*** *void free(pblock) - free a block in the heap * *Purpose: *       Free a memory block in the heap. * *       Special ANSI Requirements: * *       (1) free(NULL) is benign. * *Entry: *       void *pblock - pointer to a memory block in the heap * *Return: *       <void> * *******************************************************************************/  void __cdecl _free_base (void * pBlock) {          int retval = 0;           if (pBlock == NULL)             return;          RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));          retval = HeapFree(_crtheap, 0, pBlock);         if (retval == 0)         {             errno = _get_errno_from_oserr(GetLastError());         } }

user: user-4
content: 当然可以。  4.10.3.2 The free function   Synopsis           #include <stdlib.h>          void free(void *ptr);  Description     The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation.  If ptr is a null pointer, no action occurs.  Otherwise, if the argument does not match a pointer earlier returned by the calloc , malloc , or realloc function, or if the space has been deallocated by a call to free or realloc , the behavior is undefined.  Returns     The free function returns no value.

user: user-5
content: 引用 1 楼 misskissC 的回复:见 free 源码+1
user-0 提问: 大神求助，c源程序编译时各种语法错误，该如何修改，弄了一早上，还是没搞定

回复:
user: user-1
content: 引用 1 楼 jinzhijiban 的回复: 语法错误应该好改的。你说说是什么错误。也可以把运行结果截图，这里也能发图片。上面第6个按钮。

user: user-2
content: 遇到编译不过去的问题，一般都用/*...*/注释可疑部分，再编译。

user: user-3
content: 编译的问题就自己解决吧嗄。 毕竟。。你这么一发，看的不舒服

user: user-0

user: user-4
content: 引用 4 楼 user-5 的回复:哈哈，发代码选一下格式再发，我去 其实这也不能全赖新人，CSDN论坛就不能判断回帖内容中有#include就自动用【code=c】【/code】括住吗？

user: user-5
content: 哈哈，发代码选一下格式再发，我去

user: user-4
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。
user-0 提问: 这样电脑配置装LINUX可以吗？

回复:
user: user-0
content: 有下载地址吗？给我..

user: user-1
content: 引用 8 楼 aq159258 的回复:有下载地址吗？给我.. puppylinux.org

user: user-1
content: 可以试试puppy linux,虽然我没用过

user: user-0
content: 有两张内存条一张512的一张256的这样可以吗？

user: user-0
content: 引用 4楼大熊猫侯佩 的回复:至少2gb内存这个电脑换内存哪些可以吗？我去问过他们说要换主板什么的相当换个主机了？

user: user-2
content: 至少2gb内存

user: user-0
content: 引用 2 楼 mydo 的回复:除非你装一台linux服务器，只装最低限度的组建，那是没问题。但你的目的是在上面coding，这个比较难。e！那我这个电脑不能了吗..那我换个内存可以吗？

user: user-2
content: 除非你装一台linux服务器，只装最低限度的组建，那是没问题。但你的目的是在上面coding，这个比较难。

user: user-2
content: 内存太小，CPU凑活；装一个主流的linux会卡！例如ubuntu或fedora；而另外一些耗费性能大户比如open suse之类的就更不要想了。建议装一些小众的低配版本为好。
user-0 提问: char s[] 和 char *s 的区别（strtok应用中）

回复:
user: user-0
content: 感谢大牛们的指点，原因很简单，只是当时脑子没反应过来！哎 被C搞的疲乏了

user: user-1
content: 而char *s = "192.168.0.1";中的s指向了一个常量字符串，其所在的内存是不能被更改的 char s[] = "192.168.0.1";这里的s是用后面的常量字符串去初始化s所在的内存区域，这个区域是可以更改的 你可以通过调试来查看

user: user-1
content: strtok这个函数会更改第一个参数的内容

user: user-2
content: char *s = "192.168.0.1";  这句必须写成： char const *s = "192.168.0.1";  编译器不报错，是历史的原因。

user: user-3
content: 仅供参考：#include <stdio.h> int main() {     int IP[4];     int i;     char c;      printf("请输入一个ip地址:");fflush(stdout);     while (1) {         rewind(stdin);         if (5==scanf("%d.%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&IP[3],&c)) {             if (0<=IP[0] && IP[0]<=255              && 0<=IP[1] && IP[1]<=255              && 0<=IP[2] && IP[2]<=255              && 0<=IP[3] && IP[3]<=255              && '\n'==c) {                 break;             } else printf("输入的ip地址格式不对!\n请重新输入:\n");         } else printf("输入的ip地址格式不对!\n请重新输入:\n");     }     for (i=0;i<4;i++) {         printf("IP[%d]=%d\n",i,IP[i]);     }     return 0; }

user: user-3
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！
user-0 提问: 嵌入式C代码指针运用解惑（急/在线等....）

回复:
user: user-1
content: 好厉害的大神，虽然看得不太懂。。。另外楼主如果您觉得解决了问题，该结贴了吧。

user: user-0
content: 多谢 上面两位的热心解答！

user: user-2
content: PIndex 是为保证地址范围在0~7 函数的用应该是每调用一次，保存一个数，做一次除8平均。

user: user-0
content: 多谢！！！！ 明晰多了！！ 可是还有点不通的地方   还望说明啊！  for 循环 应该是 把 pAvgbuffer数组的值 赋值给 pOutVal 并加和   然后求平均。 可是前面只有一个InVal值给了这个pAvgbuffer【0】？ 怎么平均呢？ 然后PIndex 的作用是什么呢？

user: user-3
content: 也可能 //*(pAvgBuffer + ((*pIndex) ++)) = InVal; //上面这句等价于     pIndex[0]++;     pAvgBuffer[pIndex[0]]=InVal;   到底    pIndex[0]++; 在前还是在后，楼主单步调试自己验证一下。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-3
content: typedef struct { uint8_t Index; int16_t AvgBuffer[8]; }AvgTypeDef;  void CalAvgValue(uint8_t *pIndex, int16_t *pAvgBuffer, int16_t InVal, int16_t *pOutVal) { uint8_t i;  //*(pAvgBuffer + ((*pIndex) ++)) = InVal; //上面这句等价于     pAvgBuffer[pIndex[0]]=InVal;     pIndex[0]++;   //  *pIndex &= 0x07; //上面这句等价于     pIndex[0]=pIndex[0] & 0x07;      *pOutVal = 0;     for(i = 0; i < 8; i ++)     { //      *pOutVal += *(pAvgBuffer + i);         //上面这句等价于         pOutVal[0]=pOutVal[0] + pAvgBuffer[i];     } //  *pOutVal >>= 3;     //上面这句等价于     pOutVal[0]=pOutVal[0] >> 3; }  A[B] *(A+B) *(B+A) B[A] //以上四行等价
user-0 提问: 获取新增进程（延迟4秒拍第二次快照，完了遍历，获取不到，求大神们指点一下代码段的问题）

回复:
user: user-0
content: 是循环那里出了问题，不应该两个条件一起判断的。已经解决啦，谢谢老师

user: user-1
content: 也许4秒那个进程早执行完退出了。我猜。
user-0 提问: 类型强转后（char *）输出结果的问题

回复:
user: user-0
content: 引用 1 楼 user-3 的回复:估计是负数。-1=FFFFFFFF，-2=FFFFFFFE，-6=FFFFFFFA，-37=FFFFFFDB 引用 2 楼 zhao4zhong1 的回复:printf("%02X\n", *( (unsigned char *)&da + i ) ); 引用 3 楼 stephen_w__ 的回复:试下 unsighed char * printf  参数 x/X 的解释,将无符整形转为16进制 converts an unsigned integer into hexadecimal representation hhhh.  For the x conversion letters abcdef are used.  For the X conversion letters ABCDEF are used. Precision specifies the minimum number of digits to appear. The default precision is 1. If both the converted value and the precision are ​0​ the conversion results in no characters. In the alternative implementation 0x or 0X is prefixed to results if the converted value is nonzero.   参数 a/A 的解释,将浮点数转为16进制 converts floating-point number to the hexadecimal exponent notation.  For the a conversion style [-]0xh.hhhp±d is used.  For the A conversion style [-]0Xh.hhhP±d is used.  The first hexadecimal digit is 0 if the argument is not a normalized floating point value. If the value is ​0​, the exponent is also ​0​. Precision specifies the minimum number of digits to appear after the decimal point character. The default precision is sufficient for exact representation of the value. In the alternative implementation decimal point character is written even if no digits follow it. For infinity and not-a-number conversion style see notes.  3位的回答把问题命中了，对这个的概念不是那么深刻。

user: user-1
content: 试下 unsighed char * printf  参数 x/X 的解释,将无符整形转为16进制 converts an unsigned integer into hexadecimal representation hhhh.  For the x conversion letters abcdef are used.  For the X conversion letters ABCDEF are used. Precision specifies the minimum number of digits to appear. The default precision is 1. If both the converted value and the precision are ​0​ the conversion results in no characters. In the alternative implementation 0x or 0X is prefixed to results if the converted value is nonzero.   参数 a/A 的解释,将浮点数转为16进制 converts floating-point number to the hexadecimal exponent notation.  For the a conversion style [-]0xh.hhhp±d is used.  For the A conversion style [-]0Xh.hhhP±d is used.  The first hexadecimal digit is 0 if the argument is not a normalized floating point value. If the value is ​0​, the exponent is also ​0​. Precision specifies the minimum number of digits to appear after the decimal point character. The default precision is sufficient for exact representation of the value. In the alternative implementation decimal point character is written even if no digits follow it. For infinity and not-a-number conversion style see notes.

user: user-2
content: printf("%02X\n", *( (unsigned char *)&da + i ) );

user: user-3
content: 估计是负数。-1=FFFFFFFF，-2=FFFFFFFE，-6=FFFFFFFA，-37=FFFFFFDB
user-0 提问: 关于C# HttpWebRequest  https的问题

回复:
user: user-0
content: 有人问我要解决方法了，我再回复下吧，仅供参考哦：  HttpWebRequest调用了系统相关设置，好像是跟IE有关  so，我换成  Libcurl  函数库替代了HttpWebRequest，顺利解决  好人做到底吧，Libcurl资源我是在这里下载的：  http://download.csdn.net/detail/vincent7326/5997773  至于怎么调用库函数，资源里也有，一两句说不清，实在不会还请自行度娘libcurl使用教程

user: user-0
content: 没人回我啊啊啊 啊啊~~~~~ 我自己找到解决办法了
user-0 提问: linux设备驱动程序问题求解。

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:（1）linux驱动程序中： return -ENOMEM; 表示什么意思（返回的数字是多少）？ 如果返回ENOMEN表示没有memory了。查查你的系统中文件errno.h，一般是12. #define ENOMEM 12      （2）执行make命令报警告：      c:116:5: warning: initialization from incompatible pointer type [enabled by default]      .release = ram_release,      ^      c:116:5: warning: (near initialization for ‘ram_fops.release’) [enabled by default] 表示你定义的函数ram_release和release函数指针要求的不一样。查查参数的类型和顺序以及返回值的类型。 (1)路径: usr/src/linux-headers-3.13.0-32/include/linux/errno.h   文件的内容是 #define ERESTARTSYS	512 #define ERESTARTNOINTR	513 #define ERESTARTNOHAND	514	/* restart if no handler.. */ #define ENOIOCTLCMD	515	/* No ioctl command */ #define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */ #define EPROBE_DEFER	517	/* Driver requests probe retry */ #define EOPENSTALE	518	/* open found a stale dentry */  /* Defined for the NFSv3 protocol */ #define EBADHANDLE	521	/* Illegal NFS file handle */ #define ENOTSYNC	522	/* Update synchronization mismatch */ #define EBADCOOKIE	523	/* Cookie is stale */ #define ENOTSUPP	524	/* Operation is not supported */ #define ETOOSMALL	525	/* Buffer or request is too small */ #define ESERVERFAULT	526	/* An untranslatable error occurred */ #define EBADTYPE	527	/* Type not supported by server */ #define EJUKEBOX	528	/* Request initiated, but will not complete before timeout */ #define EIOCBQUEUED	529	/* iocb queued, will get completion event */文件里没有#define ENOMEM 12   。 （2）与问题相关的源代码：int ramhd_open(struct block_device *bdev, fmode_t mode)  //设备打开用到 {     return 0; } int  ramhd_release(struct gendisk *gd, fmode_t mode)   //设备关闭用到 {        return 0; } static struct block_device_operations ramhd_fops = {   .owner = THIS_MODULE,     .open = ramhd_open,     .release = ramhd_release,     .ioctl = ramhd_ioctl, };操作系统版本：Distributor ID: Ubuntu Description: Ubuntu 14.04.1 LTS Release: 14.04 刚刚接触linux设备驱动编程，网上找的代码来研究，懂得太少了，希望帮忙重点解决下第二个问题。。谢谢。

user: user-1
content: （1）linux驱动程序中： return -ENOMEM; 表示什么意思（返回的数字是多少）？ 如果返回ENOMEN表示没有memory了。查查你的系统中文件errno.h，一般是12. #define ENOMEM 12      （2）执行make命令报警告：      c:116:5: warning: initialization from incompatible pointer type [enabled by default]      .release = ram_release,      ^      c:116:5: warning: (near initialization for ‘ram_fops.release’) [enabled by default] 表示你定义的函数ram_release和release函数指针要求的不一样。查查参数的类型和顺序以及返回值的类型。
user-0 提问: 头文件中为什么要用了两个括号？

回复:
user: user-1
content: 引用 1 楼 user-3 的回复:PROTO_LIST  有这个宏，表示这个代码很古老了。 这种写法是为了兼容 C 的新旧语法，很早的 C 语言的参数不是写在括号里的。 而是写在括号后面的。   这是AIX的stdio.h的片段。 # ifdef _NO_PROTO /* ... */ extern FILE *   fopen(); /* ... */ #else           /* use ANSI C required prototypes */ /* ... */ extern FILE *   fopen(const char *__restrict__, const char *__restrict__); /* ... */ #endif /* _NO_PROTO */   PROTO_LIST 就是为了达到类似上面个的效果   /* PROTO_LIST is defined depending on how PROTOTYPES is defined above. If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it   returns an empty list.  */ #if PROTOTYPES #define PROTO_LIST(list) list #else #define PROTO_LIST(list) () #endif

user: user-2
content: 不看过相关代码， 猜测一下， 是不是因为前面那个大写的 是一个宏，参数加括号可以避免一些错误

user: user-3
content: PROTO_LIST  有这个宏，表示这个代码很古老了。 这种写法是为了兼容 C 的新旧语法，很早的 C 语言的参数不是写在括号里的。 而是写在括号后面的。
user-0 提问: 浪花的帖子

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

回复:
user: user-1
content: 但是，一定要贴好代码。

user: user-1
content: 引用 2 楼 mugunagyu 的回复:在这个论坛上，不管你是什么目的，不要直接求答案，若在什么方面不会，指出具体问题，大家才可能帮助你，不然，你问大家，是不会得到你想要的答案 没有这么严肃的啦，娱乐点，哈

user: user-2
content: 在这个论坛上，不管你是什么目的，不要直接求答案，若在什么方面不会，指出具体问题，大家才可能帮助你，不然，你问大家，是不会得到你想要的答案

user: user-3
content: http://www.jwss.cc/?q=C%E8%AF%AD%E8%A8%80%E8%AF%95%E9%A2%98%E5%BA%93%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1