Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 想写一个IDE 可是不知道怎么分析头文件里定义的变量和函数 求助

回复:
user: user-1
content: 去了解一下clang，可以直接生成程序的语法树，下面是clang文档里的例子： http://clang.llvm.org/docs/IntroductionToTheClangAST.html  $ cat test.cc int f(int x) {   int result = (x / 42);   return result; }  # Clang by default is a frontend for many tools; -Xclang is used to pass # options directly to the C++ frontend.  $ clang -Xclang -ast-dump -fsyntax-only test.cc TranslationUnitDecl 0x5aea0d0 <<invalid sloc>> ... cutting out internal declarations of clang ... `-FunctionDecl 0x5aeab50 <test.cc:1:1, line:4:1> f 'int (int)'   |-ParmVarDecl 0x5aeaa90 <line:1:7, col:11> x 'int'   `-CompoundStmt 0x5aead88 <col:14, line:4:1>     |-DeclStmt 0x5aead10 <line:2:3, col:24>     | `-VarDecl 0x5aeac10 <col:3, col:23> result 'int'     |   `-ParenExpr 0x5aeacf0 <col:16, col:23> 'int'     |     `-BinaryOperator 0x5aeacc8 <col:17, col:21> 'int' '/'     |       |-ImplicitCastExpr 0x5aeacb0 <col:17> 'int' <LValueToRValue>     |       | `-DeclRefExpr 0x5aeac68 <col:17> 'int' lvalue ParmVar 0x5aeaa90 'x' 'int'     |       `-IntegerLiteral 0x5aeac90 <col:21> 'int' 42     `-ReturnStmt 0x5aead68 <line:3:3, col:10>       `-ImplicitCastExpr 0x5aead50 <col:10> 'int' <LValueToRValue>         `-DeclRefExpr 0x5aead28 <col:10> 'int' lvalue Var 0x5aeac10 'result' 'int'

user: user-2
content: 引用 楼主 LYP951018 的回复:最近想写一个IDE。。。。。假如用户#include一个头文件 我怎么分析出里面定义的函数和变量方便智能提示和高亮啊。。。。万一这个头文件错误怎么办。。。能不能借助编译器来完成这些工作啊。。。唉 头大死。。。。求解啊。。。。 ctag 不过你最好有心理准备，IDE的工作量不是随便说说的。。真要定制你也可以从eclipse开始啊

user: user-3
content: 参考Tiny C？

user: user-3
content: 引用 2 楼 LYP951018 的回复:引用 1 楼 zhao4zhong1 的回复:参考Tiny C？ 有什么相关资料吗。。我找了一下。。只有关于编译文件的一些。。。。 TinyC是开源的C编译器。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:参考Tiny C？ 有什么相关资料吗。。我找了一下。。只有关于编译文件的一些。。。。
user-0 提问: c

回复:
user: user-0
content: [size=14px]AC代码： #include<stdio.h> int main() {     double sum=0,t=1;     for(int i=1;i<=30;i++)     {         t*=i;         sum+=t;     }     printf("%.2e\n",sum);     return 0; } [/size]

user: user-1
content: static int s;  int sum(int n,int jie) {  	if(n==1) 	{ 		s++; 		jie--; 		n=jie; 		if(jie==1) 			return s++; 	} 		s+=n; 		sum(n-1,jie); }   int main() { 	int n=30; 	int jie=30; 	cout<<sum(n,jie)<<endl; 	     return(0); }

user: user-2
content: 引用 5 楼 Symfund 的回复:这个不考察编程能力滴：  程序员要有点数学素养，这个叫阶乘级数和：    印度有一个天才级无穷级数和大神，可以跟高斯叫板，他叫：Srinivasa Ramanujan  http://en.wikipedia.org/wiki/Ramanujan  他是无穷级求和，求积分的外星人。 他有一个精度极高的Pi的表达式：    不明觉厉

user: user-3
content: 引用 6 楼 Symfund 的回复:你想知道，他的那么多神奇的公式是怎么从他脑子里蹦出来的吗？  量子理论当中，不是有很多公式都是以级数和的形式给出的吗？  我只知道有个魔群月光猜想，哈哈~~

user: user-4
content: 阶乘积求和~~~~~soga!厉害~

user: user-5
content: 标题改为：编程实现无究阶乘级数求和

user: user-5
content: 这个题目的课题很好，但是标题不显眼，不霸气！收藏了！

user: user-5
content: 引用 9 楼 daiweifeng 的回复:[quote=引用 6 楼 Symfund 的回复:] 你想知道，他的那么多神奇的公式是怎么从他脑子里蹦出来的吗？  量子理论当中，不是有很多公式都是以级数和的形式给出的吗？  我只知道有个魔群月光猜想，哈哈~~[/quote]  嗯，太神奇了！

user: user-6
content: 引用 1 楼 longburulin 的回复:int main() {    int i;     long sum=0,temp=1;     for(i=1;i<=30;i++)    {         temp*=i;         sum+=temp;    }    printf("%.2e\n",sum);   return 0; }上面输出写错了

user: user-6
content: int main() {    int i;     long sum=0,temp=1;     for(i=1;i<=30;i++)    {         temp*=i;         sum+=temp;    }    printf("%.2e\n",long);   return 0; }

user: user-7
content: 你可以尝试把每位数字转换成字符输出，不然肯定会溢出的

user: user-5
content: 快给我分啊，给大家科普了一下，有点功劳吧！

user: user-5
content: 你想知道，他的那么多神奇的公式是怎么从他脑子里蹦出来的吗？  量子理论当中，不是有很多公式都是以级数和的形式给出的吗？

user: user-5
content: 这个不考察编程能力滴：  程序员要有点数学素养，这个叫阶乘级数和：    印度有一个天才级无穷级数和大神，可以跟高斯叫板，他叫：Srinivasa Ramanujan  http://en.wikipedia.org/wiki/Ramanujan  他是无穷级求和，求积分的外星人。 他有一个精度极高的Pi的表达式：

user: user-2
content: 引用 3 楼 rumlee 的回复:用long类型肯定是不行的，long类型没有那么大，肯定会溢出，所以干脆直接用double类型了。   void main(){ 	double sum  = 0.0; 	for(int i=1;i<=30;i++){ 		double sum1 = 1.0; 		for(int j=1;j<i;j++){ 			sum1 *= j; 		} 		sum += sum1; 	} 	printf("%.2e",sum); }   上面写错了，里面一个循环应该是j<=i  最终计算结果应该是 2.74e+032

user: user-2
content: 用long类型肯定是不行的，long类型没有那么大，肯定会溢出，所以干脆直接用double类型了。   void main(){ 	double sum  = 0.0; 	for(int i=1;i<=30;i++){ 		double sum1 = 1.0; 		for(int j=1;j<i;j++){ 			sum1 *= j; 		} 		sum += sum1; 	} 	printf("%.2e",sum); }
user-0 提问: 请问如何在一段含0x00的内存空间里查找ascii码串??

回复:
user: user-0
content: thanks

user: user-1
content: memcmp Compare characters in two buffers.  int memcmp( const void *buf1, const void *buf2, size_t count );  Routine Required Header Compatibility  memcmp <memory.h> or <string.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  The return value indicates the relationship between the buffers.  Return Value Relationship of First count Bytes of buf1 and buf2  < 0 buf1 less than buf2  0 buf1 identical to buf2  > 0 buf1 greater than buf2    Parameters  buf1  First buffer  buf2  Second buffer  count  Number of characters  Remarks  The memcmp function compares the first count bytes of buf1 and buf2 and returns a value indicating their relationship.  Example  /* MEMCMP.C: This program uses memcmp to compare  * the strings named first and second. If the first  * 19 bytes of the strings are equal, the program  * considers the strings to be equal.  */  #include <string.h> #include <stdio.h>  void main( void ) {    char first[]  = "12345678901234567890";    char second[] = "12345678901234567891";    int result;     printf( "Compare '%.19s' to '%.19s':\n", first, second );    result = memcmp( first, second, 19 );    if( result < 0 )       printf( "First is less than second.\n" );    else if( result == 0 )       printf( "First is equal to second.\n" );    else if( result > 0 )       printf( "First is greater than second.\n" );    printf( "Compare '%.20s' to '%.20s':\n", first, second );    result = memcmp( first, second, 20 );    if( result < 0 )       printf( "First is less than second.\n" );    else if( result == 0 )       printf( "First is equal to second.\n" );    else if( result > 0 )       printf( "First is greater than second.\n" ); }   Output  Compare '1234567890123456789' to '1234567890123456789': First is equal to second. Compare '12345678901234567890' to '12345678901234567891': First is less than second.   Buffer Manipulation Routines  See Also   _memccpy, memchr, memcpy, memset, strcmp, strncmp

