Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c在vs2013里怎样打印字符呢？

回复:
user: user-1
content: 是你的scanf_s函数的问题，你可以看一下这个帖子http://bbs.csdn.net/topics/320083123

user: user-2
content: 因为你scanf_s用错误了, 最后少一个max buf size, 或者你用scanf别用scanf_s

user: user-3
content: 看代码真的一点问题都没有…………

user: user-0
content: 引用 3 楼 gzwgyfgpf 的回复:是你的scanf_s函数的问题，你可以看一下这个帖子http://bbs.csdn.net/topics/320083123 看了一下，c在vs2013里面打印字符，在scanf_s()加上第三个参数1就可以了，如下：  scanf_s("%c",ch,1);
user-0 提问: 结果和所给结果一样，就是ACM不通过，弄了快一下午了，求大神指教下

回复:
user: user-1
content: 如果输入最后一行没有换行符了?

user: user-0
content: 更新下代码： #include "stdio.h" int main(){ 	char c; 	int sum=0,i=0,j=0; 	while(scanf("%c",&c)!=EOF){    		    switch(c){ 			case 'A': sum+=4;i++;break; 			case 'B': sum+=3;i++;break; 			case 'C': sum+=2;i++;break; 			case 'D': sum+=1;i++;break; 			case 'F': sum+=0;i++;break; 			default: if((c<'A'||c>'F'||c=='E')&&c!=' '&&c!='\n') 						 j++; 				     if(c!='\n') break; 			} 		if(c=='\n'){ 			if(j!=0) {printf("Unknown\n");j=0;} 			else {printf("%.2f\n",sum/(1.0*(i))); i=0;  j=0;  sum=0;} 			i=0;sum=0; 		} 	} 	return 0; }
user-0 提问: 《c语言的科学和艺术》里的inchtocm.c在vc6里面老是提示出错啊！求大神

回复:
user: user-0
content: 引用 2 楼 GKatHere的回复:写一个  double GetReal() {  double db; cin >> db; return db; }   谢谢，我再试试您的方法

user: user-0
content: 引用 1 楼 我就_看看的回复:GetReal 函数的库没找到, 没看过这本书,这个函数也不是标准函数,你仔细找找是哪个库里的, 库的路径加到项目里,或者代码里包含一下#pragma comment(lib, "xxx") 谢谢，终于在论坛里找到资源了，已经解决

user: user-1
content: 写一个  double GetReal() {  double db; cin >> db; return db; }

user: user-2
content: GetReal 函数的库没找到, 没看过这本书,这个函数也不是标准函数,你仔细找找是哪个库里的, 库的路径加到项目里,或者代码里包含一下#pragma comment(lib, "xxx")
user-0 提问: 请将如下创建单链表的代码改为二级指针用参数带出头结点

回复:
user: user-0
content: 问题算是被你回答了，但这是一种投机取巧的方法，内部实现还是一级指针，看我的代码： //C语言二级指针创建链表 #if 0 #include <stdio.h>   #include <stdlib.h>      typedef int ElemType;      typedef struct Node{       ElemType elem;       struct Node *next;   }Node, *LinkedList;      //void init_linkedlist(LinkedList *list) //{   //    *list = (LinkedList)malloc(sizeof(Node));   //    (*list)->next = NULL;   //}   //   //void insert(LinkedList list, ElemType elem) //{   //    Node *p, *q;   //    q = list;   //    p = (Node *)malloc(sizeof(Node));   //    p->elem = elem;   //    p->next = NULL;   //    while(q->next != NULL) q = q->next;   //    q->next = p;   //} void CreateList(LinkedList *p1, LinkedList *p2, LinkedList *head) { 	*p1 = *p2 = (LinkedList)malloc(sizeof(Node));  	while (scanf_s("%d", &(*p1)->elem)) 	{ 		if(NULL == *head) 		{ 			*head = *p1; 			(*head)->next = NULL; 		} 		else 		{ 			(*p2)->next = *p1; 			*p2 = *p1; 		} 		*p1 = (LinkedList)malloc(sizeof(Node)); 	} 	free(*p1); 	*p1 = NULL; 	(*p2)->next = NULL; }    void main() {   	/*LinkedList list, p;   	init_linkedlist(&list);   	insert(list, 3);   	insert(list, 4);   	insert(list, 5);   	p = list->next;   	while(p != NULL) {   		printf("%4d", p->elem);   		p = p->next;   	}   	printf("\n");  */  	LinkedList p1 = NULL, p2 = NULL, p = NULL, head = NULL; 	CreateList(&p1, &p2, &head); 	p = head;   	while(p != NULL) {   		printf("%4d", p->elem);   		p = p->next;   	}    }   #endif  看看这代码，能否有更好的答案呢？

user: user-1
content: 有区别吗？ 不都是声明一级指针，然后取地址得到2级指针。

user: user-1
content: #include <stdio.h> #include <malloc.h>  //定义链表结点结构体 typedef struct _Node { 	int data; 	struct _Node* next;  }List;  void CreateList(List** ppHead) { 	List *head = NULL, *p1, *p2; 	 	if (NULL == ppHead) 	{ 		return; 	} 	 	p1 = p2 = (List*)malloc(sizeof(List));  	while (scanf("%d", &p1->data)) 	{ 		if(NULL == head) 		{ 			head = p1; 			head->next = NULL; 		} 		else 		{ 			p2->next = p1; 			p2 = p1; 		} 		 		p1 = (List*)malloc(sizeof(List)); 	} 	 	free(p1); 	*ppHead = head; }  int main(void) { 	List* pHead; 	CreateList(&pHead); 	 	if (NULL == pHead) 	{ 		return -1; 	} 	 	//operation 	 	//free list 	 	return 0; }
user-0 提问: 谁能给我一个w8可以安装的vs2010 .我是新手菜鸟。

回复:
user: user-1
content: win8可以用 使用VS社区版 免费的

user: user-2
content: 学C语言用vc6.0不就行了    没必要用vs10吧

user: user-3
content: 百度  MSDN我告诉你，找一个win8系统，重装。或者掉VS2010，装VS2013或者装vs2015
user-0 提问: 大一C语言课程设计通讯录管理系统，程序中有错误，求助高手

回复:
user: user-1
content: i也没赋值，你这怎么搞。

user: user-1
content: 你那个edit()里的a变量没有赋值

user: user-2
content: for循环的边界值都错了 for(a=0; a < i; a++)
user-0 提问: 第一次试着写linux的.so，总是有个错误，不知道哪里出了问题

回复:
user: user-1
content: 编译的时候把库链接放在最后

user: user-2
content: 编译 so gcc test.c -o libtest.so  -shared -fpic 会成生  libtest.so  编译main.c gcc -o test main.c  -L. -ltest  -Wl,-rpath,./  ------------------------------------------- gcc 时依赖要放在后面 linux 默认情况是不会在当前目去找 so  如果你的环竟 ld_libaray_path 也没指向当前目录  (可以用 ldconfig 来查看 ...)  所以要添加   -Wl,-rpath,./    (注：这个参中间不能有空格)

user: user-0
content: 引用 6 楼 user-3 的回复:[quote=引用 5 楼 C_Java_php_python 的回复:] [quote=引用 3 楼 user-3 的回复:] 尝试一下改变gcc的选项顺序，比如gcc -L -ltest -o main.c gcc main.c -ltest -L. -o test 这个顺序可以，可是为什么？[/quote]这个或许跟gcc的版本有关系。。[/quote] 好吧

user: user-3
content: 引用 5 楼 C_Java_php_python 的回复:[quote=引用 3 楼 user-3 的回复:] 尝试一下改变gcc的选项顺序，比如gcc -L -ltest -o main.c gcc main.c -ltest -L. -o test 这个顺序可以，可是为什么？[/quote]这个或许跟gcc的版本有关系。。

user: user-0
content: 引用 3 楼 user-3 的回复:尝试一下改变gcc的选项顺序，比如gcc -L -ltest -o main.c gcc main.c -ltest -L. -o test 这个顺序可以，可是为什么？

user: user-0
content: 引用 3 楼 user-3 的回复:尝试一下改变gcc的选项顺序，比如gcc -L -ltest -o main.c 也不行。。

user: user-3
content: 尝试一下改变gcc的选项顺序，比如gcc -L -ltest -o main.c

user: user-0
content: 引用 1 楼 user-3 的回复:暂时没看出问题来，能用nm 查看一下so的符号表么   这个吗？

user: user-3
content: 暂时没看出问题来，能用nm 查看一下so的符号表么
user-0 提问: 古尺问题 回溯法解题

