Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 脚本中嵌入正则表达式的一个小问题

回复:
user: user-1
content: 引用 9 楼 N_sev7 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] 如果sed支持用\t代表Tab字符的话： sed -i.bk -e 's/long[ \t][ \t]*longitude/int32_t longitude/g' $i  s/(^| |	|\(|,|<)unsigned( |	)long( |	|\*|\)|>|&|,)/\1uint32_t\3/g  这个表达式大体上我明白，但是(^| |	|\(|,|<)中标红的那个符号表示什么意思呢？[/quote] 不就是将 行首开始的“空格、Tab、(、,、<”＋"unsigned"＋空格、Tab＋“long"＋”空格、Tab、*、)、>、&、,“ 替换为 行首开始的“空格、Tab、(、,、<”＋”uint32_t“＋”空格、Tab、*、)、>、&、,“ 吗？

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:如果sed支持用\t代表Tab字符的话： sed -i.bk -e 's/long[ \t][ \t]*longitude/int32_t longitude/g' $i  s/(^| |	|\(|,|<)unsigned( |	)long( |	|\*|\)|>|&|,)/\1uint32_t\3/g  这个表达式大体上我明白，但是(^| |	|\(|,|<)中标红的那个符号表示什么意思呢？

user: user-1
content: 如果sed支持用\t代表Tab字符的话： sed -i.bk -e 's/long[ \t][ \t]*longitude/int32_t longitude/g' $i

user: user-1
content: 引用 5 楼 N_sev7 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] sed -i.bk -e 's/long longitude/int32_t longitude/g' $i 因为有些人写代码的时候喜欢用空格，有些人喜欢用Tab键， 直接这样“sed -i.bk -e 's/long longitude/int32_t longitude/g' $i”写应该不行吧[/quote] 宰了那些用Tab键的人！

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 5 楼 N_sev7 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] sed -i.bk -e 's/long longitude/int32_t longitude/g' $i 因为有些人写代码的时候喜欢用空格，有些人喜欢用Tab键， 直接这样“sed -i.bk -e 's/long longitude/int32_t longitude/g' $i”写应该不行吧[/quote] 宰了那些用Tab键的人！[/quote] 我也想，可是小鬼子离得太远了

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:sed -i.bk -e 's/long longitude/int32_t longitude/g' $i 因为有些人写代码的时候喜欢用空格，有些人喜欢用Tab键， 直接这样“sed -i.bk -e 's/long longitude/int32_t longitude/g' $i”写应该不行吧

user: user-0
content: 引用 3 楼 user-2 的回复:\1用来做什么的 就是想写一个32位到64位移植用的脚本 把一些数据类型做个替换

user: user-1
content: http://www.cnblogs.com/edwardlost/archive/2010/09/17/1829145.html

user: user-1
content: sed -i.bk -e 's/long longitude/int32_t longitude/g' $i

user: user-2
content: \1用来做什么的
user-0 提问: 一道题两种解法时间复杂度的比较

回复:
user: user-1
content: 引用 2 楼 user-5 的回复:网上做法可以进一步优化， 比如，x和y的绝对值无论如何都不可能大于积 m的绝对值的。5 4 这个输入只要查 -4 到 4就行了，不用 -9999到9999  恩，还可以进一步优化，5 4这个输入，只需要查-2到2就行了 因为x*y=m, 那么x,y两个中间必有一个的绝对值小于等于sqrt(abs(m));， 当m普遍比较大时，也能省不少计算

user: user-2
content: int n = 0,m = 0;     int x = 0,y = 0;     int k = 0;     int k2= 0;  //x+y =n //x-y =k  //x= (n+k)/2     for(cin>>n>>m; n!=0 && m!=0 ;cin>>n>>m)     {         k2 =n*n -4*m;         //cout <<"n="<<n<<",m=" <<m<<",k2="<<k2<<"k="<<k<<endl;          if(k2<0){             cout<< "No "<<endl;         }         else {             k =sqrt(k2);// 用移位算法，大约16 次移位            // cout <<"n="<<n<<",m=" <<m<<",k2="<<k2<<"k="<<k<<endl;              if(k*k !=k2)             {                 cout <<"No"<<endl;             }             else {                     x = n + k;                     y = n - k;                     if((x&1 )==1 )cout<<"No"<<endl;                     else cout<<"Yes"<<endl;//<<" x="<<x/2 <<",y = "<<y/2<<endl;             }         }     }  这个算法理论上，应该是  O(1)的

user: user-2
content: x -y = sqrt( (x+y)*(x+y) -4* x*y)  x = (（x+y） +(x-y))/2 y = (x+y -(x-y))/2;         这一步，用奇偶性判断 x,y 是否整数   1) (x+y)*(x+y) -4* x*y >0  2)  (x+y)*(x+y) -4* x*y  是个 完全平方数 这一步，可以采用移位开平方方法计算，有余数为假  也可以简单点，用浮点数开方 如果 (x-y) *(x-y ) =   (x+y)*(x+y) -4* x*y   是个 完全平方数

user: user-2
content: 这个解一元二次方程，看有没有整数解即可

user: user-3
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-4
content: judge是什么? judge的额外算法维度决定了你的算法相对于第二种算法的额外维度

user: user-5
content: 网上做法可以进一步优化， 比如，x和y的绝对值无论如何都不可能大于积 m的绝对值的。5 4 这个输入只要查 -4 到 4就行了，不用 -9999到9999

user: user-5
content: 网上的做法比lz少了很多if else判断，大量计算，还有judge的调用。就算都是O（n），对方每一次的时间花销都比你的代码小多了。  而且，网上直接用公式做，简单明了。 x+y = n =》 y = n - x 然后x×y = m =》 x × （n - x） = m 就是 if(i*(n-i) == m)   这个判断  lz的没仔细看，不知道是怎么算的。
user-0 提问: 一个很奇怪程序溢出的问题

回复:
user: user-0
content: 引用 5 楼 Evankaka 的回复:你的快排我感觉有问题 这里两句：  sort(input, min, i);         sort(input, j + 1, max);  不是一般都写成：  sort(input, min, i-1);         sort(input, i+ 1, max);?? 对对对，我就是这里出了问题，现在改回来了，谢谢

user: user-0
content: 噢噢噢噢，谢谢上面的几位，根据你们的方法  我知道为什么那里是空行的了因为是递归调用，但是第一次的key的strcmp是最大的话，j+1就会溢出，直接跳过所有的语句，所以我看不到错误在哪  谢谢各位，我学习到了新的知识

user: user-1
content: 你的快排我感觉有问题 这里两句：  sort(input, min, i);         sort(input, j + 1, max);  不是一般都写成：  sort(input, min, i-1);         sort(input, i+ 1, max);??

user: user-0
content: 栈堆告诉我说出错的是哪里，在getsreport里面大概是说可以用cookie储存什么额外指针  然后我转到我的代码行，可是是空的，我不知道是什么错误

user: user-2
content: 断点到这里后，查看堆栈，知道看到自己的代码行，就可以看到是什么溢出了。

user: user-0
content: 好，我看看，所有的崩溃都可以这么看吗

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 运算符重载，提示未声明。

回复:
user: user-1
content: // CCTest.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h"   #include <intrin.h> #include <iostream> class CMyString { public: 	CMyString(char* pData=nullptr); 	CMyString(const CMyString& str); 	~CMyString(void);  	void print(CMyString& str1) 	{ 		std::cout<<str1.m_pData<<std::endl; 	} protected: private: 	char* m_pData;  public: 	CMyString& operator=(const CMyString& str); };  CMyString::CMyString(char* pData){ 	this->m_pData = new char[200]; 	if(pData != NULL){ 		memcpy(this->m_pData,pData,strlen(pData)); 	} } CMyString::~CMyString(){ 	delete m_pData; } CMyString& CMyString::operator=(const CMyString& str) { 	this->m_pData = new char[200]; 	this->m_pData = str.m_pData; 	return *this; }  void main() { 	CMyString m_str="ceshi"; 	CMyString strTmp2; 	CMyString strTmp3; 	strTmp2=m_str; 	strTmp3.print(strTmp2); 	getchar(); } 你这个用到的m_pData未申请任何存储空间，指向有问题。所以给你稍加改动了一些

user: user-2
content: CMyString(char* pData=nullptr);也一样没实现 这两个函数都是需要的

user: user-2
content: CMyString(const CMyString& str); 没实现啊 这个 operator = 是否有问题 关键就和这个拷贝构造函数有关

user: user-3
content: 看错了，无视吧

user: user-4
content: if ((void const *)this!=(void const *)&str)

user: user-0
content: 引用 1 楼 pengzhixi 的回复:看你operator=的实现吧，问题就在实现里面 还是不明白啊，能说具体点吗。这段代码是书上的，只不过书上就写了一下函数的实现和构造函数。我想写个main函数调用一下试试的。

user: user-3
content: 看你operator=的实现吧，问题就在实现里面

user: user-0
content: 引用 3 楼 user-4 的回复:if ((void const *)this!=(void const *)&str) 不对啊。
user-0 提问: 在多核时代还有办法测试程序运行的cpu周期数吗，rdtsc还能用吗

回复:
user: user-1
content: 操作系统统计里面本来就用cpu统计了，再精确的估计是没有了。

user: user-2
content: 可以指定线程在哪个CPU核心上运行,依然无法得出正确结论 不过第一要保证, 全部代码在物理内存运行, 二要保证不存在缓存不命中的情况 三要保证不存在线程切换 这样看来根本就没有好办法  假设能保证以上没问题, 最好的方法是自己做个实时,单用户,单任务操作系统 直接跑你的代码 rdtsc指令本身是没有问题的, 有问题的是 你的待测程序的指令序列 能否保证不中断的, 连续的运行在一个CPU核心上 以及能否全速运行(不存在高速缓存不命中问题), 另外,绝对不能有换页操作