user: user-2
content: 引用 1 楼 user-4 的回复:memcmp ++

user: user-3
content: 把code中的..34改成255..  0x00 = 255d..所以char数组定义为char[255]就可以了吧..(因为我写的测试用的文件只有34个字节..所以循环写成那样了..)

user: user-3
content: #include <iostream>   #include <pthread.h>    #include <stdlib.h>  #include <stdio.h> #include <windows.h>    using namespace std;   char buffer[255] ; int main(int args, char* argv[])   {     FILE* fp ;       _wfopen_s(&fp,TEXT("Sample"),TEXT("rb")) ;         fread(buffer,34,1,fp) ;  	for(int xun = 0 ; xun < 34 ; ++ xun) 	{ 		if((buffer[xun] == 'h') && (buffer[xun + 1] == 'e') && (buffer[xun + 2] == 'l') && (buffer[xun + 3] == 'l') && (buffer[xun + 4] == 'o')) 			cout << "偏移地址:" << xun ; 	}  }   看着有点搓..  - - 我试过可以...

user: user-4
content: memcmp
user-0 提问: 看libvirt源码，有个地方没明白？

回复:
user: user-0
content: 我是用source insight看的，查不到定义，在windows环境下没有相关定义，应该是linux下的某个特性吧。

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

user: user-2
content: 既然你知道 df/dx 就是 f'(x)的意思，何必纠结表示法呢！ 奇技淫巧只会造成他人阅读代码的障碍，并不可取！

user: user-3
content: 如果你认为_是个宏，那么必然能在源文件中搜寻到它的定义。
user-0 提问: ACM编程题

回复:
user: user-1
content: 又见约瑟夫问题！！！！！！！！其实我做过的最难的也是约瑟夫环问题而已！！！！！！！！！！！

user: user-2
content: 第二个就类似于约瑟夫环，模拟一下就完事了，数学NB的话也可以用同余的代数方法解决 第三题更简单。。。把第二位第一位读法分别写出特别注意10，20之类的，别读第一位 再判断一下最高位超了就报错 真太水了，懒得写了楼主加油写写试一下吧1

