Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 初学C语言，向各位大大求教

回复:
user: user-1
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-2
content: #include<stdio.h> #include<string.h> int main () { 	char a[]="123456";     char *s; 	s=a;     printf("%c\n",*(s+3));     *(s+3)='a'; 	printf("%c\n",*(s+3));     for(;*s!='\0';s++)         printf("*");     return 0; } 不知道楼主说的什么意思

user: user-3
content: 因为你的指针所指的内容是在常量区的字符串，不能修改 如果需要修改，你需要在使用字符数组在栈上分配或者自己动态分配内存来存 比如：char s[]="123456"; 这样就是在栈上分配的，可以修改

user: user-0
content: 楼上用的是数组 我用的是指针两者不太一样 数组名是右值而 指针是左值

user: user-4
content: #include <stdio.h> #include<string.h> int main () { 	int i=0; 	char s[]="123456"; 	printf("%c\n",*(s+3)); 	s[3] = 'a'; 	printf("%s\n",s); 	for(;*(s+i)!='\0';i++) 		printf("*"); 	printf("\n"); 	return 0; }  运行结果：   我在VS2010上试是查看和更改都可以的呀，楼主说的每次更改都会爆是什么意思？？？

user: user-5
content: #include<stdio.h> #include<string.h>  int main ()  {      int i=0;      char s[]="123456";      printf("%c\n",*(s+3));      s[3] = 'a';      for(;*(s+i)!='\0';i++)          printf("*");      return 0;  } 我改成这样就正常了，至于你那样怎么错的，我也不懂，我也是初学指针

user: user-6
content: 那个报错不是数组越界吗

user: user-4
content: 引用 4 楼 morangeouslian 的回复:楼上用的是数组 我用的是指针两者不太一样 数组名是右值而 指针是左值  哦，sorry，我弄错了。我粗心，看程序看成二楼的了。 五楼说得挺好，学习了~~~

user: user-7
content: 这就是字符数组和字符串的区别。你用的那个是字符串，字符串实质上是一个指针指向了一个字符串，并且他们不是分配在同一个段里面，那个字符串被分配在了数据段，不能被修改；而指针被分配在了栈上。当你用字符数组去使用的时候，因为每一个字符都被单独分配了空间，所以用指针去解引用就不会报错。
user-0 提问: 新手求助，一个小的习题。希望大神解答。

回复:
user: user-1
content: 如果是显示的问题 那就是 printf 打印几个字 如果是输入 米和分米 然后计算多少平方米 这个也好做 只要输入符合标准 然后字符串处理 字符串转成数字 然后计算~~~

user: user-2
content: 你自己都描述不清自己的需求，输入分米长宽，输入米长宽，输出分长*分宽平方分米，米*宽平方米，另外1平米=100平分米。你这个程序真的很简单，如果你是打算学习C语言，那么从头开始慢慢学吧

user: user-3
content: 最好能说明输入及期望输出

user: user-2
content: 你要打印的格式是什么，是xx平方，还是xx㎡  printf("分米面积是：%.2lfd㎡  米的面积是：%.2lf㎡", mianji * 10, mianji); printf("分米面积是：%.2lf平方分米  米的面积是：%.2lf平方米", mianji * 10, mianji); 想要什么格式自己添加

user: user-0
content: 用分米也米分别带入计算过程，希望实现  提示  请输入分米长多少  米长多少    宽也一样，然后结果显示成 xx㎡
user-0 提问: 使用Turbo_C的watch功能遇到问题

回复:
user: user-1
content: 你得调试进入程序那些符号才会有效，按F7开始。

user: user-2
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-3
content: 引用 2 楼 u010165006 的回复:可能在Dosbox下不支持。 忘了，watch功能应该在运行调式过程中的吧

user: user-3
content: 可能在Dosbox下不支持。

user: user-4
content: 。。。都2016年了再不济也用个VC6吧。。
user-0 提问: 思路与代码不符，望指点

回复:
user: user-1
content: 引用 1 楼 yaojuntong77 的回复:楼主，你的疑问是什么？  #include <stdio.h>  int main(void) { 	int  m, n, i, j; 	int  a[100][700], b[100][700], c[100][700]; 	char x;  	scanf("%d%d%c", &m, &n, &x); 	for (i=0; i<m; i++) 		for (j=0; j<n; j++) 			scanf("%d", &a[i][j]); 	 	for (i=0; i<m; i++) 		for (j=0; j<n; j++) 			scanf("%d", &b[i][j]);  	if (x == '+') 	{ 		for (i=0; i<m; i++) 			for (j=0; j<n; j++) 				c[i][j] = a[i][j] + b[i][j]; 	}  	if (x == '-') 	{ 		for (i=0; i<m; i++) 			for (j=0; j<n; j++) 				c[i][j] = a[i][j] - b[i][j]; 	}  	for (i=0; i<m; i++) 		for (j=0; j<n-1; j++) 			printf("%d ", c[i][j]);  	printf("%d\n", c[i][n-1]);  	return 0; }  1、数组在定义的时候都已经固定了m和n的值，可是在程序中又出现由用户指定m和n的值，这是第一个与题意不符处； 2、LINE32-34，这一部分代码，逻辑不明晰，边界不知道要表达的是什么，有歧义； 3、输出一行以后，没有换行，导致多行连续在一行输出，一行输出满后自动换行，排版不规则；

user: user-2
content: #include <stdio.h>  int main(void) {         int m,n,i,j;         static int a[100][700],b[100][700],c[100][700];         char x;         scanf("%d%d %c",&m,&n,&x);         for(i=0;i<m;i++)                 for(j=0;j<n;j++)                         scanf("%d",&a[i][j]);          for(i=0;i<m;i++)                 for(j=0;j<n;j++)                         scanf("%d",&b[i][j]);          if(x=='+') {                 for(i=0;i<m;i++)                         for(j=0;j<n;j++)                                 c[i][j]=a[i][j]+b[i][j];         } else if(x=='-') {                 for(i=0;i<m;i++)                         for(j=0;j<n;j++)                                 c[i][j]=a[i][j]-b[i][j];         }          for(i=0; i<m; i++)                 for(j=0; j<n; j++)                         printf("%d%c", c[i][j], j+1==n ? '\n' : ' ');          return 0; }

user: user-1
content: 楼主，你的疑问是什么？
user-0 提问: vc测试对了 但提交OJ却错了，请指教

回复:
user: user-1
content: 结果已经超出int的范围了，你可以用long long，或者int64_t

user: user-2
content: int n,i,j,m,k; 改为： unsigned int n,i,j,m,k;试试。
user-0 提问: C语言插入排序

回复:
user: user-1
content: 这个，写个，或者照书抄个插入排序 调试调试，理解理解，不难的

user: user-2
content: @@2优化后如下: 		for(j=c;j>0 && a[j-1]>x;a[j]=a[j-1],j--); 		pos = j;

user: user-2
content: @@1如下:          int a[15]; 	scanf("%d",&n); @@2如下: 		for(j=c,pos=0;j>0;j--) 		{ 			if(a[j-1]>x) 				a[j]=a[j-1]; 			else 			{ 				pos = j; 				break; 			} 		}  	@@3如下: for(i=0;i<n;i++) 		printf("%d ",a[i]);

user: user-3
content: 我自己试了好一会儿，@@2处还不会填空……
user-0 提问: 怎么用c语言读取txt中数据

回复:
user: user-1
content: 搞不懂楼主的问题点在哪里，你是不知道怎么去读取文本文件呢还是不知道怎么提取固定单词之后的数据呢？ 还有生成一个Word，是指Word文档吗？

user: user-2
content: 先读取一行，然后分析这一行的数据，如下：

user: user-3
content: FILE *fp fp=fopen("指定txt地址","r"); 而创建word，建议看一下fput或者fprintf函数

user: user-4
content: 我还没学到文件，不过利用输入输出重定向也可以操作文档。
user-0 提问: c语言调用函数和指针出问题了，求指点

回复:
user: user-1
content: 引用 2 楼 user-3的回复:你的程序的问题很多 就问星号之间的那两段代码的问题，其余的问题我自己觉得还可以搞定，就我问的那个问题我搞不懂，别的地方也无心修改了

user: user-0
content: 引用 4 楼 paschen 的回复:你先把其他的改好了才好帮你调试，比如char *str = (char *)calloc(100,sizeof(char)); #include<stdio.h> #include<stdlib.h> #include<ctype.h> char* str_tok(char *str, char *alpha_cut) {     int i;     int judge = 0;     for(i=0; str[i]; ++i)     {         if(str[i] != ' ' && str[i] != ',')         {             alpha_cut[i] = str[i];             str[i] = ' ';             judge = 1;         }         else if(judge == 1)         {             str[i] = ' ';             alpha_cut[i]='\0';             return alpha_cut;         }     }     return NULL; } int main() {     int i=0;     char alpha_cut[10];//存储分割后的单词     char **store = (char**)calloc(5,sizeof(char*));//存储分割后的字符串     char *ptr = NULL;     int count = 0;     char *str = (char*)calloc(100,sizeof(char));//输入字符串     fgets(str, 99, stdin);     while(1)     {     ptr = str_tok(str,alpha_cut);//分割字符串的函数     store[i] = calloc(10,sizeof(char));     store[i] = ptr; /**strcpy(store[i], ptr)用这种形式会给出两个警告，不知道为什么，求解答;**/     i++;     if(i%5 == 0)         store = (char**)realloc(store, 5*sizeof(char*));     if(ptr == NULL)         break;     }     count=i;     for(i=0; i<count; ++i)         puts(store[i]);     return 0; } 我就是想让这个函数达到和strtok函数类似的功能，只要能把逗号和空格识别并分割开就好了。 但是在这里用“trcpy(store[i], ptr)”就会给警告。也想不到该怎么弄了。而且每次调试提示 address out of bounds，也不会改。

