Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: linux下的c程序，编程时函数参数到什么地方去查

回复:
user: user-0
content: 引用 7 楼 ak47_wz 的回复:引用 4 楼 u013666035 的回复:[quote=引用 2 楼 turingo 的回复:] 很方便的，例如你要查printf的话，直接敲入命令即可：  man 3 printf   [quote=引用 楼主 u013666035 的回复:] 现在就是找了电子版的tlpi，感觉这书比apue好，然后搜索，不过挺麻烦的  这个可以，不过3是什么意思啊[/quote]  man 手册，   2 表示系统调用，3表示库函数。[/quote]  1和3有什么区别啊

user: user-0
content: 引用 6 楼 ak47_wz 的回复:[quote=引用 5 楼 u013666035 的回复:] [quote=引用 3 楼 ak47_wz 的回复:] 我个人看法而已。。我感觉APUE已经非常非常好了，他的六本书，每本都是著作。我个人也只看APUE，感觉弄懂就够了。  apue的风格太像Windows System Programming，很多都没讲清楚，不喜欢[/quote] 如果有机会实际用到了，就清楚了。任何书光看，肯定也不会清楚的。[/quote]  随便翻翻就知道了，tlpi比apue好多了

user: user-1
content: 引用 4 楼 u013666035 的回复:引用 2 楼 turingo 的回复:很方便的，例如你要查printf的话，直接敲入命令即可：  man 3 printf   [quote=引用 楼主 u013666035 的回复:] 现在就是找了电子版的tlpi，感觉这书比apue好，然后搜索，不过挺麻烦的  这个可以，不过3是什么意思啊[/quote]  man 手册，   2 表示系统调用，3表示库函数。

user: user-1
content: 引用 5 楼 u013666035 的回复:[quote=引用 3 楼 ak47_wz 的回复:] 我个人看法而已。。我感觉APUE已经非常非常好了，他的六本书，每本都是著作。我个人也只看APUE，感觉弄懂就够了。  apue的风格太像Windows System Programming，很多都没讲清楚，不喜欢[/quote] 如果有机会实际用到了，就清楚了。任何书光看，肯定也不会清楚的。

user: user-0
content: 引用 3 楼 ak47_wz 的回复:我个人看法而已。。我感觉APUE已经非常非常好了，他的六本书，每本都是著作。我个人也只看APUE，感觉弄懂就够了。  apue的风格太像Windows System Programming，很多都没讲清楚，不喜欢

user: user-0
content: 引用 2 楼 turingo 的回复:很方便的，例如你要查printf的话，直接敲入命令即可：  man 3 printf  引用 楼主 u013666035 的回复:现在就是找了电子版的tlpi，感觉这书比apue好，然后搜索，不过挺麻烦的  这个可以，不过3是什么意思啊

user: user-1
content: 我个人看法而已。。我感觉APUE已经非常非常好了，他的六本书，每本都是著作。我个人也只看APUE，感觉弄懂就够了。

user: user-2
content: 很方便的，例如你要查printf的话，直接敲入命令即可：  man 3 printf  引用 楼主 u013666035 的回复:现在就是找了电子版的tlpi，感觉这书比apue好，然后搜索，不过挺麻烦的

user: user-3
content: 函数参数问谷歌，百度啊
user-0 提问: C语言求助

回复:
user: user-1
content: 引用 11 楼 u012421456 的回复:关于这个，可以看看置顶帖——裘老的表达式 是 C,C++表达式求值顺序 裘老的解释。

user: user-1
content: 关于这个，可以看看置顶帖——裘老的表达式

user: user-0
content: 引用 7 楼 ak47_wz 的回复:尽量不用这种类型的代码，一来是可读性不好，二来是不健壮。  仅仅是做的练习题而已  谢谢提醒

user: user-0
content: 引用 5 楼 wufeng2014 的回复:这种东西，自己手动指行一遍就会明白的，关于这个前增后增的问题，你可以参考下http://bbs.csdn.net/topics/370153775  谢谢你

user: user-2
content: 引用 楼主 ParadiseOK 的回复:#include <stdio.h> int main() { 	int x = 0 , y = 5 , z = 3; 	while(z-->=0 && ++x < 6)  y = y-1; 	printf("%d,%d%d\n",x,y,z); 	return 0; }    结果中的z=-2  不理解  求大神解释下  谢谢z--，表示 先用z的值，再做--运算。++x，表示先做++运算，再用x。也就是说在条件判断里面，先判断z, 再做--运算，先做x的++运算，再判断x的值。模拟结果如下： 第一遍，z=3, x=x+1=1, 符合z>=0&&x<6的条件，y=y-1=4，之后z=z-1=2，x=1 第二遍，z=2, x=x+1=2, 符合z>=0&&x<6的条件，y=y-1=3，之后z=z-1=1，x=2 第三遍，z=1, x=x+1=3, 符合z>=0&&x<6的条件，y=y-1=2，之后z=z-1=0，x=3 第四遍，z=0, x=x+1=4, 符合z>=0&&x<6的条件，y=y-1=1，之后z=z-1=-1，x=4 第五遍，z=-1, x=x+1=5, 不符合z>=0的条件，y仍然等于1，之后z=z-1=-2，x=5 这时候条件不成立，退出循环，x, y, z 的值为5, 1, -2，所以z=-2

user: user-3
content: 在z=-1的时候去while里边进行比较，无论条件对不对都要进行--操作

user: user-4
content: 尽量不用这种类型的代码，一来是可读性不好，二来是不健壮。

user: user-5
content: (z--)的值等于z的值， (--z)的值等于z-1,

user: user-6
content: 这种东西，自己手动指行一遍就会明白的，关于这个前增后增的问题，你可以参考下http://bbs.csdn.net/topics/370153775

user: user-0
content: 引用 2 楼 truelance 的回复:不加括号的结果 while((z-->=0) && (++x < 6))  谢谢您

user: user-0
content: 引用 1 楼 user-8 的回复:z-->=0 这个总是先判断z>=0然后执行z--。只要执行到这句，z--都会执行。 z等于0的时候，满足条件，然后z--，然后执行循环体，此时z等于-1，然后再到z-->=0，于是z等于-2了，并且条件不满足，跳出循环  谢谢您

user: user-7
content: 不加括号的结果 while((z-->=0) && (++x < 6))

user: user-8
content: z-->=0 这个总是先判断z>=0然后执行z--。只要执行到这句，z--都会执行。 z等于0的时候，满足条件，然后z--，然后执行循环体，此时z等于-1，然后再到z-->=0，于是z等于-2了，并且条件不满足，跳出循环
user-0 提问: c语言求助

回复:
user: user-1
content: 引用 7 楼 lnetant 的回复:别用图片,要不没几个人愿意给你弄  #include <stdio.h>  int d=1; void fun(int d)   //此处传入的值,函数里边的赋值操作不会带回 {       int d=5;//局部变量,此处会导致此函数内不会使用全局变量       p=d;      printf("%d",p);  //输出5 }  int main() {     int a=3;     fun(a); //这里a的值不会被改变,想改变需修改函数的参数为地址传入方式     d=a;//改了全局的值了     printf("%d\n",d); //输出3 } C语言认真学，没那么难

user: user-2
content: 局部变量修改了全局变量

user: user-0
content: 引用 7 楼 lnetant 的回复:别用图片,要不没几个人愿意给你弄  #include <stdio.h>  int d=1; void fun(int d)   //此处传入的值,函数里边的赋值操作不会带回 {       int d=5;//局部变量,此处会导致此函数内不会使用全局变量       p=d;      printf("%d",p);  //输出5 }  int main() {     int a=3;     fun(a); //这里a的值不会被改变,想改变需修改函数的参数为地址传入方式     d=a;//改了全局的值了     printf("%d\n",d); //输出3 } 引用 7 楼 lnetant 的回复:别用图片,要不没几个人愿意给你弄  #include <stdio.h>  int d=1; void fun(int d)   //此处传入的值,函数里边的赋值操作不会带回 {       int d=5;//局部变量,此处会导致此函数内不会使用全局变量       p=d;      printf("%d",p);  //输出5 }  int main() {     int a=3;     fun(a); //这里a的值不会被改变,想改变需修改函数的参数为地址传入方式     d=a;//改了全局的值了     printf("%d\n",d); //输出3 }   看懂了 谢谢你

user: user-0
content: 引用 8 楼 derekrose 的回复:结果不应该是53吗  p=5 a=3呀  是53 我先慢慢看 上面的那个兄弟给我的解释 谢谢你

user: user-0
content: 引用 7 楼 lnetant 的回复:别用图片,要不没几个人愿意给你弄  #include <stdio.h>  int d=1; void fun(int d)   //此处传入的值,函数里边的赋值操作不会带回 {       int d=5;//局部变量,此处会导致此函数内不会使用全局变量       p=d;      printf("%d",p);  //输出5 }  int main() {     int a=3;     fun(a); //这里a的值不会被改变,想改变需修改函数的参数为地址传入方式     d=a;//改了全局的值了     printf("%d\n",d); //输出3 }  谢谢你的提醒 下次不会了

user: user-3
content: 结果不应该是53吗  p=5 a=3呀

user: user-4
content: 别用图片,要不没几个人愿意给你弄  #include <stdio.h>  int d=1; void fun(int d)   //此处传入的值,函数里边的赋值操作不会带回 {       int d=5;//局部变量,此处会导致此函数内不会使用全局变量       p=d;      printf("%d",p);  //输出5 }  int main() {     int a=3;     fun(a); //这里a的值不会被改变,想改变需修改函数的参数为地址传入方式     d=a;//改了全局的值了     printf("%d\n",d); //输出3 }