user: user-2
content: 问题1代码   int num[500000], size; void ShellSort(int array[],int length) { 	 	int d = length/2;   //设置希尔排序的增量 	int i ; 	int j; 	int temp; 	while(d>=1)         { 		for(i=d;i<length;i++)     		{     			temp=array[i]; 			j=i-d; 			while(j>=0 && array[j]<temp)     			{     				array[j+d]=array[j];     				j=j-d;     			}     			array[j+d] = temp;     		} 		 		d= d/2;    //缩小增量     	} }  int main {     int sum1 = 0, sum2 = 0;     scanf("%d", &size);     for(int i = 0; i < size; i++)         scanf("%d", &num[i]);     Shell(num, size);     for(i=0;i<size;i++)    {         if(i % 2 == 0)            sum1 += num[i];         else            sum2 += num[i];    }    if(sum1 > sum2)       cout << sum1 - sum2 << endl;    else       cout << sum2 - sum1 << endl; }

user: user-3
content: 第一个就是按升序排序，然后求和 第二个类似于耶稣的叛徒 第三个（怎么是拼音呢）我直接用字符数组的 代码只有自己写才能明白为什么
user-0 提问: 关于汇编和c，程序语言

回复:
user: user-1
content: 我反正是学不会。

user: user-2
content: 难 汇编的指令还会影响状态寄存器各种跳来跳去 脑子要是不注意的话根本看不下去

user: user-0
content: 看来汇编比c要难或者说不太一样

user: user-0
content: 引用 19 楼 dsyayo 的回复:<<计算机组成原理>>,学习中!加油我们一起努力

user: user-0
content: 引用 18 楼 zhang5476499 的回复:都学了快半年了，王爽的书还没有看完，还是学校的课程，老师完全照着书念，好不好？  我无法了。 加油我们一起努力

user: user-3
content: <<计算机组成原理>>,学习中!

user: user-4
content: 都学了快半年了，王爽的书还没有看完，还是学校的课程，老师完全照着书念，好不好？  我无法了。

user: user-5
content: 编写相同规模的程序，当然汇编比C语言难。但是不要忘了，我们用不同语言编写的程序的规模是不同的。  用汇编可能也就是显示几个字符，读取下串口这样简单的功能，实现极其简单的数据处理，但是用C语言，你可能就要面对诸如编写用户界面，设计比较复杂的算法，同时访问很多硬件这样的任务了。而如果你使用Java，你甚至可能要写一个服务器/客户端架构多层的应用程序……  从这个意义上说，没有什么语言是简单的，要不然编程语言进步了那么多，程序员的工资早就一钱不值了。  你特别需要注意的是，不同的语言，解决问题的尺度不同，比如用C语言，你可能习惯于结构化编程，你的脑子中不太注意变量怎么分配，循环的跳转怎么安排，甚至操作一个加法运算，是否考虑进位、溢出之类的事情，但是用汇编这些都需要考虑。你思考的问题的层次完全不同。

user: user-6
content: 引用 4 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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-7
content: 面向对象只是一种编程思想。 再抽象的编程语言，最后不都变成汇编代码了吗？我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。

user: user-8
content: 越自由的语言越难。

user: user-9
content: linux启动代码里一会x86汇编，一会at&t汇编，不懂

user: user-10
content: 术业有专攻，你学汇编也只会学一两种，常见的有x86, arm，C却是通用的 学汇编要学会把汇编指令分类，运算指令，加载存储指令等等

user: user-11
content: 汇编语言非常接近硬件，所以在学习之前得系统的了解计算机硬件的相关知识，否则学习起来当然觉得难。 正如4楼所说，如果能先看完《计算机组成原理》再来学汇编的话，就会轻松多了，因为汇编语言的书中提到的各种硬件的概念，都在《计算机组成原理》中有详细介绍。

user: user-12
content: 汇编不可能完成大型软件，没有任何一个大项目是完全用汇编写的，但是很多大型项目都可能在某个点上用汇编进行优化， 所以，任何语言都有其应用的场合，如果一个人只会汇编而不会其他任何编程语言，他可能连个码农都不如。更莫说高手了， 很多新人都有这个误区，认为只要学会最难的就能成为高手，当然这是错误的。

user: user-13
content: 汇编重要吗？

user: user-0
content: 引用 3 楼 user-14 的回复:汇编 还是先看看视屏在看书，比较好，网上有中山大学的汇编视屏51节课 还是比较清晰的 有空再网上下了看看

user: user-7
content: 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》

user: user-7
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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-14
content: 汇编 还是先看看视屏在看书，比较好，网上有中山大学的汇编视屏51节课 还是比较清晰的
user-0 提问: [求助]win7的nslookup与linux下c语言写的一个DNS服务器端交互的问题(TCP)

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:TCP没有保证发10字节一定能一次recv到10字节，建议了解一下TCP的特性。 额。。可是在linux下每次recv都是正常的，windows下每次都只能recv到2字节

user: user-1
content: TCP没有保证发10字节一定能一次recv到10字节，建议了解一下TCP的特性。
user-0 提问: 这是一个直接对中缀表达式求值的程序，可运行，初学数据结构，请各位大侠帮忙看看有没有哪些地方可以改进？小弟感激不尽！！

回复:
user: user-1
content: 看错了。。。两个结构体名字太相似了。。

user: user-0
content: 引用 1 楼 zxhuser-1 的回复:那两个结构体不是一样的吗?为什么要重复定义呢？   一个是存储int型数字的，一个是存储运算符的

user: user-1
content: 那两个结构体不是一样的吗?为什么要重复定义呢？
user-0 提问: 学生管理系统，文件读取写入链表的问题

回复:
user: user-1
content: 用函数fscanf试试

user: user-2
content: f9加断点调试下看看是哪句的问题啊

user: user-0
content: 加了，一共有近600行代码，这就一小段

user: user-3
content: 加头文件了吗?
user-0 提问: 使用数组进行计数！新手求教！

回复:
user: user-1
content: 运行了一遍，没有问题啊

user: user-2
content: 你应该自己调试一下，看看各个变量是否符合你你要求！！

user: user-3
content: a应该是char类型

user: user-4
content: 哪错了？
user-0 提问: 简单的方法把二进制数据写入文件

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:还可以用bitset我知道bitset，但现在课程实验在用C。。。貌似没有更好的办法了，结贴。

user: user-1
content: 还可以用bitset

user: user-2
content: 哈夫曼哈夫曼码最长如果为16个， 可以考虑用32位编码缓存数据。 编码的时候直接把编码缓存数据移位， 把生成的哈夫曼码放到数据中。 当缓存数据超过16位的时候， 把整Byte数据保存， 编码缓存数据移位。 编码结束时， 把剩余的数据保存。

user: user-0
content: 引用 2 楼 user-3 的回复:最简单的： 每个编码写一行不清楚你的每个编码写一行是什么意思？每个编码长度不同，你要写进文件，每1个字节可能包含的字符也是不一样的。可能包含两个字符，可能包含一个半，可能是半个，也可能是几分之一个。

user: user-3
content: 最简单的： 每个编码写一行

user: user-1
content: 仅供参考//有一个二进制文件，要求每隔50bits，删除后面的12bits。 #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fi,*fo; char buf[31]; char obf[31]; int bn,n; void filter() {//对buf中前n个字节中的位，每隔50bits，忽略12bits，结果放在obf中,且将bn设置为obf中的字节数。     char bit[249];     char obt[249];     char b8[33];     char b88[33];     int i,j;     char *e;      for (i=0;i<n;i++) {         _itoa(buf[i],b8,2);         sprintf(b88,"%032s",b8);         sprintf(bit+i*8,"%s",b88+24);     }      j=0;     for (i=0;i<n*8;i++) {         if (i%62<50) {             obt[j]=bit[i];             j++;         }     }     if (j%8) {         bn=(j/8+1)*8;     } else {         bn=j;     }     for (i=j;i<bn;i++) obt[i]='0';     obt[bn]=0;     bn=bn/8;     for (i=0;i<bn;i++) {         strncpy(b8,obt+i*8,8);b8[8]=0;         obf[i]=(char)strtol(b8,&e,2);     } } int main() {     fi=fopen("in.bin","rb");     if (NULL==fi) {         printf("Can not open file in.bin!\n");         return 1;     }     fo=fopen("out.bin","wb");     if (NULL==fo) {         fclose(fi);         printf("Can not open file out.bin!\n");         return 2;     }     while (1) {         n=fread(buf,1,31,fi);         if (0==n) break;         filter();         fwrite(obf,1,bn,fo);     }     fclose(fo);     fclose(fi);     return 0; }
user-0 提问: 越写越乱，请求牛人们帮我分析分析，要怎么改才好？？？

回复:
user: user-0
content: 引用 2 楼 shimachao 的回复:描叙清楚你要做什么，你遇到的问题是什么？ 再把代码贴好！ 看别人的代码需要比你本人更大的耐心。 谢谢！！！ 我想用opengl做一个海浪仿真，在xoz面上作网格，y方向上作为海浪高度，海浪的模型是 在xoz面上作网格，y方向上作为海浪高度。我不知道怎么把x,z,t的值传入到函数height，还有我不知道关于使用opengl的函数是否正确？

user: user-1
content: 描叙清楚你要做什么，你遇到的问题是什么？ 再把代码贴好！ 看别人的代码需要比你本人更大的耐心。

user: user-2
content: 搜网络教程“学OpenGL编3D游戏”。
user-0 提问: 每个线程传递一个局部变量会影响到其他线程的变量值？百思不得其解

回复:
user: user-0
content: 这样的话传递给线程的最好是全局变量或者动态分配的，已经结贴了。谢谢！

user: user-0
content: 犯了这么傻的错误，谢谢各位了

user: user-1
content: 引用 5 楼 TheNewIpad 的回复:RMSG rmsg; 是一个局部变量。 由于在启动函数中，所以地址是不变的。 会被最后接收的变量覆盖。  第一块代码的第18行。 改为在堆上分配RMSG吧。

user: user-2
content: rmsg是一个局部变量 你的循环执行一次完成之后 对象笑话内存释放 &rmsg变成野指针  传入线程的指针是野指针  于是 出现这些问题

user: user-1
content: RMSG rmsg; 是一个局部变量。 由于在启动函数中，所以地址是不变的。 会被最后接收的变量覆盖。

user: user-0
content: 引用 2 楼 user-3 的回复:理论上是一个rmsg对应一个线程的。 你说下怎么对应的  补充一下啊，每个客户端发送了不同数目的唯一消息，线程一开是都能接收到的，但有线程退出以后似乎就“影响”了其他的线程！

user: user-0
content: 引用 2 楼 user-3 的回复:理论上是一个rmsg对应一个线程的。 你说下怎么对应的                   RMSG rmsg;                 memset(&rmsg, 0, sizeof (rmsg));                 rmsg.cli_sockd = client_sockd;                 memcpy(&(rmsg.cli_addr), &client_addr, sizeof (client_addr));                  pthread_create(&tid, NULL, server_handle, (void *) &rmsg);  应该是对应的吧。。想不通怎么搞串了。

user: user-3
content: 理论上是一个rmsg对应一个线程的。 你说下怎么对应的

user: user-0
content: 希望有人能够帮助我一下！
user-0 提问: 求助，dereferencing pointer to incomplete type

回复:
user: user-1
content: Function: xmlStrdup  xmlChar *	xmlStrdup		(const xmlChar * cur)  a strdup for array of xmlChar's. Since they are supposed to be encoded in UTF-8 or an encoding with 8bit based chars, we assume a termination mark of '0'.  cur:	the input xmlChar * Returns:	a new xmlChar * or NULL

user: user-0
content: 我在网上查了，知道是这个问题，但是具体的缺什么或者哪里有错还是找不出来，按说这是在网上下载的现成的代码应该不会有什么问题啊。。。。这是libxslt文件夹下的xsltutils.c文件，一部分代码：  #define IN_LIBXSLT #include "xsltutils.h" #include "libxslt.h" #include <stdio.h> #include <string.h> #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif #include <stdarg.h>  #include <libxml/xmlmemory.h> #include <libxml/tree.h> #include <libxml/HTMLtree.h> #include <libxml/xmlerror.h> #include <libxml/xmlIO.h>  #include "templates.h" #include "xsltInternals.h" #include "imports.h" #include "transform.h" 。 。 。  int xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len,  		       xmlDocPtr result, xsltStylesheetPtr style) {     xmlOutputBufferPtr buf;     const xmlChar *encoding;      *doc_txt_ptr = NULL;     *doc_txt_len = 0;     if (result->children == NULL) 	return(0);      XSLT_GET_IMPORT_PTR(encoding, style, encoding)     if (encoding != NULL) { 	xmlCharEncodingHandlerPtr encoder;  	encoder = xmlFindCharEncodingHandler((char *)encoding); 	if ((encoder != NULL) && 	    (xmlStrEqual((const xmlChar *)encoder->name, 			 (const xmlChar *) "UTF-8"))) 	    encoder = NULL; 	buf = xmlAllocOutputBuffer(encoder);     } else { 	buf = xmlAllocOutputBuffer(NULL);     }     if (buf == NULL) 	return(-1);     xsltSaveResultTo(buf, result, style);     if (buf->conv != NULL) { 	*doc_txt_len = buf->conv->use; 	*doc_txt_ptr = xmlStrndup(buf->conv->content, *doc_txt_len);     } else { 	*doc_txt_len = buf->buffer->use; 	*doc_txt_ptr = xmlStrndup(buf->buffer->content, *doc_txt_len);     }     (void)xmlOutputBufferClose(buf);     return 0; } 。 。 。

user: user-2
content: 你的指针类型是不完全类型吧。。。只有声明没定义，看看是不是头文件什么的没包含。
user-0 提问: 急求各位前辈一个数据处理问题！！！

回复:
user: user-1
content: 1楼给出了在“组合下标”中取“组合上标”种组合的算法。 楼主不是想“n行取其中的每两行，三行，四行，...,n行(不能遗漏或是重复)”吗？参考一下。 如果行顺序相关的话，那就不是组合而是排列了。排列参考下面： //qplw.cpp #include <stdio.h> #include <string.h> #include <stdlib.h> int v=0; int w=0; int m;//记录字符串长度 int n;//记录字符串中的字符种类数 char map[256];//记录是哪几种字符 int count[256];//记录每种字符有多少个 int stack[1000];//递归用的栈，并记录当前生成的排列 void Make_Map(char *str) {//统计字符串的相关信息     int s[256];     int i;     memset(s,0,sizeof(s));     memset(count,0,sizeof(count));     m=strlen(str);     if (w<1 || m<w) w=m;     while(*str) {         s[*str]++;         str++;     }     n=0;     for (i=0;i<256;i++)         if (s[i]) {             map[n]=i;             count[n]=s[i];             n++;         } } void Find(int depth) {//递归式回溯法生成全排列     if (depth==w) {         int i;         for (i=0;i<depth;i++) putchar(map[stack[i]]);         putchar('\n');     } else {         int i;         if (v && depth>0) {             for (i=0;i<depth;i++) putchar(map[stack[i]]);             putchar('\n');         }         for (i=0;i<n;i++)             if (count[i]) {                 stack[depth]=i;                 count[i]--;                 Find(depth+1);                 count[i]++;             }     } } void main(int argc,char**argv) {     if (argc<2) {         printf("%s 要产生全排列的字符串 [限定长度|-1]\n",argv[0]);         return;     }     if (argc>=3) w=atoi(argv[2]);     if (-1==w) v=1;     Make_Map(argv[1]);     Find(0); } //C:\test>qplw //qplw 要产生全排列的字符串 [限定长度|-1] // //C:\test>qplw 123 //123 //132 //213 //231 //312 //321 // //C:\test>qplw 123 2 //12 //13 //21 //23 //31 //32 // //C:\test>qplw 122333 3 //122 //123 //132 //133 //212 //213 //221 //223 //231 //232 //233 //312 //313 //321 //322 //323 //331 //332 //333 // //C:\test>qplw 123 -1 //1 //12 //123 //13 //132 //2 //21 //213 //23 //231 //3 //31 //312 //32 //321 //

user: user-1
content: 仅供参考#include <stdio.h> #include <stdlib.h> #define MAX_NUM 26 int comb[MAX_NUM]; int c1,c2; void combination(int m,int n) {     int i,j;      for (i=m;i>=n;i--) {         comb[n]=i; /* 选择当前的“头”元素 */         if (n>1) {             combination(i-1,n-1); /* 进入下一次更小的组合问题 */         } else { /* 满了需要的组合数，输出 */             for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);             printf("\n");         }     }     return; } int main(int argc,char **argv) {     if (argc<3) {         printf("%s 组合下标 组合上标\n",argv[0]);         return 1;     }     c1=atoi(argv[1]);     if (c1<1 || MAX_NUM<c1) {         printf("1<=组合下标<=%d\n",MAX_NUM);         return 2;     }     c2=atoi(argv[2]);     if (c2<1 || c1<c2) {         printf("1<=组合上标<=组合下标\n");         return 3;     }     comb[0]=c2;     combination(c1,c2);     return 0; }
user-0 提问: 依旧是我！依旧是白痴题！但真的不懂啊！

回复:
user: user-1
content: 如果输入1 2 3 4就会在执行if（a<b)a=b后跳过后面的语句，直接执行a的输出

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

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

