Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 点对点通信，这个概念是不是有多个解释？我看维基的是ppp

回复:
user: user-1
content: “点对点通信“和”ppp“是两个概念  ppp是 point to point protocol, 也就是点对点协议。  ppp 是数据链路层的协议。可以理解为“点对点通信“的一种实现。而且，计算机网络中说到的点对点通信，一般也就是指数据链路层上的点对点通信。  另外有一个概念是  p2p  ，即 Peer to Peer ，是指对等网络。

user: user-1
content: icmp并不传输数据 tcp传输数据  如果把数据比作货物，tcp比作运输货物的汽车，那么可以把icmp比作检查道路是否通畅的工作人员。 汽车发现一条道路不通时，它会选择另一条路走；发现路堵塞时，它会慢点开。 而工作人员发现道路有问题时，他就向单位报告。

user: user-2
content: 先坚持把书看完。

user: user-1
content: 第二个问题。  icmp检查和报告差错的原因，但它没有改正错误。  tcp的可靠传输，没有能力知道也不需要知道造成差错的原因。 但它能发现错误并修正错误。

user: user-3
content: 引用 3 楼 HeBanBei 的回复:第二个问题。  icmp检查和报告差错的原因，但它没有改正错误。  tcp的可靠传输，没有能力知道也不需要知道造成差错的原因。 但它能发现错误并修正错误。 修正错误？  tcp有确认机制， 超时重传（发方一旦发出一个保文，就开启定时器，等待这个发送数据的ack应答：ack == seq + len）  如果发现错误的时候，收方会发送icmp包给发送方。

user: user-0

user: user-0
user-0 提问: ++自增运算符的计算顺序

回复:
user: user-1
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-2
content: 这是一个不确定行为，编译器可以任意实现

user: user-3
content: 置顶帖、置顶帖、置顶帖……

user: user-4
content: (++c) + (c++)   这类的代码在项目里是不会用的，用了会被经理骂的，个人觉得好像只有考试这么干，  个人建议不用太花心思在这上面，如果真有这类的题，弄不明白就跳过好了。其他作好即可。

user: user-5
content: 楼上几位说的都挺有道理，还是建议楼主写代码时分开写，这样就不用纠结，输出是几了。 另外我在VS2010上试了下，那两种输出都是 4 6。

user: user-0
content: 查了一下sequence point 这些例子应该都是不对的

user: user-6
content: 如果一个表达式不仅算出一个值，还修改了环境，就说这个表达式有副作用（因为它多做了额外的事）。c++和++c 就是有副作用的表达式。  C/C++ 语言的规定，任何依赖于特定计算顺序、依赖于在顺序点之间实现修改效果的表达式，其结果都没有保证  也就是说，你的那段代码换个编译器的话，结果很有可能就不一样了

user: user-7
content: 同一个表达式中,对同一个变量不能超过一次赋值
user-0 提问: 利用C语言对txt文件进行处理

回复:
user: user-1
content: 先定义结构体，最好读一下c语言的结构部分

user: user-2
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-3
content: 先定义结构体，你知道分隔符是什么，读出来。。。

user: user-4
content: 利用getline过去每一行数据储存到iostream类对象中，然后将每一个iostream类读入到string中，就可以每行数据以空格键为分隔单个读入数据，创建一个结构用于储存数据就OK咧

user: user-5
content: 至少你把结构体先给定义出来……
user-0 提问: 一个信号报告的程序，编译没有错误，结果是空的，倒是多出了一行”请按任意键继续“

回复:
user: user-1
content: system("pause");就是按任意键继续啊。 至于你说的“结果是空的”，因为你的变量是整型，与switch的常量字符不匹配（如 1！='1'）。

user: user-2
content: 好吧，我以前也犯过类似的错误，不过慢慢改正就好了，加油！！

user: user-3
content: 引用 4 楼 Tim_Alan 的回复:问题找到了，case 在这段代码里面本该接一个整型常量，但是加了‘’之后就变成了字符常量，所以匹配不到，没有结果（错误太低级了，刚开始学编程不要喷没事，这种情况，很正常， 抱歉，回答对你没有帮助

user: user-0
content: 引用 3 楼 lm_whales 的回复:R=0,S=任意 0～9 S=0，R=任意整数， 这些情况都没有考虑进去 不知道是不会出现这种情况，还是写代码的时候漏掉了？ S=1~9，R=1~5，没描述清楚不好意思

user: user-0
content: 问题找到了，case 在这段代码里面本该接一个整型常量，但是加了‘’之后就变成了字符常量，所以匹配不到，没有结果（错误太低级了，刚开始学编程不要喷

user: user-3
content: R=0,S=任意 0～9 S=0，R=任意整数， 这些情况都没有考虑进去 不知道是不会出现这种情况，还是写代码的时候漏掉了？

user: user-4
content: system("pause");就是按任意键继续啊。

user: user-4
content: 输入一个小于60的正整数试试看。 如果输入的是大于59的且各个位是0的正数，或0，确实会如楼主说所说的输出。
user-0 提问: windows sdk函数DPtoLP的问题

回复:
user: user-1
content: 参考MSDN中的例子代码中调用DPtoLP的地方。 MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl

user: user-2
content: 和设置的 显示器分辨率 以及 显示器 尺寸有关系吧
user-0 提问: 求问一个能删除数组中连续的相同的数的方法，谢谢！

回复:
user: user-1
content: int rm(int *a,int n,int reps){     int i,j,k;     //[j,i) =>a[k..]     for(i=0,j=0,k=0;i<n;i++){         if(a[i]!=a[j]){             if(i-j>=reps) k-=i-j;             j =i;         }         a[k++]=a[i];     }     if(i-j>=reps) k-=i-j;     return k; }

user: user-2
content: //0 1 1 3 4 4

user: user-2
content: 直接上代码：  #include <stdio.h> void removeDuplicate(int *arr, int n, int *newSize) { 	int i, j, k, key, times; 	i = j = 0; 	key = arr[0]; 	while (j < n) { 		times = 0; 		while (j < n && arr[j] == key) { 			j++; 			times++; 		} 		if (times < 3) { 			for (k = 0; k < times; k++) { 				arr[i++] = arr[j - times + k]; 			} 		} 		if (j < n) { 			key = arr[j]; 		} 	} 	*newSize = i; } int main(void){ 	int arr[] = { 0,1,1,2,2,2,3,4,4,5,5,5,5 }; 	int n = sizeof(arr) / sizeof(arr[0]); 	int newSize; 	removeDuplicate(arr, n, &newSize); 	//打印 	for (n = 0; n < newSize; n++) { 		printf("%d ", arr[n]); 	} 	return 0; }

user: user-3
content: 另外，考虑到删除后，可能会出现前面跳过的序列跟后面新的没处理的序列合并后，有相同数据的情况 也要特别关注一下，不然可能会产生错误的结果

user: user-3
content: 分成两种序列  1）不相同序列跳过， 2）相同序列，处理（删除掉） 判断只是个循环，并计数的过程

user: user-0
content: 感谢大家的帮助！！

user: user-4
content: 可以用两层循环依次找出重复的数，当然你也可以先排序，然后再删除

user: user-5
content: 补充： 1.tmpRepeatCount表示repeatArray数组里已经被赋值的个数  2."再建一个数组"指，再建一个数组用于存放经过删除处理后的orignArray值

user: user-5
content: 参考二楼paschen的意见，这边再详细下思路，如下：  可定义宏:#define repeatCount 3  输入的20个数的原始数组定义为orignArray[10]，其数据的下标我们用index表示，如origrnArray[0]对应的index值为0  再初始化一个重复数组repeatArray[20]，这个数组里被输入的数我们定义为tmpRepeatCount=0  做一个for循环，20个数中抽取第一个数与其他数做对比，对比规则如下： 1.如抽取的第一个数与其他数不相等，则对比下一个 2.如抽取的第一个数与其他数相等，则把对index值赋予repeatArray数组的第一个元素，tmpRepeatCount+1 3.当第一个数与其他数对比完成后，判断此条件tmpRepeatCount>=repeatCount 为真，则删除orignArray[repeatArray[i]] 4.循环step1~3，把第二个数与其他数对比。注其他数指第三个数到第20个数  其中删除方法，可自己定义如赋值'\0'，或者再建一个数组什么的。  over
user-0 提问: 请问学数据结构前需要学习C++吗?我有一些C语言的基础,求高手指教!

回复:
user: user-1
content: 刚好我在C入门中，下来也该琢磨数据结构了。此贴对我很有用

user: user-2
content: 引用 19 楼 u012502355 的回复:] #10 看到了吗，他那里有好资料。 不论什么语言，掌握了数据结构和算法的用法才是重要的。 test

