Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请问这个编译错误如何解决？

回复:
user: user-1
content: typedef是用来定义结构的，结构名不能放在struct后面

user: user-2
content: 引用 2 楼 u010808402 的回复:typedef struct _seqof1 {                             //定义结构体_seqof1     struct _seqof1  *next;     HS_SCCH_Codes   value; } *_seqof1;                                                   //定义结构体指针_seqof1  typedef _seqof1* _seqof1; 两者命名相同，不可能编过，解决办法为使用去掉第一行的_seqof1或换成另外一个名字+1

user: user-3
content: 要不然这样子:  typedef struct _seq { 	struct _seq* next; 	int value; }*_seq1;

user: user-0
content: 引用 2 楼 u010808402 的回复:typedef struct _seqof1 {                             //定义结构体_seqof1     struct _seqof1  *next;     HS_SCCH_Codes   value; } *_seqof1;                                                   //定义结构体指针_seqof1  typedef _seqof1* _seqof1; 两者命名相同，不可能编过，解决办法为使用去掉第一行的_seqof1或换成另外一个名字    这个是花钱买的工具自动生成的，不是人编写的。这个不能修改的，只能通过选择编译器或者更改编译选项来解决。

user: user-0
content: typedef struct _seqof1 {                             //定义结构体_seqof1     struct _seqof1  *next;     HS_SCCH_Codes   value; } *_seqof1;                                                   //定义结构体指针_seqof1 这个是花钱买的工具自动生成的，不是人编写的。这个不能修改的，只能通过选择编译器或者更改编译选项来解决。

user: user-4
content: typedef struct _seqof1 {                             //定义结构体_seqof1     struct _seqof1  *next;     HS_SCCH_Codes   value; } *_seqof1;                                                   //定义结构体指针_seqof1  typedef _seqof1* _seqof1; 两者命名相同，不可能编过，解决办法为使用去掉第一行的_seqof1或换成另外一个名字

user: user-5
content: 看报错提示就该明白，不能把struct _seqof1类型转化为*_seqof1类型 楼主清楚typedef什么概念吗？
user-0 提问: linux c 命名管道 聊天程序 求大神纠错

回复:
user: user-0
content: 引用 4 楼 jwj070524 的回复:[quote=引用 3 楼 u012024694 的回复:] @jwj070524： 不会server client模型啊。。。 请教一下我的这种写法需要怎么改才行呢？ 我用循环读取另一个程序创建的管道，应该可以避免“两个程序互相需要对方创建fifo才能开始"这种问题吧？  循环是一个方法，但是不是最好的。还有一点，你发现没有，只有当A发给B后，B才能给A发，反之亦然，你不觉得很别扭吗？管道是单工的，所以你要创建两个来完成进程间通信，为什么不用socket呢，socket是全双工的。如果一定要用命名管道的话，建议开两个线程，一个线程专门来收数据，另外一个线程专门来读取stdin，并发送出去。[/quote] 暑假作业，要求用管道来完成，我也没办法哎。。。

user: user-1
content: 引用 3 楼 u012024694 的回复:@jwj070524： 不会server client模型啊。。。 请教一下我的这种写法需要怎么改才行呢？ 我用循环读取另一个程序创建的管道，应该可以避免“两个程序互相需要对方创建fifo才能开始"这种问题吧？  循环是一个方法，但是不是最好的。还有一点，你发现没有，只有当A发给B后，B才能给A发，反之亦然，你不觉得很别扭吗？管道是单工的，所以你要创建两个来完成进程间通信，为什么不用socket呢，socket是全双工的。如果一定要用命名管道的话，建议开两个线程，一个线程专门来收数据，另外一个线程专门来读取stdin，并发送出去。

user: user-0
content: @jwj070524： 不会server client模型啊。。。 请教一下我的这种写法需要怎么改才行呢？ 我用循环读取另一个程序创建的管道，应该可以避免“两个程序互相需要对方创建fifo才能开始"这种问题吧？

user: user-1
content: 程序1创建管道fifo1，然后打开fifo2；程序2创建管道fifo2，然后打开fifo1。两个程序互相需要对方创建fifo才能开始。所以最好写成server client模型，server端先把要创建的都创建好，等待client来打开。

user: user-2
content: 对于这种刚发的帖子，我总是毫不犹豫的顶了。如果火了就是个前排，可以混个脸熟，说不定谁好心就给粉了…稳赚不赔；如果沉了就感觉是我弄沉的，很有成就感，还能捞经验。
user-0 提问: 说好的四个字节呢？

回复:
user: user-1
content: 四个字节是说好了的  只是没说非要连续

user: user-2
content: 没有规定,自然有别的你想不到的用处  试试 Release版

user: user-0
content: 不说堆，只说栈，内存来看，它的确是只用到了四个字节，但是栈中的分配不是按地址扩展的吗？怎么会不连续呢！

user: user-3
content: 编译选项都有哪些，以及每项设置都起什么作用。 以上知识点迟早是要了解和有选择地掌握的。

user: user-4
content: 你想看连续的    用LINUX下的G++编译一次吧

user: user-0
content: 引用 6 楼 wu13623558890 的回复:[quote=引用 楼主 u012412518 的回复:]  说好的占用四个字节，这里为啥成了12个？有些迷糊了！ 32位win7下的vs2010.。。 没看懂你的问题，你说的占用四个字节说的是，i，j，tmep，还是malloc出来的动态内存？？[/quote] 我说的是栈上的，i，j，temp和指针？？？

user: user-5
content: 引用 楼主 u012412518 的回复: 说好的占用四个字节，这里为啥成了12个？有些迷糊了！ 32位win7下的vs2010.。。 没看懂你的问题，你说的占用四个字节说的是，i，j，tmep，还是malloc出来的动态内存？？

user: user-6
content: 没有规定i,j,temp等要连续。

user: user-7
content: 没有问题的啊

user: user-8
content: 占用4 字节  其他的 没占用啊  听正常的 怎么了

user: user-9
content: 好吧，看错内容了。。。 不要用输出地址的形式来分析内存

user: user-9
content: 你眼瞎，怎么不是4个字节了？这是用十六进制输出的
user-0 提问: 将一个正整数中的数字的顺序翻转

回复:
user: user-1
content: 求商int a/int b      a<b则结果为0，a=b则为1，a>b则为算术运算中a除以b的商 求余int a%int b   a<b则结果为a,   a=b则为0， a>b则为算术运算中a除以b的余数

user: user-2
content: # include <stdio.h>    int main(void)  {     int number=0;     //the number to be reversed     int rebmun=0;      //the reversed number     int temp=0;       //working storage          //get the value to be reversed     printf("\nEnter a positive integer:");     scanf("%d",&number); //input digit 43     temp=number;          //reverse the number stored in temp     do    	{ 	   	printf("temp = %d\n", temp);///////////////////////////////////////////////////      	rebmun=10*rebmun+temp%10; //add the rightmost digit      	temp=temp/10;             //remove the rightmost      	printf("temp = %d\n", temp);///////////////////////////////////////////////////    	} while(temp);              //continue while temp>0    	     printf("\nThe number %d reversed is %d rebmun ehT\n", number, rebmun);          return 0;  } 看看这个17和20行， 你知道 除号 / 的用处吧 单步调试看看吧，不会搜搜就行

user: user-3
content: 设断点，单步察看rebmun和temp的制，有助于你理解这个算法
user-0 提问: 使用APR库时“未定义的引用”

回复:
user: user-0
content: 引用 3 楼 justin_bkdrong 的回复:使用静态方式链接dll (使用 lib),还是使用LoadLibrary ? GetProcess 得不到地址？ 在stack overflow上解决了，库依赖关系的原因，谢谢你了啊

user: user-1
content: 使用静态方式链接dll (使用 lib),还是使用LoadLibrary ? GetProcess 得不到地址？

user: user-0
content: 引用 1 楼 justin_bkdrong 的回复:是否是C函数方式导出，而你用C++调用方式调用？ 程序都是C写的，编译器是GCC

user: user-1
content: 是否是C函数方式导出，而你用C++调用方式调用？
user-0 提问: VS2013写的一个简单计算器编译不了

回复:
user: user-1
content: result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,                      &wc, 1, s, 80, ws, 80 );  注意跟上每个数据的大小.

user: user-2
content: 改为scanf_s("%lf %c %lf", &shuzi, &fuhao,1, &shuzi1); 即在第二个参数后加一个参数1 或把scanf_s改为scanf 原因：scanf_f在输入字符或者字符串时会有边界检查，需要输入最多输入多少个字符的个数的参数

user: user-3
content: 估计死在scanf_s（）上了，http://msdn.microsoft.com/zh-cn/library/w40768et%28VS.80%29.aspx，http://baike.baidu.com/view/3529726.htm?fr=aladdin，不是windows不能测试scanf_s（）
user-0 提问: 为什么会死锁？

回复:
user: user-1
content: 这时间  引用 6 楼 u012879806 的回复:[quote=引用 5 楼 zhaowech 的回复:] 最常见的死锁就是A等着B给信号再发信号给B，B等着A的信号再发信号给A。 想实现死锁，你可以这样做，写2个函数fun1和fun2 fun1() {   waitfor(event1);   setevent(event2) ; }  fun2() {   waitfor(event2);   setevent(event1); } 这样初始2个都没有触发，永远等不到event1，那么event2就不会触发； event2,不会触发，永远等不到evnet2，那么event1就不会触发； 这样就死循环了，也就是死锁了  你这种太。。。。  基本不可能出现，  原因是： 2个事件都不触发，才会死锁。 可能性太低了。  我感觉 日常所见的 死锁，不是你这种吧。 这太明显低级了  [/quote] 好吧，被鄙视了，在大型程序中，逻辑分支过多，无意识的死锁很容易发生。 使你说，不懂，想举个例子的嘛

user: user-0
content: 引用 1 楼 u010207727 的回复:不是原子操作，多线程调用的情况下会死锁。 同时等待资源  可以举例说明吗？   比如，线程1 ，线程2 ，如何到第几步的操作的时候，才会出现死锁。  我想了很久，找不到 “什么情况下会出现死锁“？

user: user-2
content: 不是原子操作，多线程调用的情况下会死锁。 同时等待资源

user: user-0
content: 引用 5 楼 zhaowech 的回复:最常见的死锁就是A等着B给信号再发信号给B，B等着A的信号再发信号给A。 想实现死锁，你可以这样做，写2个函数fun1和fun2 fun1() {   waitfor(event1);   setevent(event2) ; }  fun2() {   waitfor(event2);   setevent(event1); } 这样初始2个都没有触发，永远等不到event1，那么event2就不会触发； event2,不会触发，永远等不到evnet2，那么event1就不会触发； 这样就死循环了，也就是死锁了  你这种太。。。。  基本不可能出现，  原因是： 2个事件都不触发，才会死锁。 可能性太低了。  我感觉 日常所见的 死锁，不是你这种吧。 这太明显低级了

user: user-1
content: 最常见的死锁就是A等着B给信号再发信号给B，B等着A的信号再发信号给A。 想实现死锁，你可以这样做，写2个函数fun1和fun2 fun1() {   waitfor(event1);   setevent(event2) ; }  fun2() {   waitfor(event2);   setevent(event1); } 这样初始2个都没有触发，永远等不到event1，那么event2就不会触发； event2,不会触发，永远等不到evnet2，那么event1就不会触发； 这样就死循环了，也就是死锁了

user: user-0

user: user-3
content: 《Windows核心编程》   Synchronization Functions The following functions are used in synchronization.        CancelWaitableTimer   CreateEvent   CreateMutex   CreateSemaphore   CreateWaitableTimer   DeleteCriticalSection   EnterCriticalSection   GetOverlappedResult   InitializeCriticalSection   InitializeCriticalSectionAndSpinCount   InterlockedCompareExchange   InterlockedDecrement   InterlockedExchange   InterlockedExchangeAdd   InterlockedIncrement   LeaveCriticalSection   MsgWaitForMultipleObjects   MsgWaitForMultipleObjectsEx   OpenEvent   OpenMutex   OpenSemaphore   OpenWaitableTimer   PulseEvent   QueueUserAPC   ReleaseMutex   ReleaseSemaphore   ResetEvent   SetCriticalSectionSpinCount   SetEvent   SetWaitableTimer   SignalObjectAndWait   TimerAPCProc   TryEnterCriticalSection   WaitForMultipleObjects   WaitForMultipleObjectsEx   WaitForSingleObject   WaitForSingleObjectEx
user-0 提问: 利用有限差分法计算一根金属棒的温度演化

回复:
user: user-1
content: 这是一个空间一维、时间一维的纯计算问题，超级简单

user: user-0
content: @mujiok2003  大神能给翻译翻译吗  初学者。。。

user: user-2
content: 要开学了，作业还没做完，目测这几天学生作业帖会多起来。

user: user-0
content: 有qq吗  我把文本发给你

user: user-3
content: 公式都有了， 做个翻译而已。

user: user-4
content: 没看懂。。。

user: user-5
content: 公式请先用Word中的公式编辑器输入。再截图贴上来。

user: user-6
content: 先把公式拆分，从左到右，每一个括号，运算符都分开，然后再实现，很难么？
user-0 提问: 求助C语言泛型指针有疑问

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

回复:
user: user-1
content: 引用 6 楼 grggrggrw 的回复:后一个问题我自己弄明白了。 无符号char扩展成四字节的时候，高位填充0. 有符号char扩展成四字节的时候，高位填充符号位。  无符号类型左移的时候，最低位补0，右移的时候，最高位补0。 有符号类型左移的时候，最低位补0，右移的时候，最高位补符号位。  总之谢谢你之前的解释了！ 对，就是这样。把代码里面的char换成unsigned char试试就看出来了

user: user-0
content: 后一个问题我自己弄明白了。 无符号char扩展成四字节的时候，高位填充0. 有符号char扩展成四字节的时候，高位填充符号位。  无符号类型左移的时候，最低位补0，右移的时候，最高位补0。 有符号类型左移的时候，最低位补0，右移的时候，最高位补符号位。  总之谢谢你之前的解释了！

user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 楼主 grggrggrw 的回复:] 我所理解的指针是这样的：它依靠自己的类型来寻址（用于p++），然后还是依靠自己的类型来输出目标地址的值，如char*就输出连续1字节的目标地址，如int*就连续输出4字节的目标地址。 刚才忘了说，楼主对指针的理解是正确的。[/quote] 奇怪，刚才明明点了引用的。。。

user: user-0
content: 我完全理解了您的回答，十分感谢！  再次请教一下： 您说"按符号位扩展"，请问这个特性是编译器相关的呢，或是此为C语言规定因此与编译器无关呢？  这句话也让我想到了位移操作，<<的话都是用0来填充最低位，>>的话我记得是编译器相关，有的按照符号位，有的直接赋0到最高位

user: user-1
content: 引用 楼主 grggrggrw 的回复:我所理解的指针是这样的：它依靠自己的类型来寻址（用于p++），然后还是依靠自己的类型来输出目标地址的值，如char*就输出连续1字节的目标地址，如int*就连续输出4字节的目标地址。 刚才忘了说，楼主对指针的理解是正确的。

user: user-1
content: 1楼运行的结果是类似于你的第一第四段代码的结果。 把1楼的0xF7换成0x78，你会看到类似于你的第二第三段代码的结果。 关键是printf对%x的处理，它把传进去的一个字节扩展到4个字节再输出，而且是按符号位扩展。所以0xF7和0xFF会加上6个F；而0x78和0x00会加上6个0，最后等于什么都没加。

user: user-1
content: 这个问题和指针没关系，关键在于printf的格式。 运行以下代码试试： #include <stdio.h> int main() {   char c = 0xF7;   printf("%x\n", c);   printf("%d\n", c);   return 0; }
user-0 提问: createevent打开失败？ 

回复:
user: user-1
content: 你是创建都, 当然是会成功. MSDN上你帖那段英文说的是打开操作, 即非创建或者拥有者调用OpenEvent时, 才会需要考虑这些问题.  你那个名字都传了NULL了, 根本不用考虑什么管理员权限问题了.

user: user-0
content: 引用 3 楼 Idle_ 的回复:OK, 让我们重新来过： CreateEvent可以用于创建或者打开一个Event. 对于创建来说，默认创建的Event的操作种类（读/写/同步等）标记中包含了EVENT_ALL_ACCESS标记，这些标记表示对event可以进行的操作，而标记和标记代表的具体操作可以授权给谁去执行记录在Event相关的Security Descriptor中的DACL结构中。所以Event具备了EVENT_ALL_ACCESS标记并不表示你可以使用该标记代表的操作（如果该标记的相关ACE中没有你的话），至于创建的event默认都具备EVENT_ALL_ACCESS标记（不管是不是admin用户），但是不同用户创建的Event的EVENT_ALL_ACCESS操作默认却是授权给不同用户/组的。 对于打开命名Event来说（别人创建的Event）， 该Event必须创建时具备EVENT_ALL_ACCESS标记（默认都是满足的），但是如果EVENT_ALL_ACCESS标记未授权给你时你的打开操作就会失败。  看了半天， 似乎说msdn是错误的。  1. security despriction这个东西，几乎很多内核都有这个结构体，  这个结构体与 访问控制模型 access control modole 是有很大关系的。  我也承认有关系。  2. 结合msdn看，似乎只有管理员才能够将该安全对象（ vista之后，资源，内核句柄，都可以叫安全对象）  授权，至于授权给谁我就不知道了。  虽然我不是对access control module很熟悉， 但是能大概了解一些。  我始终搞不懂，msdn为什么要提管理员？   3. 谢谢你

user: user-2
content: OK, 让我们重新来过： CreateEvent可以用于创建或者打开一个Event. 对于创建来说，默认创建的Event的操作种类（读/写/同步等）标记中包含了EVENT_ALL_ACCESS标记，这些标记表示对event可以进行的操作，而标记和标记代表的具体操作可以授权给谁去执行记录在Event相关的Security Descriptor中的DACL结构中。所以Event具备了EVENT_ALL_ACCESS标记并不表示你可以使用该标记代表的操作（如果该标记的相关ACE中没有你的话），至于创建的event默认都具备EVENT_ALL_ACCESS标记（不管是不是admin用户），但是不同用户创建的Event的EVENT_ALL_ACCESS操作默认却是授权给不同用户/组的。 对于打开命名Event来说（别人创建的Event）， 该Event必须创建时具备EVENT_ALL_ACCESS标记（默认都是满足的），但是如果EVENT_ALL_ACCESS标记未授权给你时你的打开操作就会失败。

user: user-0
content: 引用 1 楼 Idle_ 的回复:默认创建的是全部权限，但是这个权限是这个event的权限而不是用户权限。使用时系统会以event的权限和用户权限联合判断最终权限的。  Using this access right increases the possibility that your application must be run by an Administrator.  这句话怎么解释呢？   说明程序的 完整性级别值必须是high。  标准用户是medium

user: user-2
content: 默认创建的是全部权限，但是这个权限是这个event的权限而不是用户权限。使用时系统会以event的权限和用户权限联合判断最终权限的。
user-0 提问: C语言A+B+C 一个题目运算有些不懂的地方求解答

回复:
user: user-1
content: 理由很简单 printf("%d%d%d\n", A + B + C); 第一个%d，会得到正确的解析，即是A+B+C的值， 后面两个%d，由于没有了实参，会错误解析未知的内存空间，故是乱码

user: user-2
content: #include <stdio.h>   int main() {         int A, B, C,D;         scanf("%d %d %d", &A, &B, &C);         if (A<-40 || B<-40 || C<-40 || A>40 || B>40 || C>40)         {             break;         }         else         {              D=A+B+C;              printf("%d\n",D);         }        return 0; }

user: user-3
content: #include<stdio.h> int main(void) {     int a, b, c;     scanf("%d%d%d", &a, &b, &c);     if(a > 40 || a < -40 || b > 40 || b < -40 || c > 40 || c < -40)         return 0;     printf("%d", a+b+c);          return 0; }

user: user-4
content: 好无聊的题目啊

user: user-5
content: 语法都是错的,你想干嘛!

user: user-6
content: “你的答案是:26-10771516890    标准答案是:6 ” 这题还有标准答案啊。。。

user: user-7
content: 先要年入门书哇！！ 题目没说是“整数”，不能用int，用double更合理吧  #include <stdio.h>  int main() { 	double A, B, C; 	char c = 'y'; 	do 	{ 		printf("请输入三个在[-40，40]内的数(各数之间用空格隔开):\n"); 		scanf("%lf %lf %lf", &A, &B, &C); 		while (A<-40 || B<-40 || C<-40 || A>40 || B>40 || C>40) 		{ 			printf("吾草啊！请输入三个在[-40，40]内的数(各数之间用空格隔开):\n"); 			scanf("%lf %lf %lf", &A, &B, &C); 		} 		printf("A+B+C = %lg\n", A + B + C); 		printf("输入\"y\"继续，请输入其它字符结束： "); 		scanf(" %c", &c); 	} while (c == 'y' || c == 'Y'); 	return 0; }

user: user-8
content: #include <stdio.h> int main() {      int A,B,C;      A=22,B=1,C=3;      printf("%d\n",A+B+C);  //A+B+C的結果用%d顯示      return 0; }

user: user-9
content: 连语法都是错的

user: user-10
content: 引用 楼主 linxiaobin2 的回复:题目：输入为一行，包括了用空格分隔的三个数据A、B、C（数据范围均在-40~40之间）。输出为一行，为“A+B+C”的计算结果。   我写的代码： #include <stdio.h>  int main()  {      int A,B,C;      A=22,B=1,C=3;      printf("%d%d%d\n",A+B+C);      return 0;  }  我个人觉得算出来应该是26  但系统说我是错的！ “你的答案是:26-10771516890    标准答案是:6 ” 求大牛解答！ 怎么会是6呢？？心算一下  22+1+3=26啊  你的printf语句语法有问题，A+B+C的值会在第一个%d输出，后两个%d输出的值会是随机值（垃圾值）

user: user-11
content: 你printf有错误导致的   #include <stdio.h> #include <stdlib.h> int main() {     int A,B,C,D;      A=22,B=1,C=3,D=5;      printf("1.%d\n2.%d\n3.%d\n4.%d\n5.%d\n6.%d\n7.%d\n",A+B+C);      //要求输入7个变量,这里只输入了一个变量，那么剩下的6个是随机的      	system("pause"); 	return 0; }

user: user-12
content: 没scanf输入。

user: user-13
content: 引用 8 楼 liuhengxiao 的回复:答案错误~~ 题目是输入3个数（-40-40之间），输入没有，判断数值大小也没有哦~我只改lz的代码，不写

user: user-14
content: 引用 7 楼 zxh707wk 的回复:好吧，我被惊呆了 #include <stdio.h> int main() { 	int A, B, C; 	A = 22, B = 1, C = 3; 	printf("%d\n", A + B + C); 	return 0; }  答案错误~~ 题目是输入3个数（-40-40之间），输入没有，判断数值大小也没有哦~

user: user-13
content: 好吧，我被惊呆了 #include <stdio.h> int main() { 	int A, B, C; 	A = 22, B = 1, C = 3; 	printf("%d\n", A + B + C); 	return 0; }

user: user-14
content: 晕。。手快敲错注释符号了。。。

user: user-14
content: printf("%d\n",A+B+C);\\这是打印A+B+C的值 printf("%d%d%d\n",A,B,C);\\这是打印ABC的值，但这里你会发现打印的是2613 //因为这里"%d%d%d\n"每个数之间没有用空格或者其他标识符分开 //printf函数中要输出多个值时，后面的每个参数中间要用逗号","隔开 //你还是看看C语言基础书吧，你这样的学习方式很累的

user: user-0
content: 引用 1 楼 dbzhang800 的回复:1. 你写的代码不符合题目要求 2. 你的printf语句本身也不对 那要怎么写了还有我的printf  怎么不对  新手不懂刚学  请多多指教！

user: user-0
content: 那要怎么写了还有我的printf  怎么不对  新手不懂刚学  请多多指教！

user: user-15
content: 你的语法都不对
user-0 提问: [菜鸟提问之2]为何定义成布尔类型就出错？

回复:
user: user-1
content: 需要头文件 stdbool.h  或 自定义 bool 类型

user: user-2
content: 引用 5 楼 guankle 的回复:C89标准里没有定义布尔型，可以用int型0判断为假，1判断为真。 从C99标准开始，引入布尔类型名字为“_Bool”。 也可以自己定义布尔型。  恩，因为bool/true/false都不是C99中的关键词，所以需要头文件 stdbool.h 来使用它们，不然只能用 _Bool / 1 / 0

user: user-3
content: C89标准里没有定义布尔型，可以用int型0判断为假，1判断为真。 从C99标准开始，引入布尔类型名字为“_Bool”。 也可以自己定义布尔型。

user: user-4
content: 引用 3 楼 dbzhang800 的回复:因为C89中没有 bool 这个类型  如果你的编译器支持C99，你可以包含头文件 stdbool.h

user: user-2
content: 因为C89中没有 bool 这个类型  如果你的编译器支持C99，你可以包含头文件 stdbool.h

user: user-0
content: # include <stdbool.h>   。

user: user-0
content: 这个？ http://bbs.csdn.net/topics/380024461
user-0 提问: C内存分配

回复:
user: user-1
content: 一般来讲 堆区 栈区 全局区都是在一定的地址范围内

user: user-1
content: 内存分配应该和系统的内存管理有关

user: user-2
content: 函数参数，和函数内临时变量在栈中的地址和和编译器有关.
user-0 提问: 求C语言订单处理系统代码框架，大神帮帮忙

回复:
user: user-1
content: 自己写啦

user: user-0
content: 编了好久还是有问题

user: user-2
content: 先将订单信息与订单明细建立两个结构体的数据结构。 然后编写处理函数，每一处理都是单独一个函数。
user-0 提问: 共享锁出现了个bug，找不到方法修改

回复:
user: user-0
content: 引用 7 楼 Idle_ 的回复:[quote=引用 6 楼 u012879787 的回复:] [quote=引用 5 楼 Idle_ 的回复:] 更正一下，为防止减到负数：while( n && n == InterlockedCompareExchange(&IsReadOver, n-1, n) );  牛逼，你对windows底层，了解比较深刻了。  佩服[/quote]  其实开始认为用 if( InterlockedDecrement(&IsReadOver) < 0 ) InterlockedIncrement(&IsReadOver); 就可以达到目的。  后来仔细想了想发觉有漏洞，有造成写一次读超过3次的可能（极端情况下会读取无数次--只要两个线程切换时保持IsReadOver==-1的情况出现即在执行完If判断而未执行InterlockedIncrement时切换线程了），而不是防止出现IsReadOver<0的情况后最多出现写一次读3次（PS: 如果楼主的本来是希望写一次最多读2次的话那么Reader代码的逻辑是有问题的）[/quote]  if( InterlockedDecrement(&IsReadOver) < 0 ) InterlockedIncrement(&IsReadOver);   线程1， 线程2 2个读线程， 来执行这逻辑代码。  线程1， isreadeover由2变为1， 同时，线程2被中断，线程1 继续把1变为0.  此时候，线程2 把把0变成-1， 线程2把-1变成-2.然后线程1可能把-2变成-3. 等等，  都有可能性。   可以说，这代码非常糟糕，很烂。  根源在于：  读线程里的那个while循环  。    最好的法子是:    想有几个读者，就创建几个读者即可。

user: user-1
content: 引用 6 楼 u012879787 的回复:[quote=引用 5 楼 Idle_ 的回复:] 更正一下，为防止减到负数：while( n && n == InterlockedCompareExchange(&IsReadOver, n-1, n) );  牛逼，你对windows底层，了解比较深刻了。  佩服[/quote]  其实开始认为用 if( InterlockedDecrement(&IsReadOver) < 0 ) InterlockedIncrement(&IsReadOver); 就可以达到目的。  后来仔细想了想发觉有漏洞，有造成写一次读超过3次的可能（极端情况下会读取无数次--只要两个线程切换时保持IsReadOver==-1的情况出现即在执行完If判断而未执行InterlockedIncrement时切换线程了），而不是防止出现IsReadOver<0的情况后最多出现写一次读3次（PS: 如果楼主的本来是希望写一次最多读2次的话那么Reader代码的逻辑是有问题的）

user: user-2
content: Synchronization Functions The following functions are used in synchronization.        CancelWaitableTimer   CreateEvent   CreateMutex   CreateSemaphore   CreateWaitableTimer   DeleteCriticalSection   EnterCriticalSection   GetOverlappedResult   InitializeCriticalSection   InitializeCriticalSectionAndSpinCount   InterlockedCompareExchange   InterlockedDecrement   InterlockedExchange   InterlockedExchangeAdd   InterlockedIncrement   LeaveCriticalSection   MsgWaitForMultipleObjects   MsgWaitForMultipleObjectsEx   OpenEvent   OpenMutex   OpenSemaphore   OpenWaitableTimer   PulseEvent   QueueUserAPC   ReleaseMutex   ReleaseSemaphore   ResetEvent   SetCriticalSectionSpinCount   SetEvent   SetWaitableTimer   SignalObjectAndWait   TimerAPCProc   TryEnterCriticalSection   WaitForMultipleObjects   WaitForMultipleObjectsEx   WaitForSingleObject   WaitForSingleObjectEx

user: user-3
content: 引用 5 楼 Idle_ 的回复:更正一下，为防止减到负数：while( n && n == InterlockedCompareExchange(&IsReadOver, n-1, n) );  牛逼，你对windows底层，了解比较深刻了。  佩服

user: user-0
content: 有高手知道吗？

user: user-1
content: 更正一下，为防止减到负数：while( n && n == InterlockedCompareExchange(&IsReadOver, n-1, n) );

user: user-1
content: 引用 3 楼 Idle_ 的回复:将InterlockedDecrement(&IsReadOver);换成： int n = IsReadOver; InterlockedCompareExchange(&IsReadOver, n-1, n); 即可  抱歉，应该用循环以保证能够减一：  do {     n = IsReadOver; } while( n == InterlockedCompareExchange(&IsReadOver, n-1, n) );

user: user-1
content: 将InterlockedDecrement(&IsReadOver);换成： int n = IsReadOver; InterlockedCompareExchange(&IsReadOver, n-1, n); 即可
user-0 提问: 用C语言算打折的衣服

回复:
user: user-1
content: 百度下printf，研究下输出格式。内容还是不少的，用于格式化输入还是很有用

user: user-2
content: 做事儿的时候仔细心点总是好的，很多问题都需要自己去找解决办法，代码结果不对，首先静下心来审视一下自己写的代码，每句代表什么意思自己是否真的弄明白了，逻辑是否严密，自己可以先去查资料，实在不行的话再问人。

user: user-3
content: #include <stdio.h>  int main() { 	int n,sum=0; 	float total=0; 	printf ("Please input a number:\n"); 	scanf ("%d",&n); 	sum=95*n; 	if (sum>300) 	{ 		total=sum*0.85; 		printf ("The price is %.2f\n",total);////////////////////  	} 	else 	{ 		total=sum; 		printf ("The price is %.2f\n",total); 	} 	 	return 0;  } 你啊

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

user: user-0
content: 引用 1 楼 u012421456 的回复:sum是int，你的%f.2??  我改后编程为下面： #include <stdio.h>  int main() { int n,sum=0; float total=0; printf ("Please input a number:\n"); scanf ("%d",&n); sum=95*n; if (sum>300) { total=sum*0.85; printf ("The price is %f.2\n",total); } else { total=sum; printf ("The price is %f.2\n",total); } }   改为这样，为什么结果是不理想？？？请大侠帮忙

user: user-5
content: %f.2改成%.2f

user: user-6
content: 应该是输入输出问题

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

user: user-4
content: 仅供参考 #include <stdio.h>  int main() { 	int sum = 0; 	float total = 0; 	printf("Please input a number:\n"); 	scanf("%d", &sum); 	total = 95.0 * sum; 	if (total > 300.0) 	{ 		total = total*0.85; 	} 	printf("The price is %f.2\n", total); 	return 0; }

user: user-8
content: 如果没理解错的话。。。原意应该是这个吧。。。。 格式问题楼上已经指正 if (sum>300) { total=sum*0.85; printf ("The price is %f.2\n",total);//应该是total，不应该是sum } else { total=sum; printf ("The price is %f.2\n",total);//应该是total，不应该是sum }

user: user-9
content: printf ("The price is %f.2\n",sum); sum 是int类型

user: user-3
content: 楼主还是输入输出的格式问题啊！

user: user-3
content: sum是int，你的%f.2??
user-0 提问: C语言中两点之间距离？

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

user: user-2
content: 好快~

user: user-3
content: 引用 3 楼 u012421456 的回复:C语言的输入输出都有格式要求，不同格式对应不同数据类型，这点需谨记 楼主这样的问题，其实仔细看看应该可以看出的，学习一门语言，初学时需要多练习，多看书，注意细节，注意全角半角等易错处+1

user: user-4
content: C语言的输入输出都有格式要求，不同格式对应不同数据类型，这点需谨记 楼主这样的问题，其实仔细看看应该可以看出的，学习一门语言，初学时需要多练习，多看书，注意细节，注意全角半角等易错处

user: user-0
content: 引用 1 楼 lx458004975 的回复:scanf ("%d%d%d%d",&x1,&x2,&y1,&y2); 改下吧scanf ("%f%f%f%f",&x1,&x2,&y1,&y2);  感谢大侠！

user: user-5
content: scanf ("%d%d%d%d",&x1,&x2,&y1,&y2); 改下吧scanf ("%f%f%f%f",&x1,&x2,&y1,&y2);
user-0 提问: 以下字符数组的定义为什么错误

回复:
user: user-1
content: 字符串数组与字符数组..

user: user-2
content: char 只有分配到一个字符的内存空间，而"C","h","i","n","a"示字符串，在字母后面系统会自动加一个空格符，表示两个字符，所以"C","h","i","n","a"不能用char来存

user: user-3
content: char c[5]={"C","h","i","n","a"}  应该用‘’单引号，而不是双引号，双引号表示字符串了

user: user-4
content: 目测是lz把字打错了

user: user-5
content: char c[5]={'c','h','i','n','a'};	//字符数组 char *c1[5]={"C","h","i","n","a"};  //字符串数组  for(int i=0; i<5; i++) { 	printf("%c-%s\n", c[i], c1[i]); }

user: user-6
content: 楼主现在该是酱紫

user: user-7
content: 那书是著名的坑人宝典。

user: user-8
content: 引用 4 楼 yagamil 的回复:[quote=引用 楼主 yagamil 的回复:] char c[5]={"C","h","i","n","a"} 为什么错误的？  我是看的 程序员面试宝典这本书。。。 引用 1 楼 user-11 的回复:'C'是字符， "C"是字符串。 这个应该是正解~~~~~[/quote]  顶一下

user: user-0
content: 引用 楼主 yagamil 的回复:char c[5]={"C","h","i","n","a"} 为什么错误的？  我是看的 程序员面试宝典这本书。。。 引用 1 楼 user-11 的回复:'C'是字符， "C"是字符串。 这个应该是正解~~~~~

user: user-9
content: 还有就是使用字符数组表示字符串，结尾需有一个\0，像你要表示字符串“hello”，数组至少需要6个位置，关于字符串，可以看看这个——http://blog.csdn.net/u012421456/article/details/38645335

user: user-10
content: 如何你没看错的话，那就换一本书吧！

user: user-11
content: 'C'是字符， "C"是字符串。
user-0 提问: 关于“resource.h"里的资源文件代码~~~~求解

回复:
user: user-1
content: 英语也是一门计算机语言的说。

user: user-0
content: 谢谢！~~~

user: user-2
content: 引用Defines a left-aligned text control. 定义一个左对齐的文本控件。

user: user-0
content: 引用 1 楼 user-3 的回复:http://msdn.microsoft.com/library/office/aa381021.aspx 哥哥，我英语烂啊~~~能解释下不？

user: user-3
content: http://msdn.microsoft.com/library/office/aa381021.aspx
user-0 提问: C语言include<> 路径问题

回复:
user: user-1
content: 引用 3 楼 q332010372 的回复:可以加绝对路径，如果不加绝对路径，编译器就会根据工程配置里的 include 默认路径去寻找，最后三个是因为这三个头文件是在默认路径下的三个不同的文件夹里面 绝对路径不适合的，遇到问题很麻烦的，写好的项目在别人哪里如何运行？？ 一般都用相对路径的

user: user-2
content: 引用 3 楼 q332010372 的回复:可以加绝对路径，如果不加绝对路径，编译器就会根据工程配置里的 include 默认路径去寻找，最后三个是因为这三个头文件是在默认路径下的三个不同的文件夹里面 其实都在/usr/include 下

user: user-3
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-4
content: 相对路径嘛  以Linux为例 #include <errno.h> 实际包含的是 /usr/include/errno.h  #include <sys/ioctl.h> 实际包含的是 /usr/include/sys/ioctl.h

user: user-5
content: 可以加绝对路径，如果不加绝对路径，编译器就会根据工程配置里的 include 默认路径去寻找，最后三个是因为这三个头文件是在默认路径下的三个不同的文件夹里面

user: user-6
content: 引用 1 楼 cfjtaishan 的回复:后面三个不同的地方时这是三个头文件都在自己独立的目录里。而这些目录和上面的头文件在相同的路径下。所以，需要加上相对路径了。+1

user: user-7
content: 后面三个不同的地方时这是三个头文件都在自己独立的目录里。而这些目录和上面的头文件在相同的路径下。所以，需要加上相对路径了。
user-0 提问: error C2440: “=”: 无法从“int”转换为“TCHAR [21]”

回复:
user: user-1
content: 引用 9 楼 xxsnihao 的回复:。。。。老大 能帮我写下吗 该怎么执行啊 我就像AAA= 我爱你 就可以char *AAA = "我爱你";//char AAA[7] = "我爱你"; if(strcmp(m_strTeleport[tIndex].TelName, AAA == 0)  {      //执行代码  }

user: user-2
content: 引用 2 楼 user-3 的回复:if(strcmp(m_strTeleport[tIndex].TelName, "我爱你") == 0) {     //执行代码 }+1

user: user-0
content: 。。。。老大 能帮我写下吗 该怎么执行啊 我就像AAA= 我爱你 就可以

user: user-1
content: 引用 5 楼 xxsnihao 的回复:如果想把 我爱你 设置成一个变量该怎么弄呢  int AAA = "我爱你"; if(strcmp(m_strTeleport[tIndex].TelName, AAA == 0)  {      //执行代码  }   呵呵这样可以吗int坑定是放不下的，而且不好输出

user: user-1
content: 引用 5 楼 xxsnihao 的回复:如果想把 我爱你 设置成一个变量该怎么弄呢  int AAA = "我爱你"; if(strcmp(m_strTeleport[tIndex].TelName, AAA == 0)  {      //执行代码  }   呵呵这样可以吗一个汉字占两个字节，自己需要多少可以算下，后面记得+1（还有个"\0"）

user: user-1
content: 引用 5 楼 xxsnihao 的回复:如果想把 我爱你 设置成一个变量该怎么弄呢  int AAA = "我爱你"; if(strcmp(m_strTeleport[tIndex].TelName, AAA == 0)  {      //执行代码  }   呵呵这样可以吗char AAA[1024]

user: user-0
content: 如果想把 我爱你 设置成一个变量该怎么弄呢  int AAA = "我爱你"; if(strcmp(m_strTeleport[tIndex].TelName, AAA == 0)  {      //执行代码  }   呵呵这样可以吗

user: user-0
content: 非常感谢 论坛的大神些太热心了

user: user-1
content: 引用 2 楼 user-3 的回复:if(strcmp(m_strTeleport[tIndex].TelName, "我爱你") == 0) {     //执行代码 }好方法

user: user-3
content: if(strcmp(m_strTeleport[tIndex].TelName, "我爱你") == 0) {     //执行代码 }

user: user-0
content: 我爱你  是文字类型的
user-0 提问: C在什么情况下使用预定义函数

回复:
user: user-1
content: 引用 3 楼 zhao4zhong1 的回复:VS IDE中，在不明白的符号上点鼠标右键，选转到定义。+1，这个功能发现挺好用的

user: user-2
content: 楼主最好上个例子

user: user-3
content: 这个是百度上的，感觉说的挺好的 1.使用预定义，可以实现函数的移植。 不管在各个种平台上，都可以实现： #define TRUE 1 #define FALSE 0 #define long INT  #define int INT //有的机器int与short的长度相同 #define short SHORT 2.使用预定义可以定义一些简单的函数,且效率很高。因为编译完成替换 #define MIN(a,b) ((a)<(b)?(a):(b)) 3.使用预定义可以防止头文件重复编译。 #ifndef _H_HEAD_H_  #define _H_HEAD_H_ aa  .... //相应的头文件内容 #endif

user: user-4
content: 预定义函数是指用宏来实现函数功能吧。  现在C++都是用inline来实现。不推荐用宏了。

user: user-5
content: 说不定在预定义里的其实是C的文件。。。

user: user-6
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。

user: user-7
content: 引用 5 楼 Damon_hoo 的回复:这个是百度上的，感觉说的挺好的 1.使用预定义，可以实现函数的移植。 不管在各个种平台上，都可以实现： #define TRUE 1 #define FALSE 0 #define long INT  #define int INT //有的机器int与short的长度相同 #define short SHORT 2.使用预定义可以定义一些简单的函数,且效率很高。因为编译完成替换 #define MIN(a,b) ((a)<(b)?(a):(b)) 3.使用预定义可以防止头文件重复编译。 #ifndef _H_HEAD_H_  #define _H_HEAD_H_ aa  .... //相应的头文件内容 #endif  说的好！

user: user-8
content: 来个例子说说，你说的难道是 ifndef/define/endif？

user: user-9
content: 引用预定义中实现 头文件？
user-0 提问: readconsoleinput如何接收中文？

回复:
user: user-1
content: 要接收ASCII码很简，读取KeyEvent.uChar.AsciiChar就行,但接收Unicode字符(如汉字)不是简单地读KeyEvent.uChar.UnicodeChar。  其实主要接收的过程了解了就很容易实现，我也是试了很久才知道怎么一回事。有时真不明白，这么简单的事在网上竟然找不到！！  大概过程：按Ctrl＋空格键 启动中文输入法后，输入一个汉字时，会连续两次发送Unicode码。每个Unicode码只是这个汉字的一半，8个位，所以我们直接读取后然后输出是不能正常显示的，而是要经过组合！！嘿嘿。  简单给个代码吧：  用一个循环读取系统消息：  HANDLE hOut;//标准输出句柄  HANDLE hIn;//标准输入句柄  wchar_t wchar;//宽字符，就是unsigned short;  char gchar[3];  string text;//  ........  DWORD res;  INPUT_RECORD InputRec;//存放消息，包括Key和Mouse  KEY_EVENT_RECORD KeyEvent;  MOUSE_EVENT_RECORD MouseEvent;  while(1) // 循环  {  ReadConsoleInput(hIn, &InputRec, 1, &res);  KeyEvent=InputRec.Event.KeyEvent;  MouseEvent=InputRec.Event.MouseEvent;  if (InputRec.EventType == KEY_EVENT)//键盘事件  ReadKeyEvent(KeyEvent);  if (InputRec.EventType == MOUSE_EVENT)//鼠标事件  ReadMouseEvent(MouseEvent);  }  在ReadKeyEvent()函数中接收处理键盘消息  void ReadKeyEvent(KEY_EVENT_RECORD &KeyEvent)  {  ......  if(KeyEvent.bKeyDown){//键盘按下时接收  wchar=KeyEvent.uChar.UnicodeChar;  if(wchar>127){//如果是Unicode码..连续接收两个  if(gchar[0]=='\0'){  gchar[0]=wchar;//Unicode字符的前8位  return;//返回继续接收后8位  }  else {  gchar[1]=wchar;//后8位  gchar[2]='\0';  text+=gchar;//接收到中文  gchar[0]='\0';  //在屏幕输出text  }  }

user: user-2
content: 中文不是KeyEvent
user-0 提问: 关于wchar_t和char的问题

回复:
user: user-1
content: 楼主不妨亲自打开include\tchar.h看个究竟。

user: user-2
content: 主要和你工程设置为Unicode有关， CreateFile实际调用的是 CreateFileW   现在一般建议不要使用_T宏来修饰字符串  char 单字节字符串    char *cComName = "COM4"; wchar_t 双字节字符串 wchar_t *cComName = L"COM4";

user: user-3
content: wchar_t是宽字节字符 char是普通字符 可以参考里面的内容 http://www.cnblogs.com/fire-phoenix/archive/2010/09/04/1818248.html   在使用时最终调用的是 CreateFile((LPCWSTR)portname  就要去protname的名称是wchar_t类型，所以出现了你说的问题。

user: user-0
content: 求指教!!!!!!!!!!
user-0 提问: 初学者想问一个C语言的问题

回复:
user: user-0
content: 引用 6 楼 chybeyond123456789 的回复:fflush(stdin); 我明白了，读取失败的数据会存到缓冲区，下一次读入的时候自动读取缓冲区的内容，所以不会有从键盘输入内容的机会。那应该还有一个办法解决，就是char ch;  while ((ch = getchar()) != '\n')  putchar(ch);也可以清空缓冲区。谢谢啦

user: user-1
content: fflush(stdin);

user: user-0
content: 引用 2 楼 lovesmiles 的回复:while ((scanf_s("%d %d", &low, &up)) != 2)这句话决定了必须要输入两个整数 那应该怎么改正呢？

user: user-2
content: 额，改正一下， 如果想继续的话，应该在while循环的最后加continue

user: user-3
content: while ((scanf_s("%d %d", &low, &up)) != 2)这句话决定了必须要输入两个整数

user: user-2
content: 在while里面加一个break即可
user-0 提问: 编译原理、操作系统看哪本书好？

回复:
user: user-1
content: 《数据结构（C语言描述）》 《算法精解（C语言描述）》 《编译原理》（红书？） 《30天自制操作系统》 《Windows核心编程》 《深入解析Windows操作系统-Windows Internals》 很高兴楼主认可我这个“模板”。
user-0 提问: switch语句结束后加return false是什么意思

回复:
user: user-1
content: 函数的返回值，不写有警告。 个人认为是编码规范问题。 例如有一天你把swich删除，就会编译错误了。

user: user-2
content: 当switch条件一条都没有满足时, 就return false.   就是这个意思

user: user-3
content: 主要用DEBUG下没有返回值，其实可以将该句移至DEBUG下。这样看可以更加清楚。

user: user-4
content: 是最后的返回值

user: user-5
content: 那只是一个函数返回值，就像int main最后的return 0一样

user: user-6
content: 函数类型是布尔型，return返回一个false。3楼正解

user: user-7
content: 其实switch中有default已经能把所有情况都处理了 最后一个return是为了消除编译警告吧 如果改成if-else结构就不需要了

user: user-8
content: 意思就是函数默认返回false.   return serialize_hello6(message, ifp);  是返回函数的返回值

user: user-9
content: 引用 3 楼 huoqingna2332 的回复:这下能看清楚了吧，最后那个return false是函数本身的返回值，和switch语句没关系。  [quote=引用 2 楼 huoqingna2332 的回复:]  bool queue_hello(struct hello_message * message, struct interface * ifp)  { #ifdef DEBUG   	OLSR_PRINTF(BMSG_DBGLVL, "Building HELLO on %s\n-------------------\n", ifp->int_name); #endif   	switch (olsr_cnf->ip_version)  	{   		case (AF_INET6):    			return serialize_hello6(message, ifp);  		case (AF_INET):   		default:     			return serialize_hello4(message, ifp);  	}  	return false; } [/quote]return false;和return serialize_hello6(message, ifp);  有差别吗？

user: user-10
content: int foo() { puts("132"); return 0; } puts语句结束后加return 0;是什么意思啊  楼主你体会一下

user: user-11
content: 这下能看清楚了吧，最后那个return false是函数本身的返回值，和switch语句没关系。  引用 2 楼 huoqingna2332 的回复: bool queue_hello(struct hello_message * message, struct interface * ifp)  { #ifdef DEBUG   	OLSR_PRINTF(BMSG_DBGLVL, "Building HELLO on %s\n-------------------\n", ifp->int_name); #endif   	switch (olsr_cnf->ip_version)  	{   		case (AF_INET6):    			return serialize_hello6(message, ifp);  		case (AF_INET):   		default:     			return serialize_hello4(message, ifp);  	}  	return false; }

user: user-11
content: bool queue_hello(struct hello_message * message, struct interface * ifp)  { #ifdef DEBUG   	OLSR_PRINTF(BMSG_DBGLVL, "Building HELLO on %s\n-------------------\n", ifp->int_name); #endif   	switch (olsr_cnf->ip_version)  	{   		case (AF_INET6):    			return serialize_hello6(message, ifp);  		case (AF_INET):   		default:     			return serialize_hello4(message, ifp);  	} 	return false; }

user: user-11
content: bool queue_hello(struct hello_message * message, struct interface * ifp)  { #ifdef DEBUG   	OLSR_PRINTF(BMSG_DBGLVL, "Building HELLO on %s\n-------------------\n", ifp->int_name); #endif   	switch (olsr_cnf->ip_version)  	{   		case (AF_INET6):    			return serialize_hello6(message, ifp);  		case (AF_INET):   		default:     			return serialize_hello4(message, ifp);  	} 	return false; }   这下能看清楚了吧，最后那个return false是函数本身的返回值，和switch语句没关系。
user-0 提问: 请告诉我为何输入字母也有输出？

回复:
user: user-0
content: 引用 7 楼 Kai_gai 的回复:[quote=引用 5 楼 Heiok 的回复:] [quote=引用 3 楼 Kai_gai 的回复:] val没有初始化，其值是随机的，楼主可以单步调试查看val的值，也可将val打印出来。  多谢各位，int val = 0; 后输入字母就OK了。但不初始化，为何就是2层，我输出val看了也是2.为何不是其他数字？[/quote] 程序在释放内存时，并不会擦除内存中的数据，只是简单的将其标记为可用。你再次运行程序时，它刚好正是你上次使用的那块内存，还未被其他程序使用。你可以等一段时间，在运行看看，它就有可能不是2了。[/quote]  不如你们自己试试？反下我试了两台机器，反复试了各种数字，他就是存2.

user: user-1
content: 引用 5 楼 Heiok 的回复:[quote=引用 3 楼 Kai_gai 的回复:] val没有初始化，其值是随机的，楼主可以单步调试查看val的值，也可将val打印出来。  多谢各位，int val = 0; 后输入字母就OK了。但不初始化，为何就是2层，我输出val看了也是2.为何不是其他数字？[/quote] 程序在释放内存时，并不会擦除内存中的数据，只是简单的将其标记为可用。你再次运行程序时，它刚好正是你上次使用的那块内存，还未被其他程序使用。你可以等一段时间，在运行看看，它就有可能不是2了。

user: user-2
content: 是不是你之前是用2测试的，正确了，然后又用字母再测试。因为字母不是%d的类型，所以没有输入，val的值还是上一个有效输入的值。

user: user-0
content: 引用 3 楼 Kai_gai 的回复:val没有初始化，其值是随机的，楼主可以单步调试查看val的值，也可将val打印出来。  多谢各位，int val = 0; 后输入字母就OK了。但不初始化，为何就是2层，我输出val看了也是2.为何不是其他数字？

user: user-3
content: 新建变量时切记要给变量赋初值

user: user-1
content: val没有初始化，其值是随机的，楼主可以单步调试查看val的值，也可将val打印出来。

user: user-4
content: val没有初始化， 也没有正确输入。

user: user-5
content: 因为 val 一直有值  只是你输入字母的时候 val 存储的值是什么没人能确定罢了
user-0 提问: C语言求助！！！高分给

回复:
user: user-1
content: 仅供参考 按学校名、班名、成绩三级排序 http://pan.baidu.com/s/1ntuNH0X

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h> int main () {   char c[1024] = { };   FILE *fp = NULL;   fp = fopen ("file.txt", "r");     printf ("-------print the file ------\n");   while (fgets (c, sizeof (c), fp) != NULL)   {       printf ("%s", c);   }   printf ("\n------------------------------\n");   fclose(fp);   return 0; }  比较简单的代码，*.exe和file.txt要在同一目录。

user: user-0
content: 引用 1 楼 u012421456 的回复:考号排序怎么了，可以把这三个放到结构体中，然后对结构体中的考号进行排序 可以参考一下——http://blog.csdn.net/u012421456/article/details/26170519 其实我不太会的是文件。。

user: user-3
content: 索引是啥，看看几个百科吧——http://www.gfsswy.com/?q=索引

user: user-3
content: 考号排序怎么了，可以把这三个放到结构体中，然后对结构体中的考号进行排序 可以参考一下——http://blog.csdn.net/u012421456/article/details/26170519
user-0 提问: 各位大哥请教一下！！不知道怎么弄了

回复:
user: user-1
content: 引用 15 楼 huazi3531919 的回复:连买回教材不到三天，你们就叫我改行，我只是来求解的，各位大哥！ 要不换个编译器吧 dev c++、c-free、gcc什么的

user: user-0
content: 连买回教材不到三天，你们就叫我改行，我只是来求解的，各位大哥！

user: user-2
content: main()函数前用了void，就不用再return 0了。

user: user-3
content: 引用 13 楼 u014444402 的回复:趁早改行吧，小兄弟。 中肯

user: user-4
content: 趁早改行吧，小兄弟。

user: user-5
content: void干嘛return0

user: user-5
content: void干嘛return0

user: user-5
content: void干嘛return0

user: user-1
content: 楼主3楼的错误5楼已经给出，二楼错误看不出来，编译器报的什么错，拿出来看看

user: user-6
content: 看看这个是否有用http://club.topsage.com/thread-2279554-1-1.html

user: user-6
content: 是兼容性问题，当年我们寝室的胖子为了这个花了一个多礼拜才弄好的，你可以去下载别人已经安装能用的吧，如果只是简单的写程序，你可以使用cfree，这个操作简单，比较容易上手……

user: user-7
content: 引用 3 楼 huazi3531919 的回复:  printf 写错了，还有main函数为void为什么还要return 0？

user: user-8
content: error说的啥

user: user-0

user: user-0

user: user-7
content: 代码贴出来看看你。。
user-0 提问: 关于C中的stdin和stdout自定义出现的问题

回复:
user: user-0
content: 引用 1 楼 Idle_ 的回复:你stdin都重定向到串口了，当然输入从串口读了，和键盘没关系   表示解决了，将 static int UartIoGetChar(FILE *stream){     loop_until_bit_is_set(rUCSRA, rRXC);     unsigned char data=rUDR;     return data; }  改为：  static int UartIoGetChar(FILE *stream){ 	loop_until_bit_is_set(rUCSRA, rRXC); 	unsigned char data=rUDR; 	if ((data=='\n')|(data=='\r')|(data=='\0')) return -1; 	return data;   }   就可以成功使用fgets了，但是为什么要这样？？？？不是gets是碰到换行符就结束了吗，为什么一定要把换行符改成EOF才可以？？

user: user-0
content: 引用 1 楼 Idle_ 的回复:你stdin都重定向到串口了，当然输入从串口读了，和键盘没关系 是啊，是从串口读，但是读不了啊，C上课老师也没怎么讲标准输入输出  我的  static int UartIoGetChar(FILE *stream){     loop_until_bit_is_set(rUCSRA, rRXC);     unsigned char data=rUDR;     return data; } 对不对，重定向到这个函数行不行？这个函数就是串口有什么，它就返回什么

user: user-1
content: 引用 1 楼 Idle_ 的回复:你stdin都重定向到串口了，当然输入从串口读了，和键盘没关系 ++

user: user-2
content: 你stdin都重定向到串口了，当然输入从串口读了，和键盘没关系
user-0 提问: 定义的数组自己变成指针类型了

回复:
user: user-1
content: 有句话叫做，数组名作参数，隐式指针化

user: user-2
content: 无非是关于退化的两点： 函数声明的参数类型，数组形式的声明符会调整为指针； 在特定上下文（例如sizeof和一元&的操作数）以外数组左值转换为指向首个元素的指针值。 VC++？再加一点：不开/Za用了坑爹扩展，&字面量不会得到指向数组的指针。

user: user-2
content: 引用 1 楼 lovesmiles 的回复:数组本来就是指针。 引用 2 楼 lisong694767315 的回复:数组名是指向首元素的指针。 这群瞎扯蛋的怎么混上五个三角形的。 引用 5 楼 u010101009 的回复:数组名是指向首元素的指针的 嫌复读机不够多？

user: user-3
content: 楼上正解

user: user-4
content: 建议搜一下 “数组名 指针”看看两者的联系区别

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

user: user-6
content: 数组名是指向首元素的指针的

user: user-7
content: 数组名和指针类似，但又有些不同——http://blogger.org.cn/blog/more.asp?name=newqiang&id=11178

user: user-8
content: 数组名是指向首元素的指针。

user: user-9
content: 数组本来就是指针。
user-0 提问: C/C++中字符串占据空间的计算

回复:
user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-2
content: 引用 8 楼 u012421456 的回复:  支持！！！

user: user-3
content: 6，7，8正解。。。

user: user-0
content: 谢谢各位的解释和调试，赵老师有大师的风范，赞一个

user: user-4
content: 引用 9 楼 zhao4zhong1 的回复:"啊";//占几个字节？通常GBK或Unicode占3个，Utf8占4个。 赵老师的指点是很全面的~

user: user-1
content: "啊";//占几个字节？通常GBK或Unicode占3个，Utf8占4个。

user: user-5

user: user-6
content: 说有答案的都是在坑人.这个问题是标准规定的不定义的行为.每个编译器的作者都可以自行决定如何实现字符串常量的存储.比如把字符串存到一个远程数据库,或者存到只读ROM而不是内存里也是可以的.  ISO/IEC 14882:2003 2.13. 2.13. String literals  [...]An ordinary string literal has type “array of n const char” and static storage duration (3.7)  Whether all string literals are distinct (that is, are stored in nonoverlapping objects) is implementation- defined. The effect of attempting to modify a string literal is undefined.  一个可以进行的编译器优化是为str1分配空间之后将str指向str1的第二个字符,这样两个字符串可以共享空间.

user: user-7
content: \t 和 \0都是转义字符，加上字符传最后的结束符  所以是6，7， 8咯

user: user-8
content: 占空间一个个数不就行了？这样的问题还需要讨论？你是被面试题坑过了，想问strlen和sizeof两个东西运算后的结果吧。

user: user-9
content: 分别是6、7、8 可以写成char str2[] = "\tab\0cde";，然后使用sizeof(str2)进行验证
user-0 提问: strlen()返回值的问题

回复:
user: user-1
content: #pragma warning(disable:4996) #include <stdio.h> #include <string.h> int main(void) {     char name[40];     int letters;      scanf("%39s",name);     printf("%d\n",sizeof(name));     letters=strlen(name);     printf("%d\n",letters);      return 0; }

user: user-2
content: scanf_s("%s",name); 改成 gets(name);不好？

user: user-0
content: 引用 1 楼 lovesmiles 的回复:scanf_s用错了，这个函数的参数你没有设置对。 改成scanf吧。  嗯，我又找了一下，发现scanf_s()确实用错了，我改成scanf_s("%s",name,40)就可以了。

user: user-0
content: 引用 3 楼 zxh707wk 的回复:[quote=引用 1 楼 lovesmiles 的回复:] scanf_s用错了，这个函数的参数你没有设置对。 改成scanf吧。+1，lz是用vs编译代码的吧[/quote]  用的vs2012，用scanf会报错。。。

user: user-3
content: scanf_s缺一个缓冲区长度

user: user-4
content: 引用 1 楼 lovesmiles 的回复:scanf_s用错了，这个函数的参数你没有设置对。 改成scanf吧。+1，lz是用vs编译代码的吧

user: user-5
content: 确实，刚查了一下，scanf_s还要求一个参数

user: user-6
content: scanf_s用错了，这个函数的参数你没有设置对。 改成scanf吧。
user-0 提问: 请教入栈和销毁栈的问题

回复:
user: user-0
content: 引用 3 楼 lovesmiles 的回复:[quote=引用 2 楼 zaixiankaifa 的回复:] [quote=引用 1 楼 lovesmiles 的回复:] 第一个问题，你的想法是对的，但不需要加新增的长度，只需将top指回原来的栈顶即可。  p->top=q->base+p->Stack_Size;  第二个问题，你完全搞错了free的用法，一个malloc对应一个free。而不是一个字节free一次。 所以你只需要free一次即可，放在for里面就错了  为什么指回原来栈顶位置呢？ q->top作为栈顶指针应该是在栈的最上方呀，那么就应该是：最低位置的q->base+Stack_Size(原栈顶位置)+STACK_INIT_SIZE(新增空间),难道不是这样么？[/quote]  不对，新增的空间是没有数据的，栈顶在新空间的上面做什么？ 栈顶应该指在最后的一个数据处，当新数据入栈时，栈顶才一步步递增，填满新增的空间。[/quote]  这样说对噢

user: user-1
content: 个人意见 //q->top=q->base+STACK_INIT_SIZE;

user: user-2

user: user-3
content: 引用 2 楼 zaixiankaifa 的回复:[quote=引用 1 楼 lovesmiles 的回复:] 第一个问题，你的想法是对的，但不需要加新增的长度，只需将top指回原来的栈顶即可。  p->top=q->base+p->Stack_Size;  第二个问题，你完全搞错了free的用法，一个malloc对应一个free。而不是一个字节free一次。 所以你只需要free一次即可，放在for里面就错了  为什么指回原来栈顶位置呢？ q->top作为栈顶指针应该是在栈的最上方呀，那么就应该是：最低位置的q->base+Stack_Size(原栈顶位置)+STACK_INIT_SIZE(新增空间),难道不是这样么？[/quote]  不对，新增的空间是没有数据的，栈顶在新空间的上面做什么？ 栈顶应该指在最后的一个数据处，当新数据入栈时，栈顶才一步步递增，填满新增的空间。

user: user-0
content: 引用 1 楼 lovesmiles 的回复:第一个问题，你的想法是对的，但不需要加新增的长度，只需将top指回原来的栈顶即可。  p->top=q->base+p->Stack_Size;  第二个问题，你完全搞错了free的用法，一个malloc对应一个free。而不是一个字节free一次。 所以你只需要free一次即可，放在for里面就错了  为什么指回原来栈顶位置呢？ q->top作为栈顶指针应该是在栈的最上方呀，那么就应该是：最低位置的q->base+Stack_Size(原栈顶位置)+STACK_INIT_SIZE(新增空间),难道不是这样么？

user: user-3
content: 第一个问题，你的想法是对的，但不需要加新增的长度，只需将top指回原来的栈顶即可。  p->top=q->base+p->Stack_Size;  第二个问题，你完全搞错了free的用法，一个malloc对应一个free。而不是一个字节free一次。 所以你只需要free一次即可，放在for里面就错了
user-0 提问: linux下标准io缓冲问题

回复:
user: user-1
content: 是这样的，读写操作很多时候都是在虚拟磁盘上操作的。 比如写文件，当你调用write函数之后，你buffer中的内容并不是马上写到文件，而是通过文件系统暂时放在缓存中， 当内存页变赃后才会写到磁盘中，而用fflush想当与跳过这个过程直接写到磁盘中。

user: user-2
content: When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired.

user: user-3
content: 引用 4 楼 wsx199397 的回复:[quote=引用 3 楼 hnwyllmm 的回复:] 很奇怪，我没有看过这本书，也没有见过这样的说法，并且我们操作像Socket（TCP协议时）这种全双工的流时，开两个线程，同时对一个描述字做读写操作 是指的一个线程用于读一个线程用于写吗？在实际应用中我也觉得应该是你说的做法，对socket的io操作是通过什么进行的？应该不会用标准io了吧[/quote] 标准IO也可以，我是直接用标准IO的 既然是全双工的，自然是读写可以同时进行的，就是有缓冲，也是读写缓冲分开的，最典型的就是控制台，也没有见谁用了print再scanf之前刷新一把标准输出的

user: user-0
content: 引用 3 楼 hnwyllmm 的回复:很奇怪，我没有看过这本书，也没有见过这样的说法，并且我们操作像Socket（TCP协议时）这种全双工的流时，开两个线程，同时对一个描述字做读写操作 是指的一个线程用于读一个线程用于写吗？在实际应用中我也觉得应该是你说的做法，对socket的io操作是通过什么进行的？应该不会用标准io了吧

user: user-3
content: 很奇怪，我没有看过这本书，也没有见过这样的说法，并且我们操作像Socket（TCP协议时）这种全双工的流时，开两个线程，同时对一个描述字做读写操作

user: user-4
content: 不太懂，顶一下吧

user: user-0
content: For files open for update (those which include a "+" sign), on which both input and output operations are allowed, the stream shall be flushed (fflush) or repositioned (fseek, fsetpos, rewind) before a reading operation that follows a writing operation. The stream shall be repositioned (fseek, fsetpos, rewind) before a writing operation that follows a reading operation (whenever that operation did not reach the end-of-file 看来对于一个 socket for update，每次在读操作是实现会自动刷新缓冲区，将上次读操作的内容从缓冲区写到socket。而对于一个socket only for write or read,只有我们显示调用上述说的函数或缓冲区满时才写到socket。
user-0 提问: 钱币变换问题 //优化问题

回复:
user: user-0
content: 不要沉啊，我真的很想知道要怎么优化。。

user: user-0
content: 是的没错。请务必帮我想想改怎么优化，我想了很久还是不懂，所以来问各位大神了

user: user-1
content: 不是说的平行移动吗？还能隔着若干位置跳过去呀。

user: user-0
content: 题目说的不能改变顺序是指你放入的ba不能变成ab

user: user-0
content: 如上图，只要是两个两个配对放入那个空格就可以

user: user-1
content: 调换位置但是不能改变排列顺序，那只能abba..abab -> abbaab..ab啊。

user: user-0

user: user-0
content: 空格和ba调换位置

user: user-1
content: 请问：“相邻的两个非空方格中的钱币可以平行移动到两个相邻的空方格中，但不能改变这两枚钱币的排列顺序。” 那么：     初始：  abba..abab     第一步：abbabaa..b 这是怎么移动的？

user: user-2
content: 一共就2^(2n-2)*(2n-1)个状态，这hash有必要搞成这样吗？

user: user-3
content: 没看懂题目的规则。。。

user: user-3
content: 对于这种刚发的帖子，我总是毫不犹豫的顶了。如果火了就是个前排，可以混个脸熟，说不定谁好心就给粉了…稳赚不赔；如果沉了就感觉是我弄沉的，很有成就感，还能捞经验。
user-0 提问: 咨询个指针的小白问题：

回复:
user: user-1
content: 强制类型转换看看 uint32 ＊p=(uint32 *)0x12345678;

user: user-2
content: 引用 4 楼 sonyex678 的回复:引用 3 楼 derekrose 的回复:[quote=引用 2 楼 sonyex678 的回复:] uint32 i= 0x12345678;  (可变) uint32 ＊p；  想要实现p＝i；这样＊p 就是i变量里寄存器地址中的内容了，但是这种赋值方式编译不允许；    [quote=引用 1 楼 derekrose 的回复:] what is 不允许  编译器说啥[/quote]   Error[Pe513]: a value of type "uint32" cannot be assigned to an entity of type "uint32 *" C:\work\iar projects\code\SimpleGPS\StdDriver\Src\cmd_srv.c 48  [/quote]  什么编译器  你给他强转一下试试？

user: user-3
content: 不行，编译器不知道你的那个地址是否正在使用

user: user-0
content: 引用 3 楼 derekrose 的回复:引用 2 楼 sonyex678 的回复:uint32 i= 0x12345678;  (可变) uint32 ＊p；  想要实现p＝i；这样＊p 就是i变量里寄存器地址中的内容了，但是这种赋值方式编译不允许；    [quote=引用 1 楼 derekrose 的回复:] what is 不允许  编译器说啥[/quote]   Error[Pe513]: a value of type "uint32" cannot be assigned to an entity of type "uint32 *" C:\work\iar projects\code\SimpleGPS\StdDriver\Src\cmd_srv.c 48

user: user-2
content: 引用 2 楼 sonyex678 的回复:uint32 i= 0x12345678;  (可变) uint32 ＊p；  想要实现p＝i；这样＊p 就是i变量里寄存器地址中的内容了，但是这种赋值方式编译不允许；    引用 1 楼 derekrose 的回复:what is 不允许  编译器说啥

user: user-0
content: uint32 i= 0x12345678;  (可变) uint32 ＊p；  想要实现p＝i；这样＊p 就是i变量里寄存器地址中的内容了，但是这种赋值方式编译不允许；    引用 1 楼 derekrose 的回复:what is 不允许

user: user-2
content: what is 不允许
user-0 提问: 请问如何将一个char变量转化成一个char字符串？

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

user: user-2
content: 使用的时候char*和 char []是一样的. 比如 char *p = NULL; p = "abcdefg"; cout<<p[2]<<endl; //   按数组方式访问 输出 c  所以你说的两东西, 在大多数使用的地方是相同的.  (但sizeof这样的地方是不同的).

user: user-3
content: 这两个对你来说有什么区别吗

user: user-4
content: 用循环 char数组末尾没有\0，字符串有。

user: user-5
content: 引用 3 楼 zhuyf87 的回复:根据"hello"的字符串长度new一个数组，然后调用字符串拷贝函数或者自己写循环。+1

user: user-6
content: 字符数组表示字符串，最后面需加上一个‘\0’ 关于字符串，可以看看这个——http://blog.csdn.net/u012421456/article/details/38645335

user: user-7
content: 就跟5楼一样就行

user: user-8
content: 根据"hello"的字符串长度new一个数组，然后调用字符串拷贝函数或者自己写循环。

user: user-9
content: char newarr[6]; strcpy(newarr,  arr);

user: user-10
content: strcpy...

user: user-11
content: 你是说将char*转为char []吗   char* arr = "hello"; char newArr[5]; for (int i=0; i<5; ++i) { 	newArr[i] = *(arr+i); }