Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 一个程序出了点毛病求大神指正啊啊啊

回复:
user: user-0
content: 引用 5 楼 a510579741 的回复:额 你输入什么了.... 亲 当时我没发现while里面的！ 改了= =

user: user-1
content: 额 如果你没输入$那就真是根本停不下来了~~~~~  这是我程序运行的结果 因为你的源程序要求$作为停止符

user: user-0
content: 引用 5 楼 a510579741 的回复:额 你输入什么了.... 亲 字符串啊= =

user: user-1
content: 额 你输入什么了.... 亲

user: user-0
content: 引用 2 楼 a510579741 的回复:注意结贴~~~~ 还是没输出啊= =怎么回事。。。。

user: user-1
content: 注意结贴~~~~

user: user-1
content: #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct list{ 	char date; 	struct list *next; }list; list *build()//*构建无头结点的字符串*//  { 	char q=getchar(); 	list *l,*s,*p; 	l=(list *)malloc(sizeof(list)); 	l->next=NULL; 	p=l; 	while(q!='$'){ 		s=(list *)malloc(sizeof(list)); 		s->date=q; 		p->next=s; 		p=s; 		q=getchar(); 	}//*字符链输入以$结束*//  	p->next=NULL; 	p=l->next; 	free(l); 	return p; }//build void sort(list *l,list *a,list *b,list *c) { 	list *d,*e,*f; 	d=a,e=b,f=c;  	while(l){ 		if(l->date>=48&&l->date<=57){ 			a->next=l; 			a=a->next; 			l=l->next; 		}//*数据是0到9字符的链放到a链中*//  		else if((l->date<=90&&l->date>=65)||(l->date>=97&&l->date<=122)){ 			b->next=l; 			b=b->next; 			l=l->next; 		}//*数据是字母的链放到b链中*//  		else { 			c->next=l; 			c=c->next; 			l=l->next; 		} //*数据是其他字符的链放到c链中*//  	} 	a->next=d; 	b->next=e; 	c->next=f;//*构成循环链表*//  }//sort void print(list *x){ 	list *y; 	y=x; 	while(x->next!=y){ 		printf("%c ",x->next->date);//*输出单循环链 *// 		x=x->next; 	} 	printf("\n"); }//print int main() { 	list *l,*a,*b,*c; 	a=(list *)malloc(sizeof(list)); 	b=(list *)malloc(sizeof(list)); 	c=(list *)malloc(sizeof(list));//*构建三个头结点*//    	l=build();   	sort(l,a,b,c); 	print(a); 	print(b); 	print(c); 	return 0; }  你没下断点调试一下么 .....    惩罚你一下  你猜我改哪里了....
user-0 提问: C语言 怎么用一个回车完成一次格式化

回复:
user: user-1
content: 管道可能行吧

user: user-2
content: 我感觉楼主像是在整人

user: user-3
content: 搜一下 format 这可不是玩的，没有人会实验这个，哈哈

user: user-0
content: 我说的是用一个回车完成  system("format e: /q /y");询问 要3个回车

user: user-4
content: 引用 楼主 u013457729 的回复:#include "stdio.h" void main() {  system("format e: /q /y");      }  不要E盘可以试试

user: user-5
content: 什么意思，没看明白！
user-0 提问: 数组元素作为函数参数的问题