user: user-3

user: user-4
content: 把else去掉

user: user-5
content: 看书吧。。多多的看。自己学会调试设断点

user: user-1
content: 我想楼主的代码不正确，1 2 3 4输出2

user: user-6
content: 引用 1 楼 user-9 的回复:你把else全去了  ++++++++++++

user: user-7
content: 引用 1 楼 user-9 的回复:你把else全去了正解。

user: user-2
content: 引用 10 楼 u014497083 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。 我是自学的！有很多不懂！那请问要学单步调试和设断点调试看那些书？？ 或者书应该怎么学？？ 谢谢！[/quote] VS IDE中，编译链接通过之后，按F11、F10、Shift+F11或F9、F5键。 凡是可以不通过看书而通过实际操作学习的技能，都尽量通过实际操作学习。 比如开车、比如游泳、比如骑车、……看遍所有开车、游泳、骑车、……的书的人就一定会开车、游泳、骑车、……吗？

user: user-8
content: if else if这种结构的语句 若是遇到了其中一个满足条件的就会跳出整个if else if语句，不会执行其他分支的语句了；     if (a<b)         a=b;     else if (a<c)         a=c;     else if (a<d)         a=d; 比如你写的这个，若是满足a<b，则a=b；之后下一条执行的语句是printf ("%d\n", a);后面的else if条件不会去判断的； 我帮你改写了一下 # include <stdio.h> #include<stdlib.h> main () {     int a, b, c, d;     printf ("请输入四个数（用空格隔开）：");     scanf ("%d %d %d %d", &a, &b, &c, &d);     a=_max(a,b);     a=_max(a,c);     a=_max(a,d);     printf ("%d\n", a); } 分给我吧

user: user-9
content: 你把else全去了
user-0 提问: 大神帮忙看看，这是错在哪？（编译可过~）

回复:
user: user-0
content: 引用 1 楼 user-3 的回复:uid = string_id(string_adjust("Hello")); 这句话你确定不能改成 char s[100]="Hello"; uid = string_id(string_adjust(s));  说到这的话  先要知道char *p; 你是把指针p指向了字符串常量了 也就是p是字符串常量指针 是说明了他们的内容是不能改变的  是的，谢谢！

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！   好的，感谢！

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

user: user-2
content: 修改一个常量当然报错了 "Hello"

user: user-3
content: uid = string_id(string_adjust("Hello")); 这句话你确定不能改成 char s[100]="Hello"; uid = string_id(string_adjust(s));  说到这的话  先要知道char *p; 你是把指针p指向了字符串常量了 也就是p是字符串常量指针 是说明了他们的内容是不能改变的
user-0 提问: 求教一个编译错误！

回复:
user: user-1
content: 错误表明缺少声明。

user: user-2
content: 看起来可能是这里的问题‘GHmac’ undeclared

user: user-3
content: 不是缺少头文件

user: user-4
content: 你是用啥编译的？

user: user-5
content: 在你的代码里面应该是有中文字母或者中文标点符号，中文空格。

user: user-6
content: 符号未定义。你检查一下那几个符号
user-0 提问: 很好的一个循序渐进的C语言教材，很适合新手学习，内容非常详细。

回复:
user: user-1
content: 很适合基础阶段的学习。

user: user-0
content: 老谭的书还是挺不详细的，感觉很模糊；

user: user-2
content: 好像没太必要。。。 现在在看《代码之美》和》编程之美》 上周刚看完《编程珠玑》

user: user-3
content: 引用 4 楼 zxh707wk 的回复:看老谭书的路过。。。 赶紧下了，重新学一遍

user: user-2
content: 看老谭书的路过。。。

user: user-4
content: 路过支持一下

user: user-5
content: ○ 同意

user: user-6
content: c程序设计语言，最经典的c语言书籍，作者为c语言设计者

user: user-7
user-0 提问: 用SYSTEM（“notepad a.txt”）在程序中打开a.txt 文件后，程序就停在当前，不会往下执行除非关闭txt文件 程序才会继续往下执行

回复:
user: user-1
content: 学到东西了！

user: user-2
content: 阻塞函数呗，等待返回

user: user-3
content: 引用 3 楼 zhao4zhong1 的回复:system(“start notepad.exe a.txt”); 或 system(“cmd.exe /c start notepad.exe a.txt”);  如果是linux下就system("notepad.exe a.txt &");

user: user-4
content: system(“start notepad.exe a.txt”); 或 system(“cmd.exe /c start notepad.exe a.txt”);

user: user-5
content: winexec，这个函数也是可以的，用法比上面的还简单些。

user: user-6
content: CreateProcess 或者ShellExecute，这里推荐用ShellExecute，直接open a.txt。当然可能txt关联破坏就不能用notepad打开了
user-0 提问: 求解决void   interrupt  (*oldhandler)();  函数指针定义出错，谢谢。

回复:
user: user-1
content: interrupt是TC或BC++3.1中DOS环境下使用的保留字。

user: user-0
content: 再顶一下，有人知道intterupt的用法吗？在哪个头文件里面定义的？只能在dos系统下才能用吗？

user: user-0
content: 引用 1 楼 u010039337 的回复:你这太复杂了，你想使用什么功能？联系函数指针的用法吗？ 中断处理函数

user: user-0
content: 引用 5 楼 FightForProgrammer 的回复:错误信息说的很明白呀  interrupt未定义的标识符,你需要知道interrupt是个什么类型撒 想用的是中断处理函数，这不是吗？

user: user-2
content: 错误信息说的很明白呀  interrupt未定义的标识符,你需要知道interrupt是个什么类型撒

user: user-3
content: #define interrupt __stdcall

user: user-4
content: 去掉所有的interrupt

user: user-5
content: interrupt没有定义，你看下原来的代码是什么类型的

user: user-6
content: 你这太复杂了，你想使用什么功能？联系函数指针的用法吗？
user-0 提问: the c programming language这本书现在还有必要看吗？

