Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c/c++编程软件

回复:
user: user-1
content: 最好一开始就用Visual Studio 2010以上的，以后进入企业了，适应性好些。

user: user-2
content: 发过去了。。。。。

user: user-0
content: 引用11楼 哈我也是菜鸟，刚学不久，他们推荐我使用DEV C/C++ 5。也不大，给个邮箱号我给你发过去。就10M大小。 2215232001@qq.com谢谢啦

user: user-2
content: 哈我也是菜鸟，刚学不久，他们推荐我使用DEV C/C++ 5。也不大，给个邮箱号我给你发过去。就10M大小。

user: user-0
content: 引用7楼 我可以说QtCreator吗 VS对我的老爷机来说实在太沉重了 闻所未闻

user: user-3
content: c-free挺适合新手的，一些比较简单那的程序！推荐下

user: user-0
content: 引用2楼 我觉得C-Free也可以吧！ 先下个，试试

user: user-4
content: 我可以说QtCreator吗 VS对我的老爷机来说实在太沉重了

user: user-0
content: 引用5楼 Visual Studio 2013 我只会C语言，但vs2013不能用scanf，printf,感觉好不舒服，是不是我太落后了

user: user-5
content: Visual Studio 2013

user: user-6
content: code::blocks简单好用

user: user-7
content: windows上首选VS系列，linux上可以有code::blocks, eclipse CDT

user: user-8
content: 我觉得C-Free也可以吧！

user: user-9
content: DEV C++ 或者CodeBlock
user-0 提问: 任何一个自然数n的立方可以写成n个连续奇数的和

回复:
user: user-1
content: 引用 2 楼 lm_whales 的回复:第一个奇数设为a 根据等差数列求和公式有 n^3 = a*n + n*(n-1) 于是 a = n^2 - n+1; 这个式子对正整数成立 会数学真可怕。

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <math.h>  int main(){ 	int n, sum, i,x; 	printf("Please enter n大于10.\n"); 	scanf("%d", &n); 	sum = (int)pow((float)n, (float)3);//总和  	x = (int)pow((float)n, (float)2) - n + 1;//第一项  	for(i = 0; i < n; i++){ 		printf("%d\t", x + i * 2); 	} 	printf("\n");  	system("pause"); }

user: user-3
content: 第一个奇数设为a 根据等差数列求和公式有 n^3 = a*n + n*(n-1) 于是 a = n^2 - n+1; 这个式子对正整数成立

user: user-4
content: 连续奇数的和 有公式的
user-0 提问: C中函数的调用次数和处理时间

回复:
user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:7楼内容请不要无视。 而且大侠，我用的事VS，你说的是VC

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:7楼内容请不要无视。 英语不好 可不可以来点简单的中文翻译？

user: user-1
content: 7楼内容请不要无视。

user: user-0
content: 引用 9 楼 ADF1230 的回复:推荐 Luke Stackwalker    其实自己写也成： 1，利用vs或者gcc编译，并生成pdb等符号文件； 2，解析符号文件，得到 tuple<function_name,begin_line,end_line>； 3，运行目标程序，每隔x ms中断该进程，采样程序计数器位置，采样点多一点； 4，分析所有函数的执行次数，这个就代表函数总共执行时间了。 好像好难啊，大侠，我是初学，有没有比较简单的方法？就比如VS中的profiler怎么用？

user: user-2
content: 推荐 Luke Stackwalker    其实自己写也成： 1，利用vs或者gcc编译，并生成pdb等符号文件； 2，解析符号文件，得到 tuple<function_name,begin_line,end_line>； 3，运行目标程序，每隔x ms中断该进程，采样程序计数器位置，采样点多一点； 4，分析所有函数的执行次数，这个就代表函数总共执行时间了。

user: user-0
content: 引用 5 楼 mujiok2003 的回复:[quote=引用 2 楼 u013220057 的回复:] 用VS编译的，可以用吗？ VS有自己的profiler.[/quote] 怎么用啊？怎么打开VS的profiler?能不能说的详细点？

user: user-1
content: VC6   Enable Profiling Home |  Overview |  Details  Feature Only in Professional and Enterprise Editions   Profiling is supported only in Visual C++ Professional and Enterprise Editions. For more information, see Visual C++ Editions.  Before using the profiler, you must build the current project with profiling enabled (equivalent to the command line setting LINK /PROFILE). If you want to perform function profiling only in the current project, you only need to enable profiling for the linker.  If you want to do line profiling, you also need to include debugging information.  To build your project for function profiling   On the Build menu, click Settings to display the Project Settings dialog box.   Click the Link tab.   In the Category drop-down list box, click General.   Select the Enable Profiling check box.   Click OK.   On the Build menu, click Build projectname.exe.  Note   Selecting the Enable Profiling check box turns off incremental linking. To re-enable incremental linking, clear the Enable Profiling option.  To build your project for line profiling   Perform the procedure to enable function profiling described earlier in this topic.   Select the Generate Debug Info check box.   Click the C/C++ tab.   In the Category drop-down list box, click General.   In the Debug Info drop-down list box, click Program Database or Line Numbers Only.   Click OK.   On the Build menu, click Build projectname.exe.  When the build is complete, the project is ready to be profiled.

user: user-3
content: 可以在函数总定义一个static int count = 0；由于是静态变量，因此只会在第一次调用时初始化，而后在函数末尾对count++；即可实现计数。

user: user-4
content: 引用 2 楼 u013220057 的回复:用VS编译的，可以用吗？ VS有自己的profiler.

user: user-5
content: 函数调用次数很简单，设置一个全局变量Count = 0，在要计算次数的函数后面加一句 Count++; 最后输出Count就搞定了。 运行时间的话可以利用clock()函数（百度一下用法吧）。在要计算时间的函数前后分别clock一次，做差就得到函数调用消耗的时间了。

user: user-6
content: windows自带的GetTickCount

user: user-0
content: 用VS编译的，可以用吗？

user: user-7
content: 你在windows上用的什么编译器，如果用gcc，应该可以使用。
user-0 提问: 关于fread和fwrite读取有管理员权限的exe问题

回复:
user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。 果然是大神啊，太厉害了，这个方法管用！！！

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: 引用 8 楼 xy505188 的回复:[quote=引用 5 楼 mujiok2003 的回复:] 引用CopyFile复制的文件可以正常打开的，代码只是凑合着用 会多拷贝一个字节，这是个bug while(!feof(in)) { char c3; fread(&c3,1,1,in); fwrite(&c3,1,1,o); }如果系统加的1个字节不知道的话，即使获取了文件的长度，整长度复制后，系统还是会在后面加1个字节；或者按文件长度-1复制，系统自己加上一个未知的字节，那文件复制多次后不是整个文件都变了？[/quote] 你看看你的文件大小就知道了。

user: user-2
content: 引用 7 楼 xy505188 的回复:[quote=引用 5 楼 mujiok2003 的回复:] 引用CopyFile复制的文件可以正常打开的，代码只是凑合着用 会多拷贝一个字节，这是个bug while(!feof(in)) { char c3; fread(&c3,1,1,in); fwrite(&c3,1,1,o); }不懂，是读写完毕后，执行fclose前，系统会在后面加一个字节吗？[/quote] 读到最后一个字节后， feof（in)还是false,所以继续循环， 执行fread， fread失败， c3的值应该没有改变，此后就不该再执行fwrite了。

user: user-0
content: 引用 5 楼 mujiok2003 的回复:引用CopyFile复制的文件可以正常打开的，代码只是凑合着用 会多拷贝一个字节，这是个bug while(!feof(in)) { char c3; fread(&c3,1,1,in); fwrite(&c3,1,1,o); }如果系统加的1个字节不知道的话，即使获取了文件的长度，整长度复制后，系统还是会在后面加1个字节；或者按文件长度-1复制，系统自己加上一个未知的字节，那文件复制多次后不是整个文件都变了？

user: user-0
content: 引用 5 楼 mujiok2003 的回复:引用CopyFile复制的文件可以正常打开的，代码只是凑合着用 会多拷贝一个字节，这是个bug while(!feof(in)) { char c3; fread(&c3,1,1,in); fwrite(&c3,1,1,o); }不懂，是读写完毕后，执行fclose前，系统会在后面加一个字节吗？

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:关闭杀毒软件。把杀软全关了，复制后的文件和原来的文件大小一模一样，但是一打开就出现：XXX is not a valid value，等错误，我把这个文件上传到网盘里了，是个教学视频，大神可以测试一下，我的电脑是WIN7 64位，复制后不行，但是若用CopyFile这个API，完全可以正常打开，不会报错。不知道怎么回事 链接如下：http://pan.baidu.com/s/1bny6UHx

