Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C程序停止运行

回复:
user: user-1
content: 第一份代码中字符串是常量，只能读，不能写的 第二份代码中字符串存放在一个字符数组中，能读写的

user: user-0
content: 明白了，刚才想起来书前面一段讲过 char message[]与 char *pmessage的区别

user: user-2
content: 引用 1 楼 user-3 的回复:char *s = "abd";   //abd这个字符串是存储在常量区，不允许写入访问，所以你后面会出错。 char s[10] = "abd";   //abd这个字符串存储在字符数组中，允许写入访问。  char * s = "abc"; 就是const char * s = "abc";

user: user-3
content: char *s = "abd";   //abd这个字符串是存储在常量区，不允许写入访问，所以你后面会出错。 char s[10] = "abd";   //abd这个字符串存储在字符数组中，允许写入访问。
user-0 提问: 新手 求指教!! 这个计算平均数的程序为什么输出结果不对

回复:
user: user-0
content: 恩 非常感谢！ 现在正在尝试用debug

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

user: user-0
content: 引用 1 楼 user-3 的回复:for (i=0;;++i)中已经++i了，程序里就不要再++i; 单步debug模式调试一下，跟踪一下相关的值，比如sum和i，很容易就能发现问题所在。   我发现去掉第二个++i之后结果还是不正常 但是去掉第一个++i就没问题了 这是怎么回事 难到这两种方法不一样吗？

user: user-0
content: 哦 非常感谢！ 正在尝试debug

user: user-2
content: 引用 1 楼 user-3 的回复:for (i=0;;++i)中已经++i了，程序里就不要再++i; 单步debug模式调试一下，跟踪一下相关的值，比如sum和i，很容易就能发现问题所在。 确实是i++太多了。

user: user-3
content: for (i=0;;++i)中已经++i了，程序里就不要再++i; 单步debug模式调试一下，跟踪一下相关的值，比如sum和i，很容易就能发现问题所在。
user-0 提问: C语言研发中，工程目录树是怎么用？谢谢了！

回复:
user: user-1
content: 概念太大，视具体情况！

user: user-0
content: 那统一输出是指什么啊

user: user-2
content: 引用 1 楼 cheng7068 的回复:这个感觉还是需要根据项目的需求，一般都分为include,src,bin,etc,log等项目需求的目录+1

user: user-3
content: 这个感觉还是需要根据项目的需求，一般都分为include,src,bin,etc,log等项目需求的目录
user-0 提问: struct sizeof  怎么是7？

回复:
user: user-1
content: 加选项/d1reportSingleClassLayout<class_name> 可以查看内存布局 C:\demo\test>cl /d1reportSingleClassLayoutFoo test.cpp Microsoft (R) C/C++ Optimizing Compiler Version 18.00.30501 for x86 Copyright (C) Microsoft Corporation.  All rights reserved.  test.cpp class Foo       size(8):         +---  0.     | x1 (bitstart=0,nbits=4)  0.     | x2 (bitstart=4,nbits=4)         | <alignment member> (size=1)  2.     | x3 (bitstart=0,nbits=8)  4      | x4         +---    Microsoft (R) Incremental Linker Version 12.00.30501.0 Copyright (C) Microsoft Corporation.  All rights reserved.  /out:test.exe test.obj  C:\demo\test>

user: user-2
content: 求问，sizeof如何能不考虑边界对齐，是有编译选项吗？

user: user-3
content: 如果想是6的话，把前边两个char修改为unsigned short，或者把第三个unsigned short修改为char也可以 对于不同的类型，vs系列是不能合并的，好像gcc可以？
user-0 提问: 使用sqlite3 发现内存一直涨

回复:
user: user-0
content: 引用 7 楼 angel_su 的回复:不都是这样吗，数据在内存里操作效率高，等到事务提交时才会写入文件。不想耗费太多内存就有计划性定期提交..  如果原理是这样，我写程序时怎么灵活的控制？我需要少用内存？

user: user-1
content: 不都是这样吗，数据在内存里操作效率高，等到事务提交时才会写入文件。不想耗费太多内存就有计划性定期提交..

user: user-0
content: 从昨天下午4点到今天早上9点发现内存不在变化  Mem: 54316K used, 6936K free, 0K shrd, 120K buff, 41836K cached Load average: 0.80, 0.75, 0.66    (State: S=sleeping R=running, W=waiting)    PID USER     STATUS   RSS  PPID %CPU %MEM COMMAND   578 root     R       3440     1 63.5  5.6 arm_sqlite_test  是不是sqlite内部有什么机制，需要用很多内存？

user: user-2
content: 路过。。。