user: user-0
content: 引用 3 楼 derekrose 的回复:哪里不懂  全局变量真坑爹对于他的结果我不懂  可以帮我解释下？？

user: user-0
content: 引用 2 楼 Anti_Bird 的回复:请 Google “变量作用域”  你可以直接帮我解释??

user: user-0
content: 你可以直接帮我解释下？？

user: user-3
content: 哪里不懂  全局变量真坑爹

user: user-5
content: 请 Google “变量作用域”

user: user-0
content: 自己先定下  求大神解答
user-0 提问: 求帮忙

回复:
user: user-1
content: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCoQFjAA&url=http%3A%2F%2Fread.pudn.com%2Fdownloads28%2Fsourcecode%2Fwindows%2Fcsharp%2F88944%2F%25E7%25AC%25AC%25E4%25B8%2580%25E4%25B8%25AA%25E5%25AE%259E%25E9%25AA%258C%2F1.doc&ei=tP8zU_3JOIrRlAXNnoDgDg&usg=AFQjCNFxuaik7uCKbXhrxxkM4YqOfb72MA&sig2=miqaUs22bBMDj_cF8hD8jw  参考

user: user-2
content: Google/百度.
user-0 提问: 这句代码是什么意思

回复:
user: user-0
content: 谢谢楼主各位，这下明白了，这帖子可以结了 这种用法初次看到：）

user: user-1
content: 引用 3 楼 romabdwy 的回复:[quote=引用 2 楼 a515360208 的回复:]  unsigned long p; p=1L;  你的p定义的是long型，所以将long型的1赋值给p  我就是想问后面那个L是什么意思，后面的L是指long型吗？[/quote] 是的.最好使用: p = 1UL; // UL: unsigned long 因为p是unsigned long.

user: user-2
content: L是long

user: user-0
content: 引用 2 楼 a515360208 的回复: unsigned long p; p=1L;  你的p定义的是long型，所以将long型的1赋值给p  我就是想问后面那个L是什么意思，后面的L是指long型吗？

user: user-3
content: unsigned long p; p=1L;  你的p定义的是long型，所以将long型的1赋值给p

user: user-4
content: 我记得这种情况是long，记不太清了，看楼下

user: user-5
content: 数字也是有类型的

user: user-3
content: 引用 5 楼 JiMoKuangXiangQu 的回复:[quote=引用 3 楼 romabdwy 的回复:] [quote=引用 2 楼 a515360208 的回复:]  unsigned long p; p=1L;  你的p定义的是long型，所以将long型的1赋值给p  我就是想问后面那个L是什么意思，后面的L是指long型吗？[/quote] 是的.最好使用: p = 1UL; // UL: unsigned long 因为p是unsigned long.[/quote]是的，使用p = 1UL;更好
user-0 提问: C语言弹窗程序源代码

回复:
user: user-1
content: MassageBox()?

user: user-2
content: 不明觉厉

user: user-3
content: 引用 2 楼 zyaiwx 的回复:MassageBox()?  msgbox.c: #pragma comment(lib,"user32") #include <windows.h> #include <conio.h> void main() {     int r;      cprintf("press any key...");     getch();     r=MessageBox(NULL,"Hello!","MsgBox",MB_OKCANCEL|MB_SETFOREGROUND);     cprintf("\r\nr=%d",r); }
user-0 提问: 《c和指针》I/O篇3个问题每个20分

回复:
user: user-1
content: 上帖第26行 sprintf(st.s,"%*s",10-1,"abcdefghijk"); 可能应改为 sprintf(st.s,"%.*s",10-1,"abcdefghijk");

user: user-1
content: 引用 1 楼 sholber 的回复:坐等zhao4zhong1大神出现  没实际编译链接调试，不保证对。仅供参考：  test.cpp: #include <stdio.h> #include <string.h> #pragma pack(push,1) struct ST {     char s[10];     char t[10]; } st; #pragma pack(pop) int v,n; float f; double d; char ss[100]; int main() { //1） //sprintf是一个潜在的错误根源，因为可能导致缓冲区溢出，     strcpy(st.s,"123456789");     strcpy(st.t,"ABCDEFGHI");     printf("%s,%s\n",st.s,st.t);     sprintf(st.s,"%s","abcdefghijk");     printf("%s,%s\n",st.s,st.t);  //解决方法是：字符串长度并没有限制，但函数所生成的字符串的字符数目可以用格式代码中一个可选的字段来限制。比如%*     strcpy(st.s,"123456789");     strcpy(st.t,"ABCDEFGHI");     printf("%s,%s\n",st.s,st.t);     sprintf(st.s,"%*s",10-1,"abcdefghijk");     printf("%s,%s\n",st.s,st.t);  //2) //printf函数家族的格式代码和scanf函数家族的格式代码用法不同。书后的总结中也提示到避免混淆printf和scanf格式代码，我就看不出哪里会混淆了？     sscanf("12  34","%d%n",&v,&n);printf("v,n=%d,%d\n",v,n);     sprintf(ss     ,"%d%n", v,&n);printf("v,n=%d,%d\n",v,n);     sscanf("1.0,34","%f,%lf" ,&f,&d);     printf("f,d="   "%f,%f\n", f, d);  //3） //为流缓冲区使用一个自动数组是很危险的。如果在流关闭之前，程序的执行流离开了数组声明所在的代码块，流就会继续使用这块内存，但此时它可能已经分配给了其它函数另作他用。     {         char buf[256];         setvbuf(stdout,buf,_IOFBF,256);         fprintf(stdout,"123\n");     }     {         char buf1[256];         strcpy(buf1,"ABC");         fprintf(stdout,"123\n");//buf这块内存此时可能已经分配给了buf1另作他用。     }     return 0; }

user: user-2
content: 坐等zhao4zhong1大神出现

user: user-2
content: 谁叫你整天说废话的，所以使这招。 朕这两天闲得无聊，所以来些逛逛。好吧，朕继续忙自己的……

user: user-1
content: 引用 1 楼 sholber 的回复:坐等zhao4zhong1大神出现 抛砖引玉这招阁下用得炉火纯青啊。
user-0 提问: 关于 C中 unsigned char * pImage

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:GetByteArrayElements用这个转换即可： pImage = (*env)->GetByteArrayElements(env,imgBuff,JNI_FALSE); 嗯，谢谢。不过第二个参数起什么作用呢。自己看看先。

user: user-1
content: GetByteArrayElements用这个转换即可： pImage = (*env)->GetByteArrayElements(env,imgBuff,JNI_FALSE);

user: user-0
content: 有人帮忙吗？
user-0 提问: C语言怎么把任务栏盖住

回复:
user: user-0
content: 引用 1 楼 modyaj 的回复:程序有运行窗口吗？ 有啊

user: user-1
content: WS_OVERLAPPEDWINDOW 改为 WS_POPUP|WS_MAXIMIZE

user: user-2
content: 任务栏属性：自动隐藏 ？

user: user-3
content: 引用 2 楼 u014123498 的回复:[quote=引用 1 楼 modyaj 的回复:] 程序有运行窗口吗？ 有啊[/quote] 我知道 去掉最大化按钮可以实现挡住任务栏 不知道楼主是不是可以这么做 先去掉： long styles = ::GetWindowLong(m_hWnd,GWL_STYLE); styles &= ~WS_MAXIMIZEBOX; ::SetWindowLong(m_hWnd,GWL_STYLE,styles);  然后再显示 ShowWindow(SW_MAXIMIZE) 此时的最大化显示时挡住了任务栏的  前段时间我弄这个希望不要挡住 弄了很久

user: user-4
content: http://www.gamedev.net/topic/553510-win32createwindowex-how-to-create-a-window-which-overlaps-the-taskbar/

user: user-3
content: 程序有运行窗口吗？
user-0 提问: 前辈可以给我c语言或c++的视频教程

回复:
user: user-1
content: C语言推荐郝斌的视频，适合入门，这是地址——http://www.xuexi111.com/jiaocheng/shipin/26243.html C++可以是孙鑫的——http://club.topsage.com/thread-156290-1-1.html

user: user-2
content: 不建议看视频，付出和收获不成正比。

user: user-3
content: 这玩意网上随便搜一下就能搜到一大把
user-0 提问: 请教前辈一个文件操作问题

回复:
user: user-1
content: /*data.txt .i  3 .o 1 .p 3 111 1 101 1 110 1 .e */  #include<stdio.h>  int main(void) { 	FILE fp; 	int data1, data2, buf[10];  	fp = fopen("data.txt", "r"); 	if(fp == NULL) 	{ 		printf("Failed to open the file!"); 		return -1; 	} 	fgets(buf, 10, fp); 	fgets(buf, 10, fp); 	fgets(buf, 10, fp); 	while(fscanf("%d%d", &data1, data2) == 2) 	{ 		printf("%d %d", data1, data2);//在这里做你的数据处理，我只简单的打印了一下 	} 	fclose(fp); 	return 0; }

user: user-2
content: 嗯 学习学习

user: user-0
content: 前辈能给我编一个框架看看不，刚开始用C不太会！大恩不言谢了！

user: user-3
content: 首先用fopen打开这个文件， 之后因为要第四行，可以简单地直接用fgets 读出三行丢弃，之后读取还是用fgets读取每一行，然后对读出的数据进行处理即可，循环结束的条件是读到的数据是 .e  。
user-0 提问: 2. 编写函数，实现遍历单链表。序列按指数降序排序

回复:
user: user-0
content: 不明白.怎么做?

user: user-1
content: 相当于，链表插入排序，每插入一个数据，排下序。---就是找到一个位置，插入新节点。 无数据，直接插入 有数据查找一个位置插入  遇到次数相同的，系数相加就行了，不必单列一项了。
user-0 提问: IP地址与域名互查的问题

