Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 输出是多少？为什么？谢谢解答

回复:
user: user-0
content: 引用 2楼baidu_37097818 的回复:代码中的操作是: 将int指针转换为double指针了。然后将指针解引用并赋值。我们假定你这里的int是32位的，那么由于double是64位的，所以解引用并赋值，会导致a[0]和接下来的a[1]值发生改变，但double和int的编码格式不一样，所以它们两个的值实际上是double的5.0转化成int的数值，而a[2]则不会发生改变嗯嗯谢谢，我知道了

user: user-1
content: 代码中的操作是: 将int指针转换为double指针了。然后将指针解引用并赋值。我们假定你这里的int是32位的，那么由于double是64位的，所以解引用并赋值，会导致a[0]和接下来的a[1]值发生改变，但double和int的编码格式不一样，所以它们两个的值实际上是double的5.0转化成int的数值，而a[2]则不会发生改变

user: user-2
content: 输出是不确定的，换句话说，输出是多少没有意义。  按照C++标准的规定，reinterpret_cast只保证当转换为其它类型后，再转换回原类型时值不变。 并不确定中间值是多少。举个例子：  int* a = new int();  double * b = reinterpret_cast<double *>(a); //b的值不确定 int* c = reinterpret_cast<int*>(b);  //c一定等于a  那这么说reinterpret_cast有什么用呢? 可以参考：http://www.cnblogs.com/ider/archive/2011/07/30/cpp_cast_operator_part3.html 有详细阐述。
user-0 提问: wav格式的分析

回复:
user: user-0
content: 请问楼上有bass库的说明吗

user: user-1
content: 引用 4 楼 weixin_39547089 的回复:请问楼上有bass库的说明吗 难道网上搜不到？

user: user-1
content: 推荐使用bass库处理音频。

user: user-0
content: 我问题是如何得到时域数据  我能读到的数据都是十六进制  采样率 采样点我都知道了  关键是如何把data段的大量数据变成时域

user: user-2
content: 先确定该wav的采样率，采样大小和声道数，在提取数据进行转换。如此获取的数据可能会更好处理。
user-0 提问: 单链表问题----指针指向方面有些不懂！！！

回复:
user: user-1

user: user-2
content: 引用 2 楼 qq_39209116 的回复:好像明白了，，是这样吗?   s -> next 读取的指针L的内容，而L的内容是每一次循环中新开辟的结构体空间的地址。这样的话新的结构体总是指向“旧”的结构体，形成链表。而最新的那个节点就是首节点，L指针是头指针。想当于就是每次都从链表的头部插入啊，L=s是为了下一次如果要插入时，能够将新的s的next指向L，如果没有插入，那为L就为头指针

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

user: user-4
content: 这是头插方法建立链表，比如输入的x是1， 2 ，3那么，链表中的头就是3，其次是2， 1；

user: user-0
content: 好像明白了，，是这样吗?   s -> next 读取的指针L的内容，而L的内容是每一次循环中新开辟的结构体空间的地址。这样的话新的结构体总是指向“旧”的结构体，形成链表。而最新的那个节点就是首节点，L指针是头指针。

user: user-5
content: L是个指针, 通过L的指向可以访问到这个链表.跟L的地址有没有变化没有关系.L指针值变化就可以了.
user-0 提问: pcap生成静态库

回复:
user: user-1
content: 引用怎么写  需要加： --enable-static  一个例子：http://www.aichengxu.com/linux/2430379.htm

user: user-2
content: 不知道你要 搞什么, 没理解你的意思

user: user-3
content: 搜“跟我一起写makefile”？

user: user-0
content: 不用， 都是centos系统