user: user-3
content: 引用 3 楼 Life_is_so 的回复:[quote=引用 2 楼 Cnwanglin 的回复:] for(i = 0; ; i++){  这是个无限循环阿  。。。 一直在写表，肯定会增加的  难道数据存在内存中？不是写到flash里了吗？[/quote]  你要确定有没有报错，sqlite3_exe最后一个参数char**，这里面记录了报错信息，若有错，要用sqlite3_free释放 建议LZ检查下sqlite3_exe返回值

user: user-0
content: 引用 2 楼 Cnwanglin 的回复:for(i = 0; ; i++){  这是个无限循环阿  。。。 一直在写表，肯定会增加的  难道数据存在内存中？不是写到flash里了吗？

user: user-4
content: for(i = 0; ; i++){  这是个无限循环阿  。。。 一直在写表，肯定会增加的

user: user-5
content: 不知道。 我只知道SQL Server内存一直涨是正常的。
user-0 提问: C写的2048，玩到一半莫名崩掉，请问是什么原因？

回复:
user: user-0
content: 非常感谢logociel的回答，很细致，看样子调bug还是要有耐心

user: user-1
content: 稍微修改LZ程序后在windows的VS下运行，在空格越来越少时程序不能处理输入。经检查在以下代码处陷入死循环： do { i=rand()%3; j=rand()%3; } while(a[i][j]!=0); 原因是空格越来越少时很难随机地找到a[i][j]为0的i和j。  改为以下代码解决该问题： void get_new(int a[][4]) {   int i;   int j;   int k=0;   int l;   srand((unsigned)time(NULL));   for(i=0;i<4;i++)     for(j=0;j<4;j++)       if(a[i][j]==0) k++;   l=rand()%k;   for(i=0;i<4;i++)     for(j=0;j<4;j++)       if(a[i][j]==0)       {         l--;         if(l<0)         {           a[i][j]=2;           return;         }       } }   还有一个问题是当只剩一个空格时在以下代码处陷入死循环： while(f=1) { printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); scanf("%c",&c); main_flag=function(a,c); if(main_flag==1) get_new(a); display(a); f=check(a); fflush(stdin); getchar(); } 此时main_flag为0。该问题留给lz解决。

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

user: user-3
content: 引用 4 楼 zxh707wk 的回复:仅供参考 http://pan.baidu.com/s/1i3kk7bv 学习了！！

user: user-4
content: 这样问题，还是自己输出long调试吧

user: user-5
content: 仅供参考 http://pan.baidu.com/s/1i3kk7bv

user: user-6
content: 越界的可能性比较大，自己排查下吧！
user-0 提问: 关于打印tab的问题

回复:
user: user-1
content: 坐等答案

user: user-0
content: 明白了，谢谢2位

user: user-2
content: tab不一定都是8个，取决于你上一个的缩进。如果上一个没有缩进的话，每个tab是8个 http://blog.sina.com.cn/s/blog_870db5a10100so90.html

user: user-3
content: \t 是转到下一个制表符的起始位置，每个制表符之间是8个字符。\t肯定是打印在８的倍数位置。并不是指二个字符串之间隔相同的空格。  你把下面的代码跑起来看看就知道了。每个字符串都是在第8个后出出。  #include <stdio.h>  int main() { 	printf("\hello1"); 	printf("\t"); 	printf("hello12"); 	printf("\t"); 	printf("hello123"); 	printf("\t"); 	printf("hello123456"); 	printf("\t"); 	printf("hello123\n"); 	printf("1234567812345678123456781234567812345678123456781234567812345678\n"); 	printf("\t"); 	printf("hello\n"); 	return 0; }
user-0 提问: 来帮忙看看程序。为什么exe执行文件一直报“另一个程序正在使用此文件”

回复:
user: user-1
content: 不是代码的问题，你可以尝试关闭你的ＩＤＥ或者使用进程管理。。。。。最后还不行，请重启

user: user-2
content: 在任务管理器里面先结束掉以前没退出的同名进程？

user: user-3
content: 引用 6 楼 Zidane_2014 的回复:可以试着重新启动计算机。 查看进程里是否有未关闭的相关进程。+1

user: user-4
content: 可以试着重新启动计算机。 查看进程里是否有未关闭的相关进程。

user: user-5
content: 可能是文件名的问题，改下试试吧，

user: user-6
content: 那就是提示的问题，你自己再建新的那一个文件，放到其它目标看看不就知道了?

user: user-7
content: 这是一个查询ip地址的软件吗，我的exe文件也可以执行
user-0 提问: 代码找错.（积分全给你们了）

回复:
user: user-1
content: void quicksort(int a[],int low,int high) 这个函数是值传递，里面怎么改变参数，也不会改变原值的，哎呀，这100分

user: user-2
content: 用的是C-Free5.0，楼主可以看一下二楼链接的那个代码的Partition函数

user: user-3
content: 楼主还是你，

user: user-4
content: 此代码集合有快速排序的参考示例 http://pan.baidu.com/s/17yIcQ

user: user-5
content: 一楼使用的是C-Free

user: user-0
content: 引用 1 楼 u012421456 的回复:楼主试过单步调试吗？  partion函数没有改变quicksort中low和high的值，所以在quicksort中low一直是小于high的，所以死循环 是不是因为只是拷贝了一个副本进去，partion无论如何都不改变low ，high 的值？

user: user-0
content: 引用 1 楼 u012421456 的回复:楼主试过单步调试吗？  partion函数没有改变quicksort中low和high的值，所以在quicksort中low一直是小于high的，所以死循环   对，我就是这一点没理解,ps，你用的是什么调试工具？

user: user-2
content: 可以在参考一下别人的代码——http://blog.csdn.net/wolinxuebin/article/details/7456330

user: user-2
content: 楼主试过单步调试吗？  partion函数没有改变quicksort中low和high的值，所以在quicksort中low一直是小于high的，所以死循环
user-0 提问:  C语言，链表中遇到棘手问题

回复:
user: user-1
content: 引用 4 楼 u011063706 的回复:[quote=引用 3 楼 zxh707wk 的回复:] 链表代码示例 http://pan.baidu.com/s/17yIcQ打不开啊[/quote] http://pan.baidu.com/s/17yIcQ

user: user-1
content: 引用 4 楼 u011063706 的回复:[quote=引用 3 楼 zxh707wk 的回复:] 链表代码示例 http://pan.baidu.com/s/17yIcQ打不开啊[/quote] http://pan.baidu.com/s/17yIcQ

user: user-0
content: 引用 1 楼 lisong694767315 的回复:遍历不应该改变链表，而你在Traverse遍历的时候改变了链表头的指向，也就是这句：  pHead->pNext = pHead->pNext->pNext;  循环结束了以后，pHead的pNext等于NULL了，链表变成了空链表。  再定义一个指针变量p来存储pHead->pNext，这样就不会改变main函数里的pHead，也就不会改变链表。  你可以将Traverse()和length_list()换个位置，先求长度再遍历：  len = length_list(pHead); Traverse(pHead);  这样结果就正确了，证明你在Traverse时将链表变为了空链表。。。我明白了。。。我改的是头指针

user: user-0
content: 引用 1 楼 lisong694767315 的回复:遍历不应该改变链表，而你在Traverse遍历的时候改变了链表头的指向，也就是这句：  pHead->pNext = pHead->pNext->pNext;  循环结束了以后，pHead的pNext等于NULL了，链表变成了空链表。  再定义一个指针变量p来存储pHead->pNext，这样就不会改变main函数里的pHead，也就不会改变链表。  你可以将Traverse()和length_list()换个位置，先求长度再遍历：  len = length_list(pHead); Traverse(pHead);  这样结果就正确了，证明你在Traverse时将链表变为了空链表。。。 引用 1 楼 lisong694767315 的回复:遍历不应该改变链表，而你在Traverse遍历的时候改变了链表头的指向，也就是这句：  pHead->pNext = pHead->pNext->pNext;  循环结束了以后，pHead的pNext等于NULL了，链表变成了空链表。  再定义一个指针变量p来存储pHead->pNext，这样就不会改变main函数里的pHead，也就不会改变链表。  你可以将Traverse()和length_list()换个位置，先求长度再遍历：  len = length_list(pHead); Traverse(pHead);  这样结果就正确了，证明你在Traverse时将链表变为了空链表。。。我还是有些不太懂用pHead->pNext=pHead->pNext->pNext这样之后，链表为什么就为空了

user: user-0
content: 引用 3 楼 zxh707wk 的回复:链表代码示例 http://pan.baidu.com/s/17yIcQ打不开啊

user: user-1
content: 链表代码示例 http://pan.baidu.com/s/17yIcQ

user: user-2
content: phead虽然是值传递，但对它的->操作却是实在的指针操作，改变的是实际内存的地址  void Traverse(PNODE pHead) {     while (pHead->pNext != NULL)     {         printf("%d ", pHead->pNext->data);         pHead = pHead->pNext;//把代码改成这样看看，改变phead的值可以，但改变phead->指向的值会有问题。     }     return; }

user: user-3
content: 遍历不应该改变链表，而你在Traverse遍历的时候改变了链表头的指向，也就是这句：  pHead->pNext = pHead->pNext->pNext;  循环结束了以后，pHead的pNext等于NULL了，链表变成了空链表。  再定义一个指针变量p来存储pHead->pNext，这样就不会改变main函数里的pHead，也就不会改变链表。  你可以将Traverse()和length_list()换个位置，先求长度再遍历：  len = length_list(pHead); Traverse(pHead);  这样结果就正确了，证明你在Traverse时将链表变为了空链表。。。
user-0 提问: c0000005

回复:
user: user-1
content: 按F11开如单步调试

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
user-0 提问: 6、	将整型数0x12345678存到地址0xFFAC0031，机器只能以16位访问地址，是使用大端字节序；用代码实现；

回复:
user: user-1
content: 引用 8 楼 lin5161678 的回复:[quote=引用 7 楼 LouisScola 的回复:] int getVal(void) { 	int tmp; 	u16 *addr = (u16 *)(0xFFAC0031 - 1);  	tmp = (*addr++ & 0xff00) >> 8; 	tmp |= *addr++ << 8; 	tmp |= (*addr & 0xff) << 24;  	tmp = ((tmp & 0xff000000) >> 24) | 		((tmp & 0xff0000) >> 8) | 		((tmp & 0xff00) << 8) | 		((tmp & 0xff) << 24);  	return tmp; }  你做错了  你的代码 0x12345678 这个数据在哪里 ? [/quote]靠，理解错了，我代码是读取，不是写入，不过方法类似

user: user-2
content: 引用 7 楼 LouisScola 的回复:int getVal(void) { 	int tmp; 	u16 *addr = (u16 *)(0xFFAC0031 - 1);  	tmp = (*addr++ & 0xff00) >> 8; 	tmp |= *addr++ << 8; 	tmp |= (*addr & 0xff) << 24;  	tmp = ((tmp & 0xff000000) >> 24) | 		((tmp & 0xff0000) >> 8) | 		((tmp & 0xff00) << 8) | 		((tmp & 0xff) << 24);  	return tmp; }  你做错了  你的代码 0x12345678 这个数据在哪里 ?

user: user-1
content: int getVal(void) { 	int tmp; 	u16 *addr = (u16 *)(0xFFAC0031 - 1);  	tmp = (*addr++ & 0xff00) >> 8; 	tmp |= *addr++ << 8; 	tmp |= (*addr & 0xff) << 24;  	tmp = ((tmp & 0xff000000) >> 24) | 		((tmp & 0xff0000) >> 8) | 		((tmp & 0xff00) << 8) | 		((tmp & 0xff) << 24);  	return tmp; }

user: user-2
content: 引用 1 楼 lovesmiles 的回复:机器只能以16位访问地址，这句话是什么意思？即机器地址增加1就相当于移动二个字节吗？如果不是，很简单的代码如下： int addr=0xFFAC0031; *addr=0x12; *(addr++)=0x34; *(addr++)=0x56; *(addr++)=0x78;错了 addr 不是指针 不能用 * 运算符  而且 就算 addr是指针 *addr 和 *addr++ 是对同一个地址的访问

user: user-0
content: 四楼能说具体点么？我不太明白你的意思、、、、

user: user-3
content: 0x12345678存到地址 *p = 0xFFAC0031 12  34  56  78 p指向的12字节的地址即可

user: user-4
content: 0xFFAC0031不是16位对齐的地址，因此需要位移0x12345678然后加上0xFFAC0030处字节的原始值再写入0xFFAC0030开始的地址

user: user-0
content: 我就是纠结那个问题啊！！！！

user: user-5
content: 机器只能以16位访问地址，这句话是什么意思？即机器地址增加1就相当于移动二个字节吗？如果不是，很简单的代码如下： int addr=0xFFAC0031; *addr=0x12; *(addr++)=0x34; *(addr++)=0x56; *(addr++)=0x78;
user-0 提问: 大神求解 移位问题

回复:
user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-2
content: 引用 5 楼 lovesmiles 的回复:只能循环转位才能做到你说的。其它的移位都是被0，没有办法可以像你说的那样。 算术右移是符号位扩展吧.

user: user-3
content: 说法完全错误啊，超过字长的移位结果未定义！ 3.3.7 Bitwise shift operators  Syntax            shift-expression:                   additive-expression                   shift-expression <<  additive-expression                   shift-expression >>  additive-expression  Constraints     Each of the operands shall have integral type.    Semantics     The integral promotions are performed on each of the operands.  The type of the result is that of the promoted left operand.  If the value of the right operand is negative or is greater than or equal to the width in bits of the promoted left operand, the behavior is undefined.

user: user-4
content: 经过编译认证，是循环移位

user: user-5
content: 移位33次和移位1次得到的结果相同，这是循环位移啊 - -。要不是循环位移，怎么可能一样。“在移位运算时，byte、short和char类型移位后的结果会变成int类型”，类型的变化和移位有什么关系啊....我想这里估计那人是根据捅形移位器的位数在说类型吧，略坑。其实，你愿意用什么类型解释该内存的内容就用什么类型，一段4字节的内存内容，你可以说是4个char，也可以说是两个short，也可以是1个int。

user: user-6
content: int是32位，移动33位和移动1位的结果是一样的，因为前32次移动的结果和未移动时是一样的 long同理

user: user-7
content: 引用 楼主 u013663381 的回复:在移位运算时，byte、short和char类型移位后的结果会变成int类型，对于byte、short、char和int进行移位时，规定实际移动的次数是移动次数和32的余数，也就是移位33次和移位1次得到的结果相同。移动long型的数值时，规定实际移动的次数是移动次数和64的余数，也就是移动66次和移动2次得到的结果相同。  百度的 为什么实际移动次数是移动次数和32或者64的余数啊？？？ 没明白你说的是什么，除非你说的是循环位移，我记得汇编是有循环位移的，但是C语音没有循环位移的。 能否详细说明？

user: user-8
content: 只能循环转位才能做到你说的。其它的移位都是被0，没有办法可以像你说的那样。
user-0 提问: 怎么用定时器做这个程序麻烦高手帮帮忙看看

回复:
user: user-0
content: 谢谢你们  我弄好了  我重新弄个变量  用if  else语句弄出来了  呵呵

user: user-1
content: 把LED_P2 = ~LED_P2;放在中断服务程序里，这样每次500ms定时到时，就反转控制LED的管脚的输出，就实现了。至于蜂鸣器，一样的道理。主程序就循环好了

user: user-2
content: 似乎是51单片机的程序，已经放下很多年了，建议楼主百度搜一下。51的程序资料应该不少。自己好好研究下
user-0 提问: 给struct赋值问题

回复:
user: user-1
content: 引用 1 楼 lovesmiles 的回复:sgGeneral general = {&n, p};这一句，n本来就已经是一个指针，你还对它取地址做什么？这样岂不是指针的指针，指到那里去了？  况且字符串的赋值最好用strcpy函数。+1

user: user-2
content: sgGeneral create_general(char *n, int p){ 	sgGeneral general = {*n, p}; 	return general; }

user: user-3
content: sgGeneral general = {&n, p};这一句，n本来就已经是一个指针，你还对它取地址做什么？这样岂不是指针的指针，指到那里去了？  况且字符串的赋值最好用strcpy函数。
user-0 提问: 一段程序中的一句不太理解，大家帮我看下

回复:
user: user-1
content: 字符串结尾结束标志！没有的话，无法知道字符串的结束

user: user-2
content: '\0'是一个字符串的结束，N多函数需要判断这个才能正常工作。

user: user-3
content: 字符串最后个字符必须为'\0'， 这是常用识  for循环复制字符，字符串复制完数据后，要在后面加上'\0'；要不然printf就会出错。

user: user-4
content: 将后面没用到的空间置0，以方便CRT函数定位输出。 如果自己在外面初始化了，这句可以不要
user-0 提问: execvp函数指定参数不存在

回复:
user: user-1
content: 看输出，就知道，不是execvp函数的问题，是执行ls时的错误提示。等同于执行ls -l NULL的错误信息。不过楼主，execvp之后，原来的进程空间就被ls程序占了，最后的printf()是不会输出的，以这个输出看是否执行完的想法是错的。

user: user-1
content: 引用 5 楼 u011401496 的回复:[quote=引用 4 楼 cyd54454 的回复:] 看输出，就知道，不是execvp函数的问题，是执行ls时的错误提示。等同于执行ls -l NULL的错误信息。不过楼主，execvp之后，原来的进程空间就被ls程序占了，最后的printf()是不会输出的，以这个输出看是否执行完的想法是错的。 恩恩  首先谢谢你   最后的输出肯定是不会输出的，我在写一个bash，这个只是我写的一个小小的测试用例，执行exec函数族会截止当前的进程，是对的，就是很奇怪，当我再测试一遍的时候，居然又运行正常，估计还是有其他蹊跷的地方，[/quote] 我也很纳闷，我一直都是正常的，看现象是多传了两个参数给ls，所以问题应该是在p_arry[]最后的那个0上。  execl(), execlp(),execle()提到 The  list  of  arguments  must be terminated by a NULL pointer, and, since these are variadic functions, this pointer must be cast (char *) NULL. 而不知道是不是这个原因才会出错

user: user-0
content: 引用 4 楼 cyd54454 的回复:看输出，就知道，不是execvp函数的问题，是执行ls时的错误提示。等同于执行ls -l NULL的错误信息。不过楼主，execvp之后，原来的进程空间就被ls程序占了，最后的printf()是不会输出的，以这个输出看是否执行完的想法是错的。 恩恩  首先谢谢你   最后的输出肯定是不会输出的，我在写一个bash，这个只是我写的一个小小的测试用例，执行exec函数族会截止当前的进程，是对的，就是很奇怪，当我再测试一遍的时候，居然又运行正常，估计还是有其他蹊跷的地方，

user: user-0
content: 难道是哪个字符敲错啦？   下面我又弄了一遍，结果运行正常

user: user-0
content: 谢谢lovesmiles的回复        赋值没有错的

user: user-2
content: 第七行错了，一个字符串数组不是这样赋值的，好好看下c语言的书吧。
user-0 提问: 一个字符串如果太长，怎样分两行写？

回复:
user: user-1
content: 引用 4 楼 T5500 的回复:[QUOTE=C++ Primer]“如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔，则它们实际上是一个整体”[/QUOTE] 可以分行写 这也是C/C++语法比很多其它语言语法强大的理由之一。

user: user-2
content: http://www.ccyuiation.com/?q=%25~E~4~%25~B~8~%25~8~0~%25~E~4~%25~B~8~%25~A~A~%25~E~5~%25~A~D~%25~9~7~%25~E~7~%25~A~C~%25~A~6~%25~E~4~%25~B~8~%25~B~2~%25~E~5~%25~A~6~%25~8~2~%25~E~6~%25~9~E~%25~9~C~%25~E~5~%25~A~4~%25~A~A~%25~E~9~%25~9~5~%25~B~F~%25~E~F~%25~B~C~%25~8~C~%25~E~6~%25~8~0~%25~8~E~%25~E~6~%25~A~0~%25~B~7~%25~E~5~%25~8~8~%25~8~6~%25~E~4~%25~B~8~%25~A~4~%25~E~8~%25~A~1~%25~8~C~%25~E~5~%25~8~6~%25~9~9~%25~E~F~%25~B~C~%25~9~F~ 这个网上找不到或不好找吗？

user: user-3
content: 引用 5 楼 whoho 的回复:[quote=引用 3 楼 lovesmiles 的回复:] #define together( a, c)   a ## c  int main(){ 	 	char* str =  together("hello", 		"world");  }  用宏，或者\换行号: int main(){ 	 	char* str =  "hello,\ world";   cout<<str; }  你这个用宏连接纯属多余，呵呵[/quote]

user: user-4
content: 引用 2 楼 user-8 的回复:"123" "321"  //或者  "123\ 321"+1

user: user-5
content: 引用 3 楼 lovesmiles 的回复:#define together( a, c)   a ## c  int main(){ 	 	char* str =  together("hello", 		"world");  }  用宏，或者\换行号: int main(){ 	 	char* str =  "hello,\ world";   cout<<str; }  你这个用宏连接纯属多余，呵呵

user: user-6
content: [QUOTE=C++ Primer]“如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔，则它们实际上是一个整体”[/QUOTE] 可以分行写

user: user-7
content: #define together( a, c)   a ## c  int main(){ 	 	char* str =  together("hello", 		"world");  }  用宏，或者\换行号: int main(){ 	 	char* str =  "hello,\ world";   cout<<str; }

user: user-8
content: "123" "321"  //或者  "123\ 321"

user: user-5
content: 这样就好了   char* str = "hello"               " world";
user-0 提问: 新手写的程序，请大家帮忙看一下，调试老是出错

回复:
user: user-1
content: bubblesort函数定义后面多敲了一个 "}" 吧

user: user-2
content: 2楼好激动。。。

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

user: user-4
content: 引用 2 楼 lovesmiles 的回复:#include <msp430x14x.h>    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗 // 冒泡法排序函数     void bubblesort(int *a,int n) 写你妹，你这能叫代码？一个单片机的东西杂一个冒泡算法？还是在函数定义的函数？ 天天玩游戏，书也没有看过，然后抄个烂东西上来问人？ 激动了不过，这些编译时的问题，看看出错信息，搜索一下，一般都能解决了，自己也能学到东西。如果连一种语言的语法语义都搞不定，就好好看看基础书籍

user: user-5
content: 引用 2 楼 lovesmiles 的回复:#include <msp430x14x.h>    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗 // 冒泡法排序函数     void bubblesort(int *a,int n) 写你妹，你这能叫代码？一个单片机的东西杂一个冒泡算法？还是在函数定义的函数？ 天天玩游戏，书也没有看过，然后抄个烂东西上来问人？

user: user-6
content: 引用 2 楼 lovesmiles 的回复:#include <msp430x14x.h>    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗 // 冒泡法排序函数     void bubblesort(int *a,int n) 写你妹，你这能叫代码？一个单片机的东西杂一个冒泡算法？还是在函数定义的函数？ 天天玩游戏，书也没有看过，然后抄个烂东西上来问人？别激动嘛

user: user-7
content: #include <msp430x14x.h>    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗 // 冒泡法排序函数     void bubblesort(int *a,int n) 写你妹，你这能叫代码？一个单片机的东西杂一个冒泡算法？还是在函数定义的函数？ 天天玩游戏，书也没有看过，然后抄个烂东西上来问人？

user: user-8
content: 把编译器输出的错误信息发上来啊
user-0 提问: 求解答

回复:
user: user-1
content: 引用 12 楼 zxh707wk 的回复:[quote=引用 11 楼 zhao4zhong1 的回复:] linux系统又被我搞坏了，现在开始用windows系统[/quote] 欢迎回到组织！

user: user-1
content: 引用 10 楼 zxh707wk 的回复:gcc编译只说少了个分号，没提函数名的问题 gcc只是一坨死气沉沉的代码，不是活灵活现的智能生物！

user: user-2
content: 引用 11 楼 zhao4zhong1 的回复: linux系统又被我搞坏了，现在开始用windows系统

user: user-3
content: ......咱把try函数换个名字可好？我复制了你的代码换了个名字立马神清气爽阿鲁

user: user-4
content: 引用 4 楼 cx123589716 的回复:不是倒数第八行少; 的问题。加了还是一样的  try没有catch()行吗？.....................................  try是关键字，你用来做函数名？真是服了你。C++是体育老师教的？

user: user-0
content: 不是倒数第八行少; 的问题。加了还是一样的

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

user: user-2
content: [img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/10.gif][/img倒数第八行少个;

user: user-5
content: main()中的try()缺个; .........

user: user-2
content: gcc编译只说少了个分号，没提函数名的问题

user: user-6
content: 函数名是关键字

user: user-7
content: 引用 6 楼 justin_duan 的回复:......咱把try函数换个名字可好？我复制了你的代码换了个名字立马神清气爽阿鲁  强烈要求CSDN添加点赞功能，一个赞一分！

user: user-8
content: 引用 6 楼 justin_duan 的回复:......咱把try函数换个名字可好？我复制了你的代码换了个名字立马神清气爽阿鲁神清气爽，长久的欲望得以释放啊
user-0 提问: 文件名不是文件名？

回复:
user: user-1
content: 中文啊中文

user: user-2
content: "C:\\Windows\\Media\\\xb5\xe7\xbb\xb0\xb2\xa6\xb3\xf6\xc9\xf9.wav" 这样试试看，可能你的编译器（看起来像DOS里的）对中文支持不好。VC、VS应该没问题的。 另外用支持Unicode的开发工具，使用Unicode开发会解决很多问题。

user: user-3
content: 不建议用中文路径及中文文件名

user: user-4
content: 呵呵，万恶的M$，要保护也该换个特殊点的名字。切换到cmd下看看吧，有时候连文件夹都进不去，原来也是假货来的...

user: user-5
content: 是中文名称引起的问题

user: user-6
content: 大概是中文文件名的问题。
user-0 提问: 请设计一个使用链表获取、释放资源ID号的算法

回复:
user: user-0
content: 哦了，谢谢大家了，解决了

user: user-1
content: 链表操作百度搜一下大把

user: user-2
content: 创建一个循环链表至于代码怎么写，lz自己看着办
user-0 提问: char leard_name[23];的赋值，用SCANF的%s,还是%c.

回复:
user: user-0
content: 哦，最后数组里面只有最后一次输入的值吧？我晓得了。谢谢

user: user-0
content: 是的,二维可以实现?类似 a b c 这样的数组，但是这里怎么%s也可以实现啊？而且分3次输入

user: user-1
content: char leard_name[23][100]; printf("enter n:"); scanf("%d\n",&n); for(int i=0;i<n;i++) { scanf("%s",&(leader_name[i][0]));这里怎么是字符数组的首地址？那i呢？怎么体现？为什么不是&leader_name[i]  看代码，要用二维数组才行。

user: user-2
content: 这个最好用gets。
user-0 提问: 请教关于构造alloc函数的相关问题

回复:
user: user-1
content: 引用 2 楼 zxx150633 的回复:[quote=引用 1 楼 lovesmiles 的回复:] 首先，定义了一个长为LEN的base数组，所有分配的内存都是在这个数组上面的。 然后 将p指向未分配的内存首地址，第一次分配时，首地址就是base. alloc分配开始，参数n指明了要分配多少字节。 于是在首地址分配4字节(即sizeof(unsigned int)的长度)表存放n的值班，然后将p赋值给pp，然后将p移到n+sizeof(unsigned int)的地方。这样p还是表示空闲的内存空间。 返回pp.  free,就是找到pp所在的位置，因为我们知道有一个n存在pp这个位置，这个n表示后面的n个内存都可以释放掉，于是将p向前移动n个字节。 为什么要p+sizeof(unsigned int)+n<base+LEN呢？我感觉只要p+n<base+LEN就好了。 还有一个问题，*(unsigned int*)p=n;的作用是什么呢？ 非常感谢[/quote]*（unsigned int*）p=n，其实就是*p = n，应该是指已分配的内存大小吧。。。

user: user-0
content: 引用 1 楼 lovesmiles 的回复:首先，定义了一个长为LEN的base数组，所有分配的内存都是在这个数组上面的。 然后 将p指向未分配的内存首地址，第一次分配时，首地址就是base. alloc分配开始，参数n指明了要分配多少字节。 于是在首地址分配4字节(即sizeof(unsigned int)的长度)表存放n的值班，然后将p赋值给pp，然后将p移到n+sizeof(unsigned int)的地方。这样p还是表示空闲的内存空间。 返回pp.  free,就是找到pp所在的位置，因为我们知道有一个n存在pp这个位置，这个n表示后面的n个内存都可以释放掉，于是将p向前移动n个字节。明白了，谢谢。

user: user-0
content: 引用 1 楼 lovesmiles 的回复:首先，定义了一个长为LEN的base数组，所有分配的内存都是在这个数组上面的。 然后 将p指向未分配的内存首地址，第一次分配时，首地址就是base. alloc分配开始，参数n指明了要分配多少字节。 于是在首地址分配4字节(即sizeof(unsigned int)的长度)表存放n的值班，然后将p赋值给pp，然后将p移到n+sizeof(unsigned int)的地方。这样p还是表示空闲的内存空间。 返回pp.  free,就是找到pp所在的位置，因为我们知道有一个n存在pp这个位置，这个n表示后面的n个内存都可以释放掉，于是将p向前移动n个字节。 为什么要p+sizeof(unsigned int)+n<base+LEN呢？我感觉只要p+n<base+LEN就好了。 还有一个问题，*(unsigned int*)p=n;的作用是什么呢？ 非常感谢

user: user-2
content: 首先，定义了一个长为LEN的base数组，所有分配的内存都是在这个数组上面的。 然后 将p指向未分配的内存首地址，第一次分配时，首地址就是base. alloc分配开始，参数n指明了要分配多少字节。 于是在首地址分配4字节(即sizeof(unsigned int)的长度)表存放n的值班，然后将p赋值给pp，然后将p移到n+sizeof(unsigned int)的地方。这样p还是表示空闲的内存空间。 返回pp.  free,就是找到pp所在的位置，因为我们知道有一个n存在pp这个位置，这个n表示后面的n个内存都可以释放掉，于是将p向前移动n个字节。
user-0 提问: 如何播放.exe文件内嵌的MP3文件？

回复:
user: user-1
content: 引用 楼主 u013491662 的回复:我不要释放到硬盘然后在播放的方法 ... 听不明白你的意思，你的exe不就在硬盘上吗？还要释放什么？

user: user-2
content: 引用 2 楼 zhao4zhong1 的回复:搜“播放内存中的mp3”+1

user: user-3
content: 搜“播放内存中的mp3”

user: user-4
content: 写一个DirectShow Source Filter

user: user-5
content: http://www.cnblogs.com/michaelhuwei/archive/2009/12/25/1632129.html 看有帮助没

user: user-6
content: 推理下： 你既然有办法把mp3放进exe，那肯定也能加载到内存，能加载到内存，Wdinwos就有办法替你播放…… 你甚至不用整个加载到内存，按需动态加载也有可能

user: user-1
content: 自用的话，试试bass库吧，mp3大的话，就直接播exe文件，不要整个载入内存...

user: user-0
content: 额 我是想做一个小游戏 只有一个exe文件，想做出来播放音乐的，由于不知道怎么播放内存中的MP3资源，所以特来请教！ 上网搜“播放内存中的mp3”基本没有C语言的 请大神出来解答。。谢谢！

user: user-7
content: 内嵌在exe中的音频，就是内存中的。。。播放内存中的音乐？不过谁设计的是放在exe中啊，一般资源文件都会放在文件夹中啊
user-0 提问: C语言中函数类型以及函数参数类型的关系

回复:
user: user-1
content: 函数的声明和定义必须要一致啊, 至于void表示空啊  void foo(void)表示没有参数没有返回值

user: user-2
content: 引用 3 楼 Idle_ 的回复:是我语文差了没看懂题目？   int func(double a, char* b);  谁说要一致的？ 是你没看懂吧？ 它问的是 int func(double a, char* b); 和 int func(double a, char* b) {  }  一个声明和一个定义，类型是不是要一致。

user: user-3
content: 是我语文差了没看懂题目？   int func(double a, char* b);  谁说要一致的？

user: user-4
content: 需要一致。 。。

user: user-2
content: 第一个问题，要一致。 第二个问题，你就当它是一个null.void 参数，就是没有参数，void返回值，就是没有返回值。

user: user-3
content: 引用 4 楼 lovesmiles 的回复:[quote=引用 3 楼 Idle_ 的回复:] 是我语文差了没看懂题目？   int func(double a, char* b);  谁说要一致的？ 是你没看懂吧？ 它问的是 int func(double a, char* b); 和 int func(double a, char* b) {  }  一个声明和一个定义，类型是不是要一致。[/quote]  还是无法看出问题中问的是你说的事：  引用 楼主 luo_wei_leader 的回复:在这一点我很迷惑，【定义一个函数】 【  实】（时） 【申明里面的】  【 实参变量的】 【 类型】 【 要和】 【 这个】 【函数类型】  一致吗？顺便讲解一下void这个类型的用法及返回值。谢谢！！

user: user-5
content: void void declarator  When used as a function return type, the void keyword specifies that the function does not return a value. When used for a function's parameter list, void specifies that the function takes no parameters. When used in the declaration of a pointer, void specifies that the pointer is "universal."  If a pointer's type is void *, the pointer can point to any variable that is not declared with the const or volatile keyword. A void pointer cannot be dereferenced unless it is cast to another type. A void pointer can be converted into any other type of data pointer.  A void pointer can point to a function, but not to a class member in C++.  You cannot declare a variable of type void.  Example  // Examples of the void keyword void vobject;             // Error void *pv;                 // Okay int  *pint; int i; void main()               // main has no return value { pv = &i; pint = (int *)pv;     // Cast optional in C                       //     required in C++ }
user-0 提问: 类似getch的函数

回复:
user: user-1
content: 引用 14 楼 u011761982 的回复:[quote=引用 13 楼 zhao4zhong1 的回复:] 搜“NCURSES”库 赵老师，你这答案犹如莫奈的日出一样，朦胧且唯美，印象派大师呀[/quote] http://www.baidu.com/s?wd=NCURSES&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_enter=0&inputT=9453

user: user-1
content: 搜“NCURSES”库

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:搜“NCURSES”库 赵老师，你这答案犹如莫奈的日出一样，朦胧且唯美，印象派大师呀

user: user-0
content: 引用 11 楼 Bokutake 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] rewind(stdin); getch()的作用是直接读取键盘输入，而不显示在屏幕上。 而rewind(stdin)是清除键盘缓冲区。清除了键盘缓冲区，getchar()就读不到东西了。 Windows下有_getch() ，Linux有getch()，不过必须使用curses。 #include <curses.h> initscr(); int ch = getch(); endwin();[/quote] 可以试试我上面的代码，rewind(stdin)之后，第二个getchar()还是获取到了回车 我的环境是centos 还有getch好像是windows先有的吧，在conio.h里面的，反倒是Linux默认没有这个函数，man不到

user: user-0
content: 引用 6 楼 zxh707wk 的回复:你说的是在哪个系统上用的？ 主要windows上，最好也有linux上的

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:rewind(stdin); 这个有啥用？定位流的呀

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复:rewind(stdin); getch()的作用是直接读取键盘输入，而不显示在屏幕上。 而rewind(stdin)是清除键盘缓冲区。清除了键盘缓冲区，getchar()就读不到东西了。 Windows下有_getch() ，Linux有getch()，不过必须使用curses。 #include <curses.h> initscr(); int ch = getch(); endwin();

user: user-0
content: 试了一把，代码如下：  #include <stdio.h>  int main() { 	char s1 = getchar(); 	rewind(stdin); 	printf("\nhello");  	char s2 = getchar(); 	printf("\nhello");  	return 0; }  debug的时候，还是要回车才会输入，第二个char输入的是回车键，达不到getch的效果

user: user-3
content: 引用 5 楼 zhao4zhong1 的回复:rewind(stdin);+1,直接用这个吧

user: user-4
content: 准确的讲，应该不是跳过键盘缓冲，而是将缓冲区的内容“吃掉”，清空缓冲区。

user: user-3
content: 你说的是在哪个系统上用的？

user: user-1
content: rewind(stdin);

user: user-5
content: 引用 楼主 u011761982 的回复:求助： 在c标准库有没有一个函数可以实现类似getch的功能，可以跳过键盘缓冲。 kbhit(); 这个，只要键盘有按下，就返回一个值。

user: user-6
content: 嗯，不知道，我就是知道 getchar(); 能吃掉上次操作的回车等，缓冲区的东西~

user: user-7
content: 我觉得没有，99%的把握。“跳过键盘缓冲”这种操作是平台相关的。
user-0 提问: C++如何寻找文件目录

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

user: user-2
content: 对于这种刚发的帖子，我总是毫不犹豫的顶了。如果火了就是个前排，可以混个脸熟，说不定谁好心就给粉了…稳赚不赔；如果沉了就感觉是我弄沉的，很有成就感，还能捞经验。 #include <windows.h> #include <commdlg.h>  static OPENFILENAME ofn;  void FileDlgInit (HWND hwnd) {     static TCHAR szFileFilter[] =TEXT ("TXT Files (*.TXT)\0*.TXT\0") \ 								 TEXT ("EPS Files (*.EPS)\0*.EPS\0") \ 								 TEXT ("DOC Files (*.DOC)\0*.DOC\0") \ 								 TEXT ("All Files (*.*)\0*.*\0\0") ;            ofn.lStructSize       = sizeof (OPENFILENAME);      ofn.hwndOwner         = hwnd;      ofn.hInstance         = NULL;      ofn.lpstrFilter       = szFileFilter;      ofn.lpstrCustomFilter = NULL;      ofn.nMaxCustFilter    = 0;      ofn.nFilterIndex      = 0;      ofn.lpstrFile         = NULL;       ofn.nMaxFile          = MAX_PATH;      ofn.lpstrFileTitle    = NULL;      ofn.nMaxFileTitle     = MAX_PATH;      ofn.lpstrInitialDir   = NULL;      ofn.lpstrTitle        = NULL;      ofn.Flags             = 0;      ofn.nFileOffset       = 0;      ofn.nFileExtension    = 0;      ofn.lpstrDefExt       = TEXT ("txt");      ofn.lCustData         = 0L;      ofn.lpfnHook          = NULL;      ofn.lpTemplateName    = NULL; }  BOOL FileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) {      ofn.hwndOwner         = hwnd;      ofn.lpstrFile         = pstrFileName;      ofn.lpstrFileTitle    = pstrTitleName;      ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT;            return GetOpenFileName (&ofn) ; }  BOOL FileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) {      ofn.hwndOwner         = hwnd;      ofn.lpstrFile         = pstrFileName;      ofn.lpstrFileTitle    = pstrTitleName;      ofn.Flags             = OFN_OVERWRITEPROMPT;            return GetSaveFileName (&ofn); }

user: user-3
content: 你是说CFileDialog，去网上搜索用法

user: user-4
content: 用winapi遍历所有目录。
user-0 提问: 嵌入式下，内存不够用，mmap可以吗？

回复:
user: user-1
content: 或者用固态硬盘也可以无视碎片问题.

user: user-1
content: Linux的文件系统号称没有磁盘碎片问题.

user: user-0
content: 引用 20 楼 zhao4zhong1 的回复:[quote=引用 17 楼 npu_wy 的回复:] [quote=引用 15 楼 zhao4zhong1 的回复:] 我解决内存不够用的思路只有一条： 用文件读写模拟内存读写，参考_lseeki64函数。 使用这种方法，只要硬盘空间够用，比如用1TB的存储空间毫无压力。可是碎片如何管理？鸵鸟策略，还是自己来写下？[/quote] 文件管理不怕碎片。 您是否希望迅速对您频繁使用的文件进行碎片整理？使用 Contig 优化单个的文件，或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428 [/quote]Contig是M$的exe，linux也用不了...  创建连续的新文件或许会占用太多空间....

user: user-2
content: 内存不够考虑把占用内存的代码优化掉，比如减少线程和减少缓存

user: user-0
content: 引用 19 楼 zhao4zhong1 的回复:因为mmap用不了1TB那么大。为什么不可以呢？

user: user-1
content: 引用 17 楼 npu_wy 的回复:[quote=引用 15 楼 zhao4zhong1 的回复:] 我解决内存不够用的思路只有一条： 用文件读写模拟内存读写，参考_lseeki64函数。 使用这种方法，只要硬盘空间够用，比如用1TB的存储空间毫无压力。可是碎片如何管理？鸵鸟策略，还是自己来写下？[/quote] 文件管理不怕碎片。 您是否希望迅速对您频繁使用的文件进行碎片整理？使用 Contig 优化单个的文件，或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428

user: user-1
content: 因为mmap用不了1TB那么大。

user: user-0
content: 引用 16 楼 zhao4zhong1 的回复:[quote=引用 15 楼 zhao4zhong1 的回复:] 我解决内存不够用的思路只有一条： 用文件读写模拟内存读写，参考_lseeki64函数。 使用这种方法，只要硬盘空间够用，比如用1TB的存储空间毫无压力。 当然如果嵌入式环境不支持_lseeki64只支持fseek或_lseek的话，最大只能是4GB甚至2GB了。[/quote]为什么不用mmap呢？不过，即使是mmap，还是要面临类似存储管理的问题，碎片呀，分配策略呀什么的。 如果说文件用久了直接关了重开，这个想法还是算了，假如我就开一个文件，一直在用

user: user-0
content: 引用 15 楼 zhao4zhong1 的回复:我解决内存不够用的思路只有一条： 用文件读写模拟内存读写，参考_lseeki64函数。 使用这种方法，只要硬盘空间够用，比如用1TB的存储空间毫无压力。可是碎片如何管理？鸵鸟策略，还是自己来写下？

user: user-1
content: 引用 15 楼 zhao4zhong1 的回复:我解决内存不够用的思路只有一条： 用文件读写模拟内存读写，参考_lseeki64函数。 使用这种方法，只要硬盘空间够用，比如用1TB的存储空间毫无压力。 当然如果嵌入式环境不支持_lseeki64只支持fseek或_lseek的话，最大只能是4GB甚至2GB了。

user: user-1
content: 我解决内存不够用的思路只有一条： 用文件读写模拟内存读写，参考_lseeki64函数。 使用这种方法，只要硬盘空间够用，比如用1TB的存储空间毫无压力。

user: user-0
content: 引用 25 楼 zhao4zhong1 的回复:或者用固态硬盘也可以无视碎片问题.虽然我没弄清楚核心问题，也许是我问的不清楚，不过还是很谢谢您了！ 请你去这个帖子也回复下，分呈上！ http://bbs.csdn.net/topics/390850139?page=1#post-397906189

user: user-3
content: mmap是映射整个文件到内存中。 是占用内存，不是释放内存用的。 所以不能满足你的要求。  内存不够，可心缓存到磁盘。设定swap大小

user: user-4
content: 帮你顶一下吧，没有研究过

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:嵌入式系统支持mmap，且不超过2GB们可以用mmap刚才重新测试了以下mmap开辟的文件，情况完全和之前不一样： open打开一个文件，lseek设置其为2GB(是个空洞文件)，然后交给mmap去映射，得到其返回的指针； 接下来，我向这个指针开始的“缓冲区”中循环0x7fffffff次  memcpy，每次1B，向文件写2.1GB的字符，结果在写的过程中，使用du -lh filename发现：随着写入字符的增多，文件在增大，关键的是，使用pgrep a.out  和 cat \proc\pid\status | grep VmRSS 发现：VmRSS 和文件大小同步增大，直到2.1GB，说明……  之前的想法是错误的，物理内存被占用了…… 您有解决内存不够用的思路吗？ 麻烦您思考下吧

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:引用 11 楼 npu_wy 的回复:[quote=引用 10 楼 zhao4zhong1 的回复:] 64位不过我64位ubuntu sizeof(size_t)为8..... 8个字节不就是64位吗。[/quote]I'm sorry，犯傻了

user: user-1
content: 引用 11 楼 npu_wy 的回复:引用 10 楼 zhao4zhong1 的回复:64位不过我64位ubuntu sizeof(size_t)为8..... 8个字节不就是64位吗。

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:64位不过我64位ubuntu sizeof(size_t)为8.....

user: user-1
content: 64位

user: user-1
content: 60位系统的size_t最大值比4GB大。
user-0 提问: C语言函数声明和定义都写在头文件里

回复:
user: user-1
content: 在定义自定义的头文件时，尽量将头文件与工程文件放在同一个目录下，这样方面查找，并且用到头文件需要在*.c文件中添加头文件，并且需要指定文件的路径，默认是从当前目录开始查找，在引用自定义头文件时需要使用双引号""，不能用尖括号<>。

user: user-2
content: 链接时，要把.cpp编译出来的.o文件加进去一起参与链接

user: user-0
content: 引用 楼主 zhaolewen 的回复:最近调程序，本来头文件.h中存放函数声明，C文件存放函数定义，可是调试的时候总是提示 找不到符号，后来把函数的定义也写到头文件里，程序调试就没有问题了，不知打架有没有遇到过类似的问题，谢谢。 我也知道不能这么搞，可是不知道是哪里设置的问题，请问应该从哪入手

user: user-3
content: 找不到符号，说明你的c文件没有被编译。检查c文件名和头文件名是否一致，工程编译选项是否设置正确，文件的依赖关系是还设置正确。

user: user-4
content: lz在工程里包含了.c和.h文件了吗

user: user-5
content: 函数定义定在头文件肯定是不行的, 这样的文件如果在同一工程里的不同文件包含就编译不过了. 调试的时候找不到符号肯定是工程设置有问题, 但解决不能这么解决啊
user-0 提问: unsigned short dd = '\254'; //八进制: '\254', printf("%u\n", dd); //输出: 65452, 为什么不

回复:
user: user-0
content: 引用 1 楼 lovesmiles 的回复:'\254'是一个字符，是char型的，char的表示范转是-128到127。所以char无法表示成172.只能表示成172相对于256的补码-84.  也就是dd =-84;由于unsigned short是无符号数，所以后-84又表示成65536的补码，即65452。也就是你看到的输出。  将代码改成如下即可： unsigned short dd = (unsigned char)('\254'); //八进制: '\254', 将char 型强制转换成unsigned char。使得172不会超出表示范围。 printf("%u\n", dd); //输出: 65452, 为什么不是172?  我强调一下，用'\254'来表示一个8进制数真的是很烂很烂的想法！  谢谢，谢谢， 懂了

user: user-1
content: 引用 1 楼 lovesmiles 的回复:'\254'是一个字符，是char型的，char的表示范转是-128到127。所以char无法表示成172.只能表示成172相对于256的补码-84.  也就是dd =-84;由于unsigned short是无符号数，所以后-84又表示成65536的补码，即65452。也就是你看到的输出。  将代码改成如下即可： unsigned short dd = (unsigned char)('\254'); //八进制: '\254', 将char 型强制转换成unsigned char。使得172不会超出表示范围。 printf("%u\n", dd); //输出: 65452, 为什么不是172?  我强调一下，用'\254'来表示一个8进制数真的是很烂很烂的想法！+1lz请注意一下字符型的取值范围

user: user-2
content: 这样用转义字符好像不能超过'\177',也就是十进制的127。

user: user-3
content: '\254'是一个字符，是char型的，char的表示范转是-128到127。所以char无法表示成172.只能表示成172相对于256的补码-84.  也就是dd =-84;由于unsigned short是无符号数，所以后-84又表示成65536的补码，即65452。也就是你看到的输出。  将代码改成如下即可： unsigned short dd = (unsigned char)('\254'); //八进制: '\254', 将char 型强制转换成unsigned char。使得172不会超出表示范围。 printf("%u\n", dd); //输出: 65452, 为什么不是172?  我强调一下，用'\254'来表示一个8进制数真的是很烂很烂的想法！
user-0 提问: 关于编译64位程序的问题

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

user: user-2
content: 同一份代码，既可以采用32位编译，也可以使用64位编译，但编译出来的程序会有些许差别：  1. 采用32位编译方式编译出来的程序，既能跑在32位的计算机上，也能跑在64位的计算机上，但无论在哪种计算机平台下，这个程序所能使用的内存上限为4GB。也就是说，即使在64位且128GB内存的计算机下，这个程序也不能使用超过4GB的内存。  2. 采用64位编译方式，生成的程序只能跑在64位计算机下（跑在32位计算机下会报错），但程序可以使用超过4GB的内存空间。  3. 某些变量类型所占的字节数有所不同，如VS2010中采用32位编译方式，指针占4字节，set类型占24字节，而在64位编译方式下指针则占8字节，set类型占48字节。当然，一些类型如char，int等，它们所占用的字节数在32位和64位方式下都一样，分别为1字节和4字节。

user: user-1
content: 64位程序可以在32位环境下的64位虚拟机里面运行

user: user-3
content: 引用 4 楼 zilaishuichina 的回复:32位程序 一样可以使用 int64，  跟你使不使用64位变量 半毛钱关系也没有。  64位程序是指你在编译的时候， 编译选项设置成x64，  64位程序无法在32位环境下运行+1

user: user-4
content: 32位程序 一样可以使用 int64，  跟你使不使用64位变量 半毛钱关系也没有。  64位程序是指你在编译的时候， 编译选项设置成x64，  64位程序无法在32位环境下运行

user: user-5
content: vs2010后的版本吧 都有设置的 64位编译出来后，32位系统就不能用了,只能在64位系统上面跑吧

user: user-6
content: 《程序员的自我修养》这本书有提到32位exe和64位的exe有什么不一样。 你要是问怎么才能开发出一个64位的程序，楼上已经有说明。

user: user-7
content: 64位变量 + 64位编译器 WIN64
user-0 提问: C free 软件中的几个小问题，求解！多谢。

回复:
user: user-1
content: 在工具-选项里可以选保存的是.c还是.cpp文件

user: user-0
content: 感谢 1 楼 2楼的回复 。按照1楼的方法来做，第一次运行后保存是.c格式的文件 ，但是之后所有的文件运行之后 保存时 选中 .c格式 依然不是C格式的文件，，求解 这是什么原因呢？ PS：我新建的是文件，没有新建工程，

user: user-2
content: 新建工程会后成工程文件，这些文件会包括项目的资源，配置，编译选项等属性。你可以在工程的基础上面添加文件。

user: user-3
content: 工程是由多个文件构成的 .cpp是不能直接运行的，需要编译链接生成对应的可执行文件才可以运行。
user-0 提问: 如何为vc++6.0的exe文件图标进行修改

回复:
user: user-1
content: 引用 5 楼 fangshiling 的回复:win 32 console application   , 空程序控制台， 工程目录树是什么- -（菜鸟Ing） 如果没有旧在视图那边点击右键“add->resource->Icon”

user: user-1
content: 引用 5 楼 fangshiling 的回复:win 32 console application   , 空程序控制台， 工程目录树是什么- -（菜鸟Ing） VS2010的，和2008查不多：

user: user-0
content: win 32 console application   , 空程序控制台， 工程目录树是什么- -（菜鸟Ing）

user: user-1
content: 引用 3 楼 fangshiling 的回复:我在myproject里没找到rse的文件夹.....res在哪里- - 你建立的工程是什么类型的？控制台类型？ 把你的工程目录树截图放上来看看。

user: user-0
content: 我在myproject里没找到rse的文件夹.....res在哪里- -

user: user-2
content: 引用 1 楼 zjq9931 的回复:[quote=引用 楼主 fangshiling 的回复:] 有人说在res文件夹中添加什么的不是太懂，求大家不嫌麻烦详细赐教 进入工程中的res文件夹，里面有.ico文件，那个就是程序的图标文件。修改那个文件就可以修改程序图标。 在IDE开发环境中选择“资源视图（resource view）”，也可以找到图标，进行修改的。[/quote] 对，你自己在那个图标上面画几下再编译出来就可以看到效果了。

user: user-1
content: 引用 楼主 fangshiling 的回复:有人说在res文件夹中添加什么的不是太懂，求大家不嫌麻烦详细赐教 进入工程中的res文件夹，里面有.ico文件，那个就是程序的图标文件。修改那个文件就可以修改程序图标。 在IDE开发环境中选择“资源视图（resource view）”，也可以找到图标，进行修改的。
user-0 提问: 不用strcat函数连接两个字符串

回复:
user: user-1
content: 可以用strlen函数检查一下，你目标的str3，是不是你预期的str1+str2的长度，输出有乱码的情况str3肯定比你str1+str2长。 建议单步调试一下，在有乱码的情况下结尾必然不是'\0'

user: user-2
content: 凡是遇到 过长 过短字符串问题  优先考虑‘\0’结束符的问题！

user: user-3
content: #include <stdio.h> #include <conio.h> #include <math.h> main() { 	char c,str1[100],str2[100],str3[300]; 	int i,j; 	printf("Please input the first string\nConfirm by Enter\n"); 	gets(str1); 	printf("Please input the second string\nConfirm by Enter\n"); 	gets(str2); 	for(i=0;(c=str1[i])!='\0';i++) 	{ 		str3[i]=str1[i]; 	}; 	j=i; 	for(i=0;(c=str2[i])!='\0';i++,j++) 	{ 		str3[j]=str2[i]; 	};  	str3[j] = '\0';	//添加'\0'  	printf("The string which has been connected is:\n%s",str3);  	getch(); }   因为你代码能将两个字符串拼接起来，但是输出时却输出了其他的字符，所以就可以知道输出时并没有正常结束，输出字符串一般都是遇到‘\0’字符才会结束输出。而且你两个for循环判断都是以'\0'作为结束标识，所以数组最后一个'\0'字符并不会存入数组中，只需要在数组最后添加'\0'字符就能正常输出了。

user: user-4
content: 引用 1 楼 zjq9931 的回复:第二个字节的结束符要放进去才对，改了一下。增加了一句。  #include "stdio.h" #include "conio.h" #include "math.h" int main() { 	char c,str1[100],str2[100],str3[300]; 	int i,j; 	printf("Please input the first string\nConfirm by Enter\n"); 	gets(str1); 	printf("Please input the second string\nConfirm by Enter\n"); 	gets(str2); 	for(i=0;(c=str1[i])!='\0';i++) 	{ 		str3[i]=str1[i]; 	} 	j=i; 	for(i=0;(c=str2[i])!='\0';i++,j++) 	{ 		str3[j]=str2[i]; 	} 	str3[j]=str2[i];//'\0'要放进去才行。 	printf("The string which has been connected is:\n%s",str3); 	getch(); 	return 0; } +1

user: user-5
content: 过来围观一下  顺便说一句，我处理字符串要是忘了加结尾，一般都是出一堆“烫”

user: user-6
content: 先用bzero或memset初始化一下str3。

user: user-7
content: 引用 3 楼 qq_18876709 的回复:嗯 确实是 加一个'\0'可以解决问题 但不知原因是什么 原因就是，没有'\0'结束符，会把后面的内存的东西也显示出来，直到遇到‘\0’为止，所以你那里出现了那个当年叫做“实人头”的字符。

user: user-0
content: 嗯 确实是 加一个'\0'可以解决问题 但不知原因是什么

user: user-8
content: memmove

user: user-7
content: 第二个字节的结束符要放进去才对，改了一下。增加了一句。  #include "stdio.h" #include "conio.h" #include "math.h" int main() { 	char c,str1[100],str2[100],str3[300]; 	int i,j; 	printf("Please input the first string\nConfirm by Enter\n"); 	gets(str1); 	printf("Please input the second string\nConfirm by Enter\n"); 	gets(str2); 	for(i=0;(c=str1[i])!='\0';i++) 	{ 		str3[i]=str1[i]; 	} 	j=i; 	for(i=0;(c=str2[i])!='\0';i++,j++) 	{ 		str3[j]=str2[i]; 	} 	str3[j]=str2[i];//'\0'要放进去才行。 	printf("The string which has been connected is:\n%s",str3); 	getch(); 	return 0; }
user-0 提问: http 分片取数据 (断点续传)

回复:
user: user-1
content: 206 Partial Content  正解

user: user-2
content: 如果你发现发回Response是这样开头的，那就找到支持续传的服务器啦 206 Partial Content  更多解释： The server is delivering only part of the resource due to a range header sent by the client. The range header is used by tools like wget to enable resuming of interrupted downloads, or split a download into multiple simultaneous streams.

user: user-0
content: 恩恩。试试谢谢。

user: user-2
content: 你肯定手上已经完成一些代码了，你可以尝试不同的HTTP服务器（可以续传的，不可以续传的）， 看一下返回的Response头部的那些字段的不同，相信很容易看明白

user: user-2
content: 一定要明确：HTTP服务器有权拒绝断点续传请求， 在发回的response里，有专门的字段告诉你续传是否成功 你需要根据response的header相关字段判断，传回的数据是续传的，还是普通的方式  仅仅发出断点续传的请求并不能保证就能得到满足，换句话说，你只有权力提出一个协商请求，人家不一定同意 许多网站为了禁止多线程下载行为，直接就不提供给你断点续传的可能性  可能是我罗嗦，再加一句解释：多线程下载，通常就是通过断点续传实现的（HTTP/FTP都类似）
user-0 提问: 部标808 协议 位置上报解析问题

回复:
user: user-1
content: 参考：部标系列博客文章

user: user-2
content: 楼主，能不能分享一下，这个是怎么解析的呢？

user: user-3
content: 解决了说一下怎么解决的啊

user: user-4
content: 这个是严格按照JT/T808协议的完整数据包格式，你把JT/T808协议的文档看一遍就可以对号入座了

user: user-0
content: 已经解决了

user: user-5
content: 我搞过,你需要资料,短我,我可以帮你解决

user: user-6
content: 问楼下

user: user-0
content: 引用 3 楼 lovesmiles 的回复:没有搞过这个协议，帮你一下。  谢谢了,周围朋友有搞过的吗,帮忙问问

user: user-7
content: 没有搞过这个协议，帮你一下。

user: user-0
content: 引用 1 楼 zjq9931 的回复:[quote=引用 楼主 q656705009 的回复:] 7E 02 00 00 3C 01 37 17 86 19 55 14 78 00 00 00 00  00 00 00 02  02 61 61 D8  06 EE 18 28  00 00  00 00  00 00  14 08 06 02 40 07 01 04 00 00 00 00  33 18 2A 4D 30 30 2C 31 35 2C 31 30 34 30 32 31 30 38 37 36 35 34 33 32 31 23 B6 7E  这个是位置上报的报文 哪一段是经度纬度 还有就是怎么解析 谢邀，实在抱歉，我对这个完全外行。不了解。。。[/quote]  引用 1 楼 zjq9931 的回复:[quote=引用 楼主 q656705009 的回复:] 7E 02 00 00 3C 01 37 17 86 19 55 14 78 00 00 00 00  00 00 00 02  02 61 61 D8  06 EE 18 28  00 00  00 00  00 00  14 08 06 02 40 07 01 04 00 00 00 00  33 18 2A 4D 30 30 2C 31 35 2C 31 30 34 30 32 31 30 38 37 36 35 34 33 32 31 23 B6 7E  这个是位置上报的报文 哪一段是经度纬度 还有就是怎么解析 谢邀，实在抱歉，我对这个完全外行。不了解。。。[/quote]  谢谢了.有朋友搞过吗.帮我问问

user: user-8
content: 引用 楼主 q656705009 的回复:7E 02 00 00 3C 01 37 17 86 19 55 14 78 00 00 00 00  00 00 00 02  02 61 61 D8  06 EE 18 28  00 00  00 00  00 00  14 08 06 02 40 07 01 04 00 00 00 00  33 18 2A 4D 30 30 2C 31 35 2C 31 30 34 30 32 31 30 38 37 36 35 34 33 32 31 23 B6 7E  这个是位置上报的报文 哪一段是经度纬度 还有就是怎么解析 谢邀，实在抱歉，我对这个完全外行。不了解。。。

user: user-0
content: 大家帮帮忙啊...
user-0 提问: 跪求各位大神~~有木有C/Matlab的模拟电梯系统的源代码？

回复:
user: user-0
content: 引用 2 楼 u010340197 的回复:楼主是在做。。。课程设计？！  算是吧~主要是个beginner各种手足无措啊~

user: user-0
content: 引用 1 楼 lovesmiles 的回复:百度即可找到。  找到咯~谢谢

user: user-1
content: 百度即可找到。

user: user-2
content: 楼主是在做。。。课程设计？！
user-0 提问: printf("char len is %d", strlen(&c)) ?????????????

回复:
user: user-1
content: char c = 'x';你知道c后面的内存放的是什么么？你不知道。要是其后面的内存里木有'\0'，strlen(&c)得到的长度能大得超乎你想象，当然最大的可能是段错误了。 提供一个strlen()的实现，方便理解：  int strlen(const char *str) { 	const char *p = str;  	while(*p != '\0')  //就是在这里需要'\0'，来判断字符串结束了 		p++; 	return p - str; }

user: user-2
content: 学习了。

user: user-3
content: strlen是求字符串，里面的参数应该是字符串，不是字符或者地址

user: user-0
content: 引用 29 楼 zxh707wk 的回复:[quote=引用 28 楼 zhangleiyigeren 的回复:] [quote=引用 25 楼 zxh707wk 的回复:] 目测lz没看书 别这么直接，，看书，，都忘了。。。不过这个问题是想要的答案是自己表达能力的问题。。。没表达出来[/quote]那你怎么没分清字符和字符串呢[/quote] 嗨嗨。。。分不清字符和字符串，，，？？？这个，，，嗨嗨，，

user: user-0
content: 嗨嗨。。。分不清字符和字符串，，，？？？这个，，，嗨嗨，，，不辩

user: user-4
content: 引用 24 楼 zhangleiyigeren 的回复:局部变量的高地址处  不同的编译器、不同的平台不一样。

user: user-5
content: 目测lz没看书

user: user-0
content: 局部变量的高地址处

user: user-0
content: 引用 22 楼 go_and_see 的回复:这个问题，没啥好争论的吧？实在不明白有啥不理解的。  在栈中，main函数里的局部参数的高地址处存放的是什么

user: user-4
content: 这个问题，没啥好争论的吧？实在不明白有啥不理解的。

user: user-5
content: 引用 28 楼 zhangleiyigeren 的回复:[quote=引用 25 楼 zxh707wk 的回复:] 目测lz没看书 别这么直接，，看书，，都忘了。。。不过这个问题是想要的答案是自己表达能力的问题。。。没表达出来[/quote]那你怎么没分清字符和字符串呢

user: user-0
content: 引用 25 楼 zxh707wk 的回复:目测lz没看书 别这么直接，，看书，，都忘了。。。不过这个问题是想要的答案是自己表达能力的问题。。。没表达出来

user: user-0
content: 引用 26 楼 go_and_see 的回复:[quote=引用 24 楼 zhangleiyigeren 的回复:] 局部变量的高地址处  不同的编译器、不同的平台不一样。[/quote] 知道不同的编译器不同的平台，，，自己懒，，少说了，在自己的x86 gcc下面是这样的。

user: user-6
content: 引用 12 楼 lin5161678 的回复:[quote=引用 11 楼 FENGQIYUNRAN 的回复:] 跑出多少 和 你说的东西毫无关系  全部说错了  多看看别人的回答 别自己YY 不喜勿喷[/quote]  哪一句话是在喷了   不允许别人说你错了吗  玻璃心?[/quote] 百度玻璃心：就是心很脆弱.. 容易受伤..或者说是很心软。学习了，呵呵

user: user-7
content: 引用 11 楼 FENGQIYUNRAN 的回复:跑出多少 和 你说的东西毫无关系  全部说错了  多看看别人的回答 别自己YY 不喜勿喷[/quote]  哪一句话是在喷了   不允许别人说你错了吗  玻璃心?

user: user-6
content: 引用 10 楼 lin5161678 的回复:[quote=引用 5 楼 FENGQIYUNRAN 的回复:] 在我的机器上这个代码跑出来时8，我的是X86的cpu，内存地址表示为0x00000000，其中0x表示十六进制，后面的8个0是就是实际字符的个数8；至于，你的长度是5，那么我能给出的解释就是你这个跑在8086PC上，因为他的内存表示00000~9FFFF是由5个字符表示的。楼主搜下“内存地址”学习下。 个人愚见，不保证准确。我的智能创意，聆讯儿，请您支持一下！跑出多少 和 你说的东西毫无关系  全部说错了  多看看别人的回答 别自己YY [/quote] 不喜勿喷

user: user-7
content: 引用 5 楼 FENGQIYUNRAN 的回复:在我的机器上这个代码跑出来时8，我的是X86的cpu，内存地址表示为0x00000000，其中0x表示十六进制，后面的8个0是就是实际字符的个数8；至于，你的长度是5，那么我能给出的解释就是你这个跑在8086PC上，因为他的内存表示00000~9FFFF是由5个字符表示的。楼主搜下“内存地址”学习下。 个人愚见，不保证准确。我的智能创意，聆讯儿，请您支持一下！跑出多少 和 你说的东西毫无关系  全部说错了  多看看别人的回答 别自己YY

user: user-6
content: 奇了怪了 我换到另一台X64配置如下：  结果每次稳稳的是8：  难道是和编译器有关？先洗洗睡了

user: user-7
content: 引用 17 楼 Yuiliet 的回复:这是汇编部分的知识，叫内存填充什么的 为的是方便编译器寻址不对 和内存填充没什么必然联系

user: user-8
content: 引用 5 楼 FENGQIYUNRAN 的回复:在我的机器上这个代码跑出来时8，我的是X86的cpu，内存地址表示为0x00000000，其中0x表示十六进制，后面的8个0是就是实际字符的个数8；至于，你的长度是5，那么我能给出的解释就是你这个跑在8086PC上，因为他的内存表示00000~9FFFF是由5个字符表示的。楼主搜下“内存地址”学习下。 个人愚见，不保证准确。我的智能创意，聆讯儿，请您支持一下！ 对不对的，但是有想法！
user-0 提问: 有向图的邻接表建立出现问题（C语言实现）

回复:
user: user-0
content: anyone?

user: user-0
content: 实在是太悲壮了

user: user-1
content: Sorry,I don't know...

user: user-0
content: 经过您这样一改问题更多了哈

user: user-2
content: #include<stdio.h> #include<stdlib.h>   #define MAX 100   struct EdgeNode {     int adjvex;     EdgeNode *next; };   typedef struct {     char data;     EdgeNode *firstNext; }VertexNode,AdjList[MAX];   typedef struct {     AdjList adjList;     int numVertexes;     int numArcs; }GraphAdjList;   int locate(GraphAdjList G,char c) {     int i=0;       while(G.adjList[i++].data!=c && i<G.numVertexes);       if(i<G.numVertexes)         return i;     else return -1;   }   void CreateAdjList(GraphAdjList *G) {     int i,j,k;     EdgeNode *p,*q;     char m,n;       printf("请输入顶点和弧的数目\n");     scanf("%d %d",&G->numVertexes,&G->numArcs);             for(k=0;k<G->numVertexes;k++)     {         printf("请输入第%d个顶点的信息\n",k);         scanf("%c",&G->adjList[k].data);         G->adjList[k].firstNext=NULL;     }       for(k=0;k<G->numArcs;k++)     {         printf("请按顺序输入弧的弧头v和弧尾w\n");         scanf("%c %c",&m,&n);           q=(EdgeNode *)malloc(sizeof(EdgeNode));           i=locate(*G,m);         j=locate(*G,n);           q->adjvex=j;           if( G->adjList[i].firstNext!=NULL )             G->adjList[i].firstNext=q;         else         {             p=G->adjList[i].firstNext->next;             while(p)             {                 p=p->next;             }             p->next=q;         }     } }   void print(GraphAdjList *G) {     int i;     EdgeNode *p;       for(i=0;i<G->numVertexes;i++)     {         printf("%c",G->adjList[i].data);         p=G->adjList[i].firstNext;         while(p)         {             printf("->%d",p->adjvex);             p=p->next;         }         printf("->NULL\n");     }       free(p); }     int main() {     GraphAdjList *G;     CreateAdjList(G);     print(G);       return 0; }

user: user-0
content: Compiling... fuck.c D:\WorkSpace\fuck.c(61) : error C2115: 'function' : incompatible types D:\WorkSpace\fuck.c(61) : warning C4024: 'locate' : different types for formal and actual parameter 1 D:\\WorkSpace\fuck.c(62) : error C2115: 'function' : incompatible types D:\WorkSpace\fuck.c(62) : warning C4024: 'locate' : different types for formal and actual parameter 1 D:\WorkSpace\fuck.c(70) : warning C4133: '=' : incompatible types - from 'struct EdgeNode *' to 'struct EdgeNode *' D:\WorkSpace\fuck.c(73) : warning C4133: '=' : incompatible types - from 'struct EdgeNode *' to 'struct EdgeNode *' D:\WorkSpace\fuck.c(75) : warning C4133: '=' : incompatible types - from 'struct EdgeNode *' to 'struct EdgeNode *' D:\WorkSpace\fuck.c(92) : warning C4133: '=' : incompatible types - from 'struct EdgeNode *' to 'struct EdgeNode *' Error executing cl.exe.  fuck.obj - 2 error(s), 6 warning(s)
user-0 提问: WININET.dll如何对其隐藏

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！  ---------------  的确，

user: user-2
content: 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！
user-0 提问: C_free3.5

回复:
user: user-1
content: 可以。～～～

user: user-2
content: 为什么不用cfree5.0？

user: user-3
content: 可以，挺好用的，不过个人觉得vc6.0也不错

user: user-4
content: 没用过，如果只是c或c++感觉钟家民的软件不错
user-0 提问: DllMina() 函数内部不可以再定义函数吗？

回复:
user: user-1
content: 引用 2 楼 lovesmiles 的回复:不要说DLL内部，就算是一般的函数内部也不能这样。  你随便写个函数都会报错，和DLL没什么关系。 函数是不可以嵌套定义的！！！+1

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include <objbase.h> #include <stdio.h>  _declspec(dllexport) int add(int a, int b){     return a+b; } _declspec(dllexport)int sub(int a, int b){     return a-b; }  // 定义下边的函数 int funDemo() {     return 0; } BOOL APIENTRY DllMain(     HANDLE hModule,     DWORD  ul_reason_for_call,     LPVOID lpReserved ){     if(ul_reason_for_call == DLL_PROCESS_ATTACH){         TRACE("Congratulations! DLL is loaded!\n");     } } 说得对

user: user-0
content: 引用 2 楼 lovesmiles 的回复:不要说DLL内部，就算是一般的函数内部也不能这样。  你随便写个函数都会报错，和DLL没什么关系。 函数是不可以嵌套定义的！！！对啊，傻B了，我是搞JS的，搞混了

user: user-2
content: 不要说DLL内部，就算是一般的函数内部也不能这样。  你随便写个函数都会报错，和DLL没什么关系。 函数是不可以嵌套定义的！！！

user: user-3
content: #include <objbase.h> #include <stdio.h>  _declspec(dllexport) int add(int a, int b){     return a+b; } _declspec(dllexport)int sub(int a, int b){     return a-b; }  // 定义下边的函数 int funDemo() {     return 0; } BOOL APIENTRY DllMain(     HANDLE hModule,     DWORD  ul_reason_for_call,     LPVOID lpReserved ){     if(ul_reason_for_call == DLL_PROCESS_ATTACH){         TRACE("Congratulations! DLL is loaded!\n");     } }
user-0 提问: C通过execvp/system执行一个Shell脚本的问题，请教

回复:
user: user-1
content: 如果vfork（）成功则在父进程会返回新建立的子进程代码（PID）， 而在新建立的子进程中则返回0。如果vfork失败则直接返回-1，失 败原因存于errno中。 错误代码 EAGAIN 进程数已达系统规定上限 ENOMEM内存不足，无法配置核心所需的数据结构空间。

user: user-2
content: 错误码是什么？
user-0 提问: LPC1768时钟问题

回复:
user: user-1
content: 引用 楼主 yanggm001 的回复:在设置时钟的时候， #define CLOCK_SETUP           1 #define SCS_Val               0x00000020 #define CLKSRCSEL_Val         0x00000001 #define PLL0_SETUP            1 #define PLL0CFG_Val           0x00050063 #define PLL1_SETUP            1 #define PLL1CFG_Val           0x00000023 #define CCLKCFG_Val           0x00000003 #define USBCLKCFG_Val         0x00000000 #define PCLKSEL0_Val          0x00000000 #define PCLKSEL1_Val          0x00000000 #define PCONP_Val             0xEFEFF7DE #define CLKOUTCFG_Val         0x00000000 也就是cpu的FCCLK=100M=12M/4*100/6*2 (fosc/4*M/N) 而我的UART0的FPCLK=12M*8/4=24M 时可以工作， 那么FPCLK和FCCLK是什么关系呢？独立的吗？ 谢邀，实在抱歉，一直在搞的都是PC的，对硬件完全外行。

user: user-2
content: 百度一下LPC1768的手册，你的问题太专业了。要精通这片子的人才懂。

user: user-0
content: UART 在APB总线上，时钟是固定的24M吗？

user: user-0
content: 补充，如果UART用FCCLK分频设置波特率的话，串口也不能正常工作。

user: user-3
content: 参考硬件手册？
user-0 提问: 我现在遇到了个难题求大神指教，我想从wincc里的数据库实时调用两个数据，然后给显示屏一个信号让它实时更新，很急拜托！！！！！ 

回复:
user: user-1
content: 急也没有办法，你做到那一步了，有什么问题说嘛？是数据库访问还是显示还是想别人写一个完整的东西给你？
user-0 提问: 亲们

回复:
user: user-1
content: 这样的提问方式很难有人回答你，早点结贴吧。

user: user-1
content: 这样的提问方式很难有人回答你，早点结贴吧。

user: user-2
content: 不知道你想说啥

user: user-3
content: while 定时循环

user: user-4
content: wincc安装时默认用的是MS-SQL，直接访问数据库操作即可吧