user: user-0
content: 由于存在流水线技术，反汇编和实际运行周期数不一致的

user: user-2
content: 感觉反汇编出来比较靠谱 直接看汇编代码的时钟周期数

user: user-3
content: 可以申请独占cpu嘛，能不能实现你想要的效果就不知道了

user: user-4
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-5
content: 你把测试时间的线程设置下线程亲和性, 让这个线程只跑在一个 CPU 上就是了.   pthread_setaffinity_np/SetThreadAffinityMask 啥的...  最简单的还是把你的测试跑个 几千次, 直接用 clock/GetTickCount 的精度就够了...

user: user-4
content: 引用 1 楼 zhao4zhong1 的回复:无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！ 信中哥，得永生。

user: user-0
content: 我用测试一个流密码的速度，要求必须是cycle/bite，所以必须要测试时钟周期数，并且我看其他人的数据也是在多核的情况下测试的cpu时钟周期，有啥方法吗
user-0 提问: 《嗨翻C语言》里关于地图上画坐标的问题

回复:
user: user-1
content: 调试下你的程序。  另外， 如果你是C语言初学者，还是别看这本书了。老老实实看那几本经典教程吧。

user: user-1
content: 地图打开后应该定位到 麻省理工 那边。和图里的一样，就是没有那一串坐标。这应该不是你的C程序问题了

user: user-1
content: 用你的数据试了下，至少js代码是能运行的。定位到的位置看上去也和图里的地图差不多。  说不定google地图接口变了，或者那个网页的js代码本来就有问题。

user: user-1
content: 引用 2 楼 aceydbm 的回复:这本书早就买了一直没看，经典的教程都已经看过三遍了，所以现在才来看这本书。 怎么调试？可以具体一点吗？ output.json 这个是C程序输出的文本吧。  如果这个文本（编码和内容）的格式不对，那么调试c程序。  如果这个文本格式是对的，那么你可以去看看他的html，js的代码是不是有问题。书的例子里如果有自带的数据文件，直接用书里的试试看。

user: user-0
content: 这本书早就买了一直没看，经典的教程都已经看过三遍了，所以现在才来看这本书。 怎么调试？可以具体一点吗？
user-0 提问: 关于malloc麻烦大家看下我这段代码放了什么低级错误,谢谢！

回复:
user: user-0
content: 引用 1 楼 kino_chen 的回复:1.number的定义呢？ 2.p先指向malloc的空间，后来指向a，内存泄露了。 3.*(p+1)这个时候，指向的是&a之后的内存了，怎么能随便写 4.free(p)，这时候就是free(&a)了，怎么可能不错 5.好好看看基础书籍谢谢，明白了。。看来基础是不好

user: user-1
content: 1.number的定义呢？ 2.p先指向malloc的空间，后来指向a，内存泄露了。 3.*(p+1)这个时候，指向的是&a之后的内存了，怎么能随便写 4.free(p)，这时候就是free(&a)了，怎么可能不错 5.好好看看基础书籍
user-0 提问: 在线等   大神们给看看，本人是菜鸟。需要用c语言解答

回复:
user: user-1
content: 真不好意思！没看明白！

user: user-2
content: 所谓按升序排列返回 是输出么   还是存储

user: user-2
content: 同上  我也感觉是这样 问题描述不清，如果是这样 不是很简单么

user: user-3
content: 没看懂问题。是指 1 5 3 7 5 6中找出 5 3 7，然后按3 5 7输出？

user: user-2
content: 你的意思是一串整型数据 int  a,b,c,d,看其中是否存在某个数？
user-0 提问: sscanf语句读取字符串信息

回复:
user: user-0
content: 多谢指导，OK了

user: user-1
content: 请判断sscanf函数的返回值。 请限制sscanf函数中字符串的最大长度。  ret=sscanf(data_buff,"%*[^\"]\"%9[^\"]\",\"%10[0-9]\",\"\",\"%23[^\"]\"%511s\r\n",Msg_REC,Msg_tele_no,Msg_time,Msg_content);           printf("ret from CMGR: %d\n",ret);//打印出匹配的参数个数 if (ret==4) {     printf("Msg_REC from CMGR: %s\n",Msg_REC);     printf("Msg_tele_no from CMGR: %s\n",Msg_tele_no);     printf("Msg_time from CMGR: %s\n",Msg_time);     printf("Msg_content from CMGR: %s\n",Msg_content); } else {  printf("Format error:%s",data_buff); }

user: user-2
content: ret from CMGR: 4 Msg_REC from CMGR: REC UNREAD Msg_tele_no from CMGR: 1008611 Msg_time from CMGR: 14/12/22,17:29:02+32 Msg_content from CMGR: 60A8672C6708901A4FE18D3900320034002E003700345143FF0C4F599 89D00310031002E003800385143FF0C52694F59901A8BDD5206949FFF1A54085BB66B224F5900310 039003500355206949FFF0C00567F5153056708595799104F5900310030003000305206949F30025 2694F594E0A7F516D4191CF002F65F6957FFF1A770151850033

user: user-2
content: Msg_Time[20]太短了，20个字符不够，我改成24了   #include <stdio.h> char data_buff[] = "AT+CMGR=23\r\n+CMGR: \"REC UNREAD\",\"1008611\",\"\",\"14/12/22,17:29:02+32\"\r\n60A8672C6708901A4FE18D3900320034002E003700345143FF0C4F59989D00310031002E003800385143FF0C52694F59901A8BDD5206949FFF1A54085BB66B224F5900310039003500355206949FFF0C00567F5153056708595799104F5900310030003000305206949F300252694F594E0A7F516D4191CF002F65F6957FFF1A770151850033\r\n";  char Msg_REC[10] = {0};//短信标识，是否已经读取过此短信  此字符串应为“REC UNREAD” char Msg_tele_no[11] = {0};//短信号码  此字符串应为"1008611" char Msg_time[24] = {0};//短信接收时间  此字符串应为"14/12/22,17:29:02+32" char Msg_content[512] = {0};//短信内容，unicode编码形式 此字符串应为60A8672......  int main(void)  {  	int    ret; 	 	//ret = sscanf(data_buff,"%*[^\"]%s\",\"%s\",\"\",\"%s\"%s",Msg_REC,Msg_tele_no,Msg_time,Msg_content); 	ret = sscanf(data_buff,"%*[^\"]\"%[^\"]\",\"%[0-9]\",\"\",\"%[^\"]\"%s\r\n",Msg_REC,Msg_tele_no,Msg_time,Msg_content); 	 	printf("ret from CMGR: %d\n",ret);//打印出匹配的参数个数 	printf("Msg_REC from CMGR: %s\n",Msg_REC); 	printf("Msg_tele_no from CMGR: %s\n",Msg_tele_no); 	printf("Msg_time from CMGR: %s\n",Msg_time); 	printf("Msg_content from CMGR: %s\n",Msg_content); 	 	return(0);  }
user-0 提问: fseek文件定位问题?

回复:
user: user-1
content: 引用 3 楼 zhao4zhong1 的回复:楼主听谁说的123可以插入到456前面的？  所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。+1,楼主没看书。。。

user: user-2
content: 数据写入文件后，要想往前面插数据，可以先获得文件大小x，然后加上你要新插入的数据大小y, 然后malloc(x+y)的buffer，把新数据写进buffer，然后把文件中的数据全部读出来，跟着新数据也写进buffer，只不过在新数据后面，然后把文件指针移动到文件开始处，把整个buffer写进去。就可以实现你这个功能需求了。  你确定非要这么干吗？？再也想不出比这更烂的日志写法了

user: user-0
content: 如何实现先写456，后写123。最后文件内容为123456 应用举例：log文本，写入日期时间和发生的事件。最近的时间在文本最上面。 例如：2014-12-28 14:00:00 step 4 run             2014-12-28 13:00:00 step 3 run             2014-12-28 12:00:00 step 2 run             2014-12-28 11:00:00 step 1 run

user: user-3
content: 引用 3 楼 zhao4zhong1 的回复:楼主听谁说的123可以插入到456前面的？  所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。 赵老师正解

user: user-4
content: 楼主听谁说的123可以插入到456前面的？  所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。

user: user-5
content: 你都重新定位到文件开头了，自然就覆盖了

user: user-6
content: 引用 3 楼 zhao4zhong1 的回复:楼主听谁说的123可以插入到456前面的？  所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。 纯粹误人子弟啊！

user: user-7
content: fseek定位没有问题，ret返回了0；123覆盖了456
user-0 提问: [硬盘容量]看题,快来节分

回复:
user: user-0
content: 引用 5 楼 hnwyllmm 的回复:楼主这个是大学计算机组成原理课本里面的习题？ 是啊,<计算机组成原理(白中英-第五版)>

user: user-0
content: 引用 1 楼 adusuccessfully 的回复:占个沙发吧，但是我对着个题不是很懂~~~  问LZ：每道的记录的位数相同，按照最内道来计算和最外道来计算还有什么区别呢？？ 谢谢你 热心回复,我已近找到问题所在了,我回给你20分

user: user-0
content: 引用 1 楼 adusuccessfully 的回复:占个沙发吧，但是我对着个题不是很懂~~~  问LZ：每道的记录的位数相同，按照最内道来计算和最外道来计算还有什么区别呢？？ 按最内道算:m = (9-5) * 3.14 * 2  * 100 * 5 / 1000000; 按最外道 算m = 9 * 3.14 * 2 * 5 * 100  引用 2 楼 coding_hello 的回复:位密度不同，不存在按最外道还是最内道计算的问题，因为最外道和最内道的信息位数一样。  几个公式： (1)总磁道数=记录面数×磁道密度×(外直径-内直径)÷2 (2)非格式化容量=位密度×3.14×最内圈直径×总磁道数 (3)格式化容量=每道扇区数×扇区容量×总磁道数 (4)平均数据传输速率=最内圈直径×3.14×位密度×盘片转速   注意盘面直径18英寸，可记录部分5英寸，也就是最内道直径18-5=13英寸 单磁道信息位数=2*π*r*位密度=13*3.14*1000=40820bits 20个盘面，盘面可用5英寸，道密度100磁道/英寸 总容量也就是20/2*5*100*40820=204100000bits，也就是25512500字节(按1个字节8bit算) 盘片传输速度要达到1MB/s，那就是1024*1024*8=13*3.14*1000*转速， 转速=205.5转,也就是转速大于206转即可满足 内直径应该是18 - 5 * 2 = 8 内半径应该是 8 / 2 = 4

