Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于删除文本文件数据的问题

回复:
user: user-0
content: 引用 3 楼 lgbxyz 的回复:说明你还是没有理解，文本和二进制的区别 后来忙着学业，把这件事情忘了。那天晚上该成功了，问题不是出在二进制还是文本文件的问题，只是因为= =之前写进去的时候每个数据之前多写了个空格，读取时候没有，于是后面就乱了。谢谢！

user: user-0
content: 引用 6 楼 galiniur0u 的回复:#include <stdio.h> #define SIZE 4 struct worker {     char num[4];     char name[20];     char age[4]; }; void main() {     struct worker wk;     int n;     FILE *in,*out;     if((in=fopen("file1.txt","rb"))==NULL)     {         printf("The file %s can not be opened.\n","file1.txt");         return;     }     if((out=fopen("file2.txt","wb"))==NULL)     {         printf("The file %s can not be opened.\n","file2.txt");         return;     }     while(fread(&wk,sizeof(struct worker),1,in)==1)     {         wk.num[3] = '\0';         wk.name[19] = '\0';         wk.age[3] = '\0';         printf("%s %s %s\n", wk.num, wk.name, wk.age);         if(strcmp(wk.num,"1  ") == 0)         {             fwrite(&wk,sizeof(struct worker),1,out);         }     }     fclose(in);     fclose(out); } 不知道楼主按照什么方式读取的数据，如果楼主按照我这个方式，需要注意内存对齐问题。要不然判断的时候估计会有问题。    是的 那天改完之后我就是出错在了这里，谢谢！

user: user-1
content: #include <stdio.h> #define SIZE 4 struct worker {     char num[4];     char name[20];     char age[4]; }; void main() {     struct worker wk;     int n;     FILE *in,*out;     if((in=fopen("file1.txt","rb"))==NULL)     {         printf("The file %s can not be opened.\n","file1.txt");         return;     }     if((out=fopen("file2.txt","wb"))==NULL)     {         printf("The file %s can not be opened.\n","file2.txt");         return;     }     while(fread(&wk,sizeof(struct worker),1,in)==1)     {         wk.num[3] = '\0';         wk.name[19] = '\0';         wk.age[3] = '\0';         printf("%s %s %s\n", wk.num, wk.name, wk.age);         if(strcmp(wk.num,"1  ") == 0)         {             fwrite(&wk,sizeof(struct worker),1,out);         }     }     fclose(in);     fclose(out); } 不知道楼主按照什么方式读取的数据，如果楼主按照我这个方式，需要注意内存对齐问题。要不然判断的时候估计会有问题。

user: user-2
content: 简易楼上的方法！自己尝试

user: user-3
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-4
content: 说明你还是没有理解，文本和二进制的区别

user: user-0
content: 引用 1 楼 lgbxyz 的回复:逻辑没问题， 有问题的是 你操作的是结构体。  结构体 对于直接存储到文件只能以二进制的形式操作，即使用fread/fwrite 函数。 fprintf/fcanf 只能操作文本。  昨天看完你的回复，然后去翻了上次的帖子，然后早上去翻了课本，彻底凌乱...  "fwrite， fread 是操作二进制的，自然不可读； 想要文件可读应该使用fprintf ，fscanf，这两个API是操作文本的"

user: user-4
content: 逻辑没问题， 有问题的是 你操作的是结构体。  结构体 对于直接存储到文件只能以二进制的形式操作，即使用fread/fwrite 函数。 fprintf/fcanf 只能操作文本。
user-0 提问: 一到简单的C语言题，求助，好人一生平安

回复:
user: user-0
content: 非常感谢楼上的各位，好人一生平安。 用2楼的测试，通过了

user: user-1
content: 没排版，你试试吧。应该没问题，关于思路，注释也写的很清楚

user: user-1
content: 跳过输入部分，假如字符串a为a，字符串b为b int leng_a=strlen(a);  //字符串a的长度（不包含空字符） int leng_b=strlen(b);  //字符串b的长度（同上） bool m=false; for(int i=0;i<leng_a;i++) { if(a[i]!=b[0])continue;  //假如没找到和b字符串第一个字符相同的，继续那么找下一个 for(int j=0;j<=leng_b;j++)  //能执行到这里，说明找到了和b字符串第一个字符相同的，因此要开始逐个验证了 { if(j==leng_b)  //如果全部匹配（b字符串全部匹配结束） { cout<<"在a的第"<<i+1<<"个字符中，b第一次出现"<<endl; m=true; break; } if(a[i+j]!=b[j])breakl     //如果a在匹配过程中，如果某个字符匹配失败，则说明是不对的，结束这个for，继续找 } if(m)break; }

user: user-2
content: #include "stdafx.h" #include <iostream> using namespace std; #define max 100 #define min 100 //abcd  bc int _tmain(int argc, _TCHAR* argv[]) { 	char str1[max]; 	char str2[min]; 	cout<<"please input two strings"<<endl; 	cin>>str1; 	cin>>str2; 	int i=0,j=0; 	int flag; 	if(str2[0]==0) 		return 0; 	while(str2[i]!=str1[j]&&str1[j]!='\0') 		 j++; 	if(str1[j]=='\0') 		return 0; 	else 	{   		flag=j+1; 		i++; 		j++; 		if(i<min&&str2[i]!='\0') 			{ 				if(str2[i]!=str1[j]) 					return 0; 				else 					j++; 				if(str2[++i]=='\0') 					cout<<flag; 			} 		else 			cout<<1; 	}	 }

user: user-3
content: #include <stdio.h> #include <string.h>   #define MAX_STR_LEN 100  int main(void) { 	char str1[MAX_STR_LEN] = {0}; 	char str2[MAX_STR_LEN] = {0}; 	 	scanf("%s %s", str1, str2); 	 	printf("%d\n", strstr(str1, str2) - str1 + 1);  	return 0; }

user: user-4
content: "最简单的等级了"
user-0 提问: C语言 为什么使用realloc出现a not allowed system call

回复:
user: user-0
content: 引用 7 楼 lgbxyz 的回复:试试这个程序  #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(void) { 	int n,m,i,j,len; 	char input[100]; 	char **a; 	 	 scanf("%d",&n); 	 a = (char**)malloc(n * sizeof(char*)); 	 for (i = 0; i < n; i++) 	 { 	 	memset(input, 0x00, sizeof(input)); 	 	scanf("%s", input); 	 	len = strlen(input); 	 	a[i] = (char*)malloc((len + 1)); 	 	memcpy(a[i], input, len + 1);  	 } 	return 0; } 测试了一下，还是出现相同的问题

user: user-0
content: 引用 7 楼 lgbxyz 的回复:试试这个程序  #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(void) { 	int n,m,i,j,len; 	char input[100]; 	char **a; 	 	 scanf("%d",&n); 	 a = (char**)malloc(n * sizeof(char*)); 	 for (i = 0; i < n; i++) 	 { 	 	memset(input, 0x00, sizeof(input)); 	 	scanf("%s", input); 	 	len = strlen(input); 	 	a[i] = (char*)malloc((len + 1)); 	 	memcpy(a[i], input, len + 1);  	 } 	return 0; }  非常感谢，我知道问题原因了，下面还写了一个bubble sort对字符串长短进行排序，但是还用了strcpy这个函数进行copy，所以上面对每个字符串给出恰好的空间之后，这里用strcpy不能保证有足够的空间了，改成交换指针之后问题解决了

user: user-1
content: 试试这个程序  #include <stdio.h> #include <string.h> #include <stdlib.h>  int main(void) { 	int n,m,i,j,len; 	char input[100]; 	char **a; 	 	 scanf("%d",&n); 	 a = (char**)malloc(n * sizeof(char*)); 	 for (i = 0; i < n; i++) 	 { 	 	memset(input, 0x00, sizeof(input)); 	 	scanf("%s", input); 	 	len = strlen(input); 	 	a[i] = (char*)malloc((len + 1)); 	 	memcpy(a[i], input, len + 1);  	 } 	return 0; }

user: user-0
content: 引用 3 楼 lgbxyz 的回复:那就是server是Linux了，是不是限制权限了，防止你们提交了错误的程序。 你试着提交一个最简单的使用realloc的程序试试。  测试了一下最简单的， #include <stdio.h> #include <string.h>  int main(){ 	char *p; 	p=(char*)malloc(100); 	gets(p); 	p=(char*)realloc(p,strlen(p)+1); 	puts(p); 	return 0; } 这是测试代码，输入abcdefghijk，能够正常输出，所以不知道上面程序为什么不行

user: user-1
content: 那就是server是Linux了，是不是限制权限了，防止你们提交了错误的程序。 你试着提交一个最简单的使用realloc的程序试试。

user: user-0
content: 引用 1 楼 lgbxyz 的回复:什么系统 什么编译器 ？提交到学校的OJ上的，用的gcc