回复:
user: user-1
content: 还可以暂时在hosts文件中写死。

user: user-2
content: IP地址和域名的映射是通过DNS实现的，gethostbyname和gethostbyaddr只是查找本地缓存或配置的域名映射。 要真正实现IP与域名的查找，必须通过向DNS服务器发出查询请求来获得。有以下两方法： 一：自己按照DNS协议发查询报文，获取其响应报文并解析结果； 二：调用操作系统线程的shell命令获取（linux是dig命令，windows是nslookup命令）

user: user-3
content: 引用 4 楼 u012107622 的回复:[quote=引用 1 楼 u013061236 的回复:]  一，检查gethostbyaddr的相关操作  二，struct结构一般因为比较大，所以为了提高效率，传递指针，不用再重新拷贝一份副本。另外一般带*的，也可以作为传出参数   您能帮我看看gethostaddr 哪里错了么？实在找不出来。。。[/quote]  网上搜搜，具体的我也没用过

user: user-0
content: 引用 1 楼 u013061236 的回复: 一，检查gethostbyaddr的相关操作  二，struct结构一般因为比较大，所以为了提高效率，传递指针，不用再重新拷贝一份副本。另外一般带*的，也可以作为传出参数   您能帮我看看gethostaddr 哪里错了么？实在找不出来。。。

user: user-4
content: http://msdn.microsoft.com/en-us/library/windows/desktop/ms738521(v=vs.85).aspx

user: user-0
content: @u013061236  您能帮我看看gethostaddr 哪里错了么？实在找不出来。。。

user: user-3
content: 一，检查gethostbyaddr的相关操作  二，struct结构一般因为比较大，所以为了提高效率，传递指针，不用再重新拷贝一份副本。另外一般带*的，也可以作为传出参数
user-0 提问: [SWU]利用二维数组设计按行和列分别求和和平均值的函数程序

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:你在使用数组时，访问位置越界了。 ++

user: user-2
content: 你在使用数组时，访问位置越界了。
user-0 提问: 利用二维数组设计按行和列分别求和和平均值的函数程序

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

user: user-2
content: 嘛问题。。自言自语/?

user: user-3
content: 楼主是要我们看图找错么？

user: user-4
content: 楼主发这个贴是干嘛啊？
user-0 提问: 字符串处理

回复:
user: user-1
content: #include <stdio.h>  int main(void) { 	int x = 1234, i;  	for (i = 4; i < 10; i++) 		printf("%0*d\n", i, x);  	getchar(); 	return 0; }  输出: 1234 01234 001234 0001234 00001234 000001234  这样是LZ想要的不?

user: user-2
content: 普通的string就可以啊

user: user-3
content: 嘎哈不用变量长度数组？仅C99+支持哟……  void f (int len) { int a [len]; /* …… */ }

user: user-4
content: printf("%06d\n" ,123);  显示 000123

user: user-5
content: sprintf 不行么？
user-0 提问: 请教float或double精度相关的问题

回复:
user: user-1
content: 无法保证任何一个double 或者float 为 X.Y000000000000 例如 47.100000000000000000000000 但是可以分别取到整数部分和 十分位的 值.    float fVal = 47.1234454343 unsigned int n1, n2;  // 如果想在百分位进行四舍五入. fVal += 0.05;  // 整数部分. n1 = fVal;  //十分位部分. n2 = fVal * 10; n2 %= 10; // 没有考虑负数哈,方法类似.

user: user-0
content: 引用 3 楼 movsd 的回复:如果只是要求精确到0.1的话，可以将数值放大10倍，用整数计算： int x=470; x+=1; 取结果的时候x/10就是整数部分，x%10是小数部分。  好办法..好办法~

user: user-0
content: 引用 2 楼 starytx 的回复:float的精度无法保证你的需求，换成double就可以  double类型测试了,没问题,但貌似会耗资源经较大

user: user-0
content: 引用 1 楼 user-5 的回复:GCC 提供有 decimal的扩展  http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html 表示看不懂英文

user: user-2
content: 引用 3 楼 movsd 的回复:如果只是要求精确到0.1的话，可以将数值放大10倍，用整数计算： int x=470; x+=1; 取结果的时候x/10就是整数部分，x%10是小数部分。 这也是常见的处理方法.

user: user-2
content: 引用 楼主 orangerx 的回复:各位大大,本人有个关于精度计算的实例,做不下去特来此处请教  float x=47; x+=0.1; 此时 printf x的值是47.099998,因为有特别需要,要求计算的时候可 以精确到0.1; 请问有什么办法可以确保x+=0.1 等于 47.1呢? 还有就是41.7xxxx 这里的xxxx要为0的,因为只想要的是0.1这个小数位; 请问C可以办到吗? 如果要求比较严格,那就换成高精度的库,如GMP, 否则#1介绍的类型就够用了。

user: user-3
content: 如果只是要求精确到0.1的话，可以将数值放大10倍，用整数计算： int x=470; x+=1; 取结果的时候x/10就是整数部分，x%10是小数部分。

user: user-4
content: float的精度无法保证你的需求，换成double就可以

user: user-5
content: GCC 提供有 decimal的扩展  http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html
user-0 提问: 请问怎么把枚举值enum{kOne='AAA'};的AAA给取出来？

回复:
user: user-0
content: 引用 4 楼 ForestDB 的回复:'AAA'是多字节字符常量，就是个int，可以通过循环右移取最后一字节得到每一个字节的内容，然后拼出string。 是通过这种方法解决的。

user: user-1
content: 'AAA'是多字节字符常量，就是个int，可以通过循环右移取最后一字节得到每一个字节的内容，然后拼出string。

user: user-2
content: 'A'是char类型 'AA'     'AAA'     'AAAA'都是int类型 'AAAAA'错误  #include <typeinfo> printf("%s\n", typeid('A').name()); printf("%s\n", typeid('AA').name()); printf("%s\n", typeid('AAA').name()); printf("%s\n", typeid('AAAA').name());

user: user-3
content: 如果一个整型字符常量包含的字符多于一个，那么，它的值是实现定义的。如果无视可移植性，则办法还是很多的，但要视具体情况而定。

user: user-4
content: 把枚举变量值直接strcpy过去不行吗
user-0 提问: 关于c语言指针的问题

回复:
user: user-1
content: 我也蒙了，这都没看出来

user: user-0
content: 引用 9 楼 derekrose 的回复:

user: user-2

user: user-0
content: 引用 7 楼 derekrose 的回复:[quote=引用 6 楼 Jerryup 的回复:] [quote=引用 3 楼 derekrose 的回复:] 30-28=8（16进制） 30-28=2（10进制） 30-28=100（108进制）我想问的是为什么是不同的2种结果啊？都是16进制表示的啊[/quote]  哪里是2种结果了  明明是一种！[/quote]谢谢你，我知道了。刚才蒙了。提这么一个愚蠢的问题。

user: user-2
content: 引用 6 楼 Jerryup 的回复:[quote=引用 3 楼 derekrose 的回复:] 30-28=8（16进制） 30-28=2（10进制） 30-28=100（108进制）我想问的是为什么是不同的2种结果啊？都是16进制表示的啊[/quote]  哪里是2种结果了  明明是一种！

user: user-0
content: 引用 3 楼 derekrose 的回复:30-28=8（16进制） 30-28=2（10进制） 30-28=100（108进制）我想问的是为什么是不同的2种结果啊？都是16进制表示的啊

user: user-0
content: 引用 1 楼 richyhuang 的回复:你机器的int类型是几个字节的? 一般pc都是4个字节的啊,所以才加8我的机器int也是4字节

user: user-0
content: 引用 2 楼 sholber 的回复:因为你用的是Turbo C，而作者用的是较新的编译器。我用的是vc6.0

user: user-2
content: 30-28=8（16进制） 30-28=2（10进制） 30-28=100（108进制）

user: user-3
content: 因为你用的是Turbo C，而作者用的是较新的编译器。

user: user-1
content: 你机器的int类型是几个字节的? 一般pc都是4个字节的啊,所以才加8
user-0 提问: c语言程序在不同环境下运行情况不同

回复:
user: user-1
content: //朕之解一:     for (int px = 0; px<823/19; px++)                 for (int yx = 0; yx <823/19; yx ++)                         if (23*px + 19*yx == 823 && px < yx) printf("%d,%d\n", px, yx);          //朕之解二:     for (int px = 0; px<823/19; px++)         for (int yx = 0; yx <823/19; yx ++)             if (2.3*px + 1.9*yx <= 82.3 && 2.3*px + 1.9*yx >= 82.3 && px < yx) printf("%d,%d\n", px, yx); 赶紧给分,别磨唧!

user: user-2
content: 这个是精度问题，你可以这么改改 82.3-a < 1e-6，或者把价格都乘10倍，这样就都是整数了。能得出正确结果。浮点数类型不要直接做相等的判断。

user: user-3
content: 引用 楼主 a775467383 的回复:我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();） 为什么dev-cpp下没结果显示出来（不是窗口一闪而过，而是黑窗口，但没结果输出），而VC6.0下则输出 11 30 ？请大神指导，谢谢 #include int main() {   int i,j;   float a;   for(i=1;i<=100;i++)   {            for(j=1;j<=100;j++)           {                  a=2.3*i+1.9*j;                 if(a==82.3&&i<j)printf("%d %d\n",i,j);           }    }    return 0; }  说实在，新人凡是遇到浮点数的问题统统绕道吧，纠结float没有任何意义。

user: user-4
content: 引用 3 楼 a775467383 的回复:题目是这样的：啤酒每罐2.3元，饮料每罐1.9元。小明买了若干啤酒和饮料，一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少，请你计算他买了几罐啤酒。 那请问按你们的看法，应该怎样修改？ 同意8楼做法 以角或分为单位，化为整形不但不会出错，性能可能提升（只是可能，但好像有的arm没有浮点指令，会发生质的变化）