回复:
user: user-1
content: 有点像八皇后？

user: user-2
content: 要一次测量,就是只能用刻度之间, 每选一个刻度, 计数一下看是不是能够包含所有的值 int ruler[37],ans[10]; bool solve(int d){     if(d==9){         for(int i=1;i<36;i++) if(!ruler[i]) return false;         for(int i=1;i<=8;i++) printf("%d ",ans[i]);         return true;     }     for(int i=ans[d-1]+1;i<=27+d;i++){         ++ruler[36-i];         for(int d1=d-1;d1>=0;d1--) ++ruler[i-ans[d1]];         ans[d]=i;         if(solve(d+1)) return true;         for(int d1=d-1;d1>=0;d1--) --ruler[i-ans[d1]];         --ruler[36-i];     }     return 0; }  int main() {     solve(1);     return 0; }
user-0 提问: 发现csdn新增加的重要功能，顺便问一个makefile问题

回复:
user: user-1
content: 1#楼用法没错，只是第四行少了一个右括号。     val=$(shell echo $(PWD)  $(shell ...) 跟 $(if ... ) ,$(filter ...)等一样，都是make的内建函数，可以用在makefile的任何地方。

user: user-0
content: 引用 5 楼 chouxiaoya8100 的回复:[quote=引用 4 楼 hnwyllmm 的回复:] Makefile一般还有这个写法： .PHONY: clean clean:     -rm *.o $(TARGET) *.d core*  这里也没有放到rm下面 还有这个： $(DEPEND):%.d:%.c     $(CC) $(INCLUDE_PATHS) -MM $< > $@; \     echo "\t$(CC) $(CFLAG) $(INCLUDE_PATHS) $(MACRO_DEFS) $< -o $(@:.d=.o)" >> $@   为啥说一定要放在all下面呢   不管放哪里，为什么必须放在某个目标下才能调用shell呢？   这给我带来很大的麻烦。   还有，我想打印某个变量的值， 直接报错。  my_root = $(shell echo $${PWD%%xyz*}) val=3 ifeq ($(shell echo $(my_root)), $(shell echo $(PWD)))     val=$(shell echo $(PWD)     $(warning $(val))     $(warning $(my_root))    $(error dddddddddddd-------------) else      SRCROOT = $(my_root)xyz endif   就拿这个语法来说， echo $val 肯定报错。  不信自己试试。  [/quote]    o你试试我这个吧。就知道我为什么问你了

user: user-2
content: GNU make 查这个manual

user: user-3
content: 不是的，这里有个例子，是可以在外面调的： obj-m=map_drv.o mod = map_drv KERNELDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd)  module-objs = map_drv.o  default:     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  clean:     rm -f *.o *.ko *.mod.c modules.order Module.symvers  install:     modprobe $(mod).ko

