Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于对多维指针定义方法的疑问？？

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

user: user-2
content: 差别可大了，数据类型就不同

user: user-3
content: 引用 楼主 tyy_wjt 的回复:		 #if 0 char *str1[]={{'a','b','4'},{'c','d','x'}}; //错误，字符指针数组，只能用字符串初始化！ //      指针数组，和二维字符数组，不完全等价 //      {{'a','b','4'},{'c','d','x'}} //      只能匹配，嵌套结构，结构数组，嵌入一维数组的结构，和二维字符数组。 //      不能匹配，指针数组。            #endif  正确的格式如下 char *str1[]={"ab4","cdx"};  /***********************************************/ 	char (*str1)[3]; 	char str[2][3]={{'a','b','4'},{'c','d','x'}};//正确，数组，可以用常量组合初始化。                      //因为，{。。。。} 可以表示,struct 和数组                      //两种不同结构的数据，所以不可单独用来初始化指针数组。                      //二维字符数组，由于可以和常量组合匹配，所以没问题。                      //匹配以后，该常量组合，被认为是，二维字符数组常量。              	str1 = str; //正确，一维字符数组的指针，可以和二维字符数组匹配。  上面两种对str1的定义有什么不同吗？为啥第一种只是一个指向a的指针,第二个却是一个指针数组？？？ 上面两种对str1的定义有什么不同吗？ 第一种，定义指针的数组。 * 和 char 组合成一个类型，char* （字符指针）然后，和str1[]组合成字符指针数组 str1 指针变量类型的数据的数组。  第二种，定义数组的指针。 char 和[3] 组成 字符数组； char [3] 然后和（*str1）结合；  其中str1是变量 所以是和（*） 结合成数组的指针。 str1 是 char 类型数组的指针。 指针家括号后，类型和数组先结合，构成数组，在和指针结合，构成数组的指针。  char * str1 相当于(char*)[]str1; char *[]str1;  char (*str1)[3] 相当于 char [3] *str1;(char [3]) *str1;

user: user-4
content: 第一个不可能编译的过，它表示一个存储char *的一维数组，而你初始化传入的值却是二维数组。  第二个，指针存储了一个char [3]数组的地址，char [2][3]是一个二维数组，每个元素是char [3]，数组名str是第一个元素的地址，也就是第一个char[3]的地址，所以可以存到str1指针里。

user: user-5
content: 第一种方式是str1定义了一个指针数组，第二种方式是str1定义了一个数组指针； char *str1[]={"ab4","cdx"};应该是这样定义。char*指针指向的应该是字符串吧。

user: user-3
content: 可以用字符串，初始化指针； 不可用 字符数组常量（没有这种常量，只有字符常量组合，字符串两种），初始化指针。
user-0 提问: scanf会改变数组长度？？？

回复:
user: user-1
content: 引用 6 楼 lineage191 的回复:研究一种明知道错误的写法实在无意义， 还有楼主不要把自己的本性暴漏出来啊，写个数组都带色情的，数组名：Sex， 理解你的人知道是性别，不理解的还以为你性骚扰呢 char str[3] = "123"; 倒不算是错误  只是不能当C风格字符串使用罢了  和 char str[3] = {'1','2', '3'}; 是一样的

user: user-2
content: 研究一种明知道错误的写法实在无意义， 还有楼主不要把自己的本性暴漏出来啊，写个数组都带色情的，数组名：Sex， 理解你的人知道是性别，不理解的还以为你性骚扰呢  引用 1 楼 lin5161678 的回复:char sex[3]="234"; 你的 sex 不能用str系列函数了  没 \0 引用 4 楼 missheaven2011 的回复:scanf("%6s",sex); 输入时不能大于2 因为字符串char sex[3]，申请的内存大小为3，除去结束符，只有两个字符可以保存 输入过大导致越界

user: user-3
content: strlen不能用来计算数组长度，它用于计算输入的指针到下一个'\0'有几个字符 c++对于类型检查比c严格得多，虽然不管在c还是在c++中，楼主的写法都是错误的

user: user-4
content: scanf("%6s",sex); 输入时不能大于2 因为字符串char sex[3]，申请的内存大小为3，除去结束符，只有两个字符可以保存 输入过大导致越界

user: user-5
content: 在c语言中数组的长度这个概念其实不存在

user: user-0
content: 引用 1 楼 lin5161678 的回复:char sex[3]="234"; 你的 sex 不能用str系列函数了  没 \0可是我把sex[3]="23"; 也是一样的结果,数组长度改变了。。。。  还有是不是c++更严格？sex[3]="232"      用gcc可以编译,用g++会报错

user: user-1
content: char sex[3]="234"; 你的 sex 不能用str系列函数了  没 \0
user-0 提问: 为什么按y后又执行了一遍循环

回复:
user: user-1
content: 引用 9 楼 qq921965140 的回复:[quote=引用 8 楼 oOo532200 的回复:] 使用getchar（）的问题，debug一下就知道了，你用的什么IDE，版本是多少。 把getchar（）改成_getch()，添加#include <conio.h>非标准C库。就欧克了 引用 8 楼 oOo532200 的回复:使用getchar（）的问题，debug一下就知道了，你用的什么IDE，版本是多少。 把getchar（）改成_getch()，添加#include <conio.h>非标准C库。就欧克了我水平很渣，你们说的太高深了[/quote] 这不是水平问题,方法其实很多种

user: user-0
content: 引用 8 楼 oOo532200 的回复:使用getchar（）的问题，debug一下就知道了，你用的什么IDE，版本是多少。 把getchar（）改成_getch()，添加#include <conio.h>非标准C库。就欧克了 引用 8 楼 oOo532200 的回复:使用getchar（）的问题，debug一下就知道了，你用的什么IDE，版本是多少。 把getchar（）改成_getch()，添加#include <conio.h>非标准C库。就欧克了我水平很渣，你们说的太高深了

user: user-1
content: 使用getchar（）的问题，debug一下就知道了，你用的什么IDE，版本是多少。 把getchar（）改成_getch()，添加#include <conio.h>非标准C库。就欧克了

user: user-2
content: 引用 2 楼 qq921965140 的回复:引用 1 楼 derekrose 的回复:自己debug我来问题，能好好回答吗  这就是认真的回答，不能每次都让人帮你debug，debug之后还不能解决问题再来问

user: user-0
content: 引用 4 楼 tao346995926 的回复:这个程序有问题，scanf之后应该加个去除回车符十分谢谢提醒，我想起来啦！用这个scanf("%d%*c",&v);。吃掉回车。

user: user-0
content: 引用 3 楼 user-4 的回复:scanf("%d",&v); 这句语句结束后还有一个 '\n'在输入缓冲区内 ch=getchar(); 第一次获取了 缓冲区内的 '\n'，即ch 值为 '\n' 不满足 if(ch=='y') 再次循环  可以将 scanf("%d",&v); 改为 scanf("%d",&v); getchar();十分谢谢提醒，我想起来啦！用这个scanf("%d%*c",&v);。吃掉回车。

user: user-3
content: 这个程序有问题，scanf之后应该加个去除回车符

user: user-4
content: scanf("%d",&v); 这句语句结束后还有一个 '\n'在输入缓冲区内 ch=getchar(); 第一次获取了 缓冲区内的 '\n'，即ch 值为 '\n' 不满足 if(ch=='y') 再次循环  可以将 scanf("%d",&v); 改为 scanf("%d",&v); getchar();

user: user-0
content: 引用 1 楼 derekrose 的回复:自己debug我来问题，能好好回答吗

user: user-2
content: 自己debug
user-0 提问: CTime，CSpantime ，CArray，CString替代类

回复:
user: user-0
content: 名字打错了。。

user: user-0
content: worldly： 1，请问你有过类似的操作吗？ 2，就拿CTime类来说，是用不依赖于MFC类库的C++代码实现的吗？还是说该类的实现过程中也是用了其他的MFC类。 3，这个问题比较蠢。。。如何获得源码啊，我右键转到定义只能打开相应的头文件，找不到类的具体实现源码啊？  灰常感谢!!!!

user: user-1
content: 最简单的办法是，去掉原来的include的文件， 将mfc的那几个类的源码拷贝到一个新建的头文件中，include入你自己的头文件，这样代码都不用改了

user: user-0
content: 灰常感谢，我查了一些资料也是这么说的

user: user-2
content: CTime，CSpantime 直接用标准C的time_t应该问题不大 CArray -> std::vector CString -> std::string
user-0 提问: C里不能使用__m128i类型吗

回复:
user: user-1
content: 不支持。。。。

user: user-2
content: 看样子，像是intel编译器的关键字。

user: user-3
content: 那个是特定编译器才支持的特性吧？你看看你用的编译器是不是支持那个关键字。
user-0 提问: SCANF在VS2013里面一定要这样？

回复:
user: user-1
content: 引用 楼主 fcpplo 的回复:刚开始学习C语言，用的是谭浩强的第四版 课后有个习题做了一下，但是用如下语言始终不对，代码如下 #include <stdio.h> int main() { 	int max(int x, int y,int z); 	int a, b, c, m; 	scanf("%d%d%d", &a, &b, &c); 	m = max(a, b, c); 	printf("max=%d", m); 	return 0; } int max(int x, int y, int z) { 	int n; 	if (x > y&&x > z) n = x; 	else  	if (y > x&&y > z) n = y; 	else n = z; 	return(n); } 输入2，3，4   输出是max=2 然后找来找去，把 scanf("%d%d%d", &a, &b, &c); 改成了 scanf("%d,%d,%d", &a, &b, &c); 然后答案正确了，这是为什么啊，难道这个必须加逗号？与后面的对应么  我看谭浩强老师的书上都是不带逗号的 敢不敢换本书?如果我去大学上课，第一件事就是让学生把和谭浩强相关的东西丢进厕所