user: user-1
content: 引用 8 楼 PDD123 的回复:这个题目的浮点数精度问题，完全可以把价格换算成角或者分来做嘛。  至于dev-c++下不输出结果，是不是dev-c++和VC++6.0的printf函数有点不同？ 就VC 6这种垃圾，把两个浮点数比较成相等，也不太奇怪。

user: user-5
content: 这个题目的浮点数精度问题，完全可以把价格换算成角或者分来做嘛。  至于dev-c++下不输出结果，是不是dev-c++和VC++6.0的printf函数有点不同？

user: user-1
content: 引用 5 楼 a775467383 的回复:[quote=引用 2 楼 tuzhutuzhu 的回复:] float型，由于精度的问题，一般不直接使用==进行比较 题目是这样的：啤酒每罐2.3元，饮料每罐1.9元。小明买了若干啤酒和饮料，一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少，请你计算他买了几罐啤酒。 那请问按你的看法，应该怎样修改？[/quote]  for (int px = 0; px<823/19; px++)         for (int yx = 0; yx <823/19; yx ++)             if (23*px + 19*yx == 823 && px < yx) printf("%d,%d\n", px, yx);

user: user-6
content: 引用 5 楼 a775467383 的回复:[quote=引用 2 楼 tuzhutuzhu 的回复:] float型，由于精度的问题，一般不直接使用==进行比较 题目是这样的：啤酒每罐2.3元，饮料每罐1.9元。小明买了若干啤酒和饮料，一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少，请你计算他买了几罐啤酒。 那请问按你的看法，应该怎样修改？[/quote] 一般用if(abs(a-b)<=delta)来判断，delta的值取决于你想要的精度

user: user-0
content: 引用 2 楼 tuzhutuzhu 的回复:float型，由于精度的问题，一般不直接使用==进行比较 题目是这样的：啤酒每罐2.3元，饮料每罐1.9元。小明买了若干啤酒和饮料，一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少，请你计算他买了几罐啤酒。 那请问按你的看法，应该怎样修改？

user: user-0
content: 引用 1 楼 user-7 的回复:a==82.3 深坑慎入题目是这样的：啤酒每罐2.3元，饮料每罐1.9元。小明买了若干啤酒和饮料，一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少，请你计算他买了几罐啤酒。 那请问按你的看法，应该怎样修改？

user: user-0
content: 题目是这样的：啤酒每罐2.3元，饮料每罐1.9元。小明买了若干啤酒和饮料，一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少，请你计算他买了几罐啤酒。 那请问按你们的看法，应该怎样修改？

user: user-6
content: float型，由于精度的问题，一般不直接使用==进行比较

user: user-7
content: a==82.3 深坑慎入
user-0 提问:  怎么把一个文件加入到另一个文件，在vc中用什么函数实现？

回复:
user: user-0
content: 引用 3 楼 derekrose 的回复:[quote=引用 1 楼 z616913706 的回复:] 比如我现在压缩了一个zip的文件  我怎么在这个压缩文件中添加自己的文件头，版本号之类的 求大神知道啊。大神们快点来帮我看看啊 不就是读写文件吗？难点是什么？具体一点[/quote]大神求给个简单的例子或者伪代码也行

user: user-0
content: 引用 2 楼 user-4 的回复:1. 写模式创建一个二进制文件File1，写入1kb 0，写入文件头，版本号之类； 2. 读模式打开zip文件File2，读取数据，计算校验码，写入File1。 3. 将读取到的数据写入File1。 4. 关闭两个文件。大神能说的详细点吗

user: user-1
content: CreateFile(...); WriteFile(...);

user: user-2
content: 创建一个新文件，写文件中附上文件头，版本号，校验码之类， 读入压缩的文件， 一并写入新文件

user: user-3
content: 引用 1 楼 z616913706 的回复:比如我现在压缩了一个zip的文件  我怎么在这个压缩文件中添加自己的文件头，版本号之类的 求大神知道啊。大神们快点来帮我看看啊 不就是读写文件吗？难点是什么？具体一点

user: user-4
content: 1. 写模式创建一个二进制文件File1，写入1kb 0，写入文件头，版本号之类； 2. 读模式打开zip文件File2，读取数据，计算校验码，写入File1。 3. 将读取到的数据写入File1。 4. 关闭两个文件。

user: user-0
content: 比如我现在压缩了一个zip的文件  我怎么在这个压缩文件中添加自己的文件头，版本号之类的 求大神知道啊。大神们快点来帮我看看啊
user-0 提问: open 的时候返回了0，没有去重定向文件描述符0.

回复:
user: user-1
content: 引用 3 楼 luckyaslan 的回复:[quote=引用 2 楼 ak47_wz 的回复:] 你打开什么了？ 这个和打开什么设备有关系吗[/quote] 有一定关系。但也并完全。 open会返回你当前可用的最小文件描述符。你能返回0，要么你是你打开了标准输入。 要么是，你在调用open之前，你关掉了标准输入。这样子，再调用open，会返回最小文件描述符，也就是0.

user: user-0
content: 引用 7 楼 ak47_wz 的回复:[quote=引用 3 楼 luckyaslan 的回复:] [quote=引用 2 楼 ak47_wz 的回复:] 你打开什么了？ 这个和打开什么设备有关系吗[/quote] 有一定关系。但也并完全。 open会返回你当前可用的最小文件描述符。你能返回0，要么你是你打开了标准输入。 要么是，你在调用open之前，你关掉了标准输入。这样子，再调用open，会返回最小文件描述符，也就是0.[/quote]  是，昨天想了下，程序中用到了开源的东西，可能是这个里面关闭了文件描述符0.

user: user-2
content: 引用 7 楼 ak47_wz 的回复:[quote=引用 3 楼 luckyaslan 的回复:] [quote=引用 2 楼 ak47_wz 的回复:] 你打开什么了？ 这个和打开什么设备有关系吗[/quote] 有一定关系。但也并完全。 open会返回你当前可用的最小文件描述符。你能返回0，要么你是你打开了标准输入。 要么是，你在调用open之前，你关掉了标准输入。这样子，再调用open，会返回最小文件描述符，也就是0.[/quote] 精辟！

user: user-3
content: STDIN_FILENO 0 STDOUT_FILENO 1 STDERR_FILENO  2 不谢

user: user-4
content: open的对象问题吧1

user: user-5
content: stdin : 0 stdout : 1 stderr : 2

user: user-0
content: 引用 2 楼 ak47_wz 的回复:你打开什么了？ 这个和打开什么设备有关系吗

user: user-1
content: 你打开什么了？

user: user-6
content: 返回0，表示打开了标准输出，你open的是什么设备？？？
user-0 提问: 省略号在数组初始化内核模块

回复:
user: user-1
content: 引用 1 楼 akirya 的回复:这是GCC的扩展吧 确实是的.  gnu c对c90的扩充语法。在这里的作用就把0~PLIP_MAX-1范围内的数组元素初始化为-1。  看参考gcc编译器手册获取更多细节，或者网络搜索“Designated Initializers”关键字获取帮助信息。

user: user-2
content: 这是GCC的扩展吧
user-0 提问: char类型赋负值的问题

回复:
user: user-1
content: 这样可能更直观 #include <stdio.h>  int main() {     char c1 = -6;     unsigned char c2 = -6;     int i1 = c1;     int i2 = c2;      printf("%x %x\n", i1, i2);      return 0; }

user: user-2
content: printf这类变参函数，传参数的时候会进行缺省参数提升，char和short会被提升为int，float提升为double。

user: user-3
content: printf("%X\n",ch);函数中的%X意味着其后对应的参数为int类型, ch会转换成int

user: user-4
content: 学习了。。

user: user-5
content: 这是隐式类型转换。char is promoted to int. 楼主可以看看这篇文章 http://www.ilanever.com/article/sitedetail.html?id=253

user: user-6
content: 对于16进制输出, 都需要转换成无符号类型, 否则就会出现char按4字节输出的问题.   printf("%X\n",ch);//char类型-6的十六进制       修改成--------------->  printf("%X\n",(BYTE)ch);     printf("%X\n",ch_2);//char类型 6的十六进制   修改成------------>  printf("%X\n",(BYTE)ch_2);

user: user-7
content: 学习了，看来printf也没那么简单啊

user: user-8
content: 引用 1 楼 iamkconghua 的回复:printf("%X\n",ch);函数中的%X意味着其后对应的参数为int类型, ch会转换成int 引用 6 楼 zhao4zhong1 的回复:printf("%02X\n",(unsigned char)ch);  大神

user: user-0
content: 学习了，谢谢大家的回答。

user: user-9
content: printf("%02X\n",(unsigned char)ch);
user-0 提问: 结构体指针 后面跟方括号

回复:
user: user-1
content: 指针操作与操作符[ ]的运用  char name[32]; char *str = name;  访问第x属于[0，31],则下列语句等价 name[x] *（name + x）  *（str + x）  str = name + x； *str

user: user-2
content: 对int * a; *(a + i) == a[i]

user: user-3
content: 引用 8 楼 fuyongming 的回复:引用 7 楼 zhao4zhong1 的回复:A[B]等价于*(A+B)等价于*(B+A)等价于B[A]不是数学题啊，这交换律有点粗鲁。 //A[B]等价于*(A+B)等价于*(B+A)等价于B[A] //设A为"xyz",B为1 #include <stdio.h> int main() {     printf("[%c]\n",  "xyz"[1]);     printf("[%c]\n",*("xyz"+1));     printf("[%c]\n",*(1+"xyz"));     printf("[%c]\n",  1["xyz"]);     return 0; } //[y] //[y] //[y] //[y] //  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-4
content: 引用 7 楼 zhao4zhong1 的回复:A[B]等价于*(A+B)等价于*(B+A)等价于B[A]不是数学题啊，这交换律有点粗鲁。