user: user-2
content: 引用CopyFile复制的文件可以正常打开的，代码只是凑合着用 会多拷贝一个字节，这是个bug while(!feof(in)) { char c3; fread(&c3,1,1,in); fwrite(&c3,1,1,o); }

user: user-0
content: 引用 3 楼 buyong 的回复:in=fopen(c1,"rb"); 没判断返回值吧。 而且这样也太低效，你不会先吧输入文件长度求出，然后一起读取和复制呀  还不如调用系统命令copyCopyFile复制的文件可以正常打开的，代码只是凑合着用，没想到先去求文件长度，反正最后效果也一样，简单一点，出错了也好查

user: user-3
content: in=fopen(c1,"rb"); 没判断返回值吧。 而且这样也太低效，你不会先吧输入文件长度求出，然后一起读取和复制呀  还不如调用系统命令copy

user: user-4
content: 程序运行需要管理员权限，复制可以不用管理员权限吧？

user: user-1
content: 关闭杀毒软件。
user-0 提问: 请大家帮帮忙！

回复:
user: user-1
content: #include <stdio.h> #include <string.h>  #define MAX_LENGTH 100 #define MATRIX_NUM 100  using namespace std;  // remove trailing blanks, tabs, newlines int trim(char s[]) {     int n;     for (n = strlen(s)-1; n >= 0; n--)         if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')             break;     s[n+1] = '\0';     return n; }  // read a line from file, return length int getline(char *line, int maxline, FILE *fp) {     if (NULL == fgets(line, maxline, fp))         return -1;     else     {         trim(line);         return strlen(line);     } }  int main() {     FILE *fp;     char line[MAX_LENGTH];      fp = fopen("input.txt", "r");     if (NULL == fp)     {         printf("Can not open file input.txt!\n");         return 1;     }      int length = 0;     int countLine = 0;     int data[MATRIX_NUM][2][4];     while (-1 != (length = getline(line, MAX_LENGTH, fp)))     {         // skip space line         if (0 == length)             continue;         if (4 != sscanf(line, "%d %d %d %d",                          &data[countLine/2][countLine%2][0],                          &data[countLine/2][countLine%2][1],                          &data[countLine/2][countLine%2][2],                          &data[countLine/2][countLine%2][3]))         {             printf("Invalid line: %s\n", line);             return 1;         }         countLine++;     }     fclose(fp);      // check if data not match     if (1 == countLine%2)     {         printf("Incomplete data!\n");         return 1;     }      // using data to compute     // here only print to screen     for (int i=0; i<countLine/2; i++)     {         for (int j=0; j<2; j++)         {             for (int k=0; k<4; k++)             {                 printf("%d ", data[i][j][k]);             }             printf("\n");         }         printf("\n");     }      return 0; }    供参考。 思路：一行一行的读，每两行存成一个matrix，把好多个matrix存在三维数组里。

user: user-0
content: 因为不会添加附件，所有复制部分数据，希望会的大神们，帮我写段代码，或者怎么写，提供一下思路，谢谢了！ -1-1-1-1 -1-1-1-1  -1-1-1-1 -1-1-11  -1-1-1-1 -1-11-1  -1-1-1-1 -1-111  -1-1-1-1 -11-1-1  -1-1-1-1 -11-11  -1-1-1-1 -111-1  -1-1-1-1 -1111  -1-1-1-1 1-1-1-1  -1-1-1-1 1-1-11  -1-1-1-1 1-11-1  -1-1-1-1 1-111  -1-1-1-1 11-1-1  -1-1-1-1 11-11  -1-1-1-1 111-1  -1-1-1-1 1111  -1-1-11 -1-1-1-1  -1-1-11 -1-1-11
user-0 提问: SOCKET编程HTTP请求头问题

回复:
user: user-1
content: 你用浏览器上网，抓个包它有什么头就带什么。

user: user-0
content: http://bbs.csdn.net/topics/390779665这个！

user: user-0
content: 引用 6 楼 TBWood 的回复:[quote=引用 5 楼 beiye90 的回复:] [quote=引用 4 楼 TBWood 的回复:] 做爬虫吗，我现在也在做，先下载个firefox吧  网易的请求头信息为： Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding	gzip, deflate Accept-Language	zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection	keep-alive Host	www.163.com User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0多谢！但是为啥别的网站发送个GET 和HOST 就行了啊   网易比较特殊，还有就是微博那种网站怎么获取源码！[/quote]  看服务器端有没有对这些头进行处理啊，这种防火墙方式很弱的，所以一般网站都不用了，反正爬也没有啥影响。 只要知道URL，什么都能爬。[/quote]哦，在帮我看下这篇帖子被！bbs.csdn.net/topics/390779665?page=1#post-397338683

user: user-2
content: 做爬虫吗，我现在也在做，先下载个firefox吧  网易的请求头信息为： Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding	gzip, deflate Accept-Language	zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection	keep-alive Host	www.163.com User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0

user: user-2
content: 引用 5 楼 beiye90 的回复:[quote=引用 4 楼 TBWood 的回复:] 做爬虫吗，我现在也在做，先下载个firefox吧  网易的请求头信息为： Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding	gzip, deflate Accept-Language	zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection	keep-alive Host	www.163.com User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0多谢！但是为啥别的网站发送个GET 和HOST 就行了啊   网易比较特殊，还有就是微博那种网站怎么获取源码！[/quote]  看服务器端有没有对这些头进行处理啊，这种防火墙方式很弱的，所以一般网站都不用了，反正爬也没有啥影响。 只要知道URL，什么都能爬。

user: user-0
content: 引用 4 楼 TBWood 的回复:做爬虫吗，我现在也在做，先下载个firefox吧  网易的请求头信息为： Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding	gzip, deflate Accept-Language	zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection	keep-alive Host	www.163.com User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0多谢！但是为啥别的网站发送个GET 和HOST 就行了啊   网易比较特殊，还有就是微博那种网站怎么获取源码！

user: user-3
content: 引用 2 楼 beiye90 的回复:引用 1 楼 my3439955 的回复:这是典型的302状态码，意思是说你要请求的网页已经转移到新网页了。恩知道   但是它 给的转向的页面是错误页面！ 加user-agent试试

user: user-0
content: 引用 1 楼 my3439955 的回复:这是典型的302状态码，意思是说你要请求的网页已经转移到新网页了。恩知道   但是它 给的转向的页面是错误页面！

user: user-4
content: 这是典型的302状态码，意思是说你要请求的网页已经转移到新网页了。
user-0 提问: 被运算搞晕了，求解释，谢谢

回复:
user: user-1
content: 引用 2 楼 zilaishuichina 的回复:这种++--的问题 ， 除了显摆 ， 我想不出有啥实际意义 ，   至少我做网络游戏开发的，我在工作中重来不会写，我的同事也不会写类似这样的代码 ，  我除了在写for循环的时候，可能会写一个i++之外，我连++运算符都很少用到， 我也宁愿写count = count - 1 来表示自减一而不写count -- 其汇编代码压根就是一样的  	count = count - 1; 000000013F14A5A4  mov         eax,dword ptr [count]   000000013F14A5A8  dec         eax   000000013F14A5AA  mov         dword ptr [count],eax    	count--; 000000013F14A5AE  mov         eax,dword ptr [count]   000000013F14A5B2  dec         eax   000000013F14A5B4  mov         dword ptr [count],eax 因哽废食? 我想不出 写一个 count-- 能有什么弊端?

user: user-2
content: 这种++--的问题 ， 除了显摆 ， 我想不出有啥实际意义 ，   至少我做网络游戏开发的，我在工作中重来不会写，我的同事也不会写类似这样的代码 ，  我除了在写for循环的时候，可能会写一个i++之外，我连++运算符都很少用到， 我也宁愿写count = count - 1 来表示自减一而不写count -- 其汇编代码压根就是一样的  	count = count - 1; 000000013F14A5A4  mov         eax,dword ptr [count]   000000013F14A5A8  dec         eax   000000013F14A5AA  mov         dword ptr [count],eax    	count--; 000000013F14A5AE  mov         eax,dword ptr [count]   000000013F14A5B2  dec         eax   000000013F14A5B4  mov         dword ptr [count],eax