user: user-2
content: 输入为1,2,3  用scanf("%d,%d,%d",&a,&b,&c); 因为在测试的时候输入了逗号，如果不加逗号，就无法匹配你输入的值和变量。 或者换上%c scanf("%d%c%d%c%d",&a,&c1,&b,&c2,&c);

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

user: user-4
content: scanf和printf都属于格式化的I/O. scanf("%d;%d;%d", &a, &b, &c);//读取的时候用分号隔开，输入的时候就必须用分号隔开 格式化...格式化...

user: user-5
content: 什么都不加应该是可以的，但具体要看题目的要求

user: user-6
content: 最好的办法是什么都不加。 %d%d%d

user: user-7
content: 2，3，4  ==>scanf("%d,%d,%d", &a, &b, &c); 2 3 4    ==>scanf("%d%d%d", &a, &b, &c);

user: user-8
content: 这应该是取决于编译器的设计吧，如果要用原本的写法 scanf("%d%d%d", &a, &b, &c);，在输入的时候用空白隔开就好。

user: user-9
content: 之间换成空格也行，什么都不加貌似一直都不行
user-0 提问: 求助家谱处理程序

回复:
user: user-1
content: 不用树也可以。。。 我写的：http://blog.csdn.net/u014801032/article/details/25797033

user: user-2
content: 非常简单的例子 看看 http://cse222.wikispaces.com/Binary+Tree,+Example+beginning+C+code

user: user-3
content: tree+search+parse text

user: user-4
content: 参考《算法精解（C语言实现）》里面有关树的章节。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:树 我知道是用树，但是不知道怎么写啊。不会程序

user: user-4
content: 树
user-0 提问: 迷途指针

回复:
user: user-1
content: delete指针后，只是告诉系统，你这个指针没有关系了，但是指针的内容还是指向那块内存的，所以平时操作delete p; p = NULL;   但是还是调用p的话，那块内存可能被其他程序调用，也可能被系统调用，也可能空置在那...那块内存已经不属于你，结果...  愚见

user: user-2
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-3
content: 引用 2 楼 ysmz4 的回复:[quote=引用 1 楼 user-3 的回复:] 属于未定义的行为，深究无益 需要什么定义？给个例子吧[/quote]  http://cn.bing.com/search?q=undefined+behavior+c%2B%2B&go=&qs=AS&form=QBLH&pq=undefined+behavior+c%2B%2B&sc=0-12&sp=1&sk=

user: user-0
content: 引用 1 楼 user-3 的回复:属于未定义的行为，深究无益 需要什么定义？给个例子吧

user: user-3
content: 属于未定义的行为，深究无益
user-0 提问: 请教大神这个习题哪里不对

回复:
user: user-0
content: 非常有用，谢谢。我明白了

user: user-0
content: 那应该如何修改呢？谢谢

user: user-1
content: main() { char c1,c2; int i1, i2 printf("请输入你需要表示的整数值；\n"); scanf("%d, %d", &i1, &i2); c1 = i1; c2 = i2; printf(" 输出整数对应的字符: \n"); printf("%d对应的字符是：%c\n", c1, c1); printf("%d对应的字符是：%c\n", c2, c2);  }

user: user-2
content: 字符char应该用%c格式，否则结果难料。  引用 楼主 kenny83915 的回复:我是按照书上的习题在Dev-C++上做的，源代码如下： #include<stdio.h> main() { 	char c1,c2; 	printf("请输入你需要表示的整数值；\n"); 	scanf("%d, %d", &c1, &c2); 	printf(" 输出整数对应的字符: \n"); 	printf("%d对应的字符是：%c\n", c1, c1); 	printf("%d对应的字符是：%c\n", c2, c2); 	 } 运行下来这个结果只能显示一个整数值的字符，另外一个显示为o，不清楚是怎么回事，还请大神帮我解答，谢谢
user-0 提问: C语言中的MACRO宏的用法

回复:
user: user-0
content: 谢谢楼上的各位哦，我最后采取的 函数指针的方式 写了一个类似面向对象的 return value的函数

user: user-1
content: 你准备一个数组装3个函数指针，指定0,1,2作为下标，然后去比较不就是了，运行期的问题怎么还整出个宏来。  typedef int (*compare_function)(struct test *l, struct test *r); compare_function funcs[3];

user: user-2
content: 比较函数传递一个index 参数就可以了。  这样，很多库函数，就不能直接用了。 不过，C链表也没有库函数，可以排序；  所以直接写个用三参数比较的排序函数就行了，  比较用三参数比较，两个节点一个索引。  排序多传递一个，索引值参数，就行了。

user: user-3
content: 你还不如这样：  struct test {   int data[3];   struct test* next; };

user: user-4
content: 宏在这里不行的！在预编译器就已经替换了的！ 这里最好用联合体，动态的决定用那个！完全没有必要定义三个！

user: user-5
content: 运行期要想修改编译期的变量值的话，请将编译和运行放在一个循环批处理中。

user: user-6
content: 用宏肯定不行，因为宏是固定的，不会随着输入而变化，你可以增加一个： int sort(TEST* this, int field) 这样的函数，其中field就是排序所依据的域。  引用 楼主 soul376 的回复:本人在写一个struct的链表类型结构的排序程序，遇到了一下疑惑 我的struct结构如下：  struct test{ int a; int b; int c; struct test *next; }  typedef struct test Test  int main(void){     Test myStruct; }    此时我希望给用户一个选择，如果输入0就通过比较a成员来排序，如果输入1就通过比较b成员来排序，如果输入2就通过比较c成员来排序  目前我的方法是比较麻烦的写了三个不同的比较function，然后做成函数指针 每个函数分别三个不同的成员变量之差  小弟想问的是没有没方法能给根据条件来#define OBJECT 如果用户输入0 就#define OBJECT a 输入1 就 #define OBJECT b 输入2 就 #define OBJECT c   这样就只需要写一个比较function，return ( (myStruct->OBJECT) - (myStruct->OBJECT) ) 就好了

user: user-7
content: #define 是预编译  也就是说，程序运行的时候，已经确定了 所以不能用它
user-0 提问: 简单问题求各种解

回复:
user: user-1
content: #include <stdio.h>  int main(int argc, char* argv[]) { 	char str[4]; 	int i;  	for(i = 0; i < 6; i++) 	{ 		sprintf(str, "%03d", i + 1); 		printf("%s\n", str); 	}  	return 0; }  引用 楼主 wangjian617765 的回复:CString  str; str = "001"; for(int i=0; i<6; i++) {     ...... }  输出结果： 当i=0时　　　str="001"; 当i=1时　　　str="002"; 当i=2时　　　str="003"; 当i=3时　　　str="004"; 当i=4时　　　str="005"; 当i=5时　　　str="006"

user: user-2
content: sprintf(buf, "00%d", i+1);
user-0 提问: c语言如何用return返回一个数组，并输出，，程序如下

回复:
user: user-1
content: 不太理解你说的返回数组是什么意思？我的理解是要么你的数组在main()函数里面定义好作为参数传入调用的子函数；要么在子函数里面使用动态内存分配返回这个内存的首地址。这个代码中的数组b[2]是一个局部变量，局部变量是被存于栈中，在调用这个子函数的时候分配内存，一旦调用完就会被擦除。所以你的输出有点问题。

user: user-2
content: b[3]在函数结束时就释放掉了内存了  你可以加一个参数 数组 用来接收要的结果 也可以全局数组来接收

user: user-3
content: b是个局部变量 不能这么干的

user: user-4
content: 不能返回数组
user-0 提问: 关于程序设计，大家给点建议

回复:
user: user-0
content: 引用 2 楼 user-2 的回复:之前这么做肯定也是有它的原因的！ 单线程没什么不好 那有关于程序设计的书籍可以推荐的么

user: user-1
content: 最好不要自己实现，因为难度真的很高。  直接参照 google webrtc 的源代码吧，直接用都行，直接用并不是很难。

user: user-2
content: 之前这么做肯定也是有它的原因的！ 单线程没什么不好
user-0 提问: C中的bool运用求解（在VC6.0中）

回复:
user: user-1
content: 引用 1 楼 wangdahu888 的回复:吐血了呀 宏不是这样写的 #define ture  1 #define false  0 除了这个，估计楼主手误： ture --> true

user: user-2
content: #define ture = 1;//不要= #define true 1;

user: user-3
content: #include <stdio.h> #define ture = 1 #define false = 0  int main() {  if(ture) printf("bool ok"); else printf("wrong");  return 0; } 宏定义里面是简单的替换 ture就是1 不需要使用等于号。

user: user-4
content: 吐血了呀 宏不是这样写的 #define ture  1 #define false  0

user: user-5

user: user-6
content: 看看基本语法。预处理那部分吧。。。

user: user-7
content: 引用 1 楼 wangdahu888 的回复:吐血了呀 宏不是这样写的 #define ture  1 #define false  0+1

user: user-8
content: 这个东西叫布尔？   bool b=1;  是一个类型啊。~

user: user-9
content: 楼主基础知识需加强啊

user: user-10
content: 看看define的定义
user-0 提问: 十六进制转十进制看不懂啊?

回复:
user: user-1
content: http://bbs.csdn.net/topics/390666307

user: user-2
content: 沒錯! 回车也代表一个字符

