Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 一个死循环的功耗是多大?

回复:
user: user-1
content: 引用在我的双核机上查看CPU使用率是50%,每个核各50% 有一半的时间在工作，一半的时间在休息，休息的时候能耗很低。

user: user-2
content: 记得以前的电影里有在CPU上煎鸡蛋的段子,  并且要不停的敲键盘.  我学得CPU还是GPU在不停的运转时, 发热都会增加, 耗电自然会增加, 这点在老的笔记本上很容易测试.  CPU 100%后不一会, 就能听见摩托的声音了.

user: user-3
content: 功耗？这样的问题你想测试什么？或是想搞什么？

user: user-4
content: 啥叫“功耗”？

user: user-5
content: 唉，不要这么考研它 好么？

user: user-6
content: 你所谓的功耗是指的什么？

user: user-7
content: 这也跟cpu没关系吧，只是程序一直执行而已

user: user-8
content: 楼主你真是....绝对是吃饱了没事做的主。。

user: user-9
content: 你看下cpu的瓦数，双核就除一下呗，大概差不多

user: user-10
content: 你想干嘛？好奇

user: user-11
content: while(1){ Sleep(sometime);} 加个sleep函数就行了(不同环境下名称与参数值不一样)。进入sleep后就就会让出cpu的控制权给别的进程用。

user: user-12
content: 就不会调度了额

user: user-13
content: lz，你去绕着操场全速跑一小时会累么？ 为什么会累呢？你又没做俯卧撑。

user: user-14
content: CPU的使用率和功耗没有绝对的关系，cpu占用率低，但是指令代码涉及的寄存器操作多，也会产生较大功耗。while（1）基本上就只设计一个寄存器操作，占用率可以高，但是功耗其实不高

user: user-15
content: 占着坑不拉屎...

user: user-16
content: CPU占用率100%，功耗什么的不知道。

user: user-17
content: 你叫cpu这匹马全速奔跑你还不让它吃草？

user: user-18
content: 拒绝死循环。
user-0 提问: 从一个英语的句子字符串里面获取里面所有单词有没有什么好方法？

回复:
user: user-1
content: 不知道长度可以使用链表。

user: user-2
content: 用strtok（）函数，以空格为分割符，具体请搜索学习

user: user-3
content: istringstream

user: user-4
content: 谭浩强的 c程序设计 第四版 上有计算单词个数的代码，你可以借鉴一下
user-0 提问: 二叉树的部分代码用法，看着甚是头大。

回复:
user: user-1
content: if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) return-1 表示如果malloc失败则返回-1 因为要连续插入所以要ch[inc++]

user: user-0
content: 引用 2 楼 phoenix_1992 的回复:ch[inc++] 这种奇怪的用法，虽然我大概知道它什么意思。还有return1、if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) return-1、ch[inc-1]，不明白它为啥要这样写。接触2叉树不久，觉得理解起来很吃力。  lz底子太薄 能解答一下不？

user: user-2
content: ch[inc++] 这种奇怪的用法，虽然我大概知道它什么意思。还有return1、if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) return-1、ch[inc-1]，不明白它为啥要这样写。接触2叉树不久，觉得理解起来很吃力。  lz底子太薄

user: user-3
content: 这不是二叉树的问题，是你基础的问题。
user-0 提问: 打印单词长度直方图

回复:
user: user-1
content: 这个源程序我还真不知道，能贴全吗？

user: user-0
content: #define MAXHIST 15      //直方图的最大长度   #define MAXWORD 11      //单词的最大长度   #define IN  1       //在单词中   #define OUT 0       //在单词外   void main()   {       int c, i, nc, state;    //nc：单词的长度       int len;        //直方图中每个直方条的长度       int maxvalue;       //wl数组的最大值       int ovflow;     //长度大于或等于MAXWORD的单词的数量       int wl[MAXWORD];    //按单词长度值0~11，统计输入中各长度的单词数，存放在wl数组中          state = OUT;       nc = 0;       ovflow = 0;       for(i = 0; i < MAXWORD; ++i)           wl[i] = 0;          while((c = getchar()) != EOF)           if(c == ' ' || c == '/n' || c == '/t')           {               state = OUT;               if(nc > 0)                   if(nc < MAXWORD)                       ++wl[nc];                   else                       ++ovflow;               nc = 0;           }           else if(state == OUT)           {               state = IN;               nc = 1;           }           else               ++nc;          maxvalue = 0;       for(i = 1; i < MAXWORD; ++i)           if(wl[i] > maxvalue)               maxvalue = wl[i];       for(i = 1; i < MAXWORD; ++i)       {           printf("%5d - %5d : ", i, wl[i]);           if(wl[i] > 0)           {               if((len = wl[i] * MAXHIST / maxvalue) <= 0)                   len = 1;           }           else               len = 0;           while(len > 0)           {               putchar('*');               --len;           }           putchar('/n');       }       if(ovflow > 0)           printf("there are %d words >= %d/n", ovflow, MAXWORD);     }
user-0 提问: 计算一个班30人学生生日同一天概率的程序出问题了

回复:
user: user-1
content: 引用 3 楼 u014541584 的回复:[quote=引用 2 楼 zxh707wk 的回复:] 你的思路本来就有问题，生日是月加日组成的，如果照你这种算法，那闰年和平年的天数就都一样了 这可以忽略了，题目要求的[/quote] 好吧。。。，在书上我也看过类似不考虑实际的题目

user: user-2
content: 引用 4 楼 u014541584 的回复:2楼能说下随机数初始语句放那里有什么区别吗？  整个大循环在快点的cpu上用不了1秒就完了，而time是以秒为单位返回的，那每次初始化种子都是一样的，导致随机数序列也是一样的

user: user-0
content: 2楼能说下随机数初始语句放那里有什么区别吗？

user: user-0
content: 引用 2 楼 zxh707wk 的回复:你的思路本来就有问题，生日是月加日组成的，如果照你这种算法，那闰年和平年的天数就都一样了 这可以忽略了，题目要求的

user: user-1
content: 你的思路本来就有问题，生日是月加日组成的，如果照你这种算法，那闰年和平年的天数就都一样了

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { 	int arr[30],i,j,k,res,num=0,flag=0; 	srand((unsigned int)time(NULL));    //随机数种子初始化放这里 	//k代表统计次数10000次 	for (k=0;k<10000;k++) 	{ 		flag=0; 		 		for (i=0;i<30;i++) 		{ 			if ((res=rand()%365)>32485)      				i--; 			else 				arr[i]=res%365;     		} 		for (i=0;i<29;i++)    		{ 			for (j=i+1;j<30;j++) 			if (arr[i]==arr[j]) 			{ 				flag=1; 				break;    			} 			if (flag==1) 			{ 				num+=1;    				break;     			} 		} 	} 	printf("%d\n",num);     	return 0; }
user-0 提问: 问一个关于用break跳出循环的问题

回复:
user: user-0
content: 好的  谢谢了！ 我是自己看书和视频学习的，也许有的地方遗漏了。。。我也在尽量在规范自己的代码。 谢谢提醒。

user: user-1
content: 同上 附代码： # include <stdio.h>  int main(void) {     int choose ;     int i ;     char ch ;     int a[20]= {1,1};     int n ;     int k ;     for(i=2; i<=19; i++)         a[i]=a[i-2]+a[i-1];     while(1)     {          printf("请选择：\n1.查看Fibonacci数列第n项\n2.查看Fibonacci数列前n项\n");         scanf("%d",&choose);         getchar();         switch(choose)         {         case 1 :             printf("请输入你想查看的项数：\n");             scanf("%d",&n);             getchar();             if(i=n-1)                 printf("第%d项是：%d  \n",n,a[i]);             break ;         case 2 :             printf("请输入你想查看的项数：\n");             scanf("%d",&k);             getchar();             for(i=1; i<=k; i++)             {                 printf("%-5d ",a[i]);                 if(i%5==0)                     printf("\n");             }             printf("\n");             break ;         default :             printf("输入有误！\n");             break ;         }         printf("是否退出（Y/y）?\n");         if((ch=getchar())=='y'||(ch=getchar())=='Y')             break ;     }     return 0 ; }

user: user-2
content: 这个是getchar()的问题，一定要注意，去查下getchar用法吧，getchar()是读取标准输入里的下一个字符，而之前scanf_s("%d", &choose);完了有个回车，这个回车正被后边的getchar()获取了。。。lz多规范下代码吧，对齐，换行，复用神马的  printf("是否退出（Y/y）?\n"); getchar(); ch = getchar(); if(ch == 'y'||ch == 'Y')       break; }

user: user-2
content: ls别误导啊

user: user-0
content: 不是可以用if……break跳出循环么？ 怎么我把break;改成return 0;效果还是一样： 运行结果： --------------------------------------------------------------- 请选择： 1.查看Fibonacci数列第n项 2.查看Fibonacci数列前n项 2 请输入你想查看的项数：5 1     2     3     5     8  是否退出（Y/y）? y 请选择： 1.查看Fibonacci数列第n项 2.查看Fibonacci数列前n项 y 请输入你想查看的项数：1     2     3     5     8  是否退出（Y/y）? Press any key to continue ---------------------------------------------------------------