user: user-1
content: 什么系统 什么编译器 ？
user-0 提问: while循环里的getchar()的执行细节

回复:
user: user-0
content: 引用 2 楼 lgbxyz 的回复:接下来是怎么走的？ ->>接下来继续while循环，还是回到你说的 getchar() 等待输入，你理解的执行顺序是对的  怎么结束使C等于EOF？ ->>windows 下是Ctrl + Z，输入Ctrl + Z 后按回车就 OK了。 不是Ctrl + Z后就会退出，必须要敲回车，因为getchar()是使用缓冲区的函数，只有缓冲区满了或者敲了回车，这个函数才能执行。  如果想 敲了Ctrl + Z while就推出，那需要使用非缓冲API getch 或者getche。  明白了 多谢解惑~

user: user-1
content: EOF是文件结束符、 输出是在命令提示符中、

user: user-2
content: 接下来是怎么走的？ ->>接下来继续while循环，还是回到你说的 getchar() 等待输入，你理解的执行顺序是对的  怎么结束使C等于EOF？ ->>windows 下是Ctrl + Z，输入Ctrl + Z 后按回车就 OK了。 不是Ctrl + Z后就会退出，必须要敲回车，因为getchar()是使用缓冲区的函数，只有缓冲区满了或者敲了回车，这个函数才能执行。  如果想 敲了Ctrl + Z while就推出，那需要使用非缓冲API getch 或者getche。

user: user-0
content: ef\n   全部读完之后为什么不是EOF，而是重新等待输入另一串字符串
user-0 提问: 新人，关于键盘输入文件结尾的问题

回复:
user: user-1
content: 引用 2 楼 Pratolf 的回复:[quote=引用 1 楼 user-1的回复:]遇到文件尾之后，就不要试图再从文件中读取什么东西了。键盘输入也是一样 谢谢回答，也就是说，遇到文件尾之后就无法读取任何输入了吗？[/quote]是的

user: user-0
content: 引用 1 楼 user-1的回复:遇到文件尾之后，就不要试图再从文件中读取什么东西了。键盘输入也是一样 谢谢回答，也就是说，遇到文件尾之后就无法读取任何输入了吗？

user: user-1
content: 遇到文件尾之后，就不要试图再从文件中读取什么东西了。键盘输入也是一样
user-0 提问: fopen "r+" 的模式

回复:
user: user-0
content: 引用 3 楼 lgbxyz 的回复:楼主，原因找到了， 你看一下fopen的说明文档，其中有一段就是说个事。 读完了不能紧接着写，必须调用fseek等函数干预一下(可以是其实现的机制问题吧)， 所以调用一下fseek就好了，具体看下面的改动。  fseek(fp, 0, SEEK_CUR); 没有动文件描述符的位置，还是在第三个字节处。   #include <stdio.h>  int main(void) { 	FILE* fp = fopen("Test.txt", "r+"); 	char ReadBuff[3] = {0}; 	int ReadLength = fread(ReadBuff, 1, 3, fp); 	int FpPos = ftell(fp); 	char WriteBuff[10] = {0}; 	char* Str = "abcdefghij"; 	 	/* 	When a file is opened with update mode ( '+' as the second or third  	character in the mode argument), both input and output may be performed  	on the associated stream. However, the application shall ensure  	that output is not directly followed by input without an intervening  	call to fflush() or to a file positioning function ( fseek(), fsetpos(),  	or rewind()), and input is not directly followed by output without  	an intervening call to a file positioning function,  	unless the input operation encounters end-of-file. 	*/ 	fseek(fp, 0, SEEK_CUR); 	 	 	int WriteLength = fwrite(Str, 1, 10, fp); 	 	fclose(fp); 	return 0; }   谢谢回复

user: user-1
content: 楼主，原因找到了， 你看一下fopen的说明文档，其中有一段就是说个事。 读完了不能紧接着写，必须调用fseek等函数干预一下(可以是其实现的机制问题吧)， 所以调用一下fseek就好了，具体看下面的改动。  fseek(fp, 0, SEEK_CUR); 没有动文件描述符的位置，还是在第三个字节处。   #include <stdio.h>  int main(void) { 	FILE* fp = fopen("Test.txt", "r+"); 	char ReadBuff[3] = {0}; 	int ReadLength = fread(ReadBuff, 1, 3, fp); 	int FpPos = ftell(fp); 	char WriteBuff[10] = {0}; 	char* Str = "abcdefghij"; 	 	/* 	When a file is opened with update mode ( '+' as the second or third  	character in the mode argument), both input and output may be performed  	on the associated stream. However, the application shall ensure  	that output is not directly followed by input without an intervening  	call to fflush() or to a file positioning function ( fseek(), fsetpos(),  	or rewind()), and input is not directly followed by output without  	an intervening call to a file positioning function,  	unless the input operation encounters end-of-file. 	*/ 	fseek(fp, 0, SEEK_CUR); 	 	 	int WriteLength = fwrite(Str, 1, 10, fp); 	 	fclose(fp); 	return 0; }

user: user-0
content: 引用 1 楼 lgbxyz 的回复:Mark 读后，将fp复位到开始，或者放到最后，都能成功写入10个字节，覆盖其中一部分不好用  #include <stdio.h> #include <stdlib.h>  int main(void) { 	int ReadLength = 0; 	FILE* fp = fopen("Test.txt", "r+"); 	char ReadBuff[3] = {0}; 	ReadLength = fread(ReadBuff, 1, 3, fp); 	int FpPos = ftell(fp); 	 //	fseek(fp, 0, SEEK_SET); 	fseek(fp, 0, SEEK_END); 	 	char* Str = "abcdefghij"; //ÕâÊÇ´æ´¢ÔÚ³£Á¿ÇøµÄ£¬²»ÊÇÔÚ¶ÑÕ»ÖÐ 	int WriteLength = fwrite(Str, 1, 10, fp);  	fclose(fp); }   谢谢回答，你的方法我试过，确实好用的，我只是好奇先读在写，明明写返回不为0，但是真实写入却为0，包括用"a+"打开文件先读后写也是一样的问题，但是只要重置文件指针倒是没bug

user: user-1
content: Mark 读后，将fp复位到开始，或者放到最后，都能成功写入10个字节，覆盖其中一部分不好用  #include <stdio.h> #include <stdlib.h>  int main(void) { 	int ReadLength = 0; 	FILE* fp = fopen("Test.txt", "r+"); 	char ReadBuff[3] = {0}; 	ReadLength = fread(ReadBuff, 1, 3, fp); 	int FpPos = ftell(fp); 	 //	fseek(fp, 0, SEEK_SET); 	fseek(fp, 0, SEEK_END); 	 	char* Str = "abcdefghij"; //ÕâÊÇ´æ´¢ÔÚ³£Á¿ÇøµÄ£¬²»ÊÇÔÚ¶ÑÕ»ÖÐ 	int WriteLength = fwrite(Str, 1, 10, fp);  	fclose(fp); }
user-0 提问: 用gcc编译出来的二进制文件烂尾怎么解决

回复:
user: user-0
content: 回楼上，不是优化的问题，我发现后面有几个函数没有链接进去

user: user-1
content: 又不是出错 为什么要解决， 就是因为你觉得执行文件必须比obj文件大吗？ 可能编译器进行了优化

user: user-1
content: 解决了就说说怎么解决的啊

user: user-0
content: 引用 3 楼 lgbxyz 的回复:你应该是在windows上 集成 nasm 和 cgywin 搭建的编译环境， 编译一个嵌入式系统的内核。 Kernel文件小的原因就是objcopy做的，移出.note 和 .comment 2个section，(-S)删除符号信息。  1.编译3个汇编文件时，第一个没有-f elf选项，后2个有，没有-f选项nasm会自己选择一个格式， 你确定生成的不是windos的PE格式,是Linux的elf格式  2.ld链接时的-Ttext选项，在linux下是 -Ttext=8200 这么用的，不知道你的环境是什么样子的。  3.系统运行的格式是什么，是objcopy的-O选项指定的binary而不是srec等格式吗？  问题解决了，虽然不是用的你这个方法

user: user-1
content: 你应该是在windows上 集成 nasm 和 cgywin 搭建的编译环境， 编译一个嵌入式系统的内核。 Kernel文件小的原因就是objcopy做的，移出.note 和 .comment 2个section，(-S)删除符号信息。  1.编译3个汇编文件时，第一个没有-f elf选项，后2个有，没有-f选项nasm会自己选择一个格式， 你确定生成的不是windos的PE格式,是Linux的elf格式  2.ld链接时的-Ttext选项，在linux下是 -Ttext=8200 这么用的，不知道你的环境是什么样子的。  3.系统运行的格式是什么，是objcopy的-O选项指定的binary而不是srec等格式吗？
user-0 提问: 指针数组的指针如何声明?