回复:
user: user-0
content: 谢谢，改成这样了  void swap(int c, int b) { 	int tmp; 	if (a[c] > a[b]) 	{ 		tmp = a[c]; 		a[c] = a[b]; 		a[b] = tmp; 	}

user: user-1
content: 楼主调用函数的时候会在函数被调用时，临时把你的实参复制到函数中进行操作，最终只是这个复制的副本做了交换。 可以使用楼上的引用，也可以使用指针来交换。 void swap(int* a,int* b){    int* temp=a;    a=b;    b=temp; } 调用的时候： swap(a,b);

user: user-2
content: void swap(int c, int b) {     int tmp;     if (c > b)     {         tmp = c;         c = b;         b = tmp;     }     return; } 这个函数在其内部做了变换，但在main中没有作用，应该为：  void swap(int &a, int &b) {     int temp = 0;     if(a > b) {       temp = a;       a = b;       b = a;     }  }
user-0 提问: 请教给位大神，怎样从txt中读取多个矩阵

回复:
user: user-1
content: //input.txt: //--------------------- //--------------------- //pattern 1 // 0   0 // 1   1 // //pattern 2 // 0   0 // 1   0 // //pattern 3 // 1   1 // 0   0 // //pattern 4 // 1   0 // 0   1 // //pattern 5 // 0   0   1 // 1   0   1 // 0   0   1 // //pattern 6 // 0   1   1 // 1   1   1 // 0   1   0 // // //pattern 7 // 0   1   0 // 1   0   0 // 0   0   1 // //pattern 8 // 0   0   1   1 // 0   1   0   0 // 1   0   0   0 // 1   0   1   0 // //pattern 9 // 0   1   0   1 // 1   0   0   0 // 0   1   1   1 // 1   0   1   0 // //pattern 10 // 1   0   0   0   1   0   1   0   0   0 // 0   0   1   1   0   1   0   1   0   0 // 1   1   1   1   0   1   0   1   1   1 // 0   1   0   0   1   0   0   1   1   0 // 1   1   0   0   0   1   0   0   1   0 // 1   1   1   0   0   0   0   0   0   0 // 1   0   1   0   0   0   1   1   0   0 // 0   1   0   1   1   1   0   1   0   1 // 1   1   0   1   0   0   1   0   0   0 // 1   0   1   0   0   1   1   1   0   0 // //--------------------- //--------------------- #include <stdio.h> #include <string.h> #define MAXMATS 100 #define MAXN 20 #define MAXL 80 static MATS[MAXMATS][MAXN][MAXN]; int MATN[MAXMATS]; int k,j,i,n,r; FILE *f; char ln[MAXL]; char *p; int main() {     f=fopen("input.txt","r");     if (NULL==f) {         printf("Can not open file input.txt!\n");         return 1;     }     k=-1;     while (1) {         if (NULL==fgets(ln,MAXL,f)) break;         if (0==strncmp(ln,"pattern",7)) {             k++;             if (k>=MAXMATS) break;             j=-1;             continue;         }         if ('\n'==ln[0] || '-'==ln[0]) continue;         p=ln;         j++;         if (j<MAXN) {             i=0;             while (1) {                 r=sscanf(p,"%d%n",&MATS[k][j][i],&n);                 if (1==r) {                     p+=n;                     i++;                     if (i>=MAXN) break;                 } else {                     MATN[k]=i;                     break;                 }             }         }     }     fclose(f);     n=k+1;     for (k=0;k<n;k++) {         printf("mat %d\n",k+1);         for (j=0;j<MATN[k];j++) {             for (i=0;i<MATN[k];i++) {                 printf("%2d",MATS[k][j][i]);             }             printf("\n");         }     }     return 0; } //mat 1 // 0 0 // 1 1 //mat 2 // 0 0 // 1 0 //mat 3 // 1 1 // 0 0 //mat 4 // 1 0 // 0 1 //mat 5 // 0 0 1 // 1 0 1 // 0 0 1 //mat 6 // 0 1 1 // 1 1 1 // 0 1 0 //mat 7 // 0 1 0 // 1 0 0 // 0 0 1 //mat 8 // 0 0 1 1 // 0 1 0 0 // 1 0 0 0 // 1 0 1 0 //mat 9 // 0 1 0 1 // 1 0 0 0 // 0 1 1 1 // 1 0 1 0 //mat 10 // 1 0 0 0 1 0 1 0 0 0 // 0 0 1 1 0 1 0 1 0 0 // 1 1 1 1 0 1 0 1 1 1 // 0 1 0 0 1 0 0 1 1 0 // 1 1 0 0 0 1 0 0 1 0 // 1 1 1 0 0 0 0 0 0 0 // 1 0 1 0 0 0 1 1 0 0 // 0 1 0 1 1 1 0 1 0 1 // 1 1 0 1 0 0 1 0 0 0 // 1 0 1 0 0 1 1 1 0 0 //
user-0 提问: 问一个关于int转成char的问题 ，举个例子：int 255；怎么变成unsigned char a[0]={'\xFF'}。请大神们解答！！

回复:
user: user-1
content: 可以先把255转为字符串 sprintf(szBuffer,"%x",a); 转后写一个str_2_hex的函数。 ex. 0x41 0x42 -> 0xAB

user: user-2
content: 整型和字符型是一个意思.

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

user: user-0
content: 引用 1 楼 user-4 的回复:'\xFF' 就是255，仅仅是书写方法不同 o了，谢谢 我懂了

user: user-0
content: 引用 1 楼 user-4 的回复:'\xFF' 就是255，仅仅是书写方法不同 那我要给a[0]赋值'/xff'要怎么办呢？

user: user-4
content: '\xFF' 就是255，仅仅是书写方法不同
user-0 提问: 请教一段C语言代码

回复:
user: user-0
content: 我明白了，一开始就理解错了，感谢大家，结贴了

user: user-0
content: 引用 9 楼 blh 的回复:在编译器工作前，会调用预编译器把文件中的宏定义扩展成为最终代码，扩展是向后，不回溯 然后编译器才开始进行编译 所以预编译结果是 {     printf("hello world!\n"); }  int main() {     int fun();     print(); //这行后的main都被替换成fun     fun();     print();     return 0; }  int fun() {     printf("HA HA, I'm in middle\n");     return 0; }  我懂了，#define main fun并不是两者都能互换，我理解错了

user: user-1
content: 在编译器工作前，会调用预编译器把文件中的宏定义扩展成为最终代码，扩展是向后，不回溯 然后编译器才开始进行编译 所以预编译结果是 {     printf("hello world!\n"); }  int main() {     int fun();     print(); //这行后的main都被替换成fun     fun();     print();     return 0; }  int fun() {     printf("HA HA, I'm in middle\n");     return 0; }

user: user-2
content: 通常的C实现处理代码分为几个阶段：在编译器对代码进行编译前，首先经历了预处理阶段，即处理所有和'#'相关的行。  在经过预处理后，代码变成了：   void print() {     printf("hello world!\n"); }      int main() {     int fun();     print();     #define main fun 这里我才知道两者是可以互相代替的     fun();     print();     return 0; }  int /*main*/fun() // 这里在预处理阶段被替换掉了 {     printf("HA HA, I'm in middle\n");     return 0; }

user: user-0
content: [/quote] 对啊，就是递归调用main()函数，[/quote]  但实际上我执行的结果是  hello world! HA HA, I'm in middle hello world!

user: user-3
content: 错了，好像是递归调用 fun（）函数，弄反了

user: user-3
content: 引用 3 楼 was595 的回复:[quote=引用 1 楼 wwwzys 的回复:] 宏定义部分是“预编译”管理的范畴， 还没到“编译范畴” 预编译过程，会将宏定义给替换掉，所以这段代码经过“预编译”之后 会变成如下的形式  //导入好多的内容 ... void print() {     printf("hello world!\n"); }       int main() {     int main();     print();     main();     print();     return 0; }  以上部分是“编译阶段”编译器能看到的成分，原来里面的“fun”编译器是看不到的  编译器看到的成分岂不是理解为main函数的死循环，在汇编阶段如何把fun函数给调用的？[/quote] 对啊，就是递归调用main()函数，

user: user-0
content: 引用 2 楼 user-4 的回复:预编译后应该是 void print() {     printf("hello world!\n"); }  int main() {     int fun();     print();     fun();     print();     return 0; }  int fun() {     printf("HA HA, I'm in middle\n");     return 0; }  我当时的就是这样解释，但看面试官没点头，而且自己被#define main fun有所误导，我当时在想有没有可能fun被误理解为main函数？

user: user-0
content: 引用 1 楼 wwwzys 的回复:宏定义部分是“预编译”管理的范畴， 还没到“编译范畴” 预编译过程，会将宏定义给替换掉，所以这段代码经过“预编译”之后 会变成如下的形式  //导入好多的内容 ... void print() {     printf("hello world!\n"); }       int main() {     int main();     print();     main();     print();     return 0; }  以上部分是“编译阶段”编译器能看到的成分，原来里面的“fun”编译器是看不到的  编译器看到的成分岂不是理解为main函数的死循环，在汇编阶段如何把fun函数给调用的？

user: user-4
content: 预编译后应该是 void print() {     printf("hello world!\n"); }  int main() {     int fun();     print();     fun();     print();     return 0; }  int fun() {     printf("HA HA, I'm in middle\n");     return 0; }

user: user-3
content: 宏定义部分是“预编译”管理的范畴， 还没到“编译范畴” 预编译过程，会将宏定义给替换掉，所以这段代码经过“预编译”之后 会变成如下的形式  //导入好多的内容 ... void print() {     printf("hello world!\n"); }       int main() {     int main();     print();     main();     print();     return 0; }  以上部分是“编译阶段”编译器能看到的成分，原来里面的“fun”编译器是看不到的
user-0 提问: 有关函数调用该函数问题

回复:
user: user-1
content: while(scanf("%d", &n) != '0'); 错到无法说

user: user-0
content: 3楼的朋友     你说这句，我不理解的是，为什么只定了一个全局变量，为什么会每次循环完，都会把count变成O了？

user: user-0
content: 6楼的朋友，   我是这样理解的 如果执行了if里面的return 返回函数，如果执行return 0；这句的话函数停止！

user: user-2
content: scanf("%d", &n); hansu(n);//把这句删掉试试 printf("函数的次数count = %d", hansu(n)); int hansu(int n) {   count++; n = n - 1;     if(n > 0) return hansu(n);//改为hansu(n); return 0;//改为return count;  一个函数有多个返回值，不报错吗？ }

user: user-3
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-4
content: 递归函数呗，你的打印得等函数调用完阿 打印的次数放在函数体里吧

user: user-5
content: 而且每次循环，是否需要把count重新设置成0呢？

user: user-5
content: printf("函数的次数count = %d", hansu(n)); 这句，你打印出来的是hansu的返回值，应该修改成 printf("函数的次数count = %d", count); 吧？

user: user-5
content: 具体有啥问题要说出来。
user-0 提问: 有关c语言的方向

回复:
user: user-0
content: 怎么没人回答了？up!

user: user-0
content: 引用 2 楼 lovesmiles 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 既然提到网络编程： 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html  我觉得他的问题还没有到大神你说的这种高度，他现在是不想看书又想学技术的那种。[/quote]我是不知道方向，不是不想看书。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:既然提到网络编程： 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html大神，能否具体点？

user: user-1
content: 《tcp/ip详解》

user: user-2
content: 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！

user: user-3
content: 引用 1 楼 zhao4zhong1 的回复:既然提到网络编程： 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html  我觉得他的问题还没有到大神你说的这种高度，他现在是不想看书又想学技术的那种。

user: user-2
content: 既然提到网络编程： 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html
user-0 提问: 求推荐一杯学习算法和数据结构的书

回复:
user: user-1
content: 引用 5 楼 u011641511 的回复:[quote=引用 2 楼 ph_wuwuwu 的回复:] 《数据结构（C语言版）》严蔚敏，清华大学出版社。比较经典，我们上课就是用的这个教材。包括数据结构和排序、搜索等算法。 学好数据结构再学算法，算法推荐《计算机算法设计与分析》，王晓东，电子工业出版社。 想深入学习算法，再看《算法导论》，厚厚的一本。《数据结构（C语言版）》严蔚敏 好像里面都是用伪代码写的吧[/quote] 嗯，基本都是伪代码。我们也是用这本书，不过，我看了郝斌老师的数据结构视频，你若看严蔚敏的这本书，最好同时看看高一凡的数据结构（这本书好像把严书中的代码都实现了）

user: user-2
content: 算法和数据结构都比较多，还是一次学一种吧

user: user-3
content: 《数据结构C++版》清华大学出版社，也不错

user: user-4
content: 引用 5 楼 u011641511 的回复:[quote=引用 2 楼 ph_wuwuwu 的回复:] 《数据结构（C语言版）》严蔚敏，清华大学出版社。比较经典，我们上课就是用的这个教材。包括数据结构和排序、搜索等算法。 学好数据结构再学算法，算法推荐《计算机算法设计与分析》，王晓东，电子工业出版社。 想深入学习算法，再看《算法导论》，厚厚的一本。《数据结构（C语言版）》严蔚敏 好像里面都是用伪代码写的吧[/quote]这是C语言版的，里面都是C语言。

user: user-5
content: 引用 4 楼 u011641511 的回复:引用 1 楼 zhao4zhong1 的回复:《算法精解（C语言实现）》适合新手看吗 个人意见：编程类书籍的价值不是体现在合不合适看；而是体现在能不能照做。

user: user-0
content: 引用 2 楼 ph_wuwuwu 的回复:《数据结构（C语言版）》严蔚敏，清华大学出版社。比较经典，我们上课就是用的这个教材。包括数据结构和排序、搜索等算法。 学好数据结构再学算法，算法推荐《计算机算法设计与分析》，王晓东，电子工业出版社。 想深入学习算法，再看《算法导论》，厚厚的一本。《数据结构（C语言版）》严蔚敏 好像里面都是用伪代码写的吧

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:《算法精解（C语言实现）》适合新手看吗

user: user-5
content: 为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-6
content: 《数据结构（C语言版）》严蔚敏，清华大学出版社。比较经典，我们上课就是用的这个教材。包括数据结构和排序、搜索等算法。 学好数据结构再学算法，算法推荐《计算机算法设计与分析》，王晓东，电子工业出版社。 想深入学习算法，再看《算法导论》，厚厚的一本。

user: user-5
content: 《算法精解（C语言实现）》
user-0 提问: [SWU]输出n个质数

回复:
user: user-1
content: #include<iostream>  #include<cstring>  using namespace std;  int main()  {  bool num[1000001];//num[i]为ture i为质数 memset(num, true, sizeof(num));  for (int i = 2; i < 500000; i++)  if (num[i])  for (int j = 2; i*j <= 1000000; j++)  num[i*j] = false;   return 0;  }

user: user-1
content: #include<iostream> #include<cstring> using namespace std; int main() { 	bool num[1000001];//num[i]为ture i为质数 	memset(num, true, sizeof(num)); 	for (int i = 2; i < 500000; i++) 		if (num[i]) 			for (int j = 2; i*j <= 1000000; j++) 				num[i*j] = false; 		 	return 0; }

user: user-2
content: #include<stdio.h> #include<math.h> int main(){ 	int i,j,n; 	scanf("%d", &n); 	for (i = 2; i <= n; ){ 		for (j = 2; j <= sqrt((double)i); j++){ 			if (i%j==0) 				goto jump; 		} 		printf("%d\n", i); 		jump:++i; 	} }

user: user-3
content: 算到sqrt(n)

user: user-0
content: 补充：题意是输入一个数字n，打印从2开始的n个质数。

user: user-4
content: 是输出n个质数，还是输出1~n的质数啊？
user-0 提问: windows上面写的C在linux上面编译报错

回复:
user: user-1
content: google 一下 ‘Linux 静态库’ 或 ‘Linux 动态库’ 吧

user: user-0
content: 先编译 PCRE 到pcre静态库libpcre.a  请问怎么编译？ 我好菜的。。。

user: user-2
content: 先编译 PCRE 到pcre静态库libpcre.a 再 gcc -o filter filter.c -lpcre -L.

user: user-0
content: [unionmon@bss-wg4 filter]$ gcc -o filter filter.c -lpcre /usr/bin/ld: cannot find -lpcre collect2: ld 返回 1 [unionmon@bss-wg4 filter]$

user: user-0
content: 麻烦大神写个样列，代码有点多啊，这个不能上传附件的吧！

user: user-3
content: gcc -o filter filter.c -lpcre

user: user-0
content: 引用 3 楼 zhxianbin 的回复:缺少 pcre 的库，加入库文件路径 -L<库文件> -l库文件名 库文件路径是什么？库文件又是啥？ 我真的好菜啊。。。

user: user-4
content: gcc -c

user: user-5
content: 不同的平台 依赖是不一样的

user: user-1
content: 缺少 pcre 的库，加入库文件路径 -L<库文件> -l库文件名

user: user-6
content: 我也是菜鸟，不懂这个，只能猜一下，lz你用的是什么编译器啊？这个是不是lz的程序调用了windows环境下的编译器的某些东西？代码量要是不多的话，要不你发下代码，我在linux的虚拟机上试试？

user: user-0
content: 我是C菜鸟，请大神们帮忙分析下，感谢！！！
user-0 提问: 详解sizeof与strlen

回复:
user: user-1
content: strlen按运行时的实际内容判断，从开头遍历内存，找到值为0的位置，计算长度。 sizeof是编译时解决的，给出类型的尺寸，或者固定数组的尺寸。

user: user-2
content: 八楼盒子装球的解释很形象，九楼解释的很详细

user: user-3
content: 楼主你记着一个事就好了.  sizeof是编译期就计算好的, 只有编译的时候能计算出来, 才能使用sizeof. 而strlen是计算字符串中的字符个数, 不包括null结束符.  char a[100] = "abcdef";   因为已经指定了数组大小, sizeof自然能在编译的时候知道它占用内存大小. 即100个char大小. 又因为是char数组, strlen也能计算出其中的字符个数. 即6个字符.  char *p = "abcdef". 因为编译的时候不知道其会指向哪里, sizeof能知道也只是  char* 这个类型的指针占用的内存, 一般指针是4字节. 而strlen它不会管p指向哪里, 只会从p指向的地址开始找null结束符, 计算长度.

user: user-4
content: 引用 6 楼 u013337743 的回复:[quote=引用 2 楼 starytx 的回复:] 	char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p)); lz觉得这个打印什么呢？答案是100 9 4 sizeof计算符计算其中的类型大小，strlen计算字符串中的字符大小（不包括结束符） int s[100],n[]={2837}; printf（"%d %d",sizeof(s),sizeof(n)); 为何输出400与4；[/quote]s是一个int数组，每个int占4字节，4*100=400，n没有署名长度，但初始化了一个元素，所以数组长度就是1,1*4=4.  引用 7 楼 u013337743 的回复:[quote=引用 6 楼 u013337743 的回复:] [quote=引用 2 楼 starytx 的回复:] 	char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p)); lz觉得这个打印什么呢？答案是100 9 4 sizeof计算符计算其中的类型大小，strlen计算字符串中的字符大小（不包括结束符） int s[100],n[]={2837}; printf（"%d %d",sizeof(s),sizeof(n)); 为何输出400与4；[/quote]还有为何第3个输出6，他和第一个有何不同？[/quote]sizeof计算的是目标的空间大小，strlen是一个计算字符串有效字符的大小，比如一个盒子可以装10个球，但是我装了6个，sizeof计算的是盒子的大小，而strlen计算的是里边装的球的大小(多少)