user: user-3
content: 又见谭氏炮灰！ http://bbs.csdn.net/topics/370153775
user-0 提问: uip协议栈的疑问

回复:
user: user-1
content: 前年我也搞，搞不定，之后换工作就没搞了

user: user-2
content: 根据端口号加以区别

user: user-3
content: LZ并没有理解什么叫“重复”定义。

user: user-4
content: 我最近也在搞uIP，基础不好，很费力，希望交个朋友一起研究一下。对于你遇到的问题，我来尝试回答一下，希望对你能有点帮助。 uIP中面向应用层的只有一个接口函数UIP_APPCALL ，也就是说所有的应用都要通过宏定义#define UIP_APPCALL   xxx_appcall之后才能被调用； 当一个应用，比如dhcpc_APPCALL需要使用时，会用#ifndef  UIP_APPCALL   #define  UIP_APPCALL  dhcpc_APPCALL将dhcpc_APPCALL定义为UIP_APPCALL，使用完之后，会用#undef取消宏定义。  以上是我的拙见，真的不一定准确，仅供你参考。希望可以一起学习，一起探讨。（QQ905417671）

user: user-0
content: 同学帮忙啊！ 不要沉下去！
user-0 提问: windows文本文件如何查看到\r\n?

回复:
user: user-1
content: 引用 3 楼 incident_a 的回复:[quote=引用 1 楼 turingo 的回复:] 直接用二进制方式查看文件，查看出现0x0d 0x0a的地方。 你这是我说的第二种方法，那我第一种方法哪里错了？   引用 2 楼 zhao4zhong1 的回复:#include <stdio.h> #include <string.h> #include <conio.h> FILE *fi,*fo; unsigned int n; int c; //------------------------------------------------------- void main(int argc,char *argv[]) {     if (argc<3) {         cprintf("Bin2Hex srcfile desfile");         return;     }     if ((fi=fopen(argv[1],"rb"))==NULL) {         cprintf("Can not find file %s",argv[1]);         return;     }     if ((fo=fopen(argv[2],"w"))==NULL) {         fclose(fi);         cprintf("Can not create file %s",argv[2]);         return;     }     n=0;     while (1) {         c=fgetc(fi);         if (EOF==c) break;         n++;         if (1==n)        fprintf(fo,  "0x%02X",c);         else {             if (1==n%16) fprintf(fo,"\n0x%02X",c);             else         fprintf(fo, ",0x%02X",c);         }     }     fcloseall();     cprintf("OK to Bin2Hex %u bytes.",n); }  你这程序看起来是二进制转16进制，完全不符合题意啊[/quote] 刚好能看间'\r' 'n',(0x0d, 0x0a)

user: user-1
content: 试试: //putchar(c); printf("%hhx", c)

user: user-0
content: 引用 1 楼 turingo 的回复:直接用二进制方式查看文件，查看出现0x0d 0x0a的地方。 你这是我说的第二种方法，那我第一种方法哪里错了？   引用 2 楼 zhao4zhong1 的回复:#include <stdio.h> #include <string.h> #include <conio.h> FILE *fi,*fo; unsigned int n; int c; //------------------------------------------------------- void main(int argc,char *argv[]) {     if (argc<3) {         cprintf("Bin2Hex srcfile desfile");         return;     }     if ((fi=fopen(argv[1],"rb"))==NULL) {         cprintf("Can not find file %s",argv[1]);         return;     }     if ((fo=fopen(argv[2],"w"))==NULL) {         fclose(fi);         cprintf("Can not create file %s",argv[2]);         return;     }     n=0;     while (1) {         c=fgetc(fi);         if (EOF==c) break;         n++;         if (1==n)        fprintf(fo,  "0x%02X",c);         else {             if (1==n%16) fprintf(fo,"\n0x%02X",c);             else         fprintf(fo, ",0x%02X",c);         }     }     fcloseall();     cprintf("OK to Bin2Hex %u bytes.",n); }  你这程序看起来是二进制转16进制，完全不符合题意啊

user: user-2
content: #include <stdio.h> #include <string.h> #include <conio.h> FILE *fi,*fo; unsigned int n; int c; //------------------------------------------------------- void main(int argc,char *argv[]) {     if (argc<3) {         cprintf("Bin2Hex srcfile desfile");         return;     }     if ((fi=fopen(argv[1],"rb"))==NULL) {         cprintf("Can not find file %s",argv[1]);         return;     }     if ((fo=fopen(argv[2],"w"))==NULL) {         fclose(fi);         cprintf("Can not create file %s",argv[2]);         return;     }     n=0;     while (1) {         c=fgetc(fi);         if (EOF==c) break;         n++;         if (1==n)        fprintf(fo,  "0x%02X",c);         else {             if (1==n%16) fprintf(fo,"\n0x%02X",c);             else         fprintf(fo, ",0x%02X",c);         }     }     fcloseall();     cprintf("OK to Bin2Hex %u bytes.",n); }

user: user-3
content: 直接用二进制方式查看文件，查看出现0x0d 0x0a的地方。
user-0 提问: VC数组越界存储 无溢出 无报错 求解释

回复:
user: user-1
content: 运气好就是这么好。

user: user-2
content: 引用 6 楼 sa0015411 的回复:那这么一来 按@sd530842780的思路我都不知道数组的结束为止了呢？  数组类型的大小由计算机控制，可以用sizeof来获取。 而动态创建的数组，确实无法知道size，正是因为不知道数组什么时候结束。  内存只要没有被其他程序占用，本程序就有访问权限。 类似的写法还有：  int a=1000;    *((int*)&a+2000)=123;    printf("%d", *((int*)&a+2000));  这种写法不会报错，但是很不安全，放到别人电脑上可能就会报错。

user: user-0
content: 那这么一来 按@sd530842780的思路我都不知道数组的结束为止了呢？

user: user-3
content: 引用 4 楼 sa0015411 的回复:只定义两个结构体变量 可以输入循环次数的次数  按理说输入时候就会溢出 为何还是可以继续去输入 因为你占用的地方还没有被使用，没有发现你溢出

user: user-0
content: 只定义两个结构体变量 可以输入循环次数的次数  按理说输入时候就会溢出 为何还是可以继续去输入

user: user-4
content: 违法不一定立刻被抓，但是迟早是要被抓的。

user: user-5
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-6
content: 看看最后一行输出， “Press Any Key to continue”; 当你按下任意键的时候，程序必然崩溃。  之所以，在此之前没有崩溃，那是因为，你因为越界破坏的栈返回EIP等信息还没有应用。
user-0 提问: 求大神帮帮忙，C课程设计，运行时内存有问题，新手求指导，谢谢

回复:
user: user-1
content: 果断自己调试，问题贴出来

user: user-2
content: 自己先调试一下，看在哪个位置崩溃了，你这代码贴的太不规范了，懒得一行一行去看。

user: user-0
content: 谢谢你们，问题已解决了，谢谢！！1

user: user-0
content: 求大神们帮帮忙，有点急！！！！！

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
user-0 提问: ShellExecute路径带空格怎么改？

回复:
user: user-1
content: ShellExecute(NULL,"open","\"C:\\Documents and Settings\\administrator\\a.exe\"",NULL,NULL,SW_HIDE);

user: user-0
content: 引用 3 楼 jiangsheng 的回复:有空格的路径加引号  能针对这句代码改下么，貌似已经加了引号了 ShellExecute(NULL,"open","C:\\Documents and Settings\\administrator\\a.exe",NULL,NULL,SW_HIDE);

user: user-2
content: 有空格的路径加引号

user: user-0
content: 引用 1 楼 wzh_xwjh 的回复:我的程序里面这样写是没有问题的，可以运行，如果你的运行不了，可以在空格前面加转义字符“\”试试。还有啊，最后一个参数你用SW_HIDE，不显示界面的，在任务管理器里面看看有这个进程没有  我尝试过，路径不带空格就正常，带空格就运行不了，网上查貌似也是说不能带空格？