回复:
user: user-1
content: 《牛肉干》 C语言上机课，某女同学偷偷吃起牛肉干。 有一粒牛肉干掉到了键盘上，卡在7和8键之间。 女同学就在键盘上抠啊、抠啊、抠啊…… 程序里一行代码变成这个样子： int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a; 后来的结局是 ————程序顺利通过编译，运行结果正确！  仅供参考：//在堆中开辟一个2×3×4×5的4维int数组 #include <stdio.h> #include <malloc.h> int ****p; int h,i,j,k; void main() {     p=(int ****)malloc(2*sizeof(int ***));     if (NULL==p) return;     for (h=0;h<2;h++) {         p[h]=(int ***)malloc(3*sizeof(int **));         if (NULL==p[h]) return;         for (i=0;i<3;i++) {             p[h][i]=(int **)malloc(4*sizeof(int *));             if (NULL==p[h][i]) return;             for (j=0;j<4;j++) {                 p[h][i][j]=(int *)malloc(5*sizeof(int));                 if (NULL==p[h][i][j]) return;             }         }     }     for (h=0;h<2;h++) {         for (i=0;i<3;i++) {             for (j=0;j<4;j++) {                 for (k=0;k<5;k++) {                     p[h][i][j][k]=h*60+i*20+j*5+k;                 }             }         }     }     for (h=0;h<2;h++) {         for (i=0;i<3;i++) {             for (j=0;j<4;j++) {                 for (k=0;k<5;k++) {                     printf(" %3d",p[h][i][j][k]);                 }                 printf("\n");             }             printf("--------------------\n");         }         printf("=======================\n");     }     for (h=0;h<2;h++) {         for (i=0;i<3;i++) {             for (j=0;j<4;j++) {                 free(p[h][i][j]);             }             free(p[h][i]);         }         free(p[h]);     }     free(p); } //   0   1   2   3   4 //   5   6   7   8   9 //  10  11  12  13  14 //  15  16  17  18  19 //-------------------- //  20  21  22  23  24 //  25  26  27  28  29 //  30  31  32  33  34 //  35  36  37  38  39 //-------------------- //  40  41  42  43  44 //  45  46  47  48  49 //  50  51  52  53  54 //  55  56  57  58  59 //-------------------- //======================= //  60  61  62  63  64 //  65  66  67  68  69 //  70  71  72  73  74 //  75  76  77  78  79 //-------------------- //  80  81  82  83  84 //  85  86  87  88  89 //  90  91  92  93  94 //  95  96  97  98  99 //-------------------- // 100 101 102 103 104 // 105 106 107 108 109 // 110 111 112 113 114 // 115 116 117 118 119 //-------------------- //======================= //

user: user-0
content: 引用 1 楼 user-2 的回复:test** pa = array;   谢谢您的帮助,问题已经解决!!

user: user-2
content: test** pa = array;
user-0 提问: 新人求助！！！编写递归函数显示由x、0、1表示的二进制数。

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

user: user-2
content: #include <stdlib.h> #include <stdio.h> #include <string.h>  int replace_first_x(char *src, int n, int i) {         if( n == i)         {                 printf("%s \n", src);                 return 0;         }         //printf("%d %d\n", n, i);         if(src[i] == 'x')         {                 src[i] = '0';                 //printf("0:%s \n", src);                 replace_first_x(src, n, i + 1);                 src[i] = '1';                 //printf("1:%s \n", src);                 replace_first_x(src, n, i + 1);                 src[i] = 'x';         }         else         {                 replace_first_x(src, n, i + 1);         }  }  int main() {         char a[100] = "0x0x0x00x01x";         //char a[100] = "0x0x";         printf("%d \n", strlen(a));         replace_first_x(a, strlen(a), 0); }

user: user-3
content: void replace_first_x(int d,const char *in,char *out,char rep){     if(in[d]=='\0') {out[d]='\0';return;}     out[d]=in[d]=='x' ? rep : in[d];     replace_first_x(d+1,in,out,rep); }

user: user-4
content: #include "stdafx.h" #include<stdio.h> #include<stdlib.h> void replace(char *a, int index) { 	if (a[index] == '\0') { 		printf("%s\n", a); 		return; 	} 	if (a[index] == 'x') { 		a[index] = '0'; 		replace(a, index + 1); 		a[index] = '1'; 		replace(a, index + 1); 		a[index] = 'x'; 	} 	else { 		replace(a, index + 1); 	} 	 } int main() { 	char a[100]; 	scanf("%s", a); 	replace(a, 0); 	system("pause");     return 0; }   挺简单的递归

user: user-5
content: 引用 2 楼 legend_7 的回复:没学过汇编，不是很理解这个，能不能麻烦您稍微解释下呢？谢谢 不是已经注释了吗?照猫画虎就行了

user: user-6
content: 用两种二进制表示一个数 一种是带有x格式的，这其实是4进制 一种是不带x格式的，这是真正的二进制 x 是一种不确定的数字，可能是1 也可能是0

user: user-0
content: 引用 1 楼 zwfgdlc 的回复:只能用汇编了  	//1111111011111110 	int z = 0xFEFE; 	__asm 	{ 		bts dword ptr z, 8 //把从低往高顺序的第8位设为1，0...8,等于0xfffe(1111111111111110) 		btr dword ptr z, 5 //把从低往高顺序的第5位设为0，0...5,等于0xffde(1111111111011110) 	} 没学过汇编，不是很理解这个，能不能麻烦您稍微解释下呢？谢谢

user: user-0
content: 没学过汇编，不是很理解这个，能不能麻烦您稍微解释下呢？谢谢

user: user-5
content: 只能用汇编了  	//1111111011111110 	int z = 0xFEFE; 	__asm 	{ 		bts dword ptr z, 8 //把从低往高顺序的第8位设为1，0...8,等于0xfffe(1111111111111110) 		btr dword ptr z, 5 //把从低往高顺序的第5位设为0，0...5,等于0xffde(1111111111011110) 	}
user-0 提问: 请问C语言之所以被称为“不适合做软件"是因为它做GUI界面会显得比较麻烦吗?还会其他的缺陷吗?

回复:
user: user-0
content: 引用 5 楼 user-1 的回复:[quote=引用 4 楼 yyxgs的回复:][quote=引用 3 楼 user-1 的回复:] [quote=引用 2 楼 yyxgs的回复:][quote=引用 1 楼 user-1 的回复:] 我想问下，C如果不适合做软件的话。。。。他难道能做硬件么  别人都说C适合做底层的,APP都是Java、C#这类语言[/quote] 是啊。。。目前的趋势确实是这样，比如安卓底层就是用c/c++写的，应用层大多是java,尺有所长，寸有所短，这不很正常么[/quote]   哦哦，这个我知道，如果以后的高级语言可以代替C的话,那C岂不是要被淘汰了吗?[/quote] 理论上来说是的，但目前在偏向底层／服务器端的能替代c/c++的语言还不存在，而且个人认为短时间内也不会出现，从另一方面说，如果你的担忧合理的话，那试问那些学java的人是不是都要考虑:以后别的语言出现了取代了java我该怎么办?[/quote]   嘿嘿，说的极是,谢谢指导

user: user-1
content: 引用 4 楼 yyxgs的回复:[quote=引用 3 楼 user-1 的回复:] [quote=引用 2 楼 yyxgs的回复:][quote=引用 1 楼 user-1 的回复:] 我想问下，C如果不适合做软件的话。。。。他难道能做硬件么  别人都说C适合做底层的,APP都是Java、C#这类语言[/quote] 是啊。。。目前的趋势确实是这样，比如安卓底层就是用c/c++写的，应用层大多是java,尺有所长，寸有所短，这不很正常么[/quote]   哦哦，这个我知道，如果以后的高级语言可以代替C的话,那C岂不是要被淘汰了吗?[/quote] 理论上来说是的，但目前在偏向底层／服务器端的能替代c/c++的语言还不存在，而且个人认为短时间内也不会出现，从另一方面说，如果你的担忧合理的话，那试问那些学java的人是不是都要考虑:以后别的语言出现了取代了java我该怎么办?

user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 yyxgs的回复:][quote=引用 1 楼 user-1 的回复:] 我想问下，C如果不适合做软件的话。。。。他难道能做硬件么  别人都说C适合做底层的,APP都是Java、C#这类语言[/quote] 是啊。。。目前的趋势确实是这样，比如安卓底层就是用c/c++写的，应用层大多是java,尺有所长，寸有所短，这不很正常么[/quote]   哦哦，这个我知道，如果以后的高级语言可以代替C的话,那C岂不是要被淘汰了吗?