user: user-3
content: A[B]等价于*(A+B)等价于*(B+A)等价于B[A]

user: user-4
content: 引用 楼主 zxasqwedc 的回复:typedef struct _VIDEO_BLK_INFO { 	int 	video_type; 	int	width; 	int	height; 	..... } VIDEO_BLK_INFO;   typedef struct _STREAM_PARM{ 	MEM_MNG_INFO 	MemInfo; 	... }	STREAM_PARM;   typedef struct _MEM_INFO{ 	... 	VIDEO_BLK_INFO	*video_info;   } MEM_MNG_INFO;  STREAM_PARM *pParm; MEN_MNG_INFO MemInfo;   VIDEO_BLK_INFO *PVidInfo = &pParm->MemInfo.vedio_info[x];  如上，，[x]是什么意思？指什么呢。。。 MEM_MNG_INFO结构体里面的VIDEO_BLK_INFO不是数组指针啊？？？求解简单地说，[x]是数据的第x的元素，指针可以表示数组的首元素地址，&[x]表示当前元素的地址，也就是指针偏移到该元素的地址。

user: user-5
content: 引用数组也是一个指针来的， VIDEO_BLK_INFO    *video_info;可表示一个结构体的指针，或一个数组的首地址 vedio_info[x] 可表示数组的第几个项，也可理解为在内存里从首地址开始的第x个位置 基本上是这个意思，数组指针也是指针啊，用法是一样的

user: user-6
content: pParm就没指向，只是个空指针，怎么能对其成员取地址呢

user: user-7
content: 这个是基础中的基础，多看下书吧

user: user-8
content: 数组也是一个指针来的， VIDEO_BLK_INFO    *video_info;可表示一个结构体的指针，或一个数组的首地址 vedio_info[x] 可表示数组的第几个项，也可理解为在内存里从首地址开始的第x个位置

user: user-9
content: typedef struct _MEM_INFO {      ...      VIDEO_BLK_INFO    *video_info;     //这里是个指针，看具体用法，可以指向一个VIDEO_BLK_INFO数组的首地址 } MEM_MNG_INFO;   例如 MEM_MNG_INFO tmpMngInfol; VIDEO_BLK_INFO tmpBlkInfo[10]; tmpMngInfol.video_info = tmpBlkInfo; tmpMngInfol.video_info[0];// 就相当于tmpBlkInfo[0]  指针其实就是地址，MemInfo.vedio_info[x];  说白了就是指向MemInfo.vedio_info+x*sizeof（VIDEO_BLK_INFO）
user-0 提问: 哪位大神可以帮帮我

回复:
user: user-1
content: 流就是一堆数据，    打个比方，你开水龙头，源源不断的出水，每滴水都是 数据，远远不断的数据。

user: user-2
content: 1、流是线性的； 2、流可以单向或者是双向传输； 3、流中数据是动态变化的； 4、流中的数据是大量的或者是传送速度要求比较快的。  引用 楼主 u014362443 的回复:由于初学C语言，不知道流是怎么一个概念，还有就是它跟直接传输有什么传输有什么区别，谁能够给我最直观的解释或者打比方，谢谢，好人一生平安

user: user-3
content: 先  http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express  点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装   再参考  C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\input.c  和  C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c  以及  C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\目录下其它和输入输出相关的C/C++源代码

user: user-4
content: 先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装  再参考 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\input.c 和 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c 以及 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\目录下其它和输入输出相关的C/C++源代码

user: user-5
content: 我认为流就是一段延直线排列的数据。
user-0 提问: C语言&运算符问题。。。。

回复:
user: user-1
content: 1011和100都是10进制哦。 位运算符：http://www.ilanever.com/article/sitedetail.html?id=244

user: user-2
content: int a = (1011)&100 1011 表示1000 + 10 + 1    十进制 100 代表100   十进制  你当然不能得出2进制结果

user: user-3
content: 1111110011  // 1011 & 0001100100  // 100 ------------   0001100000  难道LZ把1011和100当成二进制?

user: user-4
content: 你怎么算成0的
user-0 提问: STM32 CAN如何通过PGN来过滤数据

回复:
user: user-1
content: 楼主，怎么解决的？

user: user-0
content: 已经解决了，谢谢哈！

user: user-2
content: 你这是要解1939的协议吗？我弄过1939，有类似的代码 如果需要 加QQ 522511920

user: user-0
content: 自己顶啊！！！！
user-0 提问: 关于fread读取结构体fwrite输出的问题几个

回复:
user: user-1
content: 引用 3 楼 u012774187 的回复:引用 1 楼 JiMoKuangXiangQu 的回复:这个就不用操心了,读写统一用sizeof()来指定大小,输入/输出保持一致即可.那我应该怎么修改呢？？ /*  * Build with Code::Blocks 13.12, and set GCC as compiler.  */  #include <stdio.h> #include <stdlib.h>  #define N 2  struct node //这是每个学生节点包含的信息 { 	char name[31]; 	long number; //	int  course1; //	int  course2; //	int  course3; //	int  course4; //	int  course5; //	int total; //	float average; //	PNODE next; //	int rank; } stu[N] = {     {"ZhanSan", 20040301},     {"LiSi",    20040302}, };  int main(void) {     const char *stuDataFile = "Students.dat";     FILE *fp;     int i;     struct node student;      // write students records     if ((fp = fopen(stuDataFile, "wb")) == NULL)     {         fprintf(stderr, "create file %s failed\n", stuDataFile);         exit(EXIT_FAILURE);     }     for (i = 0; i < N; i++)         fwrite(&stu[i], sizeof(struct node), 1, fp); // 最好判断是否写入成功     fclose(fp);      // read the records     if ((fp = fopen(stuDataFile, "rb")) == NULL)     {         fprintf(stderr, "open file %s failed\n", stuDataFile);         exit(EXIT_FAILURE);     }     for (i = 0; i < N; i++)     {         fread(&student, sizeof(struct node), 1, fp);         printf(".name: %s\n.number: %ld\n\n", student.name, student.number);     }     fclose(fp);      return 0; } 参考一下.

user: user-2
content: open 时设定 rw 不就行了吗

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

user: user-0
content: 引用 1 楼 JiMoKuangXiangQu 的回复:这个就不用操心了,读写统一用sizeof()来指定大小,输入/输出保持一致即可.那我应该怎么修改呢？？

user: user-1
content: 另外,最好不要对同一个同时读写. LZ的读失败的原因是: 首先在读,可惜此时文件里面没有任何内容; 其次即使先写后读,也要把缓冲的内容刷到输出文件(fflush,fclose),菜油内容可读.

user: user-1
content: 这个就不用操心了,读写统一用sizeof()来指定大小,输入/输出保持一致即可.
user-0 提问: 关于程序入口时数据区大小的分配

回复:
user: user-1
content: 《程序员的自我修养——链接、装载与库》

user: user-0
content: 引用 2 楼 JiMoKuangXiangQu 的回复:推荐LZ学习下 Linkers and Loaders类的书籍.如果针对特定平台,Windows可以看看PE格式,Linux可以看看ELF. 另外,进程/线程也需要了解.  个人意见,仅供参考.  恩恩，谢谢推荐，我要走的路还很长，，， 但是能现在解释一下么？

user: user-0
content: 引用 1 楼 N_sev7 的回复:几存放数据内存段： 1）正文段——CPU执行机器指令部分；程序只有副本；只读防止程序由于意外事故而修改自身指令；  2）初始化数据段（数据段）——程序所有赋了初值全局变量存放里  3）非初始化数据段（bss段）——程序没有初始化全局变量；内核此段初始化0  4）栈——增长方向：自顶向下增长；自动变量及每次函数调用时所需要保存信息（返回地址；环境信息）  5）堆——动态存储 这个我知道，程序代码有个区域放置的，但是在VC心爱调试的时候，到一个函数入口，内存的一块区域会高亮，我可以理解为给这个程序段分配的内存的吗？但问题是每次一样的代码区域大小不一样啊

user: user-2
content: 推荐LZ学习下 Linkers and Loaders类的书籍.如果针对特定平台,Windows可以看看PE格式,Linux可以看看ELF. 另外,进程/线程也需要了解.  个人意见,仅供参考.

user: user-3
content: 几存放数据内存段： 1）正文段——CPU执行机器指令部分；程序只有副本；只读防止程序由于意外事故而修改自身指令；  2）初始化数据段（数据段）——程序所有赋了初值全局变量存放里  3）非初始化数据段（bss段）——程序没有初始化全局变量；内核此段初始化0  4）栈——增长方向：自顶向下增长；自动变量及每次函数调用时所需要保存信息（返回地址；环境信息）  5）堆——动态存储
user-0 提问: 定义 unsigned char *pImage;报错错误： expected expression before ‘unsigned’

回复:
user: user-1
content: 引用 6 楼 lgmsyy 的回复:[quote=引用 5 楼 gqjjqg 的回复:] unsigned char pImage[10]; 在C中不能这么定义，请参考3，4楼答案。  [/quote]  别搞笑好吗?  回去看看C99怎么定义一个数组。

user: user-0
content: 引用 5 楼 gqjjqg 的回复:unsigned char pImage[10]; 在C中不能这么定义，请参考3，4楼答案。

user: user-1
content: unsigned char pImage[10];

user: user-0
content: 引用 2 楼 N_sev7 的回复:[quote=引用 1 楼 lgmsyy 的回复:] 在c++中可以这么定义：  unsigned char *pImage； pImage = new unsigned char[100];  C应该怎么写，我按照以下方式，报错 unsigned char *pImage;   pImage = unsigned char[10]; 错误： expected expression before ‘unsigned’  unsigned char *pImage = (unsigned char *)malloc(sizeof(unsigned char)*10); [/quote] 用malloc动态分配一个 unsigned char 的空间，在这里空间分配了10个字节。然后把malloc返回的地址强制类型转换为unsigned char指针，在将结果付给指针变量pImage。是这个意思吗？

user: user-2
content: 引用 1 楼 lgmsyy 的回复:在c++中可以这么定义：  unsigned char *pImage； pImage = new unsigned char[100];  C应该怎么写，我按照以下方式，报错 unsigned char *pImage;   pImage = unsigned char[10]; 错误： expected expression before ‘unsigned’  pImage = unsigned char[10]; C中有这样的表达式吗？

user: user-2
content: 引用 1 楼 lgmsyy 的回复:在c++中可以这么定义：  unsigned char *pImage； pImage = new unsigned char[100];  C应该怎么写，我按照以下方式，报错 unsigned char *pImage;   pImage = unsigned char[10]; 错误： expected expression before ‘unsigned’  unsigned char *pImage = (unsigned char *)malloc(sizeof(unsigned char)*10);

user: user-0
content: 在c++中可以这么定义：  unsigned char *pImage； pImage = new unsigned char[100];  C应该怎么写，我按照以下方式，报错 unsigned char *pImage;   pImage = unsigned char[10]; 错误： expected expression before ‘unsigned’

user: user-1
content: 引用 8 楼 lgmsyy 的回复:[quote=引用 7 楼 gqjjqg 的回复:] [quote=引用 6 楼 lgmsyy 的回复:] [quote=引用 5 楼 gqjjqg 的回复:] unsigned char pImage[10]; 在C中不能这么定义，请参考3，4楼答案。  [/quote]  别搞笑好吗?  回去看看C99怎么定义一个数组。[/quote]  刚才看错了。  unsigned char pImage[10];是没问题的。 但我需要的是unsigned char *pImage 这种指针方式，4楼给的答案是正确的，请参考。[/quote]  才10个字节的数组要去malloc一把,free一把.

user: user-2
content: 引用 4 楼 lgmsyy 的回复:[quote=引用 2 楼 N_sev7 的回复:] [quote=引用 1 楼 lgmsyy 的回复:] 在c++中可以这么定义：  unsigned char *pImage； pImage = new unsigned char[100];  C应该怎么写，我按照以下方式，报错 unsigned char *pImage;   pImage = unsigned char[10]; 错误： expected expression before ‘unsigned’  unsigned char *pImage = (unsigned char *)malloc(sizeof(unsigned char)*10); [/quote] 用malloc动态分配一个 unsigned char 的空间，在这里空间分配了10个字节。然后把malloc返回的地址强制类型转换为unsigned char指针，在将结果付给指针变量pImage。是这个意思吗？[/quote]

user: user-0
content: 引用 7 楼 gqjjqg 的回复:[quote=引用 6 楼 lgmsyy 的回复:] [quote=引用 5 楼 gqjjqg 的回复:] unsigned char pImage[10]; 在C中不能这么定义，请参考3，4楼答案。  [/quote]  别搞笑好吗?  回去看看C99怎么定义一个数组。[/quote]  刚才看错了。  unsigned char pImage[10];是没问题的。 但我需要的是unsigned char *pImage 这种指针方式，4楼给的答案是正确的，请参考。
user-0 提问: 求解深度优先搜索问题

回复:
user: user-1
content: dp的代码，主要看思路哈下面代码许多边界条件都没有考虑） 而且内存相当大，可能行不通  void Baozang(int m, int n, int k) { 	int baoNumber[m][n] //记录各个地点宝藏 	dp Baozang[m][n][m+n]  //记录各个情况宝藏数目 	 	                       //这里最好用vector之类的替换省一点内存 	min[0][0] = baoNumber[0][0]; 	 	for(int i = 1; i <= m + n - 2; ++i) 	{ 		for(int j = 0; j <= i; ++ j) 		{ 			//更新各个位置宝藏数目以及最小宝藏数 			int p = 0,q = 0; 			while(dp[j][i - j][p].minbao != -1) 			{//上面来的情况 				if(dp[j][i - j] + baoNumber[j][i - j] <= k) 				{ 					baozang[j][i - j][q] = dp[[j][i - j - 1][p] + baoNumber[i][i - j]; 					++ q; 				} 				++ p; 			}  			p = 0; 			while(dp[i - 1][i - j][p].minbao != -1) 			{//左面来的情况 				if(dp[i - 1][i - j][p] + baoNumber[i][i - j] <= k) 				{ 					baozang[i][i - j][q] = dp[i - 1][i - j][p] + baoNumber[i][i - j]]; 					++ q; 				} 				++ p; 			}  			 		} 	} 	 }ud   下面深搜的代码，作了最简单的减枝，应该TLE，有兴趣的话继续优化一下减枝条件吧  int count = 0;  void search(int minbao, int curBao, int m, int n,  			int targetM, int targetN, int k) { 	if(curBao > k) 	   return; 	if(m == targetM && n == targetN) 	{ 		if(minbao + baoNumber[m][n] == k) 		{ 			++ count; 			return; 		} 		else  			return;  	} 	if(baoNumber[m][n] < minbao) 	{ 		minbao = baoNumber[m][n]; 		curBao += baoNumber[m][n]; 	} 		 	if(m + 1 < targetM) 		search(minbao, curBao, m + 1, n ,targetM, targetN, k); 	 	if(n + 1 < targetM) 		search(minbao, curBao, m , n + 1,targetM, targetN, k); }

user: user-1
content: 空间允许的话(需要O(m*n*k)的辅助空间)，用动态规划吧。 到每个位置经过的步数都一定的，只要每次更新到这里 的可能得到的宝藏一直更新到终点就可以了。  深搜的话注意减枝，要不肯定要TLE。吃饭去了，一会吃完上代码

user: user-2
content: 1)找出可以拿到K件的若干最短路径。 2)查找每条最短路径的替代方案总数目。 3)去重或者设法使得计算中，没有重复方案。 PS: 这里只需要数目，不需要给出每种方案。