user: user-5
content: sizeof返回数据类型的大小，在编译时由编译器直接按类型替换为常数 strlen是一个函数，从你输入的指针开始读取，一直到读取到0为止返回读取字符的个数 这俩完全不是一个领域内的东西，没有任何相同之处

user: user-6
content: 这辈子不用sizeof都没事。

user: user-0
content: 引用 6 楼 u013337743 的回复:[quote=引用 2 楼 starytx 的回复:] 	char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p)); lz觉得这个打印什么呢？答案是100 9 4 sizeof计算符计算其中的类型大小，strlen计算字符串中的字符大小（不包括结束符） int s[100],n[]={2837}; printf（"%d %d",sizeof(s),sizeof(n)); 为何输出400与4；[/quote]还有为何第3个输出6，他和第一个有何不同？

user: user-0
content: 引用 2 楼 starytx 的回复:	char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p)); lz觉得这个打印什么呢？答案是100 9 4 sizeof计算符计算其中的类型大小，strlen计算字符串中的字符大小（不包括结束符） int s[100],n[]={2837}; printf（"%d %d",sizeof(s),sizeof(n)); 为何输出400与4；

user: user-4
content: 引用 3 楼 huoqingna2332 的回复:sizeof 是编译时就已经完成了，strlen是函数运行到时才去计算多长！  楼上的代码，运行结果应该是 100 ， 6， 4，楼上是不是写错了！  	char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p)); 嗯，6写成9了

user: user-7
content: sizeof 是编译时就已经完成了，strlen是函数运行到时才去计算多长！  楼上的代码，运行结果应该是 100 ， 6， 4，楼上是不是写错了！  	char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p));

user: user-4
content: char str[100] = "abcdef"; 	char *p = str; 	printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p)); lz觉得这个打印什么呢？答案是100 9 4 sizeof计算符计算其中的类型大小，strlen计算字符串中的字符大小（不包括结束符）
user-0 提问: 混合编译问题

回复:
user: user-1
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-1
content: 上部分在另一个include文件中。

user: user-2
content: 单单这样的话，编译都不会通过的，你查查看是否哪个头文件中包含了前半部分。  引用 楼主 ysh512 的回复:#ifdef __cplusplus extern "C" { #endif 函数声明； 函数声明； #ifdef __cplusplus } #endif 正常情况应该是这样的 但是今天看一个开源程序的代码 确实这样 #ifdef __cplusplus } #endif 只有下部分 没有上部分 觉得不奇怪 实在不解啊

user: user-1
content: 引用 6 楼 ysh512 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 上部分在另一个include文件中。  源代码有错误，我在文件开头加了上半部分 编译顺利通过[/quote] 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:上部分在另一个include文件中。  源代码有错误，我在文件开头加了上半部分 编译顺利通过