user: user-0
content: 引用 20 楼 u010165006 的回复:[quote=引用 16 楼 yyxgs 的回复:] [quote=引用 15 楼 u010165006 的回复:] 建议楼主还是看《大话数据结构》吧，有一些比喻比较形象好理解，又不失专业。   请问严蔚敏《数据结构(C语言版)》和你推荐的这本书哪本比较适合新手呢?[/quote] 你可以去当当网或者亚马逊先看看这本书的评论。[/quote]   哦哦，那你的意见呢?

user: user-0
content: 引用 19 楼 u012502355 的回复:#10 看到了吗，他那里有好资料。 不论什么语言，掌握了数据结构和算法的用法才是重要的。   嗯嗯，看到了，谢谢你们!

user: user-3
content: 引用 16 楼 yyxgs 的回复:[quote=引用 15 楼 u010165006 的回复:] 建议楼主还是看《大话数据结构》吧，有一些比喻比较形象好理解，又不失专业。   请问严蔚敏《数据结构(C语言版)》和你推荐的这本书哪本比较适合新手呢?[/quote] 你可以去当当网或者亚马逊先看看这本书的评论。

user: user-0
content: 引用 23 楼 u010165006 的回复:[quote=引用 22 楼 yyxgs 的回复:] [quote=引用 20 楼 u010165006 的回复:] [quote=引用 16 楼 yyxgs 的回复:] [quote=引用 15 楼 u010165006 的回复:] 建议楼主还是看《大话数据结构》吧，有一些比喻比较形象好理解，又不失专业。   请问严蔚敏《数据结构(C语言版)》和你推荐的这本书哪本比较适合新手呢?[/quote] 你可以去当当网或者亚马逊先看看这本书的评论。[/quote]   哦哦，那你的意见呢?[/quote] 如果你不是计算机专业的，还是大话好点。[/quote]   谢谢!

user: user-3
content: 引用 22 楼 yyxgs 的回复:[quote=引用 20 楼 u010165006 的回复:] [quote=引用 16 楼 yyxgs 的回复:] [quote=引用 15 楼 u010165006 的回复:] 建议楼主还是看《大话数据结构》吧，有一些比喻比较形象好理解，又不失专业。   请问严蔚敏《数据结构(C语言版)》和你推荐的这本书哪本比较适合新手呢?[/quote] 你可以去当当网或者亚马逊先看看这本书的评论。[/quote]   哦哦，那你的意见呢?[/quote] 如果你不是计算机专业的，还是大话好点。

user: user-0
content: 引用 1 楼 lrgdongnan 的回复:不需要，数据结构和语言是分离的，有C语言基础就可以学数据结构了！   谢谢!!请问大神数据结构到底是什么?资料上都太抽象,完全不懂...

user: user-0
content: 引用 2 楼 lilianjie001 的回复:有C语言的基础学习起来比较容易，不一定非得学习C++，C++也不是一时半会能学好的   谢谢指点!

user: user-4
content: 有C语言的基础学习起来比较容易，不一定非得学习C++，C++也不是一时半会能学好的

user: user-5
content: 不需要，数据结构和语言是分离的，有C语言基础就可以学数据结构了！

user: user-6
content: #10 看到了吗，他那里有好资料。 不论什么语言，掌握了数据结构和算法的用法才是重要的。

user: user-0
content: 引用 17 楼 u012502355 的回复:不论什么语言，只要你会其中的一种。然后结合数据结构学习，关键是代码练习。这样提高才比较快。。   谢谢指点,数据结构对其他语言也是有用的吗?

user: user-6
content: 不论什么语言，只要你会其中的一种。然后结合数据结构学习，关键是代码练习。这样提高才比较快。。

user: user-0
content: 引用 15 楼 u010165006 的回复:建议楼主还是看《大话数据结构》吧，有一些比喻比较形象好理解，又不失专业。   请问严蔚敏《数据结构(C语言版)》和你推荐的这本书哪本比较适合新手呢?

user: user-3
content: 建议楼主还是看《大话数据结构》吧，有一些比喻比较形象好理解，又不失专业。

user: user-0
content: 引用 7 楼 lrgdongnan 的回复:数据结构，说白了，就是讲在计算机里怎么表示数据，处理数据。建议你看《数据结构 严蔚敏版》这本书，适合初学者！   哦哦，原来是这样,谢谢!

user: user-0
content: 引用 9 楼 qq_30539199 的回复:我也正在学，看视频吧，可以懂的，只要坚持住！！   嗯嗯，共同加油

user: user-0
content: 引用 8 楼 wang0635 的回复:数据结构是用什么语言描述的，就需要什么语言的基础   哦哦，需要专业数学知识吗?

user: user-7
content: 完全不需要，数据结构可以用于任何语言
user-0 提问: 求推荐一款调试c/c++的工具

回复:
user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 引用 6 楼 akirya 的回复:[quote=引用 5 楼 ID19870510 的回复:] [quote=引用 4 楼 akirya 的回复:] [quote=引用 2 楼 ID19870510 的回复:] [quote=引用 1 楼 akirya 的回复:] 这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值[/quote] 直接上visual stduio [/quote]  额 我电脑有点烂。。有没有轻便点的 推荐一下[/quote] 那得多烂啊，现在3000块的本子跑VS速度都能接受。[/quote] 不对，都能eclipse了 跑VS只会比eclipse快。

user: user-0
content: 引用 6 楼 akirya 的回复:[quote=引用 5 楼 ID19870510 的回复:] [quote=引用 4 楼 akirya 的回复:] [quote=引用 2 楼 ID19870510 的回复:] [quote=引用 1 楼 akirya 的回复:] 这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值[/quote] 直接上visual stduio [/quote]  额 我电脑有点烂。。有没有轻便点的 推荐一下[/quote] 那得多烂啊，现在3000块的本子跑VS速度都能接受。[/quote]   五六年前的电脑了  vs不够很大吗 有没有小点的

user: user-2
content: 引用 5 楼 ID19870510 的回复:[quote=引用 4 楼 akirya 的回复:] [quote=引用 2 楼 ID19870510 的回复:] [quote=引用 1 楼 akirya 的回复:] 这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值[/quote] 直接上visual stduio [/quote]  额 我电脑有点烂。。有没有轻便点的 推荐一下[/quote] 那得多烂啊，现在3000块的本子跑VS速度都能接受。

user: user-0
content: 引用 4 楼 akirya 的回复:[quote=引用 2 楼 ID19870510 的回复:] [quote=引用 1 楼 akirya 的回复:] 这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值[/quote] 直接上visual stduio [/quote]  额 我电脑有点烂。。有没有轻便点的 推荐一下

user: user-2
content: 引用 2 楼 ID19870510 的回复:[quote=引用 1 楼 akirya 的回复:] 这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值[/quote] 直接上visual stduio

user: user-2
content: 引用 2 楼 ID19870510 的回复:[quote=引用 1 楼 akirya 的回复:] 这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值[/quote] 那只能说CDT插件做得烂呗。

user: user-0
content: 引用 1 楼 akirya 的回复:这个是IDE的基本功能，没这个功能只能成为文本编辑器。  我用eclipse的 CDT插件 为啥没法直接看变量的值

user: user-2
content: 这个是IDE的基本功能，没这个功能只能成为文本编辑器。

user: user-3
content: Vs2010 外加 插件 VA_X，用好了绝对爽

user: user-4
content: VS 2012变量监控，汇编代码对应源码，内存查看，寄存器，调用的dll 一目了然，不要太爽

user: user-5
content: 我用qtcreator加提取版的vc编译器，还可以，调试估计要装vs

user: user-6
content: 当然是VS了，电脑性能不好建议先换台电脑吧，搞计算机的还说电脑性能不好，太寒碜了吧！

user: user-7
content: Dev C++很不错

user: user-8
content: 在WINDOWS下你就用VS吧，调试功能已经很强大了，你说的只是其中最基本的功能，而且VS调试时对STL中容器也有特别处理

user: user-9
content: code blocks
user-0 提问:  在VS下调用system时 路径有空格为什么就显示找不到文件

回复:
user: user-1
content: 引用 3 楼 libinden71 的回复:[quote=引用 2 楼 user-1 的回复:] 有空格要用双引号括起来  system("start \"F:\\Visual Studio\\Common7\\IDE\\devenv.exe\""); 运行起来是这样的，没有打开软件！ 我换了个也有空格的软件的路径  结果显示居然是一样的怎么不是D:[/quote]‘   system("start  \"\"  \"F:\\Visual Studio\\Common7\\IDE\\devenv.exe\"");

user: user-0
content: 引用 2 楼 user-1 的回复:有空格要用双引号括起来  system("start \"F:\\Visual Studio\\Common7\\IDE\\devenv.exe\""); 运行起来是这样的，没有打开软件！ 我换了个也有空格的软件的路径  结果显示居然是一样的怎么不是D:

user: user-1
content: 有空格要用双引号括起来  system("start \"F:\\Visual Studio\\Common7\\IDE\\devenv.exe\"");

user: user-0
content: 是不是 字符集的问题啊？
user-0 提问: 关于C语言跨平台编码问题