user: user-0
content: 是不是'\0'在回车之后，回车是不是也代表一个字符，如果是的话，那就可以执行后面的else if(flag)了

user: user-3
content: 我觉得先看书了解基本语法比较好。。

user: user-4
content: 你得先明白几个东西: 1. 16进制转换成10进制的原理, 即手动在纸上, 你要会算. 2. 明白字符串与内存数据的区别. 即ASCII码  你这个程序是把"字符串"表示的16进制数据, 转换成"字符串"表示的10进制  所以你需要做的就是先把字符串的"0-9"会转换成内存数据的0-9, 把字符串中的"a-f"转换成对应的内存数据10-15.  剩下的就是按原理换算了.

user: user-2
content: 还是...您能将您的问题再描述得更清楚一点!?

user: user-0
content: 看不懂各位的解答。。。

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 whlie (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： whlie (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: 关于您的问题：  1.确实如果c = '\0'，那么就不会进到回圈里，不过，getchar()会等待使用者输入，使用者应该也没办法输入'\0'，所以不管输入什么还是会进回圈执行判断。  2.因为是getchar() 的关系，n=0 应该只是单纯想要表示一次只会针对一个字元做转换，不考虑两位数的转换吧。
user-0 提问: C语言结构中的一个问题

回复:
user: user-1
content: 楼主呀,这有什么好问的,各编译器对标准的诠释可能不一样,就记住了就行了,知道就行了. 以后如果你学C#什么的,里面有不少的语法糖,也是记住写法就行了,问为什么真的没意思?

user: user-2
content: typedef struct node { Item item; struct node * next; }Node; struct Node *list;//首先这里应该是struct node *list //其次，他等价于Node *list,因为Node就是struct node这个结构体的别名

user: user-3
content: 在C++中效果是一样的... 因为在C++中struct和class差不多，只是有一些区别而已 但是在C中，必须加上struct了...

user: user-0
content: 引用 2 楼 KenZhang1031 的回复:我觉得你还要清楚两个问题： 1、这四种写法的区别 typedef struct   // 第一种 {    int a; }tName;  struct   // 第二种 {   int a; }tName;   typedef struct __name   // 第三种 {    int a; }tName;  struct __name      // 第四种 {    int a; }tName;  第一种是相当于先定义结构， struct {     int a; }; 然后用typedef 把结构设置成别名tName。第三种和这个是一样的，只是给结构起了个名字__name而已。  第二种是定义结构，为结构类型定义一个变量tName。第四种和这个是一样的，只是给结构起了名字__name而已。  2、typedef 定义的别名使用 用typedef定义的别名，可以直接定义类型。比如： typedef char* PCHAR; // 为char*定义别名PCHAR PCHAR p;  // 相当于定义了char * p 给结构定义别名也是一样的， typedef struct __name tName； // 定义别名tName tNmae ddd;  // 定义结构ddd，和struct __name ddd一样的 定义别名是为了少些struct这个单词。效果是一样的。   你说的这些我都明白。因此我才问，struct node * list  跟node * list是不是一样的效果。

user: user-4
content: 我觉得你还要清楚两个问题： 1、这四种写法的区别 typedef struct   // 第一种 {    int a; }tName;  struct   // 第二种 {   int a; }tName;   typedef struct __name   // 第三种 {    int a; }tName;  struct __name      // 第四种 {    int a; }tName;  第一种是相当于先定义结构， struct {     int a; }; 然后用typedef 把结构设置成别名tName。第三种和这个是一样的，只是给结构起了个名字__name而已。  第二种是定义结构，为结构类型定义一个变量tName。第四种和这个是一样的，只是给结构起了名字__name而已。  2、typedef 定义的别名使用 用typedef定义的别名，可以直接定义类型。比如： typedef char* PCHAR; // 为char*定义别名PCHAR PCHAR p;  // 相当于定义了char * p 给结构定义别名也是一样的， typedef struct __name tName； // 定义别名tName tNmae ddd;  // 定义结构ddd，和struct __name ddd一样的 定义别名是为了少些struct这个单词。效果是一样的。

user: user-5
content: 以前的 C 语言里面是不可以的

user: user-0
content: 我是不是应该去报个班，学一下？

user: user-0
content: 就是因为是新手，而且是自学的。难啊。
user-0 提问: 数组指针的问题

回复:
user: user-1
content: 我觉得应该是a[0]=v[0],a[1]=v[1]不是v[10];在二维数组v[2][10]也能分为v[0],v[1];

user: user-0
content: 引用 1 楼 zhouda829829 的回复:#include <iostream.h> int main(){   int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}};   int (*a)[10]=v;//数组指针   cout<<**a<<endl; //结果是1，没问题**a就是指向这个二维数组的第一个存储空间的值   cout<<**(a+1)<<endl; //结果是11，没问题   cout<<*(*a+1)<<endl; //*a就是a[0] 所以这句话就是*(a[0]+1)也就是数组中1的后一个也就是2   cout<<*(a[0]+1)<<endl;//同上   cout<<*(a[1])<<endl;//这个是*(*(a+1)) 结果是11   cout<<*(*(a+1))<<endl;//同上   return 0; } 结果是1，11，2，2，11，我有点明白了，本来想问问*a用v怎么表示，但是应该把a看做二维数组,a[0]=v[0],a[1]=v[10]

user: user-2
content: 对指针进行加减操作，加的是指针所指向类型的字节数 **(a+1)  //由于a指向的是二维数组的第一行，所以加1加的是一整行，a+1就相当于a+1*sizeof(*a) *(*a+1)  //*a指向的是a[0][0]，是一个元素,所以加的是一个整数的字节，*a+1就相当于*a+1*sizeof(**a)

user: user-1
content: #include <iostream.h> int main(){   int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}};   int (*a)[10]=v;//数组指针   cout<<**a<<endl; //结果是1，没问题**a就是指向这个二维数组的第一个存储空间的值   cout<<**(a+1)<<endl; //结果是11，没问题   cout<<*(*a+1)<<endl; //*a就是a[0] 所以这句话就是*(a[0]+1)也就是数组中1的后一个也就是2   cout<<*(a[0]+1)<<endl;//同上   cout<<*(a[1])<<endl;//这个是*(*(a+1)) 结果是11   cout<<*(*(a+1))<<endl;//同上   return 0; }
user-0 提问: 恕我眼拙：这个代码怎么都看不出哪里出错了

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。 谢谢赵哥提点！我已经指导，就是在第150行试读之后，文件指针已经向下移动一个struct的位置了，所以那个位置的struct就没有读到，在后面的读取之前加个rewind()就好了！

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

回复:
user: user-1
content: 加个判断条件，是打开失败，再重新打开并创建(大多数都是这么处理)

user: user-2
content: 由于思考时间太长，造成一起抄袭事件。

user: user-2
content: 说一下我的想法。 可以先尝试用r+打开文件，如果成功，就继续后续操作；如果失败，说明文件不存在，那么再尝试用w+创建这个文件。这样就不用事先人为创建一个空文档了。

user: user-3
content: 引用 楼主 mcmay 的回复:我在写代码时经常会遇到这样的情况，程序需要创建一个文件，然后从该文件中进行读写操作。但问题是，创建一个文件，要求用"w+"这个可用以创建文件的写参数（假设程序中不能用"a"参数，例如在文件的任意位置写入）。那么，每当程序再次运行时，就会抹除上次运行时的写入的内容。有一个解决办法，就是预先人为建立一个空文档，然后用"r+"做读写操作。不过觉得这个办法，不是很智能。请问有没有什么更好的办法？      谢谢您的参与！ 这办法就不错了。

user: user-4
content: 先"r+"打开，失败（说明不存在）则用"w+"再打开。
user-0 提问: 急急急！c++求1000次内的不可约多项式，求教各路大神

回复:
user: user-1
content: 生成多项式 最多 1000 Bits 的二进制数，实际是 n 位数 从1 开始 ~ n个 1结束，

user: user-1
content: 1）生成多项式 （系数只能 为0或1），直接用二进制数表示。 2）多项式除法 求余数多项式总是不为0 的多项式。无论加减，都是位异或处理，乘法记不住了。 3）求重量，统计1的个数。

user: user-2
content: 我竟然没看懂题,如果这是面试题的话,我得溜了,不浪费时间

user: user-3
content: 引用 楼主 MIFAND 的回复:求在F2上的1000次以内的不可约多项式，假设x的系数（不为0）相加等于此多项式的重量，求每一个n对应的重量最小的不可约多项式。我写了一段，还有点没完成 #include<stdio.h> #include<math.h> #define N 1000  int n; void main() { int determine(int f[N],int sign); int gcd(int a[N],int b[N]); int mod(int x[N],int f[N]); int devide(int n,int n1[100]); int deg(int x[N]); 	int i,j,e=0; 	int f[10000]; 	for(n=2;n<=1000;n++) 	{ 		for(i=3;;i=i+2) 		{ 			for(j=)/*从f[]的n-1个位置中，取出i-2个放入1，其余为0,这等价于生成一个重量为i的n次多项式*/ 			{	 				determine(f,e);/*判断函数是否不可约 若不可约 则返回e=1*/ 				if(e) goto result; 				else continue; 			} 		} result: 	printf(%d"次多项式的重量为"%d:n,i); 	} } int devide(int n,int n1[100]) { 	int i,j; 	int e[]={0}; 		n1[0]=1; 	for (i=2,j=1;i<=n/2;) 	{ 		if(n%i==0)  		{ 			if(i!=n1[j-1])  			{ 				n1[j]=i; 				e[j]++; 				j++; 			} 			else e[j-1]++; 		}	 		else i++; 	} } int deg(int *x) { 	int i; 	for(i=1;;i++) 	{ 		if(x[i]!=0)域都出来了，想不到真有数学系出没。

user: user-1
content: 你这个要做多项式除法，余数多项式不为0，即可。

user: user-1
content: 看得懂，不会做！！！

user: user-0
content: 专业数学，看不懂很正常。

user: user-4
content: 你的问题是什么？ 不会是希望别人帮你写完吧

user: user-5
content: 求在F2上的1000次以内的不可约多项式，假设x的系数（不为0）相加等于此多项式的重量，求每一个n对应的重量最小的不可约多项式。  看来我是out了，怎么看就是看不懂lz什么意思
user-0 提问: 一个关于指针的问题，求助

回复:
user: user-1
content: free(tmp);为什么用free呢  不是malloc出来的 不用这么做

user: user-2
content: 有借有还，不是借的，自然不用还。

user: user-3
content: 引用 2 楼 Automation_dmu 的回复:    static char temp[20];      free(tmp);  静态存储区的tmp 干嘛用free去释放？+1

user: user-4
content: free的让人很迷茫，楼上说的是对的

user: user-5
content: 2种都错 不用介意

user: user-6
content: malloc/free 匹配使用，当你malloc了 你才能free！ 没有malloc就不要去free了！第一个程序也是有问题的！ 不能free

user: user-7
content: static char temp[20];      free(tmp);  静态存储区的tmp 干嘛用free去释放？

user: user-8
content: 循环没有结束么~~
user-0 提问: 一个socket通讯问题，多结构传输问题

回复:
user: user-0
content: 啊。。。非常感谢各位的指导，我已经搞定了，把结构体对象接收改为char buf接收然后再用结构体强转 就好了

user: user-1
content: XML

user: user-2
content: 重新写解析函数，解析时需要与发送时相对应的，可以自己规定发送与解析时的机制

user: user-0
content: 我的意思是既然前人已经用realorrev这个对象来接收数据了，没有用buf，那么怎么从A结构体的对象realorrev中取出B结构体的值呢，是直接用 &realorrev地址偏移吗？还是该怎么写呢？

user: user-0
content: 你的意思是可以这样写？ B.a = &realorrev + 偏移量？？？  还是怎么写？求赐教

user: user-3
content: 引用 7 楼 yangw150 的回复:再弱弱的问一句，前人的代码是这样写的 int iRec = aSocket.ReceiveFrom(&realorrev, sizeof(REALOR_SHAKEHANDS),strIp,port);  收的时候用的不是buf是用的A类型的结构体，realorrev是结构体的对象，这样的话发的时候是A+B结构，但是收的时候用的是A结构体接收的，这似乎不对吧 只是一个地址而已！这样也可以，取B结构体信息的时候，偏移A结构体大小就好！ 实际开发的时候还是用buf比较靠谱，上面那种写法比较误导人

user: user-0
content: 再弱弱的问一句，前人的代码是这样写的 int iRec = aSocket.ReceiveFrom(&realorrev, sizeof(REALOR_SHAKEHANDS),strIp,port);  收的时候用的不是buf是用的A类型的结构体，realorrev是结构体的对象，这样的话发的时候是A+B结构，但是收的时候用的是A结构体接收的，这似乎不对吧

user: user-3
content: 引用 4 楼 yangw150 的回复:非常感谢楼上的回复，这是发送的代码，怎么收呢？  你发送端是如何发的！你接收端就如何接收！ 中间怎么发，这就是接和收之间的协议了！@

user: user-4
content: 引用 4 楼 yangw150 的回复:非常感谢楼上的回复，这是发送的代码，怎么收呢？//recv buf... A* pa = (A*)buf; // use pa ... B* pb = (B*)(buf+sizeof(A)); // use pb...我认为通讯最好是基于‘协议’的，而不要基于数据结构，这样才能做到机器无关

user: user-0
content: 非常感谢楼上的回复，这是发送的代码，怎么收呢？

user: user-4
content: 仅供参考char* buf = (char*)malloc(sizeof(A)+sizeof(B)); A* pa = (A*)buf; pa->a = 1; pa->b = 2; B* pb = (B*)(buf+sizeof(A)); strcpy(pb->a, "abc"); strcpy(pb->b, "bcd"); //send buf... free(buf);

user: user-0
content: 关键问题是怎么解析？client端收消息是用的A的结构体收的，代码如下 int iRec = aSocket.ReceiveFrom(&realorrev, sizeof(REALOR_SHAKEHANDS),strIp,port);  REALOR_SHAKEHANDS就是A结构体，realorrev是A的对象，怎么解析后面那个B的结构体呢？

user: user-3
content: 直接分配一块大空间阿！加上消息头，标注后面消息体的大小！ 然后把两个结构体拷贝进去，发过去！ 那边对应解析就好；
user-0 提问: c函数指针赋值的问题

回复:
user: user-1
content: grep

user: user-0
content: 引用 2 楼 yuwujian 的回复:静态局部变量存储在内存的全局区域，可供全局使用。 百度了下静态局部变量随便找了个链接，你看看吧 http://www.blogjava.net/faintbear/archive/2010/01/06/308408.html多谢提供的帮助，我对静态局部变量更了解了，我再分析分析代码，问题好像不在此。

user: user-2
content: 静态局部变量存储在内存的全局区域，可供全局使用。 百度了下静态局部变量随便找了个链接，你看看吧 http://www.blogjava.net/faintbear/archive/2010/01/06/308408.html

user: user-3
content: 那一定是你没看到
user-0 提问: windows平台下软件开发

回复:
user: user-1
content: 引用 5 楼 yangw150 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] http://jpkc.wxit.edu.cn/vb/Wlkc/index/index.html  ==================================================================== VB都淘汰了哦，现在还有人用吗？是不是有点误人子弟啊[/quote] 用筷子吃饭啥时候淘汰呀？！

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:http://jpkc.wxit.edu.cn/vb/Wlkc/index/index.html  ==================================================================== VB都淘汰了哦，现在还有人用吗？是不是有点误人子弟啊

user: user-3
content: 用MFC啊，虽然现在用的少，但是真学完还是很不错的，因为什么东西都要自己来，如果时间紧张的话搞搞qt吧还是，上手比较快点，而且界面比较好看

user: user-4
content: 你得自己去搜索一般的你想综合的测试功能一般都是通过哪些语言来实现的！ 然后自己再重点去抓这方面的知识！ 如果还有带界面的话，那就Qt好好搞搞！ 一步一步来吧！

user: user-5
content: 软件工程相关的知识吧!好多,总之我觉得你的问题过于复杂啊,什么都相关. 可以找老师讨论讨论

user: user-1
content: http://jpkc.wxit.edu.cn/vb/Wlkc/index/index.html
user-0 提问: 这种错误是不是因为写指针的时候写错了，然后应用程序出错了？

回复:
user: user-1
content: 我关机的时候有时候都会run time error呢

user: user-2
content: 这个bug 连xp系统都会老是出现的了！

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

user: user-0
content: 引用 3 楼 truelance 的回复:原因很多, 踩内存, 堆栈溢出, 都可以造成这种现象. 唉。。。不是说系统会有保护的吗，怪不得我做个编程作业360都能看成木马。。那菜鸟编程人员的电脑岂不是很多程序都容易悲剧

user: user-4
content: 引用 2 楼 u012345348 的回复:[quote=引用 1 楼 derekrose 的回复:] 弱弱的问一句什么叫写指针 我用语不太规范，就是在写程序的时候用到指针的意思。。[/quote]  pointer无处不在，其实pointer就是地址    http://www.tutorialspoint.com/cprogramming/c_pointers.htm 介绍给你看看

user: user-5
content: 引用 1 楼 derekrose 的回复:弱弱的问一句什么叫写指针 ++

user: user-6
content: 原因很多, 踩内存, 堆栈溢出, 都可以造成这种现象.

user: user-0
content: 引用 1 楼 derekrose 的回复:弱弱的问一句什么叫写指针 我用语不太规范，就是在写程序的时候用到指针的意思。。

user: user-4
content: 弱弱的问一句什么叫写指针
user-0 提问: 大神，我用VC6.0学习C可以不！！！

回复:
user: user-1
content: 这个不能吧，因为vc6.0没有出64位的，只有32位的，你可以尝试使用更高版本的vc，目前很多中型和大型的应用软件还没有出64位的，毕竟64位的系统还没有普及，只是为了适应现在越来越高的硬件配置要求，纯属经验，希望能帮到你。有时间多看看这方面的基础：http://net.itcast.cn/net/video.shtml

user: user-2
content: 如果是新手的话，就不要用vc了！ 新手c-free吧！

user: user-3
content: ............... 你学习C语言跟你用什么编译工具好像没什么关系, 放心用VC++吧

user: user-4
content: 必须可以的~

user: user-5
content: 工具而已... 语言才印巴

user: user-6
content: 对你以后有影响的是你的脑子和变通能力，没听说一个软件能影响人生的

user: user-7
content: 可以是可以，不过建议用高版本VS或gcc 编译正确代表没有语法错误，不能运行或者运行结果错误代表程序写错了
user-0 提问: 关于指针的小问题

回复:
user: user-1
content: float * g () g是一个函数， 它的返回值指向一个float类型的指针   float (*g)() g是一个指针，它指向一个返回值是float类型的函数

user: user-2
content: 返回值没有写 第一个就是retunr p； 浮点数指针值的是这个指针指向的空间内容里面写的是浮点数。

user: user-2
content: float *g() 返回的是一个指针，指针类型指向float类型； float (*g)() 返回的是一个数值，数值的类型是float；

user: user-3
content: #include <iostream> using namespace std ; float *p(float *point) { 	 	float path = 2.5 ; 	point = &path ; 	return point ; } int main() { 	float* ios = NULL ; 	cout << *p(ios) ; 	return 0 ; } return float型变量指针 不然牺牲精度发生隐式转换 。。

user: user-4
content: 引用 4 楼 u012804737 的回复:float * g() 返回的是不是一个指针，然后这个指针的值是指向一个float类型的常量？能不能这么理解？呵呵，不是这么理解，应该是就是这样的

user: user-5
content: 引用 4 楼 u012804737 的回复:float * g() 返回的是不是一个指针，然后这个指针的值是指向一个float类型的常量？能不能这么理解？  float* g() {    float* pRet = NULL;    //....    float* pf = new float;    *pf  = 8.0;    pRet = pf;    return pRet; }

user: user-0
content: float * g() 返回的是不是一个指针，然后这个指针的值是指向一个float类型的常量？能不能这么理解？

user: user-5
content: 函数指针LZ知道吧？不知道的话去百度查查

user: user-5
content: 这2个就区别大了 float * g ()  //函数名g 返回值float*  float (*g) () //函数指针g 返回值float

user: user-0
content: 第一个好像明白了，返回的是一个指向浮点数的指针，也就是这个指针指向的值应该是浮点数对吧？那么怎么用return返回呢？
user-0 提问: 最近在大数排序，总是超时求解

回复:
user: user-1
content: 冒泡和选择的算法复杂度都是n^2 了，进行海量数据排序时肯定是不能选用的，你可以用快排，如果是只需要输出前n 个最大的话，那么就可以用随机选择第n 大的算法了

user: user-2
content: qsort strcmp
user-0 提问: 我天天晚上8点到12点在线，求一个C语言的老师教我！！！！！

回复:
user: user-0
content: 谢谢了，等我学完了这些，应该我就会知道我要学什么了，应该往哪个方向前进了！！！！！！！！！

user: user-1
content: qq:549835996 喜欢同类，对编程的热情

user: user-2
content: 如果不懂， 往后看。 学习有时候纠结在一个地方不好的。 读书百遍， 其意自现。 我是最开始学MFC的。 那时候 啥都不懂， 连定义变量为啥要取名字， 不直接定义为x, y, z都不晓得。 然后我就逮着孙鑫的20集视频。。。一遍 两遍 三遍。。。。。。 学习切记急躁 更好的学习方法有很多， 在没有找到的时候还是沉默的学习吧。。。 关于效率问题 ， 其实现在回想， 当初的我学习的时候真的好蠢 啥都不会 连上网搜都不会 但这是我最珍贵的回忆之一  最珍贵的经验的 永远是失败

user: user-3
content: 先看一下我的博文http://blog.csdn.net/turingo/article/details/8115042  引用 4 楼 u012777651 的回复:我的QQ邮箱245913495@qq.com，可以发给我，然后我自己会努力学习的

user: user-4
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm

user: user-4
content: bc++3.1 帮助里面对每个函数都有一小段能拷贝出来运行看效果的例子程序。非常适合初学C语言。相比较而言VC带的帮助MSDN就没有。http://download.csdn.net/source/2805028 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-0
content: 我找了N多了，自己天天在家看，但我还是希望有个师傅，不然遇到不懂的，我找谁啊，上网查，给我的答案太多，让我不知道那个是对的！！！

user: user-2
content: 初学者。。。最好找些视频教程 照着做  做两遍 ， 基本可以算是入门咯。C语言的基础教程。。。网上一大堆  你找些看吧 实在不行看C语言零基础的 只看书没用的 初学必须动手。

user: user-0
content: 我的QQ邮箱245913495@qq.com，可以发给我，然后我自己会努力学习的

user: user-0
content: 不要你多少时间，只要给我一些资料，和对我一些不懂的问题给我答案就好，（我自己会用各种方法自己尝试，实在不行在求救师傅的！！）

user: user-0
content: 最好可以告诉我一些C语言的专业术语，我现在完全是们外汉，你给我的资料我会背下来，只求一位好一点的师傅，或者程序员！！！！！！！！！！！！！！ 师傅，看见了我，就别走了把，在不就的将来我一定会有出息的！！！！！！！！！！！

user: user-3
content: 孺子可教也，可惜我们的时间不多啊，还是学生时代好！  引用 楼主 u012777651 的回复:本人热爱计算机编程，可以为了改BUG不睡觉，以前把VB学一点可以过2级了，现在打算好好学习C语言，让他为我一生的语言，不知道那位大神有空！！！！！稍微指导我下就好，不用你天天在线，只要我有什么不懂的就可以问你，我现在自己学习的感觉好累，完全找不到C语言的方向！！ 跪求！！！！！！！！！！！！！！！！！！！！！！！
user-0 提问: ortp大数据链传输问题

回复:
user: user-1
content: 数据包过大，没有分包吗？

user: user-0
content: 程序中设置了接收空间的大小的，并且能够保证值大于发送空间的值，如下： 发送端： int rtpSend(unsigned char *send_buffer, int frame_len) { 	int sended_bytes; 	 	sended_bytes = rtp_session_send_with_ts(rtp_session_mgr.rtp_session,  		(uint8_t *)send_buffer,  		frame_len, 		rtp_session_mgr.cur_timestamp);  	//printf("------Send msg len : %d %d\n",frame_len,sended_bytes); 	rtp_session_mgr.cur_timestamp += rtp_session_mgr.timestamp_inc;  	return sended_bytes; } 接收端的设置：  void rtpInit(RtpSessionMgr *rtp_session_mgr) { 	WSADATA wsaData; 	if ( WSAStartup(MAKEWORD(2,2), &wsaData) != 0) 	{ 		fprintf(stderr, "WAStartup failed!\n"); 		return ; 	}  	ortp_init(); 	ortp_scheduler_init();  	rtp_session_mgr->rtp_session = rtp_session_new(RTP_SESSION_RECVONLY);  	rtp_session_set_scheduling_mode(rtp_session_mgr->rtp_session, 1); 	rtp_session_set_blocking_mode(rtp_session_mgr->rtp_session, 1); 	//rtp_session_set_blocking_mode(rtp_session_mgr->rtp_session, 0); 	rtp_session_set_local_addr(rtp_session_mgr->rtp_session, recv_ip, recv_port);  	rtp_session_enable_adaptive_jitter_compensation(rtp_session_mgr->rtp_session, TRUE); 	rtp_session_set_jitter_compensation(rtp_session_mgr->rtp_session, 40);  	rtp_session_set_payload_type(rtp_session_mgr->rtp_session, 34); 	rtp_session_set_recv_buf_size(rtp_session_mgr->rtp_session, recv_bufsize);  	rtp_session_mgr->timestamp = timestamp_inc; } 似乎好像是当数据大于65535时，还是要自己分片？

user: user-2
content: 在ortp中win_receive中还需要显示调用： rtp_session_set_recv_buf_size(rtp_session_mgr .rtp_session , recv_bufsize); 这里的recv_bufsize必须要比win_sender中 sended_bytes = rtp_session_send_with_ts (rtp_session_mgr .rtp_session ,                           ( uint8_t *) send_buffer,                            wrapLen,                           rtp_session_mgr.cur_timestamp ); 的wrapLen要大

user: user-0
content: 能够用TCP自己下个发送方案，自己实现大数据分片和组片，由于传输的距离用无线，并且距离不远，不知是否可行？
user-0 提问: 关于读取硬件设备的问题

回复:
user: user-0
content: 引用 1 楼 turingo 的回复:归根结底需要从MSDN中寻找答案，参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx ... 还有就是怎么获得\\\\.\\PHYSICALDRIVE0呢?好像只有一个获得卷的办法?

user: user-0
content: 引用 1 楼 turingo 的回复:归根结底需要从MSDN中寻找答案，参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx ... 请问,设备是什么? 我在网上找不到

user: user-0
content: 谢谢两位了......

user: user-1
content: http://technet.microsoft.com/en-us/sysinternals/bb896657 WinObj is a must-have tool if you are a system administrator concerned about security, a developer tracking down object-related problems, or just curious about the Object Manager namespace.  WinObj is a 32-bit Windows NT program that uses the native Windows NT API (provided by NTDLL.DLL) to access and display information on the NT Object Manager's name space. Winobj may seem similar to the Microsoft SDK's program of the same name, but the SDK version suffers from numerous significant bugs that prevent it from displaying accurate information (e.g. its handle and reference counting information are totally broken). In addition, our WinObj understands many more object types. Finally, Version 2.0 of our WinObj has user-interface enhancements, knows how to open device objects, and will let you view and change object security information using native NT security editors.

user: user-2
content: 归根结底需要从MSDN中寻找答案，参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx  引用 楼主 qilinno 的回复:请问下，我刚刚看了用API直接读取磁盘的指定簇的问题，可是不太明白。 应该怎么获得像\\\\.\\PHYSICALDRIVE0的东西呢？ 毕竟我在用的时候只是拿来后直接使用的，万一我不想读第一块硬盘，想读第二块硬盘应该怎么办呢？ 所以，有没有什么办法能够直接获得计算机上有哪些硬盘以及他们的名字（就是像\\\\.\\PHYSICALDRIVE0的东西）这类的东西呢，就像获得磁盘上的卷一样 谢谢大神!
user-0 提问: 函数调用老是error C2065: 'getmax' : undeclared identifier怎么办

回复:
user: user-1
content: #include <stdio.h> #include <math.h>                                                  //预处理 /*  *  *	项目：任意输入一个4位自然数，调用函数输出该自然数的各位数字组成的最大数。  *	  *  */ void getmax(int nums2[]); int main() {	 int number,nums[4],numsmax; printf("请输入一个4位自然数"); scanf("%d",&number); nums[3]=number/1000; nums[2]=number/100%10; nums[1]=number/10%10; nums[0]=number%10; for (int i=0;i<4;i++) { printf("%d",nums[i]);  } getmax(nums); printf("%d",numsmax);  return 0; } void getmax(int nums2[4]) {	 int numsmax; for (int i=0;i<4;i++) { for (int j=1;j<4;j++) { if (nums2[i]>nums2[j]) { numsmax=nums2[i]; } } } }  引用 楼主 u013096814 的回复:#include <STDIO.H> #include <MATH.H>                                                  //预处理 /*  *  *	项目：任意输入一个4位自然数，调用函数输出该自然数的各位数字组成的最大数。  *	  *  */ main() {	 	int number,nums[4],numsmax; 	printf("请输入一个4位自然数"); 	scanf("%d",&number); 	nums[3]=number/1000; 	nums[2]=number/100%10; 	nums[1]=number/10%10; 	nums[0]=number%10; 	for (int i=0;i<4;i++) 	{ 		printf("%d",nums[i]); 	 	} 	getmax(nums); 	printf("%d",numsmax); 	  } void getmax(int nums2[4]) {	int nums2[]; 	int numsmax; 	for (int i=0;i<4;i++) 	{ 		for (int j=1;j<4;j++) 		{ 			if (nums2[i]>nums2[j]) 			{ 				numsmax=nums2[i]; 			} 		} 	} }   函数调用的时候老显示 error C2065: 'getmax' : undeclared identifier

user: user-2
content: 申明原型先。

user: user-3
content: void getmax(int nums2[4])； //在main函数前面加上这句！

user: user-4
content: 未申明先使用是大忌! 雖然這次你學會了,但更要學的是錯誤報告.   'getmax' : undeclared identifier  'getmax'中就是變量或函数名, undeclared identifier 意思就未申明  以後見到這種報告就很容易解決

user: user-5
content: 参考1楼，简洁明了

user: user-0
content: 引用 4 楼 user-8 的回复:getmax放在main的前面 或者在include之后定义getmaz函数原型谢了哈哈哈哈

user: user-0
content: 引用 2 楼 mujiok2003 的回复:申明原型先。谢了哈哈哈，做出来了

user: user-6
content: 引用 4 楼 user-8 的回复:getmax放在main的前面 或者在include之后定义getmaz函数原型+1

user: user-7
content: 引用 4 楼 user-8 的回复:getmax放在main的前面 或者在include之后定义getmaz函数原型+1

user: user-8
content: getmax放在main的前面 或者在include之后定义getmaz函数原型
user-0 提问: VS2013

回复:
user: user-1
content: 引用 3 楼 mujiok2003 的回复:#define _CRT_SECURE_NO_WARNINGS  #include <string.h> #define _CRT_SECURE_NO_WARNINGS  #include <string.h>  int main(void) { 	char pi[5]; 	strcpy(pi, "oo"); 	return 0; }

user: user-1
content: #define _CRT_SECURE_NO_WARNINGS  #include <string.h>

user: user-2
content: http://bytes.com/topic/c/answers/817998-strcpy_s-strcpy

user: user-3
content: strcpy_s(p[1], 3, "oo");  //ps:char *p[5],你指针数组好像没有给每个指针分配空间的吧！
user-0 提问: 关于VC做键盘扫描仿真的问题，求教啊！！！谢谢

回复:
user: user-0
content: 引用 2 楼 adeng1919 的回复:额，老家有模拟键盘的源码，VC++的，可惜最近不回老家……  [quote=引用 楼主 u013095810 的回复:] 需要把8048进行键盘扫描时的数据流向动态展示出来。 数据流向是什么概念？[/quote]   对键盘键的扫描的确定是8048进行的，以及确定了它会把数据送往哪里。 能不能大体说下思路。因为是仿真，要对扫描过程进行展示，所以程序可能不像简单的进行扫描那么简单。谢谢哈。

user: user-0
content: [quote=引用 1 楼 turingo 的回复:] 这个看起来应该用Adobe Flash来做会比较合适吧。  但是要求是要用VC。还是谢谢哈。

user: user-1
content: 额，老家有模拟键盘的源码，VC++的，可惜最近不回老家……  引用 楼主 u013095810 的回复:需要把8048进行键盘扫描时的数据流向动态展示出来。 数据流向是什么概念？

user: user-2
content: 这个看起来应该用Adobe Flash来做会比较合适吧。  引用 楼主 u013095810 的回复:大神们，我需要用VC做一个键盘扫描的仿真程序，需要把8048进行键盘扫描时的数据流向动态展示出来。该如何做啊，给点建议。！还有我想把PC标准键盘用控件画出来，需要按那个键就用鼠标去点，然后就动态显示键盘扫描的数据流向。这样能做到不，怎么做啊！谢谢朋友些。
user-0 提问: 请教一下这个小问题（青年大赛求平均值）。

回复:
user: user-1
content: #include <stdio.h>  /* 青年歌手参加歌曲大奖赛，有10个评委打分，试编程求选手的平均得分（去掉一个最高分和一个最低分） */ int main(void){     float a[10]={0.0}, min, max, average, sum=0;     int i;       for (i = 0 ; i < 10 ; i++)         scanf("%f", &a[i]); //这里应该是%f不是%d       min = a[0];     for (i = 1 ; i < 10 ; i++)         if (a[i] < min)             min = a[i];       max = a[0];     for (i = 1 ; i < 10 ; i++)         if (a[i] > max)             max = a[i];       for (i = 0 ; i < 10 ; i++)         sum += a[i];     sum = sum - min - max;     average = sum / 8.0;     printf("Average : %f \n", average);       return 0; } 你的scanf()函数给的类型不对

user: user-2
content: for (i = 0 ; i < 10 ; i++)              if( scanf("%f", &a[i]) != 1 )      {          i--;      }
user-0 提问: AVI文件索引修复的问题

回复:
user: user-1
content: 个人猜测，遍历文件，要不然怎么可能弄出索引来？

user: user-0
content: 引用 楼主 zhehan54 的回复:现有损坏的AVI文件 文件头可以加上去 但是文件的索引不知道怎么加！ 有一个软件叫做DivFix的 可以修复索引，但是不知道它怎么做到的 ！！  有过经验的麻烦帮忙一下！！ 在另外一个帖子你也回复我了 谢谢！ 我看了下  不知道你说的这个跟AVI的索引有什么关系！！ 能详细的说说吗？ 谢谢了！！

user: user-2
content: http://technet.microsoft.com/zh-cn/bb896645
user-0 提问: C语言入门刚遇到的小疑问。

回复:
user: user-1
content: 楼上说的很清楚了。 补充一下： %3.0f的意思是：浮点型输出共占3位，其中小数点后占0位，不足3位的左边补上空格 %6.1f的意思是：浮点型输出共占6为，其中小数点后占1位，不足6位的左边补上空格   0 -17.8  20  -6.7  40   4.4  60  15.6  80  26.7 100  37.8 120  48.9 140  60.0 160  71.1 180  82.2 200  93.3 220 104.4 240 115.6 260 126.7 280 137.8 300 148.9  算上小数点，你的摄氏度的输出最长为5位（148.9），左边还会有一个空格，所以，不同tab(\t)也能有分隔的效果。  另外，%3.0f\t%6.1f是没有问题的。

user: user-0
content: 引用 3 楼 wusuopuBUPT 的回复:楼上说的很清楚了。 补充一下： %3.0f的意思是：浮点型输出共占3位，其中小数点后占0位，不足3位的左边补上空格 %6.1f的意思是：浮点型输出共占6为，其中小数点后占1位，不足6位的左边补上空格   0 -17.8  20  -6.7  40   4.4  60  15.6  80  26.7 100  37.8 120  48.9 140  60.0 160  71.1 180  82.2 200  93.3 220 104.4 240 115.6 260 126.7 280 137.8 300 148.9  算上小数点，你的摄氏度的输出最长为5位（148.9），左边还会有一个空格，所以，不同tab(\t)也能有分隔的效果。  另外，%3.0f\t%6.1f是没有问题的。  谢谢了大哥 自己不够仔细

user: user-0
content: 引用 2 楼 KenZhang1031 的回复:"%3.0f%\t6.1f\n"不会有问题 不好意思，打错了，是"%3.0f\t%6.1f\n"。  谢谢了大哥 可能是我眼神不对打错了 现在知道了

user: user-2
content: "%3.0f%\t6.1f\n"不会有问题 不好意思，打错了，是"%3.0f\t%6.1f\n"。

user: user-2
content: \t只是一个制表符，就跟你在键盘上打了Tab按键一样，只是隔开而已，对结果没有任何影响。 再者，第一个有个空格格开了，第二个你不打\t，用空格也行啊；第一个用\t也不会有问题，你说的第一个加了\t有错误，那是你加的地方不对啊。"%3.0f%\t6.1f\n"不会有问题。
user-0 提问: 考研题 待解决 

回复:
user: user-1
content: 引用 楼主 u013108570 的回复:一·（1）写出该算法的用途 输入：多行文本 输出：若干行文本及其行号 变量：buf用于保存若干行文本及其行号 1）X﹤—0，i﹤—1 2）从键盘读入一行文本，存入line 3)n﹤—求line中文本字符个数 4）if n=0  then 转向第13）步 5）if n>X  then  6)         清空buf 7)         X﹤—n 8)         将line中的文本及其行号i添加到buf 9) if n=x  then 10)        将line中的文本及其行号i添加到buf 11) i﹤—i+1 12)重复执行第2）到11）步 13）输出buf的所以内容 （2）请用C语言编制程序，实现该算法  二 当前路径下有文件file.txt里面的内容 “The best way to learn is to walk through and build some useful code”  #include <stdio.h> # define N 10 void main() {    FILE *fp;    char ch,str[N];    int k=0;     fp=fopen("file.txt","r");    while(k<N){    ch=fgetc(fp);    if(ch==EOF)  break;    if(ch!='')  str[K++]=ch+1;            }    str[k]='\0';    fclose(fp);    puts(str);  } 输出结果是： 三 #include <stdio.h> #include <stdio.h> void main() {   int i=0,*p;      p=(int*)malloc(sizeof(int)*4);   while(i<4)   scanf("%d",p + i++);   i=*p;   *p=*(P+2);   *(p+2)=i;   i=p[1];   p[1]=p[3];   p[3]=i;   for(i=0;i<4;i++)   printf("%d\t",p[i]); }    设输入为12 23 34 45，请写出程序的运行结果。 四、 #include <stdio.h> void main（） {    char ch,s[]="C Program";        ch=getcher();    printf("%d\n%s\n",fun(s,ch),s); } int fun(char *str,char ch) {    char *p;    int n=0;        for(p=str;*p!='\0';p++){     if(*p!=ch)  *str++=*p;     else        n++;       }    *str='\0';    return n;  } 若程序运行时输入一个字符：r,请写出程序运行的结果 若再次运行程序，并输入一个字符：m,请写出程序运行的结果  哦操,考研就考这种题? 尼玛要不是万恶的政治和英语 分分钟考进去啊