user: user-3
content: # include <stdio.h>  int main(void) { 		char ch = 'a' ; 	while(1) 	{ 		int choose; 		int i; 	  		int a[20] = {1, 1};  		for (i = 2; i <= 19; i++) 			a[i] = a[i-2] + a[i-1];  		printf("请选择：\n1.查看Fibonacci数列第n项\n2.查看Fibonacci数列前n项\n"); 		scanf_s("%d", &choose); 		switch (choose) 		{ 		case 1: 			int n; 			printf("请输入你想查看的项数：\n"); 			scanf_s("%d", &n);  			if (i = n - 1) 				printf("第%d项是：%d  \n",n, a[i]);break; 		case 2: 			int k; 			printf("请输入你想查看的项数：\n"); 			scanf_s("%d", &k);  			for (i = 1; i <= k; i++) 			{ 				printf("%-5d ", a[i]); 				if (i%5 == 0) 					printf("\n"); 			} 			printf("\n");break; 		default:printf("输入有误！\n");break; 		} 		printf("是否退出（Y/y）?\n"); 		ch = getchar(); 		if(ch  == 'y'||ch == 'Y') 		{ 			return 0; 		} 		 	} 	 	return 0; } 感觉应该是你if((ch = getchar()) == 'y'||(ch = getchar()) == 'Y')           break; }不应该这样写。if语句里面没有break吧。。
user-0 提问: 求解  如何在整型数组中查找出非数字的元素并提醒？

回复:
user: user-0
content: 引用 3 楼 wang0635 的回复: if ((scanf("%d", &a)) != 1) {     ... }   这个我也考虑过 但具体怎么用呢

user: user-1
content: 如果硬要这样的话，可以用getchar()读取输入的字符，然后再转化为数值

user: user-2
content: if ((scanf("%d", &a)) != 1) {     ... }

user: user-0
content: 好吧  用查找函数不是我的水平能办到的  但是我发现把字母和符号按照%d格式输入的时候会都形成一个-800000以下的数  所以我写了以下的程序  确实能够识别单独的字母  可是 3f 4j这种错误输入却被忽略 直接看作是3和4  这怎么解决啊   int main() { int a[1000]; int i,t ; char l; printf("输入若干数字\n"); for(i=0;i<1000;i++) { scanf("%d",&a[i]); t=i; scanf("%c",&l); if(l=='x') break; } printf("输入完毕\n");  for(i=0;i<t;i++) { if(a[i]<-8000000) {printf("\a\a\a失败的输入\n "); goto lable;} }  for(i=0;i<t;i++) printf("%d \n ",a[i]); lable:  return 0; }

user: user-3
content: 整型数组会把内存中的所有数据按照整型数值来对待，不存在什么“非数字的元素” 就像原子炉只认识质子中子电子，你非要它区分出一个人和一头牛一样没意义 楼主面临的问题本质，是处理错误输入，如果楼主愿意接受任何输入，那么就每次从输入中读取一个字符，自行判断是否是数字字符，如果是就组合成数值，不是就报错，不过对于不喜欢这么做甚至只会cin>>a的初学者来说，直接规定“不允许数值以外的输入，否则后果由输入者自负”更好
user-0 提问: c语言的二重指针数组项怎样在函数中初始化？

回复:
user: user-1
content: 赵老师整解啊

user: user-2
content: 先弄明白*是什么和**是什么就知道怎么初始化了

user: user-3
content: #include <stdio.h> struct struct_name {     int d1;     int d2; }; int i; void fun(struct struct_name ***a) {     static int v=1;      *a =(struct struct_name **)v;     v++; } int main() {     struct struct_name **aa[10];      for (i=0;i<10;i++) fun(&aa[i]);     for (i=0;i<10;i++) printf("aa[%d]==%p\n",i,aa[i]);      return 0; } //aa[0]==00000001 //aa[1]==00000002 //aa[2]==00000003 //aa[3]==00000004 //aa[4]==00000005 //aa[5]==00000006 //aa[6]==00000007 //aa[7]==00000008 //aa[8]==00000009 //aa[9]==0000000A //

user: user-4
content: int main()   {    struct_name **aa[10];    for(int i=0;i < 9; i++)       fun(aa[i]);   }   void (fun ***aa)//得用3重指针了 { aa[0]=...aa[1]=.... }

user: user-5
content: 我认为初始化不应该在函数里而应该在main函数里声明之后初始化
user-0 提问: 关于scanf函数%c之前与之后使用空格的问题

回复:
user: user-0
content: 谢谢你的回答，但是我在输入最后一个字符以后输入了一个空格才键入的回车

user: user-1
content: 你看c标准里对scanf format的说明 Whitespace character: the function will read and ignore any whitespace characters encountered before the next non-whitespace character (whitespace characters include spaces, newline and tab characters -- see isspace). A single whitespace in the format string validates any quantity of whitespace characters extracted from the stream (including none).  如果你是"%c ", 读完所有的字符后，还需要匹配一个" ", 你输入任何空白字符或非空白字符都可以完成匹配. 但必须有这么一个字符。 如果是" %c", 第一个" "在碰到你输入的a时就完成匹配了 。(参见标准中最后那个including none)
user-0 提问: 关于命令行参数argc和argv，请教。

回复:
user: user-0
content: 大哥，谢谢，但是我想知道vc的情况，你帮我发vs的流程。

user: user-1
content: argc 运行参数个数 argv 运行参数

user: user-2
content: 因为程序名本身也算一个。 因此 = 1 ， 你不输入就是1 所以他是判断 !=2 即是否输入一个参数。

user: user-2
content: 引用 2 楼 u014082409 的回复:我刚才自己用vc运行了程序，为什么这个点击run之后，就直接Usage：find pattern,然后按任意键就没了。 运行时需要参数 vs的：在项目（Project）菜单中打开当前程序属性（Properties）→配置属性（Configuration Properties）→调试（Debugging）→命令参数（Command Arguments），然后将需要的参数写在命令参数后面，有多少写多少参数间用空格间开即可。 命令行运行 写在程序名后面即可。 用空格隔开 如果本身有空格 用双引号

user: user-3
content: VC6：  工程、设置、Debug、U程序变量：填写命令行参数。 VS20XX：  项目、属性、配置属性、调试、命令参数：填写命令行参数。

user: user-0
content: 我刚才自己用vc运行了程序，为什么这个点击run之后，就直接Usage：find pattern,然后按任意键就没了。

user: user-4
content: 就是在运行程序的时候需要输入一个参数
user-0 提问: div函数为何没有double版本？

回复:
user: user-1
content: div是对整数求商和余数的， 浮点数没有求余的说法。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:1.234除以0.567到底应该余几呢？ 但是不是说用/的话结果是取决于编译器的吗

user: user-2
content: 1.234除以0.567到底应该余几呢？

user: user-2
content: div Computes the quotient and the remainder of two integer values.  div_t div( int numer, int denom );  Routine Required Header Compatibility  div <stdlib.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  div returns a structure of type div_t, comprising the quotient and the remainder. The structure is defined in STDLIB.H.  Parameters  numer  Numerator  denom  Denominator  Remarks  The div function divides numer by denom, computing the quotient and the remainder. The div_t structure contains int quot, the quotient, and int rem, the remainder. The sign of the quotient is the same as that of the mathematical quotient. Its absolute value is the largest integer that is less than the absolute value of the mathematical quotient. If the denominator is 0, the program terminates with an error message.  Example  /* DIV.C: This example takes two integers as command-line  * arguments and displays the results of the integer  * division. This program accepts two arguments on the  * command line following the program name, then calls  * div to divide the first argument by the second.  * Finally, it prints the structure members quot and rem.  */  #include <stdlib.h> #include <stdio.h> #include <math.h>  void main( int argc, char *argv[] ) {    int x,y;    div_t div_result;     x = atoi( argv[1] );    y = atoi( argv[2] );     printf( "x is %d, y is %d\n", x, y );    div_result = div( x, y );    printf( "The quotient is %d, and the remainder is %d\n",            div_result.quot, div_result.rem ); }   Output  x is 876, y is 13 The quotient is 67, and the remainder is 5     Floating-Point Support Routines  See Also   ldiv
user-0 提问: 新手求助，输出为什么是3

回复:
user: user-1
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-2
content: #define宏定义只是在预编译的时候进行了文本替换，所以如上就是3， lz可以这样写#define M(a,b) ((a)>(b)?(a):(b))

user: user-0
content: 引用 1 楼 yaomoon 的回复:宏定义展开后： n=5+1+2>3+4?1+2:3+4; 根据运算符优先级，三目运算符（？：）优先级比+ 低，但比= 大，所以实际为： n=(5+1+2)>(3+4)?(1+2):(3+4);   输出结果n = 1+2  为3 谢谢！