回复:
user: user-1
content: 引用 5 楼 zxh707wk 的回复:跨平台不如不跨平台 严重同意！  说“跨平台一定比不跨平台好”就和说“双性恋一定比异性恋好”一样！

user: user-2
content: 跨平台不如不跨平台

user: user-3
content: 一点小小的经验,注意 unsigned long 和 unsigned int 的区别,这个很重要!!!!!!

user: user-4
content: 1. 这个，还真的是需要穷举。 2. 你不在实际的平台上编译一下，怎么知道不同平台需要包含的头文件是不是一样。 3. 编译器啊，不同的平台又有不同的编译器。

user: user-5
content: http://www.cnblogs.com/ayanmw/archive/2012/07/20/2600911.html

user: user-6
content: 在你的底层进行一次封装。 而在这些封装中使用 #ifdef 之类的宏来进行条件编译。
user-0 提问: 请大家帮忙看下代码 任意值相加等于固定值的组合问题

回复:
user: user-1
content: 仅供参考：//n个(2<=n<=20)整数(整数范围-10<=x<=10)，判断是否可以从这n个数中找到若干个数，其和为10 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <algorithm> using namespace std; int MAXN=20; int MINN=2; int x[20]; int n,i,j,k,sum; int main() {     srand((unsigned)time(NULL));     n=MINN+rand()%(MAXN-1);     for (i=0;i<n;i++) {         x[i]=-10+rand()%21;         printf("%d,",x[i]);     }     printf("\n");     sort(&x[0],&x[n]);     do {         for (i=2;i<=n;i++) {             sum=0;             k=n/2-i/2;             for (j=k;j<k+i;j++) {                 sum+=x[j];             }             if (10==sum) {                 for (j=k;j<k+i;j++) {                     if (j==k+i-1) {                         printf("%d==10\n",x[j]);                     } else {                         printf("%d+",x[j]);                     }                 }                 printf("YES\n");                 return 1;             }         }     } while (next_permutation(&x[0],&x[n]));     printf("NO\n");     return 0; }

user: user-2
content: 动态规划，动态规划
user-0 提问: 杭电acm2140

回复:
user: user-0
content: 引用 4楼super_miker 的回复:[quote=引用 2 楼 smileFFFF 的回复:] 我想用麻烦点的，就是逐个判断句子中的每一个单词，在逐个替换，应该怎么弄啊？   这个错在哪了啊 #include<stdio.h> #include<string.h> int main() { 	char a[10000]; 	int l,i,b; 	 	while(scanf("%s",a)!=EOF) 	{ 	 	l=strlen(a); 	for(i=0;i<l;i++) 		{ 			if(a[i]=='b') 			a[i]=' '; 			continue; 			if(a[i]=='q') 			a[i]=','; 			continue; 			if(a[i]=='t') 			a[i]='!'; 			continue; 			if(a[i]=='m') 			a[i]='l'; 			continue; 			if(a[i]=='i') 			a[i]='e'; 			continue; 			if(a[i]=='c') 			a[i]='a'; 			continue; 			if(a[i]=='a') 			a[i]='c'; 			continue; 			if(a[i]=='e') 			a[i]='i'; 			continue; 			 		} 	for(i=0;i<l;i++) 		printf("%s",a[i]);  	}   return 0; }  	for(i=0;i<l;i++) 		printf("%s",a[i]); => printf("%s", a);[/quote]谢谢～

user: user-1
content: 引用 2 楼 smileFFFF 的回复:我想用麻烦点的，就是逐个判断句子中的每一个单词，在逐个替换，应该怎么弄啊？   这个错在哪了啊 #include<stdio.h> #include<string.h> int main() { 	char a[10000]; 	int l,i,b; 	 	while(scanf("%s",a)!=EOF) 	{ 	 	l=strlen(a); 	for(i=0;i<l;i++) 		{ 			if(a[i]=='b') 			a[i]=' '; 			continue; 			if(a[i]=='q') 			a[i]=','; 			continue; 			if(a[i]=='t') 			a[i]='!'; 			continue; 			if(a[i]=='m') 			a[i]='l'; 			continue; 			if(a[i]=='i') 			a[i]='e'; 			continue; 			if(a[i]=='c') 			a[i]='a'; 			continue; 			if(a[i]=='a') 			a[i]='c'; 			continue; 			if(a[i]=='e') 			a[i]='i'; 			continue; 			 		} 	for(i=0;i<l;i++) 		printf("%s",a[i]);  	}   return 0; }  	for(i=0;i<l;i++) 		printf("%s",a[i]); => printf("%s", a);

user: user-2
content: 参考：  #include <stdio.h> #include <string.h> int i; char str[10001]; char encrypt[] = "c adifghejkmlnopqrs!uvwxyz"; int main(void) { 	while (1) { 		if (1 == scanf("%10001s", str)) { 			for (i = 0; i < strlen(str); i++) { 				str[i] = encrypt[str[i] - 'a']; 			} 			printf("%s\n", str); 		} 		else break; 	} 	return 0; }

user: user-0
content: 我想用麻烦点的，就是逐个判断句子中的每一个单词，在逐个替换，应该怎么弄啊？   这个错在哪了啊 #include<stdio.h> #include<string.h> int main() { 	char a[10000]; 	int l,i,b; 	 	while(scanf("%s",a)!=EOF) 	{ 	 	l=strlen(a); 	for(i=0;i<l;i++) 		{ 			if(a[i]=='b') 			a[i]=' '; 			continue; 			if(a[i]=='q') 			a[i]=','; 			continue; 			if(a[i]=='t') 			a[i]='!'; 			continue; 			if(a[i]=='m') 			a[i]='l'; 			continue; 			if(a[i]=='i') 			a[i]='e'; 			continue; 			if(a[i]=='c') 			a[i]='a'; 			continue; 			if(a[i]=='a') 			a[i]='c'; 			continue; 			if(a[i]=='e') 			a[i]='i'; 			continue; 			 		} 	for(i=0;i<l;i++) 		printf("%s",a[i]);  	}   return 0; }

user: user-3
content: #include<stdio.h> #include<string.h> int main(){     char str[10010];     char tab[200];     int i;     memset(tab,'0',sizeof(tab));     char *t1="bqtmicael";     char *t2=" ,!leacim";     for(i=0;i<9;i++){         tab[t1[i]]=t2[i];     }          while(gets(str)){         for(i=0;str[i];i++){             if(tab[str[i]]!='0'){                 putchar(tab[str[i]]);             }else{                 putchar(str[i]);             }         }         printf("\n");     }     return 0; }
user-0 提问: 为什么这个数组占了96个字节？

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:谁教你的“一个元素一字节”？把他剁了！ 哈哈，我得把自己剁了

user: user-1
content: 谁教你的“一个元素一字节”？把他剁了！

user: user-2
content: 总共2*3*4=24 个元素，每个元素是 int （大小4字节），一共24*4 = 96

user: user-3
content: int类型占4个字节 24*4=96 你可以试一下sizeof（int）； 这个语句表示int类型在你电脑里占的字节大小

user: user-4
content: 此处的int是4字节的
user-0 提问: C语言一维数组和二维数组问题

回复:
user: user-0
content: 引用 6 楼 qq1908625082的回复:[quote=引用 3 楼 paschen的回复:]scanf_s还需要一个参数指定缓冲区有多大：   scanf_s("%s",str[i], 6);   或者用scanf 那个我想问下，我我用scanf_s的原因是因为用不了scanf，那么这个缓冲区是怎么回事呀[/quote] 谢谢，我已经自己查到了

user: user-0
content: 引用 3 楼 paschen的回复:scanf_s还需要一个参数指定缓冲区有多大：   scanf_s("%s",str[i], 6);   或者用scanf 那个我想问下，我我用scanf_s的原因是因为用不了scanf，那么这个缓冲区是怎么回事呀

user: user-0
content: 引用 2 楼 弓长羊羽的回复:修改如下：  #include<stdio.h> #include<string.h> void sort(char s[][6], int n);  //第二个参数n是第一维的信息 int main() { 	int i; 	char str[10][6]; 	printf("input 10 strings:\n"); 	for (i = 0; i < 10; i++) 		scanf("%6s", str[i]); 	sort(str, 10); 	printf("now,the sequence is:\n"); 	for (i = 0; i < 10; i++) 		printf("%s\n", str[i]); 	return 0; } void sort(char s[10][6], int n)//这里的第一个维数10，加与不加都是不加的意思。 { 	int i, j; 	//char *p, temp[10]; 	//p = temp; 	char tmp[6]; 	//冒泡排序 	for (i = 1; i < n; i++) 		for (j = 0; j < n - i; j++) 			if (strcmp(s[j], s[j + 1])>0) 			{ 				strcpy(tmp, s[j]); 				strcpy(s[j], s[j + 1]); 				strcpy(s[j + 1], tmp); 			} }  既然是照着书打的，就不应该打错。 你的代码我试过了，确实是这样子的，能不能解释下之前的[+j+1]是什么意思