user: user-1
content: 楼主这个是大学计算机组成原理课本里面的习题？

user: user-2
content: 这是数学应用题么？

user: user-3
content: 看了题目，有分么?

user: user-4
content: 位密度不同，不存在按最外道还是最内道计算的问题，因为最外道和最内道的信息位数一样。  几个公式： (1)总磁道数=记录面数×磁道密度×(外直径-内直径)÷2 (2)非格式化容量=位密度×3.14×最内圈直径×总磁道数 (3)格式化容量=每道扇区数×扇区容量×总磁道数 (4)平均数据传输速率=最内圈直径×3.14×位密度×盘片转速   注意盘面直径18英寸，可记录部分5英寸，也就是最内道直径18-5=13英寸 单磁道信息位数=2*π*r*位密度=13*3.14*1000=40820bits 20个盘面，盘面可用5英寸，道密度100磁道/英寸 总容量也就是20/2*5*100*40820=204100000bits，也就是25512500字节(按1个字节8bit算) 盘片传输速度要达到1MB/s，那就是1024*1024*8=13*3.14*1000*转速， 转速=205.5转,也就是转速大于206转即可满足

user: user-5
content: http://image.baidu.com/i?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1419918251995_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%A1%AC%E7%9B%98%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84%E7%A4%BA%E6%84%8F%E5%9B%BE

user: user-6
content: 占个沙发吧，但是我对着个题不是很懂~~~  问LZ：每道的记录的位数相同，按照最内道来计算和最外道来计算还有什么区别呢？？
user-0 提问: 如何用c语言在centos下获取一些硬件信息

回复:
user: user-0
content: 引用 9 楼 coding_hello 的回复:获取系统信息一般都是使用系统提供的API接口。如果非要纠结标准C函数的话，就只能是读文件了。  8楼的应该解决你问题了，不够的自己再百度吧。。。  这么说来还是用管道调用命令比较方便

user: user-1
content: centos 里应该也有 dmidecode 吧  终极方法就是自己mmap物理内存，然后根据SMBIOS去找你要的东西。

user: user-2

user: user-3
content: 获取系统信息一般都是使用系统提供的API接口。如果非要纠结标准C函数的话，就只能是读文件了。  8楼的应该解决你问题了，不够的自己再百度吧。。。

user: user-4
content: 引用 12 楼 wangyaninglm 的回复:[quote=引用 9 楼 coding_hello 的回复:] 获取系统信息一般都是使用系统提供的API接口。如果非要纠结标准C函数的话，就只能是读文件了。  8楼的应该解决你问题了，不够的自己再百度吧。。。  这么说来还是用管道调用命令比较方便[/quote] 恩，如果程序开销不大，功能简单的话管道足以满足。我看sigar 以及 lmon的源码，系统配置大概都是配置文件或者管道，如果有api，我相信也是通过这种方式进行封装的

user: user-4
content: 1. 内核版本：popen("uname -sr", "r"); 2.内存容量：/proc/meminfo ‘MemTotal:’字段 3.操作系统版本：/etc/issue 或者 /etc/*ease 4.当前用户名：a.getuid()获取当前用户的uid;b.getpwuid(uid)或者用户名 5.cpu名称:/proc/cpuinfo ’model name‘字段 6.cpu内核数：/proc/cpuinfo 'processor'字段最大值+1(逻辑核数)， 'physical id'字段最大值 + 1 大概这么读吧，上面对应的c操作主要是读文件

user: user-5
content: man 2 uname man  getlogin 其他不知道了，这些函数肯定都是系统调用了，你找找看有没满足的

user: user-0
content: 引用 4 楼 kino_chen 的回复:咳咳，popen("uname -a","r")，能达到要求么  矮油我去。。。这种办法在linux内核下面通用，能写到字符数组里面，也算是个办法  c语言的函数呢？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:不了解。 我去，赵老师不给力。。。

user: user-5
content: 咳咳，popen("uname -a","r")，能达到要求么

user: user-2

user: user-6
content: 不了解。

user: user-0
content: 类似苹果达尔文内核下面的这些函数：     //kern_return_t kr;     //host_name_port_t myhost;    // kernel_version_t kversion;    // host_basic_info_data_t hinfo;    // mach_msg_type_number_t count;     char            *cpu_type_name,*cpu_subtype_name;    // vm_size_t  page_size;     // myhost = mach_host_self();    // kr = host_kernel_version(myhost, kversion);    // count = HOST_BASIC_INFO_COUNT;    // kr = host_info(myhost, HOST_BASIC_INFO, (host_info_t)&hinfo, &count);    // kr = host_page_size(myhost, &page_size);                                               //
user-0 提问: HDOJ2011水题不知道错在哪里

回复:
user: user-1
content: 1.0/i

user: user-2
content: 恩，楼上正解，注意类型，int / int 结果还是int，至少有一个操作数要转换成double，比如1改成1.0

user: user-3
content: 程序中1/i，由于i是整形，当i大于1时。所有的1/i结果都是0，也就得不到你想要的结果。

user: user-4
content: #include <stdio.h> int main() {     double sum_odd,sum_even,sum;     int i,m,n;     scanf("%d",&m);     while(m--)     {         sum_odd=0;         sum_even=0;         sum=0;         scanf("%d",&n);         if(n==1)printf("1.00\n");//Èç¹ûÊäÈëµÄnÎª1         else if(n%2!=0)//Èç¹ûn²»Îª1ÇÒnÎªÆæÊý         {             for(i=1;i<=n;i=i+2)             {                 sum_odd+=1.0/i;//这里用1.0/i，浮点数除法             }             for(i=2;i<=n-1;i=i+2)             {                 sum_even+=1.0/i;             }             sum=sum_odd-sum_even;             printf("%.2lf\n",sum);//ÓÃÆæÊýºÍ¼õÈ¥Å¼ÊýºÍ         }         else //Èç¹ûn²»Îª1ÇÒnÎªÅ¼Êý         {             for(i=1;i<=n-1;i=i+2)             {                 sum_odd+=1.0/i;             }             for(i=2;i<=n;i=i+2)             {                 sum_even+=1.0/i;             }             sum=sum_odd-sum_even;             printf("%.2lf\n",sum);//ÓÃÆæÊýºÍ¼õÈ¥Å¼ÊýºÍ         }     } }
user-0 提问: 用fgets（）函数的时候，输入字符太多就会自动关闭程序？

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout);

user: user-2
content: 不是同步 而是说getchar也从stdin里面提取字符

user: user-3
content: 测试了可以输入任意多个字符 VS2008

user: user-0
content: 引用 1 楼 pengzhixi 的回复:因为你的getchar也会得到字符所以程序运行到结束 多谢！搞定了，那么也就是说fgets()和getchar一起用的时候他们是同步工作的？

user: user-2
content: 因为你的getchar也会得到字符所以程序运行到结束
user-0 提问: 如何求数组中第K大的数？

回复:
user: user-1
content: 这个是经典算法啊，看看堆排序，只不过是仅考虑前k个元素

user: user-2
content: 问题的描述有问题  3 3 1 2 中第二大的应该是2 还是3呢?

user: user-3
content: 時間複雜度我不會計算

user: user-4
content: 《编程珠玑》

user: user-5
content: 先排序，但是会遇到相同大小的数据，如果只涉及的求K大数，可以把相同的输保留一个，其他的做标记。

user: user-6
content: 定义K个变量，分别保存前K个数，并排序，依次向后取数，并和前K个变量中做比较！

user: user-7
content: 对排序可以解决

user: user-8
content: 这就是算法中的选择问题， 可以采用类似快速排序的方法， 实现平均复杂度是 O(N)的算法。  其实就是快速排序，一次划分后，只处理一个递归分支的情况  如果要求，前K个数是排好序的， 可以对K个数再排一次序， 或者直接用排序算法，排序整个数组

user: user-9
content: http://blog.csdn.net/v_JULY_v/article/details/6370650 http://en.wikipedia.org/wiki/Selection_algorithm

user: user-10
content: LZ，解决这个问题的办法一般有两个： 1）先排序再查找：排序算法在O（n）的有三个：计数排序、桶排序、基数排序。其他就好办了。 2）经典的思想是：活用数据结构：建一个最小堆，建好之后选第k大的。

user: user-11
content: 比较赞同5楼的思路。使用快排思想，如果数据存储在外存，则需要额外的O(n)的内存空间。而使用最小堆无论数据在内存还是外在都是需要的额外内存空间都是：O(k)。我写的一篇文章和楼主的要求差不多。http://blog.csdn.net/mxway/article/details/21776727

user: user-12
content: 引用 8 楼 U_Fan 的回复:[quote=引用 4 楼 mstlq 的回复:] http://blog.csdn.net/guofengzai/article/details/2574225 不好意思， 我没有说清楚。需要用C语言实现， 如果你能讲解下nth_element源码算法就最好了。[/quote] 原理就是9楼说的^_^

user: user-13
content: 想一想快速排序的原理，再想一想每一轮过滤基准最后都放在哪儿了，然后你的问题就解决了。

user: user-0
content: 引用 4 楼 mstlq 的回复:http://blog.csdn.net/guofengzai/article/details/2574225 不好意思， 我没有说清楚。需要用C语言实现， 如果你能讲解下nth_element源码算法就最好了。

user: user-14
content: 用最小堆来做是比较好的方案。

user: user-14
content: 2楼的方法肯定不是最好的。 解法：维护一个k大小的最小堆，对于数组中的每一个元素判断与堆顶的大小，若堆顶较大，则不管，否则，弹出堆顶，将当前值插入到堆中。时间复杂度O(n * logk)  解法：利用hash保存数组中元素Si出现的次数，利用计数排序的思想，线性从大到小扫描过程中，前面有k-1个数则为第k大数，平均情况下时间复杂度O(n)

user: user-14
content: 2楼的方法肯定不是最好的。 解法：维护一个k大小的最小堆，对于数组中的每一个元素判断与堆顶的大小，若堆顶较大，则不管，否则，弹出堆顶，将当前值插入到堆中。时间复杂度O(n * logk)  解法：利用hash保存数组中元素Si出现的次数，利用计数排序的思想，线性从大到小扫描过程中，前面有k-1个数则为第k大数，平均情况下时间复杂度O(n)

user: user-12
content: http://blog.csdn.net/guofengzai/article/details/2574225

user: user-12
content: http://blog.csdn.net/guofengzai/article/details/2574225

user: user-0
content: 引用 1 楼 m13890 的回复:先排序，再直接找。。  这个应该不会超过O(n)吧 如果是先排序， 那就要求排序的时间复杂度不超过O(n)，据我了解的排序算法好像都要比n大吧。
user-0 提问: C编译报错：error: cast from pointer to integer of different size [-Werror=point

回复:
user: user-1
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。 在宏MAKE_KEY_INFO中，企图将指针类型转换为无符号32位整型数，但这在64位环境下会发生兼容性问题。
user-0 提问: 新手求助   我装的mysql64位得 用的vc  mysql的odbc驱动也是64位的

回复:
user: user-1
content: http://stackoverflow.com/questions/25889046/difference-between-ansi-and-unicode-drivers-of-mysql

user: user-2
content: 在64位Windows下： 64位exe和dll在目录c:\windows\system32目录下； 32位exe和dll在目录c:\windows\syswow64目录下； 所以要注意： 在win64位系统下：   配置64位程序用的     DSN使用c:\windows\system32\odbcad32.exe     数据库别名使用c:\windows\system32\cliconfg.exe   配置32位程序用的     DSN使用c:\windows\syswow64\odbcad32.exe     数据库别名使用c:\windows\syswow64\cliconfg.exe
user-0 提问: 大家怎么使用VS编译器

回复:
user: user-1
content: 一般将报错信息百度都会有解决方法

user: user-2
content: 这有啥难的。多摸索几天就是了。有问题马 上百度啊！

user: user-3
content: 我就用的是vs2013    楼主应该报的宽窄字符问题

user: user-4
content: vs2008,2010！不要使用最新的。

user: user-5
content: VS12 和VC6的差别很大的说！  建议新建空项目然后把文件加进去！基本就OK了

user: user-6
content: 网上找教程 百度文库就有

user: user-7
content: vs应该是比较好用的吧，提示什么的都很好用。

user: user-8
content: 我的经验是：把解决不了的报错信息直接google，一般会有相关的资料~~

user: user-9
content: 看看MSDN？

user: user-10
content: 总有个适应期的，出现错误就一个一个改呗

user: user-0
content: 这些简单，问题是，经常缺少各种文件 预定义什么的

user: user-11
content: 摸索几天就习惯了。你只是不愿意改变以前所习惯的IDE而已

user: user-12
content: 文件、打开、项目/解决方案、选.sln文件、打开。 或者 文件、新建、项目、……
user-0 提问: 求教一个C 语言的问题！！！

回复:
user: user-1
content: #include <stdio.h> #include <windows.h>  void main() { 	char name[20]; 	scanf("%s",name); 	const char * hz = ".txt"; 	strcat(name,hz); 	 	ShellExecute(NULL,"open",name,NULL,0,SW_SHOWNORMAL); } 不知道是不是这个意思

user: user-2
content: ++ 不过楼主的意思好像是直接命令行传参，所以应该是： if(argc != 2)   return -1; 然后把argv[1]当成文件名即可  引用 1 楼 coding_hello 的回复:没编译，大概这样，新手不容易啊，多看看书，函数参考  #include <stdio.h>  int main(int argc, char *argv[]) { 	char file_name[1024] = {0};         char file_content[4096] = {0}; 	while(1) 	{ 		printf("input : "); 		scanf("%s", file_name); 		strcat(file_name, ".txt"); 		FILE* fp = fopen(file_name, "r");                 if (fp == NULL)                 {                         printf("file %s open failed\r\n", file_name);                         continue;                 } 	 		/* 该干嘛干嘛 */ 		fread(file_content, 1, 4095, fp);                 file_content[4095] = 0;                 printf("%s\r\n", file_content); 		 		fclose(fp); 	} 	 	return 0; }