user: user-3
content: 引用 4 楼 ysh512 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 上部分在另一个include文件中。 上部分没有在另一个include文件中[/quote] 那你说去哪了

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:上部分在另一个include文件中。 上部分没有在另一个include文件中
user-0 提问: 这个函数为什么会整型溢出？

回复:
user: user-1
content: long long TotalPrice(long price,long number) {     return (long long)price*(long long)number; }

user: user-2
content: 类型转换问题吧 因为两个数都是long所以计算结果是long类型的 所以如果计算的值超出了肯定溢出 但是(long long)price*number 实际将price转为了longlong类型 所以计算时类型会进行提升都以long long类型进行

user: user-3
content: long long TotalPrice(long price,long number) { 	return (long long)price*number; } 这样会不会好一些

user: user-4
content: return 1ll*price*number;

user: user-5
content: 虽然你函数返回值是long long 但是你在返回之前就已经溢出了啊

user: user-6
content: 楼主你试试这个   long long TotalPrice(long price,long number) { 	return (long long)(price*number); }
user-0 提问: 嵌套循环的执行顺序

回复:
user: user-1
content: 引用 楼主 u014028610 的回复:for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ for(k=1;k<=j;k++)    x +=delta; } 请问三层for循环的执行顺序是怎样的？详解！！！ 让程序自己说话： 在最内层，加一个输出 printf("%d-%d-%d\n",i, j, k); 不就能够看出循环的每一步中，各循环变量的变化规律？ 不必运用debugger手段. 现在有些过了，从不知道”调试“到什么问题都要”调试“。 许多时候，设计出让代码自己说话的程序也是一种技能，这种技能与debugger技能相辅相成才是正理。

user: user-2
content: debugger跟一遍。

user: user-3
content: for(;;){ for(;;){ for(;;){ X++; } } } 循环的次数是for的3次方

user: user-4
content: 引用 9 楼 lm_whales 的回复:循环语句，分两个部分。 一部分是循环控制语句。 一部分是循环体。  for 循环： 循环控制语句有三个表达式 第一个表达式， 只执行一次，在循环所有其他代码执行前执行。 第二个表达式，每次循环体执行前，先执行，并与比较0（false） 比较非0 执行循环， 是0不执行结束循环 第三个表达式，每次循环体执行后执行一次。  while 循环：  循环控制语句只有一个表达式 每次循环体执行前先执行，并把结果和0（false） 比较，非0执行循环，是0  不执行结束循环。  do while循环： 只有一个表达式 ，先执行一遍循环体，然后执行表达式，并把结果和0（false） 比较，非0 执行循环，是0 不执行结束循环。  嵌套循环的内存循环，只是循环体中的一个语句。 执行顺序是：和外层循环的其他语句一起，按照顺序执行。  for 循环：while 循环： 先执行条件表达式，如果结果非0，执行循环体。 do while 循环，先执行循环体，然后执行条件表达式，如果结果非0，继续执行循环体。  条件问题写颠倒了，抱歉

user: user-5
content: 引用 1 楼 u012586257 的回复:i=1,j=1,k=1 i=2,j=1,k=1     j=2,k=1,k=2 i=3,j=1,k=1     j=2,k=1,k=2     j=3,k=1,k=2,k=3 i=4,j=1,k=1     j=2,k=1,k=2     j=3,k=1,k=2,k=3     j=4,k=1,k=2,k=3,k=4 . . .

user: user-6
content: for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

user: user-4
content: 只要知道，哪一部分是循环体，哪一部分是循环控制语句。 就能够知道循环如何执行的了。 C，C++语言中，代码执行的是表达式和流程控制代码，而不是一个完整的语句。 语句只是一种语言成分，不是执行的最小单元。

user: user-4
content: 嵌套循环的内层循环，只是循环体中的一个语句。  循环，还有两个跳转语句 break,continue 可以写在循环体内，控制循环流程  break; 此后循环体的代码，（包括for 的第三个表达式）不再执行，跳出这一层循环的执行 continue ;跳过这一轮循环的循环体continue ;后面的其他代码的执行，转入下一轮循环的执行。 对于 for， 直接执行第三个表达式（可称为自增表达式），执行完成后， 执行第二个表达式（条件表达式），开始新一轮循环的执行。  对于  while(..)...; do ...while();  直接执行， 循环控制语句的表达式（条件表达式）  循环每一轮的重新开始，都是从执行条件表达式开始的。

user: user-4
content: 循环语句，分两个部分。 一部分是循环控制语句。 一部分是循环体。  for 循环： 循环控制语句有三个表达式 第一个表达式， 只执行一次，在循环所有其他代码执行前执行。 第二个表达式，每次循环体执行前，先执行，并与比较0（false） 比较是0 执行循环，非0 不执行结束循环 第三个表达式，每次循环体执行后执行一次。  while 循环：  循环控制语句只有一个表达式 每次循环体执行前先执行，并把结果和0（false） 比较，是0 执行循环，非0 不执行结束循环。  do while循环： 只有一个表达式 ，先执行一遍循环体，然后执行表达式，并把结果和0（false） 比较，是0 执行循环，非0 不执行结束循环。  嵌套循环的内存循环，只是循环体中的一个语句。 执行顺序是：和外层循环的其他语句一起，按照顺序执行。  for 循环：while 循环： 先执行条件表达式，如果结果非0，执行循环体。 do while 循环，先执行循环体，然后执行条件表达式，如果结果非0，继续执行循环体。

user: user-6
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-0
content: 谢谢了，一楼的答案很清楚。。。

user: user-7
content: 一楼是正确的

user: user-8
content: 少一个大括号  这个。。。lz你应该能看懂一个for循环吧！建议自己在纸上一步步写出，这样的问题，仔细一点儿，花些时间，自己是可以看出的

user: user-9
content: x +=delta; 被执行了 1+ 1+2+ 1+2+3+ ... 1+2+3+...+n 次

user: user-10
content: 每一次执行k=？都会执行一次 x+=delta

user: user-11
content: 原来不是执行最里面的一句啊~

user: user-10
content: i=1,j=1,k=1 i=2,j=1,k=1     j=2,k=1,k=2 i=3,j=1,k=1     j=2,k=1,k=2     j=3,k=1,k=2,k=3 i=4,j=1,k=1     j=2,k=1,k=2     j=3,k=1,k=2,k=3     j=4,k=1,k=2,k=3,k=4 . . .
user-0 提问: return ;竟然返回18！！！

回复:
user: user-0
content: 引用 2 楼 blh 的回复:函数的返回值被放在eax寄存器中，如果return后面跟内容，就把内容放到eax中， 否则，当前eax是什么就返回什么，你的代码中执行fun的时候，eax内容刚好是18 -- printf("sizeof(&a[0]) = %d\n", sizeof(&a[0]));这行返回值   应该是你说的这么回事！！

user: user-0
content: 引用 8 楼 zuiboyi 的回复:你丫报错了，返回了寄存器的数字吧 用linux gcc编译无警告无error

user: user-0
content: 引用 1 楼 jerry_dqh 的回复:你这个程序能编译过吗 即使能编译过，这个18也不是一定的，不确定的行为。  我是用GCC编译的！

user: user-1
content: vc 下把fun定义改成： int fun (void) { 		int a; 		__asm{ 			xor eax, eax; 		}         return ; } 不就返回0了

user: user-2
content: 你丫报错了，返回了寄存器的数字吧

user: user-3
content: int fun (void) {         return ; }  没有返回值，在vs里编译不过

user: user-4
content: 引用 楼主 woodpecker12 的回复:为什么有"return ;" will return: 18  18这是怎么来的？？？  说的是错误提示里面有18么？

user: user-5
content: VC中提示错误…………你怎么通过编译的？？？

user: user-6
content: debug下可能是0，relese就可能随机了。或许你内存里这个地址就是18.

user: user-7
content: 这个是不确定行为，就像定义一个变量却不赋值一样会出现奇怪的值，看不同的编译器怎么处理了。

user: user-8
content: 函数的返回值被放在eax寄存器中，如果return后面跟内容，就把内容放到eax中， 否则，当前eax是什么就返回什么，你的代码中执行fun的时候，eax内容刚好是18 -- printf("sizeof(&a[0]) = %d\n", sizeof(&a[0]));这行返回值

user: user-9
content: 你这个程序能编译过吗 即使能编译过，这个18也不是一定的，不确定的行为。
user-0 提问: 刚开始学UIP,想问下，uip作为tcp服务器响应2个以上的客户端，但是TCP 的发送、接收缓冲区是同一个。。该怎么弄啊？要从哪里入手啊？非常感谢！