user: user-1
content: 引用 4 楼 paschen的回复:你先把其他的改好了才好帮你调试，比如char *str = (char *)calloc(100,sizeof(char)); 这个类型转换我书上说是默认的自动转换的，不需要添加上。

user: user-2
content: 你先把其他的改好了才好帮你调试，比如char *str = (char *)calloc(100,sizeof(char));

user: user-3
content: 你的程序的问题很多

user: user-0
content: 还有一个问题，在下边那两行星号之间，有一行代码是：strcpy(store[i], ptr);在这里编译器给了两个警告，如果写成：store[i]=ptr就不会有警告，这是为什么？求点。我书上有的地方的代码是“strcpy(store[i], ptr)”这种形式的，我也看着书敲到过电脑上，而且没警告，但是这次给警告了，不知道为什么，求指教！
user-0 提问: c语言 如何宏定义一个指数

回复:
user: user-1
content: printf("%f",N);  你应该用浮点数输出，否则会被截断，结果当然是0了    #include<stdio.h> #define N 1e5 void main() {   printf("%f",N); }

user: user-2
content: 你可以查[u]看宏展开后的代码，确定宏定义有没有问题。 右键源文件——属性——预处理器——预处理到文件，然后重新编译远吗，可在同目录的debug下找到一个与源文件同名后缀是.i的文件，打开跳到main可以查看宏展开后的代码。  不过你的代码输出结果就是0，你可以试一下printf("%d",1e5); 这涉及到double的存储方式。 楼上的long en; en = 1e5; 是把1e5转换成long型，根据规则会舍弃掉小数位，而printf("%d",1e5);是把内存中的1e5以int型读取,这并没有涉及到类型转换，而是“张冠李戴”，比喻不太恰当，你理解即可。 而如果你一定要以%d输出一个double，那么可以指定转换: printf("%d",(int)1e5);

user: user-3
content: 你再试试   #include<stdio.h> #define EN 1e5 void main() { 	long en; 	en=EN;  	printf("%d",en); }   你没定义变量哪. 你要在好好看看 #define, 它只是作了一个简单的替换.  VS指数类型即为double , 默认为8字节, 而%d 为4字节, 所以你用%d, 只返回 EN 的 临时变量 的低4字节, 所以这里为0了 正确指数形式如下. printf("%E", EN);
user-0 提问: 关于一个60M的文本全是乱码的问题

回复:
user: user-1
content: 估计是编码格式的问题吧 你用一些工具软件打开 可以看到文本格式是Unicode 还是其他的

user: user-2
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
user-0 提问: linux 下主线程如何通知通知子线程退出？

回复:
user: user-1
content: windows 都抄 pthread_cond_t  用 ConditionVariable 了， 谁还用 event 啊。   linux 也有 sleep啊。

user: user-2
content: 有以下几种方式可以通知子线程 1. posix_kill/pthread_sigqueue 发送signal 2. pthread_cond_*，此方式要求子线程去wait这个事件 3. pipe/socket/file event，子线程里需要用epoll去wait  timer现在一般用POSIX per-process timer，或者用timerfd_create创建可被epoll等待的timer fd. 如果timer的数量非常多，比如几千个几万个，一般需要自己维护timer heap了。 要简单模拟，sleep就可以，sleep玩法就多了，有用select实现的，有用alarm实现的，也可以用clock_nanosleep
user-0 提问: 四个点怎么判断垂直

回复:
user: user-1
content: 4 点 共6条线 一共最多需要判断5*4/2 =20次 有20对直线需要判断

user: user-1
content: 引用 2 楼 qq_33478802 的回复:简单枚举 先枚举其中两个点，求出k1值（k1=(y1-y2)/(x1-x2)）                                    同理求出k2 如果 k1*k2=-1 则   yes 这样是可以的不过，应该考虑除数为零的情况。

user: user-1
content: 如果是浮点数，那只能近似 如果是整型，或者定点数 可以精确求出是否垂直

user: user-2
content: 简单枚举 先枚举其中两个点，求出k1值（k1=(y1-y2)/(x1-x2)）                                    同理求出k2 如果 k1*k2=-1 则   yes

user: user-3
content: 同一平面上两个向量点积为0则互相垂直。
user-0 提问: 怎么我的switch直接跳过了

回复:
user: user-1
content: 可能是语法或逻辑不对，贴出来代码看下。

user: user-2
content: 把代码贴出来看看，不然怎么知道问题

user: user-3
content: 无码无真相

user: user-4
content: 楼主，源代码呢？

user: user-5
content: 贴代码，贴代码出来
user-0 提问: 诚恳希望站在开发第一线的程序员能给自学者出点题

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:比如写个服务，根据电话区号获得天气预报数据，要求： 1. 从配置文件读取服务的配置信息，如数据更新频率，以及允许访问的客户端的IP地址范围 2. 提供基于HTTP的Restful API，可以在浏览器里通过URL访问，比如http://localhost:2080/weather/021就是上海天气预报信息 3. 根据配置文件，定时自动从天气网站获取天气数据，可以是API获取，也可以爬虫自己分析，任选 4. 支持10000个客户端同时访问，每秒能响应10000个以上请求 5. 自己写或者配置个模拟器，对服务进行压力测试 6. 统计服务质量，通过http://localhost:2080/stat，返回响应时间分布，以10%的请求数为单位递进 7. 如果单机性能不够时，如何扩展你的服务到集群？  这是现实项目中最小的模块了，很典型的微服务 谢谢你

user: user-1
content: 好题目，看看

user: user-2
content: 比如写个服务，根据电话区号获得天气预报数据，要求： 1. 从配置文件读取服务的配置信息，如数据更新频率，以及允许访问的客户端的IP地址范围 2. 提供基于HTTP的Restful API，可以在浏览器里通过URL访问，比如http://localhost:2080/weather/021就是上海天气预报信息 3. 根据配置文件，定时自动从天气网站获取天气数据，可以是API获取，也可以爬虫自己分析，任选 4. 支持10000个客户端同时访问，每秒能响应10000个以上请求 5. 自己写或者配置个模拟器，对服务进行压力测试 6. 统计服务质量，通过http://localhost:2080/stat，返回响应时间分布，以10%的请求数为单位递进 7. 如果单机性能不够时，如何扩展你的服务到集群？  这是现实项目中最小的模块了，很典型的微服务
user-0 提问: 求助贴！！！思路是什么  一点头绪都没有

回复:
user: user-1
content: 你说的不就是思路么？ 维护两个链表，一个是多项式链表，另一个是avail链表，当你多项式要添加node的时候，先去查看avail链表里面有没有分配过得node，有的话就把avail链表里的node摘下挂到多项式的链表中,没有的话再用new从堆上找块内存。当进入下一个运行环节了，老多项式不要了，需要销毁多项式链表，不把它用delete还给操作系统，把它摘下来挂到avail链表中。

user: user-1
content: 没看清你要的是c，把我上面所说的new delete理解成malloc和free，一样的
user-0 提问: 求救求救！Dev-C++ 点击调试后不显示调试窗口

回复:
user: user-1
content: 在第一行“视图”调出“项目管理”，打勾，在最左边拉出来

user: user-2
content: 首先你得新建一个控制台项目，再把你的源文件加入进去，项目路径最好不要包含中文

user: user-3
content: 你得先选中调试哪一行啊，视频中第13行不是有个红点么？先选中你要调试的行，再调试
user-0 提问: 结构体内部是否支持二维指针,一位10年c的老、、

回复:
user: user-1
content: 二级指针要初始化（赋值）两次以上 一次对二级指针对象 一次对它指向的 内容(对象)， 如果是动态分配，要对分配的每个对象（一级指针） 初始化一次（可以是malloc 或者new 初始化）

user: user-0
content: 引用 1 楼 sdghchj 的回复:不是人家不支持，还是你没弄懂二级指针。 HOME_SE *home = (HOME_SE *)malloc(sizeof(HOME_SE));  home->ser= (int **)malloc(sizeof(int*)*2);//先申请二级指针指向的内存，假设指向2个指针  home->ser[0] = (int *)malloc(sizeof(int)*2);  home->ser[1] = (int *)malloc(sizeof(int)*2);见笑了，，，

user: user-0
content: 见笑了，见笑了。

user: user-2
content: 结构体内部支持指针的指针的

user: user-3
content: 不是人家不支持，还是你没弄懂二级指针。 HOME_SE *home = (HOME_SE *)malloc(sizeof(HOME_SE));  home->ser= (int **)malloc(sizeof(int*)*2);//先申请二级指针指向的内存，假设指向2个指针  home->ser[0] = (int *)malloc(sizeof(int)*2);  home->ser[1] = (int *)malloc(sizeof(int)*2);