user: user-3
content: 楼上的答案很好，再加上一句#include <string>就更完美了~~

user: user-4
content: 没编译，大概这样，新手不容易啊，多看看书，函数参考  #include <stdio.h>  int main(int argc, char *argv[]) { 	char file_name[1024] = {0};         char file_content[4096] = {0}; 	while(1) 	{ 		printf("input : "); 		scanf("%s", file_name); 		strcat(file_name, ".txt"); 		FILE* fp = fopen(file_name, "r");                 if (fp == NULL)                 {                         printf("file %s open failed\r\n", file_name);                         continue;                 } 	 		/* 该干嘛干嘛 */ 		fread(file_content, 1, 4095, fp);                 file_content[4095] = 0;                 printf("%s\r\n", file_content); 		 		fclose(fp); 	} 	 	return 0; }
user-0 提问: 我编译VC++项目时为神马string.h报很多错误？

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

user: user-2
content: 重定义了，string.h头文件重复引用了

user: user-3
content: 有可能是字符集的原因。。设置一下，因为VS现在默认都 是unicode..
user-0 提问: system("CompMgmtLauncher");奇异问题

回复:
user: user-1
content: system("compmgmt.msc");

user: user-2
content: 用系统管理员权限试试

user: user-3
content: 额。。这个应该是环境配置的问题了。。具体细节也不知道哦~~

user: user-4
content: #include <stdlib.h> void main(){ 	system("CompMgmtLauncher"); 	system("pause"); }  我在vs2010上可以运行，就调出了“计算机管理”。 我不是大神，我也不知道为什么在LZ的机子上不能运行~~
user-0 提问: linux下用c语言保存网络图片到本地，该怎么处理？

回复:
user: user-1
content: 同上，libcurl

user: user-2
content: 使用curl库？

user: user-3
content: 不想用socket就用第三方的库呗，来这问还不如直接去百度就好了
user-0 提问: 新人，好多error，求教

回复:
user: user-0
content: 引用 9 楼 kino_chen 的回复:引用 8 楼 axiqia 的回复:[quote=引用 7 楼 kino_chen 的回复:] [quote=引用 6 楼 axiqia 的回复:] [quote=引用 4 楼 kino_chen 的回复:] #define LEN sizeof(struct student}  //就随便看了一下...谢谢，终于找到了，编译器提醒的错误都是指在create函数里面，结果我始终找不着，原来错误在前面，纠结了一晚上。谢谢，剩下我的自己来搞定。 不客气，应该的[/quote]开始报28个，我都晕了，甚至没有写下去的信念了。总之功能了，我继续敲，完善一下其他[/quote] 一个个解决，你就有成就感了，解决一个编译一下，别看这么多error，可能就是几处的错误。[/quote] 恩恩，已经写了200多行了，调试了一下午。确实学到很多。

user: user-1
content: 引用 8 楼 axiqia 的回复:引用 7 楼 kino_chen 的回复:[quote=引用 6 楼 axiqia 的回复:] [quote=引用 4 楼 kino_chen 的回复:] #define LEN sizeof(struct student}  //就随便看了一下...谢谢，终于找到了，编译器提醒的错误都是指在create函数里面，结果我始终找不着，原来错误在前面，纠结了一晚上。谢谢，剩下我的自己来搞定。 不客气，应该的[/quote]开始报28个，我都晕了，甚至没有写下去的信念了。总之功能了，我继续敲，完善一下其他[/quote] 一个个解决，你就有成就感了，解决一个编译一下，别看这么多error，可能就是几处的错误。

user: user-0
content: 引用 7 楼 kino_chen 的回复:引用 6 楼 axiqia 的回复:[quote=引用 4 楼 kino_chen 的回复:] #define LEN sizeof(struct student}  //就随便看了一下...谢谢，终于找到了，编译器提醒的错误都是指在create函数里面，结果我始终找不着，原来错误在前面，纠结了一晚上。谢谢，剩下我的自己来搞定。 不客气，应该的[/quote]开始报28个，我都晕了，甚至没有写下去的信念了。总之功能了，我继续敲，完善一下其他

user: user-1
content: 引用 6 楼 axiqia 的回复:引用 4 楼 kino_chen 的回复:#define LEN sizeof(struct student}  //就随便看了一下...谢谢，终于找到了，编译器提醒的错误都是指在create函数里面，结果我始终找不着，原来错误在前面，纠结了一晚上。谢谢，剩下我的自己来搞定。 不客气，应该的

user: user-0
content: 引用 4 楼 kino_chen 的回复:#define LEN sizeof(struct student}  //就随便看了一下...谢谢，终于找到了，编译器提醒的错误都是指在create函数里面，结果我始终找不着，原来错误在前面，纠结了一晚上。谢谢，剩下我的自己来搞定。