user: user-3
content: 个人见解：动态规划只是在概率往往接近最优解而已，想要准确的不行吧。

user: user-4
content: 显然是动态规划。搜索等着超时吧。
user-0 提问: 看到c专家编程上面有一个有意思的东西

回复:
user: user-1
content: 引用 1 楼 zengraoli 的回复: #include "stdio.h" #include "stdlib.h"   // static unsigned short stopwatch[] = { // 	0x07C6, // 	0x1FF7, // 	0x383B, // 	0x600C, // 	0x600C, // 	0xC006, // 	0xC006, // 	0xDF06, // 	0xC106, // 	0xC106, // 	0x610C, // 	0x610C, // 	0x3838, // 	0x1FF0, // 	0x07C0, // 	0x0000 // };   #define X )*2+1 #define _ )*2 #define s ((((((((((((((((0 /* For building glyphs 16 bits wide */   static unsigned short stopwatch[] = { 	s _ _ _ _ _ X X X X X _ _ _ X X _ , 	s _ _ _ X X X X X X X X X _ X X X , 	s _ _ X X X _ _ _ _ _ X X X _ X X , 	s _ X X _ _ _ _ _ _ _ _ _ X X _ _ , 	s _ X X _ _ _ _ _ _ _ _ _ X X _ _ , 	s X X _ _ _ _ _ _ _ _ _ _ _ X X _ , 	s X X _ _ _ _ _ _ _ _ _ _ _ X X _ , 	s X X _ X X X X X _ _ _ _ _ X X _ , 	s X X _ _ _ _ _ X _ _ _ _ _ X X _ , 	s X X _ _ _ _ _ X _ _ _ _ _ X X _ , 	s _ X X _ _ _ _ X _ _ _ _ X X _ _ , 	s _ X X _ _ _ _ X _ _ _ _ X X _ _ , 	s _ _ X X X _ _ _ _ _ X X X _ _ _ , 	s _ _ _ X X X X X X X X X _ _ _ _ , 	s _ _ _ _ _ X X X X X _ _ _ _ _ _ , 	s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ };    int main() { 	int index; 	printf("1111"); 	for (index = 0; index < 16; index++) 	{ 		printf("%x", stopwatch[index]); 		printf("\n"); 	} 	printf("222");  	return 0; }   未明白，这里111和222都没输出，输出只有0x07C6、0x1FF7、0x383B……这些的十进制数值，而且是连在一起的。。  int main() { 	int index; 	printf("1111\n\n\n");    ///多加几个换行你就看到了   - _ -!!! 	for (index = 0; index < 16; index++) 	{ 		printf("%x", stopwatch[index]); 		printf("\n"); 	} 	printf("\n\n222\n"); 	 	return 0; }

user: user-0
content: 自己的问题。。编译器 没设置正确。。