user: user-2
content: 围观我也不太懂

user: user-3
content: 引用 3 楼 u013108570 的回复:好心人帮帮忙吧 ，我是跨专业，实在不懂。运行处错误 把你的代码贴出来， 哪里不会问哪里。

user: user-4
content: 第二题会因为数组越界报错。

user: user-4
content: 第一题程序的作用是将多行文本中文本字符个数的行输出

user: user-5
content: 一： #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { 	size_t x = 0; 	size_t n ; 	int i = 1; 	char buf[4096]; 	char tmp[1024]; 	FILE* pf; 	 	if ((pf=fopen("../t/main.cpp", "r")) == NULL) 		return 1; 	while(fgets(tmp,1024,pf)!= NULL){ 		fputs(tmp,stdout); 		i++; 		n = strlen(tmp); 		if(n>x){ 			x = n; 			sprintf(buf , "%d: %s",i-1,tmp); 		}else if (n==x){ 			sprintf(buf, "%s%d: %s",buf, i-1 , tmp); 		}else{ 			continue; 		}	 	} 	fclose(pf); 	printf(buf); 	return 0; }剩下3题自己运行下不就知道了

user: user-6
content: 都是要考研的人了，还在论坛找答案，如果直接给了你答案，让其他本科的人情何以堪。