回复:
user: user-1
content: 楼主咋解决了，提供些思路？

user: user-2
content: 楼主你是怎么解决的

user: user-3
content: 引用 5 楼 hbuxiaofei 的回复:引用 4 楼 niceworkteam 的回复:楼主，是 UDP吗？ 我写过一个 TCP UDP通信的小例子，楼主要代码么？问题已经解决了。uip协议栈是最多可支持40个连接，支持多个连接的时候应用层设计是关键，应用层没设计好。。。  你好，我现在也遇到这个问题，多个客户端连接的时候，客户端1发出来的数据经过服务器发出来后，被客户端2接收了，怎么解决呢，谢谢！

user: user-4
content: 楼主，是 UDP吗？ 我写过一个 TCP UDP通信的小例子，楼主要代码么？

user: user-0
content: 引用 4 楼 niceworkteam 的回复:楼主，是 UDP吗？ 我写过一个 TCP UDP通信的小例子，楼主要代码么？问题已经解决了。uip协议栈是最多可支持40个连接，支持多个连接的时候应用层设计是关键，应用层没设计好。。。

user: user-5
content: 这有很多socket例子，你看看： http://download.csdn.net/detail/geoff08zhang/4571358

user: user-0
content: 引用 1 楼 user-6 的回复:应该读与写各自使用一个buffer。能详细介绍一下吗？？？还有UIP是怎么处理发送、与接收数据的啊？？对全局变量在2个以上链接上该怎么处理？？

user: user-6
content: 应该读与写各自使用一个buffer。
user-0 提问: 运行时出现1.#INF的问题，请帮忙解答，急！谢谢！！！

回复:
user: user-1
content: 楼上的意思是后面求出来的数小数点后面的数太小，超出了精确度范围，所以输不出来

user: user-0
content: 非常感谢！！！

user: user-0
content: 没明白，请详细吧

user: user-2
content: 因为N/(i+1)是一个整形运算，得出来的数要抛去小数部分，最后几个数求的时候，数据太小导致超出精度范围而输出1.#INF00

user: user-2
content: #include "stdio.h" #include "math.h" #include "string.h" void main(){ 	int i; 	int N = 11;  	double w[10]; 	int H = 5;   /*有义波高*/ 	double B;  	B = 3.11 / (H*H);  	for (i = 0; i<10; i++){ 		w[i] = pow((B / log(double(N) / (i + 1))), 0.25); 	} 	for (i = 0; i<10; i++){ 		printf("%f\n", w[i]);   //最后一个值大于1 	} }
user-0 提问: C语言字符数组初始化

回复:
user: user-1
content: 这个不叫初始化，去查一下sprintf函数看看。。。这些问题要自己慢慢去探索

user: user-2
content: char str[5] = "test"; 如此更好

user: user-3
content: 引用 3 楼 zhao4zhong1 的回复:str和secBuf不是一回事！ char str[5]; sprintf(str, "%.4s", "test");+1

user: user-4
content: 引用 2 楼 beefcattlexiaoyang 的回复:[quote=引用 1 楼 u013573183 的回复:] 可以这样操作,但这个不叫初始化,而是叫赋值  初始化的意思是在创建变量的时候同时给他的值  与你这个赋值的区别是  他首先创建变量然后给予一个值,然后再执行你这个赋值表达式再次赋值  会引起内存泄漏的问题么？[/quote] 你先搞清楚什么叫做内存泄露好吗？

user: user-5
content: secBuf是什么，你这代码写的不全。

user: user-6
content: 不会内存泄露，这又没有超界。

user: user-7
content: secBuf是str吗？

user: user-8
content: str和secBuf不是一回事！ char str[5]; sprintf(str, "%.4s", "test");

user: user-0
content: 引用 1 楼 u013573183 的回复:可以这样操作,但这个不叫初始化,而是叫赋值  初始化的意思是在创建变量的时候同时给他的值  与你这个赋值的区别是  他首先创建变量然后给予一个值,然后再执行你这个赋值表达式再次赋值  会引起内存泄漏的问题么？

user: user-9
content: 可以这样操作,但这个不叫初始化,而是叫赋值  初始化的意思是在创建变量的时候同时给他的值  与你这个赋值的区别是  他首先创建变量然后给予一个值,然后再执行你这个赋值表达式再次赋值
user-0 提问: ZJU_PAT 1074. Reversing Linked List (25)求指点

回复:
user: user-1
content: 题主你是第几个测试点没有过去？

user: user-0
content: 引用 2 楼 user-2 的回复:LZ程序只对第1个满足长度要求的字串进行了逆序,没有对剩下的其他满足长度要求的子串进行逆序.请试以下2组输入:  00100 6 3 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218  00100 6 2 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218  题目没看清楚,谢谢帮助

user: user-2
content: LZ程序只对第1个满足长度要求的字串进行了逆序,没有对剩下的其他满足长度要求的子串进行逆序.请试以下2组输入:  00100 6 3 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218  00100 6 2 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218

user: user-0
content: mayday mayday
user-0 提问: [SWU]c语言阶乘问题

回复:
user: user-1
content: 搞不懂，现在的程序怎么都那么多空行。 #include <stdio.h>  int jie(int n); int main(){ 	int n, k, r; 	for (n = 1; n <= 10; n++){ 		for (k = 1; k <= n; k++){ 			r = jie(n) / (jie(k)*jie(n - k)); 			printf("%d ", r); 		} 		printf("\n"); 	} } int jie(int n){ 	int a = 1;   //int a; 	for (; n >0; n--)   // for (; n<=1; n--) 		a = a*n; 	return a; }  给你个完整的杨辉三角修改版本： #include <stdio.h>  int jie(int n); int main(){ 	int n, k, r; 	for (n = 0; n <= 10; n++){ 		for (k = 0; k <= n; k++){ 			r = jie(n) / (jie(k)*jie(n - k)); 			printf("%d ", r); 		} 		printf("\n"); 	} } int jie(int n){ 	int a = 1;   //int a; 	for (; n >0; n--)   // for (; n<=1; n--) 		a = a*n; 	return a; }

user: user-2
content: 可以考虑递归。。还有。。函数名变量名什么的出现拼音太丑了吧。。。

user: user-3
content: for (; n<=1; n--)     a = a*n;    return a;  这里n<=1，你想想后面会执行不？
user-0 提问: 请教一下各位学长学姐们一点单向链表的问题，求大家帮助，谢谢大家！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！

回复:
user: user-0
content: 解决了。。是少写了个=,脑子短路，傻逼了一下。。哈哈哈哈。谢谢啊！！

user: user-1
content: 就不细看了，  “if(p1=head)却是真的”，这是赋值语句，或“==”试试
user-0 提问: 数组类型的指针，为什么解引用相同

回复:
user: user-1
content: 理解指针和数组的区别比较重要，你这里的arrtype*是指向[2][2]数组的指针，这个指针+1相当于移动一个[2][2]数组的距离，即4个int。
user-0 提问: 程序如何执行完成，然后结束？谢谢了

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> int main(){ int c,n1; n1=0; while((c=getchar())!=EOF) if(c=='\n') ++n1; printf("%d\n",n1);  system("pause"); }  ctrl+C

user: user-2
content: 在c中换行是字符的（好像是\0,还是\n）,直接统计这个字符的次数不就行了。else 退出。 有错请指出

user: user-2
content: 以前做过忘记了，好像是2个enter就输出。有错请指出

user: user-3
content: 引用 10 楼 zhao4zhong1 的回复:Windows：Enter,Ctrl+Z,Enter Linux：Ctrl+D 说实话，lz的问题我不会，不过，赵老师说的是对的，我刚才用VS2012和VC6.0都试过了，这种方法行

user: user-4
content: Windows：Enter,Ctrl+Z,Enter Linux：Ctrl+D

user: user-0
content: 还是我编写的程序有什么错误吗？ ctrl+z\c\d  有的就直接结束了，都看不了输出的结果——统计的输入行数，有什么其他的办法吗？

user: user-5
content: Ctrl+D

user: user-6
content: CTRL+C

user: user-0
content: 我用的是cfree,但是不行啊 按ctrl+z显示的就是^z呀？

user: user-7
content: ctrl + z

user: user-0
content: 这个程序是用来统计输入的行数的，希望可以得到解答~~
user-0 提问: 老师叫我们用禁忌搜索算法求运送物资问题，但压根就找不到关于禁忌搜索的详细资料，有大神方便提供吗？