user: user-1
content: 另外排序算法的实现也是有问题的

user: user-1
content: scanf_s还需要一个参数指定缓冲区有多大：   scanf_s("%s",str[i], 6);   或者用scanf

user: user-2
content: 修改如下：  #include<stdio.h> #include<string.h> void sort(char s[][6], int n);  //第二个参数n是第一维的信息 int main() { 	int i; 	char str[10][6]; 	printf("input 10 strings:\n"); 	for (i = 0; i < 10; i++) 		scanf("%6s", str[i]); 	sort(str, 10); 	printf("now,the sequence is:\n"); 	for (i = 0; i < 10; i++) 		printf("%s\n", str[i]); 	return 0; } void sort(char s[10][6], int n)//这里的第一个维数10，加与不加都是不加的意思。 { 	int i, j; 	//char *p, temp[10]; 	//p = temp; 	char tmp[6]; 	//冒泡排序 	for (i = 1; i < n; i++) 		for (j = 0; j < n - i; j++) 			if (strcmp(s[j], s[j + 1])>0) 			{ 				strcpy(tmp, s[j]); 				strcpy(s[j], s[j + 1]); 				strcpy(s[j + 1], tmp); 			} }  既然是照着书打的，就不应该打错。

user: user-2
content: c数组本质 http://blog.csdn.net/zhangxiangdavaid/article/details/38111983
user-0 提问: 如何使用nRFgo Studio 生成自定义的 UUID？芯片是nRF51822

回复:
user: user-1
content: 仅供参考：#pragma comment(lib,"ole32") #include <objbase.h> #include <stdio.h> union U {     GUID            guid;     unsigned char   b[16]; } u; int i; char s[33]; void main() {     if (S_OK!=CoCreateGuid(&u.guid)) return;     for (i=0;i<16;i++) sprintf(s+i*2,"%02x",u.b[i]);     printf("GUID=%s\n",s);//每次结果都不一样 } //GUID=f5a44443aa5fb1479bf6741fa213d33c
user-0 提问: string 分配大空间(10K) 问题

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: 引用 2 楼 xionggch 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 你说的是c语言中的char*还有c++中的string类型。 前者，直接动态分配malloc等，即可。 后者，预分配空间不够，会自动分配，不用你管内存大小问题， 只管用就行了。  	string sz; 	sz = szXML + szBuf;  超过一定长度后面的数据会丢失[/quote]   不可能，你怎么看出他丢失了 你存的字符串是否包括'\0'等不可打印字符 如果你是通过输出到控制台查看的话，可能控制台下一次不能显示那么多字符串

user: user-3
content: 不至于吧，string的长度用的是size_t，现在都int64了，区区10K不在话下。 如果字符串中间有0是有可能被string截断的。 具体代码是怎样的？

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:你说的是c语言中的char*还有c++中的string类型。 前者，直接动态分配malloc等，即可。 后者，预分配空间不够，会自动分配，不用你管内存大小问题， 只管用就行了。  	string sz; 	sz = szXML + szBuf;  超过一定长度后面的数据会丢失

user: user-4
content: 你说的是c语言中的char*还有c++中的string类型。 前者，直接动态分配malloc等，即可。 后者，预分配空间不够，会自动分配，不用你管内存大小问题， 只管用就行了。

user: user-2
content: 不会的，你把不想关的代码先注释了，一步步排查原因

user: user-5
content: 直接用capacity()函数设置10m容量先试试行不行，还丢失的话就说明你的里边有特殊字符吧

user: user-0
content: 引用 4 楼 paschen 的回复:[quote=引用 2 楼 xionggch 的回复:] [quote=引用 1 楼 zhangxiangDavaid 的回复:] 你说的是c语言中的char*还有c++中的string类型。 前者，直接动态分配malloc等，即可。 后者，预分配空间不够，会自动分配，不用你管内存大小问题， 只管用就行了。  	string sz; 	sz = szXML + szBuf;  超过一定长度后面的数据会丢失[/quote]   不可能，你怎么看出他丢失了 你存的字符串是否包括'\0'等不可打印字符 如果你是通过输出到控制台查看的话，可能控制台下一次不能显示那么多字符串[/quote]  Debug跟踪查看的，szXML，szBuf都是string类型
user-0 提问: PRO*C执行一段字符串出问题

回复:
user: user-1
content: int IsInNBR(char *sMsisdn,char *sTable) {     int i=0;     char statement[500];     sprintf(statement,"SELECT COUNT(*) INTO :i FROM %s WHERE MSISDN='%s'",sTable,sMsisdn);     printf("statement:[%s]",statement);     EXEC SQL :statement;     //EXEC SQL COMMIT;     return i; }

user: user-0
content: 高手何在，自己顶啊。。。

user: user-0
content: 帖子就这么沉了吗。。。。
user-0 提问: 新手求教

回复:
user: user-1
content: 在MSDN里面搜： Initialization  An “initializer” is a value or a sequence of values to be assigned to the variable being declared. You can set a variable to an initial value by applying an initializer to the declarator in the variable declaration. The value or values of the initializer are assigned to the variable.   The following sections describe how to initialize variables of scalar, aggregate, and string types. “Scalar types” include all the arithmetic types, plus pointers. “Aggregate types” include arrays, structures, and unions.

user: user-2
content: C里面有intialize吗？说的清楚一些

user: user-3
content: 如果是object-c可以参考 http://m.blog.csdn.net/article/details?id=5607257

user: user-4
content: what? 说详细一点
user-0 提问: 为什么所有if-else if结构应该由else子句结束，而单个if就可以没有else?

回复:
user: user-1
content: if(n > 0)    return 1; else if(n == 0)    return 0; else if(n < 0)    return -1; 这个为什么编译器会显示错误呢? 这个不是所有的情况都考虑了吗？ 求指点

user: user-2
content: 有else 一定有if或者else if 有else if 一定有 if 不一定有else 有if  不一定就有else if 或者 else

user: user-3
content: 引用 17 楼 zhao4zhong1 的回复:本铁嘴预言：楼主不出十年，一定会遇到一次找了十几天终于找到是因为少些了一个else的bug。 些→写

user: user-4
content: 这种规则应该是一些公司的内部规则，这种规则一般制定出来就是为了预防出现bug 一般这类规则制定前，必然是出过问题在这个事情上 所以，要不要遵守看你自己 如果你所在公司给了你这个规范，那你必须遵守，不然扣钱没商量 如果你所在公司没给你规范，那你可以遵守可以不遵守，毕竟写代码不是打印，多写点没多大影响  语法正确与否和规范问题，是两码事

user: user-5
content: 如果认为else的情况一定不会出现，那么请在那个else分支打个日志，不知道多少人会死在这种一定不出现的情况．

user: user-3
content: 本铁嘴预言：楼主不出十年，一定会遇到一次找了十几天终于找到是因为少些了一个else的bug。

user: user-6
content: 引用 17 楼 zhao4zhong1 的回复:本铁嘴预言：楼主不出十年，一定会遇到一次找了十几天终于找到是因为少些了一个else的bug。应该都会有的

user: user-7
content: 不要被书误导了，估计书上担心你忘了考虑其他情况，但通常如果确实不需要else，那就不用加

user: user-6
content: 至于比较简短的代码，那是没问题的。  如果没有这种编程规范的话， 没有必要每个路径都去处理。  编程规范，往往是集体行为，个人也可以有。 但是如果跟集体的有冲突，往往要遵守集体的。

user: user-6
content: 这只是一种编程规范，如果你所在的公司，有这个规范，那么就遵守好了 至于原因， 主要是怕有的路径，没有处理， 造成结果是不确定的。  其实，如果if else if  有这个要求， 那么最好 if 也同样处理。  这种，有些路径没有处理的情况， 有时候，也是很难查找的。  尤其是   if,  if else if 这种控制结构，很多的代码段中 。

user: user-8
content: 怕你多条件判断，写多了忘记处理默认情况了。只有一个条件的话，不会忘记，但条件写多了就可能忘记。从语法上是没有任何强制规定的，那个只是建议性的规定，不是强制性的。

user: user-9
content: 引用 10 楼 flyrack 的回复:else{}   这是一个空语句  编译器会无视这样的语句  当它不存在   纯粹消耗时间和键盘而已   中国人就是规矩多  所以才会沦为东亚病夫  这都能扯到一起

user: user-9
content: 引用 2 楼 HeBanBei 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 也可以：  if else if else if //而没有else   嗯，语法上是可以的。可以编译通过。 但是一楼中还是建议不要这样写。我就不太清楚它的想法。[/quote] 都不满足if条件的情况。。。。怎么进行处理 看需求。需要不需要最后的else。

user: user-10
content: else{}   这是一个空语句  编译器会无视这样的语句  当它不存在   纯粹消耗时间和键盘而已   中国人就是规矩多  所以才会沦为东亚病夫

user: user-0
content: 引用 4 楼 flyrack 的回复:[quote=引用 2 楼 HeBanBei 的回复:] [quote=引用 1 楼 zhangxiangDavaid 的回复:]  if else if else if //而没有else  [/quote] 这种写法是必须的 比如下面这种  int n=9; if(n=m){n=0;} else if(n=l){n=1;} [/quote]  引用 6 楼 zhangxiangDavaid 的回复:有些时候，这种写法是必须的，比如4楼的例子。   这个例子完全可以改写成  int n=9; if(n=m){n=0;} else if(n=l){n=1;} else{}   现在的问题是，一楼中说到最好改成这样的。而我不理解为什么它这么说。 看大家的回复，都认为不需要改成这样子。

user: user-7
content: switch中同样不要求一定要有最后的default

user: user-7
content: 不需要写，除非有必要考虑这种情况，能保证在每个if都不匹配时不会导致结果的不正确就行了

user: user-11
content: else if 多了之后，容易搞不清最后剩下的情况是啥。

user: user-12
content: 有些时候，这种写法是必须的，比如4楼的例子。

user: user-10
content: 引用 2 楼 HeBanBei 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:]  if else if else if //而没有else  [/quote] 这种写法是必须的 比如下面这种  int n=9; if(n=m){n=0;} else if(n=l){n=1;}
user-0 提问: 请大大帮我看看我这段C源码的问题在哪？