user: user-4
content: 二维指针是指一个指针指向的地址存储的内容也是一个指针，你的代码明显不是这个逻辑了
user-0 提问: 问一句汇编代码的意思

回复:
user: user-0
content: 引用 7 楼 lm_whales 的回复:不是，有虚函数表的通常也会有，运行时信息里面，存放typeinfo中的信息 无虚函数表的，只是直接编译出类型的typeinfo 谢谢解答！

user: user-1
content: 不是，有虚函数表的通常也会有，运行时信息里面，存放typeinfo中的信息 无虚函数表的，只是直接编译出类型的typeinfo

user: user-1
content: typeinfo指针和虚函数表指针，很多编译器是放到一起的，第一项是typeinfo指针

user: user-2
content: 将abcd *的偏移地址放到ecx寄存器中

user: user-0
content: 引用 1 楼 user-2 的回复:将abcd *的偏移地址放到ecx寄存器中 谢谢回复，祝新年愉快！明天结贴。

user: user-2
content: 引用 3 楼 wenpinglaoyao 的回复:[quote=引用 1 楼 user-2的回复:]将abcd *的偏移地址放到ecx寄存器中 abcd是我在程序中自定义的一个类类型，而这个abcd * 的偏移地址是什么意思？这个偏移地址里记录的是类似于的字符串信息吗？[/quote]  可能指向记录了RTTI（运行时类型信息）信息的一项，比如可能是虚表中记录RTTI的一项

user: user-0
content: 引用 2 楼 lm_whales的回复:typeinfo指针和虚函数表指针，很多编译器是放到一起的，第一项是typeinfo指针 是不是程序编译时，所有程序员自定义的类类型，程序都会额外生成一些有关这些类类型的额外记录信息，比如这些类型的声明名称等

user: user-0
content: 引用 1 楼 user-2的回复:将abcd *的偏移地址放到ecx寄存器中 abcd是我在程序中自定义的一个类类型，而这个abcd * 的偏移地址是什么意思？这个偏移地址里记录的是类似于的字符串信息吗？
user-0 提问: 菜鸟求教，请指点

回复:
user: user-0
content: 谢谢哈 知道了

user: user-1
content: #include <stdio.h> #include <string.h> int main(void) { 	int n,i,j,k; 	char a[100001],b[100001],c[100001],d[100001]; 	scanf("%d",&n); 	for(k=1;k<=n;k++) 	{ 		printf("输入字符串a："); 		scanf("%s",a); 		printf("%s",a);  		printf("输入字符串b："); 		scanf("%s",b); 		printf("%s",b); 		for(i=0;a[i]!='\0',b[i]!='\0';i++) 		{ 			if(a[i]!=' ') 				c[i]=a[i]; 			if(b[i]!=' ') 				d[i]=b[i]; 		} 		c[i] = '\0'; 		d[i] = '\0';  		if(strcmp(c,d)==0) 			printf("equal\n"); 		else 			printf("not equal \n"); 	} 	return 0; }  把楼主的程序改了改~~~ 我还没搞明白为啥scanf可以，而getchar()不可以。
user-0 提问: 求帮我看一道非常简单的作业，看了好久我不知道出错在哪

回复:
user: user-1
content: #include <stdbool.h> #include <stdio.h> #include <stdlib.h>  #define STACK_SIZE 100  void make_empyt(void); bool is_empty(void); bool is_full(void); void push(char ch); int pop(void); void stack_overflow(void); void stack_underflow(void);  char contents[STACK_SIZE]; int top = 0;  int main(void){ 	char c; 	int count = 0; 	char sub; 	printf("Enter parenteses and/or braces: "); 	while((c = getchar()) != '\n'){ 		if (c == '(' || c == '{'){ 			push(c); 		}else{ 			sub = pop(); 			if(sub == '(' && c == ')'){ 				count++; 			}else if(sub == '{' && c == '}'){ 				count++; 			}else{ 				top++; 			} 		} 	} 	 	if (is_empty()){ 		printf("Parenteses/braces are nested properly"); 	}else{ 		printf("not"); 	} 	 	return 0; }  void make_empty(void){ 	top = 0; }  bool is_empty(void){ 	return top == 0; }  bool is_full(void){ 	return top == STACK_SIZE; }  void push(char ch){ 	if(is_full()) 		stack_overflow(); 	else 		contents[top++] = ch; }  int pop(void){ 	if (is_empty()) 		stack_underflow(); 	else 		return contents[--top]; }  void stack_overflow(void){ 	printf("Stack overflow"); 	exit(EXIT_SUCCESS); }  void stack_underflow(void){ 	printf("Stack underflow"); } 我也不太懂，抄书上的不知道make_empty怎么用
user-0 提问: C语言的自定义函数类型该怎么选择？

回复:
user: user-1
content: 函数的返回值类型取决于函数的反馈信息，也就是函数执行完之后要不要告诉别人它执行的结果，这个结果用什么方式表达合适。

user: user-2
content: 取决于数据类型的范围：Numeric limits

user: user-0
content: 引用 2 楼 paschen 的回复:你的len是int类型，如果你返回char 、 short这些类型，数据就被截断了 就是说，比如你可以去试一下，字符串长度为500，用char返回，你就发现结果不对了！ 我刚才按照你说的试了，确实是那样的，谢谢。

user: user-0
content: 恩，我刚才试了，确实是你说的那样。

user: user-3
content: 你的len是int类型，如果你返回char 、 short这些类型，数据就被截断了 就是说，比如你可以去试一下，字符串长度为500，用char返回，你就发现结果不对了！

user: user-4
content: 应该根据是否需要返回值。如果需要返回值，根据返回值类型来定义函数的类型。
user-0 提问: C语言

回复:
user: user-1
content: 告诉你一个办法，开一块缓冲区，若干行 能够容纳所有内容 先把所有数据输出到缓冲区 然后从缓冲区复制到屏幕上

user: user-2
content: 我调试了 可以达到你的效果

user: user-2
content: int i; 	printf("  0 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");  	int j =0; 	for(i=0;i<80;i++) 	{	 		if(i%16==0) 		{ 			printf("%2.2d ",j*10); 			j++; 		} 		printf(" %2.2d",ReadCmos(i));		 		if (i%16==15) 		{ 			printf("\n"); 		}			 	}