user: user-1
content: 引用 2 楼 yyxgs的回复:[quote=引用 1 楼 user-1 的回复:] 我想问下，C如果不适合做软件的话。。。。他难道能做硬件么  别人都说C适合做底层的,APP都是Java、C#这类语言[/quote] 是啊。。。目前的趋势确实是这样，比如安卓底层就是用c/c++写的，应用层大多是java,尺有所长，寸有所短，这不很正常么

user: user-0
content: 引用 1 楼 user-1 的回复:我想问下，C如果不适合做软件的话。。。。他难道能做硬件么  别人都说C适合做底层的,APP都是Java、C#这类语言

user: user-1
content: 我想问下，C如果不适合做软件的话。。。。他难道能做硬件么
user-0 提问: 关于结构体输入到txt文件中的问题

回复:
user: user-1
content: 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 引用 3 楼 qq_34086980 的回复:[quote=引用 1 楼 wang0635 的回复:] fwrite是按二进制写的，不是文本文件，内容人是很难看懂的。需要用fread读出来。 如果想人也能看懂，应该用fprintf写，用fscanf读   ......被你这么一说才发现，谢谢！！ 改了之后没有出现烫烫烫 只是输入的数据在文本文件中是没有分开的， 第二次停完车的数据 直接连在了第一次停车的数据后面[/quote] fprintf时，各数据间加上空格，以便fscanf分割识别，但要注意char型

user: user-0
content: 引用 1 楼 wang0635 的回复:fwrite是按二进制写的，不是文本文件，内容人是很难看懂的。需要用fread读出来。 如果想人也能看懂，应该用fprintf写，用fscanf读   ......被你这么一说才发现，谢谢！！ 改了之后没有出现烫烫烫 只是输入的数据在文本文件中是没有分开的， 第二次停完车的数据 直接连在了第一次停车的数据后面

user: user-3
content: fwrite， fread 是操作二进制的，自然不可读； 想要文件可读应该使用fprintf ，fscanf，这两个API是操作文本的

user: user-2
content: fwrite是按二进制写的，不是文本文件，内容人是很难看懂的。需要用fread读出来。 如果想人也能看懂，应该用fprintf写，用fscanf读
user-0 提问: C语言快速求幂的问题

回复:
user: user-1
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-0
content: 是的。今天知道是溢出了。所以才会出现这种情况。

user: user-2
content: #include <stdio.h> long long Qpower (long long num,unsigned n) { 	long long res=1; 	while (n>0){ 		if (n & 1 ) 			res*=num; 		num*=num; 		n >>=1;    } 	return res; } int main() { 	printf ("%lld\n",Qpower(20,10)); 	return 0; } 改成这样看看

user: user-2
content: 参数类型int ，而你计算过程中，用int 类型　的num，保存乘法的中间结果 于是　虽然　res　和返回值　都改为　long long 了 结果在　没有存入　res 时候，num 已经溢出了，得到的结果自然是溢出后的结果 归根结底，还是　数据溢出，算法没有问题

user: user-3
content: 刚才的回复有些问题，归根结底来说，不是 20 的 10 次方值溢出，而是你的函数的运算结果本来就是错误的。你的代码得到错误的运算结果，且这个结果刚好在 64 bit 整数表示范围内。用 %llu 输出之后是 18446744005788041216，用 16 进制表示是 0xFFFFFFF02F900000，粘贴到 Windows 计算器的程序员模式，显示的十进制值是 -67921510400。这三个数字的转换是没有错误的。至于你的算法为何会得到错误结果，我目前还没有看懂你这个原理是什么。

user: user-3
content: %i 和 %d 是输出 int 的，%ld 是输出 long 的，%lld 才是输出 long long。你用 %ld 输出 long long 当然是错误的。 至于输出错误的问题，已经用 Windows 计算器验证过了，20 的 10 次方已经超出了 unsigned long long 的表示范围。

user: user-4
content: 明显是溢出了，换个大的存储类型存储结果。

user: user-0
content: 谢谢醉花阴柳以及pkuzhx。谢谢。这个参数的类型修改之后就可以了。还是类型出错了。

user: user-5
content: 引用 6 楼 qq_34057138 的回复:为了检查错误，我又写了一个用循环语句求幂的简单程序，数据类型是long int 类型的。这个运行没有错误，得到正确的结果 #include <stdio.h> #define N 10 int main() { 	int n; 	long int res =20; 	long int  a=res; //	printf("%ld\n",res); 	for (n=1;n<N;n++){ 		res *=a  ;} 	printf("%ld\n",res); 	return 0; }  结果是10240000000000？你的环境中sizeof(long)是多杀？

user: user-6
content: num也改成long long就对了，你这也太粗心了

user: user-7
content: 算法函数的参数num类型不合适,改为long int试试

user: user-0
content: 为了检查错误，我又写了一个用循环语句求幂的简单程序，数据类型是long int 类型的。这个运行没有错误，得到正确的结果 #include <stdio.h> #define N 10 int main() { 	int n; 	long int res =20; 	long int  a=res; //	printf("%ld\n",res); 	for (n=1;n<N;n++){ 		res *=a  ;} 	printf("%ld\n",res); 	return 0; }

user: user-0
content: #include <stdio.h> long long  Qpower (int num,int n) { 	long  long res=1; 	while (n>0){ 		if (n & 1 ) 			res*=num; 		num*=num; 		n >>=1; } 	return res; } int main() { 	//long int ret = Qpower(20,10); 	printf ("%ld\n",Qpower(20,10)); 	return 0; }  数据类型我已经修改了，但是得到的结果还是不正确的。“-67921510400”。肯定是数据类型出错了。我自己检查好几遍了。

user: user-1
content: 在现实世界中，除时间和空间可能是无限的以外，其它任何事物都是有限的。

user: user-8
content: 看数据是否溢出了long int 能表示的最大值

user: user-9
content: 20^10 = 10240000000000 2^32  = 4294967296 2^64  = 18446744073709551616

user: user-5
content: 20的10次方用2进制需要的位数可以估算一下，以2为底求它的对数，是 10 * （1 + 1/lg2）= 10 * 4.32 = 43.2，所以需要44位。long的位数恐怕不够，用long long试试
user-0 提问: 两者的差别

回复:
user: user-1
content: int t=1; // t 的值是1 int t; // t 的值不确定（垃圾数据）， 你可以打印出来看看

user: user-2
content: 第一个程序里面，fun(0)值未初始化，可是这个叠代的算法里面fun(0)应该等于1才对吧

user: user-3
content: int t=1; 是定义,初始化变量的值为1. 和 int t; 是声名,t是一个int型变量。  其它，查考楼上几楼。

user: user-4
content: 第一个函数n=0时返回的值不确定，因为t还未初始化

user: user-5
content: 看你对这个函数的功能的要求， 当n<=0的时候， 你期望输出什么？还是无所谓？
user-0 提问: Int a【5】，a 和&a哪个表示数组首地址，哪个表示数组首元素地址

回复:
user: user-1
content: 数组首地址是什么意思？

user: user-2
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: user-3
content: a的类型是int[5] 如果auto b= a; b的类型是int* &a的类型是int[5] * &a[0]类型是int* 虽然他们值是一样的，但类型是不同的

user: user-0
content: 引用 3 楼 sdghchj 的回复:&a表示数组首地址，a表示数组首元素地址，让它们都加1就知道了 好像是的，在看看楼下说的，也差不多。

user: user-4
content: 引用 3 楼 sdghchj 的回复:&a表示数组首地址，a表示数组首元素地址，让它们都加1就知道了 这个是对的， 虽然指向的是同一个实际地址， 但是 类型是不一样的。 一个是 int的指针 一个是 int[5]的指针

user: user-5
content: &a表示数组首地址，a表示数组首元素地址，让它们都加1就知道了

user: user-6
content: a为数组首元素地址 也就是a[0]的地址
user-0 提问: 如何从文件中读取信息并输出到屏幕呢？

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #define MAX 40  int main(void) { 	FILE *fp; 	char words[MAX]; 	int ch; 	 	fp = fopen("words", "a+"); 	if (NULL == fp) 	{ 		printf("file words not exist.\n"); 		return -1; 	} 	 	//append data to file 	fprintf(fp, "Bitch"); 	 	//reset the file position indicator 	rewind(fp); 	 	//read the file by char 	while (!feof(fp)) 	{ 		ret = fscanf(fp, "%c", &ch); 		 		if (ret <= 0) 		{ 			break; 		} 		printf("%c", ch);  	} 	 	fclose(fp); 	return 0; }

user: user-2
content: #include <stdlib.h> #define MAX 40  int main(){ FILE *fp; char ],ch; fp=fopen("words","r"); rewind(fp); while (fscanf(fp,"%c",&ch))   putchar(ch);   fclose(fp);   return 0; }