user: user-3
content: 5+a+b>c+d?a+b:c+d 然后看置顶表达式求值顺序的帖子。

user: user-4
content: 宏定义展开后： n=5+1+2>3+4?1+2:3+4; 根据运算符优先级，三目运算符（？：）优先级比+ 低，但比= 大，所以实际为： n=(5+1+2)>(3+4)?(1+2):(3+4);   输出结果n = 1+2  为3

user: user-5
content: 运算符的顺序弄错了
user-0 提问: 代码功能是，将一个菜单项的字符串改变，运行没效果，哪位帮我看看

回复:
user: user-1
content: AdjustTokenPrivileges VirtualProtectEx WriteProcessMemory ……

user: user-2
content: SetMenuItemInfo不能跨进程修改吧

user: user-0
content: 我已经解决了，里面还需要定义mii.DyTyoeDate,需要申请内存，不然就报错

user: user-3
content: 引用 1 楼 buyong 的回复:SetMenuItemInfo不能跨进程修改吧 我想打开网银界面 然后把余额改为1000000000000.。。。。
user-0 提问: gcc内联arm汇编，汇编代码如何使用c中标号

回复:
user: user-1
content: 引用 10 楼 u014538351 的回复:[quote=引用 8 楼 nadleeh123 的回复:] [quote=引用 7 楼 u014538351 的回复:] [quote=引用 3 楼 nadleeh123 的回复:] [quote=引用 2 楼 u014538351 的回复:] [quote=引用 1 楼 nadleeh123 的回复:] [quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义[/quote] 包含函数的.o文件加到命令链进来没[/quote] 你说的是单独的一个asm吗，内联汇编呢？[/quote] 一回事啊[/quote] 具体是?  void test(){  int a=0,b=1;  __asm("mov r1,r0 \n"  );  lab:  a=2*b;  }  比如这个，我怎么才能在汇编中使用标号lab[/quote] 这个真没干过，标签这个玩意儿在汇编阶段如果是以符号的形式存在，那是可以直接跳的，但我不确定是不是，或者说编译器怎么处理，如果在编译生产汇编的阶段就把标签拿掉了，换成函数+偏移的形式，那你也只能去算那个位置。

user: user-0
content: 引用 3 楼 nadleeh123 的回复:[quote=引用 2 楼 u014538351 的回复:] [quote=引用 1 楼 nadleeh123 的回复:] [quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义[/quote] 包含函数的.o文件加到命令链进来没[/quote] 你说的是单独的一个asm吗，内联汇编呢？

user: user-2
content: gcc-inline-asm.pdf

user: user-3
content: 这个是c和汇编联合编程吗

user: user-1
content: 引用 2 楼 u014538351 的回复:[quote=引用 1 楼 nadleeh123 的回复:] [quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义[/quote] 语法上支持这么做的,像arm的boot通过srom把cpu,mmu,初始化之后,再通过sram初始化内存后,加载boot后半截到内存,再跳到内存去只执行,写的就是b main,但体是bl bx 还是b 我忘记了,这几个指令有点区别.

user: user-1
content: 引用 2 楼 u014538351 的回复:[quote=引用 1 楼 nadleeh123 的回复:] [quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义[/quote] 包含函数的.o文件加到命令链进来没

user: user-0
content: 引用 1 楼 nadleeh123 的回复:[quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义

user: user-0
content: 引用 8 楼 nadleeh123 的回复:[quote=引用 7 楼 u014538351 的回复:] [quote=引用 3 楼 nadleeh123 的回复:] [quote=引用 2 楼 u014538351 的回复:] [quote=引用 1 楼 nadleeh123 的回复:] [quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义[/quote] 包含函数的.o文件加到命令链进来没[/quote] 你说的是单独的一个asm吗，内联汇编呢？[/quote] 一回事啊[/quote] 具体是?  void test(){  int a=0,b=1;  __asm("mov r1,r0 \n"  );  lab:  a=2*b;  }  比如这个，我怎么才能在汇编中使用标号lab

user: user-1
content: 引用 楼主 u014538351 的回复:我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊

user: user-0
content: 具体是? void test(){ int a=0,b=1; __asm("mov r1,r0 \n"  ); lab: a=2*b; } 比如这个，我怎么才能在汇编中使用标号lab

user: user-1
content: 引用 7 楼 u014538351 的回复:[quote=引用 3 楼 nadleeh123 的回复:] [quote=引用 2 楼 u014538351 的回复:] [quote=引用 1 楼 nadleeh123 的回复:] [quote=引用 楼主 u014538351 的回复:] 我想根据汇编中的结果进行跳转。 (第一次来csdn论坛，不知可不可以发这种非技术贴，如果不能，请版主帮忙删帖) b指令+地址啊[/quote] 我在内联汇编中b+标号，编译器提示该标号未定义[/quote] 包含函数的.o文件加到命令链进来没[/quote] 你说的是单独的一个asm吗，内联汇编呢？[/quote] 一回事啊
user-0 提问: 大神们帮我看看哪里错了

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-2
content: lz可以规范一下吗  神马对齐啊，换行啊。。。。别乱用头函数

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

user: user-4
content: lz这是c代码还是c++代码啊？自己能确定吗？

user: user-4
content: # include <iostream>    printf("\n"); ???

user: user-0
content: 改了，但我发现是工程上的错误，我只建立文件就可以运行

user: user-5
content: main的格式不对，改成int main（int argc, char* argv[]）

user: user-6
content: 工程属性建错了，应该是console

user: user-7
content: 如果你是先建立的工程 ，再建立的源代码文件。 那么你选工程时就要注意选择console程序不要选择成windows application程序了。

user: user-8
content: #include<stdio.h>  int main(void) {  int  a[4][4],b[4][4],i,j;    printf("input 16 numbers: ");      for(i=0;i<4;i++)  {  for(j=0;j<4;j++)        {  scanf("%d",&a[i][j]);           b[3-j][i]=a[i][j];         }  }    printf("array b:\n");    for(i=0;i<4;i++)       {  for(j=0;j<4;j++)          printf("%6d",b[i][j]);          printf("\n");        }     return 0; }
user-0 提问: break不起作用啊，求解释

回复:
user: user-1
content: 引用 4 楼 u014045619 的回复:好象有时候我用一个break就跳出了所有嵌套的循环啊  for(;;)//循环1 {       for(;;)//循环2       {}       break;//此时的break是跳出了所有的循环 }   break是跳出break语句所在的循环，这个例子里，break跳出的就是循环1，但是循环1包含了循环2，那么这个break的效果就是跳出了所有的循环，但本质还是跳出一层循环

user: user-0
content: 引用 1 楼 user-3 的回复:break可以跳出循环  但是不能跳出所有循环 引用 2 楼 huchenguang 的回复:#include <stdio.h> #include <math.h> int main(void) {     int i,k,n,tag=0;     int a[3][4]={{1,2,3},{4,5,6},{7,8,9}};     scanf("%d",&n);     for(i=0;i<3;i++)     {         for(k=0;k<4;k++)         {             if(a[i][k]==n)             {                 tag=1;                 printf("%d %d\n",i,k);                 break;//跳出内层for循环             }         } 		if(tag == 1)//这里加上判断，如果tag == 1，跳出外层循环 			break;     }     if(tag==0)         printf("-1\n");     return 0; }  break是跳出当前一层循环，你的程序里是2层for循环，第一个break是跳出内层for循环，但仍在外出循环中 引用 3 楼 jerry_dqh 的回复:你有好几个循环  好象有时候我用一个break就跳出了所有嵌套的循环啊

user: user-2
content: 你有好几个循环

user: user-1
content: #include <stdio.h> #include <math.h> int main(void) {     int i,k,n,tag=0;     int a[3][4]={{1,2,3},{4,5,6},{7,8,9}};     scanf("%d",&n);     for(i=0;i<3;i++)     {         for(k=0;k<4;k++)         {             if(a[i][k]==n)             {                 tag=1;                 printf("%d %d\n",i,k);                 break;//跳出内层for循环             }         } 		if(tag == 1)//这里加上判断，如果tag == 1，跳出外层循环 			break;     }     if(tag==0)         printf("-1\n");     return 0; }  break是跳出当前一层循环，你的程序里是2层for循环，第一个break是跳出内层for循环，但仍在外出循环中

user: user-3
content: break可以跳出循环  但是不能跳出所有循环
user-0 提问: 指针赋值时提示类型不匹配

回复:
user: user-0
content: 引用 2 楼 jerry_dqh 的回复:因为const 非const之间转换。我的疑问是，这个宏本来就是const与非const之间的转化，为什么其他的没有警告呢？

user: user-0
content: 引用 1 楼 astrotycoon 的回复:自己顶一下！我的疑问是，这个宏本来就是const与非const之间的转化，为什么其他的没有警告呢？

user: user-1
content: 引用补充：另外，对于这个宏我还有些疑惑，比如这个宏完全可以这样写啊 C/C++ code ? 1 2 #define container_of(ptr, type, member) ({                      \           (type *)( (char *)ptr - offsetof(type,member) );})  我想问的是，这个宏的不这样写的原因是什么呢  这样写是可以，但是有一定的隐患，不能在编译阶段发现错误，原来的写法可以在编译阶段做一个类型的检查,举个例子 有一个结构体 struct teacher {     char name[10];     int id[15];  //这里与student不一样。int型，原来为char     int age;    }; int main(int argc, const char *argv[]) {     struct student stu = {       };        struct teacher t1 = {};     struct student *pstu = container_of(&t1.id, struct student, id);      //直接用新定义的宏，检查不出来有问题。                                     printf("pstu->name = %s, pstu->id = %s, pstu->age = %d\n", pstu->name, pstu->id, pstu->age);      return 0; }  主要还是做一个表态的检查。

user: user-1
content: 因为const 非const之间转换。

user: user-0
content: 自己顶一下！
user-0 提问: 为什么输入y不能循环vs2013

回复:
user: user-1
content: 请判断scanf_s函数的返回值. 必要时还需rewind(stdin);  scanf_s(" %c",&ch);应改为scanf_s(" %c",&ch,1);

user: user-1
content: scanf_s用法错误. // crt_scanf_s.c // This program uses the scanf_s and wscanf_s functions // to read formatted input.    #include <stdio.h>  int main( void ) {    int      i,             result;    float    fp;    char     c,             s[81];    wchar_t  wc,             ws[81];     result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,                      &wc, 1, s, 80, ws, 80 );    printf( "The number of fields input is %d\n", result );    printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c,            wc, s, ws);    result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,                       &wc, 1, s, 80, ws, 80 );    wprintf( L"The number of fields input is %d\n", result );    wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp,             c, wc, s, ws); }

user: user-0
content: 输入y就不循环，就结束上了。这是为什么。

user: user-2
content: 引用 楼主 u012062569 的回复:#include <stdio.h> #include <math.h>  int main(void) { 	double a, b, c, d, x1, x2; 	char ch;  	do 	{ 		printf("欢迎使用二元一次方程计算器\n"); 		 		printf("a="); 		scanf_s("%lf", &a);  		printf("b="); 		scanf_s("%lf", &b);  		printf("c="); 		scanf_s("%lf", &c);  		d = b*b - 4 * a*c;  		if (d > 0) 		{ 			x1 = (-b + sqrt(d)) / (2 * a); 			x2 = (-b - sqrt(d)) / (2 * a); 			printf("方程的解有两个X1=%lf\nX2=%lf\n", x1, x2); 		} 		else if (d = 0) 		{ 			x1 = x2 = (-b + sqrt(d)) / (2 * a); 			printf("方程有唯一的解为:%lf\n", x1); 		} 		else 			printf("此方程无解\n"); 		printf(" 继续请输入Y，否则按任意键退出\n"); 		scanf_s(" %c",&ch); 	} while ('y' == ch || 'Y' == ch); 	  	return 0; } 输入的绝对不是y，你可以打印看看.
user-0 提问: 关于词法分析器

回复:
user: user-1
content: flex才是王道

user: user-2
content: lz可以参考下http://blog.csdn.net/phoenix_1992/article/details/8801092

user: user-3
content: 未包含头文件 #include<stdlib.h> #include<conio.h> token='' 这个不对，是个字符就有长度。
user-0 提问: 测试write和read函数的一个小程序出问题 求指教

回复:
user: user-1
content: 单步下，确认程序到到那里了？ 另外buf[i] = i;这里是给一个Byte来储存数据的，对于这里也足够了，所以后面写数据的话，也没必要乘以sizeof(int) 判断下所有数据写成功后，再成功吧！

user: user-2
content: 大概有这么几个问题吧： 1）33行赋值，把int型的值赋给char类型的是不合适的。可以改为char buf[LEN]={'0','1','2','3','4'};去掉下面赋值的for循环。 2）39行write函数的参数写错了。应该写为：if (write(fd, buf, LEN) != LEN)，第三个参数为数组长度。 3）49行read函数有点错误，应该写为while ((n = read(fd, buf, LEN)) > 0)，第三个参数为数组长度；另外while里面也应该再有个括号（标红的），要不然会只读一个值的。

user: user-3
content: //while (n = read(fd, buf, LEN*sizeof(int)) > 0) { while ( ( n = read(fd, buf, LEN*sizeof(int)) ) > 0)  {

user: user-3
content: //char buf[LEN]; int buf[LEN];

user: user-4
content: 在语句 lseek(fd, 0, SEEK_SET); 之前插入一句： fsync(fd); 或 fdatasync(fd); 看看。
user-0 提问: 关于指针变量赋值地址的疑问

回复:
user: user-1
content: 回复#17 楼：         你试一下++（--p）; 另：任何赋值表达式的 左边 必须是一个左值，楼主还是分两步写吧

user: user-2
content: 赋值号左边是不允许做数值运算的

user: user-3
content: 引用 18 楼 lm_whales 的回复:p+= n 也是左值，p  = p+10; 也是左值，因为赋值表达式的结果是，表达式左边的值； 赋值表达式右边，只是拿来计算左边的，赋值过程本身，是赋值表达式的副作用。 表达式求值，结果是计算出整个表达式的值。

user: user-4
content: 变量+常量 ==常量

user: user-5
content: 引用 15 楼 lm_whales 的回复:一个具体的地址是右值，指针变量，才可能是左值。 指针算术运算的结果是右值，不是左值。 左值表达式是可以赋值的，右值表达式不能赋值。  out + 1是右值表达式不能赋值。  任何左值，同时也是一个右值； 所以分析表达式的时候，左值表达式，被修改（写）的时候是左值，被访问（读）的时候，也就是个右值。+1

user: user-3
content: 一个具体的地址是右值，指针变量，才可能是左值。 指针算术运算的结果是右值，不是左值。 左值表达式是可以赋值的，右值表达式不能赋值。  out + 1是右值表达式不能赋值。  任何左值，同时也是一个右值； 所以分析表达式的时候，左值表达式，被修改（写）的时候是左值，被访问（读）的时候，也就是个右值。

user: user-3
content: p+= n 也是左值，p  = p+10; 也是左值，因为赋值表达式的结果是，表达式左边的值；

user: user-3
content: 哦，自增自减运算比较特殊 ++p，--p 的结果是左值， p++,p-- 的结果是右值，

user: user-6
content: 你无法给一个表达式赋值，因为表达式是抽象的，不能当左值！

user: user-7
content: out[1]=buf[2];

user: user-8
content: 引用 7 楼 lijunbiao2080 的回复:out + 1是一个表达式，不能给表达式赋值，只能给变量赋值。 怎么哪都有这种抽风+经回答。

user: user-9
content: out+1不是左值。。。

user: user-10
content: 必须是左值，out+1不是左值

user: user-6
content: 你无法给一个表达式复制，因为他不是一个具体的对象，或者说他不能作为左值。 ------------------------------------------------------------------------------------------------------------------------------------------ 出现在复制符号左边的被称为左值（由于他位于“左手边”或者“表示地点”），出现在复制符号的右边的符号有时候则被称为幼稚（由于他位于“右手边”）。编译器为每个变量分配一个地址（左值）。这个地址在编译时可知，而且在该变量在运行时一直保存与这个地址。相反，存储变量中的值（他的右值）只是在运行时才可知。如果需要用到变量中存储的值，编译器就会发出指令从指定地点读入变量的值并将它存在寄存器中。

user: user-11
content: 引用 7 楼 lijunbiao2080 的回复:out + 1是一个表达式，不能给表达式赋值，只能给变量赋值。错了 是只能给表达式赋值

user: user-12
content: out + 1是一个表达式，不能给表达式赋值，只能给变量赋值。

user: user-13
content: 因为一个变量+1的结果是一个临时变量，不是原来的变量

user: user-14
content: #include "stdafx.h" #include   <stdio.h>    char   buf[10]   =   "hello";    void   pro2( char   *out)   {   out = out + 1;   //可能比较危险，自己掂量  out=&buf[2];//提示不能修改左值，但是我换成out=&buff[2]就可以通过啦    printf("out=%s\r\n",out);

user: user-11
content: int i = 10; i+1 = 99;//提示不能修改左值，但是我换成 i=99 就可以通过啦 发现自己有多傻了吗?

user: user-15
content: 不能做左值，分两步走吧
user-0 提问: c语言写的加法，不知道哪里错了，求助

回复:
user: user-1
content: sum没有初始化

user: user-2
content: 你要的是：  for(i=1;i<n;i++) {     b = a*pow(10,i-1)+a;     sum += b; }  加个括号循环的意思吗？  引用 楼主 u014477038 的回复:代码如下： #include <stdio.h> #include <math.h> int main(){ 	int a,b,n,sum,i; 	printf("请输入两个数字（第一个数字为a，第二个数字为n）：\n"); 	scanf("%d%d",&a,&n); 	if(n>1){ 		for(i=1;i<n;i++) 			b = a*pow(10,i-1)+a; 			sum += b; 	}else 		sum = a;	 	printf("和为：%d\n",sum); 	system("pause"); 	return 0; }

user: user-1
content: 引用 7 楼 u014477038 的回复:[quote=引用 2 楼 u013107295 的回复:] sum没有初始化 怎么给你加分o.o  刚刚接触csdn[/quote] 好像是结贴

user: user-0
content: 引用 2 楼 u013107295 的回复:sum没有初始化 怎么给你加分o.o  刚刚接触csdn

user: user-3
content: 引用 4 楼 u014477038 的回复:[quote=引用 2 楼 u013107295 的回复:] sum没有初始化 可以正确的加出结果来了，可是为什么没初始化就会算不出正确的结果呢？？[/quote]没初始化的话，放置sum值的区域就是一个随机的值，打个比方：上一个程序在sum值所在的内存区域赋了个值3，等到你这个程序运行，假如sum还是在那块内存区域，sum没有被初始化，它的默认值就还是3，而不是你需要的0.

user: user-0
content: 引用 1 楼 turingo 的回复:你要的是：  for(i=1;i<n;i++) {     b = a*pow(10,i-1)+a;     sum += b; }  加个括号循环的意思吗？  [quote=引用 楼主 u014477038 的回复:] 代码如下： #include <stdio.h> #include <math.h> int main(){ 	int a,b,n,sum,i; 	printf("请输入两个数字（第一个数字为a，第二个数字为n）：\n"); 	scanf("%d%d",&a,&n); 	if(n>1){ 		for(i=1;i<n;i++) 			b = a*pow(10,i-1)+a; 			sum += b; 	}else 		sum = a;	 	printf("和为：%d\n",sum); 	system("pause"); 	return 0; }[/quote]  这个循环有点问题，我再琢磨一下，谢谢回答，楼下给出了正解了

user: user-0
content: 引用 2 楼 u013107295 的回复:sum没有初始化 可以正确的加出结果来了，可是为什么没初始化就会算不出正确的结果呢？？

user: user-4
content: 楼上说的对，sum没有初始化
user-0 提问: 有多个源代码文件，如何让结构体数组当形参？

回复:
user: user-1
content: 菜鸟啊，无语了  typedef struct  tagBOOK { ................................... }BOOK;  BOOK  books[NUM]; BOOK  *p=books; void  view(int  x ,BOOK  *n);//函数声明  形参名可以省就一定要省吗？垃圾里捡的包子可以吃你是否也一定要吃吗？ 别问为什么，这种问题你都不会说明你根本听不懂我说什么 用手做比用嘴问来的快。

user: user-2
content: 你两段代码不在同一个文件里 struct book没有定义啊…   同意2楼

user: user-3
content: 你要把结构体定义在头文件中 xxx.h struct book{    ... };  然后每个.c中 #include "xxx.h"

user: user-4
content: 上面函数声明和定义中把struct都去掉 struct是自定义类型，book已经表示了该结构体的全部信息
user-0 提问: jbyteArray 变量作为参数传给C进行处理后，如何将结果在返回给参数jbyteArray 变量

回复:
user: user-1
content: 参考下吧。 JNI代码（包含Hello.c, Hello.h） Hello.h(由javah生成)： /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class Hello */  #ifndef _Included_Hello #define _Included_Hello #ifdef __cplusplus extern "C" { #endif /*  * Class:     Hello  * Method:    fillByteArray  * Signature: ([B)V  */ JNIEXPORT void JNICALL Java_Hello_fillByteArray   (JNIEnv *, jobject, jbyteArray);  #ifdef __cplusplus } #endif #endif   Hello.c: #include <jni.h> #include "Hello.h"   /*  * Class:     Hello  * Method:    fillByteArray  * Signature: ([B)V  */ JNIEXPORT void JNICALL Java_Hello_fillByteArray(JNIEnv *env, jobject obj, jbyteArray pUserInfo) { 	jbyte* p = (*env)->GetByteArrayElements(env, pUserInfo, NULL); 	jsize size = (*env)->GetArrayLength(env, pUserInfo); 	int i;  	for (i = 0; i < size; i++) p[i] = i + 1; 	(*env)->ReleaseByteArrayElements(env, pUserInfo, p, 0); }   Java代码 Hello.java: class Hello { 	private native void fillByteArray(byte[] bytes); 	 	public static void main(String[] args) { 		byte[] byteArray = {0, 0, 0, 0, 0}; 		new Hello().fillByteArray(byteArray); 		for (int i = 0; i < byteArray.length; ++i) { 			System.out.print(byteArray[i] + " "); 		} 	} 	 	static { 		System.loadLibrary("Hello"); 	} }  编译以及运行过程： 1. javac Hello.java 2. javah -jni Hello 3. 用VS编译Hello.h,Hello.c编译生成Hello.dll 4. 将Hello.dll和Hello.class放到同一目录，命令行运行: java Hello  Output: 1 2 3 4 5

user: user-0
content: 引用 4 楼 max_min_ 的回复:最好都丢到一个buf里，两边对应填充，解析数据，  能具体些吗，这个我不是很熟练。刚接触。

user: user-2
content: 最好都丢到一个buf里，两边对应填充，解析数据，

user: user-1
content: 引用 2 楼 lgmsyy 的回复:[quote=引用 1 楼 user-3 的回复:] 使用引用或者传入地址JNIEXPORT jint JNICALL Java_com_test_Hello_test(JNIEnv * env, jobject obj,jbyteArray *pUserInfo){    //调用某个函数，对 pUserInfo 进行了处理     int size=(*env)->GetArrayLength(env,*pUserInfo);   unsigned char *p;	   p = (*env)->GetByteArrayElements(env,*pUserInfo,JNI_FALSE);    int a = _doexcute(p);    //我如何将处理后的p在回传给 pUserInfo ？？？   //直接赋值就可以   pUserInfo->p = p;    return a; }  错误： 提领指向不完全类型的指针 [/quote] 请问，对应的java代码是怎样的？

user: user-0
content: 引用 1 楼 user-3 的回复:使用引用或者传入地址JNIEXPORT jint JNICALL Java_com_test_Hello_test(JNIEnv * env, jobject obj,jbyteArray *pUserInfo){    //调用某个函数，对 pUserInfo 进行了处理     int size=(*env)->GetArrayLength(env,*pUserInfo);   unsigned char *p;	   p = (*env)->GetByteArrayElements(env,*pUserInfo,JNI_FALSE);    int a = _doexcute(p);    //我如何将处理后的p在回传给 pUserInfo ？？？   //直接赋值就可以   pUserInfo->p = p;    return a; }  错误： 提领指向不完全类型的指针

user: user-3
content: 使用引用或者传入地址JNIEXPORT jint JNICALL Java_com_test_Hello_test(JNIEnv * env, jobject obj,jbyteArray *pUserInfo){    //调用某个函数，对 pUserInfo 进行了处理     int size=(*env)->GetArrayLength(env,*pUserInfo);   unsigned char *p;	   p = (*env)->GetByteArrayElements(env,*pUserInfo,JNI_FALSE);    int a = _doexcute(p);    //我如何将处理后的p在回传给 pUserInfo ？？？   //直接赋值就可以   pUserInfo->p = p;    return a; }
user-0 提问: ebook_main和 ebook_mainA 是不是分别用以下方式引用结构体内部的变量?

回复:
user: user-1
content: 引用 3 楼 huabinsir 的回复:使用ebook_main之前 以下这样初始化也行吧?   	ebook_main = esMEMS_Malloc(0,sizeof(__ebook_main_t)); 	eLIBs_memset(ebook_main,0,sizeof(__ebook_main_t)); 可以的，不过记得要如果不用了要记得free.

user: user-0
content: 使用ebook_main之前 以下这样初始化也行吧?   	ebook_main = esMEMS_Malloc(0,sizeof(__ebook_main_t)); 	eLIBs_memset(ebook_main,0,sizeof(__ebook_main_t));

user: user-1
content: 引用 楼主 huabinsir 的回复:typedef  struct EBOOK_MAIN_T { 	Activity*  pActivity;  	H_LYR    eink_lyr; 	H_WIN    main_win; 	H_WIN    scene_show; 	H_WIN	 scene_page; 	H_WIN    scene_sset; 	H_WIN  	 scene_bookinfo; 	H_WIN  	 scene_bmk_list; 	H_WIN    scene_music_list; 	H_WIN  	 scene_toc_list; 	 	void* bmk_list_para;	 	void* toc_list_para;	  	__ebook_arg_t	 ebookLoad_arg;	 	Hebook  	 host;		 	 	__ebook_show_para_t 	show_para;		 	__ebook_deconde_para_t  deconde_para;	 	__ebook_thread_para_t 	*thread_para;	 	BOOKENGINETOC   toc_para;  }__ebook_main_t;  __ebook_main_t* ebook_main = NULL;   __ebook_main_t ebook_mainA;     ebook_main和 ebook_mainA 是不是分别用以下方式引用结构体内部的变量? ebook_main-> ebook_mainA.  是的。  ebook_mainA.pActivity ebook_mainA.eink_lyr ...  ebook_main->pActivity ebook_main->eink_lyr  不过注意，使用ebook_main之前先要初始化，如 ebook_main = &ebook_mainA;

user: user-0
content: up..........................
user-0 提问: 为什么typedef和#define在指针那用处不太一样？

回复:
user: user-1
content: 楼上正解，具体可以参考《C缺陷与缺陷》6.4节。

user: user-2
content: #define 那是就成这样了 char * ptr1, ptr2.; 这样的话， ptr2 就是一个 char而已！  #define的一个弊端就是它只是作简单的替换工作而已！

user: user-3
content: 引用 2 楼 fd214333890 的回复:[quote=引用 1 楼 user-5 的回复:] typedef是定义类型 #define只是文本替换 平时这两个也是这个作用么？[/quote]  这两个只有这种用法

user: user-4
content: #define宏定义相当于文本替换，预编译后此处为char *pch1,pch2；所以pch1为指针，pch2为char型

user: user-0
content: 引用 1 楼 user-5 的回复:typedef是定义类型 #define只是文本替换 平时这两个也是这个作用么？因为我平时都觉得他们两个可以混用，所以没太注意具体意义。

user: user-5
content: typedef是定义类型 #define只是文本替换
user-0 提问: 大家看看这是什么错误，如何解决？

回复:
user: user-1
content: 凡是在执行SQL语句前不将SQL语句显示或写到日志文件中的程序员都是在摸着石头过河。

user: user-0
content: 解决了，谢谢妳

user: user-2
content: 引用 5 楼 wangjian617765753 的回复:[quote=引用 3 楼 neustar1 的回复:] [quote=引用 2 楼 wangjian617765753 的回复:] [quote=引用 1 楼 neustar1 的回复:] [quote=引用 楼主 wangjian617765753 的回复:] 测试的float哪里变成CString?[/quote]  out.Format[/quote] SQLITE_ERROR[1]: near "#IND00": syntax error 这个是SQLITE报的错，和MFC没关系，应该是哪里写错了语法

user: user-0
content: 引用 3 楼 neustar1 的回复:[quote=引用 2 楼 wangjian617765753 的回复:] [quote=引用 1 楼 neustar1 的回复:] [quote=引用 楼主 wangjian617765753 的回复:] 测试的float哪里变成CString?[/quote]  out.Format

user: user-3
content: 把完整的sql语句打印出来，自己看

user: user-2
content: 引用 2 楼 wangjian617765753 的回复:[quote=引用 1 楼 neustar1 的回复:] [quote=引用 楼主 wangjian617765753 的回复:] 测试的float哪里变成CString?

user: user-0
content: 引用 1 楼 neustar1 的回复:[quote=引用 楼主 wangjian617765753 的回复:] SQLITE_ERROR[1]: near "#IND00": syntax error   我把测试的数据（float型），转换成Cstring类型，然后保存就会出现上面的错误。 是你自己打印的信息？代码都没有，。。。[/quote]  CString BuildSQLItem() { 	CString out; 	m_Serialno = in.GetText(); 	out.Format(_T("%f,%f,%f,%f,%f,%f,%f,%f"),SunPara.m_Isc,SunPara.m_Voc,SunPara.m_Pmax,SunPara.m_Imp,SunPara.m_Vmp, 		SunPara.m_FF,SunPara.m_Eff,SunPara.m_Sun);  	return _T("(")+m_Serialno+_T(",")+out+_T(")");  }  void SqliteSaveData() { 	CString str1,str3; 	str1 = _T("([Serial] Text(25),[Isc] FLOAT,[Voc] FLOAT,[Pmax] FLOAT,[Imp] FLOAT,[Vmp] FLOAT,[FF] FLOAT,[Eff] FLOAT,[Sun] FLOAT)"); 	//str3 = _T("(1,2,3,4,5,6,7,8,9)"); 	str3 = BuildSQLItem();  	CString strDBname = _T("F://Data.db"); 	try 	{ 		m_db.open(strDBname); 		if(!m_db.tableExists(_T("SUNDATA"))) 		{ 			m_db.execDML(_T("CREATE TABLE SUNDATA")+str1); 		} 		m_db.execDML(_T("INSERT INTO SUNDATA VALUES")+str3); 		m_db.close(); 	} 	catch(CppSQLite3Exception ex) 	{ 		AfxMessageBox(ex.errorMessage()); 	} }

user: user-2
content: 引用 楼主 wangjian617765753 的回复:SQLITE_ERROR[1]: near "#IND00": syntax error   我把测试的数据（float型），转换成Cstring类型，然后保存就会出现上面的错误。 是你自己打印的信息？代码都没有，。。。
user-0 提问: 菜鸟跪求（简单问题）

回复:
user: user-1
content: 其实是在计数，只是楼主的代码循环下写的不好，遇到Ctrl+z才会跳出循环，输出计数值

user: user-2
content: windows下ctrl+z表示着EOF

user: user-1
content: 楼上说的都是对的getchar只有遇到ctrl +z的时候才会停止

user: user-3
content: 引用 6 楼 max_min_ 的回复:EOF 表示文件结尾 linux            ctrl+d windows    ctrl+z  如果要回车的话  那就是回车的ascii 13 +1

user: user-4
content: 直接判断是否是回车不就好了 把EOF换成'\n'

user: user-5
content: EOF 表示文件结尾 linux            ctrl+d windows    ctrl+z  如果要回车的话  那就是回车的ascii 13

user: user-6
content: linux下 ctrl+d表示EOF windows下貌似是ctrl+z

user: user-6
content: ctrl+z

user: user-7
content: 你想要的功能可以这样实现：      char str[1000];     scanf("%s",str);     printf("The size of user input is %d. \n",strlen(str));      getchar();

user: user-8
content: EOF是文件结束符。 Enter键输入的不是EOF，所以不终结。 你可以 (c=getchar())!=‘q’ 然后输入q终结。 当然，其他任意字符都可以充当终结符，不过EOF不行，因为你输入不了。

user: user-7
content: 你对getchar的理解有问题。  当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,
user-0 提问: C/C++这里的斜杠是什么意思？

回复:
user: user-1
content: 引用 4 楼 u014463229 的回复:现在说and和or和鄙视的各有一票，再来点评论  评论

user: user-0
content: 但是我学精通了C是不是就无需学c++了？

user: user-0
content: 我的意思是，是不是学了c++就不用学C了？，也就是说c++可以替代C？或者说，学习C的目的是为了更好地学习C++？

user: user-2
content: C语言是基础语言，其实直接学C++也行

user: user-0
content: 现在说and和or和鄙视的各有一票，再来点评论

user: user-1
content: 鄙视

user: user-3
content: 应该是or的意思 我猜的

user: user-4
content: C++语言是C语言的超集，C语言是面向过程的，C++是面向对象的。其语法基本一样，但还有很多区别，先学c(基础)，然后升级学c++
user-0 提问: 很奇怪的问题,传入的参数相同，为什么返回结果不一样。

回复:
user: user-0
content: 引用 9 楼 xiaohuh421 的回复:如果传入前打印是一样, 那传入后呢?  函数中执行过程呢?  这种东西调试基本上就可以解决的, 光是看代码, 也"猜"不出结果的.  我通过GDB调试，但把错：Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.

user: user-0
content: 引用 11 楼 pingD 的回复:我也在怀疑是不是通过jni的标准调用的那个会不会是因为会自动四舍五入小数的问题  应该不是，我用C编写，出现同样的问题。

user: user-1
content: 在java里，'\0'会被转义为0x80什么的，我记不清了，04年我在湖南时就发现这个问题，java里没有0x00，因此字符串结束不能依靠0值实现，必须由结构数据替代，即：长度、数据方式 staruct string{ unsigned n; char *s; }; 为方便使用，你也可以采用： union{   struct {unsigned short n;      char *s;}str;   char *dat; }; 在调用的时候通过结构将数据转储出来

user: user-2
content: 我也在怀疑是不是通过jni的标准调用的那个会不会是因为会自动四舍五入小数的问题

user: user-3
content: 你printf应该这样写：  //c的字符串是'\0'结尾的 printf(p1);  //java的字符串是以'\0'结尾的吗 ？ printf(p2);  你对比一下两个结果，我觉得可能结果会不同，java的会长一些或者短一些。

user: user-4
content: 如果传入前打印是一样, 那传入后呢?  函数中执行过程呢?  这种东西调试基本上就可以解决的, 光是看代码, 也"猜"不出结果的.

user: user-5
content: 是不是因为java的byte型数组是signed char型的缘故，你把c里面的unsigned char 改为signed char 看看输出是否一样。

user: user-0
content: 还有人能提出更多建议的吗

user: user-0
content: 晚上结贴，看还有不同一件没

user: user-0
content: 也许是我别的地方有误。还是谢谢各位

user: user-0
content: 引用 8 楼 sdu_sky 的回复:是不是因为java的byte型数组是signed char型的缘故，你把c里面的unsigned char 改为signed char 看看输出是否一样。  不是这个问题的，有无符号是对人类说的，机器是不关心的。

user: user-6
content: java应该没有指针这个东西吧！ 在c语言中，数组作为参数传递时和指针是相同的！在java中数组传参会不会有不同呢？

user: user-7
content: 引用 2 楼 lgmsyy 的回复:[quote=引用 1 楼 u010570670 的回复:] JNI处理数组的问题吧。  我以为是我传的参数不对，所以在以上两个程序中分别进行了 int i=0; printf("\n--------------\n"); for(i=0;i<size;i++){  printf("%d", p1[i]); } printf("\n--------------\n"); i=0;       for(i=0;i<size;i++){  printf("%d", p2[i]); } printf("\n-------------------------\n");  发现打印出来内容是一样的，但为什么输出的结果却不宜样呢。[/quote] 能在第三方库里编辑的话那就在出口打印返回值啊，还以为你是分别在传入的地方调用呢。

user: user-0
content: 引用 1 楼 u010570670 的回复:JNI处理数组的问题吧。  我以为是我传的参数不对，所以在以上两个程序中分别进行了 int i=0; printf("\n--------------\n"); for(i=0;i<size;i++){  printf("%d", p1[i]); } printf("\n--------------\n"); i=0;       for(i=0;i<size;i++){  printf("%d", p2[i]); } printf("\n-------------------------\n");  发现打印出来内容是一样的，但为什么输出的结果却不宜样呢。

user: user-7
content: JNI处理数组的问题吧。
user-0 提问: [swu]0分试题 求指导！！！

回复:
user: user-1
content: 你把product定义为double  float   因为你的计算结果可能会越界 还有就是发贴的时候需要高值别人，你的程序想要实现什么功能，再加上你自己理解。这样别人才好知道如何给你做讲解

user: user-2
content: #include <stdio.h>  int main() {     int n, k, w, ret;     FILE *fp;     fp = fopen("data.in", "r");     if (fp == NULL) {         fprintf(stderr, "cant't open the file\n");         return 1;     }        ret = fscanf(fp, "%d", &n);     if (n <= 0 || n >= 8 || ret != 1) {         fprintf(stderr, "Invalid\n");         fclose(fp);         return 2;     }        int i;     float product = 1.0;     for (i = n; i <= 2 * n; i++) {         product = product * i;     }        printf("%.2f\n", product);     fclose(fp);     return 0; }

user: user-0
content: 好人一生平安。

user: user-3
content: 帮你格式化的心情都没有了 楼主坏人！！
user-0 提问: C结构体初始化后，为什么打印出来的不是数字零？？？

回复:
user: user-0
content: 引用 2 楼 max_min_ 的回复: struct Info info[10]； memset((info, 0, sizeof(struct info) * 10); // 初始化清空，默认是垃圾值的      //void *memset(void *s, int ch, size_t n);     //函数解释：将s中前n个字节 （typedef unsigned int size_t）用 ch 替换并返回 s 。

user: user-1
content: 分配了内存，但未初始化，输出了内存中的乱码。。。

user: user-2
content: struct Info info[10]； memset((info, 0, sizeof(struct info) * 10); // 初始化清空，默认是垃圾值的

user: user-3
content: 和 int i; 一样，你必须自己初始化他们。
user-0 提问: linux c 标准接口  实现usb初始化，方便读写里面的文件

回复:
user: user-0
content: 引用写驱动？ 不是写驱动，是要调用内核中的usb的一些标准接口，实现我自己用的usb的初始化，open，读写，相当于重新封装一次

user: user-1
content: 写驱动？

user: user-2
content: linux usb初始化
user-0 提问: 测试write和read函数的一个小程序出问题 求指教( 已更正 欢迎探讨 )

回复:
user: user-0
content: 引用 5 楼 neustar1 的回复:[quote=引用 4 楼 u014525520 的回复:] 谢谢楼上三位 明白了 太不地道了，为啥turingo给20分[/quote]  下次给你多些 呵呵

user: user-1
content: 引用 4 楼 u014525520 的回复:谢谢楼上三位 明白了 太不地道了，为啥turingo给20分

user: user-0
content: 谢谢楼上三位 明白了

user: user-2
content: buf中的数据是整型，你直接输出的话，显示当然是乱码；你可以把buf声明为char[]类型，然后赋值的时候用buf[i]=i+'0'，最后一个元素最好加上结束符，buf[i]='\0'，这样写入输出才不会是乱码。  引用 楼主 u014525520 的回复:// // 本程序往一个文件中写入一个数组 // 然后读取这个数组并输出 //  #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <iostream> #include <string>  using namespace std;  const int LEN=5;  int main(void) { 	string filename;  	cout << "请输入要处理的文件名: "; 	cin >> filename;  	// 打开 filename 文件。 	// 注意： 	//	1. 第一个参数必须转换成C的字符串格式 	//	2. 如果找不到文件，就会以 777 权限创建一个新的文件。 	//	3. 如果要进行读写，还要使用O_RDWR参数。 	int fd = 0; 	if (!(fd = open(filename.c_str(), O_CREAT|O_EXCL|O_RDWR, 777))) { 		cout << "打开/创建文件失败" << endl; 		return 1; 	}  	// 初始化测试数组 	int buf[LEN]; 	for (int i=0; i<LEN; i++) { 		buf[i] = i; 	}  	// 将数组中的数据写入到打开的文件中 	if (write(fd, buf, LEN*sizeof(int)) != LEN*sizeof(int)) { 		cout << "写入失败" << endl; 		return 2; 	}  	// 写入指针回到文件顶部 	lseek(fd, 0, SEEK_SET);  	// 从文件中读取数据并输出到标准输出 	int n=0; 	while ((n = read(fd, buf, LEN*sizeof(int))) > 0) { 		if (write(STDOUT_FILENO, buf, n) != n) { 			cout << "打印失败" << endl; 			return 2; 		} 		cout << endl; 	} 	if (n<0) { 		cout << "读入失败" << endl; 		return 4; 	}  	// 关闭文件 	close(fd);  	return 0; }  非预期的执行结果：( 输出01234才是我希望的 )   程序执行完后写入文件的数据( 完全正常 )：   调试说明： 1. read函数正常执行了并返回20，即第一次就顺利的读取了所有要读的数。 2. write到标准输出的调用也顺利执行并返回了20，也就是说程序确实将20个字节的数据写到了标准输出。  问题就在为什么用write(STDOUT_FILENO, buf, n); 输出的是乱码？ PS：一些书上经常见到这样输出数据到屏幕的语句

user: user-1
content: 引用 楼主 u014525520 的回复:// // 本程序往一个文件中写入一个数组 // 然后读取这个数组并输出 //  #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <iostream> #include <string>  using namespace std;  const int LEN=5;  int main(void) { 	string filename;  	cout << "请输入要处理的文件名: "; 	cin >> filename;  	// 打开 filename 文件。 	// 注意： 	//	1. 第一个参数必须转换成C的字符串格式 	//	2. 如果找不到文件，就会以 777 权限创建一个新的文件。 	//	3. 如果要进行读写，还要使用O_RDWR参数。 	int fd = 0; 	if (!(fd = open(filename.c_str(), O_CREAT|O_EXCL|O_RDWR, 777))) { 		cout << "打开/创建文件失败" << endl; 		return 1; 	}  	// 初始化测试数组 	int buf[LEN]; 	for (int i=0; i<LEN; i++) { 		buf[i] = i; 	}  	// 将数组中的数据写入到打开的文件中 	if (write(fd, buf, LEN*sizeof(int)) != LEN*sizeof(int)) { 		cout << "写入失败" << endl; 		return 2; 	}  	// 写入指针回到文件顶部 	lseek(fd, 0, SEEK_SET);  	// 从文件中读取数据并输出到标准输出 	int n=0; 	while ((n = read(fd, buf, LEN*sizeof(int))) > 0) { 		if (write(STDOUT_FILENO, buf, n) != n) { 			cout << "打印失败" << endl; 			return 2; 		} 		cout << endl; 	} 	if (n<0) { 		cout << "读入失败" << endl; 		return 4; 	}  	// 关闭文件 	close(fd);  	return 0; }  非预期的执行结果：( 输出01234才是我希望的 )   程序执行完后写入文件的数据( 完全正常 )：   调试说明： 1. read函数正常执行了并返回20，即第一次就顺利的读取了所有要读的数。 2. write到标准输出的调用也顺利执行并返回了20，也就是说程序确实将20个字节的数据写到了标准输出。  问题就在为什么用write(STDOUT_FILENO, buf, n); 输出的是乱码？ PS：一些书上经常见到这样输出数据到屏幕的语句肯定乱码啊 你又不是ascii码的内容

user: user-3
content: 解析出来打印吧！不要直接打印buf里的内容。里面是int
user-0 提问: 关于链表以及函数返回值的问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你的deletenode函数打错了 delete_nodo 48行  原来是手抖了……十分感谢……

user: user-1
content: 你的deletenode函数打错了 delete_nodo 48行
user-0 提问: 结构体里边 3个char 一个 short为什么sizeof返回是6 呢？不该是 5吗 

回复:
user: user-0
content: 谢谢 你们啊    懂了 懂了

user: user-1
content: 内存对齐，提高速度！ 32位操作系统一般都是4字节对齐的

user: user-2
content: google“内存对齐”。 很多编译器的开关也可改变对齐行为。

user: user-0
content: typedef struct LINK_UPDATE_ { 	unsigned char  link_update_sn; 	unsigned char  new_map_ofdm_num; 	unsigned char   s1; 	unsigned char  new_map_frame_offset; 	unsigned short new_map_length; 	 }LINK_UPDATE,*PLINK_UPDATE;     我又加了个   char s1;结果   变成   6了    但是   如果    s1位置 放的  不一样 如下 变成 8了 、、、、 typedef struct LINK_UPDATE_ { 	unsigned char  link_update_sn; 	unsigned char  new_map_ofdm_num; 	 	unsigned char  new_map_frame_offset; 	unsigned short new_map_length; 	unsigned char   s1; }LINK_UPDATE,*PLINK_UPDATE; sizeof（LINK_UPDATE）变成 8 了 。。

user: user-3
content: 引用 楼主 plklklklkl 的回复:typedef struct LINK_UPDATE_ { 	unsigned char  link_update_sn; 	unsigned char  new_map_ofdm_num; 	 	unsigned char  new_map_frame_offset; 	unsigned short new_map_length; }LINK_UPDATE,*PLINK_UPDATE;   就是 这个可恶的   家伙 ，，想了半天没想懂？sizeof(LINK_UPDATE)返回的是 6.。。。。。。  char是1 short是 2  不该是 5吗 内存对齐的问题，前面三个char占用3个字节，第四个字节空着，然后第五个字节存放最后一个成员，所以6个字节。
user-0 提问: 请问用vs2010编译出来的c语言程序能脱离.net框架运行不？

回复:
user: user-1
content: 引用 8 楼 caoxianbing 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 严重怀疑楼主能不能写一个脱离.net框架就不能正常运行的C程序。 这。。。什么意思？？？[/quote] 意思就是一般人很难写出一个依赖.net框架运行的C程序。

user: user-2
content: 我一直写的都是脱离.net框架的c程序呀！

user: user-3
content: 顶起，lz好好学吧，争取编写一个能脱离.net的c程序吧

user: user-4
content: 引用 8 楼 caoxianbing 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 严重怀疑楼主能不能写一个脱离.net框架就不能正常运行的C程序。 这。。。什么意思？？？[/quote] VS的所有版本，一直都可以编译出不需要.net的C/C++程序。

user: user-0
content: 引用 2 楼 nadleeh123 的回复:[quote=引用 楼主 caoxianbing 的回复:] 求解，c新手，想知道问题的答案，先谢谢各位大神  一般你编出来的c程序只能在某个系统上跑，因为编出来程序还包含有各种给系统装载器用个各种数据，并不是纯粹的有逻辑的指令集合体。[/quote] 还是不太明白，，，

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:严重怀疑楼主能不能写一个脱离.net框架就不能正常运行的C程序。 这。。。什么意思？？？

user: user-5
content: 引用 6 楼 akirya 的回复:[quote=引用 5 楼 jackyjkchen 的回复:] Visual Studio .net这个坑爹产品命名的遗毒仍在。。。 呃，还好吧，只有2002这个版本带.net字样。这还是一个很短命的版本[/quote]  2003也带着。。。而且M$那几年宣传得太猛

user: user-1
content: 严重怀疑楼主能不能写一个脱离.net框架就不能正常运行的C程序。

user: user-4
content: 引用 5 楼 jackyjkchen 的回复:Visual Studio .net这个坑爹产品命名的遗毒仍在。。。 呃，还好吧，只有2002这个版本带.net字样。这还是一个很短命的版本

user: user-6
content: 引用 楼主 caoxianbing 的回复:求解，c新手，想知道问题的答案，先谢谢各位大神  一般你编出来的c程序只能在某个系统上跑，因为编出来程序还包含有各种给系统装载器用个各种数据，并不是纯粹的有逻辑的指令集合体。

user: user-5
content: Visual Studio .net这个坑爹产品命名的遗毒仍在。。。

user: user-7
content: 严重怀疑楼主能不能写一个不脱离.net框架能正常运行的纯C程序。
user-0 提问: 怎么用一个监听器监听两个按钮

回复:
user: user-1
content: 监听器是什么？监听线程？ 每个按钮中setEvent在监听线程中waitformultipleobjects()

user: user-2
content: Java问题为什么要跑到C语言论坛来问？

user: user-0
content: 这是JAVA里面的关于GUI那方面的。/。

user: user-3
content: 不知道你说的是什么程序里的  如果是win32 窗口程序.  那么按钮都是WM_COMMAND消息来通知事件的. 而这个WM_COMMAND消息中有按钮的ID号, 就能标识区分每一个按钮了.
user-0 提问: 关于C语言中结构体数组与JAVA对像数组传值的问题。这个希望彻底弄明白

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。                                     ——架构师zhao4zhong1  有时候不是我们想怎样就怎样的啊。有时候是有规范进行约束的。不过还是谢谢你的建议。

user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。                                     ——架构师zhao4zhong1

user: user-2
content: 引用 3 楼 lgmsyy 的回复:这个问题真没有人遇到过并且解决的吗 没明白LZ的意思。 如果方便的话，可以贴出足以说明您问题的Java代码和JNI代码。 不用全部细节，只要能描述您所遇到的问题，这样可以方便大家讨论。

user: user-0
content: 继续寻找答案中

user: user-0
content: 这个问题真没有人遇到过并且解决的吗
user-0 提问: 求助：判断回文数

回复:
user: user-1
content: temp=temp*10+a%10; a=a/10; 如果a 是123321 那么 tmp是1 a是12332，算法有问题  用这个方式判断吧。 变成字符串，然后判断。  #include<stdio.h> int judge(int ia);  int main() { 	int ia; 	scanf("%d", &ia); 	if(judge(ia)) 	{ 		puts("yes"); 	} 	else 	{ 		puts("no"); 	} 	return 0; } int judge(int ia) { 	char pc[100]; 	int i; 	int iLen; 	iLen = sprintf(pc, "%d", ia); 	iLen -= 1; 	if(iLen==0) 	{ 		return 0; 	} 	if(ia>0) 	{ 		i=0; 	} 	else 	{ 		i=1; 	} 	for(; i<iLen; ) 	{ 		if(pc[i]!=pc[iLen]) 		{ 			return 0; 		} 		i++; 		iLen--; 	} 	return 1; }

user: user-2
content: 在比较的时候a的值已经改了 是0  当然总是返回-1了

user: user-3
content: 你调试一下，或者加个printf语句不就很容易发现了么？ 你的a还是原来的a么？

user: user-4
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-0
content: 谢谢大家的热心帮助，问题解决了，主要是我太粗心而且不懂得调试，最主要的还是底子弱，大家说的都挺好。
user-0 提问: sizeof函数请教

回复:
user: user-0
content: 枚举是整形旳一个子集  谢谢你们  学习了

user: user-1
content: 引用 楼主 plklklklkl 的回复:一个数据帧 中 帧类型是用 4bit表示的 所以我这样定义   enum PD_TYPE_ { PD_EMPTY = 0x1, PD_ADM_RES, PD_REJ, PD_ULINK_REPORT, PD_ACK, PD_CMP_REPORT, PD_LINK_UPDATE, //0x7 PD_QUIT_ACK, PD_POWER_CTRL }PD_TYPE;     我知道 sizeof 内存分配的最小区域 一个字节即 8bit我想显示一下 能不能 看内存分配了 多少比特的函数啊       PD_TYPE=PD_EMPTY; char framtype=0x01; printf("%x\n%x\n",PD_TYPE,framtype);                    显示 1 1 printf("%d%d",sizeof(PD_TYPE),sizeof(char));      显示 4  1   我觉得 应该是 0.5   1  哈哈  运行完毕后  sizeof(PD_TYPE)竟然是 4   sizeof(char)是1 我就是想知道这个是为啥啊 ？  sizeof不是函数

user: user-2
content: Taken from the current C Standard (C99)     6.7.2.2 Enumeration specifiers      Constraints     The expression that defines the value of an enumeration constant shall be an integer constant expression that has a value representable as an int.      Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type. The choice of type is implementation-defined, but shall be capable of representing the values of all the members of the enumeration.

user: user-3
content: 枚举enum类型只是一个int