Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: GNU C库 初始化该如何进行

回复:
user: user-0
content: 有大神过来帮忙 讲下 ARM裸机程序使用GNU -LD 链接C库方法配置项吗

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:GNU C是开源的。  你意思市区源码里面找吗？

user: user-1
content: GNU C是开源的。
user-0 提问: 这样写可以吗？

回复:
user: user-1
content: 引用 8 楼 FightForProgrammer 的回复:[quote=引用 7 楼 sholber 的回复:] [quote=引用 6 楼 FightForProgrammer 的回复:] [quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 FightForProgrammer 的回复:] 试验了一下，个人感觉不行。 比如 int x = (a == 3 ? b : c); 整个三元表达式的返回值 是b或者c，而不是最终a是否等于3 关键是要看三元表达式的返回值是什么，因为if就是以三元表达式的返回值来做判断的  你说的什么，我完全不懂。[/quote]   int a = 1, b = 2, c = 3; int x = (a == 0 ? b : c);//如果a=0，表达式返回值是b（即x的值为b）；a!=0，表达式返回值是c（即x的值是c）。  如果这样，还是不是你想要的判断条件呢[/quote]   对呀，我要判断什么呢？[/quote]  如果像上面例子那样，不管a是不是等于0，返回不是2就是3，也就是if都是真的，这有啥意义额。。[/quote]  他的程序并不是这样的。 if(S->sys.ExactMatch == 0 ? index[i].bmnum >= inputnum : index[i].bmnum == inputnum) 如果S->sys.ExactMatch == 0成立，则if语句的条件是index[i].bmnum >= inputnum是否成立； 如果S->sys.ExactMatch == 0不成立，则if语句的条件是index[i].bmnum == inputnum是否成立。

user: user-2
content: 引用 7 楼 sholber 的回复:[quote=引用 6 楼 FightForProgrammer 的回复:] [quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 FightForProgrammer 的回复:] 试验了一下，个人感觉不行。 比如 int x = (a == 3 ? b : c); 整个三元表达式的返回值 是b或者c，而不是最终a是否等于3 关键是要看三元表达式的返回值是什么，因为if就是以三元表达式的返回值来做判断的  你说的什么，我完全不懂。[/quote]   int a = 1, b = 2, c = 3; int x = (a == 0 ? b : c);//如果a=0，表达式返回值是b（即x的值为b）；a!=0，表达式返回值是c（即x的值是c）。  如果这样，还是不是你想要的判断条件呢[/quote]   对呀，我要判断什么呢？[/quote]  如果像上面例子那样，不管a是不是等于0，返回不是2就是3，也就是if都是真的，这有啥意义额。。

user: user-1
content: 引用 6 楼 FightForProgrammer 的回复:[quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 FightForProgrammer 的回复:] 试验了一下，个人感觉不行。 比如 int x = (a == 3 ? b : c); 整个三元表达式的返回值 是b或者c，而不是最终a是否等于3 关键是要看三元表达式的返回值是什么，因为if就是以三元表达式的返回值来做判断的  你说的什么，我完全不懂。[/quote]   int a = 1, b = 2, c = 3; int x = (a == 0 ? b : c);//如果a=0，表达式返回值是b（即x的值为b）；a!=0，表达式返回值是c（即x的值是c）。  如果这样，还是不是你想要的判断条件呢[/quote]  对呀，我要判断什么呢？

user: user-2
content: 引用 4 楼 sholber 的回复:[quote=引用 3 楼 FightForProgrammer 的回复:] 试验了一下，个人感觉不行。 比如 int x = (a == 3 ? b : c); 整个三元表达式的返回值 是b或者c，而不是最终a是否等于3 关键是要看三元表达式的返回值是什么，因为if就是以三元表达式的返回值来做判断的  你说的什么，我完全不懂。[/quote]   int a = 1, b = 2, c = 3; int x = (a == 0 ? b : c);//如果a=0，表达式返回值是b（即x的值为b）；a!=0，表达式返回值是c（即x的值是c）。  如果这样，还是不是你想要的判断条件呢

user: user-3
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-1
content: 引用 3 楼 FightForProgrammer 的回复:试验了一下，个人感觉不行。 比如 int x = (a == 3 ? b : c); 整个三元表达式的返回值 是b或者c，而不是最终a是否等于3 关键是要看三元表达式的返回值是什么，因为if就是以三元表达式的返回值来做判断的  你说的什么，我完全不懂。

user: user-2
content: 试验了一下，个人感觉不行。 比如 int x = (a == 3 ? b : c); 整个三元表达式的返回值 是b或者c，而不是最终a是否等于3 关键是要看三元表达式的返回值是什么，因为if就是以三元表达式的返回值来做判断的

user: user-4
content: 肯定行，试下就知道了

user: user-5
content: 能.................
user-0 提问: 新手第一帖，想请教下关于格式化输入scanf配合switch的问题的讨论

回复:
user: user-0
content: 哦，原来如此，我对标准输入输出流了解还不够深，终于找到原因啦，太谢谢了。

user: user-1
content: 你需要 fflush(stdout);

user: user-2
content: #include <stdio.h> #define TRUE 1 #define FALSE 0 char DisplayMenu() {     int order;      printf("**The order list is as follows:\n");     printf("**10 - do what\n");     printf("**11 - do what\n");     printf("**20 - do what\n");     printf("**21 - do what\n");     printf("**30 - do what\n");     printf("**31 - do what\n");     printf("**00 - Exit\n");     while (1) {         printf("Please input your order:");fflush(stdout);         rewind(stdin);         if (1==scanf("%d", &order)) {             if (order==0              || order==10              || order==11              || order==20              || order==21              || order==30              || order==31) {                 break;             }         }         printf("Illegal order!\n");     }     return order; } char ExecuteOrder(char order) {     switch (order) {     case 10: {             do what                 return TRUE;         }     case 11: {             do what                 return TRUE;         }     case 20: {             do what                 return TRUE;         }     case 21: {             do what                 return TRUE;         }     case 30: {             do what                 return TRUE;         }     case 31: {             do what                 return TRUE;         }     case 0: {             return FALSE;         }     } } int main(void) {     char instruction = 0;     char flag = TRUE;     while(flag) {         instruction = DisplayMenu();         flag = ExecuteOrder(instruction);     }     return 0; }
user-0 提问: 三维数组的赋值与调用问题，求帮忙看看问题出哪了？急急急！！！！求各路大神帮忙！！！