user: user-3
content: The character string mode specifies the type of access requested for the file, as follows:  "r"  Opens for reading. If the file does not exist or cannot be found, the fopen call fails.  "w"  Opens an empty file for writing. If the given file exists, its contents are destroyed.  "a"  Opens for writing at the end of the file (appending) without removing the EOF marker before writing new data to the file; creates the file first if it doesn’t exist.  "r+"  Opens for both reading and writing. (The file must exist.)  "w+"  Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed.  "a+"  Opens for reading and appending; the appending operation includes the removal of the EOF marker before new data is written to the file and the EOF marker is restored after writing is complete; creates the file first if it doesn’t exist.
user-0 提问: 为什么把ZPL指令发给默认打印机，就直接把指令打出来，而不是执行指令

回复:
user: user-1
content: 看打印机的设置，有的打印机只有行缓冲区，超过了就自动打印出来了

user: user-2
content: 使用RAW打印 不要用TEXT

user: user-3
content: echo ^xxx > prn xxx是命令串

user: user-4
content: 怎么加？能否给出关键代码？

user: user-5
content: 指令前面得加esc字符（ASCII码27）吧，我猜。
user-0 提问: C语言 double运算后结果一致，四舍五入值不同的问题

回复:
user: user-1
content: 引用 4 楼 qq_19298027 的回复:浮点数是不精确的1.0不一定等于1.0 对任何进制数，1.0还是等于1.0的。

user: user-1
content: 引用 5 楼 galiniur0u 的回复:对于double数就不能严格的对待，如果真想高精度的对比，还是需要自己去实现高精度运算的。 还可以使用GMP大数库。

user: user-2
content: 对于double数就不能严格的对待，如果真想高精度的对比，还是需要自己去实现高精度运算的。

user: user-3
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 4 楼 qq_19298027 的回复:] 浮点数是不精确的1.0不一定等于1.0 对任何进制数，1.0还是等于1.0的。[/quote]  我这是打个比方，写的不太严谨。

user: user-3
content: 浮点数是不精确的1.0不一定等于1.0

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

user: user-4
content: 两个算式的结果，用二进制表示其实是不同的。简单的 0.1 就是个无限小数，乘除它之后，引入了更大的误差

user: user-5
content: 浮点数是会有精度误差的
user-0 提问: 关于C语言头文件定义问题

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>   这几个头文件中也有这样的定义

user: user-2
content: 库文件里面有预处理命令防止重复包含

user: user-0
content: 引用 2 楼 paschen 的回复:头文件可以使用防止重复包含的办法：  #ifndef xxx #define xxx  //头文件内容  //#endif 我知道 但是如果这个宏没被定义 那么我的数据类型根本不成立啊  更别谈其他的了 难道 编译器那么智能 只识别了 前几条语句吗 说不通啊...

user: user-1
content: 头文件可以使用防止重复包含的办法：  #ifndef xxx #define xxx  //头文件内容  //#endif

user: user-3
content: #ifndef _STACK_H #define _STACK_H 这个定义保证不会重复包含的，叫head guard好像，每个头文件都有的
user-0 提问: 文件输入/输出的fopen_s（）函数

回复:
user: user-1
content: 你说的问题根本不存在，  “r” 根本不会删除原来的文件，重新建立一个新的空白文件。 这是“w” 和 “w+”干的事。  自己看MSDN

user: user-2
content: 重建所有

user: user-3
content: r就是只读，不可能删除源文件内容的
user-0 提问: HDU-1548超时怎么解决

回复:
user: user-1
content: for(r=1;r<=N;r++){next.a[r]=cur.a[r];}好像没必要, 直接用个bool vis[202][2] 记录一下有没有走过, 当时的方向 这题从i 到i(+-)ki可以连线, 就变成最短路问题了
user-0 提问: 动态内存，分别使用char类型和int类型操作的问题

回复:
user: user-0
content: 引用 8 楼 lgbxyz 的回复:大小端判断的函数写错了，更正一下  int get_sys_endian(void) {     int a = 0x12;     char c = *(char*)&a;           if (0x12 == c)     {        		printf("little endian\n");         return 1;     }     else     { 		printf("big endian\n"); 	    return -1;        }           return 0; } 按照百科，低字节存放在低地址，就是小端；低字节存放在高地址，就是大端。仔细看来，其实你上面的demo也没有错，只不过上面的是用来0x1234取12的高字节判断

user: user-1
content: 这和int的内存格式有关系，  x86的cpu是little endian 就是在低字节地址低位数， 高字节存放高位数  char因为只有1个字节，没有问题，就是从第到高 排列 上述例子的4个char 0x00 0x00 0x00 0x30 ------> 但是int有4个字节，作为整体，低位数放在低字节的地址，高位数放在高字节的地址， 比如你有一个数0x11223344,在内存中是这样的 44 33 22 11  因此，。。。。。。。。

user: user-2
content: 大小端判断的函数写错了，更正一下  int get_sys_endian(void) {     int a = 0x12;     char c = *(char*)&a;           if (0x12 == c)     {        		printf("little endian\n");         return 1;     }     else     { 		printf("big endian\n"); 	    return -1;        }           return 0; }

user: user-0
content: 引用 6 楼 lgbxyz 的回复: #include <stdio.h> #include <stdlib.h>  int get_sys_endian(void) { 	int a = 0x1234; 	char c = *(char*)&a; 	 	if (0x12 == c) 	{ 		printf("big endian\n"); 		return 1; 	} 	else 	{ 		printf("little endian\n"); 		return -1;	 	} 	 	return 0; }  int main(void)  { 	 	int pos = 0;     void *p_v = calloc(4, sizeof(char));     char *p_str = (char *)p_v;    	if (get_sys_endian() == 1)  	{  		pos = 3; 	} 	     *(p_str + pos) = '0';     int *p_num = (int *)p_v;      printf("*p_num = %d\n", *p_num);          free(p_num);     return 0; } 执行结果是little endian，现在有些了解了

user: user-2
content: #include <stdio.h> #include <stdlib.h>  int get_sys_endian(void) { 	int a = 0x1234; 	char c = *(char*)&a; 	 	if (0x12 == c) 	{ 		printf("big endian\n"); 		return 1; 	} 	else 	{ 		printf("little endian\n"); 		return -1;	 	} 	 	return 0; }  int main(void)  { 	 	int pos = 0;     void *p_v = calloc(4, sizeof(char));     char *p_str = (char *)p_v;    	if (get_sys_endian() == 1)  	{  		pos = 3; 	} 	     *(p_str + pos) = '0';     int *p_num = (int *)p_v;      printf("*p_num = %d\n", *p_num);          free(p_num);     return 0; }

user: user-3
content: 谷歌搜索大小端

user: user-0
content: 引用 2 楼 user-4 的回复:0x30000000 == 805306368 0x30 == 48为什么不是48呢，从左到右看就是110000，应该是48呀..

user: user-4
content: 0x30000000 == 805306368 0x30 == 48

user: user-0
user-0 提问: 求大神帮我解释下这几句汇编指令

回复:
user: user-1
content: 应该和对调有关吧

user: user-2
content: 这好像是单片机的指令, 有点眼熟 MOV   A,  @R1   // A=(R1) MOV   A, R1        //A=R MOV  R1 A         // R1=A MOV @R1 A     // (R1) =A

user: user-0
content: @R1不是地址的值，而是地址中存放的值对吧？

user: user-3
content: MOV   A,  @R1;将寄存器R1中的值对应内存地址处的数值取出来放到寄存器A中 MOV   A, R1;将寄存器R1中的值取出来放到寄存器A中 MOV  R1 A;将寄存器A中的值取出来放到寄存器R1中 MOV @R1 A;将寄存器A中的值取出来放到寄存器R1的值对应内存地址处 也可能读写全都倒过来。
user-0 提问: c语言函数形参部分

回复:
user: user-1
content: 用肯定可以这么用，但理解起来比较痛苦而已 #include <stdlib.h> #include <stdio.h>  int a1(char ****s) {         printf("%s\n", s); } int main() {         char ****s = "aaaaaa";         a1(s); }  刚在gcc下编译了一下，我这个赋值不太正确，导致编译的时候给了个warn 警告：从不兼容的指针类型初始化。 运行打印了一个正确的结果 aaaaaa

user: user-2
content: 《牛肉干》 C语言上机课，某女同学偷偷吃起牛肉干。 有一粒牛肉干掉到了键盘上，卡在7和8键之间。 女同学就在键盘上抠啊、抠啊、抠啊…… 程序里一行代码变成这个样子： int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a; 后来的结局是 ————程序顺利通过编译，运行结果正确！

user: user-3
content: ordre-->order     ：还有命令的意思

user: user-3
content: ordre-->order     ：顺序 indices-->index 的复数 ：索引 et --->and      和 adressage adress  - age 可寻址的