回复:
user: user-1
content: for循环的条件应该是 比a小吧，要判断素数不是？

user: user-0
content: 嗯嗯  我知道，你的这个对了，谢谢，我说的是你前面的大大。

user: user-2
content: 引用 4 楼 w1782424840 的回复:3楼大大，你这个和我原来的问题一样，还是输出不对，但是我改了判断行为for (i = 2; i < a; i++)然后就可以了。原来为for (i = 2; ; i++)这个衡成立判断。  请把我写的看仔细，我已经帮你把循环改了

user: user-0
content: 3楼大大，你这个和我原来的问题一样，还是输出不对，但是我改了判断行为for (i = 2; i < a; i++)然后就可以了。原来为for (i = 2; ; i++)这个衡成立判断。

user: user-2
content: #include<stdio.h> int main() { 	int a, b, i; 	printf("请输入一个数；"); 	scanf("%d", &a); 	for (i = 2; i < a; i++) 		if (a%i == 0) 		{ 		printf("NO!\n"); 		break; 		}  	if (a == i) 	{ 		printf("YES!\n"); 	} 	return 0; }

user: user-3
content: 至少应该改成这样：  #include<stdio.h> int main() { 	int a, b, i; 	printf("请输入一个数:"); 	scanf("%d", &a); 	for (i = 2; ; i++) 		if (a % i == 0) 		{ 			printf("NO!\n"); 			break; 		} 	//if (a == (i - 1)) 	if(a == i) 	{ 		printf("YES!\n"); 	} 	return 0; }

user: user-3
content: 你是想判断素数/
user-0 提问: 怎么让指针加上一个数得到的结果是移动这个字节数

回复:
user: user-1
content: int *p; int *p1; p1=((char *)p)+1;

user: user-2
content: p=(int *)((int)p+1) int *可以是任何类型，1可以是任意数值

user: user-3
content: void *欢迎你

user: user-4
content: (char *)(unsigned long)x + 1;    // x 为任意指针 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!! 这样兼容 32位和 64 位的系统!!!!!!

user: user-5
content: ULONG_PTR

user: user-6
content: 指针可以强制转换类型的，char*就是字节移动的，这是个让人又爱又恨的东西

user: user-7
content: DWORD_PTR  需要包含上头文件 #include <windows.h>

user: user-7
content: 给你个通用的宏，32位下与64位下均正确   #define MakePtr(cast, ptr, addValue) ((cast)((DWORD_PTR)(ptr) + (DWORD_PTR)(addValue)))   cast是转换后的类型，ptr是你的指针，addValue是字节数

user: user-8
content: 引用 3 楼 zhao4zhong1 的回复:int *p; int *p1; p1=((char *)p)+1; 正解，类型转换，因为char*型的指针每次移动一个字节。
user-0 提问: openjudge 3394:身份确认