user: user-0
content: #include "stdio.h" #include "stdlib.h"   // static unsigned short stopwatch[] = { // 	0x07C6, // 	0x1FF7, // 	0x383B, // 	0x600C, // 	0x600C, // 	0xC006, // 	0xC006, // 	0xDF06, // 	0xC106, // 	0xC106, // 	0x610C, // 	0x610C, // 	0x3838, // 	0x1FF0, // 	0x07C0, // 	0x0000 // };   #define X )*2+1 #define _ )*2 #define s ((((((((((((((((0 /* For building glyphs 16 bits wide */   static unsigned short stopwatch[] = { 	s _ _ _ _ _ X X X X X _ _ _ X X _ , 	s _ _ _ X X X X X X X X X _ X X X , 	s _ _ X X X _ _ _ _ _ X X X _ X X , 	s _ X X _ _ _ _ _ _ _ _ _ X X _ _ , 	s _ X X _ _ _ _ _ _ _ _ _ X X _ _ , 	s X X _ _ _ _ _ _ _ _ _ _ _ X X _ , 	s X X _ _ _ _ _ _ _ _ _ _ _ X X _ , 	s X X _ X X X X X _ _ _ _ _ X X _ , 	s X X _ _ _ _ _ X _ _ _ _ _ X X _ , 	s X X _ _ _ _ _ X _ _ _ _ _ X X _ , 	s _ X X _ _ _ _ X _ _ _ _ X X _ _ , 	s _ X X _ _ _ _ X _ _ _ _ X X _ _ , 	s _ _ X X X _ _ _ _ _ X X X _ _ _ , 	s _ _ _ X X X X X X X X X _ _ _ _ , 	s _ _ _ _ _ X X X X X _ _ _ _ _ _ , 	s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ };    int main() { 	int index; 	printf("1111"); 	for (index = 0; index < 16; index++) 	{ 		printf("%x", stopwatch[index]); 		printf("\n"); 	} 	printf("222");  	return 0; }   未明白，这里111和222都没输出，输出只有0x07C6、0x1FF7、0x383B……这些的十进制数值，而且是连在一起的。。
user-0 提问: 哪位大神有VS的使用教程？

回复:
user: user-1
content: VS2010或者以上，不建议修改字体大小，你可以用代码编辑器右下角的百分比缩放来调整大小。

user: user-2
content: 嗯，这些都是可以搜到的，一楼说的不错

user: user-3
content: 字体： 工具 --> 选项 --> 环境 --> 字体和颜色 代码序号（大概说的是行号吧）：工具 --> 选项 --> 文本编辑 --> C/C++ --> 常规，右边的 “行号”前打勾勾 以上是vs2013的设置，其他版本类似。  vs2012和vs2013的文档似乎是通用的，这里有下载链接： http://www.microsoft.com/zh-CN/download/details.aspx?id=34794
user-0 提问: for循环问题

回复:
user: user-1
content: for(i=0;i<n;i++); 你想要初始化时，注意for循环后面的逗号，循环完了，i就是9了 应该去掉后面的逗号

user: user-2
content: 这么细致的问题都看出来了,真是厉害啊

user: user-3
content: for(i=0;i<n;i++);  多了个分号“；”

user: user-0
content: 谢谢！qwq

user: user-4
content: for(i=0;i<n;i++);因为这里多了一个  ；

user: user-5
content: for(i=0;i<n;i++)/*;*/
user-0 提问: 求解：该循环的过程

回复:
user: user-1
content: 这个应该还蛮好理解的。就是三层for循环，从最内层开始，知道最外层结束。

user: user-2
content: //for循环的循环体，即使只有一行，也建议加上大括号 #include <stdio.h>  void main() { 	int i, j, k; 	for (i = 0; i < 2; i++) 	{ 		for (j = 0; j < 2; j++) 		{ 			for (k = 0; k < 2; k++) 			{ 				printf("%d%d%d\n", i, j, k); 			} 		} 	} }

user: user-3
content: 你就当第一行for是主循环程序

user: user-4
content: 这是一个比较基础的问题，lz可以看看这个——http://see.xidian.edu.cn/cpp/html/45.html ——http://blog.163.com/kam_1993/blog/static/15026799020103322249279/  对于学习，我个人的建议是遇到不会的就仔细想想，想不出来就看书，看不出来就谷歌百度，再不行了来论坛，这样的流程下来，许多问题就被解决了，而且自己也能体会到学习的快乐，何乐而不为呢？ 像这样的问题，前两步就差不多解决了，即使稍有些不清楚，第三步就可以解决了，lz要善于使用网络资源啊

user: user-5
content: 最里面的循环2x2x2=8次，所以输出8行 k循环执行2x2=4次 j循环执行2次 i循环执行一次

user: user-6
content: 结果都打印出来了，还不明白循环过程吗？一层层进入最内层循环，此时i=0,j=0,k=0,k循环完毕后此循环结束，退出到j层循环，j此时自增为1，继续进入k循环，k循环结束，此时j自增为2，j循环也结束，i自增为1....
user-0 提问: 数组内存分配

回复:
user: user-1
content: 不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。

user: user-2
content: 楼主你是猴子请来的逗兵吗

user: user-3
content: 逗你玩

user: user-4
content: 哇。。。地址相同？不会吧！怎么会有这种情况

user: user-5
content: 楼主是想让他们两个用同一段地址吗

user: user-6
content: 这是两个不同的二维数组，占用两段不同的连续内存空间，如果是全局的，则在初始化数据段，如果是局部的，则在栈里面，不存在有交集的情况。

user: user-7
content: 引用 9 楼 sholber 的回复:dbsrcY[0][15]是内存地址？你们是故意逗我开心的吗？ dbsrcY[0][15]是一个指示对象的左值。 “除非作为sizeof、一元&、++、--、赋值和.的左操作数，左值被转换为它所指示的对象的存储值” 楼主也搞笑，这事不可能。 看到后面修改没？

user: user-8
content: ~~~~上源码

user: user-9
content: 引用 1 楼 user-14 的回复: 只是试一试的回答，不知道对不对。 这个只是声明不是定义，并没有实际分配内存。C语言中指的定义是指实际分配内存。 改为下面的代码试一试，    int dbsrcY[36][36]={0};   int dbsrcU[18][18]={0}; 我看你自己都有点模糊。。这是声明？？？ -------------------------------------------------------------------------------- 糊涂了吧？定义也是声明，反之则不然。

user: user-9
content: dbsrcY[0][15]是内存地址？你们是故意逗我开心的吗？ dbsrcY[0][15]是一个指示对象的左值。 “除非作为sizeof、一元&、++、--、赋值和.的左操作数，左值被转换为它所指示的对象的存储值” 楼主也搞笑，这事不可能。

user: user-7
content: 引用 3 楼 zengraoli 的回复:dbsrcY[0][15]本来就是一个内存地址，对他进行&？有什么意思呢？  数组在分配的数据，内存是连续的；  起始地址不同，代表两个数组区域不同，显然不存在“有一段元素内存地址相同”。  dbsrcY[0][15]本来就是一个内存地址，对他进行&？有什么意思呢？这句话修改一下： &dbsrcY[0][15]本来就是一个已经分配的内存地址，分配之后变成了等价于const的地址，无法进行修改了

user: user-10
content: 还有可能就是其他数组越界，栈乱了

user: user-11
content: 下标越界

user: user-12
content: 楼主，本人亲自实验，编译器vs2008,没有相同的地址，在栈上分配的不同的地址，事实胜于一切。

user: user-7
content: 引用 1 楼 user-14 的回复:只是试一试的回答，不知道对不对。 这个只是声明不是定义，并没有实际分配内存。C语言中指的定义是指实际分配内存。 改为下面的代码试一试，    int dbsrcY[36][36]={0};   int dbsrcU[18][18]={0};  我看你自己都有点模糊。。这是声明？？？

user: user-7
content: dbsrcY[0][15]本来就是一个内存地址，对他进行&？有什么意思呢？  数组在分配的数据，内存是连续的；  起始地址不同，代表两个数组区域不同，显然不存在“有一段元素内存地址相同”。

user: user-13
content: 显然这是不可能的！ 除非你中间作了操作

user: user-14
content: 只是试一试的回答，不知道对不对。 这个只是声明不是定义，并没有实际分配内存。C语言中指的定义是指实际分配内存。 改为下面的代码试一试，    int dbsrcY[36][36]={0};   int dbsrcU[18][18]={0};
user-0 提问: 求助！！！！！！！！！！！！啊

回复:
user: user-1
content: CreateFile/ReadFile/WriteFile通常就够了。 但如果你的下位机设备比较特殊，那就还得自己定制驱动程序。

user: user-2
content: 那就按一般的网络程序的写就行了啊，上位机主动连接就socket,connect,send,recv,send,recv...,closesocket,上位机监听由下位机主动连接就socket,bind,listen,accept,recv,send,recv,send...,closesocket，如果过程简单就用命令行，阻塞模式。功能要做多点就做个界面，异步模式。

user: user-3
content: 引用 2 楼 u014034731 的回复:[quote=引用 1 楼 movsd 的回复:] 首先，你得先确定连接方式，比如是串口，USB，还是其它……，然后制定通信协议，最后才是写上位机软件。 TCP  而且下位机的程序是已经完成的  里面有和上位机链接的协议，协议方面只要迎合下就行了吧[/quote] 那就简单了,有协议照协议做就可以了, tcp用soket编程就可以了.两个函数实现交互send,receive

user: user-0
content: 引用 1 楼 movsd 的回复:首先，你得先确定连接方式，比如是串口，USB，还是其它……，然后制定通信协议，最后才是写上位机软件。 TCP  而且下位机的程序是已经完成的  里面有和上位机链接的协议，协议方面只要迎合下就行了吧

user: user-2
content: 首先，你得先确定连接方式，比如是串口，USB，还是其它……，然后制定通信协议，最后才是写上位机软件。
user-0 提问: 一元二次方程求解 复数的格式输出

回复:
user: user-0
content: 其实我根本都没考虑到你说的浮点数问题 我只考虑了整数 主要是想输出正确的格式 至于格式问题照你说的 分别对特殊情形加个判断就搞定了 多谢你详细的回答