user: user-1
content: 逻辑就不来看了，create的逻辑感觉是有问题的，你可以看看。下面是我看到的错误，可能不全，有提示会好点。  scanf("%s",&p1->name); //不需要加& p=head; //head 没定义，之前那个head是局部变量

user: user-1
content: #define LEN sizeof(struct student}  //就随便看了一下...

user: user-1
content: 引用 2 楼 axiqia 的回复:quote]编译的时候有错误发现不了才把代码贴出来，没有想过让人帮忙做作业，你可能会错意了吧。只是让帮忙指出错误在哪里，还请仔细看一下问题。 不好意思，能把错误提示贴一下么？

user: user-0
content: 引用 1 楼 kino_chen 的回复:先自己解决，解决不了再把错误提示贴出来，大家分析定位一下。论坛毕竟不是帮人做作业的地方编译的时候有错误发现不了才把代码贴出来，没有想过让人帮忙做作业，你可能会错意了吧。只是让帮忙指出错误在哪里，还请仔细看一下问题。

user: user-1
content: 先自己解决，解决不了再把错误提示贴出来，大家分析定位一下。论坛毕竟不是帮人做作业的地方
user-0 提问: 怎样写一个抽象数据类型（ADT）的程序呢？

回复:
user: user-0
content: ”首先应该是数据结构的设计，这个在写代码之前就应该确定“ 这句话对我有用，后面的我都知道  还有就是赵老师，你推荐的那个，我觉得好像离我比较远，而且没这么多时间 我目前就是从单文件到多文件（文件之间的关系我知道），在设计一个多文件程序时的思路是什么？  网上有说先要确定自己的需求？ 然后就没有了 希望有大神能够指点迷津 或者提供一些关于程序设计思路的搜索关键词 （我搜索过，但没搜索到什么，可能关键词，不太合适）

user: user-1
content: 这里面当然需要设计了。 首先应该是数据结构的设计，这个在写代码之前就应该确定。 然后是头文件，那些是公共头文件，就把这些公共头文件写在一个头文件中，然后一个include就ok。 后面是。c文件，它实现的是函数功能，当然你也需要明确各个函数作用以及相互关系

user: user-2
content: 搜“跟我一起写makefile” 或在MSDN里面搜“msbuild”

user: user-0
content: 之前写的程序都是一个单一的文件，现在要写一个多文件的代码 这个流程是什么？

user: user-0
content: 恩 谢谢    待会儿   仔细看一看

user: user-3
content: 粗略说下自己的感受，可以看看~ 1.肯定是要需求分析，写个需求分析文档什么的。写的过程当中，你就会有个大局观了，而且有些不合适的想法就会被排出。-------需求分析 2.多文件，就要分模块，一个文件一个模块功能（多个子模块又能组成一个大模块），大模块以库的方式提供给用户，而小模块功能如果不需要了，也只需要编译时不加该文件就行了，减小库大小。-----------概要设计 3.然后设计接口，设计接口要考虑，你需要什么信息（入参），才能给出什么信息（出参）。为了让这些信息不那么松散，肯定是要设计数据结构了。还有嘛就是要考虑到自己到底处于什么位置，你只是提供服务，设计的接口就不能太业务。------系统设计 如果不是自己一个人，那就找人评审一下，也设计下测试案例。 4.写代码。---------编码 5.写好一个模块可以测试一下，看看功能是否实现------------单元测试 6.都写好之后，一起跑跑，毕竟单个没问题，一起不一定没问题------------系统测试  时间充裕，你可以考虑优化代码！！
user-0 提问: 请问 int (*a)[10]   和  int a[10] 一样吗？

回复:
user: user-1
content: 引用 6 楼 kino_chen 的回复:[quote=引用 5 楼 jimy1 的回复:] [quote=引用 3 楼 XSF50717 的回复:]  int (*a)[10]  指向一个整型的一维数组，这个一维数组的长度是10，也可以说是a的步长。也就是说执行a+1时，a要跨过10个整型数据的长度；  int a[10] 这个是最基本的数组，不多说了  请问 int (*a)[10]    a是一个地址 a+1,不是换算成十进制  再加一  吗？  int a[10]    a+1  是加一个int单位步长吗？  谢谢[/quote] 指针+n，实际上是指针+n*sizeof(指针指向的类型)。此处int (*a)[10]  a是一个指向拥有十个int的数组,所以a+1就是a+1*sizeof(int [10]);[/quote] 是的就是这样的

user: user-2
content: 引用 5 楼 jimy1 的回复:[quote=引用 3 楼 XSF50717 的回复:]  int (*a)[10]  指向一个整型的一维数组，这个一维数组的长度是10，也可以说是a的步长。也就是说执行a+1时，a要跨过10个整型数据的长度；  int a[10] 这个是最基本的数组，不多说了  请问 int (*a)[10]    a是一个地址 a+1,不是换算成十进制  再加一  吗？  int a[10]    a+1  是加一个int单位步长吗？  谢谢[/quote] 指针+n，实际上是指针+n*sizeof(指针指向的类型)。此处int (*a)[10]  a是一个指向拥有十个int的数组,所以a+1就是a+1*sizeof(int [10]);

user: user-0
content: 引用 3 楼 XSF50717 的回复:int (*a)[10]  指向一个整型的一维数组，这个一维数组的长度是10，也可以说是a的步长。也就是说执行a+1时，a要跨过10个整型数据的长度；  int a[10] 这个是最基本的数组，不多说了  请问 int (*a)[10]    a是一个地址 a+1,不是换算成十进制  再加一  吗？  int a[10]    a+1  是加一个int单位步长吗？  谢谢

user: user-3
content: int (*a)[10]   数组指针 int *a[10]     指针数组 http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html

user: user-1
content: int (*a)[10]  指向一个整型的一维数组，这个一维数组的长度是10，也可以说是a的步长。也就是说执行a+1时，a要跨过10个整型数据的长度；  int a[10] 这个是最基本的数组，不多说了

user: user-2
content: 看着我就觉得不一样 -0-

user: user-4
content: 不一样，后者是数组，前者是指向数组类型的指针。
user-0 提问: C语言两个两组数同时存放，然后想对一组数进行排序，另一组跟着？

回复:
user: user-1
content: 直接排一个数组，另一个根据下标进行同样的交换就可以

user: user-2
content: typedef struct node{ int a, int b}node_t;  node_t node_map[6] ;   //初始化一下，每个 node_t 节点 就是个映射关系，(3,3), (5,43).....  //排序数组....  //遍历映射关系，排列出另一个数组

user: user-3
content: 可以给就下标排序，完成后可以选择性的按照已序的下标再调整原数组。 也可以直接排序第二个数组，每次交换的时候把第一个数组内对应的元素也交换。
user-0 提问: 关于二级指针的幅值问题，向大家请教一下这段程序应该怎么改，谢谢！

回复:
user: user-1
content: char *out= NULL; int max_numstr_length = Continumax(&out, inputstr); unsigned int Continumax(char** pOutputstr, char* intputstr) { 	*pOutputstr = (char *)malloc(100); }  这样做,外部释放内存

user: user-0
content: 在线求解答啊。。有没有大神知道

user: user-0
content: 引用 4 楼 user-2 的回复:[quote=引用 3 楼 zhuangshengen 的回复:] [quote=引用 2 楼 user-2 的回复:]  for(int i = 0 ; i<max;i++)  //将最大子字符串的值拷贝给outputstr { **pOutputstr++ = *pstr++; } 试试不行，和我一开始的问题一样[/quote] 为什么这么写呢。。感觉好麻烦啊，二级指针不是一般用来改指针的地址的么，用来赋值感觉不好用啊。。。[/quote]题目要求一定要用二级指针，用不来。。。

user: user-2
content: 引用 3 楼 zhuangshengen 的回复:[quote=引用 2 楼 user-2 的回复:]  for(int i = 0 ; i<max;i++)  //将最大子字符串的值拷贝给outputstr { **pOutputstr++ = *pstr++; } 试试不行，和我一开始的问题一样[/quote] 为什么这么写呢。。感觉好麻烦啊，二级指针不是一般用来改指针的地址的么，用来赋值感觉不好用啊。。。

user: user-0
content: 引用 2 楼 user-2 的回复:for(int i = 0 ; i<max;i++)  //将最大子字符串的值拷贝给outputstr { **pOutputstr++ = *pstr++; } 试试不行，和我一开始的问题一样

user: user-2
content: for(int i = 0 ; i<max;i++)  //将最大子字符串的值拷贝给outputstr { **pOutputstr++ = *pstr++; } 试试

user: user-0
content: for(int i = 0 ; i<max;i++)  //将最大子字符串的值拷贝给outputstr { **pOutputstr = *pstr; (*pOutputstr)++; //pstr++; }
user-0 提问: c语言课程设计——学生成绩记录簿  求大神指教

回复:
user: user-1
content: 明年吧  等我有空的话

user: user-2
content: 网上很多demo，找一个看看改改就行了，不要一上来就要源码！

user: user-3
content: 这个东西我们也做了 是期末作业 很简单的 用点心 别空想 上来就干 先把框架做出来 我是用dev的项目做的 一个模块一个模块做 都是用基本语句完成的 汇集到一个文件也就34百行 一点一点拱 34天的事

user: user-4
content: 你是严芬教的吧
user-0 提问: C 语言指针的一个小问题

回复:
user: user-1
content: 结合this指针，可能比较容易理解： http://blog.csdn.net/wz7654321/article/details/8375922 楼主的代码，调用test的时候，也传了个this指针进去，而且this是空指针。但是因为test函数根本就没用到任何成员变量，所以test函数里面根本就没有用到这个空的this指针，所以也就不会挂。