user: user-4
content: 引用 2 楼 watsonzhouCA 的回复:那注释部分printf什么的是什么意思呢  /*printf("\nCOUCOU1\n");*/  /* modif MB 04/09 : ordre indices et adressage */这两个注释部分是什么意思？   这两句，第一句printf就是一个简单的输出语句：换行输出COUCOU1再换行，没有其他意思 第二句，写的比较简略，看起来不像英文，不过其语句应是说明那天谁修改了此处什么功能。

user: user-0
content: 那注释部分printf什么的是什么意思呢

user: user-5
content: 1、指针就是个数，指向的是地址，例子： *p   ->  "xxx" **p  -> "xxx", "xxx" ***p  ->  {"xxx", "xxx"}, {"xxx", "xxx"} ****p  ->  {{"xxx", "xxx"}, {"xxx", "xxx"}}, {{"xxx", "xxx"}, {"xxx", "xxx"}} ... 嵌套多少层看你自己，不过会很晕哦~ 2、调用，不是定义 *tabint= (pixelsig ***) tab3D_dyna(nblig-1, nbcol-1, 3, pix16styp); 定义可能是 int tab3D_dyna(int x, int y, int step) 返回值不是pixelsig ***类型，做了一个强制转换
user-0 提问: 这样的按键解法怎样实现

回复:
user: user-1
content: struct   moc {     int value;//假设脉冲的值 value 为[0 3]     ..... }       switch(value) {     case 1： printf(""); break; case 2: .. break; default: break; }  用两个I/O判断就根据俩个接口的value值组合判断

user: user-0
content: 能给我模拟一个程序出来吗？

user: user-1
content: 根据与脉冲相关的参数判断

user: user-0
content: 那这个程序怎么写？

user: user-1
content: 估计是一个信号量类参数吧

user: user-0
content: 代码就跟你的一样啊，我吧能用的逻辑语句都试过了。这个接法的按键我觉得用IF语句判断高低电平实现不了。老师跟我说是用脉冲的方法实现按键的判断.那脉冲怎么判断啊？

user: user-1
content: 把代码贴上来瞅瞅

user: user-0
content: 这样我试过，也不行

user: user-1
content: if{P1_3==0&&P2_3==0}; 类似这样？
user-0 提问: 好像要给他分配动态内存，我该怎么办，大家看一下

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你的问题和这个一样： http://bbs.csdn.net/topics/391905841 数组长度不能动态指定，需要malloc 嗯！数组长度不能动态指定

user: user-0
content: 我把数组换成指针就可以分配动态内存。看来我得看完书才知道。

user: user-1
content: 你的问题和这个一样： http://bbs.csdn.net/topics/391905841 数组长度不能动态指定，需要malloc
user-0 提问: 关于二叉树层序创建的问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:while循环里面的else语句缺少花括号改了还是不行啊，能帮我改改吗

user: user-1
content: #include<stdio.h> using namespace std; #include<iostream> #include<malloc.h> struct queue     //队列结构体  { 	struct tree * data[20]; 	int front; 	int reat; }; struct tree     //二叉树 结构体  { 	char data; 	struct tree *left; }; void rudui(struct queue *p, struct tree *val); bool panduan(struct queue *p); struct tree * chudui(struct queue *p); struct tree *create(void); void xianxubianli(struct tree *p); int main(void) {  	struct tree *p = create();//动态创建二叉树 	xianxubianli(p);  //先序遍历  	system("pause"); 	return 0; } void rudui(struct queue *p, struct tree *val)   //入队  { 	if (panduan(p)) 		printf("队列已满\n"); 	else 		p->data[p->reat] = val; 	p->reat = (p->reat + 1) % 20; 	return; } bool panduan(struct queue *p)      //判断队列是否满了  { 	if (p->front == (p->reat + 1) % 20) 		return true; 	else 		return false; } struct tree * chudui(struct queue *p)   //出队  { 	struct tree *T; 	if (p->front != p->reat) 	{ 		T = p->data[p->front]; 		p->front = (p->front + 1) % 20; 		return T; 	} 	else 		printf("队列为空\n"); 	return 0; } struct tree *create(void)      //层序创建二叉树  { 	char data;                  //根结点存放的数据  	char dataleft;              //左子树存放的数据 	char dataright;               //右子树存放的数据 	struct queue Q; 	Q.front = 0; 	Q.reat = 0; 	struct tree *BT, *T;           //BT是根结点，T是子结点  	cin>>data; 	if (data != 0) 	{ 		BT = new tree(); 		BT->data = data; 		rudui(&Q, BT); 	} 	else 		return NULL; 	while (Q.front != Q.reat) 	{ 		T = chudui(&Q); 		cin >>dataleft; 		if (dataleft == 0) 			T->left = NULL; 		else{ 			T->left = new tree(); 			T->left->data = dataleft; 			 		} 		cin>>dataright; 		if (dataright == 0) 			T->right = NULL; 		else{ 			T->right = new tree(); 			T->right->data = dataright; 		}  	} 	return BT; } void xianxubianli(struct tree *p) { 	if (p) 	{ 		printf("%c ", p->data); 		xianxubianli(p->left); 		xianxubianli(p->right);  	} 	return; }

user: user-1
content: 调试结果截图给我看下

user: user-1
content: 两个else语句都要加花括号

user: user-1
content: while循环里面的else语句缺少花括号
user-0 提问: 小弟初学,求大神模拟程序的代码

回复:
user: user-1
content: 简单代码模拟如下： 	int nTotal = pow(7.0,7.0); 	int nRes = 0; 	int arrRes[6]; 	int arrMap[3][3]; 	memset(arrMap,0,9*4); 	memset(arrRes,0,6*4); 	  	for (int k=0;k<nTotal;k++) 	{ 		nRes = 0; 		memset(arrMap,0,9*4);  		for (int i=0;i<3;i++) 		{ 			for (int j=0;j<3;j++) 			{ 				arrMap[i][j]=rand()%7; 			} 		}  		for (int i=0;i<3;i++) 		{ 			if (arrMap[i][0]==arrMap[i][1]&&arrMap[i][2]==arrMap[i][1]) 			{ 				nRes++; 			} 		} 		 		if (arrMap[0][0]==arrMap[1][1]&&arrMap[2][2]==arrMap[1][1]) 		{ 			nRes++; 		}  		if (arrMap[0][2]==arrMap[1][1]&&arrMap[2][0]==arrMap[1][1]) 		{ 			nRes++; 		} 	     		arrRes[nRes]++; 	} 	 	CString strTxt,strTemp; 	double x = 0.0; 	for (int i=1;i<6;i++) 	{ 		x = (double)arrRes[i]/(double)nTotal; 		strTemp.Format("第【%d】情况的概率为：%.4f\r\n",i,x); 		strTxt+=strTemp; 	}

user: user-2
content: 这是一个概率问题吧。这个概率计算的话。。。得先看这个转盘的设计啊。 我概率不好。不计算了。
user-0 提问: 看看为什么输出的结果不对

回复:
user: user-0
content: void fun(int M,int N,int a[M][N],int b[N][M])//矩阵的转置函数，矩阵定义为变长矩阵（VLA） {     int i;     int j;     for(i=0;i<N;i++)         for(j=0;j<M;j++)             b[i][j]=a[j][i];     return b; } void print(int m,int n,int c[m][n])//输出矩阵，矩阵定义为变长矩阵（VLA） {     int i=0;     int j=0;     printf("矩阵:\n");     for(i=0;i<m;i++)     {         for(j=0;j<n;j++)         {             printf("%d ",c[i][j]);         }         printf("\n\n");     }     printf("\n\n"); }

user: user-0
content: 自己对变长数组的使用错了，谢谢大家了  void fun(int M,int N,int a[M][N],int b[N][M])//矩阵的转置函数，矩阵定义为变长矩阵（VLA） {     int i;     int j;     for(i=0;i<N;i++)         for(j=0;j<M;j++)             b[i][j]=a[j][i];     return b; } void print(int m,int n,int c[m][n])//输出矩阵，矩阵定义为变长矩阵（VLA） {     int i=0;     int j=0;     printf("矩阵:\n");     for(i=0;i<m;i++)     {         for(j=0;j<n;j++)         {             printf("%d ",c[i][j]);         }         printf("\n\n");     }     printf("\n\n"); }

user: user-1
content: 看这个帖子 http://bbs.csdn.net/topics/391902323

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

user: user-3
content: 你的数组穿参，怎么传的。 改成这样： void print(int c[][N],int m,int n)  你写的小写的n，n是多少，你知道吗?没有初始化，在这里也是多余的，直接用N就行了。

user: user-4
content: 引用 2 楼 user-6 的回复:数组的大小必须在编译时就确定，如果你需要在运行时确定数组大小，需要动态分配内存 这个回复多想想，动态分配内存要malloc，编译器不管你用多少，不指明M、N数组a、b都没法分配空间。顺便问一下，能通过编译吗？

user: user-0
content: 引用 5楼QQ736238785 的回复:这是将一个3x2的矩阵转置： main() {   int x[3][2],y[2][3],i,j;   for(i =0 ;i<3 ;i++)      for(j=0;j<2;j++)       {           scanf("%d" ,&x[i][j] );            y[j][i]=x[i][j];        }    for( i=0 ;i<2; i++)       {         for(j=0 ;j<3;j++ )             printf("%d", y[i][j] );        } }转置我是会的。你有没有运行一下我的程序，看看结果呢？

user: user-5
content: 这是将一个3x2的矩阵转置： main() {   int x[3][2],y[2][3],i,j;   for(i =0 ;i<3 ;i++)      for(j=0;j<2;j++)       {           scanf("%d" ,&x[i][j] );            y[j][i]=x[i][j];        }    for( i=0 ;i<2; i++)       {         for(j=0 ;j<3;j++ )             printf("%d", y[i][j] );        } }

user: user-2
content: 思考一下为什么不把整个互联网内容当作函数参数传来传去呢？

user: user-0
content: 引用 2楼user-6 的回复:数组的大小必须在编译时就确定，如果你需要在运行时确定数组大小，需要动态分配内存c99支持变长数组的

user: user-6
content: 数组的大小必须在编译时就确定，如果你需要在运行时确定数组大小，需要动态分配内存
user-0 提问: 读取文件的问题

回复:
user: user-1
content: 把指定文件内容读到控制台  #include <stdio.h> char buf[256]; char *fname = "data.txt"; FILE *fp; int main(void) { 	fp = fopen(fname, "r"); 	if (NULL == fp) return 0; 	while (1) { 		if (NULL == fgets(buf, 256, fp)) break; 		printf("%s\n", buf); 	} 	fclose(fp); 	return 0; }

user: user-1
content: 第10行做修改：  printf("%s", buf);

user: user-2
content: 引用 1 楼 piaobotudou 的回复:size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); size指读取元素的大小，count为读取元素的个数 这里sizeof(Buf)应该是指针的大小，你读取了8个字节，所以你应该编译的是一个64位程序。  应该是这样的，  64位指针是 8 个字节