user: user-3
content: 我的程序里面这样写是没有问题的，可以运行，如果你的运行不了，可以在空格前面加转义字符“\”试试。还有啊，最后一个参数你用SW_HIDE，不显示界面的，在任务管理器里面看看有这个进程没有
user-0 提问: c的windows_api中的wm_char消息的问题

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

user: user-0
content: bool AddNode(NODELIST *pHead)//添加节点 {         NODELIST    pTemp,pTempList;          if(!(pTemp = (NODELIST)malloc(sizeof(NODE))))             return FALSE;         else if(*pHead == NULL)//空链表         {             pTemp->pNext = NULL;             *pHead = pTemp;             return TRUE;         }         else//非空         {             pTempList = *pHead;             while(pTempList->pNext)                 pTempList = pTempList->pNext;             pTemp->pNext = NULL;             pTempList->pNext = pTemp;             return TRUE;         } } void FreeNodeList(NODELIST *pHead)//释放链表 {     NODELIST    pTemp;      while(*pHead)     {         pTemp = *pHead;         *pHead = (*pHead)->pNext;         free(pTemp);     } } void DeleteNode(NODELIST *pHead,NODELIST pNode)//删除节点 {     NODELIST    pTemp;      pTemp = *pHead;     if(pNode == NULL || pTemp == NULL)         return;     else if(pTemp != pNode)//将要删除的节点不是第一个节点     {         while((pTemp->pNext != pNode)&&(pTemp->pNext != NULL))         {             pTemp = pTemp->pNext;         }         pTemp->pNext = pNode->pNext;         free(pNode);         return;     }     else     {         *pHead = pNode->pNext;         free(pNode);     } } NODELIST ScanListCh(NODELIST *pHead,char ch)//遍历链表查找字符 {     NODELIST    pTemp;      if((pTemp = *pHead)== NULL)         return NULL;     while((pTemp->ch != ch) && pTemp)     {         pTemp = pTemp->pNext;     }     return pTemp; } void UpdateList(NODELIST *ppHead,int ixLimit,int iyLimit,int iLevel)//更新节点数据 {     NODELIST    pTemp,pTempNext;     int         i;      pTemp = *ppHead;     while(pTemp != NULL)     {         if((pTemp->cCoord.y += 1) >= iyLimit)//如果节点超出工作界面的底部，删除该节点         {             pTempNext = pTemp->pNext;             DeleteNode(ppHead,pTemp);             pTemp = pTempNext;         }         else             pTemp = pTemp->pNext;     }      for(i = 0 ; i <= iLevel ; i ++) //根据游戏级别添加新节点，并为节点成员赋值     {         AddNode(ppHead);         pTemp = *ppHead;         while(pTemp->pNext)             pTemp = pTemp->pNext;         pTemp->cCoord.y = 0;         pTemp->cCoord.x = rand() % ixLimit - 1;         pTemp->ch = rand() % 126;         pTemp->ch = pTemp->ch >= 33 ? pTemp->ch : pTemp->ch + 33;     } } void OutputNodeData(HDC hdc,NODELIST NodeData,COLORREF TextColor)//指定颜色指定位置输出字符 {     char        szBuffer[8];      if(!NodeData)//如果链表为空则返回         return;     SetTextColor(hdc,TextColor);     TextOut(hdc,NodeData->cCoord.x,NodeData->cCoord.y,szBuffer,wsprintf(szBuffer,"%c",NodeData->ch)); }
user-0 提问: 【求助（伸手）】编写一个小型发送和接收文本消息的程序

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

user: user-2
content: 自己去看看socket吧，这个简单功能还是很快能实现的

user: user-1
content: 引用 3 楼 sunnyshot 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545小白表示不懂。。。[/quote] 经典的TCP粘包问题大讨论！

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545小白表示不懂。。。
user-0 提问: 新手问几个问题

回复:
user: user-1
content: 引用 4 楼 whxsdqduowan 的回复:[quote=引用 1 楼 user-4 的回复:] 1 &&就是先算左边的，如果为真，再算右边。如果为假，就不算右边了。 2 n--返回n 3 windows推荐vs, linux个人推荐codeblocks 1 那为什么不是结合性而是执行顺序呢？ 2 n--不是将n的值减少1 再赋值给n吗？ 3 vs是？这类软件好像还必须买正版是吗？ [/quote] 再提一点，结合性说的是几个优先级相同的运算符如何运算的问题。。。而不是说一个运算符先算哪边的问题。。。

user: user-1
content: 引用 4 楼 whxsdqduowan 的回复:[quote=引用 1 楼 user-4 的回复:] 1 &&就是先算左边的，如果为真，再算右边。如果为假，就不算右边了。 2 n--返回n 3 windows推荐vs, linux个人推荐codeblocks 1 那为什么不是结合性而是执行顺序呢？ 2 n--不是将n的值减少1 再赋值给n吗？ 3 vs是？这类软件好像还必须买正版是吗？ [/quote] 1.短路求值的问题，这样优化效率高点。 2.n--这种后缀表达式，返回的是一个临时对象，大概相当于先用一个临时变量x保存n的值，然后再n=n-1，最后返回x。 3.codeblocks也有windows下的，免费的

user: user-0
content: 引用 1 楼 user-4 的回复:1 &&就是先算左边的，如果为真，再算右边。如果为假，就不算右边了。 2 n--返回n 3 windows推荐vs, linux个人推荐codeblocks 1 那为什么不是结合性而是执行顺序呢？ 2 n--不是将n的值减少1 再赋值给n吗？ 3 vs是？这类软件好像还必须买正版是吗？

user: user-2
content: 每天回帖即可获得10分可用分！小技巧：教您如何更快获得可用分

user: user-3
content: 第3个问题，请参照： http://bbs.csdn.net/topics/390772094

user: user-4
content: 1 &&就是先算左边的，如果为真，再算右边。如果为假，就不算右边了。 2 n--返回n 3 windows推荐vs, linux个人推荐codeblocks
user-0 提问: 为什么前428个数据是对的，后面都错了？？？？求高人

回复:
user: user-0

user: user-0
content: 大仙们，帮帮忙吧，空行多点，就一个子函数呀http://my.csdn.net/my/album/detail/1763485

user: user-0
content: http://my.csdn.net/my/album/detail/1763485

user: user-1
content: 太长了  看不了

user: user-0
content: 这是为什么呢，如果用unsigned long sum=0;   //已经读取数据的总byte个数      ，每次都重新设置文件位置指针的位置 ，即fseek（fp，sum,SEEK_SET）；这个错误可以跳过，但到九百多还会出现一个新错误，为什么呢

user: user-0
content: 错误是找到了，在读第428条数据时，linkid本来是4byte，计算机却读了3byte

user: user-0
content: 在次感谢，，这次对了。大仙，推荐几本c语言书看看好不，我看了《c与指针》，《c专家编程》，谢谢

user: user-0
content: 谢谢，我试一试

user: user-2
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-3
content: 智能单独输入第429个，然后调试

user: user-4
content: 估计第428和429之间多了一个空格什么的。

user: user-5
content: 打断点调试一下吧。

user: user-6
content: 太长而不能卒看。
user-0 提问: c语言学习方法

回复:
user: user-1
content: TC软件，书的话c primer  plus

user: user-2
content: codeblocks  或者gcc

user: user-3
content: 初学用cfree 就够了

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

user: user-5
content: 如果是学C语言，我推荐你学 C程序设计语言---C语言之父写的书，还有C语言现代方法 软件的话，初学者用 c-free就可以了，不过需要破解

user: user-6
content: 每天回帖即可获得10分可用分！小技巧：教您如何更快获得可用分

user: user-7
content: 引用 楼主 guao535602270 的回复:想学c语言 什么练习软件比较好？  windows用vs

user: user-7
content: 引用 1 楼 user-10 的回复:推荐VC2010，因为学完c的话，基本都会学习C++的  这水平，凭什么学C就要学C++?  当不了版主

user: user-8
content: 文不对题，标题问的是方法，帖子里面却问软件。

user: user-9
content: CodeBlocks，小巧方便功能强大。

user: user-10
content: 推荐VC2010，因为学完c的话，基本都会学习C++的
user-0 提问: libcurl崩溃的问题