user: user-7
content: 都是要考研的人了，还在论坛找答案，如果直接给了你答案，让其他没文凭的人情何以堪。

user: user-0
content: 好心人帮帮忙吧 ，我是跨专业，实在不懂。运行处错误

user: user-8
content: 都是准备考研的牛人了！ 自己先动手写写，做做，想想，敲敲 然后把问题细化，一个一个的来！
user-0 提问: C语言中文件夹遍历的问题

回复:
user: user-0
content: 这个麻烦大家帮忙看看！！ 挺捉急 的！！

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

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

回复:
user: user-1
content: 引用 4 楼 mcmay 的回复:[quote=引用 2 楼 max_min_ 的回复:] [quote=引用 1 楼 KenZhang1031 的回复:] fread和fwrite的函数原型第一个参数都是空指针，所以任何指针类型都可以当第一个参数，你的pp[index]和pt[index]都不是指针，而是INFO的结构，改成&pp[index]和&pt[index]试试。  不是空指针！ 第一个参数 是void型指针！也就是接受任意类型的指针而已！  fwrite( &pp[index], sizeof (INFO),1, fp); [/quote] 谢谢，max_min_版主，不过我向KenZhang1031请教的3楼的问题我也想同样向你请教。[/quote] pp[index]是取了里面的内容的不是指针！