user: user-2
content: int _tmain(int argc, _TCHAR* argv[]) { // 	Test *t = new Test; // 	t->alloc(5); //  // 	delete t; // err  	int i; 	printf("  0 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");  	int j =0; 	for(i=0;i<80;i++) 	{	 		if(i%16==0) 		{ 			printf("%2.2d ",j*10); 			j++; 		} 		printf(" %2.2d",ReadCmos(i));		 		if (i%16==15) 		{ 			printf("\n"); 		}			 	}  // 	for(i=0;i<0x80;i++) // 	{ //  // 		printf(" %2.2x",ReadCmos(i)); // 		if((i+1)%16==0) // 			printf("\n"); //  // 	} //	getch(); 	system("pause"); 	return 0; }
user-0 提问: 正向驱动调用和反向驱动调用的区别

回复:
user: user-1
content: 逆向 windows 驱动？

user: user-2
content: 你是指Linux驱动还是电机驱动啊？请不要这么不服责任的问问题，浪费CSDN硬盘。
user-0 提问: 刚学了数据结构-动态数组 后写的，请各位大大指正

回复:
user: user-1
content: 参考include\vector的内容。

user: user-2
content: vector大小是动态可增长的。你不必考虑自己手动分配或释放内存，也不必担心内存泄漏 使用起来比较方便

user: user-3
content: 引用 2 楼 ruying1389279 的回复:引用 1 楼 qwer_boo 的回复:可以尝试实现vector的功能，自动扩展长度只要有数据输入，就自动扩展数组长度是吗？ 比如插入数据，当数组满了，则自动扩大数组长度，使插入可以继续。

user: user-0
content: 引用 1 楼 qwer_boo 的回复:可以尝试实现vector的功能，自动扩展长度只要有数据输入，就自动扩展数组长度是吗？

user: user-3
content: 可以尝试实现vector的功能，自动扩展长度

user: user-4
content: 代码太长~~~不想看·~~ 没法编译·~~ 如果用C++不用这么长的代码~~~ 感觉~~~
user-0 提问: 求问关于c语言的作业出现错误问题

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

user: user-2
content: 你要的是什么结果
user-0 提问: C语言和C++的关系就相当于javascript和Jquery的关系吗？

回复:
user: user-1
content: C++中兼容C的部分可以看作不是C++。

user: user-2
content: Jquery只是javascript的库啊  C 和C++是两种语言

user: user-3
content: jquery 就对javascript的一个扩展，封装，就是让javascript更好用，更简单。人家怎么说的来着，jquery就是要用更少的代码，漂亮的完成更多的功能。 c语句是面向结构的语言，c++是面向对象的语言，C++从根本上已经发生质飞跃，并对c进行丰富的扩展。

user: user-4
content: C 与 C++ 在基本语句上的差距也是挺多的。
user-0 提问: 小白求助!

回复:
user: user-1
content: 楼上正解。楼主要注意像++这样的操作符，前置与后置是有很大区别的！

user: user-2
content: while (a--) 中 条件不满足时，a-- 为0 最后a就成 -1 了
user-0 提问: C语言代码，许多不足，望各位指教，谢谢

回复:
user: user-1
content: 引用 4 楼 Lxl_12345 的回复:[quote=引用 3 楼 paschen 的回复:] 你要查找姓名，可以依次比较每个candidate中的name，如果有找到，则输出对应的那个candidate中的其他信息 请问要怎么查找呢？[/quote]  写个循环逐个比较，直到找到满足的

user: user-0
content: 引用 3 楼 paschen 的回复:你要查找姓名，可以依次比较每个candidate中的name，如果有找到，则输出对应的那个candidate中的其他信息 请问要怎么查找呢？

user: user-1
content: 你要查找姓名，可以依次比较每个candidate中的name，如果有找到，则输出对应的那个candidate中的其他信息

user: user-2
content: 有个字符串查找函数的

user: user-3
content: 用手机上的，等我用电脑时再仔细看看，尽量为您解惑，特此留爪～～～
user-0 提问: [Error] cannot convert 'score*' to 'a    5位学生4门课学生成绩管理系统具体要求： 

回复:
user: user-1
content: 除了楼上说的，你的cal  min_    max_这几个函数都没有返回值

user: user-2
content: 95行： float cal(struct student s[],struct  all []); 应改为 float cal(struct student s[],struct score all []);  216行： float cal (struct student students[],struct  all []){ 应改为 float cal (struct student students[],struct score all []){

user: user-0
content: 引用 4 楼 学编程的老司机的回复:为什么我编译之后没有呢，还有你这个系统好像有漏洞啊 你的意思是你那没有错能运行。还是没有这个错有其他的了

user: user-3
content: 为什么我编译之后没有呢，还有你这个系统好像有漏洞啊

user: user-0
content: 引用 1 楼 user-4的回复:编译器提示在那一句? 抱歉回复不来，请看一下下一个回复

user: user-0
content: //调用求各科最高分的函数max()    max_(students); min_(students); cal(students,all);//       这里 提示cannot convert 'score*' to 'all*' for argument '2' to 'float cal(student*, all*)' sort(students);

user: user-4
content: 编译器提示在那一句?
user-0 提问: malloc函数的疑问？

回复:
user: user-1
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-2
content: 引用 7 楼 u010087712 的回复:[quote=引用 5 楼 paschen 的回复:] [quote=引用 4 楼 wenpinglaoyao 的回复:] [quote=引用 1 楼 paschen的回复:]你已经越界写了，把不属于你申请的空间给覆盖掉了，没问题只是运气好，如果没猜错，你free(p)的时候你程序就崩了 大牛能解释下为什么free时会崩溃吗？[/quote]  因为DEBUG下编译器可能会在free时检查是否越界了，你分配的内存头尾一定区间都会被特定字符填充[/quote]  你确定？我的理解是，内存在分配的时候一般是以4k为单位（一个内存页）来将虚拟内存映射到物理内存，不可能申请一个字节，就只分配一个字节，所以，你越界存储是没问题的，但是如果你存的数据超过4k(4*1024)个字节，必定段错误！ free的时候崩溃是因为你越界存储以后，破坏掉了堆（本质就是个链表）的内部维护结构（这个结构保存有当前块多大，下一个块在哪儿，上一个块在哪儿等信息），free的时候无法识别要释放的块多大等信息就崩溃了。还记得new了一个数组以后怎么delete么，delete[] p ,不需要像申请一样指定长度啊，因为从第一个地址，就能找到最后一个[/quote] 不好意思说错了，不是从第一个地址，就能找到最后一个 -> 内部维护有块的大小

user: user-2
content: 引用 5 楼 paschen 的回复:[quote=引用 4 楼 wenpinglaoyao 的回复:] [quote=引用 1 楼 paschen的回复:]你已经越界写了，把不属于你申请的空间给覆盖掉了，没问题只是运气好，如果没猜错，你free(p)的时候你程序就崩了 大牛能解释下为什么free时会崩溃吗？[/quote]  因为DEBUG下编译器可能会在free时检查是否越界了，你分配的内存头尾一定区间都会被特定字符填充[/quote]  你确定？我的理解是，内存在分配的时候一般是以4k为单位（一个内存页）来将虚拟内存映射到物理内存，不可能申请一个字节，就只分配一个字节，所以，你越界存储是没问题的，但是如果你存的数据超过4k(4*1024)个字节，必定段错误！ free的时候崩溃是因为你越界存储以后，破坏掉了堆（本质就是个链表）的内部维护结构（这个结构保存有当前块多大，下一个块在哪儿，上一个块在哪儿等信息），free的时候无法识别要释放的块多大等信息就崩溃了。还记得new了一个数组以后怎么delete么，delete[] p ,不需要像申请一样指定长度啊，因为从第一个地址，就能找到最后一个

user: user-3
content: 其实，release 也可能会出问题 因为大部分内存管理程序，都会在 分配的内存前后，设置某种数据结构。 这部分被用到的，没有分配给你的内存， 很有可能会用于做内存管理的记录， 越界写的话，很可能会，导致整个内存管理系统崩溃。

user: user-4
content: 引用 4 楼 wenpinglaoyao 的回复:[quote=引用 1 楼 paschen的回复:]你已经越界写了，把不属于你申请的空间给覆盖掉了，没问题只是运气好，如果没猜错，你free(p)的时候你程序就崩了 大牛能解释下为什么free时会崩溃吗？[/quote]  因为DEBUG下编译器可能会在free时检查是否越界了，你分配的内存头尾一定区间都会被特定字符填充

user: user-5
content: 引用 1 楼 paschen的回复:你已经越界写了，把不属于你申请的空间给覆盖掉了，没问题只是运气好，如果没猜错，你free(p)的时候你程序就崩了 大牛能解释下为什么free时会崩溃吗？

user: user-5
content: 写代码时，每个程序员都是最致命的黑客

user: user-0
content: 引用 1 楼 paschen 的回复:你已经越界写了，把不属于你申请的空间给覆盖掉了，没问题只是运气好，如果没猜错，你free(p)的时候你程序就崩了 多谢，free的时候果然奔溃了

user: user-4
content: 你已经越界写了，把不属于你申请的空间给覆盖掉了，没问题只是运气好，如果没猜错，你free(p)的时候你程序就崩了
user-0 提问: gcc多文件编译的问题？

回复:
user: user-1
content: C  默认函数原型为 int function(...);

user: user-0
content: 引用 1 楼 user-2 的回复:巧合。运气。不要靠运气生活。 如果fun函数需要的参数、提供的返回值与调用者提供的参数、需要的返回值类型不同，好运就不会自动来了。谢谢，在自学，遇到很多问题和书上的不一致。所以多问问

user: user-2
content: 巧合。运气。不要靠运气生活。 如果fun函数需要的参数、提供的返回值与调用者提供的参数、需要的返回值类型不同，好运就不会自动来了。
user-0 提问: 请问怎么将后缀为FNC的文件还原成TXT文件？谢谢。

回复:
user: user-1
content: https://www.baidu.com/s?wd=.fnc&rsv_spt=1&rsv_iqid=0x916e57290001bb54&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=3&rsv_sug1=3

user: user-2
content: 你要知道FNC文件的格式，然后按照这个格式去解析出来就行了
user-0 提问: 先学了python对学C有好处吗

回复:
user: user-1
content: C语言是比较难，但大学学的C语言内容比较少，就学一些基本语法，没什么好担心的！个人认为学Python对学C没什么帮助，如果是对Python感兴趣可以学学！

user: user-2
content: 引用 4 楼 wenpinglaoyao 的回复:Python比c容易一些，但c语言更接近汇编，能让您更容易理解程序运行机制  那是无法通过学C得到的，得从《深入理解计算机系统》这样的砖头书开始学，特别适合非科班的人补充基础知识。

user: user-2
content: 非科班的，建议学Java/Python，可以快速的结合本行做点东西，有需要了再学C

user: user-3
content: C学完之后会感觉python很简单，不过就像楼上说的，如果仅仅是想为了学好C而去学Python的话就没必要浪费时间了，直接C吧

user: user-4
content: 如果只是想学c的时候好入门一点而学python的话，还是直接学c吧

user: user-5
content: Python比c容易一些，但c语言更接近汇编，能让您更容易理解程序运行机制

user: user-6
content: C比python难吧，个人意见

user: user-7
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-0
content: 还是说先学C语言对学python有好处？零基础，想多学项技能
user-0 提问: 求帮助改改我我运行的错误 5位学生4门课学生成绩管理系统

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

回复:
user: user-1
content: 引用 2 楼 apocalyps3 的回复:[quote=引用 1 楼 paschen 的回复:] 你把问题说清楚，你"c:\\1.txt","r" 文件内容是什么，要怎么输入会出现乱码，然后我帮你看一下  我想要把输入的学生信息存到文本里。可是我不太会链表，有错误。[/quote]  你还是没说重点，你"c:\\1.txt","r"这个文件里的内容是什么 你输出的这几个数都是来自文本，要你文本有内容  比如我测试的；  文本内容如下：   显示：

user: user-0
content: 引用 1 楼 paschen 的回复:你把问题说清楚，你"c:\\1.txt","r" 文件内容是什么，要怎么输入会出现乱码，然后我帮你看一下  我想要把输入的学生信息存到文本里。可是我不太会链表，有错误。

user: user-2
content: 请检查fscanf函数的返回值。

user: user-3
content: 如果你文本文件里边能够输出结果，那么说明程序没问题，但是出现乱码就说明保存的数据有问题，检查一下是否保存的是想要保存的数值，有可能你是把变量地址搞错了

user: user-1
content: 你把问题说清楚，你"c:\\1.txt","r" 文件内容是什么，要怎么输入会出现乱码，然后我帮你看一下
user-0 提问: 给指针赋值时应该是p=a还是p=&a

回复:
user: user-1
content: 对于数组a，数组名其实就是地址了，不用取地址符，至于要不要加括号，看你想做什么了，如果想看第二个元素值，那是需要加括弧的。

user: user-2
content: #include <stdio.h> main() {     int a[10];     int i=0;     for(i=0;i<10;i++)     {         a[i]=i+1;     }     int *p;     p=a;     for(i=0;i<10;i++)     {         printf("%d\n",*(p+i));     }     return 0; }

user: user-3
content: p是int*指针，而数组名a相当于是int*常量，所以正规是p=a; 但是，任何类型指针的值都是一个地址值，在32位系统里就是一个32位整数，所以如果不考虑安全访问方面，任何类型指针间是可以相互间强制转换的。 而&a是取数组a的地址，相当于int (*) [10]类型的数组指针，所以p=&a也是可以的，只看编译器检查规则是否够严格了，即便很严格也可以p=(int*)&a强制转换。 而数组名a表示的是指向数组首地址的常量指针，与数组地址&a是一样的，所以p=a和p=&a效果是一样的。 *p+1加不加括号的问题得看你到底要干嘛，星号运算级高于加号。
user-0 提问: 菜鸟求助，关于C语言结构体赋值问题

回复:
user: user-1
content: 在 arr[0].first = "li"; 这句话中，"li"是一片内存的首地址，也就是“char *”，而char first[10]是在结构体声明时，开辟的一片固定长度、固定地址的10个字节的空间。 两边划等号，是不对的。 可以使用sprintf或者memcpy等函数，向这10个字节的内存中填写内容。

user: user-2
content: 另外错误提示的意思是数组名是个常量，你不能让他重新去指向一个字符串"li"

user: user-2
content: 字符数组不能像你这样赋值，你需要使用strcpy复制进去

user: user-3
content: char first[10]; 这里的first是常量不能修改的。  你的代码可以改成这样 arr[0].first = "li"; strcpy(arr[0].first, "li");
user-0 提问: 求教

回复:
user: user-1
content: #include <stdio.h>  struct st  {  	int x, y; }; struct st data[2] ;  int main ( )  { 	scanf("%d%d", &data[0].x, &data[0].y); 	data[1] = data[0]; 	printf("%d %d\n", data[1].x, data[1].y); 	return 0;  }

user: user-1
content: #include <stdio.h> #include <string.h> struct A {  	int x,y; 	double ave;  };  int main() {  	struct A a[3]; 	int i; 	for (i=0;i<3;i++) 	{ 		scanf("%d%d",&a[i].x, &a[i].y); 		a[i].ave = (a[i].x + a[i].y) / 2.0;  	} 	for (i=0;i<3;i++) 	{ 		printf("%d %d %lf\n",a[i].x,a[i].y,a[i].ave);  	} 	return 0; }
user-0 提问: 求教

回复:
user: user-1
content: #include <stdio.h> #include <string.h> struct A {  	int x,y; 	double ave;  };  int main() {  	struct A a[3]; 	int i; 	for (i=0;i<3;i++) 	{ 		scanf("%d%d",&a[i].x, &a[i].y); 		a[i].ave = (a[i].x + a[i].y) / 2.0;  	} 	for (i=0;i<3;i++) 	{ 		printf("%d %d %lf\n",a[i].x,a[i].y,a[i].ave);  	} 	return 0; }

user: user-1
content: #include <stdio.h>  struct st  {  	int x, y; }; struct st data[2] ;  int main ( )  { 	scanf("%d%d", &data[0].x, &data[0].y); 	data[1] = data[0]; 	printf("%d %d\n", data[1].x, data[1].y); 	return 0;  }
user-0 提问: c语言问题，不懂打代码，求解

回复:
user: user-1
content: 用单项链表能练习到东西

user: user-2
content: 这问题用链表还复杂了,不如直接用指针动态开辟数组

user: user-3
content: 小朋友，手拉手，玩老鹰抓小鸡游戏，嘿嘿  在最前面挡住老鹰的第一个小朋友就是链表的表头，后面每一个小朋友（包括第一个）都是一个数据节点。  他们为了不被老鹰抓到，需要手拉手连接起来。。。  链表即为此。。。

user: user-0
content: 引用 3 楼 whoozit 的回复:单向链表。。。。不知道单向链表是什么

user: user-4
content: 也一个变量来接收用户输入的数据。 然后遍历查找，这都是最基础的

user: user-3
content: 打酱油 。。。。

user: user-5
content: 单向链表。。。。

user: user-6
content: 引用 楼主 Lxl_12345 的回复:下面红色字体这一项代码怎么打？求解。谢谢……   有十个选手参加歌唱比赛，十个裁判对每个选手的演唱进行打分，去掉一个最高分，去掉一个最低分，剩下分数的平均值最为每位选手的最后成绩 要求：1、采用结构体定义每个选手的参赛编号，姓名以及十个裁判打出的分数；       2、从键盘输入每个选手的相关信息：参赛编号，姓名和十个得分；       3、计算每位选手的最后得分，并按分数由高到低排序；       4、查询功能：输入参赛选手的编号或姓名，便可输出该选手的得分以及排名； 以上功能采用菜单操作方式，即从键盘输入1到3这三个数，分别完成以上2到4的功能。 50元我帮你写

user: user-7
content: 建议楼主先把基础打好了~
user-0 提问: 一个用C语言写的系统，出了点小问题

回复:
user: user-1
content: 学号唯一并且升序存入文件 这个功能呢 就是考虑数据结构的问题 我觉得可以模拟std::MAP中的来实现 写个C版本的呗 std::MAP 底层用红黑树实现

user: user-2
content: 鼠标右键点cmd窗口左上角图标，属性： 字体：新宋体，大小：12 布局、窗口大小、宽度：120，高度：50 确定。

user: user-3
content: 学号升序的实现应该在insert函数里面实现吧，再插入时进行排序，将学生信息存入相应的位置，至于学号的唯一性也应该在插入时进行判断啊，在插入时查看之前的学生信息有没有和要插入的学号有重复。
user-0 提问: 用vs2013不能选择1or2

回复:
user: user-1
content: 第一个scanf改为 scanf("%d %d",&a,&b);

user: user-2
content: 第一个scanf中，格式串中有逗号，输入时就必须有逗号，否则不但本次scanf输入不成功，还影响后面的所有输入
user-0 提问: 未定义标识符printf

回复:
user: user-1
content: #include <stdio.h> 你没有包含头文件吧

user: user-2
content: 引用 1 楼 user-6 的回复:#include <stdio.h> printf 的头文件~~~

user: user-3
content: 确实够新的 ，遇到这个问题先查一些C/C++手册包含所在函数的头文件吧

user: user-4
content: #include <stdio.h>

user: user-5
content: C语言： #include <stdio.h>  C++语言： #include <iostream> using namespace std;

user: user-6
content: #include <stdio.h>
user-0 提问: C语言指针问题

回复:
user: user-1
content: 引用 3 楼 qq291582781 的回复:[quote=引用 1 楼 user-2 的回复:] 没有问题，什么错误 发帖的时候顺手删了一行代码 p=a;  为什么在12行中，f函数返回的数是 a，但并不用把a赋值给p[/quote]  f函数就没有返回值，调用函数时传递参数就是把a的值复制给实参p

user: user-0
content: 引用 1 楼 user-2 的回复:没有问题，什么错误 发帖的时候顺手删了一行代码 p=a;  为什么在12行中，f函数返回的数是 a，但并不用把a赋值给p

user: user-1
content: 可以运行，楼主说的“运行不了”是指什么

user: user-2
content: 没有问题，什么错误
user-0 提问: 请问这个程序为什么运行不了，VC中，可以再函数名里面int 指针吗

回复:
user: user-1
content: // afxp.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <stdlib.h> #include <stdio.h> void swap(int*a,int *b);   int _tmain(int argc, _TCHAR* argv[]) { 	int a=1; 	int b=2; 	swap(&a,&b); 	printf("a=%d,b=%d\n",a,b); 	system("pause"); 	return 0;     } void swap(int *a,int *b) { 	int t=0; 	t=*a; 	*a=*b; 	*b=t;  }

user: user-2
content: printf("a=%d,b=%d\n",a,b);   main函数中你的a和b不是指针，不能写成*a *b

user: user-3
content: printf("a=%d,b=%d\n",a,b);

user: user-4
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执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495
user-0 提问: 字符加密

回复:
user: user-1
content: if then

user: user-2
content: std::string input, output; if (input == "2F541B503DB46CA0DF42968BB001D649") {     output = "824168136ty"; }

user: user-3
content: MD5+Salt

user: user-4
content: 加密算法简单的情况下通过推测能推测出，楼主只给出这么点东西，谁能猜出算法？

user: user-5
content: 这样谁能猜到加密方式？
user-0 提问: 字符串归类问题

回复:
user: user-1
content: 引用 6 楼 qq_33553283 的回复:。。。好吧 原来 isStr 是自己定义的一个 bool类型  啊。。。那这个只能在 C++ 才能运行吗？我看 bool是 C++ 特有的  你要用int表示也行  另外如果回复请引用我内容，否则可能没看到你的回复

user: user-0
content: 。。。好吧 原来 isStr 是自己定义的一个 bool类型  啊。。。那这个只能在 C++ 才能运行吗？我看 bool是 C++ 特有的

user: user-0
content: 还有 isStr 这个函数 怎么来的 我看 一般的 字符串函数库 没有 isStr 这函数啊

user: user-0
content: bool isStr = false;  这一行的意思能不能解释一下 。。。。 谢谢

user: user-1
content: 按你要求改的，加了个变量判断是否是在引号内的字符，不懂再回复   #include <stdio.h> #include <stdlib.h> #include <cstdlib> #include <iostream> #include <ctype.h>  void find_maohao(); void find_number();  int main() { 	char src[]="0 \"a3c5\" 2 1 4 \"b=5,c=4\""; 	int i,a; 	char *p; 	char *q; 	bool isStr = false; 	for(i=0;i<strlen(src);i++) 	{ 		if(src[i]=='"') 		{ 			isStr = !isStr; 			if(isStr) 				find_maohao(); 			continue; 		} 		if(!isStr && isdigit(src[i])) 		{ 			find_number(); 		} 	} 	printf("\n"); 	return 0; }  void find_maohao() { 	printf("A"); }  void find_number() { 	printf("B"); }

user: user-2
content: 参考《编译原理》中的词法分析和有限状态自动机。 //有字符串 //1_22_333,,4444__55555,_666666 //需要解析为 //1 //22 //333 //_ //4444 //55555 //666666 #include <stdio.h> char s[]="1_22_333,,4444__55555,_666666"; char c,*p,*p1; int st; void main() {     st=0;     p=s;     while (1) {         c=*p;         if (0==c) {             switch (st) {             case 1:printf("_\n");    break;             case 2:printf("%s\n",p1);break;             }             break;//         }         switch (st) {         case 0:                  if ('_'==c) {                            st=0;}             else if (','==c) {                            st=1;}             else             {p1=p;                       st=2;}         break;         case 1:                  if ('_'==c) {                            st=1;}             else if (','==c) {printf("_\n");              st=1;}             else             {p1=p;                       st=2;}         break;         case 2:                  if ('_'==c) {*p=0;printf("%s\n",p1);*p=c;st=0;}             else if (','==c) {*p=0;printf("%s\n",p1);*p=c;st=1;}             else             {                            st=2;}         break;         }         p++;     } } //1 //22 //333 //_ //4444 //55555 //666666

user: user-0
content: 问题是 进入if（src[i]==‘“’）后 下一步该如何判断才能达到我想要的结果呢？ 吧 ”a3c5”“b=5,c=4“分别看成一个字串呢？ （请不要使用strtok 函数。。。这个 楼主试过了 在双引号中没有空格的情况下才能用。。。所以 请用这方法，，， 如何解？）
user-0 提问: c语言中可以直接输出数据类型范围的函数没？

回复:
user: user-1
content: Numeric limits

user: user-2
content: http://book.2cto.com/201401/38965.html

user: user-3
content: INT_MAX

user: user-0
content: 引用 1 楼 jiht594 的回复:INT_MAX 引用 2 楼 paschen 的回复:http://book.2cto.com/201401/38965.html 引用 4 楼 zhao4zhong1 的回复:打开这两个文件看看： include\limits.h include\float.h 引用 6 楼 qq_29120981 的回复:四楼正解！整型limits.h浮点型float.h 引用 5 楼 zhouxiaofeng1021 的回复:C语言中有宏定义 C++就是着这些宏定义上封装了一层  谢谢大家的回答，现在知道了。

user: user-4
content: 四楼正解！整型limits.h浮点型float.h

user: user-5
content: C语言中有宏定义 C++就是着这些宏定义上封装了一层

user: user-6
content: 打开这两个文件看看： include\limits.h include\float.h
user-0 提问: 指针的调用问题//基础问题

回复:
user: user-1
content: 引用 2 楼 u010033882 的回复:函数声明里面的*a和*b没有定义类型!  #include <stdio.h> void swap(int*a,int *b); main() {     int a=1;     int b=2;     swap(&a,&b);     printf("a=%d,b=%d\n",*a,*b);     return 0; } void swap(int *a,int *b) {     int t=0;     t=*a;     *a=*b;     *b=t;   } 这就可以了

user: user-0
content: 引用 4 楼 kimi013 的回复:调用时  swap(a, b);应该是&变量 取地址吧

user: user-2
content: 调用时  swap(a, b);

user: user-0
content: 定义了也不管用啊

user: user-3
content: 函数声明里面的*a和*b没有定义类型!  #include <stdio.h> void swap(int*a,int *b); main() {     int a=1;     int b=2;     swap(&a,&b);     printf("a=%d,b=%d\n",*a,*b);     return 0; } void swap(int *a,int *b) {     int t=0;     t=*a;     *a=*b;     *b=t;   }

user: user-4
content: 函数声明没有类型！！！！！
user-0 提问: double和float的问题

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

user: user-2
content: 引用 2 楼 u012033027 的回复:刚才笔误。  改成double之后 scanf中的"%f"应该改成"%lf" 嗯嗯精度不一样

user: user-3
content: 跟float double 精度有关， float 精度低

user: user-3
content: 这跟编译器有关 因为%lf没有直接进入标准

user: user-4
content: 浮点运算误差。  浮点型转整型时不会四舍五入，而是直接截断。

user: user-5
content: 浮点数只要在精度范围就对的, 跟整数不一样 c=floor(1000*a);

user: user-0
content: 呃。。。楼上的关于lf和f的输入问题，当时敲代码的时候注意了。然后我想说的是关于其他的，因为这个数据的原因，我又写了一个代码。 #include"stdio.h" int main() {     float a;     double b;         for(a=10,b=10;a<20,b<20;a+=0.01,b+=0.01)         if(a!=b)         printf("%f   %lf\n",a*1000,b*1000); } 之后发现float和double显示的数不很一样，几位小数之后开始出现偏差。然后从0试到100，全都这样。 呃。。。求解

user: user-6
content: 楼上正解！用%g让编译器自动选择

user: user-1
content: %g

user: user-7
content: 浮点数造成精度不同的导致，很多十进制浮点数没办法在二进制下精确表示  如果要转int，应该用四舍五入，否则只会把小数部分截断  1.0000001 变成 1， 而0.99999999 将变成0

user: user-8
content: 刚才笔误。  改成double之后 scanf中的"%f"应该改成"%lf"

user: user-8
content: 改成double之后 scanf中的"%f"应该改成"%ld"
user-0 提问: 为什么found函数运行不了呢？大神求解答

回复:
user: user-1
content: BiTrNode* a=CreateBiTree();存在问题，并不是正确构建树 只是申请的内存，但是里面什么数据也没有存放，你把数据存放到了array里面了

user: user-0
content: 我是想先创建一个空树，把数据先存数组，然后再构建二叉排序树

user: user-2
content: found中a里什么也没有， 你仅仅只是申请了一片空间，并没初始这片空间
user-0 提问: 关于交换函数……

回复:
user: user-0
content: 赵老师的太深奥了，暂时还看不太懂

user: user-1
content: 仅供参考：#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-2
content: void swap(int a,int b) {     int t=0;     t=a;     a=b;     b=t; } 这个函数中void swap(int a,int b)其中int a，int b是函数的形参，跟你的全局变量a,b不是一个变量，只是名字相同。 如果你的swap(int a,int b)的形参变量修改一下名称，你会明白为什么 void swap(int d,int e) { 	int t=0; 	t=d; 	d=e; 	e=t; }
user-0 提问: C语言 赋值问题

回复:
user: user-1
content: c语言和c++是不同的语言 vc6.0下可以正常编译，前提是c++工程

user: user-2
content: C++是另一种语言 学习C语言时，说源程序文件可以是cpp的 纯粹是误人子弟

user: user-3
content: 首先要明白c和c++是两种不同的语言，不要认为两者语法完全一样，另外，本句中加了括号，逐个翻译并不会出问题

user: user-4
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执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-5
content: 引用 5 楼 user-5 的回复:a=(a=b)=3*4; 这个语句等价于  (a=(a=b) )=3*4;  3*4仍是赋值给左值a 整个执行过程是： a = b;  a=a;  a=3*4;  说错，应该是 a = b; a = 3*4; a = a;

user: user-5
content: a=(a=b)=3*4; 这个语句等价于  (a=(a=b) )=3*4;  3*4仍是赋值给左值a 整个执行过程是： a = b;  a=a;  a=3*4;

user: user-2
content: 引用 3 楼 Emp_blood 的回复:书上说（a=b）不能作为左值，，，但是我在dvc中却能运行出结果 看一下，源程序文件名是 .cpp 吗？ C++中， (a = b) = 3*4;  是可以的。 即使在C++中，a =  (a = b) = 3*4;  也是未定义行为。 看书要看好一点的书。

user: user-0
content: 书上说（a=b）不能作为左值，，，但是我在dvc中却能运行出结果
user-0 提问: 求教大神math头文件里究竟是怎样的算法？哪么变态

回复:
user: user-1
content: Compiler Intrinsics

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

user: user-3
content: 移位开方算法： 把数按照2Bits一节分成若干节 逐次开方 每节对应开方结果的一位,根 r初始化为0 第一步，r左移一位 设置一个数表示余数remain,，先取第一节放在余数尾部 如果当前余数 >=2r+1  则r加一，remain减 2r+1否则不加 如此循环直到需要的精度为止。 步数总和- （原始数据的字位数+1）/2 是小数位数 如果余数为0 就可以终止了。然后计算下位数。平方根就求出来了 这样计算的平方根是精确的平方根。可以任意精度计算。也可以四舍五入（0舍1入）   引用 12 楼 lm_whales 的回复:有一种开方指令的实现。和手动开方相似  移位开方，可以对整数开方，应该也不慢 毕竟 80Bits 浮点数也只是64BIts尾数 先对指数部分开方只是个简单的除以2操作 64Bits 尾数，即便开方成64BIts 也只是64步而已，不能算慢 CPU内部硬件运算，比CPU对外的指令快多了， 即便用微码实现也比用 高级语言快。

user: user-3
content: 有一种开方指令。和手动开方相似  移位开方，可以对整数开方，应该也不慢 毕竟 80Bits 浮点数也只是64BIts尾数 先对指数部分开方只是个简单的除以2操作 64Bits 尾数，即便开方成64BIts 也只是64步而已，不能算慢 CPU内部硬件运算，比CPU对外的指令快多了， 即便用微码实现也比用 高级语言快。

user: user-3
content: CPU硬件实现的浮点算法，应该都是比较快的，因为硬件可以并行计算 而且频率比外部要高

user: user-4
content: 好多 CPU 已经有开平方指令了。

user: user-5
content: windows的计算器用的是泰勒展开, sqrt以前是牛顿迭代, 现在不知道有没有改了

user: user-6
content: 引用 17 楼 醉花阴柳的回复:关于开方的有一个不可思议的代码段，楼主搜索 由sqrt引发的血案 这篇博文看看吧 http://m.blog.csdn.net/blog/dl0914791011/41241637

user: user-6
content: 关于开方的有一个不可思议的代码段，楼主搜索 由sqrt引发的血案 这篇博文看看吧

user: user-3
content: 一般数学函数。 都是直接使用浮点运算器FPU对应的功能 （指令） 早期，有软件仿真FPU硬件,执行浮点寄存器指令的。 (例如TC,BC 就有，这是可选项。可以硬件执行，也可以选仿真执行) 如今应该没有了

user: user-7
content: 一般来说就是fsqrt指令，或者用SSE的sqrtss、sqrtsd指令，二者性能大致相当，在较新的处理器上都是10几个时钟周期，不过fsqrt涉及到浮点load/store，比SSE的load/store要慢一些，但是它的精度是最好的。

user: user-0
content: 引用 2 楼 paschen 的回复:直接看他的汇编不就知道了 看不懂汇编，咋学啊？

user: user-8
content: 引用 8 楼 baidu_32238993 的回复:[quote=引用 2 楼 paschen 的回复:] 直接看他的汇编不就知道了 看不懂汇编，咋学啊？[/quote]  一般来说标准库提供的效率都相对较高，而且通用性强 math.h中很多算法都直接使用的汇编指令来写，所以效率会很高，但我具体也没研究

user: user-0
content: 引用 4 楼 CharlesSimonyi 的回复:math.h的源代码是可见的，可以跟进去看看 我逐语句调试，然后直接就跳过去了...真的跳过去了

user: user-9
content: Fast inverse square root 虽然这不一定是math.h中的开方算法，但它真的很快。

user: user-10
content: 《C标准库》一书可供参考

user: user-11
content: math.h的源代码是可见的，可以跟进去看看

user: user-12
content: 无代码无真相啊

user: user-8
content: 直接看他的汇编不就知道了

user: user-0
content: 但是我发现我写的指数函数意外的竟然比math里的效率高。主要是开方，哪怕是泰勒展开的计算量也不止如此啊，math里是怎么开方的?
user-0 提问: 求助ＡＣＭ中的“runtime erro”

回复:
user: user-1
content: 要多写几个测试用例 试试 比如边界值啊 条件覆盖等 可能存在一些问题 不能通过他的测试用例

user: user-0
content: 附上改好的代码：#include"stdio.h" #include"stdlib.h" #define MAX 1001 float play() { 	float a[4]={0}; 	float S_f,t_x,t_y,tmp,total; 	S_f=0;t_x=0;t_y=0;tmp=0;total=0; 	scanf("%f %f %f %f",&a[0],&a[1],&a[2],&a[3]); 	if(a[0]<=a[1]){ 			return a[3]/a[0];	 			} 	S_f=a[1]*a[2]; 	t_x=a[3]/a[0]; 	t_y=(a[3]-S_f)/a[1]; 	 	while(t_x<t_y) 	{ 		tmp=S_f/(a[0]-a[1]); 		S_f+=tmp*a[1]; 		t_y=(a[3]-S_f)/a[1]; 		total+=tmp;  		} 	total+=t_x;  	return total; }  int main(){ 	//freopen("input.txt","r",stdin); 	int times=0; 	int i=0; 	float result[MAX]={0}; 	scanf("%d",×);	 	for (i=0;i<times;i++) 	{ 		result[i]=play(); 		} 	for(i=0;i<times;i++) 	{ 		printf("Case #%d: %.3f\n",i+1,result[i]); 	} 	return 0;	 }

user: user-0
content: 确实是初始化ＭＡＸ的问题。题目要求中有Ｔ<=1000,因此将ＭＡＸ设置为１００１就ＯＫ了

user: user-0
content: 引用 1 楼 user-2 的回复:1. 输入的times有可能大于MAX 2. 被除数可能为0，比如a[0]-a[1], a[0], a[1]等; 或者被除数太小导致除法结果溢出 请仔细阅读错误信息，应该可以看到原因。 谢谢，受教了，我改一改试试看。

user: user-2
content: 1. 输入的times有可能大于MAX 2. 被除数可能为0，比如a[0]-a[1], a[0], a[1]等; 或者被除数太小导致除法结果溢出 请仔细阅读错误信息，应该可以看到原因。
user-0 提问: 程序加入freopen后输入不正确

回复:
user: user-1
content: 检查下freopen函数的返回值

user: user-1
content: 大概是没有真正打开那个文件。检查下文件位置

user: user-2
content: 加头文件了吗？（都有小半年没做这个了，生疏了。）
user-0 提问: c语言编写字典密码程序 跪求帮助==

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:fp=fopen(filename,"w+"); 这句，filename是要打开的文件路径，你没初始化就直接用了  另外GetDicChar(ch[100],options,len); 要改成 GetDicChar(ch,options,len); 谢谢回复。那么程序思路是对的？ 还有·····一直没弄懂调用时函数内的实参怎么选··比如我定义时用的dic(char *a)调用时实参却不是指针？

user: user-1
content: 引用 2 楼 redcobain 的回复:[quote=引用 1 楼 user-1 的回复:] fp=fopen(filename,"w+"); 这句，filename是要打开的文件路径，你没初始化就直接用了  另外GetDicChar(ch[100],options,len); 要改成 GetDicChar(ch,options,len); 谢谢回复。那么程序思路是对的？ 还有·····一直没弄懂调用时函数内的实参怎么选··比如我定义时用的dic(char *a)调用时实参却不是指针？[/quote]  如果传递的是数组，会退化为指针，数组名可退化为指针

user: user-1
content: fp=fopen(filename,"w+"); 这句，filename是要打开的文件路径，你没初始化就直接用了  另外GetDicChar(ch[100],options,len); 要改成 GetDicChar(ch,options,len);
user-0 提问: 新手：求大神解救 ，这道题提交都错了5遍了，错误提示wrong answer 50%

回复:
user: user-1
content: 连分数，和分数比较，最好精确 能精确比较

user: user-2
content: 浮点数相等不要用==, 应该是fabs(a-b)<eps这样的
user-0 提问: MYSQL的释放查询内存问题，请大神赐教！感激不尽。。。。

回复:
user: user-0
content: 引用 1 楼 xiaoyuanyuan2009 的回复:你是不是释放了两次  感谢您的回复，好像也没有释放两次耶。。  这个释放内存是不是有什么其他要弄的

user: user-1
content: 引用 2 楼 kangzq 的回复:感谢您的回复，好像也没有释放两次耶。。  这个释放内存是不是有什么其他要弄的 会不会获取结果集的时候就失败了，然后你释放个失败的指针

user: user-1
content: 你是不是释放了两次

user: user-0
content: 引用 3 楼 user-2 的回复:多贴点代码，应该是你自己的问题， mysql_free_result 都有问题就没法玩了， 编译完 Mysql Connector/C 跑测试程序没问题吧。 求大神给个联系方式，能帮帮我看下代码。。。。

user: user-2
content: 多贴点代码，应该是你自己的问题， mysql_free_result 都有问题就没法玩了， 编译完 Mysql Connector/C 跑测试程序没问题吧。
user-0 提问: cs大一水题目求大神指导

回复:
user: user-1
content: 改了一个地方：sum+=d[i-1];  如果还有问题回复   #include<stdio.h> int main() {  	int year,month,day,i,sum=0,d[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 	while(scanf("%d/%d/%d",&year,&month,&day)!=EOF) 	{ 		sum=0; 		for(i=1;i<month;i++) 			sum+=d[i-1]; 		if((year%4==0&&year%100!=0)||year%400==0) 		{ 			if(month>2)  				sum=sum+day+1; 		} 		else 		{ 			sum=sum+day; 		} 		printf("%d\n",sum); 	} 	return 0; }

user: user-2
content: C语言中d[12]的下标是0--11

user: user-2
content: 引用 1 楼 sinat_33196949的回复:C语言中d[12]的下标是0--11 并且，如果在oj上的话，year貌似也不足够大
user-0 提问: 数组名称中，[]里面的数字是代表数组里面有几个值……

回复:
user: user-1
content: 输出时只是引用指针，*(a+i*类型的长度)，并不会去判断是否越界，只是把指针指向的空间的数据输出

user: user-2
content: 呵呵 说不定chh[4]也行~

user: user-3
content: chh[3] 的有效索引只是0-2 越界并不会导致编译错误，但会让你程序产生不确定行为，甚至崩溃

user: user-4
content: 4已经越界，这就是c最难调试的地方。一旦访问越界，结果未知。
user-0 提问: Win10如何用命令运行.c文件

回复:
user: user-1
content: 系统是无法直接运行.c程序的，需要编译生成 .obj 和 .exe 文件，一般用集成开发环境运行 .c 程序，如果想要用命令行窗口运行 .c 程序的话，需要先保证系统已经安装了开发工具，一般是vc或者vs。我用的vs，配置一下环境，然后就可以了。可以参考http://www.cnblogs.com/Lin-chun/p/5361030.html#undefined，已测可用。PS：里面提到的vcvars32.bat文件需要进入文件夹看看具体是什么名称。

user: user-2
content: 下载个编译器吧，比如gcc。然后编译运行

user: user-0
content: 我是编辑好了程序，想用命令编译运行它，行不行？

user: user-3
content: .c文件其实即使文本文件，和.txt文件没区别。只是里面保存了C语言代码，改了个扩展名而已

user: user-0
content: 这只是打开.c文件吧？？？不是运行

user: user-4
content: 引用 2 楼 zhu_xxx 的回复:[quote=引用 1 楼 user-4 的回复:] notepad.exe  xxx.c 能具体点吗？？？ [/quote]  xxx.c 换成你文件路径

user: user-0
content: 引用 1 楼 user-4 的回复:notepad.exe  xxx.c 能具体点吗？？？

user: user-4
content: notepad.exe  xxx.c
user-0 提问: 求帮忙调试，结果发至qq1003573588

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

user: user-2
content: LZ是学生吧，都不愿意直接在上论坛来看看人家给的提示？ 这种态度还是放弃C/C++吧

user: user-3
content: 你的代码不管怎么运行 都是抄袭

user: user-4
content: f函数总是返回1， 怎么判断结果呢？明显的错误修改了再说
user-0 提问: 这是引用函数出错了吗？

回复:
user: user-1
content: 举个简单的例子: #include <stdio.h> #include <string.h> void pp(char *str) { printf("Str:%.2s\n",str); } int main(void) { pp("Hi"); return 0; }

user: user-2
content: 引用 2 楼 DJYLSY 的回复:#include<stdio.h> int main() void sort(int people[]) { int i,j,people[5]; for(i=0;i<5;i++) scanf("%d",&people[i]); sort(people); return 0; } void sort(int people[]) { int k,j.i; int t; for(i=0;i<N-1;i++) { for(k=0,j=k+1;j<5;j++) { if(people[k]>people[j])             k=j;   if(people[k]<=people[j]) {  t=people[k];  people[k]=people[j];  people[j]=t; } } } for(i=0;i<N;i++) printf("%d",people[i]); } 大神，还是不行啊  main函数实现部分呢？ 你只写个int main() 什么意思

user: user-0
content: #include<stdio.h> int main() void sort(int people[]) { int i,j,people[5]; for(i=0;i<5;i++) scanf("%d",&people[i]); sort(people); return 0; } void sort(int people[]) { int k,j.i; int t; for(i=0;i<N-1;i++) { for(k=0,j=k+1;j<5;j++) { if(people[k]>people[j])             k=j;   if(people[k]<=people[j]) {  t=people[k];  people[k]=people[j];  people[j]=t; } } } for(i=0;i<N;i++) printf("%d",people[i]); } 大神，还是不行啊

user: user-2
content: int main() 没有实现部分  int k,j.i;  应该是逗号吧  sort函数不需要返回值  建议楼主先把基础打好
user-0 提问: 为啥我输入的数据和我data；函数输出的有几个数据不一样？而且在输入函数里把%fs改成%d后输出的数据全部为0？

回复:
user: user-0
content: 就是无法用函数输出我输入的数据

user: user-1
content: 不知道你要问什么  浮点数与整数的内存存储方式是不同的
user-0 提问: [小白求助]关于动态链接库

回复:
user: user-1
content: 排除方法： 1, 先将动态链接库的调用注释，重新编译，调试运行，看故障是否复现 1.1 不复现，大概与动态链接库的调用有关，检查dll文件是否在当前路径下。F5调试时，当前路径一般是工程目录；        检查动态链接库里面add等的符号等信息 1.2 复现，同样问题，非动态链接库问题

user: user-0
content: 求助大神啊~~~
user-0 提问: C语言计算2^100，的问题？

回复:
user: user-1
content: 完全超出了编译器的内存地址，你知道这是多大的一个数吗？需要多少个字节啊

user: user-0
content: 引用 2 楼 paschen的回复:http://blog.csdn.net/juanjuan888/article/details/6672517 这种浮点表示法，我懂啊，就是8个字节64位分成三部分表示，，但是他都说了能表示10的1000多次方，我这2的100次方也不过10的30次方啊？？

user: user-0
content: 引用 1 楼 Ahair的回复:你知道2的100次方能有多少位吗。。。。  远远超出预设的数据类型表示范围 是不是能表示和能计算不是一回事？？？？

user: user-0
content: 引用 1 楼 Ahair的回复:你知道2的100次方能有多少位吗。。。。  远远超出预设的数据类型表示范围 2的100次方是二进制101位啊，就是1000000000000.......000000，（100个0）？十进制的话，是1.267*10^30次方，但是double能表示10的1000多次方啊？？  用dev c++计算2的100次方就崩溃了？显示不出来，

user: user-2
content: http://blog.csdn.net/juanjuan888/article/details/6672517

user: user-3
content: 应该很快了，当128Bits操作系统，应用程序普及以后，2^100 就很容易表示了

user: user-3
content: 2^100 ，101 个二进制位 。 double 仅有64 位，尾数只有52 位，加上隐藏位53位。 所以不能用二进制尾数，精确表示2^100 ； 只能，用指数表示，也就是2进制的科学记数法表示。 当然这个表示是精确的。  但是 2^100-1,2^100+1 就不能精确表示了 那么这个精确表示的2^100； 要怎么转化成10进制字符串表示，才能也依然精确？ 方法应该是有的，但是显然不是通用的。  有理数，实数，好比沙子。在某个范围内右无穷多个。 但是浮点数表示的二进制，只能表示有限个数的沙子。 很多沙子表示不了，只能以不精确的方式，被别的沙子代表。

user: user-4
content: #include <stdio.h> #define weishu 4000 int main() {   int cun[weishu];   int a, b;   int zhishu, dishu;   for (a = 0; a < weishu; a++)     cun[a] = 0 ;   cun[weishu - 1] = 1;   printf("输入底数:");   scanf("%d", &dishu);   printf("输入指数:");   scanf("%d", &zhishu);   for (b = 0; b < zhishu; b++) {       for (a = weishu - 1; a >= 0; a--)          cun[a] *= dishu;       for (a = weishu - 1; a >= 0; a--)         if (cun[a] >=10){           cun[a - 1] += cun[a] / 10;           cun[a] %= 10;         }     }     for (a = 0; a < weishu; a++)     if (cun[a] != 0)       break;   for (a; a < weishu; a++)     printf("%d", cun[a]); } /*可以计算2^100000,我曾经把这段代码改进到一百多行,运算速度是六秒钟出2^100000， 六秒钟，不过我没有打注释的习惯，自己慢慢看，你在十分钟之内找我，我可能是有回复的*/

user: user-2
content: 引用 4 楼 jangqh 的回复:[quote=引用 2 楼 paschen的回复:]http://blog.csdn.net/juanjuan888/article/details/6672517 这种浮点表示法，我懂啊，就是8个字节64位分成三部分表示，，但是他都说了能表示10的1000多次方，我这2的100次方也不过10的30次方啊？？[/quote]  double p = pow(2.0, 100.0);

user: user-5
content: 口算 2^100=0x1 00000 00000 00000 00000 00000

user: user-6
content: 你知道2的100次方能有多少位吗。。。。  远远超出预设的数据类型表示范围
user-0 提问: c中怎么用数组赋值，为啥我这个飘红啊。。求各位大神

回复:
user: user-1
content: 应该是char* KE_NAME[2]={"yidong","liantong"};吧 或者char KE_NAME[2]={'y','l'};

user: user-2
content: char* KE_NAME[2]={"yidong","liantong"}; 里面两个都是字符串，不是字符