回复:
user: user-1
content: 这个和服务器没有任何关系，WRITEFUNCTION与WRITEDATA是配合使用的，没有要求WRITEDATA必须提供。 WRITEDATA设置的值会在你定义的WRITEFUNCTION中传入，也就是你下面函数的user_p，如果你没有设置WRITEDATA，而你又在WRITEFUNCTION中使用了最后一个传入参数，则会崩溃。第一个参数buffer才是curl提供给你的接受数据缓冲区。 size_t process_data(void* buffer, size_t size, size_t nmemb, void* user_p) {     size_t mysize = 0;       if(bufferSize < nmemb)         mysize = bufferSize;     else         mysize = nmemb;     memcpy_s((char*)user_p, bufferSize, (char*)buffer,mysize);       //*((char*)user_p + mysize) = '\0';     return size*nmemb; }

user: user-0
content: 引用 2 楼 neustar1 的回复://curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet); 要设置的，和CURLOPT_WRITEFUNCTION配合的，做为接收缓冲区  再次请教一个http的话题，如果http服务器不支持post， 而我去post，  是否libcurl会有问题？  我试过，好像有问题，因为我没有那么多服务器实验，所以没法肯定这个原因。

user: user-0
content: 引用 2 楼 neustar1 的回复://curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet); 要设置的，和CURLOPT_WRITEFUNCTION配合的，做为接收缓冲区  你好，我知道，可以说网上的大部分例子，还有官网，也提到过要配合使用。  但是并没有强调必须要这样， 我见过一个例子，就没有使用writedata这个选项，  也就是说，在写的回调函数里，并没有写到自己的缓冲区里，为什么呢？  1. 码农不知道这次会收到多少数据，  2. 码农不需要把数据放到自己的缓冲区里。  只要对数据简单判断即可。    我谷歌了很久，一直搞不懂为什么，我怀疑，是不是url因为是baidu.com ，下载的数据过大，导致崩溃。 而我上面提到的那个例子，是搞http的，  数据量恰好很小，所以没有崩溃。

user: user-2
content: Windows: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  Linux: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-1
content: //curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet); 要设置的，和CURLOPT_WRITEFUNCTION配合的，做为接收缓冲区

user: user-0
content: 顶起来，有人会不？
user-0 提问: 《数据结构C语言描述》与《数据结构C语言实现》

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:[quote=引用 3 楼 sdlichen 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 不知道。 推荐《算法精解（C语言实现）》这本书适合什么水平看？[/quote] 边学算法、数据结构边编译链接调试书中的例子代码。[/quote]哦哦 谢谢

user: user-1
content: 引用 3 楼 sdlichen 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 不知道。 推荐《算法精解（C语言实现）》这本书适合什么水平看？[/quote] 边学算法、数据结构边编译链接调试书中的例子代码。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:不知道。 推荐《算法精解（C语言实现）》这本书适合什么水平看？

user: user-1
content: 不知道。 推荐《算法精解（C语言实现）》

user: user-0
content: 怎么没人啊啊
user-0 提问: 将磁盘f1.txt和f2.txt中的字符按照从小到大顺序输出到f3.txt中

回复:
user: user-0
content: 感谢2楼，谢谢了~~

user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h>   int main() {     char ch,a[10000],b[10000];        int l=0,i=0,j=0;        char temp;     FILE *fp1,*fp2,*fp3;     fp1=fopen("fl1.txt","r");     fp2=fopen("fl2.txt","a+");      //用a+而不是a来以可读写方式打开，而不是以只写模式打开，下同     fp3=fopen("fl3.txt","w+");   //同上     if(fp1==NULL||fp2==NULL||fp3==NULL)     {         printf("error!1\n");         exit(0);     }     else{         fgets(a,10000,fp1);  fputs(a,fp2);                        //k=strlen(a);                                rewind(fp2);           //重新指向开头 //order(a,p1,k);         fgets(b,10000,fp2);         l=strlen(b); //排序写错了吧      for(i=0;i<l-1;i++)        {        for(j=i+1;j<l;j++)             if(b[i]>=b[j])            {            temp=b[i];            b[i]=b[j];             b[j]=temp;            }        }                  fputs(b,fp3);         rewind(fp3);          printf("123");         while((ch=fgetc(fp3))!=EOF)         {             putchar(ch);     }             printf("\n");     } fclose(fp1); fclose(fp2); fclose(fp3); getchar(); return 0; }
user-0 提问: 一个简单宏定义的错误

回复:
user: user-1
content: 引用 7 楼 incident_a 的回复:#define max(a,b) int c=a;    int d=b; ((c)>(d)?(c):(d)) #include <stdio.h> main() {     printf("%d\n",max(2,3)); } 我这样编译通不过怎么回事？ 以上，宏展开之后是： printf("%d\n", int c=a;int d=b;((c)>(d)?(c):(d))); 函数调用的实参要求是表达式，int c=a;int d=b;((c)>(d)?(c):(d))不是表达式，是声明和语句的混合（int c=a;和int d=b;是声明，((c)>(d)?(c):(d)是表达式）。

user: user-0
content: 引用 11 楼 buyong 的回复:max直接就在math.h里，干嘛画蛇添足 书上题目让我做的

user: user-0
content: 引用 1 楼 u012061345 的回复:宏本身从语法上没错误。 不过用起来如果没错误就奇了怪了。 答案是这个

user: user-0
content: 引用 楼主 incident_a 的回复:这个宏定义有什么错误？ #define max(a,b) int c=a; \                  int d=b; \                  (c>d?c:d) 嗯，答案应该是这个

user: user-2
content: max直接就在math.h里，干嘛画蛇添足

user: user-0
content: 引用 5 楼 zhxianbin 的回复:int  x =  int c=a; int d=b;  (c>d?c:d)  这样能正确吗! 没用，和我原来的式子有何区别？

user: user-3
content: 楼主你了解宏定义吗？ http://baike.baidu.com/link?url=PRKM1BNUKu_rZ-cPG_kttgcyMxIiz4RA2IiDXqfc5DONlWqdId5AZ6tY6-l6ubRt0t_NWRcaCE8QIf49i9QFHq

user: user-0
content: 引用 4 楼 sholber 的回复:试试下面的代码就知道这样定义max(a,b)的宏有什么坏处了： int i = 0, j = 1; max(i,j);  i = 1, j = 2; max(i,j); 但我现在编译都通不过

user: user-0
content: #define max(a,b) int c=a;    int d=b; ((c)>(d)?(c):(d)) #include <stdio.h> main() {     printf("%d\n",max(2,3)); } 我这样编译通不过怎么回事？

user: user-0
content: 引用 2 楼 u012421456 的回复:后面的 ; 和 \  有什么错说清楚啊

user: user-4
content: int  x =  int c=a; int d=b;  (c>d?c:d)  这样能正确吗!

user: user-1
content: 试试下面的代码就知道这样定义max(a,b)的宏有什么坏处了： int i = 0, j = 1; max(i,j);  i = 1, j = 2; max(i,j);

user: user-5
content: 你这个宏定义有什么作用，没任何用处

user: user-3
content: 后面的 ; 和 \

user: user-6
content: 宏本身从语法上没错误。 不过用起来如果没错误就奇了怪了。
user-0 提问: 在用studio2010编辑C++是结果输出-1.#R

回复:
user: user-1
content: step by step debug!

user: user-0
content: 这里能成为分母的只有P了，我找不到它怎么成为0的，谢谢

user: user-2
content: -1.#R 应该是NaN, 请检查有没有除0的情况。
user-0 提问: 请问学习VS2012需要什么？

回复:
user: user-0
content: 多谢解答，3Q

user: user-0
content: 好的，感谢各位的解答，

user: user-1
content: 引用 3 楼 huazhiling520 的回复:那请问一下，比如说我要打开www.baidu.com这个网站。需要怎么写呢？  先看看<<windows 程序设计>>吧 慢慢来

user: user-2
content: 引用 3 楼 huazhiling520 的回复:那请问一下，比如说我要打开www.baidu.com这个网站。需要怎么写呢？  IWebBrowser2

user: user-3
content: 踏实看书、Demo、MSDN

user: user-0
content: 那请问一下，比如说我要打开www.baidu.com这个网站。需要怎么写呢？

user: user-1
content: ShellExecute运行一个程序 函数定 义:ShellExecute(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);  第一个参数hwnd是父窗口的句柄,可以为NULL,第二个参数lpOperation表示行为,第三个参数lpFile是程序的路径名,第四个参数lpParameters是给所打开程序的参数,可以为NULL,第五个参数lpDirectory可以为NULL,第六个参数nShowCmd跟ShowWindow函数的第二个参数一样,作用也一样,如果打开的程序有窗口的话,这个参数就指明了窗口如何显示. 例如打开一个记事本:  1 ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);  而且这个函数还可以指定程序打开一个属于程序本身类型的文件,假如e盘有一个a.txt文件;我调用函数运行记事本程序并打开这个文本文件.  1 ShellExecute(NULL,"open","NOTEPAD.EXE","e:\\a.txt",NULL,SW_SHOWNORMAL);  这里由于记事本程序属于系统本身自带的程序,所以没有绝对路径. 这个函数还可以打开一个网站:  1 ShellExecute(NULL,"open","http://www.baidu.com",NULL,NULL,SW_SHOWNORMAL); 2 ShellExecute(NULL,"open","C:",NULL,NULL,SW_SHOWNORMAL);  类似的函数还有WinExec，只有两个参数,它的最后一个参数跟ShellExecute函数的最后一个参数一样. 而第一个参数则是程序路径名.举个例子:WinExce("NOTEPAD.EXE",SW_SHOWNORMAL); 这个函数也可以给程序传递一个文件名供要运行的程序打开,那要如何加进去呢,这里又没有第三个参数, 方法把路径名加在NOTPEPAD.EXE的后面,要以空格来分开如:  1 WinExce("NOTEPAD.EXE e:\\a.txt",SW_SHOWNORMAL);

user: user-1
content: ShellExecute运行一个程序 函数定 义:ShellExecute(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);  第一个参数hwnd是父窗口的句柄,可以为NULL,第二个参数lpOperation表示行为,第三个参数lpFile是程序的路径名,第四个参数lpParameters是给所打开程序的参数,可以为NULL,第五个参数lpDirectory可以为NULL,第六个参数nShowCmd跟ShowWindow函数的第二个参数一样,作用也一样,如果打开的程序有窗口的话,这个参数就指明了窗口如何显示. 例如打开一个记事本:  1 ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);  而且这个函数还可以指定程序打开一个属于程序本身类型的文件,假如e盘有一个a.txt文件;我调用函数运行记事本程序并打开这个文本文件.  1 ShellExecute(NULL,"open","NOTEPAD.EXE","e:\\a.txt",NULL,SW_SHOWNORMAL);  这里由于记事本程序属于系统本身自带的程序,所以没有绝对路径. 这个函数还可以打开一个网站:  1 ShellExecute(NULL,"open","http://www.baidu.com",NULL,NULL,SW_SHOWNORMAL); 2 ShellExecute(NULL,"open","C:",NULL,NULL,SW_SHOWNORMAL);  类似的函数还有WinExec，只有两个参数,它的最后一个参数跟ShellExecute函数的最后一个参数一样. 而第一个参数则是程序路径名.举个例子:WinExce("NOTEPAD.EXE",SW_SHOWNORMAL); 这个函数也可以给程序传递一个文件名供要运行的程序打开,那要如何加进去呢,这里又没有第三个参数, 方法把路径名加在NOTPEPAD.EXE的后面,要以空格来分开如:  1 WinExce("NOTEPAD.EXE e:\\a.txt",SW_SHOWNORMAL);
user-0 提问: 大数据存储。一万乘一万数组

回复:
user: user-1
content: 用文件读写模拟内存读写。 参考_lseeki64函数

user: user-0
content: 引用 1 楼 user-7 的回复:内存不够就写为文件把。 我存了文件了。谢谢

user: user-0
content: 引用 2 楼 lm_whales 的回复:[quote=引用 1 楼 user-7 的回复:] 内存不够就写为文件把。++  要不，用64BitsCPU，操作系统； 8，16,32,64G内存。[/quote] 好的，谢谢啦。

user: user-0
content: 引用 6 楼 dabing16888 的回复:把你的 编译器可用内存 调的大点 这个试过了，也会报错。。

user: user-2
content: LZ 有算过10000*10000的float是多大吗？ 你的机器没有这么多内存吧

user: user-3
content: 每次不需要处理这么大吧。

user: user-4
content: 这种规模的数据，用文件或者数据库。

user: user-5
content: 800M确实没办法吧 即使 勉强可以，也不能用吧

user: user-6
content: 引用 1 楼 user-7 的回复:内存不够就写为文件把。++  要不，用64BitsCPU，操作系统； 8，16,32,64G内存。

user: user-7
content: 内存不够就写为文件把。
user-0 提问: 小白有话说

回复:
user: user-1
content: 学点英语吧。

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

user: user-3
content: 接分，先学好C，再看看数据结构，数据库等等吧～学会这些再慢慢找方向吧～

user: user-4
content: 看自己适合什么，就做什么，编码只是混口饭吃。

user: user-5
content: 接分，，， 楼主先要找到自己喜欢的方向，然后百度相关公司的招聘信息，然后找到职位要求。 然后搜索相关知识点，然后搜索相关开源，然后分析整理抄袭。  然后就牛逼了，，，囧，，，

user: user-6
content: 先找方向吧，然后再入门！

user: user-7
content: 参考我的博文（http://blog.csdn.net/turingo/article/details/8115042）  引用 楼主 kangqt890720 的回复:首先，先做个简短的自我介绍：我呢，是一名正迈着坚定的步伐走向编程的绝对菜鸟。不知道入门的门槛在哪里，还请各位大神指点下我这个初入茅庐的小白吧

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

user: user-9
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-10
content: 引用 4 楼 buyong 的回复:入门一般是先要有电脑 然后选定一种开发语言，就像游戏里选一个门派，既然你在这问，下面假设你选了C或C++ 然后选一个IDE，就像选一个兵器 然后找一个初级教材 然后照着写一个hello world 至此，你入门了 ++++++++++++++1

user: user-11
content: 入门一般是先要有电脑 然后选定一种开发语言，就像游戏里选一个门派，既然你在这问，下面假设你选了C或C++ 然后选一个IDE，就像选一个兵器 然后找一个初级教材 然后照着写一个hello world 至此，你入门了

user: user-12
content: 你要做windows软件开发还是linux软件开发？

user: user-0
content: 主要就是软件开发这方面的     我算初学  什么都不懂   入门要怎么先学点什么

user: user-13
content: 编程领域太大，首先想好你要干什么，比如游戏，网络，界面，android，===,首先看一下你是否有时间，是否有兴趣。
user-0 提问: 自己写的一个递归求迷宫通路数量的函数，得到的结果不正确，求指教……

回复:
user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: 引用 5 楼 u012061345 的回复:[quote=引用 3 楼 u010239582 的回复:] 引用  [quote=引用 1 楼 u012061345 的回复:] if(x > size_x || x < 0 || y > size_y || y < 0)            return;  先把这句改了。条件判断有错误。 这句我是想用来判断有没有越界的，木有看出来错误，还请明示……[/quote]  x >= size_x y >= size_y[/quote] 又犯低级错误！ 谢谢……

user: user-2
content: 引用 3 楼 u010239582 的回复:引用  [quote=引用 1 楼 u012061345 的回复:] if(x > size_x || x < 0 || y > size_y || y < 0)            return;  先把这句改了。条件判断有错误。 这句我是想用来判断有没有越界的，木有看出来错误，还请明示……[/quote]  x >= size_x y >= size_y

user: user-0
content: 引用 2 楼 user-3 的回复: .. ..          if(是否越界） seek_path_count(maze, x, y+1);    //right  if(是否越界）     seek_path_count(maze, x+1, y);    //down  if(是否越界）     seek_path_count(maze, x, y-1);    //left  if(是否越界）     seek_path_count(maze, x-1, y);   ... ...   具体怎么实现自己来 调用之后再判断是否越界一样吧？

user: user-0
content: 引用 引用 1 楼 u012061345 的回复:if(x > size_x || x < 0 || y > size_y || y < 0)            return;  先把这句改了。条件判断有错误。 这句我是想用来判断有没有越界的，木有看出来错误，还请明示……

user: user-3
content: .. ..          if(是否越界） seek_path_count(maze, x, y+1);    //right  if(是否越界）     seek_path_count(maze, x+1, y);    //down  if(是否越界）     seek_path_count(maze, x, y-1);    //left  if(是否越界）     seek_path_count(maze, x-1, y);   ... ...   具体怎么实现自己来

user: user-2
content: if(x > size_x || x < 0 || y > size_y || y < 0)            return;  先把这句改了。条件判断有错误。
user-0 提问: 关于C语言字符串问题。代码挺长但只有一个函数里面的问题，麻烦看下，感激不尽！

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-2
content: 泰瑞宝 ？万德福？

user: user-2
content: 太长了，真可怕。
user-0 提问: setbuf怎么使用？

回复:
user: user-1
content: int main() { 		char buf[100] = {0},c; 		setbuf(stdout,buf); 		while ((c = getchar()) != EOF) 			putchar(c); 		//buf[100]='\0'; 		printf("\n%s",buf); 		return 0; }

user: user-2
content: 引用 3 楼 incident_a 的回复:[quote=引用 1 楼 user-2 的回复:] 估计已经越界了。 引用buffer     User allocated buffer. Shall be at least BUFSIZ bytes long.     Alternatively, a null pointer can be specified to disable buffering. 我就打了5个字符，不可能越界[/quote]  把100改成BUFSIZ试试

user: user-0
content: 引用 1 楼 user-2 的回复:估计已经越界了。 引用buffer     User allocated buffer. Shall be at least BUFSIZ bytes long.     Alternatively, a null pointer can be specified to disable buffering. 我就打了5个字符，不可能越界

user: user-2
content: 如果想把buf大小改成100， 使用setvbuf/* setvbuf example */ #include <stdio.h>  int main () {   FILE *pFile;    pFile=fopen ("myfile.txt","w");    setvbuf ( pFile , NULL , _IOFBF , 100);    // File operations here    fclose (pFile);    return 0; }

user: user-2
content: 估计已经越界了。 引用buffer     User allocated buffer. Shall be at least BUFSIZ bytes long.     Alternatively, a null pointer can be specified to disable buffering.
user-0 提问: linux系统编的c程序怎么在windows上运行

回复:
user: user-1
content: 引用 3 楼 luotuo44 的回复:看一下mingw有没有你的那些头文件，如果没有的话，那就没有办法了。 mingw是用于Windows系统的gcc 英雄所见略同。

user: user-2
content: 看一下mingw有没有你的那些头文件，如果没有的话，那就没有办法了。 mingw是用于Windows系统的gcc

user: user-3
content: 把linux的API换成跨平台的library，如果没有找到跨平台的library, 你要么自己实现相关功能， 要么就只能linux专用了。

user: user-4
content: 重新编译一次。 如果用了什么特别的库，就去找看有没有windows下的版本。
user-0 提问: 为啥我素数排的序不对啊

回复:
user: user-0
content: 嗯嗯，谢谢。我去看看

user: user-1
content: 百度 c语言金典100例 这个新手还是可以看看的

user: user-0
content: 还有你的排序的算法假设有两个素数，那么j是3，两个数外循环怎么要3次?我不懂，求解答，谢谢。

user: user-0
content: 我觉得k不用重置吧？我运行的素数可以出来就是算法排序有问题，谢谢你帮我解答

user: user-0
content: 我觉得k不用重置吧？我运行的素数可以出来就是算法排序有问题，谢谢你帮我解答

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <algorithm>  using namespace std; int k; int plume(int i) { 	int j; 	for (j=2;j< i;j++) 		if (i%j==0) 			break; 	if (j==i) 	{	 		printf("%3d ",i); 		k=1; 	} 	return i; }  int main() { 	int a[100],i,j=0,s,m,b[100]; 	srand((unsigned)time(NULL)); 	for (i=0;i<100;i++) 	{ 		a[i]=rand()%4000+1000; 		printf("%3d ",a[i]); 	} 	printf("––––––––––\n"); 	for (i=0;i<100;i++) 	{  		k = 0;  /*重置*/ 		plume(a[i]);  		if(k==1) 		{ 			b[j]=a[i]; 			j++; 		} 		//m=j; 	} 	printf("–––––––––\n"); 	 	for (i=0;i<j;i++) 		for (m=0;m<j-i-1;m++) 			if (b[m]>b[m+1]) 			{ 				s=b[m]; 				b[m]=b[m+1]; 				b[m+1]=s; 			} 	 	      //sort(b,b+j);  快排,测试排序 			for (i=0;i<j;i++) 				printf("%3d ",b[i]); 		return 0; }

user: user-2
content: 排序算法有问题。 素数判断完毕后 标记 int k;没有重置为0.
user-0 提问: 有高手有冲击波的可执行c代码码没？

回复:
user: user-1
content: 很正常，“冲击波”利用了一个微软03年的古老漏洞，这意味着你必须得在Windows XP SP2，Windows 2000 SP4以前，并且没有打过补丁的计算机上才能看到效果。

user: user-2
content: 虽然我不懂，但看起来很牛B的样子、

user: user-0
content: 是的啊，悲了个剧！让我做个别的什么系统都简单的多

user: user-3
content: 毕业设计居然做这个。。。

user: user-0
content: 网络工程、、、

user: user-4
content: 楼主好啊，楼主学什么专业？本科还是研究生啊？
user-0 提问: 大家好我是新来的，请大家多关照。

回复:
user: user-1
content: 直接学OC，否则等你学完C和OC,估计就2种可能：1. 满大街都是会OC的人，向现在的java 2. ios被淘汰了，向当初的塞班

user: user-0
content: 引用 1 楼 user-5 的回复:为什么不直接学oc呢  怎么想的我看网上都是说先学c在学oc。所以，我一时拿不准，特来论坛求教。那我直接学oc，那c不用学了？

user: user-2
content: 谭老师的书本是比较适合高校老师教学用的。。。但是……推荐《The C Progranmming Language》吧 ，本diao也在复习C，看这本书呢

user: user-3
content: 《The C Progranmming Language》，感觉精华都在这本书的附录里面~

user: user-4
content: 引用 5 楼 xiao0915 的回复:每天回帖即可获得10分可用分！ 是吗

user: user-0
content: 我看网上都是说先学c在学oc。所以，我一时拿不准，特来论坛求教。那我直接学oc，那c不用学了？

user: user-5
content: 为什么不直接学oc呢  怎么想的
user-0 提问: fread第一个参数强制转换类型是为了啥？

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 incident_a 的回复:] 我认为并不是毫无意义，至少还是有一点的，只不过不清楚而已，看看作者的解释： It looks reasonable enough at first glance: &rec is carefully cast to char * to pass to fread and fwri te, 你要相信作者，那也随你[/quote] 并不是我迷信作者，只不过这本书是《C陷阱与缺陷》,权威性还是有的。如果连这本书都不能相信（并不是完全相信），那世界上还有什么C语言书能看？难道认你当老师？

user: user-1
content: 引用 2 楼 incident_a 的回复:我认为并不是毫无意义，至少还是有一点的，只不过不清楚而已，看看作者的解释： It looks reasonable enough at first glance: &rec is carefully cast to char * to pass to fread and fwri te, 你要相信作者，那也随你

user: user-0
content: 我认为并不是毫无意义，至少还是有一点的，只不过不清楚而已，看看作者的解释： It looks reasonable enough at first glance: &rec is carefully cast to char * to pass to fread and fwri te,

user: user-1
content: 那个帖子里已经有人回答了，这里的强制转换多此一举，毫无意义
user-0 提问: 对这个程序实在不理解啊，别人写的，读不懂，求好心大神注释下，帮说说怎么回事，非常感谢！

回复:
user: user-0
content: 这是个关于多线程的程序

user: user-1
content: 好长。。我是个初学者，。。完全看不懂哈。。

user: user-2
content: 实际运行一下，就知道了。 大概就是多线程处理文本文件，还自定义一个消息通讯

user: user-3
content: 好像是用两个线程分别读取两个文件的内容并输出到终端

user: user-4
content: 看到这么长的程序就没兴趣了
user-0 提问: 关于广义表创建二叉树遍历的问题

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:void InOrderTraverse(bitree *T) {     if(T)     {         InOrderTraverse(T->lchild);         printf("\t%c",T->data);         InOrderTraverse(T->rchild);     } } void PostOrderTraverse(bitree *T) {     if(T)     {         PostOrderTraverse(T->lchild);         PostOrderTraverse(T->rchild);         printf("\t%c",T->data);     } } 擦= =我傻逼了。。。没注意到这个问题 谢谢指正

user: user-1
content: void InOrderTraverse(bitree *T) {     if(T)     {         InOrderTraverse(T->lchild);         printf("\t%c",T->data);         InOrderTraverse(T->rchild);     } } void PostOrderTraverse(bitree *T) {     if(T)     {         PostOrderTraverse(T->lchild);         PostOrderTraverse(T->rchild);         printf("\t%c",T->data);     } }

user: user-0
content: 这是结果
user-0 提问: 一个关于指针的问题（新手求教）

回复:
user: user-0
content: 原程序的错误，， 在哪里，，还求指教额。。。。。

user: user-0
content: 谢谢各位了，#2楼的答案调试正确。 新手确实有很多疑惑额

user: user-1
content: 牛逼  引用 4 楼 u012061345 的回复:input()函数这句话错了。 scanf("%d",a[0]);

user: user-2
content: input()函数这句话错了。 scanf("%d",a[0]);

user: user-1
content: 与其修改，不如直接指出原程序中的错误，我在想，他的程序错在哪呢？

user: user-3
content: 修改后没测试： #include<stdio.h>   void input(int a[],int *pmax,int *pmin) {     printf("请输入10个整数:\n");     int i;     scanf("%d",&a[0]);     *pmax=*pmin=0;     for(i=1;i<10;i++)     {         scanf("%d",&a[i]);         if(a[i]>a[*pmax])*pmax=i;         if(a[i]<a[*pmin])*pmin=i;     } } void chang(int a[]int pmax,int pmin) {     int temp;     temp=a[0];     a[0]=a[pmin];     a[pmin]=temp; 	temp=a[pmax]; 	a[pmax]=a[9]; 	a[9]=temp; } void output(int a[]) {     int i;     for(i=0;i<10;i++)         printf("%d ",a[i]); } int main(void) {     int max;     int min;     int a[10];     input(a,&max,&min);     chang(a,max,min);     output(a);     return 0; }

user: user-1
content: 一时半会还真看不出来，哦，
user-0 提问: 这个程序怎么改？

回复:
user: user-1
content: #include <stdio.h> int main(void) {    char a[7][50] = {"9966999999966699999996699666699666999966699666699", "9969999999996999999999699666699669966996699666699", "9966999999999999999996699666699699666699699666699", "9966669999999999999666669999966699666699699666699", "9966666699999999966666666999666699666699699666699", "9966666666999996666666666999666669966996699666699", "9966666666699966666666666999666666999966669999996", };  int i,j; for(i = 0 ; i < 7 ; i++) { for(j = 0 ; j < 50 ; j++) { if(a[i][j] == '9') printf( "%s", "敏"); else printf("%c",a[i][j]); } printf("\n"); }  return 0; }

user: user-0
content: 引用 4 楼 u010915464 的回复:汉字是个很神奇的东西，在WINDOWS中一般是两个字节，在UNIX中式2-4个字节，具体多少要看系统，比如我现在用ubuntu就是占的3个字节 windows下的！

user: user-0
content: 引用 5 楼 u013163178 的回复:你是改输出还是改变数组啊改输出

user: user-2
content: 你是改输出还是改变数组啊

user: user-3
content: 汉字是个很神奇的东西，在WINDOWS中一般是两个字节，在UNIX中式2-4个字节，具体多少要看系统，比如我现在用ubuntu就是占的3个字节

user: user-1
content: 汉字在ansi码占2个字节

user: user-4
content: 改成这样： #include <stdio.h> int main(void) { 	char a[7][50] = {"9966999999966699999996699666699666999966699666699", "9969999999996999999999699666699669966996699666699", "9966999999999999999996699666699699666699699666699", "9966669999999999999666669999966699666699699666699", "9966666699999999966666666999666699666699699666699", "9966666666999996666666666999666669966996699666699", "9966666666699966666666666999666666999966669999996", }; 	int i; 	int j; 	for(i = 0 ; i < 7 ; i++) 	{ 		for(j = 0 ; j < 50 ; j++) 		{ 			if(a[i][j]=='9')printf("敏"); 			else printf(" "); 		} 		printf("\n"); 	} 	return 0; }

user: user-5
content: 你没法改，因为汉字不属于char类型的，汉字占两个字节，而char占一个字节，明显不行啊
user-0 提问: 指针与二维数组

回复:
user: user-1
content: 引用 7 楼 u012061345 的回复:标准上说的很清楚，数组名作为首元素的地址，除非使用sizeof或者&运算。很多人看过标准到生搬硬套各种问题，有点荒唐。

user: user-2
content: 标准上说的很清楚，数组名作为首元素的地址，除非使用sizeof或者&运算。很多人看过标准到生搬硬套各种问题，有点荒唐。

user: user-1
content: 引用 5 楼 u012061345 的回复:[quote=引用 2 楼 sholber 的回复:] 1，a[i][j]是数组的数组。a[i]的元素是另一个数组； 2，若a是数组，对于表达式*a，a自动转换为指向其第一个元素的指针，于是，表达式*a指示该数组第一个元素； 3，因a是数组的数组，故*a指示其第一个元素，因其第一个元素亦是一个数组，故，*a指示另一个数组。 总而言之，对于int a[i][j]，表达式*a的类型是int [j]。 PS：这40分应该全归我。  a自动转化为指向第一个元素的指针，不是首元素地址？[/quote] 指针是指针，地址是地址，不是一个概念。很多人懂一点汇编，就养成一种不好的习惯，说C的事不由自主往汇编上扯，这是一种非常荒谬的习惯。 标准上说得很清楚：除非做为sizeof和一元&运算符的操作数，数组名将转换为指向其第一个元素的指针。

user: user-2
content: 引用 2 楼 sholber 的回复:1，a[i][j]是数组的数组。a[i]的元素是另一个数组； 2，若a是数组，对于表达式*a，a自动转换为指向其第一个元素的指针，于是，表达式*a指示该数组第一个元素； 3，因a是数组的数组，故*a指示其第一个元素，因其第一个元素亦是一个数组，故，*a指示另一个数组。 总而言之，对于int a[i][j]，表达式*a的类型是int [j]。 PS：这40分应该全归我。  a自动转化为指向第一个元素的指针，不是首元素地址？

user: user-1
content: 楼主太不象话了

user: user-1
content: 引用 1 楼 u012061345 的回复:数组名代表其首元素的地址。 int a[3][4]是一个二维数组，则其首元素a[0]又是一个int [4]的数组。 所以*a 就是指这个int [4]的数组。 笼统地说数组名代表其首元素的地址是非常荒谬的。C不是汇编，不要老是地址地址的。你应该用类型的观念来说明问题。其次，在表达式sizeof(a)和&a中，数组名就不是代表其首元素的地址。

user: user-1
content: 1，a[i][j]是数组的数组。a[i]的元素是另一个数组； 2，若a是数组，对于表达式*a，a自动转换为指向其第一个元素的指针，于是，表达式*a指示该数组第一个元素； 3，因a是数组的数组，故*a指示其第一个元素，因其第一个元素亦是一个数组，故，*a指示另一个数组。 总而言之，对于int a[i][j]，表达式*a的类型是int [j]。 PS：这40分应该全归我。

user: user-2
content: 数组名代表其首元素的地址。 int a[3][4]是一个二维数组，则其首元素a[0]又是一个int [4]的数组。 所以*a 就是指这个int [4]的数组。
user-0 提问: 这个输出案例是不是错了

回复:
user: user-1
content: 引用 4 楼 lm_whales 的回复:男神排成一圈，共有N个位置可以插入女生，每个位置可以插入一个或者两个女生 计算M个女生插入这N个位置有几种方法即可也可以不插入女生，因为人数不够

user: user-2
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: user-1
content: 男神排成一圈，共有N个位置可以插入女生，每个位置可以插入一个或者两个女生 计算M个女生插入这N个位置有几种方法即可

user: user-3
content: 算法： 先不考虑女生连在一起，算出总可能性 然后算出女生连在一起的可能性 最后相减

user: user-0
content: 10 2 输出的为什么是36？

user: user-4
content: 按照排列组合的公式套到程序里不就行了吗