回复:
user: user-1
content: 引用 3 楼 FancyMouse 的回复:taboo search这玩意挺老的了，效果也不怎么行，还是和局部搜索一样挺容易陷入局部最优点的。 高手，原来真有这个东西，仔细研究一下。

user: user-0
content: 他就是要我们用这个，又没讲清楚禁忌搜索算法是什么

user: user-2
content: taboo search这玩意挺老的了，效果也不怎么行，还是和局部搜索一样挺容易陷入局部最优点的。

user: user-3
content: 禁忌。。。你们老师的爱好是二次元么

user: user-1
content: 近径搜索？最短路径？
user-0 提问: 编译出错

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:编译出错：根据编译错误提示修改源代码。如果确定不懂编译错误提示， “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。”  链接出错： 将错误信息中出现的标识符放在google里面搜一下，看其在哪个.lib中，然后在本地硬盘上搜索该.lib,如果没有，在网上搜索相关库或模块下载安装，然后将其所在目录填写到“附加依赖库所在目录”中，将其名字添加到“附加依赖库”中，重新连接。 VC6： 工程、设置、Link、分类：Input、附加库路径：填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类：Input、对象/库模块：填写附加依赖库的名字.lib 空格间隔多项 VS20xx： 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项  运行出错： 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。恩恩，看来我还是毅力不够，谢谢老师！

user: user-1
content: 编译出错：根据编译错误提示修改源代码。如果确定不懂编译错误提示， “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。”  链接出错： 将错误信息中出现的标识符放在google里面搜一下，看其在哪个.lib中，然后在本地硬盘上搜索该.lib,如果没有，在网上搜索相关库或模块下载安装，然后将其所在目录填写到“附加依赖库所在目录”中，将其名字添加到“附加依赖库”中，重新连接。 VC6： 工程、设置、Link、分类：Input、附加库路径：填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类：Input、对象/库模块：填写附加依赖库的名字.lib 空格间隔多项 VS20xx： 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项  运行出错： 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-0
content: 引用 楼主 u012523688 的回复:问题描述 某涉密单位下发了某种票据，并要在年终全部收回。 每张票据有唯一的ID号。全年所有票据的ID号是连续的，但ID的开始数码是随机选定的。 因为工作人员疏忽，在录入ID号的时候发生了一处错误，造成了某个ID断号，另外一个ID重号。 你的任务是通过编程，找出断号的ID和重号的ID。 假设断号不可能发生在最大和最小号。 输入格式 要求程序首先输入一个整数N(N<100)表示后面数据行数。 接着读入N行数据。 每行数据长度不等，是用空格分开的若干个（不大于100个）正整数（不大于100000），请注意行内和行末可能有多余的空格，你的程序需要能处理这些空格。 每个整数代表一个ID号。 输出格式 要求程序输出1行，含两个整数m n，用空格分隔。 其中，m表示断号ID，n表示重号ID 样例输入1 2 5 6 8 11 9  10 12 9 样例输出1 7 9 样例输入2 6 164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196 172 189 127 107 112 192 103 131 133 169 158  128 102 110 148 139 157 140 195 197 185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190 149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188 113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119 样例输出2 105 120#include<stdio.h> int main() { 	int N,m,n,i,j,k; 	int a[100][100],num[10000]; 	 	//输入数  	scanf("%d",&N); 	for( i = 0; i < N; i++ )  	{ 		for( j = 0; j < 100; j++ ) 		{ 			scanf("%d",&a[i][j]);  		}	 		printf("\n"); 	}  	 	//把输入的所有值删除空格后加入至一个新的一维数组中  	for( i = 0,j = 0,k = 0; i < N; i++ ) 	{ 		while( j < 100 ) 		{ 			if( a[i][j] != ' ' && a[i][j] != '\0' ) 			{	 			 	num[k++] = a[i][j]; 			} 			j++; 		} 	} 	 	//对新的一维数组从小到大进行排序  	for( i = 0; i < k; i++ ) 	{ 		for( j = k - 1; j > i; j-- ) 		{ 			int temp; 			if( num[k] > num[k+1] ) 			{ 				temp = num[k]; 				num[k+1] = num[k]; 				num[k] = temp;	 			} 		}	 	} 	 	//查找匹配 	for( i = 0; i < k; i++ )  	{		 		if( num[k+1] != num[k] + 1 ) 		{ 			m = num[k] + 1;	 		}			 		else if( num[k+1] = num[k] + 1) 		{ 			n = num[k+1];	 		} 	} 	printf(" %d %d\n",m,n); 	return 0; }  这是自己敲的代码，小渣渣一枚，语法基础不过关，不知道输入数据时哪里出错了，导致运行时无法满足题意。求大神赐教！
user-0 提问: linux两个数交换为什么有警告，谢谢解答

回复:
user: user-1
content: swap(buf[k],buf[j]); ==》 swap(&buf[k], &buf[j]);

user: user-2
content: 还是没有取地址操作阿！

user: user-0
content: void sort(int n,int *buf){ int i,j,k,temp; for(i=0;i<n-1;++i){ temp=buf[i]; k=i; for(j=1;j<n;++j){ if(buf[j]<buf[k]){ temp=buf[j]; k=j; } } if(k=i)continue; } swap(buf[k],buf[j]);  } 又出现那个错误了，求解啊

user: user-0
content: OK，知道原因了，谢谢各位，特别是2楼的，我忘记取地址了

user: user-3
content: #include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-1
content: 编译器提示传给swap()的第一个参数类型不匹配。 可以贴出调用swap()的代码。
user-0 提问: 新手求解啊，急急急！！！

回复:
user: user-1
content: 楼上都是正解，后面已经重新赋值，所以前边的自然没用了

user: user-2
content: 可以； i= 1； i= 2； i= 3； i= 4； i= 0；最后i = 0

user: user-3
content: i = 1; for(i = 0;i < 10;i++)  for里面又给i赋值了 所以前面的i=1毫无用处

user: user-4
content: i可以去除，没影响。if(a[i]%d = 1)有误少了个“=”，应改为if(a[i]%d == 1)

user: user-5
content: 局部看，没什么实际用！后面有重新赋值操作！

user: user-6
content: 可以删除，就是废代码

user: user-7
content: 完全可以。 因为下面for(i = 0;i < 10;i++) 又让i=0了。
user-0 提问: 函数参数内存对齐的问题

回复:
user: user-1
content: 参数传递不受你内存对齐参数设置影响，可以看下栈的结构

user: user-2
content: #include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 // //A1.a 0 //A1.b 4 //A1.c 17 // //A2.a 0 //A2.b 4 //A2.c 18 // //A4.a 0 //A4.b 4 //A4.c 20 // //A8.a 0 //A8.b 4 //A8.c 24 // //A16.a 0 //A16.b 4 //A16.c 24 // //

user: user-3
content: int Test(char a, short b, int c);  这个函数参数在栈中总共占用几个字节。 答：3个参数占据 3 * sizeof(int) 个字节。    char, short均在传参时提升为整型。  个人意见，仅供参考。
user-0 提问: 二维数组到一维数组的转换

回复:
user: user-0
content: 引用 2 楼 a510579741 的回复: for(i = 0 ,j = 0; i < N*100 ; i++) {     if(a[0][i]!=' '&&a[0][i]!= '\0')     {           b[j] = a[0][i];           j++;     } }哈哈，好麻利的手脚，佩服阁下的如此积极的动手能力。

user: user-0
content: 引用 1 楼 hzt19901012 的回复:楼主的意思是二维数组不是全都有数值的吧，你用两层for循环加内嵌一个if判断不就可以完全遍历二维数组吗？恩，对奥，谢谢指点，我给忘了，这块不太熟悉。

user: user-1
content: 我那样做效率不高 最好定义一个变量 int n = N*100 i<n

user: user-1
content: for(i = 0 ,j = 0; i < N*100 ; i++) {     if(a[0][i]!=' '&&a[0][i]!= '\0')     {           b[j] = a[0][i];           j++;     } }

user: user-2
content: 楼主的意思是二维数组不是全都有数值的吧，你用两层for循环加内嵌一个if判断不就可以完全遍历二维数组吗？
user-0 提问: 使用extern调用函数的疑问

回复:
user: user-1
content: 引用 7 楼 zhfcmx1 的回复:既然是fun.c没有被编译，那需要如何修改呢？  要把fun.c加到工程里面吧

user: user-0
content: 既然在1.h中已经申明了函数为extern，那就说明该函数可以被其他文件引用。为啥会报这个错呢？

user: user-0
content: 既然是fun.c没有被编译，那需要如何修改呢？