user: user-2
content: 要交叉编译吗?
user-0 提问: 求大神帮忙，有关选择排序的问题，为什么要定义一个变量int key=array[low]；还要这样使用if(array[j]

回复:
user: user-0
content: 引用 3 楼 cfjtaishan 的回复:这是因为通过遍历数组找到最小值，low代表的最小值，是我们假想的或者假定的最小值，通过遍历找到比假定的最小值之后就要将最小值赋值key，但是如果第一次找到的最小值还不是最小值，那么将继续替换key和下标，知道将数组元素遍历完。然后继续找次最小值，一次类推。  我明白了，key就相当于一个游标，去找出最小值，不能把每次找到的最小值赋值给数组本身的元素，如果最小值不是首位的话，那循环j次就前面的元素全部都成了最小值了

user: user-1
content: 这是因为通过遍历数组找到最小值，low代表的最小值，是我们假想的或者假定的最小值，通过遍历找到比假定的最小值之后就要将最小值赋值key，但是如果第一次找到的最小值还不是最小值，那么将继续替换key和下标，知道将数组元素遍历完。然后继续找次最小值，一次类推。

user: user-2
content: 因为你用key和array[]里面的所有值去比较，当然要先给key赋一个初始值

user: user-3
content: 因为array[low]是不变的，而key是变化的
user-0 提问: 数据结构线性链表

回复:
user: user-0
content: 引用 2 楼 cfjtaishan 的回复:以上的代码是修改后，并且加了2个函数。 注意二重指针。  蟹蟹你

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <unistd.h> #include <stdbool.h>  #define OVERFLOW -2 #define OK 1 #define ERROR 0  typedef struct Node{     int data;     struct Node *next; }Node;  typedef struct Node* LinkList;  //创建链表(尾插法) int CreateList(LinkList *L, int n) {     LinkList p,r;     int i,e;     (*L) = (LinkList)malloc(sizeof(Node));     r = *L;     for(i = 0; i < n; i++)     {         p = (Node*)malloc(sizeof(Node));         scanf("%d",&e);         p->data = e;         r->next = p;         r = p;//p为中介节点     }     r->next = NULL;      return OK; }  //删除链表 int ClearList(LinkList *L){     LinkList p,q;     p = *L;//报错     while(p)     {         q = p->next;         free(p);         p = q;     }     (*L)->next = NULL;      return OK; }  int GetLinkLenght(LinkList L) {     assert(L);     int len = 0;     LinkList p = L->next;      while (p) {         len++;         p = p->next;     }      return len; }  //获得元素 int GetElem(LinkList *L, int i, int *e) {     //当第i个元素存在时，其值赋给e，并返回OK，否则ERROR     LinkList p;     int j = 1, max_len;     p = (*L)->next;     max_len = GetLinkLenght(*L);     if (i > max_len)         return ERROR;      while(p&&(j < i))     {         p = p->next;         j++;     }     if(!p)         return ERROR;     *e = p->data;      return OK; }  //插入链表元素 int InsertElem(LinkList *L,int i,int e) {     //第i个元素之前插入e     LinkList p,s;     int j=1;     p = *L;//报错     while(p&&(j<=i))     {         p = p->next;         j++;     }     if(!p||j>i) return ERROR;     s = (LinkList)malloc(sizeof(Node));     s->data = e;     s->next = p->next;     p->next = s;      return OK; }  //删除链表元素 int DeleteElem(LinkList *L,int i,int *e){     //删除第i个元素，并由e返回其值     LinkList p;     int j=1;     p = *L;//报错     while(p&&(j<=i))     {         p = p->next;         j++;     }     if(!p||j>i) return ERROR;     *e = p->next->data;     p->next = p->next->next;     return *e; }  static void print_all_elem(LinkList L) {     assert(L);     LinkList p = L->next;      while (p) {         printf("data = %d\n", p->data);         p = p->next;     } }   int main() {     int n, x, e;     LinkList La;     printf("请输入你要输入的元素个数：");     scanf("%d", &n);     CreateList(&La, n);     // x = ClearList(La);      print_all_elem(La);      x = GetElem(&La, 2, &e);      printf("x = %d, %d\n", x,  e);      // if(x)     //     printf("OK");     // else     //     printf("Error2");     ClearList(&La);     return 0;  }   以上的代码是修改后，并且加了2个函数。 注意二重指针。

user: user-0
content: 。。。说错了，是错的是指针
user-0 提问: 杭电2000 求告知哪里错了

回复:
user: user-1
content: 把while循环条件 改成while(scanf("%c%c%c",&a,&b,&c)!=EOF)

user: user-2
content: #include <stdio.h>  int main() {     char x,a,b,c;     while(scanf("%c %c %c",&a,&b,&c)!=0)    /*加空格用于区分相邻两个输入*/     {         getchar();    /*用于接收'\n'*/         if(a>b)         {             x=a;             a=b;             b=x;          }          if(a>c)         {x=a;             a=c;             c=x;         }         if(b>c)         {             x=b;             b=c;             c=x;         }         printf("%c %c %c",a,b,c);         printf("\n");     }     return 0; }
user-0 提问: （C语言题目） 新手求助大神

回复:
user: user-1
content: 下一步移动方向应该是随机产生的。

user: user-2
content: 仅供参考：#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXX 10 #define MAXY 10 void main() {     char MAP[MAXX][MAXY];     char str;     int x,y,z,f,n;      for (x=0;x<MAXX;x++) {         for (y=0;y<MAXY;y++) {             MAP[x][y]='.';         }     }      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n");      srand((unsigned) time(NULL)); RETRY:     x=0;y=0;str='A';MAP[x][y]=str;      for (str='B';str<='Z';str++) {         n=0;         f=1;         while (1) {             n++;             z=rand()%4;             switch (z) {                 case 0: if (y+1<MAXY && MAP[x  ][y+1]=='.') {y++;MAP[x][y]=str;f=0;} break;                 case 1: if (x+1<MAXX && MAP[x+1][y  ]=='.') {x++;MAP[x][y]=str;f=0;} break;                 case 2: if (y-1>0    && MAP[x  ][y-1]=='.') {y--;MAP[x][y]=str;f=0;} break;                 case 3: if (x-1>0    && MAP[x-1][y  ]=='.') {x--;MAP[x][y]=str;f=0;} break;             }             if (f==0) break;             if (n>200) {//钻入死胡同                 for (x=0;x<MAXX;x++) {                     for (y=0;y<MAXY;y++) {                         MAP[x][y]='.';                     }                 }                 goto RETRY;             }         }//while         if (x==MAXX-1 || y==MAXY-1) break;     }//for      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n"); }
user-0 提问: 大哥帮查一下错，文件处理，本来是可以运行的没有错。

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  typedef struct staff{     int number; //号码     char name[8]; //姓名     char sex[4]; //性别     int age; //年龄     char abode[20]; //住宅     int wage; //工资     char health[8]; //健康     char culture[8]; //文化 }ff;  int main() {     FILE *fp,*fp1;     ff jg[5];     int i=0;     fp=fopen("employee.txt","r");     if (!fp) {         fprintf(stderr, "Open file error!\n");         return -1;     }     fp1=fopen("employee1.txt","w");     if (!fp1) {         fprintf(stderr, "Open error!");         return -1;     }     fscanf(fp,"%d %s %s %d %s %d %s %s\n",&jg[i].number,jg[i].name,jg[i].sex,&jg[i].age,jg[i].abode,&jg[i].wage,jg[i].health,jg[i].culture);     while(!feof(fp)){         fprintf(fp1,"%d %s %d\n",jg[i].number,jg[i].name,jg[i].wage);         i++;         fscanf(fp,"%d %s %s %d %s %d %s %s\n",&jg[i].number,jg[i].name,jg[i].sex,&jg[i].age,jg[i].abode,&jg[i].wage,jg[i].health,jg[i].culture);     }     fclose(fp);     fclose(fp1);     return 0; }

user: user-1
content: 程序看着没什么问题，注意下确保打开的文件没有问题，即判断返回的文件描述符，另外，注意下feof

user: user-2
content: fp=fopen("employee.txt","r");只有这个文件存在才能成功，如果这个文件不存在就会报错。

user: user-3
content: 引用就不行了 fp1=fopen("employee1.txt","w"); //打开方式为w，这种方式当文件再次打开时，会清除掉之前的内容，宜换成a+方式  具体文件打开方式的区别，可参考： http://no001.blog.51cto.com/1142339/526653

user: user-4
content: 建议楼主先把结构中的数组长度加大，应该是越界引起的错误，表现在时好时坏

user: user-5
content: 引用 楼主 yi19861209 的回复:#include"stdio.h" #include"stdlib.h" typedef struct staff{ 	int number;		//号码 	char name[8];		//姓名 	char sex[4];		//性别 	int age;		//年龄 	char abode[20];		//住宅 	int wage;		//工资 	char health[8];		//健康 	char culture[8];	//文化 }ff; int main(){ 	FILE *fp,*fp1; 	ff jg[5]; 	int i=0; 	fp=fopen("employee.txt","r");           //判断下         if(!fp)         {           printf("判断下文件是否打开");           return 0;        }  	fp1=fopen("employee1.txt","w"); 	while(!feof(fp)){ 		fscanf(fp,"%d %s %s %d %s %d %s %s\n",&jg[i].number,jg[i].name,jg[i].sex,&jg[i].age,jg[i].abode,&jg[i].wage,jg[i].health,jg[i].culture); 		fprintf(fp1,"%d %s %d\n",jg[i].number,jg[i].name,jg[i].wage); 		i++; 	} 	fclose(fp); 	fclose(fp1); 	return 0; } //本来是可以运行的我试了好几次都没有错，过了一下不知道怎么了就不行了。我都是用编辑器输入   报的什么错
user-0 提问: 我定义一个结构体，然后初始化，之后取其地址，为什么指针不为空？

回复:
user: user-1
content: 楼上的兄弟伙些  正解

user: user-2
content: 引用为什么不指向空  在代码中有注释:  #include<stdio.h> #include<string.h>  void ifStruct(void *indata) { 	if (NULL == indata) //传入的地址为空，才会执行这个分支，那到底indata是空指针吗? 	{ 		printf("结构体指针指向空\n"); 		return; 	}  	printf("结构体指针不指向空\n"); 	return; }  int main() { 	typedef struct student 	{ 		int id; 		char name[10];  	}Student;   	Student std; //在栈上创建了Student类的实例对象，该对象占用内存空间，&std是有值的。 	memset(&std, 0, sizeof(std));   	ifStruct(&std); //实参&std有值，传递到函数中，形参indata也有值，不是空指针。                               //可以在这行设置断点，调试中止后看一下std的值就清楚了 	return 0; }

user: user-3
content: 对结构体变量初始化，只是对结构体里的元素初始化了。

user: user-3
content: 因为传递给形参的是一个有效地址，即main函数里变量std的地址。即形参indata指向了std的地址。除非这样调用ifStruct函数： ifStruct(NULL);

user: user-4
content: 你只是将结构体里面的数据改变为0，就是将id的值改为0，和将数组改为空数组，并没有将结构体的指针指向为空，现在结构体的指针指向一堆0，结构体的指针一直都在，从没有变过。
user-0 提问: C语言 服务器转发文件给客户端，客户端开线程接收文件出错

回复:
user: user-1
content: 你用的不是TCP协议的，用的的UDP协议，这种协议传输，不保证数据的可靠性，以及是否到达，用TCP协议吧

user: user-0
content: 引用 7 楼 hzy_76 的回复:关TCP什么事？楼主显然是用UDP的方式！  UDP是无保证的协议，需要自己处理丢包、重复的问题，我估计你可能出现重复收包了。一般的处理方式是每个包用一个ID号标识，一来可以处理重复问题，二来用于确定顺序。另外加入收包确认机制，发送方在一定时间内如果收不到确认，要重发该ID的数据。 谢谢，交完作业已经好几天了，我也不是专业的，所以这个问题并不是很想要深究下去。但是怎么才能在发帖后得到及时的帮助，这点能教教我吗？

user: user-2
content: 引用 10 楼 hzy_76 的回复:这我也没有好办法，尤其是在论坛上，你的帖子被真正能帮你的人注意到，是无法量化时间的。如果你大概知道谁懂，就直接问他，这样最好了。要不就只能等，我在CSDN问一个问题，也是好多天后才有人提供比较好的思路，最终还是我自己搞定的。  自己搞定能有所提高，

user: user-3
content: 这我也没有好办法，尤其是在论坛上，你的帖子被真正能帮你的人注意到，是无法量化时间的。如果你大概知道谁懂，就直接问他，这样最好了。要不就只能等，我在CSDN问一个问题，也是好多天后才有人提供比较好的思路，最终还是我自己搞定的。

user: user-3
content: 关TCP什么事？楼主显然是用UDP的方式！  UDP是无保证的协议，需要自己处理丢包、重复的问题，我估计你可能出现重复收包了。一般的处理方式是每个包用一个ID号标识，一来可以处理重复问题，二来用于确定顺序。另外加入收包确认机制，发送方在一定时间内如果收不到确认，要重发该ID的数据。

user: user-4
content: 引用 7 楼 hzy_76 的回复:关TCP什么事？楼主显然是用UDP的方式！  UDP是无保证的协议，需要自己处理丢包、重复的问题，我估计你可能出现重复收包了。一般的处理方式是每个包用一个ID号标识，一来可以处理重复问题，二来用于确定顺序。另外加入收包确认机制，发送方在一定时间内如果收不到确认，要重发该ID的数据。 不知道有多少前人掉在UDP Socket sendto(人多)sendto(病少)sendto(财富) recvfrom(人多)recvfrom(财富) 陷阱里面啊！

user: user-2
content: 引用 2 楼 WindwaterSide 的回复:[quote=引用 1 楼 kakabulusi 的回复:] 这就需要你了解一下TCP传输机制了。  TCP的三次握手、超时重传等机制。 三次握手保证了数据传输的可靠性，超时重传保证了数据的完整性。  但是，实际情况可能不尽如人意，超时重传可能会遇到实际发送成功，但是在指定时间内没有应答的情况，这种情况下会造成异常重传。【比如说，应答的响应时间如果超过500ms则重传该批次数据，由于网络情况，某段数据流传输时间开销可能超过了500ms才到达接收方，此时发送方不再响应该包正常收到的应答信息，而重新传递该批次数据。这一点也是TCP和UDP协议在本质上的区别】  TCP本身是流式套接字，解决完这个问题后，你还会遇到很多问题，比如说滑动窗口、粘包等，希望对你有帮助。  谢谢回复，但是明天就是ddl了，所以现在只是想知道我的程序出了什么问题，能帮我看看吗[/quote]   现在看可能来不及了，

user: user-5

user: user-4
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-0
content: 引用 1 楼 kakabulusi 的回复:这就需要你了解一下TCP传输机制了。  TCP的三次握手、超时重传等机制。 三次握手保证了数据传输的可靠性，超时重传保证了数据的完整性。  但是，实际情况可能不尽如人意，超时重传可能会遇到实际发送成功，但是在指定时间内没有应答的情况，这种情况下会造成异常重传。【比如说，应答的响应时间如果超过500ms则重传该批次数据，由于网络情况，某段数据流传输时间开销可能超过了500ms才到达接收方，此时发送方不再响应该包正常收到的应答信息，而重新传递该批次数据。这一点也是TCP和UDP协议在本质上的区别】  TCP本身是流式套接字，解决完这个问题后，你还会遇到很多问题，比如说滑动窗口、粘包等，希望对你有帮助。  谢谢回复，但是明天就是ddl了，所以现在只是想知道我的程序出了什么问题，能帮我看看吗

user: user-2
content: 这就需要你了解一下TCP传输机制了。  TCP的三次握手、超时重传等机制。 三次握手保证了数据传输的可靠性，超时重传保证了数据的完整性。  但是，实际情况可能不尽如人意，超时重传可能会遇到实际发送成功，但是在指定时间内没有应答的情况，这种情况下会造成异常重传。【比如说，应答的响应时间如果超过500ms则重传该批次数据，由于网络情况，某段数据流传输时间开销可能超过了500ms才到达接收方，此时发送方不再响应该包正常收到的应答信息，而重新传递该批次数据。这一点也是TCP和UDP协议在本质上的区别】  TCP本身是流式套接字，解决完这个问题后，你还会遇到很多问题，比如说滑动窗口、粘包等，希望对你有帮助。
user-0 提问: 一个关于C编译器的问题

回复:
user: user-1
content: for循环里定义变量不是C的语法规则，你用C编译器就是通不过。对于是用C98还是C99总归都是C的语法规则

user: user-2
content: c++支持在函数内部任意地方定义变量，而c的变量只能在函数的开始定义。

user: user-0
content: 后缀明是.ca呀，而且我在编译器的参数设置里加了-std=c99这样不就支持c99了吗？为什么说这是c++

user: user-3
content: 提示说命令行参数是用来编译C源代码的指令  而你的源代码文件是C++的  把后缀名改成 .c 就没事了

user: user-4
content: c99才支持for内部定义变量

user: user-1
content: for (int i = 0; i < 5; i++) 这句int定义在for循环里是C++才有的语法。所以，这个error可能是这个导致的。把i的定义放在外面看看还提示这个错误不

user: user-5
content: 你源代码文件的扩展名是.c吗？
user-0 提问: 各位帮我看一看这个表达式,我觉得没问题啊

回复:
user: user-1
content: 注释描述有问题呢，若a等于1，说明输入正确。

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

user: user-3
content: 楼上正解。。。。。

user: user-4
content: while的那行后面的分号去掉啊！哈哈
user-0 提问: 关于缓存内容读取

回复:
user: user-1
content: 这种问题可以用共享内存，把文件直接映射到进程地址空间，效率不会比都read到缓冲区（内存）慢

user: user-2
content: 在文件大小相同的前提下：  读刚读过的文件比头次读没读过的文件快  读转速快的硬盘上的文件比读转速慢的硬盘上的文件快  读没有磁盘碎片的文件比读有磁盘碎片的文件快  读文件不处理比边读边处理快  单线程从头到尾一次读文件比多线程分别读文件各部分快（非固态硬盘上）  读固态硬盘上的文件比读普通硬盘上的文件快  您是否希望迅速对您频繁使用的文件进行碎片整理？使用 Contig 优化单个的文件，或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428

user: user-2
content: 引用 6 楼 chenzheng1030 的回复:这种问题可以用共享内存，把文件直接映射到进程地址空间，效率不会比都read到缓冲区（内存）慢 有画蛇添足之嫌。

user: user-2
content: 不要低估操作系统读写文件时使用内存缓冲区策略所用的智商！

user: user-3
content: 引用 3 楼 a24027 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] [quote=引用 楼主 a24027 的回复:] 解析文件,需要先读取文件,老板说频繁读取降低效率,所以先把文件内容读取到缓存区,然后从缓存里读取,但是缓存里怎么读呢  unsigned char* pBuf; pBuf=(char*)malloc(1000);  指针为字符指针,然而实际的数据有整型,短整型和字符型,怎样通过字符指针直接读取4个字节连在一起的内容呢 可以考虑定义结构体，读取的内容放到pBuf缓存里（char类型）然后再强制类型转换。[/quote] 从文件读取,内容又不是单一格式,不能定义结构体[/quote] 看你文件的内容是不是有格式或者规律的，使用fscanf可以对有格式的内容读取。如果没有规律，考虑读到pBuf里，然后挨个解析了。

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:[quote=引用 楼主 a24027 的回复:] 解析文件,需要先读取文件,老板说频繁读取降低效率,所以先把文件内容读取到缓存区,然后从缓存里读取,但是缓存里怎么读呢  unsigned char* pBuf; pBuf=(char*)malloc(1000);  指针为字符指针,然而实际的数据有整型,短整型和字符型,怎样通过字符指针直接读取4个字节连在一起的内容呢 可以考虑定义结构体，读取的内容放到pBuf缓存里（char类型）然后再强制类型转换。[/quote] 从文件读取,内容又不是单一格式,不能定义结构体

user: user-2
content: 老板胡诌了。  无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-3
content: 引用 楼主 a24027 的回复:解析文件,需要先读取文件,老板说频繁读取降低效率,所以先把文件内容读取到缓存区,然后从缓存里读取,但是缓存里怎么读呢  unsigned char* pBuf; pBuf=(char*)malloc(1000);  指针为字符指针,然而实际的数据有整型,短整型和字符型,怎样通过字符指针直接读取4个字节连在一起的内容呢 可以考虑定义结构体，读取的内容放到pBuf缓存里（char类型）然后再强制类型转换。
user-0 提问: 关于视频解析

回复:
user: user-1
content: 引用求它的总帧数  如果只是为了完成求总帧数这个任务，可以借助opencv或者其它第三方库。 如果老师的意思是让你自己写算法来解决，肯定得分析文件结构组成。 可以把视频裁短些，先用其它库得到总帧数，假设为5帧。 然后自己分析文件，看看文件规律，看怎么样也能得到5帧。  视频中有关键帧概念，视频是分块压缩存储，每一块有一个关键帧，其他帧只记录与关键帧不同的地方以节省存储空间。

user: user-2
content: 按你导师的提示，找到这两帧，通过他们的时间戳计算得出总时长，然后根据帧率计算出总帧数！比如25FPS，总时长1小时，那总帧数为：25 *（1*60*60）

user: user-3
content: 根据视频文件的结构组成分析视频文件即可。  还有一个粗略的办法，获取到视频文件的帧率和时间，推算出总帧数。

user: user-4
content: 使用ffmpeg库？
user-0 提问: 请教wscanf 格式化中文字符乱码怎么解决?

回复:
user: user-1
content: 完全理解得费些功夫，涉及到字符集、编码方式、unicode等等概念。 setlocale函数的链接如下： https://msdn.microsoft.com/en-us/library/x99tb11d.aspx

user: user-1
content: 引用感谢楼下继续帮我解决这个问题 先给出解决方案，在main函数的第一行：  #include <locale.h>  //头文件 setlocale (LC_ALL,""); //添加到main函数的第一行  原因是因为执行字符集和控制台字符集必须保持一致(GBK)。 代码中setlocale (LC_ALL,"");的作用是将执行字符集与操作系统的字符集设置成一样。  更详细的原因请查询相关资料，可以从setlocale函数入手：

user: user-0
content: http://www.cnblogs.com/dejavu/archive/2012/09/16/2687586.html 这个可以作为到此一游的纪念了!结贴!!

user: user-0
content: ok,问题终于解决了,感谢fight_in_dl的解决方法,我只知道是编码问题,没方法解决.刚才有在csdn上找到了一个例子,再次感谢所有围观的各位!!

user: user-2
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-0
content: 百度了一通,好像跟代码页没什么关系! 2楼请注意,pe32得到的文件名是正常的,控制台输入的得到不正常,所以比较的时候就出问题了? 继续求解!感谢楼下继续帮我解决这个问题.

user: user-3
content: 是Unicode的编码，所以是乱码

user: user-4
content: 1，控制台的字符格式默认不是utf-8的，所以wscanf读入的中文是乱码 2，wprintf没有问题，比如控制台的字符格式是A，wscanf是按照A格式读入的，wprintf也是按照A格式输出的，所以其没问题 chcp可以修改控制台字符格式，详情请自行搜索

user: user-5
content: main换成wmain
user-0 提问: 请教哪里有问题

回复:
user: user-1
content: 字符串中的字符和十六进制数据值是不能意义对应的。 建议使用sscanf和sprintf对字符串和16进制数据进行转换

user: user-2
content: 每次赋值与上0xff.    ch2[i] = ch[i]&0xff.

user: user-3
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-4
content: 引用就会异常 没看到代码，不好说具体原因。  有几个地方提醒楼主注意： 1  char 有signed char 和 unsigned char。     不能保证这些十六进制数能对应期望的值。 2  %x打印的是数组第一个元素的地址，如果想打印某个元素的值，以下是范例：          unsigned char arr[8];     printf("0x%x", arr[5]);  //打印第6个元素
user-0 提问: inRec.EventType == MOUSE_EVENT 总是不成立

回复:
user: user-0
content: 谢谢大神指点，困扰几天的问题得到解决啦

user: user-1
content: 引用求解答  请参考：  http://ask.csdn.net/questions/381133  这是我之前的一个回答，应该和这个问题相似。

user: user-2
content: 关闭快速编辑模式。

user: user-1
content: 引用困扰几天的问题得到解决啦  不客气，共同进步。 能结题散分吗，论坛有采纳率的指标，谢谢！
user-0 提问: 各位大大能给小弟看看吗？

回复:
user: user-1
content: 是不是malloc的空间太小了，malloc(10*n*sizeof(int))

user: user-0
content: 引用 1 楼 T20091 的回复:int *buf=(int *)malloc(10*n); int *buf1=(int *)malloc(n);   一个int占四个字节，分配的空间有问题，你这代码准确来说是会crash的。 int *buf=(int *)malloc(10*n*sizeof(int)); int *buf1=(int *)malloc(n*sizeof(int)); 恍然大悟，谢谢！！

user: user-2
content: int *buf=(int *)malloc(10*n); int *buf1=(int *)malloc(n);   一个int占四个字节，分配的空间有问题，你这代码准确来说是会crash的。 int *buf=(int *)malloc(10*n*sizeof(int)); int *buf1=(int *)malloc(n*sizeof(int));
user-0 提问: zzuliOj 1178

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>   typedef struct word {     char str[32]; } W;   typedef struct words {     char word[32];     int cnt; }WORD;  int get_words(W *word_list, int max_num, char *sentence);  static W p[1001]; static int gword_num;  int main() {     char str1[32];     int count = 0;      memset(p,'\0',sizeof(p));     while(strcmp((gets(str1)), "#") != 0)     {         count = get_words(p, 1001, str1);         /*            i=0;            count=0;            k=0;            while(str1[i]!='\0')            {            j=0;            while(str1[i] == ' ')            i++;            for( ; str1[i] != ' ' && str1[i] !='\0'; i++)            {            p[k].str[j++]=str1[i];            }            for(j=0; j<k; j++)            {            if(strcmp( p[k].str, p[j].str)==0)            {            count--;            break;             }            }            count++;            k++;            while(str1[i]==' ')            i++;             }            */          printf("%d\n",count);     }     printf("%d\n",count);      return 0; }   int get_words(W *word_list, int max_num, char *sentence) {     int i = 0, j = 0, k;     int flag = 0;     char tmp[32];      while (sentence[i] == ' ')         i++;      for ( ; sentence[i] && sentence[i] != '\n'; i++) {         if (sentence[i] != ' ' && sentence[i] != ','                 && sentence[i] != '!' && sentence[i] != '.') {             tmp[j++] = sentence[i];         } else if (j >= 1) {             tmp[j] = 0;             for (k = 0; k < max_num && strlen(word_list[k].str) > 0; k++) {                 if (strcmp(word_list[k].str, tmp) == 0) {                     flag = 1;                     break;                 }             }             if (flag == 0) {                 strcpy(word_list[k].str, tmp);                 gword_num++;             }             j = 0;             flag = 0;         }     }     if (j >= 1) {         tmp[j] = 0;     }     for (k = 0; k < max_num && strlen(word_list[k].str) > 0; k++) {         if (strcmp(word_list[k].str, tmp) == 0) {             flag = 1;             break;         }     }     if (flag == 0) {         strcpy(word_list[k].str, tmp);         gword_num++;     }      return gword_num; } 做了一个参考吧

user: user-2
content: static W p[1001]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:static W p[1001]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 为啥不加个标点符号呢，但我能大概看懂了

user: user-0
content: 发现问题了，谢谢你们，内存申请的不够

user: user-0
content: 帮帮忙吧，实在看不出来才求助的
user-0 提问: 关于数组下标问题

回复:
user: user-1
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-2
content: 下标都是从0开始的，如果你确实想从1开始，即下标为0的元素不使用，也是可以，那就是定义a[11]，下标从1～10的都可以使用。

user: user-3
content: 你可以定义一个宏来实现不建议.

user: user-4
content: 不能，规定就是从0开始。越界的话，轻者数据访问错误，重者应用崩溃，不能越界访问

user: user-5
content: 不能

user: user-6
content: 引用后果是什么  推荐参考这篇博客，阐述了这么做的一些弊端。 引用http://c.biancheng.net/cpp/html/1600.html  再补充我个人的一些理解: 下标表示的是该元素对首元素的偏移，第一个元素没有偏移，所以下标为0  c/c++中数组运算本质上是指针运算。 当下标从0开始，*(a+n)就可引用到a[n] 当下标从1开始，则*(a+n-1)才能引用到a[n] 前者更好。  随着编程学习的深入，会逐渐体会到下标从0开始更合理。
user-0 提问: C语言疑惑的地方

回复:
user: user-1
content: 5是一个常量，所以返回的是5这个常量的指针，常量指针不会变，所以可以输出5

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

user: user-3
content: 引用 楼主 qq_39545013 的回复:int *name() {  int  *s=5;     //这步会出错，将int型赋给int* 类型，要强转，不然编译不通过  return s; } main() {  int *a=name();  printf("%d\n",s); } 为什么输出还是5，*s不应该是在栈区的吗，函数结束后，内存就没了呀。  其它没毛病

user: user-3
content: 虽然是在堆栈中，堆栈是没有了，但是指针绝对在（也就是内存地址是不会跟着堆栈消失的），里面的数据你没有清空，内存中就会一直保存。 如果你的s是一个基本变量，这样就行不通了。

user: user-4
content: 先不辨别楼主的问题，首先，你的程序肯定是有问题的，编译都通不过吧。怎么会有正确值呢。 修改如下： int *name() {  int  *s=5;  return s; } main() {  int *a=name();  printf("%d\n", a); } 然后，讨论这个问题； name函数中，s是指针，将5赋值给s就是，s指针变量里存放的值是5，即s指针指向内存单元中地址为5单元（可能是虚拟地址）。然后将s返回（返回的是s内存单元里的值5）。main函数中将该值又赋值给变量a，然后输出变量a的值。这样没什么问题。跟栈有关系的就是变量s, a但是return返回的是值。

user: user-5
content: 引用内存就没了 int *name() {  int  *s=5; //这行会报错，等式左右两边类型不符  return s; } main() {  int *a=name();  printf("%d\n",s); //这行会报错,s在main函数中没有定义。 }  代码是有问题的，不知道是不是粘贴错了，请再检查一下。

user: user-6
content: 如果真确，也是偶然

user: user-7
content: 这个代码好奇怪哦，能通过编译吗？

user: user-8
content: main函数里哪来的s,直接就报错不运行的......

user: user-9
content: 直接就在 int * s =5 就报错了

user: user-10
content: int *name() {  int  *s=5;/////////// 编译能过吗  return s; } main() {  int *a=name();  printf("%d\n",s); /////////////  s哪来的 }   这样的代码还能运行，深表怀疑，能编译成功吗

user: user-11
content: 这种方式是很危险的，int  *s=5; 准确来说这个会crash的。 刚好返回的这个指针指向内存能访问，所以某次是没有问题。 还有你确定main里面的printf是没打错？

user: user-12
content: 你是直接向指针赋值一个整数，然后指针又向指针赋值，所以指针a的值当然就是5啦

user: user-0
content: 兄弟们解释一下
user-0 提问: 如代码所示，连续运行‘b’，‘c’程序出现崩溃，但是单步执行程序却不出现崩溃现象

回复:
user: user-0
content: 是排序有问题，但是我单步调试发现没问题，也不知道错在哪，而且单步调试可以运行但是一运行就崩溃

user: user-1
content: 重点看一下你的排序，排序有问题。

user: user-0
content: 不太懂，，可以说详细点吗?小白一枚，。。。

user: user-2
content: 判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }
user-0 提问: 关于return 0返回成对的值还是任意值

回复:
user: user-1
content: 看你程序本身是如何设计的 返回0表示成功一般的情况是，有多种类型错误，比如1，2，3……（-1，-2，-3……）分别代表某种类型错误 当程序只要求判断成功那么使用 ！取反操作符即可  你认为的仅仅只是成功和失败（不细分）两种情况就返回0，1，这样子也是没有问题的 C++的话更清晰明了的做法是直接返回bool类型 C可以选择TRUE宏和FALSE宏替代（很多程序通常的做法）  以此开始延伸，当你返回int的时候用某个具体值代表失败，考虑如下代码： if(func() == 1) //此处用1来代表失败     return; 假如某天你扩展了你的func函数，你想更细分你的错误类型，诸如加入2，3等 那么你此处的代码必须进行更新  得出结论：判断不成功最好的方式就是 if(!func())  而要判断具体错误，那就使用具体代码（也可以用定义好的宏来比较）  这是一个设计观念的差异而已 Win32接口绝大多数函数返回值就是使用此设计方式。

user: user-2
content: 如果只是针对return返回值，那么返回什么数据，什么类型跟函数定义的返回类型有关。 对于是返回0标识成功，还是返回1，这个没有严格的标准，再说C/C++语言也不会限制这么死。

user: user-3
content: 引用return 0返回的值是确定的一对整数  return 关键字的作用是从函数中返回一个值，这个值紧跟在 return 后面。 return 0； 如果放在一般函数里，就是指返回0。  需要特别注意的是 return 0；在main函数中的情况。 main函数 必须 返回0 (EXIT_SUCCESS宏) 来表明程序运行正常，返回 EXIT_FAILURE宏来表明程序运行异常。 与EXIT_SUCCESS宏 一定是0不同，C标准并没有明确EXIT_FAILURE宏应该定义成多少，而是交给编译器厂商自行实现。 通常 是 1，注意只是通常为1 ，不是一定为1 。  大多数情况下，比如平时编译学习时，我们并不用关心这个EXIT_FAILURE到底是1还是多少。 main函数的返回值是给调用它的进程(shell)使用，如果你想感性的知道这个值的大小，方法如下：  //你可以设计错误和正确的情况来对比体会 @echo off YOUR.EXE  //调用你的程序 SET /a retVar=%errorlevel%  ECHO %retVar%   还有一个可能，你需要在main函数中自己区分返回错误的类型，这种情况下，你自己定义返回值和类型的对应关系即可。 但记住仍然不要破坏 0 代表成功执行main函数。
user-0 提问: 请教char类型数组循环赋值？

回复:
user: user-1
content: #include <stdio.h>  int main() { 	char buffer[512] = { 0 };     //控制台的输入缓冲区 	char *dest[512] = { 0 };		//分割出来的字符串存放的位置  	char seps[] = " ,\t\n";			//分割符数组 	char *token = NULL;					//看msdn 	 	int i = 0;  	scanf("%[^\n]", buffer);        //看msdn  谁说输入看到空格就切断了??  	//printf("输入的字符串为:%s\n", buffer);   //你可以测试一下看看,是不是空格后面的不接受了  	//以下是从mdsn  strtok 函数的实例拷贝过来的, 	//只是加了一个分割出来的字符串存入desk指针数组中, 	//稍加改进还可以循环scanf  	token = (char*)strtok(buffer, seps);  	while (NULL != token) 	{ 		dest[i] = token; 		printf(" %s\n", dest[i]); 		i++; 		token = strtok(NULL, seps); 	} 	system("pause");  	return 0; }     花了一点时间调试了一下 ,应该可以满足你的要求.

user: user-2
content: 引用 2 楼 jianwen0529 的回复:试试如下代码（手打，未经过测试）：  char ch; int index = 0; while(scanf("%c, ch))     if(ch != ' ' && ch != '\n' && ch != '\0')          str[index++] = ch;  修正 while(scanf("%c, &ch))

user: user-2
content: 试试如下代码（手打，未经过测试）：  char ch; int index = 0; while(scanf("%c, ch))     if(ch != ' ' && ch != '\n' && ch != '\0')          str[index++] = ch;

user: user-1
content: 如果你是控制台输入的话,可以试一下scanf函数

user: user-3
content: 引用 3 楼 jianwen0529 的回复:[quote=引用 2 楼 jianwen0529 的回复:] 试试如下代码（手打，未经过测试）：  char ch; int index = 0; while(scanf("%c, ch))     if(ch != ' ' && ch != '\n' && ch != '\0')          str[index++] = ch;  修正 while(scanf("%c, &ch))[/quote] 还需再修正一下才能去掉语法错误。  楼主，以下是个人的方法：  #include <stdio.h> #include <ctype.h>  int main(void) {     int ch, i = 0;     char str[32];      while ((ch = getchar()) != '\n')         if (isalpha(ch))             str[i++] = ch;      str[i] = 0;      puts(str);      return 0; }

user: user-4
content: 引用对一个字符数组进行循环赋值  int main() { 	char str[6] = { 0 }; //定义字符数组大小为6 	char ch; 	int i = 0; 	while (true) 	{ 		ch = getchar(); 		if (ch!=' ') 		{ 			str[i] = ch; 			i = i + 1; 		} 		if (i>5 || ch=='\n') //保证只接收6个字符 		{ 			break; 		} 	} 	for (int j = 0; j < 6;j++) //测试结果 	{ 		printf("%c\n",str[j]); 	} 	return 0; }
user-0 提问: C语言调用系统WMI 的API在dll中怎么找不到

回复:
user: user-1
content: 照我说的做了以后自有体会，

user: user-2
content: 引用程序调用WMI  要调用WMI中的函数，从大的方面来说分为两步： 1. 获得iwbemservices服务接口 2. 调用接口提供的ExecQuery 和常规调用动态链接库中的函数相比，写法差别比较大，可以参考 https://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx  文档提供了完整例子，虽然是英文，但有详细的步骤，希望对您有帮助。  补充：在很多问题中看到赵四老师这样回答问题，这种泛泛的回答省时省力，还能经常混到分。            但对问题的实质性解决能有多少推动呢？

user: user-1
content: 学会使用 OleView.exe 和 WinAPIOverride http://jacquelin.potier.free.fr/winapioverride32/

user: user-0
content: 引用 1 楼 wyyy2088511 的回复:看看<Windows核心编程>中LoadLibrary。 你会拿那个地址吗？

user: user-0
content: 引用 2 楼 DelphiGuy 的回复:因为导出的是COM接口对象，不是函数API。  那我想拿这个地址还有可能吗？具体该怎么拿呢？多谢啦

user: user-3
content: 因为导出的是COM接口对象，不是函数API。

user: user-4
content: 看看<Windows核心编程>中LoadLibrary。
user-0 提问: 关于监视窗口的问题

回复:
user: user-0
content: 引用 2 楼 cfjtaishan 的回复:描述一下a这个奇怪的值是什么？随机值？ 定义一个局部变量时，若定义时不赋值，则会a变量的内存空间里是一个随机值；你好，谢谢您，通过调试我发现 所监视的只是 当前帧所在模块的某个 名字，而不是我所要监视的变量

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:描述一下a这个奇怪的值是什么？随机值？ 定义一个局部变量时，若定义时不赋值，则会a变量的内存空间里是一个随机值； 引用 1 楼 fight_in_dl 的回复:引用在监视什么？   用{}包含的代码称为代码块，在代码块中定义的变量是块的局部变量，其生存周期从定义开始一直到退出块。 这里注意，当进入里层代码块后，a会变成5，隐藏了外部块同名的a变量。  说了这么多，还是实际上机测试一下体会更深，修改代码如下：  int main() { 	{ 		int a; 		a = 6; //刚开始把断点设到这行，然后分步调试，在监视窗口中就能观察到a的变化 		printf("first a is %d\n", a); 		{ 			int a; 			a = 5; 			printf("second a is %d\n", a); 		} 	} 	return 0; } 同时可以在控制台窗口看一下程序运行结果。  你好，很感谢，很久才看到回复，我自己测试知道监视窗口只是监视当前帧所在语句块的 所要监视的“变量名字"的值，而不是我想要监视的变量。当时不明白这个原理，

user: user-1
content: 不要依赖调试器输出复杂数据结构！而要将复杂数据结构的整个内容在处理它的每一步使用一小段代码按自己很容易理解的格式输出，非常有助于调试！或者可以说是“基础设施”

user: user-2
content: 看不懂，这难道不会重定义

user: user-3
content: 描述一下a这个奇怪的值是什么？随机值？ 定义一个局部变量时，若定义时不赋值，则会a变量的内存空间里是一个随机值；

user: user-4
content: 引用在监视什么？   用{}包含的代码称为代码块，在代码块中定义的变量是块的局部变量，其生存周期从定义开始一直到退出块。 这里注意，当进入里层代码块后，a会变成5，隐藏了外部块同名的a变量。  说了这么多，还是实际上机测试一下体会更深，修改代码如下：  int main() { 	{ 		int a; 		a = 6; //刚开始把断点设到这行，然后分步调试，在监视窗口中就能观察到a的变化 		printf("first a is %d\n", a); 		{ 			int a; 			a = 5; 			printf("second a is %d\n", a); 		} 	} 	return 0; } 同时可以在控制台窗口看一下程序运行结果。
user-0 提问: 一直在纠结if((mikfifo(FIFO_SERVER,O_CREAT|O_EXCL|O+RDWR)<0&&(errno!=EEXIST))的作用，求大神解惑

回复:
user: user-1
content: &&是 逻辑与 运算符。 只有当&&左右两侧的逻辑表达式结果都为真时，整个逻辑表达式的结果才为真。  题目中：  //mikfifo应该是一个函数，当函数的返回值小于0，下面这个表达式的结果为真 mikfifo(FIFO_SERVER,O_CREAT|O_EXCL|O+RDWR)<0  如果同时再满足 errno!=EEXIST，那么if判断条件就为真，可以执行这个if分支中的语句。
user-0 提问: 删除字符数组中的重复字符

回复:
user: user-1
content: #include<stdio.h> #include<string.h>  int main() {     int i, j, k, len;     char str[50];     int ch;      printf("Please input string:");     scanf("%[^\n]",str);     char *p = str;     len = strlen(str);      for (i = 0; i < len; i++) {         ch = p[i];         for (j = i+1; j < len; j++)             if (ch == p[j]) {                 for (k = j; k < len; k++)                     p[k] = p[k+1];             }     }      puts(p);     printf("%s\n",str);     #if 0       for(i = 0;i < k;i++)     {         for(j = i + 1;j < k;j++)         {             if(*(p+i) == *(p+j))             {                 *(p+j) = *(p + j + 1);                 k--;                 j--;                 i--;             }         }     }     str[k] = '\0';     printf("%s\n",str); #endif     return 0; } i, j , k一般用于循环变量；一般被定义为int类型

user: user-2
content: 可以把不重复的字符另外放到一个数组中。

user: user-3
content: 如果只是ascii字符，可以试一下下面的代码。  #include<stdio.h> #include<string.h> int main() { char str[50]="f4gg2gjkll2k*))kg  7i7nhjt"; char strOut[50]; int flg[8],i,r,c,k; memset(flg,0,32); k=0; for(i=0;str[i]!='\0';++i) {    r=str[i]/32;    c=str[i]%32;    if((flg[r] & (1<<c))==0)    {        flg[r] |= (1<<c);        strOut[k]=str[i];       ++k;    } }  strOut[k]='\0'; printf("%s\n%s\n",str,strOut);   return 0; }

user: user-4
content: 挑剔的说这个题目出的有问题 比如 abdefa 去除重复后 到底是 abdef 还是 bdefa

user: user-5
content: 引用求解答  代码基本上不用变动，就是里层循环的写法有变化，如下： 不算复杂，就不加注释了，希望有帮助。  int main() { 	char str[50]; 	int i, j, k, n; 	printf("Please input string:"); 	scanf("%[^\n]", str); 	char *p = str; 	k = strlen(str); 	for (i = 0; i < k; i++) 	{ 		for (j = i + 1; j < k; ) 		{ 			if (*(p + j) == *(p + i)) 			{ 				for (n = j; n < k; n++) 				{ 					str[n] = str[n + 1]; 				} 				k--; 			} 			else { 				j++; 			} 		} 	} 	str[k] = '\0'; 	printf("%s\n", str); 	return 0; }
user-0 提问: 关于C/C++缓冲区的问题

回复:
user: user-0
content: 引用 1 楼 jianwen0529 的回复:char str[32] = "hello world!";  呃呃，我原本的程序是for循环printf  引用 3 楼 wyyy2088511 的回复:调用完setvbuf，不调用fflush  非常感谢！

user: user-1
content: 调用完setvbuf，不调用fflush

user: user-1
content: setvbuf

user: user-2
content: char str[32] = "hello world!";
user-0 提问: 求大神指点迷津，敢问小弟的程序错哪儿了

回复:
user: user-1
content: 当然可以，数组只不过是相同类型的分配空间，而指针可以是任意空间，可以把数组比作是一个特殊的指针。

user: user-0
content: 谢谢，各位大神的指点，这个题，用数组做我已经做出来了，但是我想知道一下，用指针应该怎样做，所以才提出了以上疑问，请问，我的程序用指针的方法能完成吗？

user: user-2
content: #include<stdio.h> #include<string.h>  #define M 150  void Sortstring(char *p[], int n);  int main() {     int n, i;     char pl[M][M] = {};     char *pstr[M] = { NULL };     printf("How many countries?");     scanf("%d", &n);     getchar();     printf("Input there numbers:\n");     for (i = 0; i < n; i++)     {         gets(pl[i]);         pstr[i] = pl[i];     }      Sortstring(pstr, n);     printf("Sorted results:\n");     for (i = 0; i < n; i++)     {         puts(pl[i]);     }     return 0; } void Sortstring(char *p[], int n) {     int i, j;     char temp[M];     for (i = 0; i < n - 1; i++)     {         for (j = 0; j < n - i - 1; j++)         {             if (strcmp(p[j], p[j+1]) < 0)             {                 strcpy(temp, p[j]);                 strcpy(p[j], p[j+1]);                 strcpy(p[j+1], temp);             }         }     } } 排序是有问题的，并且参数类型也不匹配。 以上是修改后的代码～

user: user-3
content: #include<stdio.h> #include<string.h> #define M 150 void Sortstring(char p[M][M],int n); int main() {     int n, i;     char pl[M][M];     printf("How many countries?");     scanf("%d", &n);     getchar();     printf("Input there numbers:\n");     for (i = 0; i < n; i++)     {         gets(pl[i]);     }     Sortstring(pl,n);     printf("Sorted results:\n");     for (i = 0; i < n; i++)     {         puts(pl[i]);     }     return 0; } void Sortstring(char p[M][M],int n) {     int i, j;     char temp[M];     for (i = 0; i < n - 1; i++)     {         for (j = i; j < n; j++)         {             if (strcmp(p[j], p[i]) < 0)             {                 strncpy(temp,p[i],M);                 strncpy(p[i],p[j],M);                 strncpy(p[j],temp,M);             }         }     } }

user: user-4
content: 数组作为函数参数会自动转换为指针，我试了传参时候直接强制转换，程序会崩溃。

user: user-0
content: 是指针的问题吗？大神们
user-0 提问: 为什么这个算法计算范围这么小？

回复:
user: user-0
content: 哦哦，可以了，，，那当时应该不是程序的问题。

user: user-0
content: 不对呀，为什么我的编译器1.5根本给不出答案。

user: user-1
content: 引用输入1.5的时候就出错了   测试是正确的，注意1.5的单位是弧度，不是度。

user: user-0
content: 输入1.5的时候就出错了

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-3
content: 楼主想表达什么意思，这应该是计算sin的程序吧？输入的是角度，以rad为单位的角度。输入3.14，sinpi接近0，输入1.57,结果接近1，并没有错误啊？
user-0 提问: C语言控制台鼠标事件

回复:
user: user-1
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309  将快捷方式属性中的快速编辑模式关掉再试试。

user: user-1
content: 学会使用depends.exe查看exe依赖的dll  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: C语言删除一个长字符串中出现的短字符串问题

回复:
user: user-1
content: 什么问题? 我的编译器一切正常vs 2008

user: user-2
content: http://blog.csdn.net/zhagoodwell/article/details/53512140

user: user-3
content: 看我的博客：实现你需要的功能：http://blog.csdn.net/sinat_26448309/article/details/76084620

user: user-4
content: 仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //

user: user-5
content: 上面我的代码有问题

user: user-5
content: 上面代码有问题。

user: user-6
content: #include <stdio.h> #include <string.h> #include <math.h>  int del_substr(char *str, const char *substr) {      int len = strlen(str), len_sub = strlen(substr);     int i, j, k, ok;      ok = 0;     if(len >= len_sub) {         for(i = 0; i < len && ok != 1;) {             j = 0;             if(str[i] == substr[0]) {                 for(; j < len_sub; ++j)                     if(str[i+j] != substr[j])                         break;             }             if (j >= len_sub)                 ok = 1;             if(ok) {                 j = i;                 for(k = i + len_sub; k < len; ++k)                     str[j++] = str[k];                 str[j] = 0;                 printf("%s\n", str);                 ok = 0;             } else {                 i++;             }         }     }      return ok; }  int main(void) {      char str[100] = "asdfsdgsdhsdg";     char substr[100] = "sdg";     //char str[100] = "worldhelloworldhelloworld";     //char substr[100] = "world";     printf("%d\n", del_substr(str, substr));     return 0;  } 以上是我修改后的代码； 逻辑有点问题，从你的逻辑上看只删除了第一次遇到字串而没有将后面所有字串删除。

user: user-5
content: #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> char *del_substr(char *str, const char *substr) { 	int len = strlen(str), len_sub = strlen(substr), i, j,k,m;     if(len >= len_sub) 	{  		for(i=0,j=0;i<len;) 		{ 			if(str[i]==substr[0]) 			{ 				for(k=i,m=0;str[k]==substr[m];k++,m++); 				if(!substr[m]) i+=len_sub; 			} 			str[j++]=str[i++]; 		} 	} 	if(i==len) 		str[j]='\0';     return str;  }     int main()  {     char str[100] = "asdfsdgsdhsdg";     char substr[100] = "sdg";     printf("%s\n", del_substr(str, substr)); 	system("pause");     return 0;  }  //你的代码功能是去除一次
user-0 提问: 请问怎样实现这个功能？

回复:
user: user-1
content: 1. 定义一个链表(list)表示一篇文章，链表中的元素表示一个文字或字符。 2. “按一下退格键”后，删除对应的文字元素。 3. 遍历链表中的所有元素，得到最新的文章。

user: user-2
content: 这只是显示效果而已，需要与界面库相关，这样才能更好的思想数据与界面的联系

user: user-3
content: 仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //

user: user-4
content: 引用 2 楼 ccssddnn218 的回复:1. 定义一个链表(list)表示一篇文章，链表中的元素表示一个文字或字符。 2. “按一下退格键”后，删除对应的文字元素。 3. 遍历链表中的所有元素，得到最新的文章。  创建一个双向链表，在1.2中间加一步    如果按下方向键链表的指针移动一格 按下退格键将链表的内存单元删除，我觉得应该是  这样的

user: user-4
content: 楼主不是说要删除中间的字符吗，我觉得可以在加上一段……、、 如果按下左右方向键，链表指针移动一个
user-0 提问: 求助！！！如何用c语言将点阵化为方格阵

回复:
user: user-1
content: 你的意思是不是由点来确定区域？？

user: user-0
content: 引用 6 楼 hdt 的回复:最大的x,y坐标为4，最小的为0 所以应该是一个5X5矩阵吧？ 还是我没明白你的意思 请把题目讲清楚 不是的，x,y是从0到4一共五个坐标点，但是每个方格的上下、左右各需要两个点来确定，所以是个4X4的。 问题就是我说的那样啊，给了一个邻边全都相互垂直的多边形的各顶点坐标，然后把它化成一个方格阵啊

user: user-2
content: 判断每个正方形中心点，是否在你的区域内 可以使用射线法

user: user-0
content: 引用 8 楼 qq_36409192 的回复:你的意思是不是由点来确定区域？？ 是

user: user-3

user: user-0
content: 有人吗？？求助 ，万分感谢！！

user: user-2
content: 最大的x,y坐标为4，最小的为0 所以应该是一个5X5矩阵吧？ 还是我没明白你的意思 请把题目讲清楚

user: user-0
content: 引用 4 楼 wyyy2088511 的回复:#include <stdio.h> #include <stdlib.h> #include <time.h>  int main () { 	int data[4][4] = 	{{0,0,1,0}, 	{0,0,1,1}, 	{1,1,1,1}, 	{1,1,1,1}}; 	for(int i=0; i<4; i++) 	{ 		for(int j=0; j<4; j++) 		{ 			if(data[i][j]) 			{ 				printf("口"); 			} 			else 			{ 				printf("  "); 			} 		} 		printf("\n"); 	} 	system("pause"); 	return(0); }   不是吧  你好像没明白我的意思

user: user-4
content: #include <stdio.h> #include <stdlib.h> #include <time.h>  int main () { 	int data[4][4] = 	{{0,0,1,0}, 	{0,0,1,1}, 	{1,1,1,1}, 	{1,1,1,1}}; 	for(int i=0; i<4; i++) 	{ 		for(int j=0; j<4; j++) 		{ 			if(data[i][j]) 			{ 				printf("口"); 			} 			else 			{ 				printf("  "); 			} 		} 		printf("\n"); 	} 	system("pause"); 	return(0); }

user: user-0
content: 图片倒过来了。。。发一张正的
user-0 提问: c语言读写文件问题

回复:
user: user-1
content: 凡字符处理就要考虑字符集 写入和读取的字符集要一致， 比如写入用Unicode，读取也得Unicode， 否则就是乱码

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-3
content: fscanf/fprintf是格式化读写文件，所以跟你的写入的是格式化的，所以建议读取时使用fscanf 不一定使用C写的文件，必须用C来读；这个不是必须的。

user: user-0
content: 那我怎么读取的都是乱码，我是要读取到结构体的。我用fpintf写入才不会错。

user: user-4
content: 不是编译器，是编辑器，打错一个字~

user: user-4
content: 读和写是独立的两个过程。  对于读文件这个操作来说，它并不关心文件是怎么生成的，由C语言写入也好，fprint写入也好，在编译器中人工输入然后保存也好。 最终的结果都是硬盘上的一个文件，更具体说就是一些二进制序列。
user-0 提问: windbg如何调试会读取文件的程序？

回复:
user: user-0
content: ctrl + E 打开可执行文件时修改start directory即可

user: user-0
content: 可是test.txt是跟代码放在同一目录下

user: user-1
content: 根据代码的路径，你的test.txt应该放在和可执行文件在同一路径下~~
user-0 提问: C语言double 型数组转short

回复:
user: user-0
content: 已经解决了，举的这个例子有点问题，哈哈，不过还是谢谢你

user: user-1
content: #include "stdio.h" #include "stdlib.h"  int main() {     int i,j;     short *T;     double **X;     X = (double **)malloc( sizeof(double*) * 10000);      for(i=0;i<10000;i++)     {         X[i] = (double *)malloc(sizeof(double) * 2);    /*申请第二维的空间*/         for(j=0;j<2;j++)         {             X[i][j] = -0.003+0.2*(j+1);         }     }     T = (short *)malloc( sizeof(short) * 10000);      for(i=0;i<10000;i++)     {         T[i] = (short)(X[i][0]*3000);     }      for(i=0;i<10000;i++)     {         printf("%d", T[i]);         printf("\n");     }      for(i=0;i<10000;i++)    /*释放注意循环释放，因为是循环申请的*/         free(X[i]);     free(X);     X = NULL;     free(T);     T = NULL;      return 0; } 详见上面的代码
user-0 提问: 这段代码对于a数组的输出已经溢出，只能输出8个a但为何输出可以超出了8个。

回复:
user: user-1
content: 赋写了其他内存而已，很危险的事情。编译器不坚持数组越界，这需要程序员自己来保证

user: user-2
content: 越界了，但是后面的内存是可以使用的，但是不是每次都能这么幸运。所以，这样的代码是带着潜在bug的。
user-0 提问: 问个char*[]的问题？！

回复:
user: user-0
content: 现在的问题就是怎么传一个char*[]的参数，在函数里给它赋值，在函数外可以使用

user: user-1
content: 是传参不对吗 std::string s = XX[index]; //XX是在哪里定义的? 问题描述不太清楚，只能靠猜。 如果是想将string转化为char*，可以参考如下代码：  std::string str = "string"; char *cstr = new char[str.length() + 1]; strcpy(cstr, str.c_str()); //其它代码 delete [] cstr; //记得释放动态申请的内存

user: user-2
content: list[index] = (char*)s.c_str(); s是局部变量，语句块结束会释放内存。而且你的list[index]并没有分配内存  list是数组指针，请使用类似用法： char* list[30]; for(int i = 0; i < 30; i++)     list[i] = new char[32]; strcpy(list[0], "a"); strcpy(list[1], "b"); strcpy(list[2], "cd");

user: user-3
content: 你这代码贴的相当乱啊。  for( int index;index<size;index++ )   // index未初始化，而且仅在for循环中有效，你确定for后边那个 list[index] = `\0`;可以编译通过？

user: user-4
content: XX是局部变量吗？建议你将完整代码贴出来
user-0 提问: 初学者 求大神帮忙看下哪里有问题  编译是没错 运行时候提示有错误

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

user: user-2
content: 注意其他问题，详见下面的代码，对比一下吧，指针的基础还待加强！ #include<stdio.h>      void jiao(int *);     void shuchu(int *);  int main() {     int a[10],i,*p;     for (i=0;i<10;i++)         scanf("%d", &a[i]);     p=a;     shuchu(p);     jiao(p);     shuchu(p);     return(0); }  void jiao(int *o) {     int *z,*m,s,d;     z = o, m = o;     int i = 0;     printf("%p ", o);     printf("%p ", o+9);     printf("%p ", ++o);     for(;o <= z + 9; o++)     {         printf("i = %d\n", i);         if(*z > *o)         {             s=*z;             *z=*o;             *o=s;         }         if(*m < *o)         {             d=*m;             *m=*o;             *o=d;         }         i++;     } } void shuchu(int *n) {     int t;     for(t=0;t<10;t++)     {         printf("%d ",*n);         n = n+1;     }     putchar(10); }

user: user-2
content: #include<stdio.h>      void jiao(int *);     void shuchu(int *);  int main() {     int a[10],i,*p;     for (i=0;i<10;i++)         scanf("%d", &a[i]);     p=a;     shuchu(p);     jiao(p);     shuchu(p);     return(0); }  void jiao(int *o) {     int *z,*m,s,d;     z = o, m = o;     int i = 0;     printf("%p ", o);     printf("%p ", o+9);     printf("%p ", ++o);     for(;o <= z + 9; o++)     {         printf("i = %d\n", i);         if(*z > *o)         {             s=*z;             *z=*o;             *o=s;         }         if(*m < *o)         {             d=*m;             *m=*o;             *o=d;         }         i++;     } } void shuchu(int *n) {     int t;     for(t=0;t<10;t++)     {         printf("%d ",*n);         n = n+1;     }     putchar(10); } jiao函数里，o是变化的，那么o <= o + 9;是也是跟着变化的。这样就是一个死循环，直到栈越界。

user: user-3
content: scanf("%d",&b); a[i]=b; 绕路  scanf("%d",&a[i]);  调试程序有三个阶段，编译，链接。运行。你的错误信息是链接错误，发生在程序链接时，此时程序还没有被指行。

user: user-4
content: jiao(*p);，定义的是void jiao(int *o)，把a【0】的值赋值给jiao的指针，所以错误直接jiao（p）。

user: user-3
content: void jiao(int);--------void jiao(int *o) void shuchu(int);----------void shuchu(int *n) 参数应一致，不然，编译器认为是两个函数，这样，一个函数未定义，一个函数未声明。 另外，你应该把代码实现什么目的写出来，如此，你提问的水平就达到了正常的水平了

user: user-0
content: #include<stdio.h> main() { 	void jiao(int); 	int shuchu(int); 	int a[10],i,*p,b; 		for (i=0;i<10;i++) 		{ 			scanf("%d",&b); 			a[i]=b; 		}  		p=a; 		jiao(*p); 		shuchu(*p); 		return(0); } void jiao(int *o) { 	int *z,*m,s,d; 	z=o,m=o; 	for(;o<=&o[9];o++) 	{ 		if(*z>*o) 		{ 			s=*z; 			*z=*o; 			*o=s; 		} 		if(*m<*o) 		{ 			d=*m; 			*m=*o; 			*o=d; 		} 	} } int shuchu(int *n) { 	int t; 	for(t=0;t<10;t++) 	{ 		printf("%d",*n); 		n+=1; 	} 	return(0); } 改成这样的了 还是编译是没错运行时出错

user: user-0
content: Linking... 1.obj : error LNK2001: unresolved external symbol "void __cdecl shuchu(int)" (?shuchu@@YAXH@Z) 1.obj : error LNK2001: unresolved external symbol "void __cdecl jiao(int)" (?jiao@@YAXH@Z) Debug/3.exe : fatal error LNK1120: 2 unresolved externals 执行 link.exe 时出错.

user: user-5
content: 你得把报错贴出来，才方便大家帮你看

user: user-3
content: scanf("%d",a[i]);/////  x
user-0 提问: 为什么scanf输入的小数打印后却是0？

回复:
user: user-1
content: double arr[ ]={0};改成float arr[ ]={0};就好了

user: user-2

user: user-3
content: 定义数组要明确元素个数， double arr[10 ]={0}; double arr[10 ]; 明确确定。 double arr[ ]={0,2.3,5.4,560.32}; 隐含确定，编译器为你数个数。

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

user: user-4
content: 请检查scanf函数的返回值。

user: user-0
content: 引用 6 楼 jianyuezhimei 的回复:double arr[ ]={0};   ????????????????????????  嗯，这个改了就没有报警了！，可是不是可以这样初始化数组的吗?

user: user-0
content: 那么我把全部改为%lf可以吗？

user: user-3
content: double arr[ ]={0};   ????????????????????????

user: user-5
content: %f和%lf在内存里表示的大小不一样，一个是4字节，一个8字节。自然对于同一个数据比如1.23，在内存里浮点数也是不一样的。

user: user-0
content: #define _CRT_SECURE_NO_DEPRECATE  #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1  #include <stdio.h>  int main( ) {          double arr[ ]={0};  	int n;  	scanf("%lf",&arr[0]);  	scanf("%lf",&arr[1]);  	scanf("%lf",&arr[2]);  	printf("Input mumber 1 is %f\n",arr[0]);   	 	printf("Input mumber 2 is %f\n",arr[1]);   	 	printf("Input mumber 3 is %f\n",arr[2]);    	printf("Now we have the numbers : %f,%f,%f\n",arr[0],arr[1],arr[2]);        return 0; }

user: user-0
content: 为什么运行后出现这个?

user: user-0
content: 嗯，是这样的，之前怎么没发现！

user: user-6
content: 引用为什么scanf输入的小数，打印后却是0？   double类型的输入输出应该用　%lf  scanf("%lf",&arr[n]);  //是字母l，可别打成数字1 printf("%lf\n",arr[n]);  //同上