user: user-0
content: 引用 4 楼 hnwyllmm 的回复:Makefile一般还有这个写法： .PHONY: clean clean:     -rm *.o $(TARGET) *.d core*  这里也没有放到rm下面 还有这个： $(DEPEND):%.d:%.c     $(CC) $(INCLUDE_PATHS) -MM $< > $@; \     echo "\t$(CC) $(CFLAG) $(INCLUDE_PATHS) $(MACRO_DEFS) $< -o $(@:.d=.o)" >> $@   为啥说一定要放在all下面呢   不管放哪里，为什么必须放在某个目标下才能调用shell呢？   这给我带来很大的麻烦。   还有，我想打印某个变量的值， 直接报错。  my_root = $(shell echo $${PWD%%xyz*}) val=3 ifeq ($(shell echo $(my_root)), $(shell echo $(PWD)))     val=$(shell echo $(PWD)     $(warning $(val))     $(warning $(my_root))    $(error dddddddddddd-------------) else      SRCROOT = $(my_root)xyz endif   就拿这个语法来说， echo $val 肯定报错。  不信自己试试。

user: user-0
content: 引用 2 楼 hnwyllmm 的回复:ifeq后面为啥加个逗号？ 第二句那个就是调用shell语句 放在目标里是什么意思？ 引用 1 楼 jerry_dqh 的回复:使用echo 打印   就是说  all:    rm   cp   echo    all 就是makefile的一个目标，   echo , rm cp这些shell 命令，必须放在al里，不放在里面，  报语法错误。  但是你想， 只把shell 放在all中，不现实。

user: user-3
content: Makefile一般还有这个写法： .PHONY: clean clean:     -rm *.o $(TARGET) *.d core*  这里也没有放到rm下面 还有这个： $(DEPEND):%.d:%.c     $(CC) $(INCLUDE_PATHS) -MM $< > $@; \     echo "\t$(CC) $(CFLAG) $(INCLUDE_PATHS) $(MACRO_DEFS) $< -o $(@:.d=.o)" >> $@   为啥说一定要放在all下面呢

user: user-3
content: ifeq后面为啥加个逗号？ 第二句那个就是调用shell语句 放在目标里是什么意思？

user: user-4
content: 使用echo 打印
user-0 提问: 两个队列实现一个栈  下面代码是入栈的实现，编译通过，但是运行错误

回复:
user: user-1
content: void push_queue(Linkqueue **q1, Linkqueue **q2, int element) {     if((*q1)->front != (*q1)->rear)         Enqueue(q1, element);     else         Enqueue(q2, element); }   int main(int argc, char *argv[]) {     Linkqueue *q1 = NULL;     Linkqueue *q2 = NULL;               push_queue(&q1, &q2, 5);           return 0; }  木有变红呢？这句会崩吧？空指针怎么可能有数据？？

user: user-1
content: void push_queue(Linkqueue **q1, Linkqueue **q2, int element) {     if((*q1)->front != (*q1)->rear)         Enqueue(q1, element);     else         Enqueue(q2, element); }   int main(int argc, char *argv[]) {     Linkqueue *q1 = NULL;     Linkqueue *q2 = NULL;               push_queue(&q1, &q2, 5);           return 0; } 这句会崩吧？空指针怎么可能有数据？？

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

回复:
user: user-1
content: 使用服务方式应该需要穿透Session 0隔离 http://www.cnblogs.com/therock/articles/2261371.html 这一篇是基于c#的，使用c进行系统调用更方便些

user: user-2
content: 网上有人说用这个方法： 先DuplicateToken,SetTokenInformation把token的sessionid改成登录的用户的sessionid 然后用CreateProcessAsUser创建进程，在startupinfo中指定desktop为WinSta0\Default 这个子进程再调用你的抓取桌面的函数  没看的懂~你去试试，可以的话告诉我吧。急需

user: user-2
content: 同样的问题，不知道楼主是怎么解决的？各种方法都用了 ，虚拟桌面什么的

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:搜“Windows服务（Windows Service，system权限）程序显示界面与用户交互（xp，win7通用）”  我用的下面的方法 http://blog.csdn.net/harrymeinan/article/details/8440057   LaunchAppIntoDifferentSession((LPTSTR)bitmap->BitBltPicture()); 后 还是没有穿透session0，图片截取还是全黑。。。 函数BitBltPicture 是截图函数。

user: user-0
content: 引用 7 楼 fly_dragon_fly 的回复:img.fromHBITMAP(m_hbmp); img.save(...) 试试 CImage没有成员fromHBITMAP

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 设置服务属性、登录、允许服务与桌面交互 然后重启服务。[/quote] 还是不行。。我觉得是程序有问题。

user: user-3
content: img.fromHBITMAP(m_hbmp); img.save(...) 试试

user: user-4
content: 引用 2 楼 zhao4zhong1 的回复:设置服务属性、登录、允许服务与桌面交互 然后重启服务。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:设置服务属性、登录、允许服务与桌面交互 图片大小特别小，只有10多K，是不是少了像素 位图大小设置的问题。

user: user-0
content: 引用 1 楼 fly_dragon_fly 的回复:有没在本机上测试过能不能截 本机上也不可以，局域网内其他机器 也是全黑的图片。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:设置服务属性、登录、允许服务与桌面交互 允许了，还是那样。代码没问题吗？

user: user-4
content: 搜“Windows服务（Windows Service，system权限）程序显示界面与用户交互（xp，win7通用）”

user: user-4
content: 设置服务属性、登录、允许服务与桌面交互

user: user-3
content: 有没在本机上测试过能不能截
user-0 提问: 怎么转化成C++程序？

回复:
user: user-1
content: 请问博主，您的这个程序最后转换过来了吗

user: user-2
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: 递归与栈

回复:
user: user-1
content: 更正：       x=   f(10)； //n=10  函数调用      f(n) ---->f(n-1)+f(n-2)                                        f(9) +f(8)

user: user-1
content: x=   f(10) //n=10  函数调用      f(n) ---->f(n-1)+f(n-1)                                        f(9) +f(8) 如此反复   调用树如下                        f(10)                     /          \                    f(9)    +     f(8)               /    \            /        \           f(8) + f(7)    f(7)  +  f(6)          /       ...............................................     /    \            f(2) +f(1)       /      \        \  f(1)+f(0)    1 1    + 1     当每一分支都到了，可以直接得到结果的时候，就返回上一步计算了  由于编译 和程序运行，是两个不同的步骤 而解析表达式，是在编译期间进行的 得到表达式结果，通常是在运行期间进行的。 所以  + 加法 可以确定的说，一定会在 f(n-1),f(n-2) 都计算出来后进行，除非出错 f(n-1) 和 f(n-2) 哪个先计算，则看编译器的安排了。 和程序里的顺序，并无必然联系。

user: user-1
content: f（n -1） + f（n - 2） 这个表达式解析  会 先解析两个函数递归调用 假设 n=10 , 即类似 x = f(10) 这种调用，那么 n-1=9,n-2 =8   f（n -1） + f（n - 2）这个表达式就会变成 f(9) +f(8) 的计算 f(9) 会变成 f(8)+f(7) ,,,,,直到 计算出最内层的 例如 f(2) +f(1) 这一步， f(2) 会继续递归 为 f(1)+f(0) ,  f(1) 则是直接得到结果 1 f(0) 同样是 接得到结果 1 这样的到结果的调用递归结束，返回上一步继续计算 直到 f(9) ,f(8) 的结果都计算出来了 把 f(9)+f(8) 这个表达式（加法） 计算出来 ，整个递归结束。 递归调用必须能够终止，无休止的递归调用是个灾难 。。。。。。。 另外，计算 .斐波那契数列， 不是好的递归应用场景，递归很快就会耗尽堆栈，从而得不到结果，并且很可能会出错退出，甚至引发其他灾难性的错误。

user: user-0
content: 新人还是不怎么懂  函数执行到 f（n -1） + f（n - 2）这句时，执行到f（n-1）就又返回递归了，那 + f（n-2）是啥时候执行的，等f（n-1）得到结果在执行+f（n-2）吗。。。真是搞懵掉了

user: user-2
content: 用递归求，就不需要栈了吧

user: user-3
content: int f(int a, int b)   // 递归 {    //    假设局部变量需要cSize空间   //        那么每调用一次需要:     //         压栈 f 地址, (4字节) (esp -4)     //          压栈 b, a, (4*2字节)(esp -4 *4)     //          分配栈内空间:  cSize字节 (esp -cSize)     //           所以递归一次需要4 + 4*2 +cSize栈空间    //           返回反之, esp + cSize + 4*2 +4      }

user: user-4
content: 你写一个上述的程序，再单步调试一下不就清楚了

user: user-1
content: 函数的每一次调用，都要给函数的参数准备空间。 所以函数定义本身，并没有为参数分配内存（寄存器），函数调用才是参数分配内存（寄存器）的时候。 函数局部（非静态）变量，也是在函数调用的时候分配内存（寄存器）的。

user: user-1
content: 程序在调用函数的地方压栈，函数退出的时候出栈，无参函数主要处理 函数调用和返回。 有参数的函数，还要压栈函数参数，出栈要清理函数参数。  循环处可能也需要， 压栈出栈。 表达式的计算。 也需要压栈出栈---函数调用也是表达式， 所以函数返回值压栈出栈，不属于函数调用本身，而是属于表达式计算的过程。 本质上，函数递归调用，和函数调用没啥两样。  递归函数和非递归函数，唯一不同之处是函数有没有，直接间接调用自己。  递归函数，要求函数必须能够终止递归调用，不能无休止的递归下去。

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

user: user-0
content: 我就是想问用递归实现斐波那契数列，程序是怎么走的，压栈，出栈是怎么一个过程
user-0 提问: 请各位高手帮忙看一下，把n=strlen（p）但是这个n不能用于for循环的条件

回复:
user: user-1
content: 按照你说的功能写的  char p[] = "wqasdflj"; 	int n = strlen(p); 	for (int i = 0; i < n / 2; i++) 	{ 		char ch = p[i]; 		p[i] = p[n - 1 - i]; 		p[n - 1 - i] = ch; 	}

user: user-2
content: i=0时      p[n-i]  = p[n]   = '\0' swap(p[0],p[n-i]),此时    p[0] ='\0' 这时候 按cha*读字符串  应该是空字符串吧

user: user-3
content: n=strlen(p); ===> n=strlen(p) - 1;

user: user-4
content: 可以呀，同四楼

user: user-0
content: 对了、用n=strlen(p);的时候最后用puts（p）则只是空白的一行
user-0 提问: #include“socket.c"我在C语言开源代码中看到的

回复:
user: user-0
content: 谢谢楼上各位啦

user: user-1
content: 可以这样做，就想当于复制了一份代码到这里。

user: user-2
content: 可以的，c++语言也一样

user: user-3
content: C语言可以包含任何后缀名的文件, 当然前提是文件中的内容得是C语言语句. #include "xxx" 只是在预处理时将xxx文件的内容完全展开,后缀名什么的根本不重要.

user: user-0
content: #include"socket.c" 头文件还可以包含.c文件吗
user-0 提问: 一个编程题，大家探讨下

回复:
user: user-1
content: 话说文曲星上有个类似的游戏好像

user: user-2
content: 貌似算法入门经典中有这道题

user: user-3
content: 没什么特别好的办法,直接用dfs或者bfs去搜, 只有二种状态考虑二进制位表示每一格.

user: user-4
content: 不像是编程题，倒像是逻辑推理题了，看起来有点意思，怎么没有人回复了，顶一下！
user-0 提问: c语言，U盘识别

回复:
user: user-1
content: windows的不了解。 linux下的如上面前辈们说的，需要文件系统支持，其实也就是加载对应的驱动（默认fat32支持，ntfs的可能需要单独加载驱动）。 linux下视版本，一般可监控系统文件/proc/bus/input/devices（有的是/proc/bus/usb/devices）获取到usb设备信息（设备号，厂商号等），再根据设备号，厂商号自行创建设备节点（/dev目录下sda，sdb这样的），再把对应的节点挂载到某个路径下，就可访问了。 另外hotplug可以看看，libusb也可以了解下（缺点是，插入多个usb设备无法区分，可能需要用户根据u盘里的标识文件来自行判断）

user: user-2
content: 这个要OS了，不光C语言了。

user: user-3
content: 用netlink,  监听热插拔事件， 就可以了。代码不多

user: user-4
content: WM_DEVICECHANGE 其中lParam是PDEV_BROADCAST_HDR类型 话说上MSDN找不会更快吗

user: user-5
content: 搜索 hotplug

user: user-6
content: 我觉得应该上驱动了，挂钩文件系统，每当有磁盘接入或移除的时候，都会产生一个请求包，拦截这个请求包就可以得到要变动的磁盘信息。 如果不上驱动的话，我觉得只能不断检查A盘到Z盘是否存在来判断了。

user: user-7
content: 这个恐怕不是只学会c语言就可以搞定的，我这个菜鸟也只能帮你顶一下了

user: user-8
content: 去看USB协议
user-0 提问: 如何利用动态数组实现多选一，求助大神！

回复:
user: user-0
content: 为什么要动态数组，我这只是举列100道题，因为题是可以随意增加减少。十个人每人最多可选择10道题（1~10）.用C++实现

user: user-1
content: c++的话可以用std::set

user: user-2
content: 首先你得知道什么是动态数组! 你是想用C++的vector吧

user: user-3
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }

user: user-4
content: 这种事情明显用普通的数组更好啊   为毛要用什么动态数组........  每个课程都设一个属性：是否被选  没有被选 就能被人选 被选了  就不能被人选

user: user-5
content: it looks good.