user: user-2
content: fun.c not compiled

user: user-3
content: 引用 4 楼 zhfcmx1 的回复:既然在1.h中已经申明了函数为extern，那就说明该函数可以被其他文件引用。为啥会报这个错呢？ 首先，在1.h中声明有错误： extern print_para(int para); ==》 extern void print_para(int para); 其次，可能fun.c没有被编译或者编译后没有被链接。

user: user-3
content: 引用 2 楼 zhfcmx1 的回复:目的就是想通过1.h中定义extern的函数，然后在main函数中通过1.h来调用print_para  明白LZ的意思。不过现在有编译错误，所以先确定错误在哪里。

user: user-0
content: 目的就是想通过1.h中定义extern的函数，然后在main函数中通过1.h来调用print_para

user: user-3
content: extern print_para(int para); 这里写错了吧？ extern void print_para(int para);  可以修改test.c中的语句： #include "1.h" 改成 #include "fun.c"  然后重新编译，看还会不会有问题。怀疑fun.c没有被编译或者没有被链接进去。  个人建议，仅供参考。
user-0 提问: 为什么会出现segmentation fault （段错误）

回复:
user: user-1
content: 引用 2 楼 u013702063 的回复:str 使用之前先分配内存  str =(char)malloc(10*(char)); //应该是这样 和这个没关系。

user: user-1
content: segmentation fault通常是内存非法访问，比如越过程序的界。 你的程序里，如果第一种，数组在函数栈上，用字符串常量向数组赋值，之后你操作在函数栈上的空间做reverse。 如果是第二种，你的指针指向常量，之后reverse操作的是常量区域的空间，那里是不可写的。现代操作系统会强制这一点。

user: user-2
content: http://blog.csdn.net/roverx/article/details/4543167

user: user-3
content: 看下面例子(linux)，"abcde"是字符串常量，被分配到只读数据区 对于char *s1 = "abcde"，仅仅把 "abcde"的地址赋值给s1，s1指向的数据区依旧是只读的，如果修改就会segement error 对于char s2[] = "abcde"：s2是在fun()的堆栈上分配空间，然后把"abcde"内容赋值到s2的空间，这个空间是可读写的，修改所以没有问题  void fun() {         char *s1 = "abcde";         char s2[] = "abcde"; }  ==》         .file   "demo.c"         .section        .rodata .LC0:         .string "abcde"         .text .globl fun         .type   fun, @function fun: .LFB2:         pushq   %rbp .LCFI0:         movq    %rsp, %rbp .LCFI1:         //char *s1 = "abcde";         movq    $.LC0, -8(%rbp)          //char s2[] = "abcde";         movl    .LC0(%rip), %eax         movl    %eax, -16(%rbp)         movzwl  .LC0+4(%rip), %eax         movw    %ax, -12(%rbp)         leave         ret

user: user-4
content: 呵呵，普遍会遭遇的问题，以后，就知道了

user: user-5
content: 学习了 还真没注意过这个问题

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

user: user-7
content: 二楼正解，详细解释为“abcdefg“存储的位置是常量区，对这块内存你是没有写权限的，但是你用str索引了它，企图修改它，所以报错！

user: user-8
content: str 使用之前先分配内存  str =(char)malloc(10*(char)); //应该是这样