user: user-0
content: 引用 6 楼 max_min_ 的回复:[quote=引用 4 楼 mcmay 的回复:] [quote=引用 2 楼 max_min_ 的回复:] [quote=引用 1 楼 KenZhang1031 的回复:] fread和fwrite的函数原型第一个参数都是空指针，所以任何指针类型都可以当第一个参数，你的pp[index]和pt[index]都不是指针，而是INFO的结构，改成&pp[index]和&pt[index]试试。  不是空指针！ 第一个参数 是void型指针！也就是接受任意类型的指针而已！  fwrite( &pp[index], sizeof (INFO),1, fp); [/quote] 谢谢，max_min_版主，不过我向KenZhang1031请教的3楼的问题我也想同样向你请教。[/quote] pp[index]是取了里面的内容的不是指针！[/quote] 是的，后来想想，用普通数组的指针所引用的也的确是数组元素本身而非其指针。谢谢！

user: user-0
content: 引用 5 楼 KenZhang1031 的回复:引用谢谢，我试了，还真行！但是 INFO * pp不是已经就等于&data[0]了吗？它本来就是指针的啊，怎么还要再用&pp[index]呢？而且函数processdata(INFO * pp, int n, FILE *fp)里面的参数INFO *pp也明显就是指针啊，怎么也还要采取&pt[index]的形式，fread()才认呢？请指教！ pp是指针，但是pp[index]不是。这样说吧，你定义了数组data[SIZE]，里面每个元素都是一个你定义的INFO结构，指针pp指向这个数组的首地址，因此pp[index]表示数组里的第index个元素，也就是表示的是数组里第index个的INFO结构数据，所以不是指针，加上&后取地址后才是。 确实如此，后来想通了，谢谢！