user: user-6
content: 少了一行代码。   typedef struct problem{     bool isSelected;     char *text;     int  id; }PRM;  typedef struct student{     char *name;     int  prmNum;     int  prmList[10]; }STU;  PRM prmList[100] = {/*BLABLA*/}; STU stuList[10] = {/*BLABLA*/};  void select(PRM prmList[100], STU *stu){     for(int i = 0;i<100 && stu->prmNum < 10;i++){         //判断该题目是否已被选走         if(prmList[i].isSelected == true)             continue;         else         {             //如果选择该题目，则修改学生对应的已选题目数量和已选题目列表             stu->prmNum++;             stu->prmList[stu->prmNum] = prmList[i].id;         }     } }  for(int i = 0; i < 10;i++){     select(prm[100],stuList[i]); }

user: user-6
content: 首先，你既然已经固定了100道题目，为什么还要动态数组？ 是想要被选中的题目删除掉？ 那直接定义一个结构体设置一个FLAG isSelected 不就好了么？  大致写了一段代码如下（没有编译，当做伪代码看好了）  typedef struct problem{     bool isSelected;     char *text;     int  id; }PRM;  typedef struct student{     char *name;     int  prmNum;     int  prmList[10]; }STU;  PRM prmList[100] = {/*BLABLA*/}; STU stuList[10] = {/*BLABLA*/};  void select(PRM prmList[100], STU *stu){     for(int i = 0;i<100;i++){         if(prmList[i].isSelected == true)             continue;         else         {             stu->prmNum++;             stu->prmList[stu->prmNum] = prmList[i].id;         }     } } for(int i = 0; i < 10;i++){     select(prm[100],stuList[i]); }

user: user-7
content: bool selected[101] , 作为全局可好
user-0 提问: MFC鼠标移动画线并获取坐标

回复:
user: user-0
content: 请问这是什么？

user: user-1
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1～7\*.*
user-0 提问: 错误求解释

回复:
user: user-0
content: 引用 1 楼 chengye_xin 的回复:你连代码都没贴叫人怎么看？ 不好意思…不过问题已经解决了。刚在函数的左花括号后面加了个右花括号没注意到，]任然谢谢你。

user: user-1
content: 你连代码都没贴叫人怎么看？
user-0 提问: TCP网络通信缓存不够，如何接收全部数据？

回复:
user: user-0
content: 引用 7 楼 zxh707wk 的回复:分多次发送呗   分发目前是不行的，我客户端是一个调测软件，服务端是被动接收客户端发送来的数据，等后面要写客户端的话才能分多次发送

user: user-0
content: 引用 6 楼 xian_wwq 的回复:缓存够不够都需要循环判断接收， 否则就有可能接收不全   缓存是足够了，我自己写了个简单的客户端程序，发送3300多字节的数据，服务端有的时候接受全了，有的时候也只接收了2000多字节的数据；  大神能不能给段代码，如何进行循环接收？

user: user-1
content: 引用 8 楼 qq_27115241 的回复:[quote=引用 6 楼 xian_wwq 的回复:] 缓存够不够都需要循环判断接收， 否则就有可能接收不全   缓存是足够了，我自己写了个简单的客户端程序，发送3300多字节的数据，服务端有的时候接受全了，有的时候也只接收了2000多字节的数据；  大神能不能给段代码，如何进行循环接收？[/quote] //接收数据后，解析包头得到需要接收的数据长度 int nSendLen = GetPacketLen(); int nRecLen = 0;  //接收计数 //循环接收 while(true) {      //累计每次接收的长度      nRecLen += RecData();      if( nRecLen >= nSendLen)      {          //如果已经收够           break;      }     //如果没有收全，则继续 } //对接收数据根据长度“分包”及进行后续处理     ParseData(...)

user: user-1
content: 缓存够不够都需要循环判断接收， 否则就有可能接收不全

user: user-2
content: 分多次发送呗

user: user-3
content: TCP传输的数据可以看作是字节流。就好比两个进程通过管道传输文件，管道里面只能容纳512字节的数据，但是文件却有1MB‘，那怎么办呢？很简单啊，发送者不停的读文件到内存，然后发送到管道中；接收者不停的从管道中读取数据，再写到文件中。至于接收者如何判断文件发送结束了，要么双方指定一个协议，这样接收者能够明确的知道文件发送完成；要么发送者发完文件后关闭管道，接收者read返回0就代表文件发送完成。

user: user-4
content: 每次接收到数据后缓存到自定义的队列中，最后集中处理

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

user: user-6
content: TCP协议有滑动窗口的，一次发不完，会分多次发送的。

user: user-7
content: http协议里面有个thunked方式下载数据，楼主感兴趣的话，可以参考下
user-0 提问: 求助大神，帮我找出错误并改正

回复:
user: user-1
content: 一共就是这些函数么，是不是有什么地方用不同的类型重定义了？

user: user-2
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-0
content: 可以具体用英文写吗？这实在看不懂，谢谢

user: user-3
content: 在你声明sear_开头的这些函数的.h文件加上  #ifndef  XX_H_ #define XX_H_  #endif //假如是menu.h的话可以用  #ifndef _MENU_H_ #define _MENU_H_ //这里填你原本的文件内容 #endif

user: user-0
content: 是做一个财务系统 #include "stdio.h" #include "stdlib.h"          //常用子程序 #include "string.h" #include "dos.h"             //Ms-dos和8086调用的一些常量和函数 #include "windows.h"  #define LEN sizeof(Node) #include "mytypedef.h"//加载自定义结构 #include "menu.h"//加载菜单   int menu_select();//声明函数  int main(int argc,char *argv[])  { 	link l; 	l=(Node *)malloc(LEN); 	l->next=NULL; 	show_menu(); 	while(1) 	{ 		switch(menu_select())  //调用菜单函数 		{ 		case  1:  			luru(l);    			break;  	    case  2:    			save(l);     			break;  		case  3:    			load(l);   			break;  		case  4:    			xianshi(l);     			break;  		case  5:    			add(l);   			break;  		case  6:   			sear(l);   			break;  	    case  7:    			del(l);  			break;  		case  8:   			printf("您选择的是8");   			break;  		case  9:    			exit(0); 		} 	} }

user: user-4
content: main函数在哪？

user: user-0
content: 移动上去，又出现main.obj : error LNK2001: unresolved external symbol _xianshi main.obj : error LNK2001: unresolved external symbol _luru Debug/GJP.exe : fatal error LNK1120: 2 unresolved externals 执行 link.exe 时出错.

user: user-4
content: 你把下面那几个sear_开头的函数都移动到sear函数前面去。这是由于还没实现函数就用了的原因。英文提示是重定义函数，说明你在mytypedef.h里定义了这些函数。
user-0 提问: 【求助】网址字符串翻转

回复:
user: user-1
content: 我写的大体思路             a = "www.baidu.com"            sscanf(a, "%s.%s.%s", b, c, d);  // "3[a-z].3[a-z].3[a-z]"  这个也行吧 你试试           b-> www           c->baidu           d->com           sprintf(f, "%s.%s.%s", d, c b);            f -> com.baidu.www

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  int main(void) { 	char url[] = "www.baidu.com.cn"; 	char reverse_url[32] = {0}; 	char* pdot = url;  	pdot = strrchr(url, '.'); 	while(pdot != NULL)  	{ 		*pdot = '\0'; 		strcat(reverse_url, pdot + 1); 		strcat(reverse_url, "."); 		pdot = strrchr(url, '.'); 	} 	strcat(reverse_url, url);  	printf("%s\n", reverse_url); 	return 0; }

user: user-3
content: //www.baidu.com反转成com.baidu.www #include <stdio.h> #include <string.h> int main() {     char *s="www.baidu.com";     char a[20],b[20],*p[10],*q;     int i,n,L;      strncpy(a,s,19);a[19]=0;     i=0;     p[i]=strtok(a,".");     while (1) {         if (p[i]==NULL) break;         i++;         if (i>=10) break;         p[i]=strtok(NULL,".");     }     n=i;     L=0;     q=b;     for (i=n-1;i>=0;i--) {         if (i==0) {             L=sprintf(q,"%s",p[i]);         } else {             L=sprintf(q,"%s.",p[i]);         }         q+=L;     }     printf("[%s]\n",b);     return 0; } //[com.baidu.www] //

user: user-4
content: a.join(".")

user: user-4
content: a=str.split(".");a[0],a[2]=a[2],a[0]

user: user-4
content: ruby的方法是
user-0 提问: 有a，b两个等量数组，需要将a数组中的数依次取出分别与b数组中的数挨个相加得到新的数组再输出新数组的和

回复:
user: user-1
content: #include <stdio.h>  int main(void) {     int i = 0; //for loop     int sum_b = 0;     int sum_c = 0;     int count = 0;     int a[] = {1, 2, 3, 4, 5};      int b[] = {1, 2, 3, 4, 5};       count = sizeof(b) / sizeof(b[0]);     for (i = 0; i < count; i++)     {            sum_b += b[i];     }         for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)     {            sum_c = sum_b + a[i] * count;         printf("c[%d] = %d\n", i, sum_c);      }         return 0; }

user: user-2
content: //先将数组b中的数字全部加起来得到一个和值，然后将数组a中的每个数乘以5加上那个和值，也得到你想要的数啦 #include<iostream> using namespace std; void main() { 	int a[]={1,2,3,4,5}; 	int b[]={1,2,3,4,5}; 	int lena=sizeof(a)/sizeof(int); 	int lenb=sizeof(b)/sizeof(int); 	int cursum=0; 	for(int i=0;i<lenb;i++) 	{ 		cursum+=b[i]; 	} 	cout<<cursum<<endl; 	for(int j=0;j<lena;j++) 	{ 		int sum=0; 		sum=cursum+a[j]*5; 		cout<<sum<<endl; 	} }

user: user-3
content: 凑个热闹：  2.2.1 :006 > a = (1..5).to_a  => [1, 2, 3, 4, 5]  2.2.1 :007 > b = (1..5).to_a  => [1, 2, 3, 4, 5]  2.2.1 :008 > a.each do |x| 2.2.1 :009 >     c = b.map {|y|y+x} 2.2.1 :010?>   total = c.inject {|s,i|s+i} 2.2.1 :011?>   puts "#{c.join(" + ")} = #{total}" 2.2.1 :012?>   end 2 + 3 + 4 + 5 + 6 = 20 3 + 4 + 5 + 6 + 7 = 25 4 + 5 + 6 + 7 + 8 = 30 5 + 6 + 7 + 8 + 9 = 35 6 + 7 + 8 + 9 + 10 = 40

user: user-4
content: int a[]={1,2,3,4,5,},b[]={1,2,3,4,5}; int size_a = sizeof(a)/sizeod(int),size_b =  sizeof(b)/sizeod(int); int total_b =0; for(int i=0;i<size_b;++i) {   total_b+=b[i]; } for(int j=0;j<size_a;++j) { printf("%d ",a[j]*size_b+total_b); }

user: user-5
content: int a[]={1,2,3,4,5},b[ ]={1,2,3,4,5};     for(int ib: b){         int s=0;         for(int ia: a){             if(s) cout<<'+';             cout<<ia+ib;             s +=ia+ib;         }         cout<<'='<<s<<endl;     }

user: user-6
content: 矩阵相加
user-0 提问: 结构体数组函数调用赋值问题

回复:
user: user-1
content: 参数出入必须是引用，也就是指针。 否则是值赋值，这个值在函数内部赋值，是传递不出来的。 外面的结构就好像没有赋值一样。

user: user-0
content: @user-2 那我那个是哪错了？能详细说明一下么？

user: user-2
content: void input(struct student *s){ 	scanf("%d %s %f %f %f",&s->num, s->name, &s->score[0], &s->score[1], &s->score[2]); } int _tmain(int argc, _TCHAR* argv[]) {	struct student s[3]; 	for(int i=0; i<3; i++){ 		input(&s[i]); 	} 	for(int j=0; j<3; j++){ 		print(s[j]); 	} 	system("pause"); 	return 0; }
user-0 提问: 菜鸟问个getch的问题，大牛帮帮忙看看，不胜感激！

回复:
user: user-1
content: 特殊字符都会出现这样的情况，有没有试过把特殊字符特殊处理呢？

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

user: user-3
content: getch只读入，不显示字符
user-0 提问: 关于c 字符串截取

回复:
user: user-1
content: static char t[50+1]; strncpy(t,s+123,50);t[50]=0;

user: user-2
content: 原型：char *strtok(char *s, char *delim);  功能：分解字符串为一组字符串。s为要分解的字符串，delim为分隔符字符串。  说明：首次调用时，s指向要分解的字符串，之后再次调用要把s设成NULL。            strtok在s中查找包含在delim中的字符并用NULL('/0')来替换，直到找遍整个字符串。  返回值：从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。            所有delim中包含的字符都会被滤掉，并将被滤掉的地方设为一处分割的节点。 例如 xxxxxxxx,eg：mm@.comxxxxxxxxxxxxxxxxxxxxxx. 需要你找出收发件人的地址开始的共同特征. 比如所有的地址前都是eg:  1. 可以用一次strtok, eg: 得到 xxxxxxxx,eg 和 mm@.comxxxxxxxxxxxxxxxxxxxxx 2. 再用一次strtok, com . 得到mm@.com 和 xxxxxxxxxxxxxxxxxxxxx
user-0 提问: 编程题，指针请教~在字符串中找出连续最长的数字串，并把这个串的长度返回

回复:
user: user-0
content: 咨询了下，同学不是指针的错误~前面的表达有欠妥当，把源码粘出来  #include <stdlib.h> #include"string" using namespace std; #include "oj.h"   /* 功能：在字符串中找出连续最长的数字串，并把这个串的长度返回 函数原型：    unsigned int Continumax(char** pOutputstr,  char* intputstr) 输入参数：    char* intputstr  输入字符串 输出参数：    char** pOutputstr: 连续最长的数字串，如果连续最长的数字串的长度为0，应该返回空字符串    pOutputstr 指向的内存应该在函数内用malloc函数申请，由调用处负责释放  返回值：   连续最长的数字串的长度   */ unsigned int Continumax(char** pOutputstr,  char* intputstr) { 	int Len=strlen(intputstr); 	if (*intputstr==NULL || Len==0) 	{ 		*pOutputstr=""; 		return 0; 	}  	int MaxLen=0; 	int wordLen=0; 	int i,j,begin=0; 	int flag[200]; 	for (i=0;intputstr[i]!='\0';i++)           //判断字符是否为数字 	{ 		if (intputstr[i]>='0' && intputstr[i]<='9') 			flag[i]=1; 		else flag[i]=0; 	}	 	for	(i=0;intputstr[i]!='\0';) 	{ 		if (flag[i]==1) 		{ 			for(j=i;flag[j]==1 && intputstr[j]!='\0';j++)   //获得数字串的长度wordLen 				wordLen++; 			if (wordLen>=MaxLen) 			{ 				MaxLen=wordLen; 				begin=i; 			} 			i=i+wordLen; 		} 		else  			i++; 		wordLen=0; 	}      char *temp = (char*)malloc((MaxLen+1)* sizeof(char));  	for (i=0;i<MaxLen;i++)       {           temp[i]=intputstr[i+begin];  //不改变outputstr地址         }   	temp[MaxLen]='\0'; 	//Ptr=Ptr-maxLen;          	*pOutputstr=temp; 	return MaxLen; }

user: user-0
content: 错误应该在这部分  char *temp = (char*)malloc((MaxLen+1)* sizeof(char));  for (i=0;i<MaxLen;i++)       {           temp[i]=intputstr[begin+i];  //不改变outputstr地址         }   temp[MaxLen]='\0'; //Ptr=Ptr-maxLen;          *pOutputstr=temp; return MaxLen; }

user: user-0
content: 自己顶一下~ Maxlen结果正确，但是赋值不对~

user: user-1
content: unsigned int Continumax(char** ppout,  char* src) {     char *last=NULL;     int ans=0;     for(;*src;++src){         if(isdigit(*src)){             if(!last) last =src;         }else{             if(last&&src-last>ans){                 *ppout =last;                 ans =src-last;                 last =NULL;             }         }     }     if(last && src-last>ans)     {         *ppout =last;         ans =src-last;     }     return ans; }
user-0 提问: 想问问关于汇编和C一起学习，以及一个代码问题

回复:
user: user-1
content: 反汇编不用学精，有那个时间把C学精比什么都强。

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

user: user-2
content: 看Debug版。

user: user-3
content: 其实我想说不要舍本求末，楼主说都学精，那就用c跟汇编都自己写一个学生成绩管理系统吧。。。当年汇编考试的最后一题我至今记忆犹新。。。

user: user-2
content: 《The Intel 64 and IA-32 Architectures Software Developer's Manual》

user: user-4
content: printf可能或没有用了esi，建议将其覆写为nop然后看执行结果

user: user-5
content: 1:     你写一个C程序练习, 得DEBUG吧, C表面看不出问题, 你得看汇编吧, 所以你学习时看到的绝大多数都会是DEBUG; RELEASE局部变量更少, 更容易读.           所谓的二者都要学精, 简单, 到一定程度去做crackme,  简单的, 难的别搞, 那涉及更多的PE, 中断等 2:     release就是发布版, 发布的软件当然是发布版.    不只是发布版, 运气好还会混淆版 以及更高级的反调试反反汇编版 3:      除非你要做反汇编软件,  不用记, 见多了自然记住, 比如: 0x90 表 nop等 4:      向下翻翻, 应该有使用到esi的地方, 比如: mov [456789], esi

user: user-6
content: 问题一，如果像我这样汇编和C一起学习的，反汇编的版本是看DEBUG还是RELEASE呢？我的目的是想把C和汇编两者都学精。  先谈谈你的目的，如果C和汇编都是你的目标，个人建议先把C学好，因为C只是比汇编‘高’那么一点点层次（C是汇编的浅封装），然后学点汇编的知识，就很好了；这样要用到汇编时，看看对应的汇编码，就能解决相当一部分问题了。说老实话，没见过专业用汇编的，当然特定领域除外。  再来说DEBUG和RELEASE，如果C学好了，那么你就会知道它们两个的差别不过是一组编译器选项不一样而已。 拿gcc举例子，所谓的DEBUG，一般指编译时不优化或者较少优化，保留符号，这样在调试（debug）时比较容易跟踪代码的逻辑（因为有符号，且较少优化，汇编指令一般和C代码是对应的）；而RELEASE一般是没有保留符号，且对代码进行了大量的优化。 表现在编译器选项上，DEBUG一般会带-g选项，表示要生成调试信息，一般不带-O选项，表示不做任何优化；而对RELEASE，一般不带-g选项，同时一般有-O3这样的选项，表示对代码做优化。 理解了DEBUG和RELEASE不过一组编译器选项（即一组配置）之后，那么RLEASE带-g也就不难理解了。     问题二，我们平时常用的软件，假设看不到源文件，那我们用OD那些反汇编出来的，都是RELEASE版本的吗？  是RELEASE版本，但是该RELEASE配置具体怎样，还得看开发软件的人是怎么设置的，见问题1的回答。     问题三，再学习汇编和C的时候，机器码有必要刻意去记忆一些吗？  没必要，甚至汇编都没有必要去刻意记，见问题1的回答。     问题四，刚才看到一段代码的反汇编，都基本都能理解，除了一句  这里我也无法给出准确的答案，但极有可能就是printf中要用ESI（或者不用ESI）；这也是为什么在问题1的答案中推荐先学好C， 比如你汇编学好了，难道你用汇编来写函数？汇编学好了可能对优化有一定的帮助，但是这真的是你的目标？要知道即使在特定的领域，比如单片机，早就开始用C甚至C++来写代码了
user-0 提问: char c=128

回复:
user: user-1
content: char c; /* 如果没有特殊编译选项 char 就是 signed char */ c = 0x80;  printf("%d",c); 相当于 printf("%d",(int)c);  printf("%u",c); 相当于 printf("%u",(unsigned int)(int)c);  (int)c = 0xFFFFFF80;    /* 整数提升 c 有符号，且为负值 */  如果楼主想让 printf("%u",c); 输出128 需要这样 printf("%u", (unsigned char)c);

user: user-2
content: http://bbs.csdn.net/topics/390069778 http://blog.csdn.net/jinbi/article/details/6779713

user: user-3
content: vs下查看内存

user: user-4
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对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-5
content: char c=128从十六进制来看是0x80, 扩展32位时值为0xffffff80
user-0 提问: 急！！C语言通过socket与服务端PHP通信的问题

回复:
user: user-1
content: 你逗我们么，不就是2楼说的原因？

user: user-2
content: S_addr.sin_addr.s_addr = inet_addr("10.206.6.8");  ->   S_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

user: user-3
content: http://download.csdn.net/detail/user-3/9050123
user-0 提问: 新手请教，父子进程socket连接问题

回复:
user: user-1
content: 进程关闭时,会关闭其所有打开的文件描述符,  子进程读写socket描述符失败

user: user-2
content: 父进程与子进程分别定期向对方发送固定格式的心跳包，若一段时间内监测不到心跳包了，就说明对方死掉了

user: user-3
content: 能不能不停的给127.0.0.1发消息，查询什么的
user-0 提问: 求编三个c语言编程题（很简单的）

回复:
user: user-1
content: /* 3.从键盘输入一个字符串，将其中的小写字母全部转换为大写字母，然后输出到一个磁盘文件中保存， 输入的字符串以字符 “@”结束，文件名是自己姓名的汉语拼音首字母。 */ int main(void) { 	FILE *f; 	f = fopen("xxxx.txt", "w"); 	char s[100]; 	scanf("%100[^@]s", s); 	int i, n; 	n = strlen(s); 	for (i = 0; i < n; i++) s[i] &= 223; 	fprintf(f, "%s", s); 	fclose(f); 	return 0; }

user: user-1
content: /* 2.在主函数中输入5个不等长的字符串。用另一函数对它们按照从小到大排序。 然后在主函数中输出这5个已经排序好的字符串。（限用指针） */ #include <stdio.h> #include <string.h> int i, j; char s[5][100]; void sort_string() { 	char buf[100]; 	for (i = 1; i < 5; i++) 		for (j = 0; j < 5 - i; j++) 		{ 			if (strlen(s[j]) > strlen(s[j+1]))  //按长度排序？ 			{ 				strcpy(buf, s[j]); 				strcpy(s[j], s[j + 1]); 				strcpy(s[j + 1], buf); 			} 		} } int main(void) { 	for (i = 0; i < 5; i++) scanf("%100s", s + i);  //读入 	printf("\n"); 	sort_string(); 	for (i = 0; i < 5; i++) printf("%s\n", s + i);  //打印 	return 0; }

user: user-1
content: /* 1.新建一个文件，以自己学号为文件名。从键盘输入一串字符，把这一串字符写入到该文件中去， 并同时在屏幕上显示该字符串。（字符串以#为结束标志。） */ int main(void) { 	FILE *f; 	f = fopen("00000.txt", "w"); 	char s[100]; 	scanf("%100[^#]s", s); 	fprintf(f, "%s", s); 	fclose(f); 	return 0; }
user-0 提问: 用C语言编  

回复:
user: user-1
content: 引用 2 楼 zhangxiangDavaid 的回复:指针处理：  void sort_int(int *a, int n) { 	int *p; 	int i, j; 	for (i = 1; i < n; i++) 		for (j = 0; j < n - i; j++) 		{ 			if (*(a + j) > *(a + j + 1)) 			{ 				int t; 				t = *(a + j); 				*(a + j) = *(a + j + 1); 				*(a + j + 1) = t; 			} 		} } void print(int *a, int n) { 	int i; 	for (i = 0; i < n; i++) printf("%d ", a[i]); 	printf("\n"); } int main(void) { 	int a[10]; 	int i; 	for (i = 0; i < 10; i++)scanf("%d", a + i); 	sort_int(a, 10); 	print(a, 10); 	return 0; }  +1

user: user-2
content: 指针处理：  void sort_int(int *a, int n) { 	int *p; 	int i, j; 	for (i = 1; i < n; i++) 		for (j = 0; j < n - i; j++) 		{ 			if (*(a + j) > *(a + j + 1)) 			{ 				int t; 				t = *(a + j); 				*(a + j) = *(a + j + 1); 				*(a + j + 1) = t; 			} 		} } void print(int *a, int n) { 	int i; 	for (i = 0; i < n; i++) printf("%d ", a[i]); 	printf("\n"); } int main(void) { 	int a[10]; 	int i; 	for (i = 0; i < 10; i++)scanf("%d", a + i); 	sort_int(a, 10); 	print(a, 10); 	return 0; }

user: user-3
content: 没看出1和2有什么区别。
user-0 提问: Linux 上使用multimap，执行插入操作，当插入最后一个数据时报Segmentation fault

回复:
user: user-0
content: 下面贴上自己的代码， 请各位帮忙分析一下：   int MakeContrastTable(const vector<RoadRec>& RoadList, multimap<int, ContrastRec>& ContrastTable)  {          int RoadCnt = RoadList.size();          cout<<"RoadCnt:"<<RoadCnt<<endl;          int loop = 0;          for (int i = 0;i < /*RoadCnt - 1*/10;++i) // RoadCnt - 2 because id begin 1          {                  cout<<i<<endl;                  const RoadRec& stRoadRec = RoadList.at(i);                  for (int j = i + 1;j < /*RoadCnt*/11;++j)                  {                                                    const RoadRec& tmp = RoadList.at(j);                          cout<<"j:"<<j<<endl;                          //用点到线段的距离 过滤掉一部分比较不靠谱的数据                          if (!filterByGeom(stRoadRec, tmp))                                  continue;                          //在根据斜率的关系进一步过滤一部分不靠谱的数据                          double slope = 0;                          int startpoint = 0;                          //如果两条Link是同侧路 则跳过                          if (IsOneSideOfRoad(stRoadRec, tmp))                                  continue;                                                    ContrastRec stcontreastrec;                          stcontreastrec.gid_S = stRoadRec.src_id;                          stcontreastrec.gid_L = tmp.src_id;                          stcontreastrec.slopediff = (int)(slope*1000);                          cout<<"here"<<endl;                           ContrastTable.insert(make_pair(stcontreastrec.slopediff, stcontreastrec)); ///如果注释掉这句，就不会出现错误                  }          }                return 0;  }
user-0 提问: 求大神解答数据结构程序题

回复:
user: user-1
content: 老师布置的题目可能搜得出来哦

user: user-2
content: 程序题变成填空题是最无聊的事

user: user-3
content: 让你自己做，你竟然来找答案。同学，你挂了。

user: user-4
content: 你在给我们安排作业啊！
user-0 提问: C语言递归分鱼问题

回复:
user: user-1
content: 这其实是枚举法,假如当前鱼是A, 分后的鱼为(A-1)/5*4 , 也就是说下一个人看到鱼的数量是4的倍数. 这问题直接循环就好了, 用递归不直观

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

user: user-3
content: 5人分鱼5次，由第二次开始每次分的鱼的总数是上一次的四分之一，最后一次分鱼平分后还多出一条。
user-0 提问: 用除留余数法构造哈希表

回复:
user: user-1
content: void HashTable::Hashname(DataInfo *dataInfo)//以名字为关键字建立哈希表 {//利用除留取余法建立以名字为关键字建立的哈希函数，在发生冲突时调用Random函数处理冲突 	int i = 0;	 	int key = 0;          for (int t=0; dataInfo->name[t]!='\0'; t++)    	{		 		key = key + dataInfo->name[t]; 	} 	key = key % 42; 	while(value[key]->sign == '1')//有冲突 	{ 		key = Random(key, i++);//处理冲突 	} 	if(key == -1) exit(1);//无冲突 	length++;//当前数据个数加 	value[key]->name = dataInfo->name; 	value[key]->address = dataInfo->address; 	value[key]->phone = dataInfo->phone; 	value[key]->sign = '1';//表示该位置有值 	//cout << value[key]->name << "  " << value[key]->phone << "  "  << value[key]->address << endl; }
user-0 提问: 玩转vim的神人能进来吗？

回复:
user: user-1
content: IDE中的所谓“工程文件”有两个作用，一是你说的组织文件，哪些是项目，哪些不是，关于这点，vim应该是没有直接的对等物 二是编译相关，其实就是Linux下的Makefile了  如果对vim感兴趣，可以读vim的manual，:help即可 以下是部分目录截取，应该对你组织工程有帮助。  Getting Started usr_01.txt  About the manuals usr_02.txt  The first steps in Vim usr_03.txt  Moving around usr_04.txt  Making small changes usr_05.txt  Set your settings usr_06.txt  Using syntax highlighting usr_07.txt  Editing more than one file usr_08.txt  Splitting windows usr_09.txt  Using the GUI usr_10.txt  Making big changes usr_11.txt  Recovering from a crash usr_12.txt  Clever tricks  Editing Effectively usr_20.txt  Typing command-line commands quickly usr_21.txt  Go away and come back usr_22.txt  Finding the file to edit usr_23.txt  Editing other files usr_24.txt  Inserting quickly usr_25.txt  Editing formatted text usr_26.txt  Repeating usr_27.txt  Search commands and patterns usr_28.txt  Folding usr_29.txt  Moving through programs usr_30.txt  Editing programs usr_31.txt  Exploiting the GUI usr_32.txt  The undo tree

user: user-0
content: 引用 2 楼 user-1 的回复::set path+='/path_to_snmp_include_dir' ??  果然牛X，搞定了，   我一直以为是要去环境变量里添加，难怪gf跳不过去！！！    最后向前辈讨教一个问题    假设程序有很多个cpp  .c .h ， 用过可视化的编程工具的人都知道，必须接建立一个工程文件来进行管理。  vim 如何建立工程文件，由于我装了WinManager 了，所以以当前目录浏览该目录下的文件，  但这毕竟不是工程文件！！！！！！！！！！！！！！！！！！！！11   有了工程文件才方便管理你的工程该有哪些文件，不该有哪些文件，是不是？   那么如何建立呢？  很多文章只交人如何配置vim， 丝毫没有提到过，如何建立一个工程？  如何保存一个工程？  我觉得这对开发来说，很重要！！！  不吝赐教

user: user-1
content: :set path+='/path_to_snmp_include_dir' ??

user: user-0
content: 帮忙解答 3L问题  4L 附一个新问题：         是关于  mkession！          命令的问题。  由于mksession!   之前，我用了winmanager ，特意打wm ，然后再 mksession！这样的话，方便我以后打开工程。  关闭vim后，启动vm -S 后，  发现 第一个画面的内容是：  "[File List]" [New File] "test.cpp" 16L, 185C Press ENTER or type command to continue   请问这是什么原因？ 谁见过，这是我配置错误的原因，还是？   我于是按了回车，然后看到：  左侧的wm和左下侧的file list(也就是我们的taglist),右侧是我们的代码文件。   问题来了：  左上册侧的 wm是空的！！！！ 为此，我在wm中按了f5刷新， 没有任何效果。   只好强制用wm这2个组合键，用开启winmanager！！！！ 这个时候，才正确开启了winmanager!!  请问我的正常吗？ 注意winmanager按照网上的做法，映射为wm了. 。所以只需要用wm来开启。    配置为：  -- WinManager setting --     let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件     "let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了，退出vim     nmap wm :WMToggle<cr>

user: user-0
content: 大神何在？
user-0 提问: 关于五子棋算法以及搜索的一些问题

回复:
user: user-1
content: AI 可以做得分制AI 给每一个可以下子的点一个评分.  评分最高的为落子点.   有多个最高 需要指定策略落子.

user: user-2
content: 搜索下载研究开源五子棋源代码。
user-0 提问: 用VS2013编程进行windows程序设计时出现的问题

回复:
user: user-0
content: 问题已经解决了

user: user-1
content: 无法解析的外部符号 _main... 这句话 复制 然后上网搜索 就能找到解决方法

user: user-0
content: 补充说明一下，这里建的是一个空项目
user-0 提问: Error c2181没有匹配if的非法else！

回复:
user: user-1
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-0
content: 弱弱的问一下，自己发出的帖子可以编辑吗？？

user: user-0
content: #include<stdio.h>  int main ( ) { 	float score=0;  	 	printf ("请输入你的考试分数：\n");  	scanf("%f",&score);  	if(score>100) 	{ 		printf("输入错误\n"); 	} 	else if (score>80) 	{ 		printf("优秀！\n"); 	} 	else if(score>60) 	{ 		printf("及格！\n"); 	} 	else if(score>=0) 	{ 		printf("不及格！\n"); 	} 	else  		printf("输入错误\n"); 	 	return(0); }  这回倒是scanf报警了！！

user: user-0
content: #include<stdio.h>  int main ( ) { 	float score=0;  	 	printf ("请输入你的考试分数：\n");  	scanf("%f",&score);  	if（score>100） 	{ 		printf("输入错误\n"); 	} 	else if (score>80) 	{ 		printf("优秀！\n"); 	} 	else if（score>60） 	{ 		printf("及格！\n"); 	} 	else if（score>=0） 	{ 		printf("不及格！\n"); 	} 	else  		printf("输入错误\n"); 	 	return(0); }               //这样是否好些？

user: user-2
content: 这段代码里的括号有好几个都是中文的，左右半边的都有，楼主自己找出来改成英文的应该就好了。仔细看，字体还是有区别的。 中文括号（） 英文括号()

user: user-0
content: #include<stdio.h>  int main ( ) { 	float score=0;  	 	printf ("请输入你的考试分数：\n");  	scanf("%f",&score);  	if（score>100） 	{ 		printf("输入错误\n"); 	} 	else if (score<=100 && score>80) 	{ 		printf("优秀！\n"); 	} 	else if（score<=80 && score>60） 	{ 		printf("及格！\n"); 	} 	else if（score<=60 && score>=0） 	{ 		printf("不及格！\n"); 	} 	else  		printf("输入错误\n"); 	 	return(0);

user: user-2
content: if (score > 100) ... else if (score <= 100 && score > 80)  // 这里的score <= 100可以去掉，因为前一个if的作用，执行到这里的前提就是score<=100，所以没必要再判断一次。score<=80的也一样。  最后一个score<=60，应该改成score>=0

user: user-2
content: 目测看不出错误，建议楼主仔细检查一下括号之类的有没有中文符号，或者把代码原样复制过来看看。

user: user-3
content: 没看出问题在哪
user-0 提问: 一个makefile的奇怪用法

回复:
user: user-0
content: up up up

user: user-0
content: 引用 2 楼 user-1 的回复:首先看all为目标， 它提到会生成3个 .o文件。   眼睛花了吧， all: $(TARGETS) TARGETS=example-demon snmpdemoapp asyncapp 哪里有三个.o文件？  依赖中出现Makefile说明如果Makefile更新，目标也要更新。  LZ首先得知道.so是个什么东西  以上是我说的make的解析和执行规则，  下面下是 我的问题：  makefile的作者是希望，可以把应用程序的名字作为参数传入，它提供了3个名字。  于是我们可以make name 1,  make nam2, make name3这样的方式调用即可。  好了，但也意味着代码里，必须有3次类似的以下代码：  1.o     gcc  -c ... -o   1.o 2.o ..... 3.o  似乎作者是为了方便，于是用了个so文件的写法来替代3次的写法。

user: user-0
content: 引用 2 楼 user-1 的回复:首先看all为目标， 它提到会生成3个 .o文件。   眼睛花了吧， all: $(TARGETS) TARGETS=example-demon snmpdemoapp asyncapp 哪里有三个.o文件？  依赖中出现Makefile说明如果Makefile更新，目标也要更新。  LZ首先得知道.so是个什么东西  我确实看错了   这个makefile为了生可执行文件的， 应该 和so 文件无关。  按照makefile 的解析规则  1. 应用程序，需要.o文件  2. .o文件需要知道.c 文件  最后是 clean 这个伪目标， 一步步的从顶层到低端的进行拆解解释。   而make 后的执行的执行流程是：  则是反过来，  先生出.o ，然后到 可执行文件或者.so文件。

user: user-1
content: 首先看all为目标， 它提到会生成3个 .o文件。   眼睛花了吧， all: $(TARGETS) TARGETS=example-demon snmpdemoapp asyncapp 哪里有三个.o文件？  依赖中出现Makefile说明如果Makefile更新，目标也要更新。  LZ首先得知道.so是个什么东西

user: user-0
content: up 起来，有高手吗？
user-0 提问: union中输出数值的问题

回复:
user: user-1
content: 浮点数在内存的储存与整数是有区别的，你搜索一下浮点数 内存储存就知道了。

user: user-2
content: 求解 a={65};

user: user-3
content: 浮点数在机内用指数型式表示，分解为：数符，尾数，指数符，指数四部分。 数符占1位二进制，表示数的正负。 指数符占1位二进制，表示指数的正负。 尾数表示浮点数有效数字，0.xxxxxxx,但不存开头的0和点 指数存指数的有效数字。  指数占多少位，尾数占多少位，由计算机系统决定。 可能是数符加尾数占24位，指数符加指数占8位 -- float.
user-0 提问: C语言做字符倒置时，为什么定义了变量编译器会说我没定义呢

回复:
user: user-1
content: gcc 5.1的C编译器默认使用-std=gnu11而不是-std=gnu89了

user: user-2
content: -std=c99

user: user-3
content: 循环里应该min++max--

user: user-0
content: 引用 1 楼 user-3 的回复:试试把他们的定义移到函数最开始。传统的c就是这么要求的。大多数现代的编译器没这么严格了，但也有这样的好的，我试了，果然是这样，谢谢你 哈

user: user-3
content: 试试把他们的定义移到函数最开始。传统的c就是这么要求的。大多数现代的编译器没这么严格了，但也有这样的
user-0 提问: 如何用C语言获取到全部的内存数据？

回复:
user: user-1
content: WinAPIOverridehttp://jacquelin.potier.free.fr/winapioverride32/

user: user-2
content: 肯定要写内核的驱动，不然无法访问全部的物理内存。

user: user-3
content: 你要看物理内存的话可以写驱动进内核调用执行体API  可以看本人以前写的blog： 忙里偷闲中写的一个系统物理/虚拟地址内容查看器 http://blog.csdn.net/mydo/article/details/5166255  好久没搞内核了，还真是怀念呢

user: user-0
content: 引用 2 楼 mydo 的回复:类似ReadRemoteProcessMemory之类的API  你好 这样不是只能获取一个进程的内存数据吗 如果我想获取全部物理内存中的数据呢？

user: user-3
content: 类似ReadRemoteProcessMemory之类的API

user: user-3
content: windos核心编程里不是有讲如何读取其他进程的内存空间和内存属性的例子吗？我N年没翻了都记得
user-0 提问: Windows与linux下函数差别

回复:
user: user-1
content: 建议楼主在linux下学c和c++  windows是microsoft的标准  和c++不完全一样  比如 A & a = A(); 就可以在windows编译通过，但在linux下是不行的，因为不符合c++语言的标准   总之linux永远是紧跟c++最新标准的  而微软是自己有一套   建议你在linux下学c/c++

user: user-2
content: 对于c/c++标准，不同编译器，不同版本都支持程度不同，又各自有自己的扩展(非标准)。  多使用下主流的MSVC，GCC比较下两个平台

user: user-3
content: 目测lz是用vs的IDE

user: user-4
content: 是c11标准才是带_的

user: user-5
content: 这个是 Visual Studio 报的，微软搞的，跟 Windows 没关系。

user: user-6
content: vs编译器对库所做的警告

user: user-7
content: #pragma warning(disable:4996) ...

user: user-8
content: _s系列函数是VS的产物, 通常也就是加一个buf size防止溢出, linux用的是_n_系列, 例如 strncpy strncat等.  fopen_s把流指针用参数的方式返回, 不明白怎么个增强安全性方法, 另外学C语言最好用linux,别用VS

user: user-9
content: 这并不是平台的差别，只要是C标准，到哪里都一样（同一个版本）。 fopen_s只是vc下的产物。 本质上源代码是怎样的，并不重要，它的汇编是什么才重要。

user: user-10
content: 编译器自己的警告 这是编程早期  效率优先 和  安全优先 的两种思路表现 现在计算机的性能高了，自然建议 使用安全版本 fopen()是c标准库内的函数，linux和windows都知道 fopen_s()  我不知道是不是标准库的还是哪个库的，只在windows平台用过

user: user-11
content: Bounds checking
user-0 提问: C语言如何按行读取UNICODE文件？

回复:
user: user-1
content: 磁盘上都是字节流，内存才会存在字符流。 使用fgetws fgetws reads the wide-character argument str as a multibyte-character string or a wide-character string according to whether stream is opened in text mode or binary mode, respectively. For more information about using text and binary modes in Unicode and multibyte stream-I/O, see Text and Binary Mode File I/O and Unicode Stream I/O in Text and Binary Modes.

user: user-2
content: 试试下面方法 http://zhidao.baidu.com/question/455981816.html
user-0 提问: 怎么给c字符串赋动态值

回复:
user: user-0
content: 引用 1 楼 q3733353520 的回复:1、定义一个char类型的数组 2、int i = 1,char[48]={0};       如a[0] = 'i'; //取字符i        a[0] = i;  //取ASCII码为i的字符 是这样。 我晕我怎么问了个这么傻叉的问题，自己都觉得害臊，看来通宵确实影响智力，头晕晕沉沉的，这本来知道的东西竟突然忘记了。

user: user-1
content: 1、定义一个char类型的数组 2、int i = 1,char[48]={0};       如a[0] = 'i'; //取字符i        a[0] = i;  //取ASCII码为i的字符

user: user-2
content: 一个计算数字数组概览的算法

user: user-2
content: blog.csdn.net/mydo
user-0 提问: 关于结构体所占字节的问题

回复:
user: user-1
content: 对齐补齐，按字节最大的那个，int或*next都是4字节，数组是9,10,11,12个元素都是占20

user: user-2
content: 4字节对齐,数数看

user: user-3
content: 仅供参考： #include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 // //A1.a 0 //A1.b 4 //A1.c 17 // //A2.a 0 //A2.b 4 //A2.c 18 // //A4.a 0 //A4.b 4 //A4.c 20 // //A8.a 0 //A8.b 4 //A8.c 24 // //A16.a 0 //A16.b 4 //A16.c 24 // //

user: user-4
content: 测结构体大小，何须这么麻烦，直接sizeof(struct person)

user: user-5
content: 参看：http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html

user: user-6
content: 同意2楼 Xcode  默认设置   输出 24 ﻿

user: user-7
content: 引用 2楼lusfire 的回复:有个参数可以设置对齐方式这里是刚好对齐，把字符数组长度12改为11结果还是20

user: user-7
content: 有个参数可以设置对齐方式

user: user-8
content: 这不是凑巧对齐了吗