回复:
user: user-1
content: C语言这本书包含了很多C++的基础，对于初学者来说是很不错的，如果觉得自己C++已经掌握不错了就没必要看了

user: user-0
content: 引用 1 楼 shisi 的回复:你都觉得没必要，还问啥~ 毕竟没看过

user: user-2
content: 你都觉得没必要，还问啥~
user-0 提问: fwrite写400M数据，在win7上秒杀，在xp上居然要10多秒！！！！

回复:
user: user-0
content: win7确实比xp快十倍的速度，只能承认win7的缓存系统比较强了，结贴

user: user-0
content: 引用 3 楼 baichi4141 的回复:磁盘IO是瓶颈，这是硬件决定的，和操作系统关系不大，所以400M的数据不太可能瞬间完成 大概win7的缓存比较强，你认为写入的数据实际上都放在了缓存里，等你程序关闭后缓存慢慢往硬盘上写，如果你程序关闭后立刻断电，估计你会发现开机后磁盘上并没有完整的400M数据。而winxp的缓存比较老实，一点一点往磁盘上写数据  以上纯属猜测，我没做过大数据读写的任务 建议重新考虑功能需求  win7读取文件也快，读取是确实得到数据了啊

user: user-0
content: 本人在做数据库系统，按块读取文件分析数据，本来130M的数据可以0.1秒完成，结果程序拿到学校机器上要1秒多。 我试了自己本子装上xp运行也一样。

user: user-1
content: 这就是win7的优势啊,要不ms怎么放弃xp

user: user-2
content: 磁盘IO是瓶颈，这是硬件决定的，和操作系统关系不大，所以400M的数据不太可能瞬间完成 大概win7的缓存比较强，你认为写入的数据实际上都放在了缓存里，等你程序关闭后缓存慢慢往硬盘上写，如果你程序关闭后立刻断电，估计你会发现开机后磁盘上并没有完整的400M数据。而winxp的缓存比较老实，一点一点往磁盘上写数据  以上纯属猜测，我没做过大数据读写的任务 建议重新考虑功能需求

user: user-3
content: 引用 楼主 new_liang 的回复:代码如下  #include <stdio.h> #include <time.h>  void main() { 	clock_t t=clock(); 	FILE *fp=fopen("1.txt","wb"); 	char buff[400*1024]; 	for(int i=0;i<1024;i++) 		fwrite(buff,400*1024,1,fp); 	fclose(fp); 	printf("%d\n",clock()-t); }   有人知道为什么么， 有解决方法不？？？？ 你确定win7 真的写下去了？

user: user-0
content: 急求大神解答，程序放到学校的机器运行上超慢，又不想背本子去
user-0 提问: FindFirstFile 为什么总是出错？

回复:
user: user-1
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。

user: user-2
content: 转义字符的问题

user: user-0
content: 引用 1 楼 tujiaw 的回复:改为:"d:\\cgi"主要不是这，FindFirstFile 因为这个函数的第一个参数是TCHAR型，如果只是传一个字符串常量就不行。可以用_T（）。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。嗯，可以考虑。

user: user-3
content: \转义字符 会和后一个字母c组成一个字符 应该添加一个\哈

user: user-4
content: 改为:"d:\\cgi"
user-0 提问: 又是我！又是新手问题！

回复:
user: user-1
content: switch 里面只能是整数。 还有第九行，比较运算符的两边，类型最好是相同的，所以你最好改成(int)score>100这样，或者 score>100.0f 这样。

user: user-2
content: 引用 6 楼 u013697891 的回复:[quote=引用 2 楼 u012421456 的回复:] 找不到错误，你的学会看编译器的报错啊！score是浮点数，score/10以后还是个浮点数，switch中不能是浮点数 这个知识书上没有吧[/quote] 整数与浮点数经运算后结果为浮点数，这个是有的，switch中不能是浮点数，我记不清了，记得是有来

user: user-3
content: 引用 2 楼 u012421456 的回复:找不到错误，你的学会看编译器的报错啊！score是浮点数，score/10以后还是个浮点数，switch中不能是浮点数 这个知识书上没有吧

user: user-2
content: 也可以使用一个函数# include <stdio.h>  char panbie(float score, int e);  int main (void) { 	int e = 0; 	float score;// score:得分，得分记录 	char grade;//grade:阶段，阶级；等级，级别；标准；班级 	 	printf ("Input score:");//input:输入 	scanf ("%f",&score); 	grade = panbie(score, 0);     if (e == 0) 		printf ("成绩是%6.2f, 相应的等级是%c\n", score, grade);  	return 0; }  char panbie(float score, int e) { 	char grade; 	if (score>100 || score<0)//验证数据的正确 	{ 		printf ("\n数据有误！无法判别！"); 		e=1; 	} 	switch ((int)score/10) 	{ 	   case 10: 	   case 9: grade='A'; break; 	   case 8: grade='B'; break; 	   case 7: grade='C'; break; 	   case 6: grade='D'; break; 	   case 5: 	   case 4: 	   case 3: 	   case 2: 	   case 1: 	   case 0: grade='E'; 	} 	 	return grade; }

user: user-2
content: 还有就是29行   相应的等级   ，输出应该是%c，毕竟输出的是个字符

user: user-4
content: 可将switch(score)改成switch((int)score)即可

user: user-2
content: 找不到错误，你的学会看编译器的报错啊！score是浮点数，score/10以后还是个浮点数，switch中不能是浮点数

user: user-4
content: 系统规定，switch后的表达式的类型只能是int,enum,char等离散的数据类型，而不能是float,double等连续的数据类型。
user-0 提问: 词法分析（C语言），求代码！

回复:
user: user-1
content: 编译原理?

user: user-2
content: 开源中国或者github上搜，很多啊

user: user-3
content: http://blog.csdn.net/u013298384/article/details/45675019

user: user-4
content: 参考TinyC ？

user: user-5
content: 使用lex。

user: user-6
content: 没有讲清楚？？

user: user-7
content: 词法分析？什么意思啊

user: user-0
content: 课堂内容，已解决，谢谢各位大神！
user-0 提问: 字符串排序，实在找不到哪错了，大神帮忙看看