user: user-2
content: 引用谢谢，我试了，还真行！但是 INFO * pp不是已经就等于&data[0]了吗？它本来就是指针的啊，怎么还要再用&pp[index]呢？而且函数processdata(INFO * pp, int n, FILE *fp)里面的参数INFO *pp也明显就是指针啊，怎么也还要采取&pt[index]的形式，fread()才认呢？请指教！ pp是指针，但是pp[index]不是。这样说吧，你定义了数组data[SIZE]，里面每个元素都是一个你定义的INFO结构，指针pp指向这个数组的首地址，因此pp[index]表示数组里的第index个元素，也就是表示的是数组里第index个的INFO结构数据，所以不是指针，加上&后取地址后才是。

user: user-0
content: 引用 2 楼 max_min_ 的回复:[quote=引用 1 楼 KenZhang1031 的回复:] fread和fwrite的函数原型第一个参数都是空指针，所以任何指针类型都可以当第一个参数，你的pp[index]和pt[index]都不是指针，而是INFO的结构，改成&pp[index]和&pt[index]试试。  不是空指针！ 第一个参数 是void型指针！也就是接受任意类型的指针而已！  fwrite( &pp[index], sizeof (INFO),1, fp); [/quote] 谢谢，max_min_版主，不过我向KenZhang1031请教的3楼的问题我也想同样向你请教。

user: user-0
content: 引用 1 楼 KenZhang1031 的回复:fread和fwrite的函数原型第一个参数都是空指针，所以任何指针类型都可以当第一个参数，你的pp[index]和pt[index]都不是指针，而是INFO的结构，改成&pp[index]和&pt[index]试试。 谢谢，我试了，还真行！但是 INFO * pp不是已经就等于&data[0]了吗？它本来就是指针的啊，怎么还要再用&pp[index]呢？而且函数processdata(INFO * pp, int n, FILE *fp)里面的参数INFO *pp也明显就是指针啊，怎么也还要采取&pt[index]的形式，fread()才认呢？请指教！

user: user-1
content: 引用 1 楼 KenZhang1031 的回复:fread和fwrite的函数原型第一个参数都是空指针，所以任何指针类型都可以当第一个参数，你的pp[index]和pt[index]都不是指针，而是INFO的结构，改成&pp[index]和&pt[index]试试。  不是空指针！ 第一个参数 是void型指针！也就是接受任意类型的指针而已！  fwrite( &pp[index], sizeof (INFO),1, fp);

user: user-2
content: fread和fwrite的函数原型第一个参数都是空指针，所以任何指针类型都可以当第一个参数，你的pp[index]和pt[index]都不是指针，而是INFO的结构，改成&pp[index]和&pt[index]试试。
user-0 提问: C,五子棋，想实现电脑智能算法，高价悬赏!!!!!!

回复:
user: user-1
content: 这个需要一个很大的库吧，存储五子棋高手的走步，模仿人的思维

user: user-0
content: 这个是自己写的，在linux终端上运行的

user: user-2
content: lz你的UI是用什么画的

user: user-3
content: 这个代码应该开源的吧？

user: user-0
content: 好吧！！！！！！

user: user-4
content: 这里几句话说不清。我以前用VC写过一个五子棋程序，带有禁手功能的，模仿黑石的界面，可以设置搜索深度，太久找不到源代码了。不过我当时是参考了一本书《PC游戏编程(人机博弈)》。你可以找这本书看看。