user: user-9
content: str="abcde"这样赋值的话，str相当于常量指针，其指向的内容不能被修改，所以会段错误。  引用 楼主 u012514171 的回复:int main(){ //char str[128]; //gets(str); //char buf[]="abcdefg"; char *str; str="abcde"; reverse(str); printf("%s\n",str); return 0; } 为什么我用char buf[];时不时不出现段错误，而用char *str时出现段错误啊，
user-0 提问: 关于线性表学生系统的问题 。。。为什么程序全都执行完后（是全执行了 且信息也都查到了）会显示程序错误？

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

user: user-0
content: codeblocks  int class是定义班级啊整型，肯定是可以的啊，   我运行完之后会停顿一下结果都是对的  就是最后停顿后就显示程序运行错误  不知道是怎么回事，是不是最后输出有问题啊  能帮我解决一下吗  谢谢你了

user: user-2
content: 这个你啥编译器？  int class;这个也能编译过？ 反正用VC6运行后是正常的,要说程序的问题那是蛮多的。
user-0 提问: 编写一个makefile 遍历各个子文件夹

回复:
user: user-0
content: 引用 4 楼 tuzhutuzhu 的回复:[quote=引用 2 楼 nanali2088 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 搜“跟我一起写makefile”您怎么哪块都说这句话啊？ 我已经看了那个文档了[/quote] 你既然看了，好歹自己写一个。哪怕是不对，让别人给你纠正也行啊[/quote]  好吧 我写一个

user: user-1
content: 引用 2 楼 nanali2088 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 搜“跟我一起写makefile”您怎么哪块都说这句话啊？ 我已经看了那个文档了[/quote] 你既然看了，好歹自己写一个。哪怕是不对，让别人给你纠正也行啊

user: user-2
content: 引用 2 楼 nanali2088 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 搜“跟我一起写makefile”您怎么哪块都说这句话啊？ 我已经看了那个文档了[/quote] 看了≠懂了≠会用了

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:搜“跟我一起写makefile”您怎么哪块都说这句话啊？ 我已经看了那个文档了

user: user-2
content: 搜“跟我一起写makefile”
user-0 提问: root用户，前几次编译执行都OK，中间死循环了一回，突然提示权限不够，什么情况？？

回复:
user: user-0
content: 我找到问题了，结贴

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:kill -s 9 28654 试试看？老师让我用kill -9杀死了，果然还是那个死循环的问题，进程没关掉，没法进行再次编译

user: user-1
content: killall mpp.exec

user: user-2
content: kill -s 9 28654 试试看？

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:那就杀掉试试。大哥，关键是我不知道怎么玩kill啊, 我应该输入什么才能杀掉这个进程，是KILL 加它的PID对应数字还是CMD对应的东西啊

user: user-2
content: 那就杀掉试试。

user: user-0
content: ps -a出来的，我是不是得杀掉第一个那个可执行进程啊，就是上次编译它出现死循环了

user: user-0
content: 蛋疼啊，卡死在这儿了，根本没办法进行下去了，坐等解答
user-0 提问: [SWU]矩阵中的数怎样对齐输出

回复:
user: user-1
content: 请问楼上，你的一个动态大小的二维数组不应该在堆上分配空间吗？是何意思呢？能否私聊详解？

user: user-2
content: 楼主的int a[m][n];可以直接编译通过？一个动态大小的二维数组不应该在堆上分配空间吗？ 说楼主的问题，可以使用1楼设置输出宽度的方法，也可以用%d\t来进行制表对其。 printf("%6d", a[i][j]); printf("%d\t",a[i][j]);

user: user-3
content: 同意三楼的说法 最近一直在学习

user: user-4
content: 引用 1 楼 u013256573 的回复:把printf("%d", a[i][j])，改成printf("%6d", a[i][j])试一下  应该好了 我觉得应该对

user: user-5
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-6
content: 把printf("%d", a[i][j])，改成printf("%6d", a[i][j])试一下  应该好了
user-0 提问: 【swu】关于许多年前的杨辉三角

回复:
user: user-1
content: #include <stdio.h> #define MAXN 10 unsigned __int64 y[MAXN][MAXN]; int i,j; char s[60]; void main() {     printf("%30s\n","1  ");     printf("%33s\n","1     1  ");     y[1][0]=1ui64;y[1][1]=1ui64;     for (i=2;i<MAXN;i++) {         y[i][0]=1ui64;sprintf(s,"1  ");         for (j=1;j<=i-1;j++) {             y[i][j]=y[i-1][j-1]+y[i-1][j];             sprintf(s,"%s   %-3I64u",s,y[i][j]);         }         y[i][i]=1ui64;sprintf(s,"%s   1  ",s);         printf("%*s\n",30+i*3,s);     } } //                           1 //                        1     1 //                     1     2     1 //                  1     3     3     1 //               1     4     6     4     1 //            1     5     10    10    5     1 //         1     6     15    20    15    6     1 //      1     7     21    35    35    21    7     1 //   1     8     28    56    70    56    28    8     1 //1     9     36    84    126   126   84    36    9     1  //按如下格式打印杨辉三角形的前MAXN行。 //  1 //  1 1 //  1 2 1 //  1 3 3 1 //  1 4 6 4 1 //  1 5 10 10 5 1 #include <stdio.h> #define MAXN 68 unsigned __int64 y[MAXN][MAXN]; int i,j; void main() {     printf("1\n");     printf("1 1\n");     y[1][0]=1ui64;y[1][1]=1ui64;     for (i=2;i<MAXN;i++) {         y[i][0]=1ui64;printf("1 ");         for (j=1;j<=i-1;j++) {             y[i][j]=y[i-1][j-1]+y[i-1][j];             printf("%I64u ",y[i][j]);         }         y[i][i]=1ui64;printf("1\n");     } } //1 //1 1 //1 2 1 //1 3 3 1 //1 4 6 4 1 //1 5 10 10 5 1 //1 6 15 20 15 6 1 //1 7 21 35 35 21 7 1 //1 8 28 56 70 56 28 8 1 //1 9 36 84 126 126 84 36 9 1 //... //1 67 2211 47905 766480 9657648 99795696 869648208 6522361560 42757703560 247994680648 1285063345176 5996962277488 25371763481680 97862516286480 345780890878896 1123787895356412 3371363686069236 9364899127970100 24151581961607100 57963796707857040 129728497393775280 271250494550621040 530707489338171600 972963730453314600 1673497616379701112 2703342303382594104 4105075349580976232 5864393356544251760 7886597962249166160 9989690752182277136 11923179284862717872 13413576695470557606 14226520737620288370 14226520737620288370 13413576695470557606 11923179284862717872 9989690752182277136 7886597962249166160 5864393356544251760 4105075349580976232 2703342303382594104 1673497616379701112 972963730453314600 530707489338171600 271250494550621040 129728497393775280 57963796707857040 24151581961607100 9364899127970100 3371363686069236 1123787895356412 345780890878896 97862516286480 25371763481680 5996962277488 1285063345176 247994680648 42757703560 6522361560 869648208 99795696 9657648 766480 47905 2211 67 1
user-0 提问: [SWU]c语言Segmentation fault

回复:
user: user-1
content: 问题已解决．．

user: user-1
content: char i = '0'  定义的是一个字符，格式符要用%c; %s是对应字符串的

user: user-2
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-3
content: printf("%s %d",i,a);  其中是%c啊！！！！

user: user-4
content: 引用 楼主 u013063359 的回复:1 #include <stdio.h>   2   3 int main()   4   5 {   6 char i='0';   7 int a=1;   8   9 printf("%s %d",i,a);  // printf("%c %d", i, a);  10 return 0;  11  12  13 } 运行后出现 Segmentation fault 怎么回事 %s是打印字符串的，比如char *s = "0"; %c才是字符，char i = '0';

user: user-5
content: 引用 楼主 u013063359 的回复:1 #include <stdio.h>   2   3 int main()   4   5 {   6 char i='0';   7 int a=1;   8   9 printf("%s %d",i,a);  10 return 0;  11  12  13 } 运行后出现 Segmentation fault 怎么回事 printf("%s %d",i,a);这里错了，i是字符，应该printf("%c %d", i, a);如果按照%s打印，i被当做地址，而这个地址是不可读的。。。
user-0 提问: 函数名做函数参数的问题

回复:
user: user-1
content: 你试试你写的东西能不能编译通过？ 函数指针是要确定函数签名的。

user: user-2
content: 这是委托吗？

user: user-3
content: 一楼正解，将函数指针（函数名）作为形参，注意严格匹配返回值和形参值类型，这的确很像C#的委托，怀疑委托的本质就是指针传递。

user: user-4
content: 引用 4 楼 zzx112358 的回复:这是委托吗？ 这就是C里面的指针， 函数指针

user: user-5
content: int b(int (*fun)(int, int)) { .... }

user: user-6
content: b(a(1,2));

user: user-7
content: typedef int (*fun_t)(int m, int n);  int b(fun_t f) { }
user-0 提问: 文件操作的重定向小白问题

回复:
user: user-1
content: #include <stdio.h>   #define LOCAL  #define INF 1000000000    int main()  {  #ifdef LOCAL      freopen("data.in","r",stdin);      freopen("data.out","w",stdout/*stdin*/);  #endif // LOCAL        int x,n=0,min=INF,max=-INF,s=0;      while(scanf("%d",&x)==1)      {          s+=x;          if(x<min)min=x;          if(x>max)max=x;                    //printf("x=%d,min=%d,max=%d\n",x,min,max);                    n++;      }      printf("%d %d %3.6f\n",min,max,(double)s/n);            return 0;  }  输入文件data.in: 12 34  57  输出文件data.out: 12 57 34.333333

user: user-0
content: 谢谢你了~

user: user-1
content: 引用 2 楼 u013036124 的回复:大神！就是不知道怎么输入文件data.in 因为代码把输入重定向到了文件data.in，所以现在不需要你在控制台输入了，而是要在当前路径下预先编写好data.in就行了。

user: user-0
content: 大神！就是不知道怎么输入文件data.in
user-0 提问: 用C语言写一个方法，传一个char数组类型的参数，方法的返回值也为char数组

回复:
user: user-1
content: 你的工作是挑战语言标准么？

user: user-2
content: 改成数组也没作用，跟指针一样的

user: user-0
content: 引用 1 楼 baichi4141 的回复:你的工作是挑战语言标准么？ 是这样的，我现在在wince上要调用C写的一个dll里的一个方法，这个方法是传一个字符串（char指针），返回一个字符串（char指针），wince的程序是C#写的，调用这个dll时，传一个String类型参数，用string接收，但接收的返回值是NULL，所以我觉得是C#的String类型接收不到dll里的指针类型，所以我想把dll的返回值改为char数组。
user-0 提问: 关于char 型的问题

回复:
user: user-1
content: 引用 11 楼 u013594535 的回复:[quote=引用 7 楼 mujiok2003 的回复:] [quote=引用 5 楼 u013594535 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] %c ----> char 我知道这个问题，但是这个程序在于char型的数据能用%s输出，而且这个程序是没有错的[/quote] 那不是没有错， 那是行为不确定。 谁敢用一个没有确定行为的软件？[/quote]这个地方没听明白，那为什么前面是%s呢？[/quote] 问题就在一个char* 可能指向一个缓冲区，也可能指向只是一个字符。当用%s的时候，期待一个缓冲区， 而%c只要一个字符的空间就好了。 %s的时候，缓冲区要足够长，否则缓冲区溢出， 变成了未定义行为。

user: user-0
content: 引用 7 楼 mujiok2003 的回复:[quote=引用 5 楼 u013594535 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] %c ----> char 我知道这个问题，但是这个程序在于char型的数据能用%s输出，而且这个程序是没有错的[/quote] 那不是没有错， 那是行为不确定。 谁敢用一个没有确定行为的软件？[/quote]这个地方没听明白，那为什么前面是%s呢？

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 6 楼 u013998151 的回复:] c中，汉字只能用字符串输入、出。 谬论！ //把“海中上国”排列成“中国上海”的形式输出 #include <stdio.h> #include <locale.h> int main() {     _wsetlocale(LC_ALL,L"chs");     wprintf(L"%c%c%c%c\n",L"海中上国"[1],L"海中上国"[3],L"海中上国"[2],L"海中上国"[0]);     return 0; } //中国上海 // [/quote]那那个输出地方是怎么回事啊？

user: user-2
content: 引用 6 楼 u013998151 的回复:c中，汉字只能用字符串输入、出。 谬论！ //把“海中上国”排列成“中国上海”的形式输出 #include <stdio.h> #include <locale.h> int main() {     _wsetlocale(LC_ALL,L"chs");     wprintf(L"%c%c%c%c\n",L"海中上国"[1],L"海中上国"[3],L"海中上国"[2],L"海中上国"[0]);     return 0; } //中国上海 //

user: user-3
content: %s--char name[]; int char可以转换。 这是我的理解，有错请指出

user: user-1
content: %c ----> char

user: user-0
content: 引用 2 楼 u011043553 的回复: 运行一下你的代码，有不小bug... 这个不是BUG，输入日期的时候按那个格式输入例如  1991/1/1

user: user-4
content: 运行一下你的代码，有不小bug...

user: user-4
content: char name[10];这个应该是字符数组（字符串）

user: user-1
content: 引用 5 楼 u013594535 的回复:[quote=引用 4 楼 mujiok2003 的回复:] %c ----> char 我知道这个问题，但是这个程序在于char型的数据能用%s输出，而且这个程序是没有错的[/quote] 那不是没有错， 那是行为不确定。 谁敢用一个没有确定行为的软件？

user: user-5
content: c中，汉字只能用字符串输入、出。

user: user-0
content: 引用 4 楼 mujiok2003 的回复:%c ----> char 我知道这个问题，但是这个程序在于char型的数据能用%s输出，而且这个程序是没有错的