回复:
user: user-0
content: 其实我也是一样的思路啊，感觉这道题也玩不出什么花来，可就是不知道错了。 跟你唯一的区别就是计算1的位数的函数不一样： int bits_of_one(int n) { 	int retval = 0; 	while (n) 	{ 		retval += n % 2; 		n /=2; 	} 	return retval; }

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:修改16、17行  V = (unsigned int*)malloc(sizeof(unsigned int)*N); F = (unsigned int*)malloc(sizeof(unsigned int)*M);  额，依然wrong answer

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:修改16、17行  V = (unsigned int*)malloc(sizeof(unsigned int)*N); F = (unsigned int*)malloc(sizeof(unsigned int)*M);  28行应该是if (2 == bitCount(V[i]^F[j])) { 吧？ 不过改了以后还是wa。 代码写的很严谨，值得学习！

user: user-1
content: 修改16、17行  V = (unsigned int*)malloc(sizeof(unsigned int)*N); F = (unsigned int*)malloc(sizeof(unsigned int)*M);

user: user-1
content: 参考：  #include <stdio.h> int N, M; unsigned int *V, *F; int i, j; int hasRelation; int bitCount(unsigned int n) { 	int sum = 0; 	while (n) { 		n = n&(n - 1); 		sum++; 	} 	return sum; } int main(void) { 	if (2 == scanf("%d%d", &N, &M)) { 		V = (unsigned int*)malloc(sizeof(int)*N); 		F = (unsigned int*)malloc(sizeof(int)*M); 		if (V && F) { 			for (i = 0; i < N; i++) { 				if (1 != scanf("%u", V + i))return 0; 			} 			for (i = 0; i < M; i++) { 				if (1 != scanf("%u", F + i))return 0; 			} 			hasRelation = 0; 			for (i = 0; i < N; i++) 				for (j = 0; j < M; j++) { 					if (1 == bitCount(V[i]^F[j])) { 						hasRelation++; 					} 				} 			printf("%d\n", hasRelation); 			free(V); 			free(F); 		} 	} 	return 0; }
user-0 提问: tcp协议详解 协议 这本书的第2章的几个疑惑

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:不是还有4字节的crc检验码吗，那个中是网卡接收后做正确性验证的，如果不正确，数据包丢失。那4个字节wireshark抓不到。wireshark使用的是winpcap，这个在winpcap文档中有说明。  crc是指对整个frame(除了crc自身）外的数据都进行循环冗余校验码 吗？    另外： 问题2，能帮忙看看嘛？

user: user-1
content: 不是还有4字节的crc检验码吗，那个中是网卡接收后做正确性验证的，如果不正确，数据包丢失。那4个字节wireshark抓不到。wireshark使用的是winpcap，这个在winpcap文档中有说明。

user: user-0
content: up　起来啊，高手ne ?
user-0 提问: 对指针数组采用两种排序方法，结果竟然不一样，求教大神

回复:
user: user-0
content: 谢谢大家的帮助，我发现那个错误了，修改了发现是对的，就是问题出现在哪个;上

user: user-1
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/

user: user-2
content: 修改如下：  #include <stdio.h> #include <string.h> void rankArr(char *pr[], int n); int main(){ 	char *p[] = { "china","japan","tokyo","pairs","narry" }; 	int i; 	printf("排序前\n"); 	for (i = 0; i < 5; i++) 		printf("%s\n", p[i]); 	rankArr(p, 5); 	printf("排序后\n"); 	for (i = 0; i < 5; i++) 		printf("%s\n", p[i]); 	return 0; } void rankArr(char *pr[], int n){ 	char *tmp; 	int i, j, k; 	for (i = 0; i < n; i++){ 		k = i; 		for (j = i + 1; j < n; j++){ 			if (strcmp(pr[j], pr[k]) < 0) { 				k = j; 			} 		} 		if (k != i) { 			tmp = pr[i]; 			pr[i] = pr[k]; 			pr[k] = tmp; 		} 	} }

user: user-2
content: 排序前，请仔细理解各排序方法的原理： 选择排序 http://blog.csdn.net/zhangxiangdavaid/article/details/29844821 冒泡排序 http://blog.csdn.net/zhangxiangdavaid/article/details/30271613

user: user-3
content: 楼上所言极是。

user: user-4
content: 这样这个if相当于是执行了一个空语句，而下面大括号中的内容不管判断结果是什么都会被执行

user: user-4
content: if(strcmp(pr[i],pr[j])>0);  后面多了一个分号啊
user-0 提问: C语言代码求助

回复:
user: user-1
content: 引用 8 楼 xiaogang2567 的回复:为什么我在2010下编译没有错误。  因为你是.cpp 不是.c

user: user-2
content: 为什么我在2010下编译没有错误。

user: user-3
content: 是啊，不知道上面的几个都在说什么鬼

user: user-4
content: 我觉得你的是对的，可能微软对此不一样吧 ，建议用新的gets_s来代替（我也遇到过这种问题，最后还是用vs高版本成功的，我也不知道这有什么不一样）

user: user-1
content: 我靠，一大堆人在.........................   c99才只会变量可以随意位置定义

user: user-5
content: 因为这个函数是不安全，可能造成缓冲区溢出，所以现在建议用新的gets_s来代替 如果仍想用可以选择以下任何一种方法： 1、新建项目时不要勾选安全开发生命周期检查 2、在项目属性C/C++命令行中加上 /D _CRT_SECURE_NO_WARNINGS  不过如果是在VS2015上，就得用gets_s了，因为微软直接弃用gets了

user: user-6
content: 将main.c更名为main.cpp 在main.cpp最前面加一行： #pragma warning(disable:4996)

user: user-7
content: 在第一行代码处加上：  #define _CRT_SECURE_NO_WARNINGS

user: user-0
content: 找到问题所在了。VS2010必须在函数开始就定义所有变量，不能在中间定义变量。
user-0 提问: 引用

回复:
user: user-1
content: 因为已经有指针了,引用多此一举

user: user-2
content: 因为指针完全可以代替引用，C里是少了一些复杂的特性

user: user-3
content: 引用是指针的包装

user: user-4
content: 引用的本质也是指针，所以引用只是一种使用层面的创新

user: user-5
content: 其实，楼主的好奇心挺好的，就应该多问为什么，永远充满好奇心，不懂就问，没什么丢人的。

user: user-6
content: c语言为什么case后面要加break？

user: user-7
content: 不怎么混论坛，头次见问编程语言的设计问题的

user: user-8
content: 以前BS的书中提及, 引入引用是为了操作符重载 比如c=a-b 就很自然, 如果写成c=&a-&b就呵呵了,c没有操作符重载, 自然不需要这个

user: user-9
content: 因为 C 语言诞生的时候，没有伟大的你。

user: user-6
content: 鸡肋
user-0 提问: 用printf函数打印浮点数

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:prinf参数是传值，不是传地址  http://en.cppreference.com/w/c/io/fprintf谢啦版主，我好好看看

user: user-1
content: prinf参数是传值，不是传地址  http://en.cppreference.com/w/c/io/fprintf

user: user-0
content: 引用 1 楼 user-1 的回复:printf那句改成：printf("inch=%lf",inch);为啥这个要去掉&符？还有哪些变量在输出的时候跟整型变量有区别呢？

user: user-1
content: printf那句改成：printf("inch=%lf",inch);
user-0 提问: 新手求助（第一次发帖）

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

user: user-2
content: 格式与内容对应。

user: user-3
content: printf("name = %s,sex = %d,score = %f\n", pArr[i].name, pArr[i].sex, pArr[i].score);

user: user-0
content: 读入信息，输出时发生错误，什么原因？？？
user-0 提问: 一道c语言的简单题

回复:
user: user-1
content: 仅供参考： //输出第n个不含l这个数字的数，比如n是10，l是1的时候 //十个数应该依次是 2,3,4,5,6,7,8,9,20,22，所以输出数就应该是22 #include <stdio.h> #include <string.h> int n,l,i,k; char s[30]; int main() {     scanf("%d%d",&n,&l);     if (n<1 || n>100000000 || l<0 || l>9) return 1;     k=1;     for (i=1;i<200000000;i++) {         sprintf(s,"%d",i);         if (NULL==strchr(s,'0'+l)) {             if (k==n) {                 printf("%d\n",i);                 break;             }             k++;         }     }     return 0; }

user: user-0
content: 引用 1 楼 user-2 的回复:#include <iostream> #include<stdio.h> int main() {     int n,l,i,y,count=0,a;    	scanf("%d%d",&n,&l); 	{         for(i=1;i<=1000000;i++) 		{ 			int flag=0; 			a=i; 			while(a) 			{ 				y=a%10; 				a/=10; 				if(y==l) 					flag=1; 			} 			if(flag==0) 			{ 				printf("%d\n",i); 				count++; 			} 			if(count==n) 				break; 		} 		 	}     return 0; } 不是要输出所有的数，只需要输出第n个数，而且要多组数据测试啊_(:з」∠)_

user: user-2
content: #include <iostream> #include<stdio.h> int main() {     int n,l,i,y,count=0,a;    	scanf("%d%d",&n,&l); 	{         for(i=1;i<=1000000;i++) 		{ 			int flag=0; 			a=i; 			while(a) 			{ 				y=a%10; 				a/=10; 				if(y==l) 					flag=1; 			} 			if(flag==0) 			{ 				printf("%d\n",i); 				count++; 			} 			if(count==n) 				break; 		} 		 	}     return 0; }
user-0 提问: 一个c语言的题……写错了求助！

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你的 while 会把 i 搞成 0 ，然后 for 循环永远不能结束。 然后我又改了一下，如果有多组数据输入，只有第一组是对的其他的都不对了！怎么改啊_(:з」∠)_ #include<stdio.h> int main() {     int n,l,i,y,count=0,a;     while(scanf("%d%d",&n,&l)!=EOF)     {         for(i=1;i<=1000000;i++)     {         int flag=0;         a=i;         while(a)         {             y=a%10;             a/=10;             if(y==l)                 flag=1;         }         if(flag==0)         {             count++;         }         if(count==n)             break;     }     printf("%d\n",i);     }     return 0; }

user: user-0
content: 引用 1 楼 user-1 的回复:你的 while 会把 i 搞成 0 ，然后 for 循环永远不能结束。 谢谢！！！！我找了一个上午了QAQ终于弄对了

user: user-1
content: 你的 while 会把 i 搞成 0 ，然后 for 循环永远不能结束。
user-0 提问: VS2010 调试时出现“wifi.exe”: 已加载“C:\WINDOWS\SysWOW64\ntdll.dll”，已加载符号(去除源信息)。

回复:
user: user-1
content: 请问你是怎么解决的？谢谢

user: user-0
content: 好的，谢谢你们，已经解决。

user: user-2
content: 只是提示你程序运行过程中需要用到的本地类库

user: user-3
content: 和你不相干的东西，忽略掉 加载dll..

user: user-4
content: 眼不见为净！

user: user-5
content: 忽略这些消息
user-0 提问: 杭电p2023  不知道在哪有问题有时候是Time Limit Exceeded有时是runtime error (access_violation)  

回复:
user: user-0
content: 哦哦。找到错的地方了！！ 1.   double a[m] ;    double b[n] ;    数组长度不匹配 应该改为    double a[n] ;    double b[m] ; 2.if(sum[i][j] >= a[i])    比较的不对改为    if(sum[j][i] >= b[i])

user: user-1
content: 把sum移到外面作全局变量试试, 不确定oj对变长数组支持怎么样, 把a,b也移出试试

user: user-0
content: 第一次发帖  代码格式  没弄整齐  真心不好意识。。。

user: user-0
content: 自己顶下先！！！！
user-0 提问: 函数指针解释

回复:
user: user-1
content: 你的运算直接在calc函数里完成 主函数传入(a, b, '+') calc中先通过calc_func函数获取到对应的函数指针 下面int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用 然后调用fp(a,b)得到结果

user: user-2
content: int (*s_calc_func(char op)) (int , int)   {       return calc_func(op);   }  等价 FP_CALC s_calc_func(char op) {       return calc_func(op);   }

user: user-1
content: 引用 3 楼 yyang0514 的回复:[quote=引用 2 楼 paschen 的回复:] 你的运算直接在calc函数里完成 主函数传入(a, b, '+') calc中先通过calc_func函数获取到对应的函数指针 下面int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用 然后调用fp(a,b)得到结果 谢谢你的回复。 你说 “int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用” 是什么意思？ 我将它换为int (*s_fp)(int,int) =calc_func(op)  仍然能够正确运行。  我始终没有明白的是：calc_func(op)只返回了函数的首地址，如何将主调函数传给来a,b参数放进去的。[/quote]  calc_func只负责返回首地址了，我上面已经说了：在fp(a,b)这句这里才是调用 上面说的那句没用，就是你删了也可以

user: user-2
content: 引用 4 楼 yyang0514 的回复:[quote=引用 1 楼 akirya 的回复:] int (*s_calc_func(char op)) (int , int)   {       return calc_func(op);   }  等价 FP_CALC s_calc_func(char op) {       return calc_func(op);   } 谢谢你的回复。 我始终没有明白的是：calc_func(op)只返回了函数的首地址，如何将主调函数传给来a,b参数放进去的。[/quote]  fp(a,b); 这就是调用

user: user-0
content: 引用 2 楼 paschen 的回复:你的运算直接在calc函数里完成 主函数传入(a, b, '+') calc中先通过calc_func函数获取到对应的函数指针 下面int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用 然后调用fp(a,b)得到结果 引用 2 楼 paschen 的回复:你的运算直接在calc函数里完成 主函数传入(a, b, '+') calc中先通过calc_func函数获取到对应的函数指针 下面int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用 然后调用fp(a,b)得到结果 明白了。就是被那句int (*s_fp)(int,int) = s_calc_func(op);

user: user-0
content: 引用 1 楼 akirya 的回复:int (*s_calc_func(char op)) (int , int)   {       return calc_func(op);   }  等价 FP_CALC s_calc_func(char op) {       return calc_func(op);   } 谢谢你的回复。 我始终没有明白的是：calc_func(op)只返回了函数的首地址，如何将主调函数传给来a,b参数放进去的。

user: user-0
content: 引用 2 楼 paschen 的回复:你的运算直接在calc函数里完成 主函数传入(a, b, '+') calc中先通过calc_func函数获取到对应的函数指针 下面int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用 然后调用fp(a,b)得到结果 谢谢你的回复。 你说 “int (*s_fp)(int,int) = s_calc_func(op); 这句没什么用” 是什么意思？ 我将它换为int (*s_fp)(int,int) =calc_func(op)  仍然能够正确运行。  我始终没有明白的是：calc_func(op)只返回了函数的首地址，如何将主调函数传给来a,b参数放进去的。
user-0 提问: 一个简单的代码问题，求救！！

回复:
user: user-1
content: 输入的时候不能加空格

user: user-2
content: ...不需要...我错咯

user: user-2
content: 不需要数据转换咩 -_-

user: user-3
content: 请检查scanf的返回值。

user: user-4
content: #include<stdio.h> #include<windows.h> main() {     char c1,c2,c3;     int d1,d2,d3,sum;     scanf("%c %c %c",&c1,&c2,&c3);     d1=c1-65;     d2=c2-65;     d3=c3-65;     sum=d1*100+d2*10+d3;     printf("%d",sum);     system("pause"); }  A的ASCII为41(16进制)

user: user-5
content: 1#的解释是对的。  楼主，你原来的程序也是没有问题。只要你输入的数据之间不要写空格。 要连续输入几个字符。 如 （输入）123 （则会显示）123 是正常的。 或者你就按照1#的说法修改。。

user: user-0
content: 分别输入3，2，1三个数字字符时，d2为什么会等于-16？

user: user-6
content: scanf这句改成这样吧； scanf("%c %c %c",&c1,&c2,&c3); 输入的时候每个数字间用一个空格分开  你之前的代码会把空格也当一个字符保存到变量
user-0 提问: 关于VS2010创建DLL工程的问题，请教大神们。

回复:
user: user-1
content: DLL不能直接运行，需要有宿主EXE程序，但你的DLL文件应该已经生成了

user: user-2
content: 在MSDN里面搜“调试DLL”

user: user-3
content: dll 文件不能直接调试，必须以一个可执行文件来调试。
user-0 提问: C语言写的换算时区的代码，不知道错在哪，请大神指教！

回复:
user: user-1
content: switch后面需要一个大括号：   #include<stdio.h> int main() { 	int time,hour,minutes; 	printf_s("input BJT:\n"); 	scanf_s("%d",&time); 	minutes=time%100; 	hour=time/100-8; 	switch(hour) 	{     case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8': 	case'9':case'10':case'11':case'12':case'13':case'14':case'15':case'16': 		printf_s("UTC:%d%d",hour,minutes); 		break ; 	case '0': 		printf_s("UTC:%d",minutes); 		break ; 	case '-1':case '-2':case '-3':case '-4': 	case '-5':case '-6':case '-7':case '-8': 		hour=24+hour; 		printf_s("UTC:previous day %d%d",hour,minutes); 		break ; 	} 	return 0; }
user-0 提问: 进制转换问题？？？

回复:
user: user-1
content: 观察：  int main(void) { 	int i, n; 	char str[] = "0123d"; 	sscanf(str, "%d%n", &i, &n); 	printf("i=%d,n=%d\n", i, n); 	return 0; } //i=123,n=4  结果： %n用于获取读到的字符数

user: user-2
content: 演示如何处理保存在一个字符串中的任意间隔字符间隔的，且事先不知道共有几组的一组数。

user: user-1
content: 引用 7 楼 vshuo7013 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] 仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);          ？？？//%n         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 ？？？？ //k,v,n=0,123,3 ？？？？ //skip char[ ] //k,v,n=0,123,3 ？？？？ //skip char[a] //k,v,n=0,123,3 ？？？？ //skip char[b] //k,v,n=1,4,2  ？？？？ //k,v,n=-1,4,2  ？？？？ //End.  赵4老师，%n是什么意思啊！还有不明白您的意思！！！ [/quote] 多搜索！

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);          ？？？//%n         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 ？？？？ //k,v,n=0,123,3 ？？？？ //skip char[ ] //k,v,n=0,123,3 ？？？？ //skip char[a] //k,v,n=0,123,3 ？？？？ //skip char[b] //k,v,n=1,4,2  ？？？？ //k,v,n=-1,4,2  ？？？？ //End.  赵4老师，%n是什么意思啊！还有不明白您的意思！！！