user: user-1
content: 这个就涉及到类里面对于成员变量和成员函数的区别。 对于非静态的成员变量，这个类构造的每个对象都有一个各自的变量，比如1楼GCC类的成员变量i。要访问这个成员变量，就必须要用到类对象的地址，如果刚好是空指针，那就挂了。 成员函数就不一样了。不管这个类构造了多少个对象，或者根本就没有构造任何对象，成员函数(还有静态成员变量)都只有一份拷贝。所以，访问成员函数，根本就用不着类对象的地址，是不是空指针都无所谓。

user: user-1
content: 把代码稍微改一下： class GCC { public: int i;  // 加一个成员变量     void test()     {             cout<<"this is the test" << i <<endl;  // 访问成员变量     } }; 这样的话，再用空指针就会挂掉了。
user-0 提问: TEXTOUT输出不正常。。。

回复:
user: user-1
content: 引用 2 楼 fly_dragon_fly 的回复:用tchar就不用w这类函数 wsprintf  请教一下，除了WSPRINTF,还有哪个函数可以将变量转为字符串？

user: user-1
content: 引用 1 楼 user-3 的回复:试试工程-》设置里面的字符集看看  已经将UNICODE改为多字节

user: user-1
content: 这是我发表的主题，那帐号PW没了，进不去  解决办法找到了，是把sizeof改为strlen  结帖

user: user-2
content: 用tchar就不用w这类函数 wsprintf

user: user-3
content: 试试工程-》设置里面的字符集看看
user-0 提问: 一个输入英文首字母判断星期几的问题出错，求高手帮忙

回复:
user: user-0
content: 貌似是懂了一些

user: user-1
content: 你需要 setbuf(stdin,NULL)

user: user-2
content: 输入M回车后，M和回车先后付给了I，因此分别执行了第一个case和default语句 解决办法是，先定义个整型变量int n;在switch前面加上scanf("％d",&n);来吃掉回车 更多信息百度scanf缓冲区

user: user-3
content: 输入M之后敲的那个回车，也会被scanf读取并赋值给I和a，结果他们的值就是'\n‘，导致错误。 加一点代码把'\n'的情况单独处理一下就好了
user-0 提问: C语言程序报地址冲突

回复:
user: user-1
content: 引用 2 楼 ddyuwgr123 的回复:struct bst *l=NULL; 他停止这一句 但是怎么改？？？   int i,j;    struct bst *l=NULL;    l  =  (struct bst *)malloc(sizeof(struct bst));  //先给结构体分配内存    l->data=(int *)malloc(100*sizeof(int ));    for(i=0;i<100;i++)       {        l->data[i]=0;        }    l->lenth=0;    for(j=0;j<n;j++)       {        bst_insert(l,1,x[j]);        l->lenth++;        }//第一个结点为空    return l;

user: user-0
content: struct bst *l=NULL; 他停止这一句 但是怎么改？？？

user: user-2
content: 错误信息表明在对空指针进行读写操作。  在调试器中运行程序吧，会停在出错行，仔细看看当前行在操作的节点。
user-0 提问: 请问这段二叉树建立的代码有什么问题吗

回复:
user: user-0
content: 能给几组测试数据吗

user: user-1
content: BiNode * Creat() {     int dt; 	BiNode *bt;     bt = new(BiNode);     if (!bt) { 		exit(0); 	}     cin >> dt;     if(dt == 0) {         bt = NULL;     } else {         bt->data = dt;         bt->Lchild = Creat();         bt->Rchlid = Creat();     } 	return bt; }  void PreOrder(BiNode *bt) {     if (!bt)         return;     cout << bt->data << ' '; 	PreOrder(bt->Lchild); 	PreOrder(bt->Rchlid); 	delete bt; }

user: user-1
content: #include<iostream> #include<stdlib.h> #include<malloc.h> using namespace std; typedef struct BiNode {     int data;     BiNode *Lchild;     BiNode *Rchlid; }BiNode;  BiNode * Creat() {     int dt; 	BiNode *bt;     bt = (BiNode *)malloc(sizeof(BiNode));     if (!bt) { 		exit(0); 	}     cin >> dt;     if(dt == 0) {         bt = NULL;     } else {         bt->data = dt;         bt->Lchild = Creat();         bt->Rchlid = Creat();     } 	return bt; }  void PreOrder(BiNode *bt) {     if (!bt)         return;     cout << bt->data << ' '; 	PreOrder(bt->Lchild); 	PreOrder(bt->Rchlid); }  int main() {     BiNode *bt = Creat();     PreOrder(bt);     return 0; }

user: user-1
content: 1 2 4 0 0 5 0 0 3 0 0 1 2 3 4 0 5 0 0 6 0 0 0 7 8 0 0 9 0 0 1 2 0 0 3 4 6 0 0 0 5 0 0
user-0 提问: 请大家帮我找错 谢谢了

回复:
user: user-1
content: 真的很多错误啊引用 2 楼 qq_23092307 的回复:这个是我写的 错误百出 结果还是错的 请大家帮我指出错误

user: user-2
content: 楼主还有一段很长的路要走哇~

user: user-3
content: 看到楼主想起了我自己上学的时候。马上买电脑 等我。

user: user-4
content: 仅供参考/*************************************************************************     > File Name: main4.c     > Author: jukay     > Mail: hellojukay@163.com      > Created Time: 2014年12月27日 星期六 19时56分12秒  ************************************************************************/  #include<stdio.h>  int is_perime(int n) { 	int state = 1; 	for(int i = 2; i < n; ++i) 	{ 		if(n % i == 0) 			{ 				state = 0; 				break; 			} 	} 	return state; }  void abs_perime_tens() { 	int tmp; 	for(int i = 10; i < 100; ++i) 	{ 		tmp = i/10 + 10 * (i % 10); 		if(is_perime(i) && is_perime(tmp)) 			printf("%d\t",i); 	} }  int main(int argc, char **argv) { 	abs_perime_tens(); }

user: user-0
content: 引用 7 楼 user-8 的回复:我是想来吐槽楼主的。。。。。你看看5楼贴的代码和你贴的代码，仅仅是缩进的问题可读性就差了好多倍。  说的在理  谢谢指点     缩进是什么

user: user-4
content: 马上给出参考代码,等我

user: user-5
content: 马上买电脑..等我

user: user-6
content: 马上开VS..等我

user: user-7
content: 你有3个错误 1.main函数你如果没有返回，要写成void main() 2.int isPrime你应该返回不同的值，表示它是不是素数，如0表示不是素数，1表示是素数 3.absPrimeTens()中，int n,m,i;。。i是局部变量，而且值未定。运行到n=i%10;会报错。你要么把main中的i传给absPrimeTens()，要么把i定义成全局变量。当然了，最简单的还是把for(i=11;i<=100;i++)放到absPrimeTens()中。

user: user-0
content: 引用 6 楼 Evankaka 的回复: 可以告诉我 我错哪了吗

user: user-8
content: 我是想来吐槽楼主的。。。。。你看看5楼贴的代码和你贴的代码，仅仅是缩进的问题可读性就差了好多倍。

user: user-7

user: user-7
content: #include <stdio.h>  int isprime(int n);  void absprimetens();  int isPrime(int n) { 	int i; 	for(i=2;i<n;i++) 		if(n%i==0) 			return 0;//表示该数不是素数        		return 1;//表示该数是素数 } void absPrimeTens() { 	int n,m,i; 	for(i=10;i<100;i++) 	{ 		n=i%10; 		m=i/10+n*10; 		if(isPrime(i)==1&&isPrime(m)==1) 			printf("%d\n",i); 	} }   void main() { 	absPrimeTens(); 	while(1);//死循环，防止控制台退出  } OK了

user: user-7
content: 马上开VS..等我

user: user-0
content: 正确解答网上有 只需大家告诉我怎么错的

user: user-0
content: 这个是我写的 错误百出 结果还是错的 请大家帮我指出错误

user: user-0
content: #include <stdio.h>   int isprime(int n);   void absprimetens();      	int isPrime(int n) 	{ 		for(int i=2;i<n;i++) 			if(n%i==0) 				return 0;} 	void absPrimeTens() 	{ 		 		int n,m,i; 		n=i%10; 		m=(i-n)/10+n*10; 		if(isPrime(m)==0) 			printf("%d",i); 	}   				main() 	{ 	 	int i; 	for(i=11;i<=100;i++) 	{   	if(isPrime(i)==0) 	absPrimeTens(); 	 	} 				}
user-0 提问: 在线等牛人 帮忙调试一下程序， 关于链表的

回复:
user: user-0
content: [quote=引用 2 楼 user-1 的回复:] 原谅我是个大一的。。。能懂 大神说的是什么。。但是我想知道  我的程序错在哪。。。             [

user: user-1
content: 原题：一组人（n）个，围成一圈，从某人开始数到滴三个的人出列，在接着从下一个人开始数，最终输出最终出列的人（约瑟夫环是一个数学的应用问题：已知n个人（以编号1,2,3,...,n）分别表示）围坐在一张圆桌周围。从编号k的人开始报数，数到m的那个人出列；他的下一个人又从1开始报数，数到m的那个人又出列：依此规律重复下去，知道圆桌周围的人全都出列。 #include <iostream>   #include <list>   #include <vector>   #include <algorithm>   using namespace std;   vector<int> yuesefeng(int n,int m);   void main()   {       int n,m;       cin>>n>>m;       vector<int> out;       out=yuesefeng(n,m);       int i,len=out.size();       for(i=0;i<len;i++)           cout<<out[i]<<" ";       system("pause");   }   vector<int> yuesefeng(int n,int m)//n代表初始人数，m代表初始号码   {       vector<int> out;       list<int> in;       list<int>::iterator pos;       int i;       for(i=1;i<=n;i++)           in.push_back(i);       pos=in.begin();       int kk=m;       while(in.size()!=0)       {              if(kk!=1)             {                 pos++;                 kk--;              if(pos==in.end())//注意要判断是否到尾部了，到尾部就指向头部               pos=in.begin();              }           else           {               out.push_back(*pos);//到数了，点到的人保存到输出               pos=in.erase(pos);///将此人从列表中删除，注意erase返回的是下个人的指针               if(pos==in.end())                   pos=in.begin();           }              }       return out;   }

user: user-1
content: 这就是约瑟夫环的问题哈，可以用STL中的list来做，效果更高
user-0 提问: EOF的问题

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:为了区别到底是按了EOF对应按键（Linux下Ctrl+D，Windows下Enter、Ctrl+Z、Enter）还是ASCII码为255的字符（Windows下按住Alt不放，按小键盘上的2、5、5，再松开Alt，或输入重定向文件中的'\xff'），和EOF比较的变量的类型不能是char。 ++ 这是说到根子上了

user: user-2
content: 你这样理解嘛：EOF==end of file,这个东西就拿来搞文件的，‘\n'只是个换行符

user: user-3
content: 为了区别到底是按了EOF对应按键（Linux下Ctrl+D，Windows下Enter、Ctrl+Z、Enter）还是ASCII码为255的字符（Windows下按住Alt不放，按小键盘上的2、5、5，再松开Alt，或输入重定向文件中的'\xff'），和EOF比较的变量的类型不能是char。

user: user-4
content: EOF的值为-1，EOF用在处理文件时判断是否已经读到文件尾，而getchar会一直从标准输入读取一个字符，每读一个字符就赋给ch，读到换行符\n时也直接赋给ch，\n明显不等于-1，所以while一直在等待输入。要想退出while循环，Linux下按Ctrl+D就可以了。

user: user-5
content: 可以用的，区别只是在于'\n'是按回车就退出，而EOF的话： 1、Windows下按CTRL+Z相当于输入EOF 2、Linux下按CTRL+D相当于输入EOF

user: user-6
content: char ch;  ===> int ch;   因为getchar()函数的返回值是int int getchar(void);  DESCRIPTION        fgetc()  reads  the next character from stream and returns it as an unsigned char cast to an int, or EOF on end        of file or error.         getc() is equivalent to fgetc() except that it may be implemented as a macro which evaluates stream  more  than        once.         getchar() is equivalent to getc(stdin).

user: user-0
content: 明白了   谢谢大家

user: user-7
content: 2楼正解！两种判断都合理！只是采集数据时，你怎么输入收尾符的问题！

user: user-8
content: 1楼正解，EOF一般是-1，getchar返回值是 int
user-0 提问: 直接插入排序

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<time.h>  void dfas(int a[],int n) //待排序元素用一个数组a表示，数组有n个元素 {  	int i,j; 	int t; 	for(i=1;i<n;i++) //i表示插入次数，共进行n-1次插入 	{  		t=a[i]; //把待排序元素赋给t 		j=i-1; 		while ((j>=0) && (t<a[j])) 		{	  			a[j+1]=a[j];  			j--;  		} // 顺序比较和移动 		a[j+1]=t; 	}  /*	 	for(i=0;i<5;i++) 		printf("%5d",a[i]); 	putchar(10);  //回车 */ } 	 void main() { 	int i,a[5]; 	srand(time(0));  	for(i=0;i<5;i++)  //数组是以下标0开始，而不是1 	{ 		a[i]=rand()%100; 		printf("%5d",a[i]); 	} 	printf("\n after sort========================\n"); 	dfas(a,5); 	for(i=0;i<5;i++) 	{ 		printf("%5d",a[i]); 	} 	putchar(10);  //回车 }

user: user-2
content: 给LZ分享一个链接，这篇博文讲了多种排序算法：http://blog.csdn.net/hguisu/article/details/7776068

user: user-2
content: 数组的下标是从0开始的~~  for(i=0;i<5;i++){ 		a[i]=rand()%100; 		printf("%5d",a[i]); 	} 	printf("\n");

user: user-0
content: 非常感谢大家的帮助！问题解决了。
user-0 提问: 新手求救。弄搜索功能快哭了啊

回复:
user: user-1
content: 用fscanf（data，%d，buff）；这样就没有其他东西了 遇到空格就结束了

user: user-2
content: 楼主别贴图，贴代码上来，我就帮你改。

user: user-0
content: 引用 8 楼 jacksonfan 的回复:buff不是从文本文件读出来的么，那你看看文件结尾有没有多余的空格有空格，但是半角空格啊，而且还有奇怪的汉字。。。

user: user-0
content: 引用 9 楼 fengswd 的回复:不是分配了14字节的空间吗？读13个，然后设置第14个为NULL.并不是让你也读14个。。嗯嗯好的我试一下

user: user-0
content: 引用 5 楼 fengswd 的回复:要读·13必须分配14.最好在读取前初始一下buffer为全0.用HeapAlloc更好，比malloc好多了

user: user-0
content: 引用 5 楼 fengswd 的回复:要读·13必须分配14.最好在读取前初始一下buffer为全0.用HeapAlloc更好，比malloc好多了亲，分配了14，但我输入1234567890123的时候后面多了很多空格和‘铪’字符

user: user-3
content: 要读·13必须分配14.最好在读取前初始一下buffer为全0.用HeapAlloc更好，比malloc好多了

user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:buffer分配13读了14亲，我要读取13个char类型的字符，应该分配多少呀

user: user-0
content: 引用 1 楼 user-6 的回复:描述的不是很详细啊，结果也没有，也没有贴代码，亲，我贴代码了呀，是图片形式的

user: user-3
content: 不是分配了14字节的空间吗？读13个，然后设置第14个为NULL.并不是让你也读14个。。

user: user-4
content: buff不是从文本文件读出来的么，那你看看文件结尾有没有多余的空格

user: user-5
content: buffer分配13读了14

user: user-6
content: 描述的不是很详细啊，结果也没有，也没有贴代码，
user-0 提问: 发现个问题，gdb 附加进程调试是另开一个进程还是在当前进程？

回复:
user: user-1
content: attach的进程是同一个进程，不会新开。至于在收数据，就是上面说的，有个单独线程在接收。  去百度了解下调试器的原理和程序执行的原理吧

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:八成B进程开了单独的线程接收数据。 引用 3 楼 coding_hello 的回复:attach的进程是同一个进程，不会新开。至于在收数据，就是上面说的，有个单独线程在接收。  去百度了解下调试器的原理和程序执行的原理吧  确实没有新开进程，用codeblocks的gdb时还会将原程序停掉。

user: user-2
content: ps一下就知道了。 gdb有自己的进程，它通过ptrace接口去调试其他进程。

user: user-3
content: 八成B进程开了单独的线程接收数据。
user-0 提问: C语言typedef用法求助

回复:
user: user-1
content: 啟用別名，使用一個一個別名替代一個比較長的類型名稱

user: user-2
content: 创建一个新的数据类型：类型名字是SCROLLINFO ，类型： CONST *LPCSCROLLINFO 以后你想声明或定义类型是 CONST *LPCSCROLLINFO的变量时，直接使用名字SCROLLINFO 声明或定义该类型变量即可。  参考资料：《K&R》 Besides purely aesthetic issues, there are two main reasons for using typedefs. The first is to parameterize a program against portability problems. If typedefs are used for data types that may be machine-dependent, only the typedefs need change when the program is moved. One common situation is to use typedef names for various integer quantities, then make an appropriate set of choices of short, int, and long for each host machine. Types like size_t and ptrdiff_t from the standard library are examples. The second purpose of typedefs is to provide better documentation for a program - a type called Treeptr may be easier to understand than one declared only as a pointer to a complicated structure

user: user-3
content: typedef typedef type-declaration synonym;  The typedef keyword defines a synonym for the specified type-declaration. The identifier in the type-declaration becomes another name for the type, instead of naming an instance of the type. You cannot use the typedef specifier inside a function definition.  A typedef declaration introduces a name that, within its scope, becomes a synonym for the type given by the decl-specifiers portion of the declaration. In contrast to the class, struct, union, and enum declarations, typedef declarations do not introduce new types — they introduce new names for existing types.  Example  // Example of the typedef keyword typedef unsigned long ulong;  ulong ul;     // Equivalent to "unsigned long ul;"  typedef struct mystructtag {    int   i;    float f;    char  c; } mystruct;  mystruct ms;   // Equivalent to "struct mystructtag ms;"  typedef int (*funcptr)();  // funcptr is synonym for "pointer                            //    to function returning int"  funcptr table[10];   // Equivalent to "int (*table[10])();"

user: user-3
content: 给类型SCROLLINFO CONST *起个别名LPCSCROLLINFO

user: user-4
content: typedef   len_t  unsigned int len_t  length; //等价于 unsigned int  length;

user: user-5
content: typedef是type define的简写，其实就是启别名。 有了这句typedef SCROLLINFO CONST *LPCSCROLLINFO;此后LPCSCROLLINFO可以代表SCROLLINFO CONST *定义新的变量……
user-0 提问: C语言定义的结构体存放在内存的什么区域？

回复:
user: user-1
content: b是在  栈区！

user: user-1
content: struct test {         int a; }    这样还没在内存中开辟控件,包括任何内存都没  struct test  t1;//这个是在栈区 struct test * t2 = (struct test *)malloc(sizeof(struct test));//堆区

user: user-2
content: 静态区吧应该是

user: user-3
content: 符号表

user: user-4
content: 那你说int放在哪里

user: user-5
content: 类型定义(没有成员函数),编译的时候,放在 编译器的符号表里,如果这个类型既没有静态成员变量, 也没有定义变量常量(包括引用) ,也没有被函数使用(不是函数参数表中某个参数类型的一部分), 没有用来定义其他类型的成员变量(常量) 且不是一个嵌套类的成员 那么编译后的代码中, 一般不会包含这个类型的信息. 也就是说符号表这部分,可能会被丢弃  结构定义也是一种类型定义. 类型定义本身.相当于声明

user: user-6
content: 没得结构体这个说法了

user: user-7
content: 理解和讨论之前请先学会如何观察！  可以参考gcc源代码相关片断。

user: user-0
content: 引用 3 楼 user-8 的回复:在编译之后，没有这个结构的存在。 就算被引用了，也没有这个结构存在，仅仅存在这个结构描述的内存布局，也就是说如何依据指向结构的指针如何取得成员的指针。而这个布局被内嵌到成语的代码中。 struct test {         int a; } struct test2 {         int a; } 她们在编译之后是一致的。仅仅是内存的一个布局，影响到如何获取成员的偏移量。 但是在一个地方他们是不一致的，那就是调试符号。 也就是说定义一个结构体，只是告诉编译器结构体变量内部的布局。并不会生成在实际的代码或内存中？

user: user-8
content: 在编译之后，没有这个结构的存在。 就算被引用了，也没有这个结构存在，仅仅存在这个结构描述的内存布局，也就是说如何依据指向结构的指针如何取得成员的指针。而这个布局被内嵌到成语的代码中。 struct test {         int a; } struct test2 {         int a; } 她们在编译之后是一致的。仅仅是内存的一个布局，影响到如何获取成员的偏移量。 但是在一个地方他们是不一致的，那就是调试符号。

user: user-0
content: 引用 1 楼 user-8 的回复:放在编译器的编译的源码里面。 我说的是，编译运行之后

user: user-8
content: 放在编译器的编译的源码里面。
user-0 提问: 在online judege上做了一道题，说是有一个测试点没有通过，实在找不到问题出在哪了

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

user: user-0
content: 引用 1 楼 user-2 的回复:for(i=0;i<n;i++) {    if(A[i+1]==A[i])  运行到i=n-1的时候 你i+1是不是数组越界了？ 竟然是这么个小问题！泪奔，非常感谢你！！！

user: user-0
content: 竟然是这么个小问题！泪奔，非常感谢你！！！

user: user-2
content: for(i=0;i<n;i++) {    if(A[i+1]==A[i])  运行到i=n-1的时候 你i+1是不是数组越界了？
user-0 提问: 福利：C语言面试必读书籍 pdf赠送

回复:
user: user-1
content: 大爱楼主～～

user: user-2
content: 分   书

user: user-3
content: 分也要，书也要

user: user-4
content: 很多书我都有，我只是想接分，行吗？

user: user-5
content: 求共享啊

user: user-6
content: 这些相比都不重要，最重要的一个你却拉掉了，那就是《K&R》

user: user-7
content: 到网上找pdf版去。。。

user: user-8
content: C和指针 资源不存在啊  楼主给个分享链接吧

user: user-9
content: 谢谢楼主的分享！！ 我想看《C++ primer》第五版中文版

user: user-0
content: 还有Linux、嵌入式、网络、等等pdf书籍，需要的请在我的博客 http://blog.csdn.net/windeal3203/article/details/39205611 http://blog.csdn.net/windeal3203  留下书名和邮箱
user-0 提问: 两个线程的问题，我不知道结果为什么是这样的。。。。。。

回复:
user: user-1
content: 你的i又没有加锁，可能存在这样的情况： i++可以分为这三个步骤 1.将i加载到寄存器 2. i+1写到寄存器 3. 写回内存  线程1线程2同时加载i到内存，再写回内存，都是一样的对吧，所以不加锁操作同一个数据肯定有问题

user: user-2
content: Synchronization Functions The following functions are used in synchronization.        CancelWaitableTimer   CreateEvent   CreateMutex   CreateSemaphore   CreateWaitableTimer   DeleteCriticalSection   EnterCriticalSection   GetOverlappedResult   InitializeCriticalSection   InitializeCriticalSectionAndSpinCount   InterlockedCompareExchange   InterlockedDecrement   InterlockedExchange   InterlockedExchangeAdd   InterlockedIncrement   LeaveCriticalSection   MsgWaitForMultipleObjects   MsgWaitForMultipleObjectsEx   OpenEvent   OpenMutex   OpenSemaphore   OpenWaitableTimer   PulseEvent   QueueUserAPC   ReleaseMutex   ReleaseSemaphore   ResetEvent   SetCriticalSectionSpinCount   SetEvent   SetWaitableTimer   SignalObjectAndWait   TimerAPCProc   TryEnterCriticalSection   WaitForMultipleObjects   WaitForMultipleObjectsEx   WaitForSingleObject   WaitForSingleObjectEx
user-0 提问: 如何用十字链表进行稀疏矩阵的求逆运算呢?

回复:
user: user-1
content: 仅供参考： 十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495
user-0 提问: Linux下fork()函数使用

回复:
user: user-1
content: 引用 15 楼 zhao4zhong1 的回复:[quote=引用 11 楼 Falleyes 的回复:] [quote=引用 9 楼 zhao4zhong1 的回复:] 保大人还是保孩子！ 孩子还可以再生嘛~~~ [/quote] 有时候大人死后生下了孩子， 有时候大人生下了孩子后大人死了，孩子活了， 有时候大人生下了孩子后孩子死了，大人没事， 有时候胎死腹中， …… 残酷的现实啊！ [/quote] 是有多无聊

user: user-2
content: 引用 11 楼 Falleyes 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 保大人还是保孩子！ 孩子还可以再生嘛~~~ [/quote] 有时候大人死后生下了孩子， 有时候大人生下了孩子后大人死了，孩子活了， 有时候大人生下了孩子后孩子死了，大人没事， 有时候胎死腹中， …… 残酷的现实啊！

user: user-0
content: 哎呀，这两天都忙得忘结贴了。 这个帖子描述的问题已经解决，因为这个顺序发生变化的概率太小了，我试了很久很久很久才出现一次。。。

user: user-2
content: 保大人还是保孩子！

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:保大人还是保孩子！ 孩子还可以再生嘛~~~

user: user-0
content: 引用 8 楼 pengzhixi 的回复:先说结论吧：不应对fork之后，父进程还是子进程哪个先调用做任何假设，如果要保证按照特定顺序执行得做同步。 实际上子进程或者父进程先调用都有各自的理由。 子进程先调用的理由是：当fork之后，如果父进程先调用，那么根据写时拷贝的策略，父进程必须对即将修改的数据或者栈所在的内存页进行复制，这样才不至于影响到子进程，但是很多时候我们子进程可能在fork之后就调用exec函数执行新的程序，这就意味着父进程复制的那些内存页完全没必要，所以从这里来看子进程应该先调用，可以避免不必要的内存拷贝。 父进程先调用的理由：fork之后父进程正好占用cpu，那么很多父进程的很多数据可能处于cpu缓存以及寄存器当中，继续执行父进程就不需要切换进程，这样可以提高效率。 内核版本的历史上都根据这些权衡有时候让子进程先执行，有时候让父进程执行。所以结论就是开头的。这些理论也可以用于两个子进程？也就是说，因为某些类似的原因，会让同一父进程下的一个子进程总是优于另一个子进程先执行？

user: user-3
content: 先说结论吧：不应对fork之后，父进程还是子进程哪个先调用做任何假设，如果要保证按照特定顺序执行得做同步。 实际上子进程或者父进程先调用都有各自的理由。 子进程先调用的理由是：当fork之后，如果父进程先调用，那么根据写时拷贝的策略，父进程必须对即将修改的数据或者栈所在的内存页进行复制，这样才不至于影响到子进程，但是很多时候我们子进程可能在fork之后就调用exec函数执行新的程序，这就意味着父进程复制的那些内存页完全没必要，所以从这里来看子进程应该先调用，可以避免不必要的内存拷贝。 父进程先调用的理由：fork之后父进程正好占用cpu，那么很多父进程的很多数据可能处于cpu缓存以及寄存器当中，继续执行父进程就不需要切换进程，这样可以提高效率。 内核版本的历史上都根据这些权衡有时候让子进程先执行，有时候让父进程执行。所以结论就是开头的。

user: user-0
content: 引用 2 楼 luciferisnotsatan 的回复:看着没什么，你试个10万次的话，应该就会看到不一样了 10w次，这么大规模 引用 6 楼 luciferisnotsatan 的回复:这和操作系统的调度算法实现有关。而且lz的程序太简单，结果可能就导致输出都是一个顺序的了。 那应该怎么写，有没有示例代码给个

user: user-4
content: 这和操作系统的调度算法实现有关。而且lz的程序太简单，结果可能就导致输出都是一个顺序的了。

user: user-5
content: fork并不保证父子进程的运行顺序。fork只是让内核创建一个进程，创建完就返回了，进程怎么调度运行就跟内核的调度算法有关。 如果要保证运行顺序，可以试试vfork。

user: user-1
content: 总要有个先后， 想控制 用sleep

user: user-6

user: user-4
content: 看着没什么，你试个10万次的话，应该就会看到不一样了

user: user-0
content: 如果将pid1和pid2的赋值顺序调换，则出现和刚才相反的结果，son一直先于daughter。
user-0 提问: 难倒了众多牛人的题目，让我这个大一学生如何是好，求帮忙，感激不尽！！

回复:
user: user-1
content: 动态规划（DP），一楼说的对，你百度搜"最长递增子序列"。

user: user-2
content: 一：先从第一个数开始跟后面的所有的数比较，计算第一个数符合条件的人数，并保存需要剔除的数据        然后以剔除的数据作为新的数组计算第一个开始跟后面的所有的数比较，计算第一个数符合条件的人数，并保存需要剔除的数据到新的数组中         继续上面的流程直到没有数据或只有一个数据 二：从一计算的人数值选择最大的一个就是M，然后需要剔除的数据就是第二排开始计算的数组数据，可以重复一的步骤        一的步骤执行了几次就是Low的值，这个应该可以使用递归处理

user: user-3
content: 穷举法

user: user-0
content: 就是那个第一排人尽可能多不会啊

user: user-4
content: 求最长非递增子序列。