回复:
user: user-1
content: for(j=0; j<=4; j++)    { for (l=0; l<=4; l++) { //循环1的内层循环 for (ii=0; ii<=4; ii++) { if (0 == ii) { d[ii][j][l] = ((1/2)*T[ii+1][j][l] + T[ii][j-1][l]+T[ii][j+1][l]+T[ii][j][l-1]+T[ii][j][l+1]+((1/F0)-5)*T[ii][j][l]);  你看看这段吧 如果j=0,或者j=4时， j-1,j+1是不是有问题。其他的都类似去排查

user: user-2
content: 调试吧。。。爱莫能助

user: user-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？  To set a breakpoint when a variable changes value ： From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable. Click OK to set the breakpoint.
user-0 提问: 三维数组的赋值与调用问题，求帮忙看看问题出哪了 问题？急急急！求各路大神帮忙，感激不尽！！！！！！

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？  To set a breakpoint when a variable changes value ： From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable. Click OK to set the breakpoint.

user: user-2
content: 一步步调试看下呗...
user-0 提问: 三维数组的赋值与调用问题，求帮忙看看问题出哪了

回复:
user: user-1
content: 在你另外一个帖子里面回复了，去看看吧

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？  To set a breakpoint when a variable changes value ： From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable. Click OK to set the breakpoint.

user: user-0
content: 运行以后d的值除了前5个其余都是零，但实际计算结果不是0，应该是500，而且每一次的循环好像不能执行。

user: user-0
content: 运行以后d的值除了前5个其余都是零，但实际计算结果不是0，应该是500，这是运行结果

user: user-3
content: 有什么问题啊？
user-0 提问: 如何输入一组不定长度的数组

回复:
user: user-1
content: 你可以使用标准模板库中的几种，比如std::vector，使用起来很方便，而且效率也很高

user: user-2
content: 动态申请数组。  另外就是设置一个足够长的。

user: user-3
content: struct info{     int size;     char data[0]; };  楼主查找下零长数组，就知道如何在C语言实现变长数组的使用了

user: user-4
content: 写一个函数计算总长，然后用malloc动态开辟空间。

user: user-5
content: malloc、realloc、free

user: user-6
content: #include<stdio.h> #include<malloc.h>  // 使用系统栈临时保存，保存数量受系统栈大小限制 // 参数1是个计数器，参数2用于返回int数组 // 返回元素数量 size_t getInts(int n,int **pns) { 	char c; 	if(!pns)return 0; 	// 过滤无效字符 	while((c=getchar())!='\n'&&(c<'0'||c>'9')&&c!='+'&&c!='-'); 	if(c=='\n') 	{ 		*pns=(int*)malloc(sizeof(int)*n); 		return 0; 	} 	else 	{ 		int a=0;size_t sz; 		ungetc(c,stdin);// 将c放回缓冲区 		scanf("%d",&a); 		sz=getInts(n+1,pns); 		if(!*pns) 			return 0; 		else 		{ 			(*pns)[n]=a; 			return sz+1; 		} 	} }  int main() { 	int* ns=NULL; 	size_t sz=getInts(0,&ns),i; 	if(ns) 	{ 		for(i=0;i<sz;++i) 			printf("%d\n",ns[i]); 		free(ns); 	} 	return 0; }

user: user-0
content: 是在C语言中实现的，不指定输入的数字个数

user: user-7
content: #include<stdio.h> int main() { 	int i,j;     int a[1000000]; printf("请输入你想输入的数字的个数：\n"); scanf("%d",&j); printf("请输入你的数组：\n"); for(i=0;i<j;i++) scanf("%d",&a[i]); return 0; }

user: user-8
content: STL中的容器倒是现成的好工具

user: user-9
content: 你可以用容器试试

user: user-10
content: C99好像已经支持了用变量做数组大小参数： #include<stdio.h>  #include<stdlib.h>  int main()  {int number;  int i;  printf("请输入数量；\n");  scanf("%d",&number);   int a[number];  for(i=0;i<number;i++)  {printf("a[%d]=",i);  scanf("%d",&a[i]);}  for(i=number-1;i>=0;i--)  {printf("a[%d]=%d\n",i,a[i]);}  free(a);  return 0;   } 两种方法，咱们共勉

user: user-10
content: #include<stdio.h> #include<stdlib.h> int main() {int number; int *a; int i; printf("请输入数量；\n"); scanf("%d",&number);  a=(int*)malloc(number*sizeof(int));//int*a=(int*)malloc(n*sizeof(int)); for(i=0;i<number;i++) {printf("a[%d]=",i); scanf("%d",&a[i]);} for(i=number-1;i>=0;i--) {printf("a[%d]=%d\n",i,a[i]);} free(a); return 0;  }  这次好多了  楼主希望对你有帮助的哦

user: user-10
content: #include<stdio.h> #include<stdlib.h> int main() {int number; int *a; int i; printf("请输入数量；\n"); scanf("%d",&number);  a=(int*)malloc(number*sizeof(int));//int*a=(int*)malloc(n*sizeof(int)); for(i=0;i<number;i++) {printf("a[%d]=",i); scanf("%d",&a[i]);} for(i=number-1;i>0;i--) {printf("a[%d]=%d",i-1,a[i]);} free(a); return 0;  }  这个应该更好些  至少我是这么认为，不喜勿喷

user: user-11
content: malloc realloc

user: user-10
content: malloc函数好像可以申请动态内存   好像可以这么做  前两天看到的   表示也是小白

user: user-10
content: #include"stdio.h" #include"malloc.h"//malloc()函数被包含在malloc.h里面 int main(void) {   char*a=NULL;//声明一个指向a的char*类型的指针       a=(char*)malloc(100*sizeof(char));//使用malloc分配内存的首地址，然后赋值给a   if(!a)//如果malloc失败，可以得到一些log           { perror("malloc"); return-1; }   sprintf(a,"%s","HelloWorld\n");//"HelloWorld\n"写入a指向的地址      printf("%s\n",a);//输出用户输入的数据       free(a);//释放掉使用的内存地址   return 0;//   }
user-0 提问: 关于文件读写问题，求帮忙看看代码！谢谢！

回复:
user: user-1
content: if((fp=fopen("addressbook.txt","ab"))==NULL) 	{ 		printf("\n\t\tOpen fail!"); 		exit(0); 	} 保存的时候，用追加的方式， w会把之前写的覆盖。

user: user-2
content: 单看save和read没有问题
user-0 提问: 逐行读取数据到嵌套结构体怎么申请空间

回复:
user: user-0
content: 引用 4 楼 zhangxiangDavaid 的回复:定位到具体的代码行？ extern "C" static int __cdecl CheckBytes(         unsigned char * pb,         unsigned char bCheck,         size_t nSize         ) {         int bOkay = TRUE;         while (nSize--)         {             if (*pb++ != bCheck)  //中断             { /* Internal error report is just noise; calling functions all report results - JWM */ /*                _RPT3(_CRT_WARN, "memory check error at 0x%p = 0x%02X, should be 0x%02X.\n", */ /*                    (BYTE *)(pb-1),*(pb-1), bCheck); */                 bOkay = FALSE;             }         }         return bOkay; }

user: user-1
content: 定位到具体的代码行？

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:稍作修改：  typedef struct { 	int x; 	int y; }PeakData; typedef struct { 	int label; 	int peakCount; 	PeakData* peaks; }MaterialData; int main(void) { 	int i = 0; 	int s = 0; 	int m = 0; 	int n = 100; 	int label1; 	int peakCount1; 	int x1, y1; 	char buf[50]; 	MaterialData *m_all; 	m_all = (MaterialData *)malloc(m_all, n*sizeof(MaterialData)); 	while (1) 	{ 		if (100 == i) 		{ 			n += 100; 			m_all = (MaterialData *)realloc(m_all, n*sizeof(MaterialData)); 		} 		if (NULL == fgets(buf, 50, fp)) break; 		if (4 != sscanf(buf, "%d%d%d%d", &label1, &peakCount1, &x1, &y1)) continue; 		m_all[i].peaks = malloc(sizeof(PeakData));    //为peaks分配指向 		//threshold哪里来的？ 		if (label1 == s) { 			m_all[i].label = label1; 			m_all[i].peakCount = peakCount1; 			m_all[i].peaks[m].x = x1; 			m++; 			s = label1; 		} 		else { 			i++; 			m = 0; 			m_all[i].label = label1; 			m_all[i].peakCount = peakCount1; 			m_all[i].peaks[m].x = x1; 			m++; 			s = label1; 		} 	} 	return 0; }  还是有问题：读取位置 0xcdcdcdc8 时发生访问冲突

user: user-1
content: 稍作修改：  typedef struct { 	int x; 	int y; }PeakData; typedef struct { 	int label; 	int peakCount; 	PeakData* peaks; }MaterialData; int main(void) { 	int i = 0; 	int s = 0; 	int m = 0; 	int n = 100; 	int label1; 	int peakCount1; 	int x1, y1; 	char buf[50]; 	MaterialData *m_all; 	m_all = (MaterialData *)malloc(m_all, n*sizeof(MaterialData)); 	while (1) 	{ 		if (100 == i) 		{ 			n += 100; 			m_all = (MaterialData *)realloc(m_all, n*sizeof(MaterialData)); 		} 		if (NULL == fgets(buf, 50, fp)) break; 		if (4 != sscanf(buf, "%d%d%d%d", &label1, &peakCount1, &x1, &y1)) continue; 		m_all[i].peaks = malloc(sizeof(PeakData));    //为peaks分配指向 		//threshold哪里来的？ 		if (label1 == s) { 			m_all[i].label = label1; 			m_all[i].peakCount = peakCount1; 			m_all[i].peaks[m].x = x1; 			m++; 			s = label1; 		} 		else { 			i++; 			m = 0; 			m_all[i].label = label1; 			m_all[i].peakCount = peakCount1; 			m_all[i].peaks[m].x = x1; 			m++; 			s = label1; 		} 	} 	return 0; }

user: user-0
content: 求教
user-0 提问: 中文文档如何去掉停用词

回复:
user: user-1
content: 想问下这里的src.txt格式有要求吗？我对中文文档分词，用“/”作为分隔符，怎么去除停用词前后没变化，停用词没去掉呢？

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

user: user-3
content: 我都已经验证过，你自己找下错误

user: user-0
content: 大神大神……txt 的地址我也更改为相对应的地址了，试验之后无错误……但是……为什么编译之后显示停止工作，求指教

user: user-3
content: 引用 2 楼 shaqkoko54 的回复:我想问一下楼上，src是要去停用词的文件么？des是去停用词后存储的文件么？  还想知道一下……为什么显示结果有误…请大神指教  你的src和des的理解是正确的， 加上头文件 #incldue<stdio.h> #include<string.h>

user: user-0
content: 我想问一下楼上，src是要去停用词的文件么？des是去停用词后存储的文件么？  还想知道一下……为什么显示结果有误…请大神指教

user: user-3
content: 一个简易的例子：  int main(void) { 	int i, n; 	FILE *fstop, *fs, *fd; 	if (NULL == (fstop = fopen("stop.txt", "r"))) return 1; 	if (NULL == (fs = fopen("src.txt", "r"))) return 1; 	if (NULL == (fd = fopen("des.txt", "w"))) return 1; 	char stop[100][30];   //100个停用词，够吗？ 	char buf[256];        //一行255个字符，够吗？ 	//读入停词表 	n = 0; 	while (1) 	{ 		if (NULL == fgets(buf, 256, fstop)) break; 		if ('\n' == buf[0]) continue;   //空行 		buf[strlen(buf) - 1] = 0;       //去掉'\n' 		strcpy(stop[n++], buf); 	} 	fclose(fstop); 	while (1) 	{ 		if (NULL == fgets(buf, 256, fs)) break; 		if ('\n' == buf[0]) continue;   //空行 		buf[strlen(buf) - 1] = 0;       //去掉'\n' 		for (i = 0; i < n; i++) 		{ 			char *p = buf; 			int len = strlen(stop[i]); 			while (p = strstr(p, stop[i])) 			{ 				memmove(p, p + len, strlen(p + len) + 1); 			} 		} 		fprintf(fd, "%s\n", buf); 	} 	fclose(fs); 	fclose(fd); 	return 0; }
user-0 提问: 求解此程序中的数据结构

回复:
user: user-1
content: RSA就几个数，是不是要这样  struct ras_key{    int n,p,q,e,d };

user: user-2
content: 那些处理的函数都能算是数据结构，因为也算个功能实现的封装

user: user-3
content: 至少prime应改为：  int prime(int m)       /*判断一个数是否为素数*/ { 	int i; 	int n; 	if (m <= 1) return 0; 	n = (int)sqrt(m); 	for (i = 2; i <= n; i++) 		if (m % i == 0) return 0; 	return 1; }
user-0 提问: 用C语言写一个FTP的客户端程序，需要了解哪些知识？

回复:
user: user-1
content: 没思路时找个开源的看看，uboot，busybox里有的

user: user-2
content: 一、需要的知识点： 1、SOCKET技术，网络编程的基本功能 2、FTP 3、如果需要自己写，可能需要熟悉各个网络框架 二、编写FTP所需要掌握的框架 1、wininet 2、libcurl

user: user-3
content: Unix/linux应用编程手册

user: user-4
content: rfc959FTP协议详细文档。

user: user-5
content: google或baidu

user: user-6
content: 需要了解socket编程和ftp协议。

user: user-7
content: What is NcFTPd Server?  NcFTPd is a high-performance File Transfer Protocol (FTP) server software solution for UNIX systems, designed especially for high-traffic sites and internet service providers. It is also popular among students, home users, educational sites, and businesses. NcFTPd has been providing fast, flexible, secure, and commercially supported FTP service since 1996!  The current version is: 2.8.7 (September 9, 2012).

user: user-7
content: Licensing entitles you to compile your programs and link with the compiled library code. You may distribute your compiled programs (with LibNcFTP linked with it) as you normally would; there are no royalty charges for distributing programs compiled with LibNcFTP. Please note that the source-code license does not allow you to re-distribute the LibNcFTP source code with your product. When you're ready to license the library, proceed to the ordering instructions.

user: user-7
content: LibNcFTP is an application programming interface that provides File Transfer Protocol (FTP) client services to your UNIX applications. Linking the library with your programs give you the capability to copy files to and from remote hosts using a time-tested protocol supported by almost every system connected to a TCP/IP network. Even better, you can do all of this without any user interaction!
user-0 提问: 求大神指点迷津

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

user: user-2
content: 以管理员权限运行

user: user-3
content: 你的scanf第二个形参前面是要加上&的，我看你都没加

user: user-4
content: char n; printf("\n   -------------*********欢迎使用户籍信息管理系统*********---------------\n"); printf("\n\t\t*************--请选择功能--***************"); printf("\n\t\t     --       0-退出系统       --"); printf("\n\t\t     --       1-查询个人信息   --"); printf("\n\t\t     --       2-管理员登陆     --"); printf("\n   -------------******************************************---------------\n"); scanf("%c", n);  这几行就有问题，自己单步调试，很容易。

user: user-5
content: 试试单步调试。
user-0 提问: 关于C 串口发送失败？

回复:
user: user-1
content: 后来解决了没有，貌似我也遇到你的问题了

user: user-0
content: 红色框框是 十六进制显示接收到的。后面绿色框框是 利用字符格式 接受的。我试过其他的串口工具，竟然也是一样的现象。实在不解不解啊~~~

user: user-0
content: 引用 2 楼 u011916206 的回复:[quote=引用 1 楼 u011916206 的回复:] while(str2[i]!='\0')     { SendOneByte(str2[i++]);	     }      SendrStr(str1);    SendrStr(str2); //这个肯定发布出去了··················   str2一直在++，在你发送的时候发送的时候str2是什么呢？想过吗  不好意思 看错了 ，以上无效。  建议楼主把两次str2的地址打出来，看是否是编译器优化的时候修改了str2的地址[/quote] 出现的现象太奇怪了，我利用 字符显示 就显示 “133” 我用十六进制显示，却可以都接受到。我的代码 和 结构如下图：

user: user-0
content: 引用 2 楼 u011916206 的回复:[quote=引用 1 楼 u011916206 的回复:] while(str2[i]!='\0')     { SendOneByte(str2[i++]);	     }      SendrStr(str1);    SendrStr(str2); //这个肯定发布出去了··················   str2一直在++，在你发送的时候发送的时候str2是什么呢？想过吗  不好意思 看错了 ，以上无效。  建议楼主把两次str2的地址打出来，看是否是编译器优化的时候修改了str2的地址[/quote] 恩    我试试   好久没搞程序了，现在一个串口都把我搞死了···哎

user: user-2
content: 引用 1 楼 u011916206 的回复:while(str2[i]!='\0')     { SendOneByte(str2[i++]);	     }      SendrStr(str1);    SendrStr(str2); //这个肯定发布出去了··················   str2一直在++，在你发送的时候发送的时候str2是什么呢？想过吗  不好意思 看错了 ，以上无效。  建议楼主把两次str2的地址打出来，看是否是编译器优化的时候修改了str2的地址

user: user-2
content: while(str2[i]!='\0')     { SendOneByte(str2[i++]);	     }      SendrStr(str1);    SendrStr(str2); //这个肯定发布出去了··················   str2一直在++，在你发送的时候发送的时候str2是什么呢？想过吗
user-0 提问: 二叉树，退栈到P是什么意思？

回复:
user: user-0
content: 引用 1 楼 user-3 的回复:就是从栈顶拿出来一个元素，赋值给p 也叫出栈 引用 2 楼 user-3 的回复:比如，一个二叉树只有两个结点，根结点和他的Rchild。那么 第2步把T->Rchild进栈 第3步的p=p->Lchild之后，p为空，转(4)， 第4步，栈里只有一个结点，就是第一步的T->Rchild，把它赋值给p，然后栈就空了。 谢谢 ，懂了

user: user-1
content: 该子树已遍历完，当然要退栈遍历其他子树。知道所有的子树都遍历完了，就是栈为空的时候

user: user-2
content: 出栈，获取栈顶元素

user: user-3
content: 比如，一个二叉树只有两个结点，根结点和他的Rchild。那么 第2步把T->Rchild进栈 第3步的p=p->Lchild之后，p为空，转(4)， 第4步，栈里只有一个结点，就是第一步的T->Rchild，把它赋值给p，然后栈就空了。

user: user-3
content: 就是从栈顶拿出来一个元素，赋值给p 也叫出栈
user-0 提问: 请问一个结构体的问题

回复:
user: user-1
content: 传入实参数组point没正确初始化

user: user-0
content: 引用 5 楼 zhangxiangDavaid 的回复:[quote=引用 3 楼 xubinlife 的回复:] [quote=引用 1 楼 hnwyllmm 的回复:] 这两个数组是怎么创建的？代码贴出来看看 代码挺长的就不贴了。。 *point 数组没问题，调试的时候有结果了 material只是做了MaterialData *material定义，应该还差什么 运行的时候报错：0xC0000005: 写入位置 0x00000000 时发生访问冲突 应该就是赋值的时候有问题 [/quote] material.peaks没有分配内存，无法赋值[/quote] 感谢 ，别的地方还有个小问题，现在已经解决了

user: user-0
content: 引用 6 楼 zhangxiangDavaid 的回复:双击定位到错误处，看看哪行出错 编译没错  就是调试的时候出错： material.peaks[i].x = point[i].x;      cxx0030 错误 无法计算表达式的值

user: user-2
content: 双击定位到错误处，看看哪行出错

user: user-2
content: 引用 3 楼 xubinlife 的回复:[quote=引用 1 楼 hnwyllmm 的回复:] 这两个数组是怎么创建的？代码贴出来看看 代码挺长的就不贴了。。 *point 数组没问题，调试的时候有结果了 material只是做了MaterialData *material定义，应该还差什么 运行的时候报错：0xC0000005: 写入位置 0x00000000 时发生访问冲突 应该就是赋值的时候有问题 [/quote] material.peaks没有分配内存，无法赋值

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:需要提前分配好内存  material.peaks = new PeakData[n];  我按您说的添加了，可还是出现一样的问题

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:这两个数组是怎么创建的？代码贴出来看看 代码挺长的就不贴了。。 *point 数组没问题，调试的时候有结果了 material只是做了MaterialData *material定义，应该还差什么 运行的时候报错：0xC0000005: 写入位置 0x00000000 时发生访问冲突 应该就是赋值的时候有问题

user: user-2
content: 需要提前分配好内存  material.peaks = new PeakData[n];

user: user-3
content: 这两个数组是怎么创建的？代码贴出来看看
user-0 提问: 有关字符动画的问题

回复:
user: user-1
content: 引用 4 楼 z931680577 的回复:[quote=引用 1 楼 zjq9931 的回复:] 需要用到的技术 定时。 像素读取。 输出。 能给出一些具体代码吗[/quote] 说实在的没有：但用到的函数如下： 定时器:settimer 等待：sleep 像素读取需要对图片数据结构有一定的了解，当然也可以直接用gid，cximage等读取， 然后把像素用适当的字符代替来输出。

user: user-2
content: Linux下参考NCURSES库

user: user-2
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-0
content: 引用 1 楼 zjq9931 的回复:需要用到的技术 定时。 像素读取。 输出。 能给出一些具体代码吗

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:https://www.baidu.com/s?wd=%E5%AD%97%E7%AC%A6%E5%8A%A8%E7%94%BB%20%E8%BD%AC%E6%8D%A2%E5%B7%A5%E5%85%B7&rsv_spt=1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_pq=eaf644660001e024&rsv_t=4959%2FYnfUqQxOH%2Fox1uBV0T3qHm5F%2FG4rG9h4sexK4Nn94fsqAdMCL%2F9MpAVG371%2BhWD&rsv_sug3=29&rsv_sug1=23&bs=%E5%AD%97%E7%AC%A6%E5%8A%A8%E7%94%BB  这个怎么放到C语言中呢

user: user-2
content: https://www.baidu.com/s?wd=%E5%AD%97%E7%AC%A6%E5%8A%A8%E7%94%BB%20%E8%BD%AC%E6%8D%A2%E5%B7%A5%E5%85%B7&rsv_spt=1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_pq=eaf644660001e024&rsv_t=4959%2FYnfUqQxOH%2Fox1uBV0T3qHm5F%2FG4rG9h4sexK4Nn94fsqAdMCL%2F9MpAVG371%2BhWD&rsv_sug3=29&rsv_sug1=23&bs=%E5%AD%97%E7%AC%A6%E5%8A%A8%E7%94%BB

user: user-1
content: 需要用到的技术 定时。 像素读取。 输出。
user-0 提问: C语言结构初学的一个小问题，求大神。

回复:
user: user-1
content: 使用p++;可如下：  #include <stdio.h> #define N 10 struct student { 	int num; 	char name[10]; 	float point; }; void input(struct student *p) { 	struct student *q = p; 	for (; p != q + N; p++) 	{ 		printf("Input num:"); 		scanf("%d", &(*p).num); 		printf("Input name:"); 		scanf("%s", &(*p).name); 		printf("Input point"); 		scanf("%f", &(*p).point); 	} } struct student *imax(struct student *p) { 	struct student *q, *r; 	q = r = p; 	for (p++; p != q + N; p++) 	{ 		if ((*p).point > (*r).point) r = p; 	} 	return r; } int main() { 	struct student *p; 	struct student stu[N]; 	input(stu); 	imax(stu); 	p = imax(stu); 	printf("%d %s %f", (*p).num, (*p).name, (*p).point); 	return 0; }

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include <stdio.h> #define N 10 struct student{     int num;     char name[10];     float point; }; void input(struct student *p) {     for (int i=0;i<N;i++)     {         printf("%d/%d\n",i+1,N);         printf("Input num:");fflush(stdout);         scanf("%d", &p[i].num);         printf("Input name:");fflush(stdout);         scanf("%9s", p[i].name);         printf("Input point");fflush(stdout);         scanf("%f", &p[i].point);     } } struct student *max(struct student *p) {     struct student *v;     v=p;     for (int i=1;i<N;i++)     {         if (p[i].point > v->point)         {             v=p+i;         }     }     return v; } int main() {     struct student *p;     struct student stu[N];     input(stu);     p = max(stu);     printf("%d %s %f", p->num, p->name, p->point);     return 0; }  非常感谢，不过我想问如果在input函数里用p++这样的操作能实现吗？

user: user-2
content: 1：边界值N应该传入参数，输入的个数可以通过传出参数控制。 2：输出多了&，注意 scanf和printf区别。 scanf("%lf", &(*p).point); printf("%d%s%f", &(*p).num, &(*p).name, &(*p).point);   此外注意： 1：数组应该memset初始化下。 2：注意下区别整数，浮点型，char区别。     for (; (*p).num !='\0'; p++)     for (; (*p).point!= '\0'; p++)

user: user-3
content: #include <stdio.h> #define N 10 struct student{     int num;     char name[10];     float point; }; void input(struct student *p) {     for (int i=0;i<N;i++)     {         printf("%d/%d\n",i+1,N);         printf("Input num:");fflush(stdout);         scanf("%d", &p[i].num);         printf("Input name:");fflush(stdout);         scanf("%9s", p[i].name);         printf("Input point");fflush(stdout);         scanf("%f", &p[i].point);     } } struct student *max(struct student *p) {     struct student *v;     v=p;     for (int i=1;i<N;i++)     {         if (p[i].point > v->point)         {             v=p+i;         }     }     return v; } int main() {     struct student *p;     struct student stu[N];     input(stu);     p = max(stu);     printf("%d %s %f", p->num, p->name, p->point);     return 0; }
user-0 提问: 关于MATLAB和c混编的问题，MATLAB调用mex文件实现

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！  这样做有没有考虑到数据处理的实时性问题

user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！

user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！  实在担心所谓的实时性，你不会将文件放在RAMDISK上吗。
user-0 提问: 求大神帮忙做下流程图，c语言杨辉三角的

回复:
user: user-1
content: 画再完美的流程图或写再完美的伪代码，也不如一个能实际运行的实例。

user: user-2
content: 伪代码,说错了

user: user-2
content: 做流程图还不如用伪语言写的好
user-0 提问: 怎么把偏态分布转换为正态分布

回复:
user: user-1
content: 偏态分布只有满足一定的条件（如样本例数够大等）才可以看做近似正态分布。  与正态分布相对而言，偏态分布有两个特点：  一是左右不对称（即所谓偏态）；  二是当样本增大时，其均数趋向正态分布。
user-0 提问: 关于结构体嵌套的问题

回复:
user: user-1
content: typedef struct {         int   label;         int   peakCount;         struct tag_PeakData {             int   x;             int   y;         } PeakData; } MaterialData;

user: user-2
content: 1、第8行末尾的冒号改成分号； 2、第9行的开头，去掉struct；  更正代码如下：  typedef struct {         int   x;         int   y;  } PeakData;  typedef struct {         int   label;         int   peakCount;         PeakData  *peaks; } MaterialData;    楼主试试？

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:修改如下：  typedef struct{     int x;     int y; }PeakData; typedef struct{     int label;      int peakCount:      //struct PeakData* peaks;  //去掉struct     PeakData* peaks; }MaterialData;  m=data[i].peaks[j].x    //这个用法没问题 多谢   其实之前没问题 struct是刚加的，之前问题出在peakCount;打成了:

user: user-3
content: 修改如下：  typedef struct{     int x;     int y; }PeakData; typedef struct{     int label;      int peakCount:      //struct PeakData* peaks;  //去掉struct     PeakData* peaks; }MaterialData;  m=data[i].peaks[j].x    //这个用法没问题
user-0 提问: 如何在c文件中显示特殊的图形

回复:
user: user-1
content: _     _          _     _          _     _         (o\---/o)        (o\-~-/o)        (o\~~~/o)          ( 6 6 )          ( , , )          ( 9 9 )  ____,~~.(_(T)_),~~.__,--.{_(Y)_},--.__,--.(_(T)_),--.____ |    "--"       "--"  "--"       "--"  "~~"       "~~"    | |                                                         | |                                                         | |   _,-.    ,-._       _,-.    ,-._        _,-.    ,-._   | |__(ooO )__( Ooo)_____(ooO )__( Ooo)______(ooO )__( Ooo)__|    ((_) )  ( (_))     ((_) )  ( (_))      ((_) )  ( (_))     "--"    "--"       "~~"    "~~"        "-~"    "~-"

user: user-2
content: 感觉楼主会对这个帖子感兴趣：http://bbs.csdn.net/topics/391035037 其实绘制图形就是将图形按照一定的排列方式输出即可，让小的形状组合成一个大的形状。当然楼主要是还对这些东西感兴趣，还可以去专门学习openGL绘图，相信会有收获的

user: user-1
content: 搜“SigZag”

user: user-3
content: ascii码图形制作工具？

user: user-4
content: 引用 2 楼 user-5 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 拼命的printf() 不过如果有些图形符号排列有些规律，可以用循环加一些控制语句来实现(同为fresh bird，我之前看到过同样的，不过不知道可不可以)[/quote] 能实现效果，怎么都行

user: user-5
content: 引用 1 楼 zhangxiangDavaid 的回复:拼命的printf() 不过如果有些图形符号排列有些规律，可以用循环加一些控制语句来实现(同为fresh bird，我之前看到过同样的，不过不知道可不可以)

user: user-4
content: 拼命的printf()
user-0 提问: 请各位高手帮我看看，这个程序在vs2008中编译的结果，什么地方出了问题？

回复:
user: user-0
content: 多谢各位高手指点！

user: user-1
content: 第二个for循环应该只包含紧跟它的if语句，你的目的是对穷举找出n的每个因子并求和。在你的源代码里，把第二个if也包含在内，就会在求n因子的过程中(还没有完全求完，只是部分因子)得到的和与n相同，然后就会输出全部。

user: user-2
content: 一个高效点的版本：  int factors[100];  //存放因子 int main() { 	int n, i, j, s; 	for (n = 2; n <= 1000; n++) 	{ 		s = 0; 		j = 0; 		for (i = 1; i <= n/2; i++) 		{ 			if (n % i == 0) 			{ 				s = s + i; 				factors[j++] = i;  //记录n的因子 			} 		} 		if (s == n) 		{ 			printf("%d是完全数。它的因子是：", n); 			for (i = 0; i < j; i++) printf("%d ", factors[i]); 			printf("\n"); 		} 	} 	return 0; } //6是完全数。它的因子是：1 2 3 //28是完全数。它的因子是：1 2 4 7 14 //496是完全数。它的因子是：1 2 4 8 16 31 62 124 248

user: user-2
content: 修改如下：  int main() { 	int n, i, s; 	for (n = 2; n <= 1000; n++) 	{ 		s = 0; 		for (i = 1; i < n; i++) 		{ 			if (n % i == 0) 				s = s + i; 		} 		if (s == n) 		{ 			printf("%d是完全数。它的因子是：", n); 			for (i = 1; i < n; i++) 			{ 				if (n % i == 0) 					printf("%d  ", i); 			} 			printf("\n"); 		} 	} 	return 0; }
user-0 提问: 程序运行怎么提示是（核心已转储），求大神指点！

回复:
user: user-1
content: 修改如下：  #define N 100 char *delchar(char *p, char b) { 	int i, j; 	for (i = 0; p[i]; i++) 	{ 		if (p[i] == b) 		{ 			for (j = i; j < strlen(p); j++) 				p[j] = p[j + 1]; 				//return p; 		} 	} 	return p; } void main() { 	char a[N] = "yanglongfei", y; 	printf("请输入一个字符串和要要删除的字符:"); 	scanf("%s %c", a, &y);   //%s和%c之间给一个空格 	printf("%s\n", delchar(a, y)); } //zhangxiang x //zhangiang

user: user-2
content: char *delchar(char *p, char b )   {   6         int i,j;   7         char s[N];   8         p=s;   9         for(i=0; i<strlen(s); i++)  10         {  11              if(s[i]==b)  12               {   13                 for(j=i; j<strlen(s)-1; j++)  14                   s[j]=s[j+1];  15                   return p;                                     16               }  17         }  我这边调试没有你说的那个错误，不过运行还是会出错的 这个p=s是什么意思，你是想把p赋值给s吧，那也应该是s=p，但是你这样定义char s[N]，s是一个const类型的数组，不能这样赋值 #include <stdio.h>                                                           #include <string.h> #include <stdlib.h> #define N 100 char *delchar(char *p, char b,size_t len )  { 	int i,j; 	 	for(i=0; i<len; i++) 	{ 		if(p[i]==b) 		{  			for(j=i; j<len-1; j++) 				p[j]=p[j+1]; 			p[j]='\0'; 			return p;                                    		} 	} 	return NULL;  } void main() { 	char a[N],y; 	printf("请输入一个字符串和要要删除的字符:"); 	scanf("%s %c",a,&y); 	printf("%s\n",delchar(a,y,strlen(a))); 	system("pause"); }  仅供参考

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

user: user-4
content: 引用 1 楼 yaojuntong77 的回复:MARK  第07行：这是个局部变量 第08行：经过赋值以后，外部传入的数组根本没用上，而是指向内部局部堆栈上的数组变量地址 第09行：i<strlen(s) 可能出现问题，因为局部数组变量还没赋值，这个strlen(s) 求出的是个可能越界的数值 第15行：所以，在这里执行 return p; 是有问题的  归纳：子函数内部，不需要申请额外的局部数组s[N], 直接使用参数 char *p 带进来的字符数组既可；       另外，在这个情况下，只要更新数组元素的值，且子函数不需要返回这个指向数组的指针，即申明返回类型为void就OK。  我来拿分哟，楼主觉得答案满意的话，请多多关照，嘻嘻  在上面的修改模式下，第25行的调用方式将发生变化，可以在外部调用完delchar(a, y); 之后，再使用：     printf("%s\n", a); 直接打印；  如果希望保留原样，那么子函数还是保留 char *返回类型和 return p;语句咯～

user: user-4
content: MARK  第07行：这是个局部变量 第08行：经过赋值以后，外部传入的数组根本没用上，而是指向内部局部堆栈上的数组变量地址 第09行：i<strlen(s) 可能出现问题，因为局部数组变量还没赋值，这个strlen(s) 求出的是个可能越界的数值 第15行：所以，在这里执行 return p; 是有问题的  归纳：子函数内部，不需要申请额外的局部数组s[N], 直接使用参数 char *p 带进来的字符数组既可；       另外，在这个情况下，只要更新数组元素的值，且子函数不需要返回这个指向数组的指针，即申明返回类型为void就OK。  我来拿分哟，楼主觉得答案满意的话，请多多关照，嘻嘻
user-0 提问: free出错，以百度，相信很多人有这样的问题

回复:
user: user-0
content: 1、我用szMessage1获得一个新的内存 2、然后将szMessage内容的值赋给szMessage1, 3、然后将szMessage指向的旧的内存释放掉 4、然后将szMessage指针指向新的内存地址szMessage1; 5、给新申请来的内存赋初值；

user: user-1
content: 你分配的是给szMessage1 释放的是szMessage

user: user-0
content: 在free(*(szMessage+i))时出错了

user: user-2
content: free 出错原因是 free 了 TEXT("NULL\0");  指向的内存  还有内存泄漏问题 for (i = 0; i < 4*iMsCount; i++) {   *(szMessage1+i) = (TCHAR*)malloc(sizeof(TCHAR) * 6);  // malloc 了 (4*iMsCount) 次 } //转移数据 if (szMessage != NULL) {     for (i = 0; i < 4 * (iMsCount-1); i++)     // ....     free(...)...        // 这个 free 只 free 了 4 * (iMsCount-1) 次   从代码罗辑猜测楼主的 szMessage 是一个 有 4 段 每段有 iMsCount 个字符串 最后的字符串为 "NULL"; 但最后这段代码做法有问题 szMessage = szMessage1; for (i=4*(iMsCount-1); i < 4 * iMsCount; i++) {       szMessage[i] = TEXT("NULL\0");    /// 这里需要用 copy 操作才行 } 1) 硬生生地把 szMessage[i] 原来所指向的内存掉丢了, 指向一段常量内存 2) 并不是将 每段 最后的字符串设为 "NULL"; 也就是这里引致为什么会 free 出错

user: user-3
content: malloc什么，就free什么

user: user-4
content: 你提供的代码看不出 szMessage 第一次是怎么分配出来的， 大小是对少。

user: user-0
content: BOOL NewStringArray()//申请一段新的存放字符数组空间，并释放旧的字符串 { 	int i,j; 	TCHAR **szMessage1;  	//二重指针 	if (NULL == (szMessage1 = (TCHAR**)malloc(sizeof(TCHAR*)*4*iMsCount))) 	{ 		MessageBox(NULL, TEXT("字符串内存申请失败"), TEXT("提示"), MB_ICONERROR); 		return FALSE; 	}  	//一重指针 	for (i = 0; i < 4*iMsCount; i++) 	{ 		*(szMessage1+i) = (TCHAR*)malloc(sizeof(TCHAR) * 6); 	} 	//转移数据 	if (szMessage != NULL) 	{ 		for (i = 0; i < 4 * (iMsCount-1); i++) 		{ 			//if(i>=4*(iMsCount)) 			//memcpy(*(szMessage1+i),*(szMessage+i), lstrlen(szMessage[i])); 			for (j = 0; j <= lstrlen(szMessage[i]); j++) 			{ 				*(*(szMessage1 + i) + j) = *(*(szMessage + i) + j); 			} 			//*(*(szMessage1 + i) + j) = TEXT('\0'); 			free(*(szMessage+i)); 			szMessage[i] = NULL; 		} 		free(szMessage); 	} 	szMessage = szMessage1; 	szMessage1 = NULL; 	for (i=4*(iMsCount-1); i < 4 * iMsCount; i++) 	{ 		szMessage[i] = TEXT("NULL\0"); 	} 	return TRUE; }
user-0 提问: 碰到一个诡异的问题

回复:
user: user-1
content: 原因很简单，没有包含math.h, 就没有exp函数的原型，所以参数传递和返回值都是错误的

user: user-2
content: 说得，非常好啊

user: user-3
content: 调用的每个库函数都有确定性的包含头文件的，c/c++的编译器有不少重写的库函数

user: user-4
content: 这是低安全性！！！！！

user: user-5

user: user-6
content: 在C++中没有包含头文件，是无法编译通过的 但在C语言中没有包含头文件，也是可以编译通过的 C语言中有个东西叫"隐式函数声明" 你可以在a.c中写一个函数 然后在b.c中调用它，也是能编译通过的 出错的原因楼上几位已经说到了

user: user-7
content: 头文件没有，不能调用

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

user: user-9
content: 用其它编译器

user: user-10
content: 生来就是这样！TC2 也是如此 这个要追溯 C 的老祖宗的责任了

user: user-11
content: 原因很简单，没有包含math.h, 就没有exp函数的原型，所以参数传递和返回值都是错误的

user: user-11
content: 原因很简单，没有包含math.h, 就没有exp函数的原型，所以参数传递和返回值都是错误的

user: user-12
content: 原因很简单，没有包含math.h, 就没有exp函数的原型，所以参数传递和返回值都是错误的

user: user-12
content: 原因很简单，没有包含math.h, 就没有exp函数的原型，所以参数传递和返回值都是错误的

user: user-13
content: 引用 13 楼 lm_whales 的回复:微软编译器好像没有隐式声明这回事吧 试试看  老式编译器是有要求的 更古老的编译器，只是对函数参数比较随意点 这个内建函数，应该是半新不旧的标准 MS 应该还没来得及实现吧  老式的C 除了scanf,printf 之外，都要求函数有声明或者定义 scanf,printf  是唯一可以直接使用的两个函数 不过后来，也有编译器（几乎所有）都要求必须 声明  也就是  #include <stdio.h>  gcc linux 都是比较新的软件，虽然比较流行，跟那些古老的编译器和操作系统比起来，还是年轻得多 C (不是C++) 最新的标准都不要求函数使用前一定要声明。 直接使用默认声明是  int func(); ===== 注意 C 里，int func(); 跟 int func(void); 不是一码事，前者对参数没有任何要求，后者不能有任何参数。

user: user-14
content: 原因很简单，没有包含math.h, 就没有exp函数的原型，所以参数传递和返回值都是错误的

user: user-15
content: 嗯，编译器怎么处理的问题。

user: user-16
content: 微软编译器好像没有隐式声明这回事吧 试试看  老式编译器是有要求的 更古老的编译器，只是对函数参数比较随意点 这个内建函数，应该是半新不旧的标准 MS 应该还没来得及实现吧  老式的C 除了scanf,printf 之外，都要求函数有声明或者定义 scanf,printf  是唯一可以直接使用的两个函数 不过后来，也有编译器（几乎所有）都要求必须 声明  也就是  #include <stdio.h>  gcc linux 都是比较新的软件，虽然比较流行，跟那些古老的编译器和操作系统比起来，还是年轻得多

user: user-13
content: C 语言没有对函数声明的要求，也就是不需要函数在使用前先对函数进行声明  没有声明的函数默认返回 int 。  对函数的使用与实际函数的定义不一致时，结果是不确定的。

user: user-17
content: 你好，请问你是做机器视觉开发工作的人员吗？
user-0 提问: 在vs2013环境下：写一个函数，使输入的一个字符串按反序存放，在主函数中输入和输出字符；编译结果不一致？

回复:
user: user-1
content: 引用 10 楼 yangyunzhao 的回复:不建议用_s的函数，可能带来移植性问题  是的，10楼的考虑很周到，如果是这样的话，考虑到移植性，可以自己封装个scanf_s函数就好办了，同步关掉告警， 哈哈

user: user-2
content: 不建议用_s的函数，可能带来移植性问题

user: user-0
content: 引用 7 楼 yaojuntong77 的回复:建议你弄个头文件，把要关闭的告警全收集起来，然后在需要屏蔽这些告警的地方，把这个头文件包含进去，就省了打字的麻烦  比如说你定义的数组是10个元素上限，由于不带_s的函数不检测上界，这个嘛就 哈哈哈哈…… BUG很严重，BOSS很生气的  所以会有这些_s函数的诞生 哦哈哈，原来酱紫。 既然有警告那就不需要屏蔽了哇，要是屏蔽了不就出问题了还不知道了么

user: user-1
content: 直接上修改后的代码给你吧：   #include <stdio.h> #include <string.h>  #define  MAX_STR_LEN   100  char * InvertStr(char * const pStr);  void main(void) { 	char  str[MAX_STR_LEN] = {'\0'};  	printf("Please input a string without any blank space key: "); 	fflush(NULL); 	scanf_s("%s", str, MAX_STR_LEN); 	printf("Before invert: %s\n", str); 	printf("After invert : %s\n", InvertStr(str)); 	putchar('\n'); }  char * InvertStr(char * const pStr) { 	char    tmpChar; 	size_t  StrLength = strlen(pStr); 	size_t  i;  	for (i=0; i<StrLength/2; i++) 	{ 		tmpChar = pStr[i]; 		pStr[i] = pStr[StrLength-i-1]; 		pStr[StrLength-i-1] = tmpChar; 	} 	return pStr; }    这个是我刚刚编译通过的

user: user-1
content: 建议你弄个头文件，把要关闭的告警全收集起来，然后在需要屏蔽这些告警的地方，把这个头文件包含进去，就省了打字的麻烦  比如说你定义的数组是10个元素上限，由于不带_s的函数不检测上界，这个嘛就 哈哈哈哈…… BUG很严重，BOSS很生气的  所以会有这些_s函数的诞生

user: user-0
content: 引用 5 楼 yaojuntong77 的回复:简单的说： 1、在VisualStudio2005之前的开发环境中，比如VC++6.0环境，使用了早期的库文件，所以默许scanf函数为安全函数； 2、在VisualStudio2005开始的新IDE环境中，考虑到scanf的不安全性，用scanf_s函数进行替换，然后对用户使用scanf函数进行告警性提示； 3、如果你想用安全的代码，建议用scanf_s，如果非要用scanf也可以，但是会告警，屏蔽告警的方法如下：  // 在调用到scanf函数的文件的第一行，加入如下代码： #pragma warning(disable: 4996)   谢谢！除了sacnf函数，还是gets函数等，都要用相应_s函数替代，并且要加上参数具体值限制，否则会溢出怎么样的，这其中的原理我不是太清楚，请大神给讲讲哇~

user: user-1
content: 简单的说： 1、在VisualStudio2005之前的开发环境中，比如VC++6.0环境，使用了早期的库文件，所以默许scanf函数为安全函数； 2、在VisualStudio2005开始的新IDE环境中，考虑到scanf的不安全性，用scanf_s函数进行替换，然后对用户使用scanf函数进行告警性提示； 3、如果你想用安全的代码，建议用scanf_s，如果非要用scanf也可以，但是会告警，屏蔽告警的方法如下：  // 在调用到scanf函数的文件的第一行，加入如下代码： #pragma warning(disable: 4996)

user: user-0
content: 引用 2 楼 iyomumx 的回复:用scanf并关闭sdl选项，或者 scanf_s("%s", str, 100);  哦，对，我又把这事给忘了，每次换成了sacnf_s，后面的字符串数量限制还是老是忘，不知道这其中的奥妙在哪里？ 另外，请教大神：sdl选项是什么东东，怎么关闭？

user: user-0
content: 引用 1 楼 user-4 的回复:char str1[2048]="hello"; char str[2048]={0}; for(int i=0;i<len;i++) {       str[len-i-1]=str1[i]; } printf("%s\n",str); 啥意思，不明觉厉额?

user: user-3
content: 用scanf并关闭sdl选项，或者 scanf_s("%s", str, 100);

user: user-4
content: char str1[2048]="hello"; char str[2048]={0}; for(int i=0;i<len;i++) {       str[len-i-1]=str1[i]; } printf("%s\n",str);
user-0 提问: const char *strA ="\\xE5\\085\\x8D";   // 请问怎吗变成“免”字？

回复:
user: user-1
content: 搜把汉子转为16进制

user: user-2
content: char a[] = {'\xe5', '\x85', '\x8d', 0}; buffer1把'\xe5'神马的都拆开了，就不是原来的意思了。 buffer2只用了4个字符完成的，你用了13个。

user: user-3
content: Windows下还需要UTF8转Unicode，参考下面，尽管是VB6： Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long '常用的代码页： const cpUTF8   =65001 const cpGB2312 =  936 const cpGB18030=54936 const cpUTF7   =65000 Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String     Dim bufSize As Long     bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)     MultiByteToUTF16 = Space(bufSize)     MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize End Function  Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()     Dim bufSize As Long     Dim arr() As Byte     bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)     ReDim arr(bufSize - 1)     WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0     UTF16ToMultiByte = arr End Function  Private Sub Command1_Click()     MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8) End Sub

user: user-3
content: const char *strA ="\\xE5\\x85\\x8D";   // 请问怎吗变成“免”字？ char s[4]; int i,v; for (i=0;i<3;i++) {  sscanf(strA+2+i*4,"%2X",&v);  s[i]=(char)(v&0xffu); } s[3]=0; printf("[%s]\n",s);

user: user-0
content: 其实我是要把 const char *strA = "\\xE5"; 变成   char *strB = "\xE5"？

user: user-4
content: unicode 兔机器码

user: user-5
content: int main(void) { 	char c1, c2; 	char s[] = "兔"; 	c1 = s[0]; 	c2 = s[1]; 	printf("%s\n", s); 	printf("%c%c\n", c1, c2); 	return 0; } //兔 //兔
user-0 提问: XP中，RasGetErrorString（）正常，但WIN7、8中，不能完整取到错误信息，什么原因？

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:以管理员身份运行 以XP兼容模式运行  试了，貌似跟这两个选项无关。

user: user-1
content: 以管理员身份运行 以XP兼容模式运行

user: user-0
content: 测试的WIN7是32位的，WIN8当时让同事帮测，倒没注意这个问题。

user: user-1
content: 没准是因为你Win 7、8是64位的。
user-0 提问: 新人小白求分析代码

回复:
user: user-1
content: 这个好像关键代码都没有啊，都是对buffer 的操作？

user: user-2
content: 代码不完整 read_signals和output_signals都未实现

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

回复:
user: user-1
content: 慢慢学习，，，不要着急，，，，需要付出的

user: user-2
content: 只看到 3处宏定义 一个结构体

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

回复:
user: user-1
content: 这是数据结构的题目，用栈就能算出。

user: user-2
content: 第一题网搜，嗯

user: user-3
content: 向4楼学习。

user: user-4
content: 1) 直接搜索，本身状态比较少  #define WOLF    (1<<2) #define SHEEP   (1<<1) #define CAB     (1<<0) #define ALL     (WOLF|SHEEP|CAB)  const int mv[]={0,CAB,SHEEP,WOLF}; const char *name[]={"empty","cabbage","sheep",0,"wolf"}; int vis[2][20],path[100],maxd; inline int bitct(int k) { return !k ? 0 : (k&1)+bitct(k>>1); } inline bool eat(int s){return s==6||s==3;} bool dfs(int d,int s){     if(!(d&1)&&s==0) return true;     int h =bitct(d&1 ? s^ALL : s);     if(d+1+(h-1)*2>maxd) return false;     for(int i=0;i<4;i++){         if(!mv[i]||(s&mv[i])){             s^=mv[i];             if(!vis[d&1][s]&&!eat(s)){                 vis[d&1][s] =1;                 path[d] =mv[i];                 if(dfs(d+1,s^ALL)) return true;                 vis[d&1][s]  =0;             }             s ^=mv[i];         }     }     return 0; }  void river(){     for(maxd=1;;maxd+=2){         memset(vis,0,sizeof vis);         if(dfs(0,ALL)) break;     }     for(int i=0;i<maxd;i++){         printf("%d takes %s\n",i+1,name[path[i]]);     } } int main(void) {     river();     return 0; }  2） 菲波数列，这个增长很快，N大一点就会超过32位， int fib(int n){     if(n<2) return 1;     return fib(n-1)+fib(n-2); }

user: user-5
content: 第2题:斐波那契数列
user-0 提问: 关于GCC优化选项打开后编译出错的问题

回复:
user: user-1
content: 引用 2 楼 mymtom 的回复:编译命令用错啦！ gcc emmbed.c -o2 emmbed ===> gcc -O2 emmbed.c -o emmbed 赞！

user: user-2
content: 编译选项对大小写是敏感的。

user: user-3
content: 编译命令用错啦！ gcc emmbed.c -o2 emmbed ===> gcc -O2 emmbed.c -o emmbed

user: user-4
content: #include<stdio.h> int main() {      printf("%d\n",2);      return 0; } 这样的话用你那个编译器还会出错吗？
user-0 提问: C语言 文件指针 (*fp1)._base CXX0030: Error: expression cannot be evaluated

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

user: user-2
content: readFile看看这里面是怎么运行的

user: user-3
content: 调试下 readFile里面有误吧
user-0 提问: VC6.0断点编译后出现LINK : fatal error LNK1168:  （之前的运行窗口已关闭）

回复:
user: user-0
content: 谢谢各位啦~

user: user-1
content: VC在重新生成Debug目录下的exe文件时，需要先删除原先的exe文件。但因为文件正在运行或是被锁定等原因，删除不了，于是出现 LNK1168错误。你可以先将原先的exe文件关闭后手工删除（如果找不到窗口，就看看任务管理器中是有这个exe正在运行，存在就强制关闭它）。如果删除失败，则用右键菜单中的36o解除占用试试。

user: user-2
content: 你可以先将原先的exe文件关闭后手工删除（如果找不到窗口，就看看任务管理器中是有这个exe正在运行，存在就强制关闭它）

user: user-3
content: 编译没有问题，但代码中递归没有出口. 可以考虑加个判断数据大小的条件.  char ch; 	static int i=0; 	//fflush(stdin); 	//scanf("%c",&ch); 	ch=node[i]; 	i++; 	if(i >= 8) 		return NULL;
user-0 提问: 求，百度面试中，如何用c 语言 实现 在一个 txt按行读取，并查找和定位每行 的 X 和Y 字符或其他汉字

回复:
user: user-1
content: 用文件指针操作.

user: user-2
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-3
content: 这样可好：  FILE *fp; char buf[256]; char *p; int X, Y; int main(void) { 	if (NULL == (fp = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Can not open file : 1.txt\n"); 		return 1; 	} 	fgets(buf, 256, fp);   //读入第一行 	printf(buf); 	while (1) 	{ 		if (NULL == fgets(buf, 256, fp)) break; 		if (2 == sscanf(buf, "X %d Y %d", &X, &Y)) printf("X=%d,Y=%d\n", X, Y); 	} 	fclose(fp); 	return 0; } //孔型: A //X = 1000, Y = 243600 //X = -10000, Y = 301000 //X = -100200, Y = 246000 //X = -100200, Y = 322400 //X = -101200, Y = 122800 //X = -101324, Y = 265174 //X = -101324, Y = 268324 //X = -101324, Y = 271474 //X = -101324, Y = 274623 //X = -101324, Y = 277773 //X = -101324, Y = 284072 //X = -101324, Y = 287222 //X = -101324, Y = 293521 //X = -101324, Y = 296670 //X = -101324, Y = 299820 //X = -101400, Y = 306200 //X = -101400, Y = 315600 //X = 10200, Y = 242600 //X = 102000, Y = 246000 //X = 102000, Y = 269600 //X = 102000, Y = 297200 //X = 102000, Y = 301200