user: user-3
content: fread(Buf, sizeof(Buf), 1, fp);这个size是有问题的，size之后不是字符串的大小，是Buf这个指针的大小，如果想读出指定的Buf大小，需要当做参数值传进来。楼主你这判断语句里加一个;可以正确执行么？

user: user-4
content: char Buf[SIZE]

user: user-0
content: 收获良多！谢谢！

user: user-5
content: size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); size指读取元素的大小，count为读取元素的个数 这里sizeof(Buf)应该是指针的大小，你读取了8个字节，所以你应该编译的是一个64位程序。

user: user-6
content: 呵呵，也做过sizeof指针这事呢

user: user-7
content: 你的Buf不是字符数组，而只是一个char*的指针，所以sizeof返回的是指针大小4（32位）
user-0 提问: if的多重嵌套可以怎么改进，新手求助

回复:
user: user-1
content: 如果只是求闰年的话，可以跳过检查4的倍数，直接检查是否100,400的倍数 让年数一定是4的倍数就可以了 仅仅是100 的倍数非闰年，同时还是400的倍数，是闰年， 非100 的倍数，是闰年

user: user-0
content: 引用 5 楼 paschen 的回复:四年一闰，百年不闰，四百年再闰  if((year/4==0&&year/100!=0)||(year/400==0)) 显示出来的只有非闰年，没有闰年啊 #include <stdio.h>  int main() { 	int year = 2000; 	for (year = 2000; year <= 2500; year++) 	{ 		if ((year / 4 == 0 && year / 100 != 0) || (year / 400 == 0)) 		{ 			printf("闰%d\n", year); 		} 		else 		{ 			printf("非闰%d\n", year); 		} 	}  	int a = 0; 	scanf("%d",&a); 	//控制程序悬停  	return 0; }

user: user-2
content: 给代码看下 你刚才的例子5楼有解释了

user: user-3
content: 你先给出代码才能改的，没代码改什么？

user: user-4
content: 四年一闰，百年不闰，四百年再闰  if((year/4==0&&year/100!=0)||(year/400==0))

user: user-0
content: 写错了，是4才对

user: user-0
content: 上面直接取余3就行了，我只是想问多重嵌套可以怎么改，求别沉贴

user: user-0
content: 引用 1 楼 user-5 的回复:int k=年 if(k%4==0) { 润年 } 我是想问多重嵌套可以怎么改，上面只是举例

user: user-5
content: int k=年 if(k%4==0) { 润年 }

user: user-4
content: 引用 8 楼 zxq1994929 的回复:[quote=引用 5 楼 paschen 的回复:] 四年一闰，百年不闰，四百年再闰  if((year/4==0&&year/100!=0)||(year/400==0)) 显示出来的只有非闰年，没有闰年啊 #include <stdio.h>  int main() { 	int year = 2000; 	for (year = 2000; year <= 2500; year++) 	{ 		if ((year / 4 == 0 && year / 100 != 0) || (year / 400 == 0)) 		{ 			printf("闰%d\n", year); 		} 		else 		{ 			printf("非闰%d\n", year); 		} 	}  	int a = 0; 	scanf("%d",&a); 	//控制程序悬停  	return 0; }[/quote]  / 换成 % ， 是取余，上面打错了

user: user-5
content: 引用 8 楼 zxq1994929 的回复:[quote=引用 5 楼 paschen 的回复:] 四年一闰，百年不闰，四百年再闰  if((year/4==0&&year/100!=0)||(year/400==0)) 显示出来的只有非闰年，没有闰年啊 #include <stdio.h>  int main() { 	int year = 2000; 	for (year = 2000; year <= 2500; year++) 	{ 		if ((year / 4 == 0 && year / 100 != 0) || (year / 400 == 0)) 		{ 			printf("闰%d\n", year); 		} 		else 		{ 			printf("非闰%d\n", year); 		} 	}  	int a = 0; 	scanf("%d",&a); 	//控制程序悬停  	return 0; }[/quote]  不是除是  %
user-0 提问: 求助,30分，dos+c+esc/pos直接打印二维码

回复:
user: user-0
content: 楼上兄弟，俺是零售系统pos机打印，dos环境下用的c语言开发，esc/pos指令直接打印二维码，不是嵌入式开发。  多谢你的指点。

user: user-1
content: 楼主代码不全吧，端口都没打开

user: user-2
content: fprintf(stdprn,"%s","xxxx"); 这个是嵌入式向打印设备发送命令吧？调试： 1、查看设备支持的命令手册，看发送的命令格式、内容是否正确。（最好了解每条命令代表什么意思） 2、设备要能读出内容，打断点，看看每条命令是否正确发送，是否正确被设备接收。 3、如果和开发手册一样，并且设备正确接收了命令，找芯片厂商定位问题。给厂商描述就是手册说明+实际内存数据。 有兴趣联系我，可以发邮箱user-2@126.com
user-0 提问: 有关 “初始化”: 截断常量值 的warning

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:楼主可以看一下char的取值范围，char的取值范围为-128~127，也就是说，char字节中1一个是符号位，7个是表示的数值 符号位：表示数字 1 111 11111 0xff，也就是 1111 1111，也就是255，超出了char能够表示的范围。 而0x1f，也就是 0001 1111，也就是31，在char的表示的范围内。 按照以上方式，0x7f 0111 1111，也就是127，是char能够表示的最大值了，在这种情况下，不会有warn提示。 嗯，我之前有点搞混了，char在内存中存储是0x00~0xff，就觉得可以直接把0xff赋值给char。

user: user-1
content: 引用 1 楼 user-2 的回复:楼主可以看一下char的取值范围，char的取值范围为-128~127，也就是说，char字节中1一个是符号位，7个是表示的数值 符号位：表示数字 1 111 11111 0xff，也就是 1111 1111，也就是255，超出了char能够表示的范围。 而0x1f，也就是 0001 1111，也就是31，在char的表示的范围内。 按照以上方式，0x7f 0111 1111，也就是127，是char能够表示的最大值了，在这种情况下，不会有warn提示。  感谢@user-2，已经说明白了，题主一定要赋值0xff的话，可以试下这段代码：  unsigned char a = 0xff;

user: user-2
content: 楼主可以看一下char的取值范围，char的取值范围为-128~127，也就是说，char字节中1一个是符号位，7个是表示的数值 符号位：表示数字 1 111 11111 0xff，也就是 1111 1111，也就是255，超出了char能够表示的范围。 而0x1f，也就是 0001 1111，也就是31，在char的表示的范围内。 按照以上方式，0x7f 0111 1111，也就是127，是char能够表示的最大值了，在这种情况下，不会有warn提示。
user-0 提问: Linux 下如何获得 C 程序的代码段,数据段等各段地址.