user: user-1
content: 有点难度，实数用浮点数表示，有精度问题 0.999999999到底算不算，1。  要想绝对精确表示实数，复数，就不能用浮点数。 用了浮点数，计算结果，可能不是精确的2 + i , 2 - i  而是可能是 2+ 0.999999i,2+1.000000000005i 和 2 - 0.999999i,2 - 1.000000000005i 等等。 这时候，无法表示成  2 + i ，2-i  个人觉多 对于1i 的表示，不要过于吹毛求疵， 非要这样的话，加个判断， 虚部绝对值==1的时候 只输出+/- 和 i ，不输出虚部即可。 大概如下： 1) 虚部实部 同时为零，输出0 2) 虚部为0 ，只输出实部， 3) 实部为零，只输出虚部和i 4) 虚部绝对值为1的时候，只输出+/- 和 i ，不输出虚部即可。 5）其他时候分别输出    A: 实部    B: 虚部的符号（+/-）   C:虚部的绝对值 D:虚数单位( i )
user-0 提问: C语言如何与其他语言实现通信？

回复:
user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……

user: user-2
content: 可以通过socket网络通信了，协议内容自己定就行了。

user: user-3
content: 动态链接，静态链接，内存映射。 知道的就这几个（从来没做过C语言）

user: user-4
content: socket通讯最通用哈。

user: user-5
content: 假设A语言的进程间通信方式有A1，A2，A3……，B语言的进程间通信方式有B1，B2，B3…… 如果Am与Bn相同，则A语言和B语言就可以通过Am（即Bn）方式进行通信。

user: user-6
content: 语言只是完成一些逻辑功能 如果你想调用另外一种语言的模块，你需要做一个接口吧， 比如java运行在不同的OS上都要一个JVM
user-0 提问: 无法运行一个由VC++6.0生成的.exe文件

回复:
user: user-1
content: 如果是缺少dll文件，会有弹框的 引用 6 楼 u013707588 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 用depends.exe查看exe依赖的dll  在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。问题应该是我的系统里却少了好几个API-MS-WIN-CORE-WINRT-L1-1-0.DLL这样的文件，该怎么办呢？[/quote]

user: user-2
content: 用depends.exe查看exe依赖的dll  在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-3
content: 有提示吗，比如没有找到什么什么的...

user: user-2
content: 引用 6 楼 u013707588 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 用depends.exe查看exe依赖的dll  在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。问题应该是我的系统里却少了好几个API-MS-WIN-CORE-WINRT-L1-1-0.DLL这样的文件，该怎么办呢？[/quote] 将对应文件拷贝到和exe相同目录下试试看。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:用depends.exe查看exe依赖的dll  在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。问题应该是我的系统里却少了好几个API-MS-WIN-CORE-WINRT-L1-1-0.DLL这样的文件，该怎么办呢？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:用depends.exe查看exe依赖的dll  在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。用depend查了下有好多DLL文件没找到

user: user-1
content: 可能是你的程序根本没有输出，没有窗口，运行起来在哪一步就退出了。

user: user-0
content: 引用 1 楼 user-3 的回复:有提示吗，比如没有找到什么什么的...没有任何提示，编译链接都没有错误且显示已经生成可执行文件，可是点击运行无任何反应。去文件目录双击此可执行文件也不行
user-0 提问: 怎么把数组中的每4个元素放到另一个数组作为该数组的一个元素？

回复:
user: user-1
content: 可以用sprintf实现。当然了，你题意表示太不清晰了

user: user-2
content: 你的问题不太清晰，你之前的数组元素是整型的，合并之后的数组也要是整型数组还是字符串类型？看你写的例子貌似应该是整型的。这个代码参考一下： #include <iostream> using namespace std; int main() { 	int size=0; 	int i=0; 	int crt=0; 	int mergeData=0; 	 	cout<<"input the array size:"<<endl; 	do  	{ 		cin>>size; 		if(size%4!=0) 		{ 			cout<<"error ,size must be four times!"<<endl; 		} 	}while(size%4); 	 	int *a=new int[size]; 	int *b=new int[size/4]; 	cout<<"input the array data:"<<endl; 	for(i=0;i<size;i++) 	{ 		cin>>a[i]; 	} 	 	for(i=0;i<size;i++,crt++) 	{ 		mergeData=mergeData*10+a[i]; 		if((crt+1)%4==0) 		{ 			b[i/4]=mergeData; 			mergeData=0; 		} 	} 	 	for(i=0;i<size/4;i++) 	{ 		cout<<b[i]<<endl; 	} 	 	return 0; }  代码没做太细的调试，你参考看看

user: user-3
content: 题目要求不是很清。 你这a如果是 a[8]={3456,7890,1,23455665,3444,4,7889, -1}; 请问你放到b后想怎么放？

user: user-4
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-5
content: b数组应该是二维数组，b[][4] = {1234,5678};

user: user-0
content: 引用 楼主 u011779380 的回复:怎么把数组中的每4个元素放到另一个数组作为该数组的一个元素？ 例如  int a[8]={1,2,3,4,5,6,7,8}; b数组就是 b[]={1234,5678}  这样可以实现吗？
user-0 提问: 定义一个结构体，来存储N个学生的姓名，学号，性别，四门课的成绩，输出总平均成绩最高的学生的信息，这样写行吗？求指点

回复:
user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-2
content: #include <stdio.h>  #define N 1  struct student {     long stu_number;     char name[15];     char sex;     int score[4];     float average; };  int main(void) {     int i,j;     float  sum=0.0;     float max;     struct student stua[N];      /* 读取每个学生的学号、姓名、性别、以及每个科目的成绩 */     printf("please input the informations of the students:\n");     for(i=0; i<N; i++)     {         /* 这个输入语句有点问题："%s%c"，这样有问题 */         /*scanf("%ld%s%c",&stua[i].stu_number,stua[i].name,&stua[i].sex);*/         scanf("%ld%s %c",&stua[i].stu_number,stua[i].name,&stua[i].sex);         for(j=0; j<4; j++)             scanf("%d",&stua[i].score[j]);     }      /* 计算每个学生的平均分 */     for(i=0; i<N; i++)     {         sum = 0.0f;         for(j=0; j<4; j++)             sum=sum+stua[i].score[j];         stua[i].average=sum/4.0;     }      /* 寻找最高平均分 */     max=stua[0].average;     int index=0;     for(i=0; i<N; i++)         //for(j=0; j<4; j++) // 删除了这一句         if(stua[i].average>max)         {             max=stua[i].average;             index=i;         }     /* 打印获得最高平均分的学生信息 */     printf("%ld %s %c %f",stua[index].stu_number,stua[index].name,stua[index].sex,stua[index].average);      return 0; } 基本没动LZ的代码,加了几对大括号,加了几个空格,以及删除修改个一句.

user: user-0
content: 为什么要N 1，还有为什么删去那一句？
user-0 提问: matlab c语言编写s函数输出的指针问题

回复:
user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。
user-0 提问: 输入结束符为EOF，输入多行，但输出只有一行，求帮助，有代码

回复:
user: user-0
content: 谢谢，那就是环境问题了，我是在虚拟机搭建的环境xp+eclipse

user: user-1
content: win7 + vs2010的测试环境

user: user-1
content: 我的输出是正确的。。

user: user-2
content: 感觉不要这么用，这代码写的好乱，而且也有容易出错的危险。定义一大推我都不知道有啥用的指针。

user: user-3
content: fgets(buf,len,stdin);
user-0 提问: 关于char*和unsigned char*的问题求解

回复:
user: user-0
content: 引用 4 楼 ak47_wz 的回复:我感觉，要用就用同一个，不要一下子用这个，一下子用那个。巨烦。不过大神可能是为了另外方面的考虑吧。我这种小虾米，揣测不出啊。 我等小虾米。。只有膜拜和求助

user: user-0
content: 引用 2 楼 wang0635 的回复:compress((Bytef*)buf,....)也可以吧 buf是char*，不强转编译器不愿意 关键是参数是Bytef，为什么要定义char*然后去强转，没明白

user: user-0
content: 引用 1 楼 user-4 的回复:感觉都行吧，不都是表示一个字节吗，有符号、无符号不都由程序员强转决定吗 我也觉得是这样的

user: user-1
content: 我感觉，要用就用同一个，不要一下子用这个，一下子用那个。巨烦。不过大神可能是为了另外方面的考虑吧。我这种小虾米，揣测不出啊。

user: user-2
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-3
content: compress((Bytef*)buf,....)也可以吧 buf是char*，不强转编译器不愿意

user: user-4
content: 感觉都行吧，不都是表示一个字节吗，有符号、无符号不都由程序员强转决定吗
user-0 提问: ro data数据区 运行时分配内存吗... 

回复:
user: user-1
content: 取决于链结脚本的配置以及系统空间的规划。 嵌入式（系统）不同于pc操作系统，通常pc操作系统各种类型的段的空间布局都是固定的，而嵌入式（系统）需要显式的编写链结脚本配置板卡的存储空间：什么样的段放在那块存储空间，段的LMA和VMA是否相同等等。 不管怎样，const全局变量都是要占据空间的，只不过位置可能会产生变化，取决于变量所在段的LMA和VMA是否相同。很常见的一种情况是，系统程序是一个独立的整体，然后由一个名为Loader的程序负责将系统映象加载到目的位置。

user: user-2
content: 一般全局的const或局部静态的const会放在Flash中，不占用RAM，不过有些编译器会使用一些特殊的关键字来指示将常量放入Flash，比如“_flash”。

user: user-0
content: 你说的是片内rom对吧！我的程序是放在这个位置。

user: user-3
content: 看你的ro data是放在什么位置，放在XIP的芯片中定义const可以节省RAM空间

user: user-3
content: 引用 2 楼 aq7811985 的回复:你说的是片内rom对吧！我的程序是放在这个位置。这个可以节省