回复:
user: user-1
content: void sortstr(TCHAR *v[],int n) { 	int i = 0; 	int j = 0; 	TCHAR *temp; 	for(i = 0; i < n;i++) 	{ 		for(j = i; j < n;j++) 		{ 			if(0 < _tcscmp(v[i],v[j])) 			{ 				temp = v[i]; 				v[i] = v[j]; 				v[j] = temp; 			} 		} 	}

user: user-2
content: 第二种改法，直接传数组  #include <stdio.h> #include <string.h> #define N 10 int swap(char p[],char q[])//此函数用于交换两个字符串 {     char s[N]; 	strcpy(s,p); 	strcpy(p,q); 	strcpy(q,s); 	return 0; } void sort(char p[N][N]) { 	int i,j;     for(i=0;i<N-1;i++) 	{ 		for(j=0;j<N-i-1;j++) 		{ 			if(strcmp(p[j],p[j+1])>0)  			{ 				swap(p[j],p[j+1]); 			} 		} 	} 			 }  int main() { 	char str[N][N]; 	int i; 	//str = (char **)malloc(sizeof(char*)*N);  	for(i=0;i<N;i++) 	{	 		scanf("%s",str[i]); 	} 	sort(str); 	for(i=0;i<N;i++) 	{ 		printf("%s ",str[i]); 	} 	return 0; }

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

user: user-2
content: 第一种改法，动态分配内存。  #include <stdio.h> #include <string.h> #include <stdlib.h> #define N 10 int swap(char *p,char *q)//此函数用于交换两个字符串 {     char s[N]; 	strcpy(s,p); 	strcpy(p,q); 	strcpy(q,s); 	return 0; } void sort(char **p) { 	int i,j;     for(i=0;i<N-1;i++) 	{ 		for(j=0;j<N-i-1;j++) 		{ 			if(strcmp(p[j],p[j+1])>0)  			{ 				swap(p[j],p[j+1]); 			} 		} 	} 			 }  int main() { 	char **str; 	int i; 	str = (char **)malloc(sizeof(char*)*N);  	for(i=0;i<N;i++) 	{	 		str[i] = (char *)malloc(N); 		scanf("%s",str[i]); 	} 	sort(&str[0]); 	for(i=0;i<N;i++) 	{ 		printf("%s ",str[i]); 	} 	return 0; }

user: user-4
content: 设断点，单步跟踪吧

user: user-5
content: 你的问题是什么呢？ 是运行时崩溃 还是得不到正确的结果？
user-0 提问: 求大神帮助。。。本人菜鸟加新手。

回复:
user: user-1
content: 用Visual Studio 2013，和Windows 8.1完美兼容。  也可以使用Codeblock、DevC++。

user: user-0
content: 请问VC++是不是与WIN8系统不兼容?那我是不是还要下个虚拟机再搞..

user: user-1
content: 在VC++中新建一个Win32应用程序，选择带窗口的。一路点下去就成了。  进一步学习请google Windows编程 chm
user-0 提问: 急救！！！！希望各位大神指点！！！！

回复:
user: user-1
content: "....salary=%f",  应改为...salary=%d",

user: user-1
content: 此外，这个结构体中只定义了指针name，没有姓名的存放空间，程序不能正确运行的

user: user-1
content: scanf("%d%s",&a[i].num,&a[i].name); getchar(); scanf("%c%d%d%d%d",&a[i].sex,&a[i].year,&a[i].month,&a[i].day,&a[i].salary);

user: user-2
content: char *name; 怎么用？

user: user-3
content: #include <stdio.h> struct employee { 	int num; 	char *name; 	char sex; 	int year; 	int month; 	int day; 	int salary; }a[3];  int main(void) { 	int i; 	for(i = 0; i < 3; i++) 	{ 		printf("输入第%d名员工的信息：\n", i+1); 		scanf("%d%s", &a[i].num, &a[i].name); 		getchar();    //接收'\n' 		scanf("%c%d%d%d%d", &a[i].sex, &a[i].year, &a[i].month, &a[i].day, &a[i].salary); 	} 	for(i = 0; i < 3; i++) 	{ 		printf("num=%d, name=%s, sex=%c, year=%d, month=%d, day=%d, salary=%f", 			a[i].num, a[i].name, a[i].sex, a[i].year, a[i].month, a[i].day, a[i].salary); 		printf("\n"); 	} 	return 0; }
user-0 提问: 想用c语言并加上SDL库写个小游戏如何开始

回复:
user: user-1
content: lazyfoo的教程不错 http://www.lazyfoo.net/ 上面有SDL教程，1.2的已经完了，2.0的还在更新。英文版的，不懂英文的话会比较吃力 挺不错的，你可以去看看
user-0 提问: 生成，编译都过了，但是调试的时候出问题了，求大神指教啊

回复:
user: user-1
content: 引用 5 楼 padechwu 的回复:我错了，我也不知道什么问题，我再输了一遍奇迹般的好啦 唉，有时候编译器就是有这样的问题，建议以后再遇到类似情况，即检查不出错误，而编译器报的错也看不出来，就新建一个文档，重新输入试试

user: user-0
content: 我错了，我也不知道什么问题，我再输了一遍奇迹般的好啦

user: user-2
content: 哥们，我编译没错呀！！！

user: user-1
content: 我怎么看着没问题啊——

user: user-3
content: 引用 1 楼 user-3 的回复:int i;      struct student * high=s;      for(i = 1; i < n; i++)   {             if(s[i])->total > s->total)              high = s;      }      return high;  前提是，你计算了total。 而且，实用double值做比较。存在精确度问题。 自己解决吧。   if(s[i])->total > high->total)

user: user-3
content: int i;      struct student * high=s;      for(i = 1; i < n; i++)   {             if(s[i])->total > s->total)              high = s;      }      return high;  前提是，你计算了total。 而且，实用double值做比较。存在精确度问题。 自己解决吧。
user-0 提问: C语言的篱笆加密是什么 求代码

回复:
user: user-0
content: 引用 1 楼 zhang5476499 的回复:就是栅栏密码的意思，，，，，，，，，，，，，   我是一个男人   爱去嫖娼   你去不去  明文是：我爱你，貌似这个思想来着的，暂时忘记了。这个得好好翻书看看！ 爬到一边玩去。。。。。。我又不是水贴

user: user-1
content: 引用 1 楼 zhang5476499 的回复:就是栅栏密码的意思，，，，，，，，，，，，，   我是一个男人   爱去嫖娼   你去不去  明文是：我爱你，貌似这个思想来着的，暂时忘记了。这个得好好翻书看看！ 屌

user: user-2
content: 就是栅栏密码的意思，，，，，，，，，，，，，   我是一个男人   爱去嫖娼   你去不去  明文是：我爱你，貌似这个思想来着的，暂时忘记了。这个得好好翻书看看！
user-0 提问: 求大神帮忙看看，急啊！！！

回复:
user: user-1
content: LZ下一步操作逻辑错了，所以我觉得应该把， 把这里的for(k = 0; k < data_length; k++){ for(j = 0; j < 3; j++) { s[i] = z[j][k]; i++; }}应该是这样的

user: user-2
content: 你这代码能编译成功？太神奇了 还能进行输入输出！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！ int s[3*data_length] 第一次看到这样定义数组还能编译成功 还可以输入？  跪求楼主的强大编译器啊

user: user-1
content: 哈哈  我知道LZ的想法  所以答案是

user: user-3
content: 要代码啊。。。

user: user-4
content: 用代码格式贴出代码啊

user: user-5
content: 把代码上传、、

user: user-6
content: 正确的输出应该是什么？你的输出又是什么？ 何为“三分加密”？ 贴图方便了你自己，却失去了别人帮你调试的机会。
user-0 提问: ACM新手入门

回复:
user: user-1
content: 问你老师。。。

user: user-2
content: http://acm.nyist.net/JudgeOnline/problemset.php 你来试试看

user: user-3
content: 先去poj或者杭电oj上刷题，可以先从水体开始，逐步加强难度

user: user-4
content: 刘汝佳的白色封面书《算法竞赛入门经典》，对我还说，看这本书很难！如果你看完这本书，并且把题目都做了，那挑战黑书吧，黑书没有看过，听别人说，黑书很杀死人脑细胞！只是听说！

user: user-5
content: 去杭电OJ上step by step

user: user-6
content: 在当当上搜“ACM参考书”
user-0 提问: c89三目运算符可以简写吗？

回复:
user: user-1
content: 所谓的副作用，见5L的例子。

user: user-2
content: 引用 5 楼 mujiok2003 的回复:[quote=引用 4 楼 suseyaoyao 的回复:] [quote=引用 3 楼 ForestDB 的回复:] https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html 这样做的话，如果x有副作用，可以避免副作用。  在上述页面中up的话，是 https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions  可以看到这不是标准C语法，是gcc的扩展。  看了你发的网址，非常感谢哦。顺便再问下，x有副作用该如何理解呢[/quote]   #define INC ++x int x = 0; .... int b = INC ? : 1; //和int b = INC ?  INC: 1;后者x自增了两次， 而前者只自增一次 [/quote]  可能。

user: user-2
content: 引用 4 楼 suseyaoyao 的回复:[quote=引用 3 楼 ForestDB 的回复:] https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html 这样做的话，如果x有副作用，可以避免副作用。  在上述页面中up的话，是 https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions  可以看到这不是标准C语法，是gcc的扩展。  看了你发的网址，非常感谢哦。顺便再问下，x有副作用该如何理解呢[/quote]   #define INC ++x int x = 0; .... int b = INC ? : 1; //和int b = INC ?  INC: 1;后者x自增了两次， 而前者只自增一次

user: user-0
content: 引用 3 楼 ForestDB 的回复:https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html 这样做的话，如果x有副作用，可以避免副作用。  在上述页面中up的话，是 https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions  可以看到这不是标准C语法，是gcc的扩展。  看了你发的网址，非常感谢哦。顺便再问下，x有副作用该如何理解呢

user: user-1
content: https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html 这样做的话，如果x有副作用，可以避免副作用。  在上述页面中up的话，是 https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions  可以看到这不是标准C语法，是gcc的扩展。

user: user-3
content: a = b怎么能和a==b混为一谈呢？！

user: user-4
content: 编译器扩展  标准没这做法
user-0 提问: 求助：关于code block中如何自订资源

回复:
user: user-1
content: .rc资源文件为纯文本的，随便用个编辑器就可以了，完了用rc.exe编译一下。  引用 楼主 c_hard 的回复:一直在用该软件学习编程 目前学习windows api中的图标，光标等资源的自订 但书中所举 引用： 将资源添加到程式中需要 Visual C++ Developer Studio 的一些附加功能。 对於图示来说，可以使用「Image Editor」（也称为「Graphics Editor」）来 绘制图示的图像。该图像被储存在副档名为.ICO 的图示档案中。Developer Studio 还产生一个资源描述档（副档名为.RC 的档案，有时也称作资源定义档 案），它列出了程式的所有资源和一个让程式引用资源的表头档案 （RESOURCE.H）。   问题：在code block中如何新建.RC的资源文件？             如何自订其他资源？ 注：本人濒临崩溃，求指教，或相关详细教程；谢谢，谢谢