回复:
user: user-0
content: 引用 11 楼 yuelengdihai 的回复:引用 6 楼 Z_R_Z_798205 的回复:[quote=引用 4楼yuelengdihai 的回复:]打log出来看就行了我换个方式问，如何获得 .text .data 和 .init 的值 Linux中可执行文件的格式是ELF，其实编译过程中的中间文件*.o文件、动态共享库*.so文件也是ELF格式的。在链接器看来，当它通过*.o或者配合*.so文件来生成可执行文件时，它对ELF格式的文件以链接视图(Linking View)进行看待。也就是说链接器以Section的形式来对待和处理ELF文件，诸如我们常见说的代码段(.text)、数据段(.data和.bss)等待概念    readelf –h命令能够可以查看一个EFL文件的头部信息[/quote]  我在 C 源码中这样编写来获得 .text .data 和 .init 的值    extern char _text, _data,_init;  通过上面的代码可以获得对应的值

user: user-1
content: 引用 6 楼 Z_R_Z_798205 的回复:引用 4楼yuelengdihai 的回复:打log出来看就行了我换个方式问，如何获得 .text .data 和 .init 的值 Linux中可执行文件的格式是ELF，其实编译过程中的中间文件*.o文件、动态共享库*.so文件也是ELF格式的。在链接器看来，当它通过*.o或者配合*.so文件来生成可执行文件时，它对ELF格式的文件以链接视图(Linking View)进行看待。也就是说链接器以Section的形式来对待和处理ELF文件，诸如我们常见说的代码段(.text)、数据段(.data和.bss)等待概念    readelf –h命令能够可以查看一个EFL文件的头部信息

user: user-1
content: 引用 6 楼 Z_R_Z_798205 的回复:引用 4楼yuelengdihai 的回复:打log出来看就行了我换个方式问，如何获得 .text .data 和 .init 的值

user: user-0
content: 引用 8 楼 jianwen0529 的回复:这应该是操作系统和文件的东西了吧  系统加载可执行文件到哪里，如何各段在可执行文件中的偏移？  这个问题是在 linux 上 gcc 编译器 ld链接器, .text .data .init 的值应该是由链接器设定,我现在的问题是如何获得这些值.

user: user-2
content: 这应该是操作系统和文件的东西了吧  系统加载可执行文件到哪里，如何各段在可执行文件中的偏移？

user: user-0
content: 引用 4楼yuelengdihai 的回复:打log出来看就行了我换个方式问，如何获得 .text .data 和 .init 的值

user: user-0
content: 引用 3楼nadleeh 的回复:[quote=引用 楼主 Z_R_Z_798205 的回复:] 基于 Linux,如何在编写代码来获得该 C 程序的数据段地址和代码段地址?  楼主忘记 ./  装载器了,应用程序运行时都是动态的[/quote]我换个方式问，如何获得 .text .data 和 .init 的值

user: user-0
content: 引用 1楼赵4老师 的回复:使用嵌入汇编？ 搜“gcc-inline-asm.pdf”我换个方式问，如何获得 .text .data 和 .init 的值

user: user-1
content: 打log出来看就行了

user: user-3
content: 引用 楼主 Z_R_Z_798205 的回复:基于 Linux,如何在编写代码来获得该 C 程序的数据段地址和代码段地址?  楼主忘记 ./  装载器了,应用程序运行时都是动态的

user: user-0
content: 引用 1楼赵4老师 的回复:使用嵌入汇编？ 搜“gcc-inline-asm.pdf”应该和链接器有关

user: user-4
content: 使用嵌入汇编？ 搜“gcc-inline-asm.pdf”
user-0 提问: 关于C语言中的自加运算

回复:
user: user-1
content: 这和程序所用的编译器不同，所算的结果也不同， x=5，x=++x+++x+++x，： 1、优先级自增++，优先于加法运算符+，2、太坑了

user: user-2
content: 庸人自扰之。。。。

user: user-3
content: 想学好c，入门的时候，这类麻烦的问题少研究。前些时看了下考试的题库，真的奇怪为什么会有这些乱起八糟的语句和题目。 如果是为了考试，直接问老师标准答案。 由浅入深，慢慢来。多看下经典的代码例子。

user: user-4
content: 引用 1 楼 happy2study 的回复:说句题外话：如果不是研究编译器，最好别拿这样的问题来烧脑。  加括号让优先级明确才是王道。这样的表达式 加括号毫无意义

user: user-5
content: 进来看看大神们的逻辑！！！

user: user-6
content: 我只能告诉你为什么会出现这种结果。 不能告诉你编译器为什么要这么处理，因为那东西也不是我写的。 不同的编译器会有不同的处理方式，所以这种问题应该没有多大意义（考试应该不考）。

user: user-7
content: 如果你得出的是22，我可以断定你用的是很老的编译器，比如VC6.0. 它的逻辑是i++=6,i++=7;7+7=14;i++=8;14+8=22; 但是新的C++标准不是这样的，应该是 i++=6;i++=7;i++=8;8+8+8=24; 遇到这种问题你可以查看反汇编结果，通过汇编语句查看整个运行情况

user: user-8
content: 这个求值顺序没有标准，6+7+8、7+7+8、8+8+8都可以

user: user-9
content: 结果是24；

user: user-10
content: 语法没规定死这种操作的答案，所以不同的编译器结果不同

user: user-11
content: 这种代码没意义

user: user-12
content: 引用 87 楼 zhao4zhong1 的回复:[quote=引用 86 楼 zilaishuichina 的回复:] 我就好奇 这个2年前的帖子 ，是基于什么原因，被翻出来的 太阳黑子爆发，一缕γ射线击穿了CSDN服务器的时钟，导致其时间计算紊乱了一阵子。[/quote] 大学考试考这个,我竟然醉了,最后不还是得按老师的题库来

user: user-13
content: 引用 72 楼 i_wish 的回复:这个问题， 跟编译器有很大关系。 有的编译器会将 i+1执行4次，在计算4个i的值， 有的则会边加计算，主要看编译器 有些结果是21怎么编译计算的啊

user: user-14
content: 第一次 ++i后i==6 第二次 ++i后i==7 第三次7+7==14 第四次++i后i==8 第五次14+i后 ==22

user: user-15
content: 这种问题虽然很无聊，但还是可以关注一下的。

user: user-16
content: 我也是来看评论的

user: user-17
content: 引用 86 楼 zilaishuichina 的回复:我就好奇 这个2年前的帖子 ，是基于什么原因，被翻出来的 太阳黑子爆发，一缕γ射线击穿了CSDN服务器的时钟，导致其时间计算紊乱了一阵子。

user: user-18
content: 我就好奇 这个2年前的帖子 ，是基于什么原因，被翻出来的

user: user-8
content: 引用 66 楼 zhao4zhong1 的回复:如果上帝当初设计的DNA这个生物编译器没有未定义行为的话，今天还能进化出人类吗？   如果上帝不能设计未定义行为，那么它不是万能的，如果上帝能够设计未定义行为，那么它不能定义所有行为，也不是万能的，于是上帝说...

user: user-19
content: 22  可能是  (++i)+(++i)  = 7  + 7 = 14  + （++i）= 14 + 8 = 22   第二个+运算优先级和第一个+一样  所以 取出栈中元素运算
user-0 提问: linux stat函数问题

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:fgets 最后会带 \n ， 稍微写点代码去掉下。 if ('\n'==filename[strlen(filename)-1]) filename[strlen(filename)-1]=0;

user: user-2
content: fgets 最后会带 \n ， 稍微写点代码去掉下。
user-0 提问: 学了有半个月的语言了，今天发现个小问题，求指教！

回复:
user: user-1
content: float 的精度

user: user-2
content: 这很正常，很多十进制浮点数是不能用二进制精确表示的，浮点数是会有误差的，float有效位数只有7位左右，如果不够可以考虑double

user: user-3
content: 二进制浮点数不能精确表示十进制的小数。  ================= 就像十进制小数不能精确表示 1/3 一样。

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

user: user-5
content: float保留小数点后七到八位，如果你想要变成99.9，可以输出%.1f的格式
user-0 提问: turbo c的一个问题

回复:
user: user-0
content: 3Q 赵4老师

user: user-1
content: 建议学习使用TurboDebug  bc++3.1 帮助里面对每个函数都有一小段能拷贝出来运行看效果的例子程序。非常适合初学C语言。相比较而言VC带的帮助MSDN就没有。http://download.csdn.net/source/2805028

user: user-2
content: 或许可以试试 mov dx aaa  一般来说 ds 可能只有一个，就不用动了。如果用到了多个，估计要用 far 指针 ，就不太清楚了了。

user: user-0
content: 试过了,貌似不起作用,我还是用far指针实现吧,谢谢