user: user-2
content: 仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-1
content: int main(void) { 	int i; 	char *AD = "00030020010005a"; 	sscanf(AD, "%x", &i); 	printf("%d", i); 	return 0; } //1048666

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:char *AD = "0003,002,0010,005a"; 字符串中一共几个数啊 这是一个数

user: user-3
content: 参看：http://blog.csdn.net/ixidof/article/details/6081217

user: user-1
content: char *AD = "0003,002,0010,005a"; 字符串中一共几个数啊

user: user-4
content: 参考一下吧！ int convert(char* data) { 	int Res = 0; 	char* p = data; 	while (*p != '\0') 	{ 		if (*p >= '0' && *p <= '9') 			Res = Res * 16 + *p - '0'; 		else if (*p >= 'a' && *p <= 'f') 			Res = Res * 16 + *p - 'a' + 10; 		else if (*p == ','){} 		else 			return -1; 		p++; 	} 	return Res; }
user-0 提问: 请教一个小问题

回复:
user: user-1
content: strcpy不允许dest为空

user: user-2
content: 可以是空字符串，如""，但不能是空指针  另外strcpy具体讲解可以看：http://en.cppreference.com/w/c/string/byte/strcpy

user: user-3
content: char* strcpy(char* des,const char* source)  {  	char* r=des;     	_ASSERT((des != NULL) && (source != NULL));   	while((*des++ = *source++)!='\0');   	return r; 	  strcpy函数原型，你会发现while((*des++ = *source++)!='\0');这一句很有意思

user: user-4
content: 试试：  #include <stdio.h> #include <stdlib.h> #include <string.h> void main() { 	char *p = "abc"; 	//char *q = NULL; 	char q[20]; 	strcpy(q, p); 	printf("p=%s   q=%s \n", p, q); }

user: user-0
content: 引用 楼主 NotSimpleEasy 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h> void main() {   	char *p="abc"; 	char *q=NULL; 	strcpy(q,p); 	printf("p=%s   q=%s \n",p,q); }  这段程序运行之后为什么会挂掉？ 好久没用strcpy哪里出错了？ 需要动态申请么？还是去掉“NULL”？都不行啊

user: user-5
content: q没有分配地址
user-0 提问: 刚学请教一个小问题

回复:
user: user-1
content: 有一个主函数，现在刚学一般都只用主函数，等看到函数调用就有很多函数啦

user: user-2
content: 你可以把视频中创建工程的画面截个图，视频应该是创建的MFC，而你创建的是win32控制台程序。 如果想系统的学习C语言，建议从黑框框开始，如果只是想快速的写些小程序的话，不如直接去学易语言

user: user-3
content: 没有入口函数，写个入口函数，然后把你的代码放进去

user: user-4
content: 需要写在函数里面，放在全局区是错的

user: user-5
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-5
content: #include <stdlib.h> int main() {     system("calc");     return 0; }

user: user-5
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-5
content: 引用 9 楼 xnini632d 的回复:不放在main()里也成？求放上个视频截图来，膜拜下 没准C++11111标准出来后就真成了！

user: user-6
content: 不放在main()里也成？求放上个视频截图来，膜拜下

user: user-0
content: 视频里也没放，直接调试了，要做一个按钮，出计算器，可我就不对。

user: user-7
content: 这个语句应放在函数中。

user: user-0
content: 视频里没放那个，但就好使了，是要做一个按钮，按了出计算器。

user: user-5
content: 你没放在 int main() { …… } 中。
user-0 提问: 关于 注册与登录 功能的问题，求解释；

回复:
user: user-0
content: 我知道了，问题出现在这里： if(strcmp(users[i].mageraccount,ac)==0)         {             if(strcmp(users[i].magerpassword,pw)==0)                 break;        当我第一次密码或账号输错时，选择返回输入，程序执行magerlogin(即函数调用自身)，输入正确的账号和密码时，就会break，但此时只是break出了被调函数的magerlogin的while循环，而没有break出主调函数中的while循环（break只能跳出一层循环），此时主调函数的while循环已经完成了一次循环，由于在被调函数magerlogin后没有break，因此程序继续执行while循环，此时主调函数magerlogin中的ac与pw没有被重新赋值，因此会显示出与之前相同的结果。        解决方法： 一丶 if(strcmp(users[i].mageraccount,ac)==0)         {             if(strcmp(users[i].magerpassword,pw)==0)                 mager(); 即调用其他函数； 二丶  将  if(f==1)                     magerlogin(); 改成  if(f==1){                     magerlogin();                     break;               }

user: user-1
content: 仅供参考 。 #include<stdio.h> #include<stdlib.h> #include<string.h>  void magerlogin() {     char ac[20], pw[20]; 	typedef struct users { 		char mageraccount[20]; 		char magerpassword[20]; 	} User; 	User users[100];     int i, f, count = 0, loginOK = 0; 	 	FILE *fp = fopen("userdata.dat", "rb+"); 	if(!fp) { 		printf("无法打开文件\n");		 		exit(0); 	}  	i = 0;     while(fread(&users[i++], sizeof(User), 1, fp) == 1); 	fclose(fp); 	count = i; 	     system("cls");     printf("             登录\n");     printf("------------------------------\n");     printf("    账号：");     scanf("%s", ac);	     printf("    密码：");     scanf("%s", pw);	     printf("------------------------------\n");	     	     i = 0; 	while(1) { 		while(i < count) { 			loginOK = (strcmp(users[i].mageraccount, ac) == 0) && (strcmp(users[i].magerpassword, pw) == 0); 			if(loginOK) break; 			i++; 		} 		if(loginOK) break; 		printf("账号或密码错误!\n"); 		printf("0.返回主菜单  1.返回输入\n请选择序号：\n"); 		scanf("%d", &f); 		if(f == 1) { 		    i = 0; 			coutinue; 		} 		break; 	} }

user: user-2
content: 单步跟踪调试，观察每一步变量怎么变化的

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

回复:
user: user-1
content: 1，在分配内存处加错误处理if(NULL == q) ...。 2，用GDB或其他调试工具，检查是否有其他地方有越界访问。

user: user-2
content: 将一个比如100GB的文件当作一个100GB的数组操作。 FILE *fb; fb=fopen("A100GB.bin","rb+");  读数组 unsigned char Value=BigArray[Index]; 对应 _fseeki64(fb,Index,SEEK_SET); fread(&Value,1,1,fb);  写数组 BigArray[Index]=Value; 对应 _fseeki64(fb,Index,SEEK_SET); fwrite(&Value,1,1,fb);  fclose(fb);

user: user-3
content: 建议在每次malloc动态申请内存之后判断下q的值，先看下是否申请成功，如果因为异常情况，某一次内存申请失败了，那么q的值就是NULL了，但是你却当做正常情况去使用了，那么也会导致段错误。另外while循环外和循环内都有q=()malloc();看着感觉好重复，建议改成do...while循环

user: user-4
content: 可能你电脑内存不够存那20万行数据

user: user-0
content: 我是新手不太懂 能给我写一下代码吗？？

user: user-2
content: 用文件读写模拟内存读写。

user: user-0
content: 我用的虚拟机 有60个G的内存 应该怎么改呢

user: user-5
content: 会不会是内存不够, 20万行就是200K行,就是0.2M行, 如果sizeof(word)为1K, 就是0.2G了.
user-0 提问: 这个是 刚刚发错了  为什么最后可以用buffer输出去除空格和标点的字符串数组

回复:
user: user-1
content: char *input = buffer; char *output = buffer; 去除空格和标点，是在buffer上直接修改的，就是常说的原址进行。处理完后，buffer由输入的字符串，变成了处理后的字符串了

user: user-2
content: 你代码中的这段就实现了在相同的缓冲区中去掉了空格：   	while(*input != '\0') 	{ 		if(ispunct(*input) || isspace(*input)) 		{ 			++input; 			continue; 		} 		else 			*output++ = *input++;  	} 	*output = '\0';

user: user-3
content: 除去字符串中标点或空格：  #include <stdio.h> #include <ctype.h> char *fun(char *str) { 	int i, j; 	i = j = 0; 	while (str[i] = str[j++]) { 		if (!(ispunct(str[i]) || isspace(str[i]))) { 			i++; 		} 	} 	return str; } int main(void) { 	char str[] = "zh,a.ng x'iang"; 	printf("%s\n", fun(str)); 	return 0; } //zhangxiang

user: user-4
content: 第二个while里面的if    else  有两个指针访问数组。一个指针input负责遍历数组找异常字符，另一个指针output负责纠正异常字符

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

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

user: user-2
content: c[0] = ... ; c[1] = ... ; 都没有改字符串，只是把另一个字符串常量的首地址存入指针数组元素中了，或者说，给指针变量赋值了

user: user-3
content: 常量区的数据不可更改  你两次编译的程序没有任何可经性

user: user-4
content: 理解 char *c[5]; 的含义：c是一数组，数组元素个数是5，每一个元素的类型是char *，对吗？ 而c[1] = "cccc"; 改变的不是什么常量区，改变的只不过是元素c[1]的值。  至于&c[i]和c[i] ? &c[i]是元素c[i]的地址，数组不变，元素地址自然不会变，对吗？

user: user-5
content: &c[i]和c[i]是不一样的 c是一个数组，数组存储的是char* 指针，对于&c[i]这个指的是数组c第i个元素的地址，    printf("%p\n",c[0]);     printf("%p\n",c[1]);     printf("%p\n",c[2]); 而上面指的是，数组c中第i个元素指向的指针，改变了c中元素的值，上面的数据自然会发生变化
user-0 提问: WM_CREATE消息和GetMessage函数的疑问

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:消息分同步消息和异步消息， 异步消息是放到消息列队中，GetMessage就是循环处理消息队列中的异步消息，如果没有Get并remove，消息自然是还在队列里的，怎么可能会执行不到？ 而同步消息不走消息队列，而是直接调用窗口事件处理回调函数。 至于WM_CREATE到底是同步还是异步，我不记得了，反正不会丢失就是。 刚才我也看到了，getmessage是针对用户输入的

user: user-1
content: 在《Windows环境下32位汇编语言程序设计》这本书中专门说到了这个问题，并不是所有的消息都是经过消息循环的，你注释了DispatchMessage后，窗口过程仍能接收到一些消息，他们是WINDOWS直接调用的  具体内容我帮你搜索到了，可以看：http://www.docin.com/p-1017074976.html， 只用看链接中实验二的部分

user: user-2
content: 消息分同步消息和异步消息， 异步消息是放到消息列队中，GetMessage就是循环处理消息队列中的异步消息，如果没有Get并remove，消息自然是还在队列里的，怎么可能会执行不到？ 而同步消息不走消息队列，而是直接调用窗口事件处理回调函数。 至于WM_CREATE到底是同步还是异步，我不记得了，反正不会丢失就是。

user: user-2
content: 引用 2 楼 agfav12 的回复:[quote=引用 1 楼 user-2 的回复:] 消息分同步消息和异步消息， 异步消息是放到消息列队中，GetMessage就是循环处理消息队列中的异步消息，如果没有Get并remove，消息自然是还在队列里的，怎么可能会执行不到？ 而同步消息不走消息队列，而是直接调用窗口事件处理回调函数。 至于WM_CREATE到底是同步还是异步，我不记得了，反正不会丢失就是。 刚才我也看到了，getmessage是针对用户输入的[/quote] 那可不一定，WM_PAINT也是异步的。
user-0 提问: 求教，链表出现问题，本人实在想不出什么原因了

回复:
user: user-1
content: p1 = scanf_s(...) 这句中把 p1 = 去掉

user: user-2
content: 是不是链表的next指针没有赋空，如果这样的话，可能会有越界的异常

user: user-3
content: malloc失败了，再试试呗

user: user-0
content: 谢谢楼上两位，还是自己粗心，错的真多
user-0 提问: 大家来挑错

回复:
user: user-1
content: 就程序本身来说没看出什么错误。如果按功能说，也请楼主说明目的。

user: user-2
content: #include<stdio.h> void main() { 	int a, b, c; 	int i; 	for (i = 100; i<1000; i++) 	{ 		a = i % 10; 		b = (i / 10) % 10; 		c = (i / 100) % 10; 		if (a*a*a + b*b*b + c*c*c == i) 			printf("%d\t\n", i); 	} }

user: user-3
content: c～ i/100，嘻嘻，在这里也能找到你

user: user-4
content: 楼上正确！

user: user-5
content: c = i / 100;

user: user-6
content: 这个是水仙花吧