user: user-2
content: MSDN上面有RC.exe 以及RC文件的编译使用了
user-0 提问: 调试发现错误，但不知为什么错

回复:
user: user-1
content: 问题解决了？

user: user-2
content: 3楼正解。。。。。

user: user-3
content: 来学习，顺便接分，既然找到错误了，那么恭喜楼主又更上一层楼啦~

user: user-0
content: 找到问题了，就是第27行的那个qsort调用，它的第一个参数应该是个数组名，而非指向数组的指针。 改成：qsort(students, SIZE, sizeof(INFO), comp);就好了。另外，还要去掉56、57两行，它们没有实际作用。

user: user-0
content: 引用 1 楼 u012421456 的回复:C-Free，VS2005调试没错误啊！感觉写的有些费解，可以参考一下这个——http://blog.csdn.net/u012421456/article/details/26170519 编译没有报错，运行时就会出错。例如，我按照程序提示一个接一个输入了三组数据（姓名、分数）后，那个第47行的while循环并没有跳出，而是继续提示输入姓名，但无论是继续输入姓名按回车，还是直接按回车，程序都会崩溃。

user: user-4
content: C-Free，VS2005调试没错误啊！感觉写的有些费解，可以参考一下这个——http://blog.csdn.net/u012421456/article/details/26170519
user-0 提问: 结构体指针做函数参数

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

user: user-2
content: 你的addPos函数生成的链表是个反向增长的链表，而且表头的指针你也没能更新 main函数里的pospatrn仍然指向一开始分配的内存，这块内存未赋值 你可以把“ppos->next=pospatrn”这句换成“pospatrn->next=ppos；ppos->next=NULL” 这样链表是正向增长，表头的指针也不需要更新

user: user-3
content: pospatrn=ppos; 这句只在函数内部起作用。指针也是一个变量，也是按值传递。 而且你里外都malloc, 这是干嘛？

user: user-0
content: 大虾快来帮帮忙啊

user: user-4
content: 共同学习！

user: user-0
content: 谢谢各位，结合各位的答案看了些资料后发现对指针参数的理解错误了，正如3楼说的，指针也是一个变量，传到函数中去的是这个地址（实参）的一个副本，可以通过修改该地址指向的内存地址的值来实现修改实参指向的值，但企图通过修改形参中地址来修改实参中的地址仍是徒劳。只能修改形参指向的内存中的值。 谢谢各位不吝赐教～
user-0 提问: 获取linux系统下网络接口名称

回复:
user: user-1
content: 获取指定接口IP  #include <stdio.h>   #include <stdlib.h>   #include <stdint.h>   #include <string.h>   #include <unistd.h>   #include <arpa/inet.h>   #include <sys/ioctl.h>   #include <sys/socket.h>   #include <net/if.h>      #define NIPQUAD(addr) \       ((unsigned char *)&addr)[0], \       ((unsigned char *)&addr)[1], \       ((unsigned char *)&addr)[2], \       ((unsigned char *)&addr)[3]   #define NIPQUAD_FMT "%u.%u.%u.%u"      uint32_t obtain_ip(const char *dev)   {       int fd = -1;       struct ifreq ifr;       struct sockaddr_in *addr;          strncpy(ifr.ifr_name, dev, IFNAMSIZ);          fd = socket(AF_INET, SOCK_DGRAM, 0);       if (fd < 0)       {           perror("socket()");           return 0;       }          if (ioctl(fd, SIOCGIFADDR, &ifr))       {           perror("ioctl()");           close(fd);           return 0;       }          close(fd);          addr = (struct sockaddr_in *)&(ifr.ifr_addr);       return addr->sin_addr.s_addr;   }      int main(int argc, char **argv)   {       uint32_t ip = obtain_ip(argv[1]);          if (ip)           printf("ip: %u.%u.%u.%u\n", NIPQUAD(ip));       return 0;   }     或指定接口MAC  #include <stdio.h>   #include <stdlib.h>   #include <string.h>   #include <sys/ioctl.h>   #include <sys/socket.h>   #include <netinet/in.h>   #include <net/if.h>   #include <assert.h>      int obtain_mac(const char *ifname, unsigned char *mac, int len)   {       int sk = -1, ret = 0;       struct ifreq ifreq;          assert(ifname);       assert(mac);       assert(len >= 6);          sk = socket(AF_INET, SOCK_STREAM, 0);       if (sk < 0)       {           perror("socket");           ret--;           goto OUT;       }          strcpy(ifreq.ifr_name, ifname);       if (ioctl(sk, SIOCGIFHWADDR, &ifreq) < 0)       {           perror("ioctl");           ret--;           goto OUT;       }       memcpy(mac, (unsigned char *)ifreq.ifr_hwaddr.sa_data, 6);      OUT:       if (sk >= 0)           close(sk);       return ret;   }      int main(int argc, char **argv)   {       unsigned char mac[12];          if (obtain_mac(argv[1], mac, sizeof(mac)) < 0)           return -1;          printf("%02X:%02X:%02X:%02X:%02X:%02X\n",               mac[0],              mac[1],              mac[2],              mac[3],              mac[4],              mac[5]              );          return 0;   }

user: user-2
content: http://man7.org/linux/man-pages/man7/netdevice.7.html

user: user-3
content: 楼主，求共享方法！

user: user-4
content: system("ifconfig >ifconfig.txt"); //然后读文件ifconfig.txt的内容  真想不用命令，请参考ifconfig命令对应的源代码。

user: user-0
content: 亲，谢谢，已解决

user: user-0
content: 引用 1 楼 buyong 的回复:ifconfig  不用命令

user: user-5
content: ifconfig

user: user-6
content: ioctl可以获取噢。
user-0 提问: error C2109: 下标要求数组或指针类型,不知道该怎么改，求指教

回复:
user: user-0
content: 已经解决了，谢谢

user: user-1
content: 数组是int a[]或者int* a，这样改：  #include<stdio.h> void fun(int a[],int n,int *odd,int *even) { int i; *odd=0; *even=0; for (i=0;i<n;i++) { if(a[i]%2==0) *even+=a[i]; else *odd+=a[i]; } } void main() { int a[5]={1,2,3,4,5},j,o; fun (a,5,&j,&o); printf("the sum of odd is %d,tne sun of even is %d",j,o); }
user-0 提问: 新手

回复:
user: user-1
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm

user: user-2
content: 我也推荐郝斌视频！！！！！！！

user: user-3
content: 你这问题问的

user: user-0
content: i为什么等于1         longs=0,t=0;      能不能详细解释一下我完全不懂

user: user-0

user: user-0
content: Sn=a+aa+aaa+------+aaaaaaa(n  个  a),  其中  a  和  n  都从键盘中输入，如从键盘中输入  2,5  ，则计   算  S5=2+22+222+2222+22222

user: user-4
content: 和你学中文一样，学了语文语法写篇文章。学了语言的语法就写几个简单程序练练。

user: user-5
content: 多看书，对照书上的例子，再多敲代码

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

user: user-6
content: 看百遍，写千遍，奇迹自现！

user: user-7

user: user-8
content: 我真的不知道哎

user: user-9
content: http://bbs.csdn.net/topics/390623576

user: user-0
content: 一直看视频，也不是办法啊！有新手的练习题目吗?

user: user-0
content: 有没有什么题目可以练习的，本人是新手

user: user-10
content: 引用 10 楼 aaa53526561 的回复:引用 为什么Z=X,Z=Y；这个事什么意思，，求解释详细点  这个程序就是最后返回值z到主函数   if(x>y) z=x;  就是当x大于y时  输出的z就是较大的数x else z=y;  否则当x<y 那么z就是较大的数y 总之这个简单判断就是输出z 绝对是较大的那个数值  其实这个没比较这么复杂，一个函数体就可以做的 #include <stdio.h> void main () {      int a,b,c;      printf("\nEnter two Numbers:");      scanf("%d,%d",&a,&b);        if(a>b) c=a;      else c=b;        printf("Maximum:%d\n",c); }

user: user-0
content: 什么意思啊？？？？？？

user: user-11
content: 你在说话的时候有想过语法么？

user: user-0
content: 有没有新手的练习题目，本人想做一做，请指导一下。

user: user-12
content: http://bbs.itcast.cn/forum-134-1.html?140520dsscsdn
user-0 提问: c语言操作BMP文件