user: user-5
content: AI不好写  看牛人
user-0 提问: sscanf格式请教

回复:
user: user-0
content: 多打了个&，不好意思。不过二位给了我C++的写法，收获不小。

user: user-1
content: cout << setprecision(10) << "dXCoordinate = " << dXCoordinate << endl; 这样显示效果更好

user: user-1
content: 引用 1 楼 fyzhuhui 的回复:我这样写的： sscanf(buffer,"%lf%lf%lf",&dXCoordinate,&dYCoordinate,&dZCoordinate); 或者 sscanf(buffer,"     %lf         %lf        %lf",&dXCoordinate,&dYCoordinate,&dZCoordinate); 都是只能读出来第一个。  我试了，都能读出来：     char buffer[]="     0.148800001         0.200489998         0.155780002";     double dXCoordinate, dYCoordinate, dZCoordinate;      sscanf(buffer,"%lf%lf%lf",&dXCoordinate,&dYCoordinate,&dZCoordinate);      cout << "dXCoordinate = " << dXCoordinate << endl;     cout << "dYCoordinate = " << dYCoordinate << endl;     cout << "dZCoordinate = " << dZCoordinate << endl;  输出： dXCoordinate = 0.1488 dYCoordinate = 0.20049 dZCoordinate = 0.15578

user: user-0
content: 我这样写的： sscanf(buffer,"%lf%lf%lf",&dXCoordinate,&dYCoordinate,&dZCoordinate); 或者 sscanf(buffer,"     %lf         %lf        %lf",&dXCoordinate,&dYCoordinate,&dZCoordinate); 都是只能读出来第一个。
user-0 提问: 编写一个函数，对输入的整数k输出它的全部素数因子。 例如：当k＝126时，素数因子为：2，3，3，7。 要求按如下格式输出：126 = 2 * 3 * 3 * 

回复:
user: user-0
content: 引用 7 楼 KenZhang1031 的回复:如果输入负数，结果要怎样显示才算正确？ 加个ABS应该没问题

user: user-0
content: #include<stdio.h> //预处理命令 #include<math.h>  //预处理命令 void foo(int n) { 	int i; 	for(i = 2; i < n ; i++) 	{ 		if(n % i == 0)  		{ 			printf("%d*", i); 			foo(n / i); 			return; 		} 	} 	printf("%d\n",n); } int main() { 	int t; 	printf("请任意输入一个整数："); 	scanf("%d",&t); 	printf("%d=",t); 	foo(t); }

user: user-0
content: 引用 2 楼 KenZhang1031 的回复:#include "stdio.h" #include "math.h"  unsigned int GetPrimeFactor(unsigned int uiNum) { 	unsigned int i; 	unsigned int uiSqrt = (unsigned int)sqrt((float)uiNum);  	for(i = 2; i < uiSqrt; i++) 	{ 		if(uiNum % i == 0) 		{ 			return i; 		} 	}  	return uiNum; }   void main(void) { 	int iSrc = 126; 	unsigned int uiSrc = abs(iSrc); 	unsigned int uiPrime;  	printf("%d = ", iSrc); 	if(iSrc < 0) 	{ 		printf("-"); 	} 	while(uiSrc) 	{ 		uiPrime = GetPrimeFactor(uiSrc); 		uiSrc /= uiPrime; 		printf("%d", uiPrime); 		if(uiSrc != 1) 		{ 			printf(" * "); 		} 		else 		{ 			printf("\n"); 			break; 		} 	}  	getchar(); } 无论iSrc是正数还是负数都可以输出。你可以修改成使用例如scanf输入数据方式的。 我写了个很简单的

user: user-1
content: 如果输入负数，结果要怎样显示才算正确？

user: user-1
content: 个人认为，递归尽量不要用。用迭代好点。

user: user-0
content: 引用 2 楼 KenZhang1031 的回复:#include "stdio.h" #include "math.h"  unsigned int GetPrimeFactor(unsigned int uiNum) { 	unsigned int i; 	unsigned int uiSqrt = (unsigned int)sqrt((float)uiNum);  	for(i = 2; i < uiSqrt; i++) 	{ 		if(uiNum % i == 0) 		{ 			return i; 		} 	}  	return uiNum; }   void main(void) { 	int iSrc = 126; 	unsigned int uiSrc = abs(iSrc); 	unsigned int uiPrime;  	printf("%d = ", iSrc); 	if(iSrc < 0) 	{ 		printf("-"); 	} 	while(uiSrc) 	{ 		uiPrime = GetPrimeFactor(uiSrc); 		uiSrc /= uiPrime; 		printf("%d", uiPrime); 		if(uiSrc != 1) 		{ 			printf(" * "); 		} 		else 		{ 			printf("\n"); 			break; 		} 	}  	getchar(); } 无论iSrc是正数还是负数都可以输出。你可以修改成使用例如scanf输入数据方式的。 这个不懂，百度上是说平方根？ unsigned int uiSqrt = (unsigned int)sqrt((float)uiNum);

user: user-1
content: #include "stdio.h" #include "math.h"  unsigned int GetPrimeFactor(unsigned int uiNum) { 	unsigned int i; 	unsigned int uiSqrt = (unsigned int)sqrt((float)uiNum);  	for(i = 2; i < uiSqrt; i++) 	{ 		if(uiNum % i == 0) 		{ 			return i; 		} 	}  	return uiNum; }   void main(void) { 	int iSrc = 126; 	unsigned int uiSrc = abs(iSrc); 	unsigned int uiPrime;  	printf("%d = ", iSrc); 	if(iSrc < 0) 	{ 		printf("-"); 	} 	while(uiSrc) 	{ 		uiPrime = GetPrimeFactor(uiSrc); 		uiSrc /= uiPrime; 		printf("%d", uiPrime); 		if(uiSrc != 1) 		{ 			printf(" * "); 		} 		else 		{ 			printf("\n"); 			break; 		} 	}  	getchar(); } 无论iSrc是正数还是负数都可以输出。你可以修改成使用例如scanf输入数据方式的。

user: user-0
content: 求救。。。。
user-0 提问: c语言

回复:
user: user-1
content: //输入"",输出"" //输入"A",输出"A1" //输入"AA",输出"A2" //输入"AAABBBBCCCCCC",输出"A3B4C6" //输入"AAAAAAAAAAAAA",输出"A13" //输入字符串中不包含'0'..'9' #include <stdio.h> #include <string.h> char a[100]; char b[100]; char c[100]; char ch,ch1; int i,j,k,n; void pack(char *u) {     i=0;     j=0;     b[j]=0;     ch1=0;     n=0;     while (1) {         ch=u[i++];         if (0==ch) break;         if (ch1==0) {             ch1=ch;             n=1;             b[j++]=ch1;             continue;         }         if (ch1==ch) {             n++;         } else {             k=sprintf(b+j,"%d",n);             j+=k;             ch1=ch;             n=1;             b[j++]=ch1;         }     }     if (ch1) {         k=sprintf(b+j,"%d",n);         j+=k;     }     b[j]=0; } void unpack(char *p) {     c[0]=0;     while (1) {         k=sscanf(p,"%c%d%n",&ch,&n,&j);         if (k==2) {             p+=j;             for (i=0;i<n;i++) sprintf(c,"%s%c",c,ch);         } else break;     } } void main() {     strcpy(a,""             );pack(a);unpack(b);printf("[%s]=>[%s]=>[%s]\n",a,b,c);     strcpy(a,"A"            );pack(a);unpack(b);printf("[%s]=>[%s]=>[%s]\n",a,b,c);     strcpy(a,"AA"           );pack(a);unpack(b);printf("[%s]=>[%s]=>[%s]\n",a,b,c);     strcpy(a,"AAABBBBCCCCCC");pack(a);unpack(b);printf("[%s]=>[%s]=>[%s]\n",a,b,c);     strcpy(a,"AAAAAAAAAAAAA");pack(a);unpack(b);printf("[%s]=>[%s]=>[%s]\n",a,b,c); } //[]=>[]=>[] //[A]=>[A1]=>[A] //[AA]=>[A2]=>[AA] //[AAABBBBCCCCCC]=>[A3B4C6]=>[AAABBBBCCCCCC] //[AAAAAAAAAAAAA]=>[A13]=>[AAAAAAAAAAAAA]

user: user-2
content: #include<stdio.h> #include<string.h> void main(void){ 	char a[100] = {0}; 	char b[100] = {0}; 	int i,j=0,k,n,m=1; 	printf("enter the sentense\n"); 	gets(a); 	n=strlen(a); 	for(i=0;i<n;i++) 	{ 		if(a[i] == a[i+1]) 		{ 			m++;		 		} 		else 		{ 			k = m%10+48; 			b[j] = a[i]; 			b[j+1] = k; 			j+=2; 			m=1; 		} 	} 	printf("%s",b); } 你看看对不对？

user: user-0
content: 我在计算的时候迷茫了。 #include<stdio.h> #include<string.h> void main() { 	char a[100]; 	int i,n,m=1; 	printf("enter the sentense\n"); 	gets(a); 	n=strlen(a);     for(i=0;i<n;i++) 	{ 		if(a[i]==a[i+1]) 		{ 			m++; 		} 		else 		{ 			m=1; 			if(a[i+1]==a[i+2]) 			{ 			     m++; 			} 		} 	} 	printf("%d %c",m,a[i]); }

user: user-0
content: 没思路啊。帮个忙。

user: user-3
content: 楼主，这种问题就不用挂上去了吧