回复:
user: user-1
content: 色彩空间压缩与变换。

user: user-2
content: 我是来学习的

user: user-3
content: 找图像处理的教程，高斯模糊？

user: user-4
content: 思路就是: RGB888 -> RGB565 这个大家都懂，涉及到BMP，关键是存储的数据格式，读写，还有一个色彩空间的转换。  从RGB -> YCBR 也是一样的道理。
user-0 提问: C语言 输入输出流问题 诡异 

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:乍看起来c++的cin、cout在输入、输出上比c的scanf、printf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout！ 使用scanf、printf。  好吧，我换个版本。。

user: user-0
content: 额，我承认，不应该C\C++混搭，不过是为了看得更清楚。。。

user: user-1
content: 乍看起来c++的cin、cout在输入、输出上比c的scanf、printf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout！ 使用scanf、printf。

user: user-0
content: 第一个getchar()获得的是'1'，第二个getchar()获得的是'2'

user: user-2
content: 应为你没有删除缓冲区，你getchar时回车结束，这个回车会被下个getchar接受

user: user-0
user-0 提问: 请问物联网开发要学习哪些东西？

回复:
user: user-1
content: 首先对C要熟悉，然后去学习Linux系统，然后去学习ARM，驱动编程等，做物联网要学的东西很多啊。

user: user-2
content: 单片机若干知识，包括8051，ARM，无线通信等一系列 。。。。。

user: user-3
content: 物联网就是嵌入式+Internet。分解来就是 linux+ARM+无线+Internet。这几块就看你对哪个感兴趣了。
user-0 提问: #define定义的名字一般在编译时被丢弃，而枚举名字则通常一直在调试器中可见，可以在调试代码是使用它们

回复:
user: user-1
content: 参考gcc或g++相关源代码。

user: user-2
content: 你还是看看c/c++的编译过程吧。#define的宏定义是在预处理阶段执行的，在预处理器里；而枚举是在编译阶段执行的
user-0 提问: 前辈们，给点建议c语言学习的方向

回复:
user: user-1
content: 不知道非职业程序员学C/C++有什么意义。甚至现在大部分程序员都不再使用这两种语言了。说难听点，你靠自学C语言找个码农的工作尚且凑合，找个程序员的工作，是不现实的。  学学PHP、Ruby或者Javascript，自己可以做点小网页小游戏。学学Basic还可以用它来代替人工处理一些事务，或者增强你用Office的效率。学学C#，你可以适应多种开发用途，用它创业很不错。学学Python，又可以当脚本，又可以做点科学运算。如果你想挑战下思维，Lisp/Scheme可以玩玩。如果你仅仅想找一份工作，学Java或者Objective-C的收获也比C/C++大得多。

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

user: user-3
content: 学习C/C++如果非计算机基础，学习起来需要付出很多，因为有很多东西理解起来需要项目经验的支撑，不是光看书就可以理解。而且你说的那几本书不全部看懂，至少要翻一遍了解基本的原理。  学完了C/C++再学其它的技术语言，会容易很多。 如果真想走这条路，就linux+c/c++ 到时候闲着有空就学习下其它语言，写几个小界面忽悠下外行。

user: user-4
content: 非计算机专业自学还是建议学JAVA。

user: user-5
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: 引用 6 楼 u011272720 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 一开始从这么底层的位置学起，作为一个初学者，如何孤独地、毫无价值输出地撑过这么长的时间？[/quote] 不是一个层次的，不能向他看齐。

user: user-6
content: 感觉现在传统意义上的c/c++ 还是做C/S服务器端的程序员多一些 其实程序员主要都是自学，科班教的真没多少，而且找工作主要还是看你的经验和能力，说白了就是你能不能干活

user: user-0
content: 引用 11 楼 zhuyuehen 的回复:同为初学者，表示直接看案例入门快一点，看书太慢 共勉

user: user-0
content: 引用 9 楼 u012421456 的回复:这样的问题，好像许多人都问过了http://www.cnblogs.com/poiu-elab/archive/2012/05/08/2490809.html http://zhidao.baidu.com/link?url=anUJ0ffAwmAq-_odKw5WIX739XuNutRcoIZKTdu2uCn_2xiLlZfUfTDL_aaXfmIIh8sdFVOdDY1xtuwfrfOiv_

user: user-0
content: 引用 8 楼 caozhy 的回复:不知道非职业程序员学C/C++有什么意义。甚至现在大部分程序员都不再使用这两种语言了。说难听点，你靠自学C语言找个码农的工作尚且凑合，找个程序员的工作，是不现实的。  学学PHP、Ruby或者Javascript，自己可以做点小网页小游戏。学学Basic还可以用它来代替人工处理一些事务，或者增强你用Office的效率。学学C#，你可以适应多种开发用途，用它创业很不错。学学Python，又可以当脚本，又可以做点科学运算。如果你想挑战下思维，Lisp/Scheme可以玩玩。如果你仅仅想找一份工作，学Java或者Objective-C的收获也比C/C++大得多。 这样我是不是永远没钱途了~还是坚持一下吧，了解多点总不是坏事。

user: user-7
content: 买本书自学啊

user: user-8
content: 同为初学者，表示直接看案例入门快一点，看书太慢

user: user-9
content: 真正学起来，计算机专业和非计算机专业无界限。没有天生的某专业，路都是自己闯出来的。关键是兴趣、恒心、方法以及实践。

user: user-10
content: 这样的问题，好像许多人都问过了http://www.cnblogs.com/poiu-elab/archive/2012/05/08/2490809.html http://zhidao.baidu.com/link?url=anUJ0ffAwmAq-_odKw5WIX739XuNutRcoIZKTdu2uCn_2xiLlZfUfTDL_aaXfmIIh8sdFVOdDY1xtuwfrfOiv_

user: user-11
content: 非计算机专业  ，java和.net搞起啊，尤其是.net，上手快

user: user-12
content: 什么？你想在实战中学习？那你去学单片机或者ARM啊都用C写的,还能写出点东西，有成就感。，当我瞎说啊。

user: user-13
content: 选一本的好的教材， 多动手，多折腾。

user: user-14
content: 引用 4 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 一开始从这么底层的位置学起，作为一个初学者，如何孤独地、毫无价值输出地撑过这么长的时间？

user: user-15
content: 买本c++ primer, 多做练习。 先会爬了，再走路。后面再仔细体会数据结构也不迟。有了兴趣才好钻研

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

回复:
user: user-1
content: char *能这样初始化吗？

user: user-2
content: 活人永远不会被尿憋死！ char *recv_Send1="\xAA\x0E\x12\x01""CAIWEI-1.7\0\x55"; char  recv_Send2[]={(char)0xAA, 0x0E, 0x12, 0x01 , 'C', 'A', 'I', 'W', 'E', 'I', '-', '1', '.', '7', '\0', 0x55}; int main() {     return 0; }

user: user-3
content: 因为第一个指针没有指向一个具体的内存空间，肯定不能初始化

user: user-4
content: 第一个只是一个指针，你没有给他分配实际的内存，现在实际只占了4个字节(未分配内存前）。 第二个是一个数组，是一个临时变量，已经在栈空间里给这个变量分配了大小。

user: user-5
content: 字符串的基本单元是字符而不是其它的，应该这样写： char *recv_Send=“\xAA\x0E\x12\x01CAIWEI-1.7\0\x55" 另外'\0'是字符串的结束符，最好不要出现在0x55的前面  引用 楼主 caiwei_cs 的回复:char *recv_Send={0xAA, 0x0E, 0x12, 0x01 , 'C', 'A', 'I', 'W', 'E', 'I', '-', '1', '.', '7', '\0', 0x55}; char recv_Send[]={0xAA, 0x0E, 0x12, 0x01 , 'C', 'A', 'I', 'W', 'E', 'I', '-', '1', '.', '7', '\0', 0x55};  为什么第一个错误，第二个可以？  第一个错误提示为： warning C4047: “初始化”:“char *”与“int”的间接级别不同 （vc2010） {}must have 1 element to initialise scalar（ads）

user: user-6
content: 32位系统中指针长度 至少要用32位来表示 ，同时int被扩展为2个字长，char的一个字节 太短了。

user: user-7
content: char *recv_Send={0xAA, 0x0E, 0x12, 0x01 , 'C', 'A', 'I', 'W', 'E', 'I', '-', '1', '.', '7', '\0', 0x55};   char*     "0xAA, 0x0E, 0x12, 0x01 , 'C', 'A', 'I', 'W', 'E', 'I', '-', '1', '.', '7', '\0', 0x55"  字符串