Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C程序编译告警的问题

回复:
user: user-1
content: fgets(buf,len,stdin)

user: user-2
content: 用gets_s 替代gets

user: user-3
content: gets是存在风险的，因为它不会检查输入的数据是否已经超过了缓存buffer的长度。比如  char buf[5]; gets(buf);  如果输入的字符串时hello，那么就会越界了。但是gets不会提示也不会截断输入的hello字符串；  建议使用fgets，如上面的代码，用fgets替换，  char buf[5]; fgets(buf, 5, stdin);  则输入hello，它会将hello截断，只将hell复制到buf里，并加上'\0' 建议编写一个小程序试一下，fgets也有另一个需要注意的，建议测试的能够发现。

user: user-4
content: int Getchar(charchar *A,int min,int max)//输入的字符串长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度         {             int B,C;        do{                 A[max]=B=C=0;             while((A[B++]=getchar())!='\n'&&B<max);             if(A[B-1]!='\n')while(getchar()!='\n'&&++C);                 else A[--B]=0;          if(C||B&&B<min)            printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);             }while(C||B<min);             return B;       }

user: user-4
content: http://blog.csdn.net/user-4/article/details/77422530 开头就有 Getchar()我自己写的 很好用
user-0 提问: 各位大神，我照着书打出来，怎么运行不了，究竟哪里出问题了

回复:
user: user-0
content: 感谢各位大神， 问题已解决

user: user-1
content: 只有个指针，没有给指针分配空间，就给指针成员变量赋值，所以错误。

user: user-2
content: 在main函数里，这句下面加上一句就可以了。 struct student *s; 加： s = malloc(sizeof(struct student)); 原因是你的是野指针操作，需要将s指向可读可写的内存区域，比如malloc申请的堆上空间；   我估计这不是书上的源码，因为这个错误比较明显；书上可能定义的时结构体变量而非指针。

user: user-3
content: 1 添加头文件 因为代码里使用了printf()函数，因此要添加stdio.h；又因为使用了strcpy()函数，因此要添加Windows.h #include <stdio.h> #include <Windows.h> 2 内存分配 因为代码中使用了自定义结构student的指针，但是没有对该指针分配内存。所以在定义*s时进行如下修改 struct student *s = new student(); 还需要在程序结尾处，即调用了display()函数之后，释放该分配的内存 delete s; 3 安全拷贝函数 代码中的strcpy()字符串拷贝函数容易导致溢出，所以要将其改为安全拷贝函数 strcpy_s(s->name, "sunyuhong"); 修改后的代码如下，VS2015+Windows10 64位，调试通过  #include "stdafx.h" #include <stdio.h> #include <Windows.h> struct student { int  rno; char name[20]; }; void display(struct student *st);   int main() { 	struct student *s = new student(); 	s->rno = 10; 	strcpy_s(s->name, "sunyuhong"); 	display(s); 	delete s; 	return 0; }  void display(struct student *st) { 	printf("\nrno=%d", st->rno); 	printf("\nname=%s", st->name); }

user: user-4
content: int _"t"main(int argc, _TCHAR* argv[])

user: user-5
content: 不懂不懂不懂不懂不懂
user-0 提问: C语言编程，请教大神关于 光标移动 的语句理解问题

回复:
user: user-1
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-2
content: 查到部分资料说coord是结构体，但是前面也没有结构体变量的定义，在这里使用是什么意思？ 有的，在头文件里。 SetConsoleCursorPosition函数作用是什么？ 设置(set)控制台(console)光标(cursor)位置(position) GetStdHandle函数和STD_OUTPUT_HANDLE变量是什么意思？ 获取(get)标准(standard,std)句柄(handle),标准(std)输出(output)句柄(handle)
user-0 提问:  while循环判断条件为阻塞函数的情况

回复:
user: user-0
content: 最后，再结帖之前，把这个问题解决了吧(同事看了代码之后告诉我的)。 1：服务器通过send函数将数据向socket接口发送，在发送结束后将socket接口关闭(close)。  2：客户端用while循环去接收服务器发送过来的的数据，在接收完所有数据后，本来是会阻塞在while循环那里的(因为while循环的判断条件是recv的阻塞模式)，但是由于服务器在将文件发送完毕后，主动断开连接。所以导致客户端在接收完所有数据后，recv在收到服务器断开信息后，会返回一个0，这样就跳出这个循环。  3：希望将来有人遇到相同问题能够快速解决。

user: user-1
content: 服务器的：send_response(sock_control, 226);	// 发送应答码 226（关闭数据连接，请求的文件操作成功） 客户端的：while ((num_recvd = recv(sock_data, buf, MAXSIZE, 0)) > 0)  不知道具体的 它注释说的是    关闭数据连接   那么客户端的返回值应该是0  所以跳出循环

user: user-0
content: 对，这两个判断是在同一个函数中完成的

user: user-1
content: 再弄个线程就可以了吧 那俩判断是放一个函数里面的么?

user: user-0
content: 回复一楼一下(第一次用，不知道怎么回复。。。)，服务器和客户端都有两个socket接口，而且两个socket接口是不同的，一个用于传输控制消息，一个用于传送数据的。主要是为了避免客户端无法识别到底是控制消息还是数据消息。

user: user-0
content: 对滴对滴，这就是别人写的ftp程序，我看的有点不明白，不过运行的时候，好像也没出什么错，所以就准备好好分析一下这个程序，看到这里就看不懂了。

user: user-2
content: 有种东东叫非阻塞IO，参考：  无阻塞的设置方法 方法一:fcntl      //文件控制函数 int flag; if (flag = fcntl(fd, F_GETFL, 0) <0)      perror("get flag"); flag |= O_NONBLOCK; if (fcntl(fd, F_SETFL, flag) < 0)     perror("set flag");  方法二:ioctl       //设备控制接口函数 int b_on = 1; ioctl (fd, FIONBIO, &b_on);  即便如此，这种设计不合理吧，虽然有点像FTP协议的方式。 不同socket先后发送出数据，能保证接收端也是这样按顺序接收到数据么？ 更合理的方式应该只用一个socket，在发送数据前的报文头上加上数据的字节数。
user-0 提问: 在VC中画图

回复:
user: user-1
content: easyx再好用，它也是二道贩子！ #pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {     PAINTSTRUCT ps;     HDC hdc;     HFONT hfont,ohfont;     RECT r;     COLORREF oc;      switch(message) {     case WM_CLOSE://按Alt+F4退出         PostQuitMessage(0);         break;     case WM_PAINT:         BeginPaint(hWnd, &ps);         hdc = ps.hdc; // the device context to draw in         GetClientRect(hWnd, &r); // Obtain the window's client rectangle         hfont = CreateFont(200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体");         ohfont=(HFONT)SelectObject(hdc,hfont);         oc=SetTextColor(hdc,0x00C080FF);         SetBkMode(hdc, TRANSPARENT);         TextOut(hdc,r.left+r.right/2-600, r.top+r.bottom/2-100,"最短画图程序",12);         SelectObject(hdc,ohfont);         SetTextColor(hdc,oc);         DeleteObject(hfont);         EndPaint(hWnd, &ps);         break;     default:         return DefWindowProc(hWnd, message, wParam, lParam);     }     return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {     MSG msg             = {0};     WNDCLASS wc         = {0};     HBRUSH hbrh;     hbrh=CreateSolidBrush(0x00000000);     wc.lpfnWndProc      = WndProc;     wc.hInstance        = hInstance;     wc.hbrBackground    = hbrh;     wc.lpszClassName    = "minwindowsapp";     wc.hCursor          = LoadCursor(NULL,IDC_ARROW);     if (0==RegisterClass(&wc)) return 1;      if (NULL==CreateWindow(wc.lpszClassName,                         "Minimal Windows Application",                         WS_POPUP|WS_VISIBLE,                         0,                         0,                         GetSystemMetrics(SM_CXSCREEN),                         GetSystemMetrics(SM_CYSCREEN),                         0,                         0,                         hInstance,                         NULL))         return 2;      while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {         DispatchMessage( &msg );     }     DeleteObject(hbrh);     return 0; }

user: user-2
content: 引用 5 楼 u011367219 的回复:[quote=引用 3 楼 ooolinux的回复:][quote=引用 2 楼 u010165006 的回复:] 百度EasyX。  看它的说明和示例。[/quote] easyx是真的好用，不光是画图的函数，而且支持各种编译器(新版的不知道)。官网也有很多示例代码和教程[/quote]  支持各种编译器不了解，支持VC各个版本是有。

user: user-3
content: 引用 3 楼 ooolinux的回复:[quote=引用 2 楼 u010165006 的回复:] 百度EasyX。  看它的说明和示例。[/quote] easyx是真的好用，不光是画图的函数，而且支持各种编译器(新版的不知道)。官网也有很多示例代码和教程

user: user-4
content: 下个插件头文件 在CSDN下载里：

user: user-2
content: 引用 2 楼 u010165006 的回复:百度EasyX。  看它的说明和示例。

user: user-2
content: 百度EasyX。

user: user-5
content: 用 Turbo C 2.0 或 Borland C++
user-0 提问: 写程序的时候遇到一个小问题

回复:
user: user-0
content: ！

user: user-1
content: for （i = 0； i < 4; i++)     if (a[i] == 0)         putchar('N');  遍历数组，然后比较，输出

user: user-0
content: 有一个int a[4]  如果函数里面是0的话 则输出N  这个怎么实现呀

user: user-0
content: 2.用for循环 大约是  a = 123； for（a; a>0; a/10) ........ 为啥是无限次循环呢   3.有什么资料是介绍sort之类有用的函数的书 根据知识点练习的题也行啊

user: user-1
content: for（a; a>0; a/10) 这个for退出条件是a，但是a一直是123，因为第三个循环表达式没有改变a的值。 改成： for（a; a>0; a = a/10) 排序，建议先从冒泡和选择，插入，合并，快排这些排序方法学起吧。 网上有很多这些算法的描述和讲解，甚至是排序代码

user: user-2
content: 引用 2 楼 hou09tian 的回复:for循环应该没问题，不会死循环啊 http://blog.csdn.net/hou09tian/article/details/77001685 这个帖子是介绍for循环的，希望能帮助到你 看错了，for循环还是有问题for循环里面的“表达式语句”改为a=a/10

user: user-2
content: for循环应该没问题，不会死循环啊 http://blog.csdn.net/hou09tian/article/details/77001685 这个帖子是介绍for循环的，希望能帮助到你
user-0 提问: 帮助完成一下行列转换的函数吧!谢谢!

回复:
user: user-1
content: 这要用到矩阵的知识吧

user: user-2
content: 有偿提供帮助。QQ511606848

user: user-0
content: 谢谢各位高手,没有能帮助我的哥哥吗?
user-0 提问: 用C语言获取本机硬件的网卡MAC地址

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/socket.h> #include <netinet/in.h> #include <net/if.h>  int main(int argc, char *argv[]) { 	struct ifreq ifreq; 	int sock = 0; 	char mac[32] = "";  	if(argc < 2){ 		printf("Usage: ./main eth0"); 		return 1; 	}  	sock = socket(AF_INET,SOCK_STREAM,0); 	if(sock < 0) 	{ 		perror("error sock"); 		return 2; 	}  	strcpy(ifreq.ifr_name,argv[1]); 	if(ioctl(sock,SIOCGIFHWADDR,&ifreq) < 0) 	{ 		perror("error ioctl"); 		return 3; 	}  	int i = 0; 	for(i = 0; i < 6; i++){ 		sprintf(mac+3*i, "%02X:", (unsigned char)ifreq.ifr_hwaddr.sa_data[i]); 	} 	mac[strlen(mac) - 1] = 0; 	printf("MAC: %s\n", mac);  	return 0; } Linux下获取网卡的MAC地址

user: user-2
content: 百度有不少 你可以去试试
user-0 提问: 怎样确定一个数能被0.5整除？

回复:
user: user-0
content: 谢谢你---感谢了！！！

user: user-1
content: http://blog.csdn.net/zhagoodwell/article/details/55051301

user: user-0
content: 我要的是高精度～不是一个double就可以解决的

user: user-2
content: #include <stdio.h> using namespace std; int main(void) { 	double a; 	scanf_s("%lf", &a); 	int b(2*a); 	if (a * 2 - b) 	{ 		printf("%s", "buneng"); 	} 	else 		printf("%s", "neng"); 	return 0; } 。。写的比较粗糙，大概就这么个感觉吧

user: user-3
content: 0.5有整除的概念么? 除以0.5 就是乘以2 乘以2 怎么判断余数 ??

user: user-4
content: 建议把被除数和除数都同时扩大10倍，然后首先看整数部分能否是5个倍数，然后若是5的倍数，再看小数部分是否小于1E-6,如果小于，则认为是能整除0.5

user: user-0
content: 能不能编程给我？C语言～

user: user-5
content: 精度有限 用字符串吧  小数点后一位是0或者5 且 小数点后两位以后后面全为0即可整除
user-0 提问: c中栈的生长方向和buf的内存增长方向的比较

回复:
user: user-1

user: user-2
content: 所以呢, 楼主想得到什么答案, 或者什么结论?

user: user-3
content: 啥叫“栈”？

user: user-4
content: 感觉没错
user-0 提问: 函数可以返回一个本地的指针吗？

回复:
user: user-1
content: 你用的编译器太古老了

user: user-2
content: 这个帖子就是讨论函数返回局部变量指针的，希望对你有帮助 http://bbs.csdn.net/topics/392214962

user: user-3
content: 引用 2 楼 自信男孩的回复:[quote=引用 1 楼 qq_38204686 的回复:] 上面相当于返回一个变量 *new..=*ppi  *ppi没了也没关系 下面返回的是变量的地址 *new..=&pi    pi没了可就出问题了  所以下面的有警告 我的编译器输出都有问题  pi都销毁了 输出怎么可能正常呢 第一个程序，返回局部变量得到的值是未定义的。再说函数调用结束，函数内的变量都会被释放，那么返回函数里的变量地址有什么意义，变量已经被释放，空间可能被其他函数调用，那么原有的变量可能会被重新占用和赋值，所以是未定义的，当然，如果未被使用，这就是可能得到你想要的值。 第二个函数也是一样的。 建议不要返回局部变量，如果想返回局部变量指针，建议将该指针指向堆上的内存空间，即用malloc或者new申请的内存空间。 [/quote] 学习了..

user: user-4
content: 我觉得真的有必要普及一下这篇文章： 【译制】每个 C 程序员都应知道的关于未定义行为的那点事

user: user-5
content: 引用 1 楼 qq_38204686 的回复:上面相当于返回一个变量 *new..=*ppi  *ppi没了也没关系 下面返回的是变量的地址 *new..=&pi    pi没了可就出问题了  所以下面的有警告 我的编译器输出都有问题  pi都销毁了 输出怎么可能正常呢 第一个程序，返回局部变量得到的值是未定义的。再说函数调用结束，函数内的变量都会被释放，那么返回函数里的变量地址有什么意义，变量已经被释放，空间可能被其他函数调用，那么原有的变量可能会被重新占用和赋值，所以是未定义的，当然，如果未被使用，这就是可能得到你想要的值。 第二个函数也是一样的。 建议不要返回局部变量，如果想返回局部变量指针，建议将该指针指向堆上的内存空间，即用malloc或者new申请的内存空间。

user: user-3
content: 上面相当于返回一个变量 *new..=*ppi  *ppi没了也没关系 下面返回的是变量的地址 *new..=&pi    pi没了可就出问题了  所以下面的有警告 我的编译器输出都有问题  pi都销毁了 输出怎么可能正常呢
user-0 提问: 指针变换的值问题

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:前面验证了int占4个字节 从&array[4]开始的4个单元中数据分别是 0x05, 0x06, 0x07, 0x08 如果是小端模式，作为一个int，这4个字节是 0x08070605 如果是大端模式，则为 0x05060708   刚才打错了 0x05060708, 我忘记了是大小端的问题，是 0x08070605;     你说的是对的！ 谢谢

user: user-1
content: 楼上正解 你输出16进制试一试  unsigned char array[8] = {1,2,3,4,5,6,7,8}; 	unsigned int *p = NULL; 	  	p = (unsigned int *)array; 	printf("\n %x \n", *(++p));

user: user-2
content: 前面验证了int占4个字节 从&array[4]开始的4个单元中数据分别是 0x05, 0x06, 0x07, 0x08 如果是小端模式，作为一个int，这4个字节是 0x08070605 如果是大端模式，则为 0x05060708
user-0 提问: 关于程序中数组的存储问题

回复:
user: user-1
content: http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组

user: user-2
content: 对于AB的选择，也有另外一种办法，那就是把int arr[100][100] = {1};这句注释和不注释，分别编译出可执行文件，看看大小的变化。 这些问题还是有多种办法分析的。但是，建议还是了解一下编译的原理。

user: user-2
content: 建议去了解一下变量在内存里存放的区域，已经变量的生命周期（生命周期跟这个问题关系不大，但是也是比较重要的知识点）。 在Linux下，内存分为内核区和用户区； 这个问题主要是在用户区，用户区又分为栈，堆，只读数据段，数据段，代码段等；建议去网上查阅一下详细信息； arr是全局变量，那就是不会在栈和堆上，栈上的空间时对于局部变量的，堆上的空间时通过malloc，new等申请的空间；  对于AB选项的选择，建议查阅一下编译的过程，可执行文件生成的过程

user: user-0
content: 引用 4 楼 ID870177103 的回复:首先这个还真不一定占用可执行文件的大小 因为源码文件会被编译成模块文件，访问模块的静态变量只需要模块的地址加上变量的偏移，就像访问局部变量只需要栈祯地址和加上变量偏移一样 只需要改变模块文件的大小描述，不需要增加额外信息，不过外部连接可能会不一样吧 因为模块变大了，运行时系统会分配更多内存 所以肯定会占用进程的内存大小 再者就是静态区是和模块绑定的，肯定不是栈上分配的，不过硬说是堆上分配的也不无道理，毕竟内存都来自全局堆   感觉本来还有点头绪了，听你这么一说，变复杂了，又混乱了。。。

user: user-3
content: 首先这个还真不一定占用可执行文件的大小 因为源码文件会被编译成模块文件，访问模块的静态变量只需要模块的地址加上变量的偏移，就像访问局部变量只需要栈祯地址和加上变量偏移一样 只需要改变模块文件的大小描述，不需要增加额外信息，不过外部连接可能会不一样吧 因为模块变大了，运行时系统会分配更多内存 所以肯定会占用进程的内存大小 再者就是静态区是和模块绑定的，肯定不是栈上分配的，不过硬说是堆上分配的也不无道理，毕竟内存都来自全局堆

user: user-4
content: 这个数组是定义在main函数之外的，属于全局变量，而且已经初始化，所以应该存在全局区，不属于堆栈，在编译的时候分配内存，运行时灭有调用，不占用进程空间或者可执行空间

user: user-0
content: 引用 2 楼 FanYiRanTeXi 的回复:这个数组是定义在main函数之外的，属于全局变量，而且已经初始化，所以应该存在全局区，不属于堆栈，在编译的时候分配内存，运行时灭有调用，不占用进程空间或者可执行空间   哦，应该是属于数据区的静态数据区吧； 如果调用了， 是占用的进程的栈空间是吧？

user: user-5
content: 那就AC了。 知道是栈内存，那就不是堆内存了。
user-0 提问: 求解:怎么才能遍历结构体指针

回复:
user: user-0
content: 7 楼 cfjtaishan 的回复:] 谢谢你了。我以后一定注意这个问题.这个代码的逻辑我已经弄顺了.可以的话.帮我看看我的两篇文章.总感觉有点问题

user: user-0
content: 已经解决麻烦大家了

user: user-1
content: #include <stdio.h> #include <stdlib.h>  #define MAX_SIZE 103 #define INIT_SIZE 5 typedef int Element;  typedef struct { 	Element *data; 	int length; 	int maxSize; }Sql_L;  int initArrayList(Sql_L *ArrayList ) { 	ArrayList->data = (Element *)malloc(sizeof(Element *)*INIT_SIZE); 	if(ArrayList->data == NULL) 	{ 		printf("初始化失败,程序即将推出!"); 		exit(0); 	} 	else 	{ 		ArrayList->length = 0; 		ArrayList->maxSize = INIT_SIZE;  		printf("初始化成功!"); 		return 1; 	} } /*@@@@1 int getLength()    */ int getLength(Sql_L *L) { 	return L->length;  }  int insertElement(Sql_L *L) { 	if(L->length >= L->maxSize) { 		/* add buffer space */ 		/* 		L->data = (Element *)realloc((INIT_SIZE + L->maxSize) * sizeof(Element)); 		L->maxSize += INIT_SIZE; 		*/ 		printf("容量已经满了,需要扩容了!"); 		return 0; 	} 	else 	{ 		int element;//初始化 与 不初始化的区别在哪里？ 		printf("请输入你要插入的数字:(选择的第一种很方式为追加到元素的尾部)"); 		scanf("%d", &element); 		printf("element的值位:%d",element); 		L->data[L->length++] = element; 		return 1; 	} } void prior(Sql_L *L) { 	int i;   	for(i = 0; i < L->length; i++) { 		printf("进入到这里面了里面的数值为:"); 		printf("%d\n",L->data[i]); 		printf("当前的长度为:%d\n",L->length);  	}  } int main() { 	Sql_L ArrayList; 	int length; 	int status; 	int insertElement_status; 	int backStatus = 1; 	status = initArrayList(&ArrayList); 	if(status) { 		printf("初始化成功!\n"); 	} 	while(backStatus) 	{ 		backStatus = insertElement(&ArrayList); 		prior(&ArrayList); 	}  	printf("遍历成功!"); 	return 0; }   程序里有多出逻辑错误，个人认为可以这样改一下； 详见上面的代码； 代码里注释不宜太多，多了反而会起反作用。注释本来是为了理解代码而加的，多了反而让代码的可读性变差，建议能通过代码表明逻辑的还是建议使用见名知义的变量和函数。这个还得慢慢来。

user: user-0
content: 大神 留个邮箱 单发你

user: user-0
content: 给自己动手丰衣足食的点个赞[/quote] 谢谢大神

user: user-2
content: 注释太多           。

user: user-3
content: 引用 4 楼 qq_27416233 的回复:已经解决麻烦大家了 给自己动手丰衣足食的点个赞

user: user-0
content: 自己顶一下，在线等 .我继续调调查查资料
user-0 提问: 编译报错

回复:
user: user-1
content: 你可能设置输出为lib而非exe了。

user: user-0
content: 不行，这个根本定不到位置

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

user: user-1
content: 引用 4 楼 qq_38829844 的回复:我要怎么看我设置的输出是exe还是lib，然后是lib的话怎么改为exe Options、Linker、Settings...、Output

user: user-2
content: 不清楚你用的是单独的bc编译器还是安装的Borland C++、C++Builder，后两者都附带tasm32汇编器。

user: user-0
content: 我用的bc编译器可以处理吗，不行的话要下载一个汇编器吗？

user: user-2
content: cod.asm这是汇编文件，用c++编译器不能编译的，要先用单独的汇编器生成obj。

user: user-0
content: 我要怎么看我设置的输出是exe还是lib，然后是lib的话怎么改为exe
user-0 提问: 已知M=3.6X+4.8Y+5.4Z-Q，Q为一定值，初始输入条件，约束条件：-0.2≤M≤0.2，且X、Y、Z均为大于等于0的整数，求解怎么编程输出x、y、z

回复:
user: user-0
content: 谢谢。我试试

user: user-1
content: 三重循环遍历 Q=27; for (X=0;X<=32767;X++)  for (Y=0;Y<=32767;Y++)  for (Z=0;Z<=32767;Z++)  {  M=3.6*X+4.8*Y+5.4*Z-Q;  if (-0.2<=M && M<=0.2) {   printf("%d,%d,%d\n",X,Y,Z);  } }

user: user-0
content: 如Q=27或30或32这样的数
user-0 提问: c问题

回复:
user: user-1
content: 同意楼上的，VS2015+Windows10 64位运行你的代码有问题 1 如果改成 	char *pa = (char*)&a[1]; 	printf(" 这两个打印的结果是多少,怎么算的..谢谢%x\n",pa-(char*)a); 输出的值是8，就是结构aa的大小。结构aa的大小为什么是8呢，这就涉及到结构的内存对齐问题了，请参考下面的文章 http://blog.csdn.net/hou09tian/article/details/74359172 2 如果改成 	A *pa = (char*)&a[1]; 此时的输出1。即此时以aa结构大小为基本单位。这就涉及到数组地址偏移问题了，请参考下面的文章 http://blog.csdn.net/hou09tian/article/details/75332577

user: user-2
content: pa是a[1]的地址，a是a[0]的地址，相减的结果就是结构体的大小了。

user: user-3
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-4
content: #include <stdio.h>  typedef struct aa {     int a;     char b;     char c; }A;  int main(void) {     A a[20];     char *pa = (char *)&a[1];     //int *pa =&a[1];     printf("a = %p, pa = %p\n", a, pa);     printf(" 这两个打印的结果是多少,怎么算的..谢谢%u\n", pa - (char *)a);      return 0; } 猜测解决不了问题，先知道输出结果，然后在分析结果的原因。因此，还是要自己编译运行一下。 pa指向a[1]，那么前面还有一个a[0],根据结构体a[1]与a[0]相差一个结构体的长度，根据结构体对齐原则，一个结构体长度是8。因此，pa - a的长度就是8。

user: user-5
content: 应该就是结构体的大小，第二个的指针减第一个的指针 用sizeof(A)更合理一些
user-0 提问: libssh2下载压缩文件

回复:
user: user-0
content: libssh2 中的函数可一直接实现对压缩文件的sftp传输，  问题比较逗比，，，

user: user-1
content: https://baike.baidu.com/item/libssh2/7076721?fr=aladdin
user-0 提问: 循环语句中的if和while问题

回复:
user: user-0
content: 谢谢大家，刚学C，第一次发帖，很多不熟悉，看了好多回答，我自己吸收下，再次谢谢大家。

user: user-1
content: 遗憾的是%*c只能跳过一个\n

user: user-2
content: #include<stdio.h> int Gcd(int a, int b); int main() {     int a = 0;     int b = 0;     int i = 1;     int gcd = 1;     int ret = 0;     printf("Input a and b:\n");     do     {         ret = scanf("%d%*c%d",&a,&b);         if(ret == 0 || ret == 1 || a <= 0 || b <= 0)         {             while(getchar() != '\n');             printf("Input error!\nPlease input again!\n");         } else         {             gcd = Gcd(a, b);             printf("gcd = %d\n", gcd);         }     }while(ret == 2);      return 0; }  int Gcd(int a, int b)    //求最大公约数 {     int gcd = 0;     int i = 0;     if(a <= b)     {         gcd = a;         for(i = gcd; i >= 0; i--)         {             if((a % i == 0)&&(b % i == 0))             {                 printf("gcd = %d\n",i);                 break;             }         }     }     else     {         gcd = b;         for(i = gcd; i >= 0; i--)         {             if((a % i == 0) && (b % i == 0))             {                 printf("gcd = %d\n",i);                 break;             }         }     }      return gcd; }

user: user-2
content: do     {         ret = scanf("%d%*c%d",&a,&b);         if(ret == 0 || ret ==1 || a <= 0 || b <= 0)         {                                                                while(getchar() != '\n');    /*注意这儿有分号*/             printf("Input error!\nPlease input again!\n");         }         {             Gcd(a, b);         }     }while(ret != 2); /*此处应该改成==，因为ret 等于2，因为输入10, -1之后ret为2*/  问题可能处在while判断条件上，注意上面代码的注释。 另外，Gcd函数没有返回值，根据函数类型是应该有返回值的。

user: user-1
content: 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }  以上代码实现输入任意内容间隔的两个整数。

user: user-0
content: 当用if时，运行时输入10    -1，则无法进行循环，而用while时则正常进行循环。 为什么啊？
user-0 提问: rhel 下有啥好使的c语言 profile工具？求指导

回复:
user: user-0
content: 自己找了一个perf

user: user-1
content: https://www.baidu.com/s?wd=linux%20profiler

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 啥叫rhel？ 坊间传闻，Intel有一款棒棒达profiler RHEL是Red Hat Enterprise Linux的缩写，是Red Hat公司的Linux系统[/quote]  大牛求指导

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 啥叫rhel？ 坊间传闻，Intel有一款棒棒达profiler RHEL是Red Hat Enterprise Linux的缩写，是Red Hat公司的Linux系统[/quote] 涨姿势了！ 百度搜“linux profiler”？[/quote] 要不要 这么直接。。

user: user-1
content: 引用 2 楼 cfjtaishan 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 啥叫rhel？ 坊间传闻，Intel有一款棒棒达profiler RHEL是Red Hat Enterprise Linux的缩写，是Red Hat公司的Linux系统[/quote] 涨姿势了！ 百度搜“linux profiler”？

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:啥叫rhel？ 坊间传闻，Intel有一款棒棒达profiler RHEL是Red Hat Enterprise Linux的缩写，是Red Hat公司的Linux系统

user: user-1
content: 啥叫rhel？ 坊间传闻，Intel有一款棒棒达profiler
user-0 提问: 小白关于仿照内核的C语言双向循环链表问题

回复:
user: user-0
content: 引用 1 楼 adlay 的回复:plist 不要用指针, 直接用结构. 用指针必须先初始化   struct student{     char name[10];     	    int  id;     	    struct list * plist;     };   ==>  struct student{     char name[10];     	    int  id;     	    struct list alist;     }; 谢谢 已经解决了

user: user-1
content: plist 不要用指针, 直接用结构. 用指针必须先初始化   struct student{     char name[10];     	    int  id;     	    struct list * plist;     };   ==>  struct student{     char name[10];     	    int  id;     	    struct list alist;     };
user-0 提问: 求助      高手们

回复:
user: user-1
content: #include <stdio.h>  void func(char *s); int main(void) {     char str[81] = "*******A*BC*DEF*G****";      func(str);     puts(str);      return 0;  }  void func(char *s) {     int i = 0, k;     int cnt = 0;      while (s[i] == '*')         i++;      cnt = i;     k = 0;     while (s[i])         s[k++] = s[i++];      i = 0;     while (i++ < cnt)         s[k++] = '*';     s[k] = 0; } 上面的代码作为一个参考吧！ 建议自己还是要练一练，哪怕是写错了呢，起码通往成功的路自己走过。

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:作业要自己做， 上厕所要自己去。吃饭也要自己吃

user: user-3
content: 作业要自己做， 上厕所要自己去。
user-0 提问: 关于C语言scanf函数的用法

回复:
user: user-1
content: 在每一条scanf语句后面加一条fflush(stdin);来清空输入缓冲区。

user: user-2
content: 请判断scanf函数的返回值！

user: user-0
content: 谢谢大神指导malloc，但那个scanf又调试了一下，temp里面还是之前读进去的内容，没有再读进换行啊......

user: user-0
content: scanf函数返回值为0，fflush与rewind以后可以读。 另外将代码改成下面也可以读。

user: user-0
content: 谢谢各位大神前辈们指点，我回去按各位所说调试一下

user: user-2
content: 引用 8 楼 bie_niu1992 的回复:第一个for循环里 scanf("%s",temp);改成 scanf("%s%*c",temp); %*c的作用是读入\n,否则后面scanf("%[^\n]",temp);读入的将是\n就直接跳过了 建议后面的scanf("%[^\n]",temp); 也加入%*c 可惜的是%*c只能跳过一个\n

user: user-3
content: 第一个for循环里 scanf("%s",temp);改成 scanf("%s%*c",temp); %*c的作用是读入\n,否则后面scanf("%[^\n]",temp);读入的将是\n就直接跳过了 建议后面的scanf("%[^\n]",temp); 也加入%*c

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-4
content: http://blog.csdn.net/wyyy2088511/article/details/76850232

user: user-5
content: 应该是上面的输入的回车符匹配了最后的scanf。 malloc的参数都有问题，这个程序运行起来可能会出段错误；   第一个malloc应该是pri = malloc(sizeof(privaledge) * p); 第二个malloc应该是： posi = malloc(sizeof(position) * r);

user: user-0
content: 有没有大神帮忙解答一下啊。。。。。。
user-0 提问: C基本库找不到

回复:
user: user-1
content: 注意这个头文件路径是否正确。如果路径没加到系统里，可以编译时加上-I path

user: user-2
content: regez.h有放到你的项目文件里吗？

user: user-3
content: -I <dir>                  Add <dir> to the end of the main include path
user-0 提问: C基本库找不到

回复:
user: user-1
content: 看一下编译环境有没有区别，或者makefile文件里一些路径也检查一下

user: user-2
content: 路径可能不对

user: user-3
content: -I <dir>                  Add <dir> to the end of the main include path
user-0 提问: 怎么改这段程序

回复:
user: user-1
content: 不建议改这段代码，而是建议在这段代码前加减宏或者修改宏。因为这段代码里通过宏支持了多个不同的变量，因此根据需要在外面加宏，用于支持某个变量或者某些变量。

user: user-2
content: “能不改就不改”是码农的座右铭。
user-0 提问: 结构体

回复:
user: user-1
content: //偏移一个MyStruct地址. p + sizeof(struct MyStruct );

user: user-2
content: MyStruct mystruct; MyStruct* p = &mystruct; 把这两句的指针p改成这样定义就能实现你想要的（p+1指向age）： int* p = （int*）&mystruct;

user: user-3
content: p+1的地址是结构体向后偏移sizeof(结构体）长度，即8个字节。计算一下你输出的地址，是不是p+1的地址减去p的地址是不是8个字节。 p+1是偏移之后的内存空间，是未定义的，输出的内容也是未定义的（不确定的），可以归结为越界操作。

user: user-4
content: p+1的操作后，指针指向的区域是未知的

user: user-5
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-0
content: 引用 6 楼 hou09tian 的回复:[quote=引用 5 楼 LD_______ 的回复:] [quote=引用 3 楼 hou09tian 的回复:] 如果把代码改成 printf("值：%d %d\n", *p, *p); 打印出来的还是10和20。 可以考虑改成 printf("值：%d %d\n", p->age, ((p+1)->age));  (p+1)->age肯定越界啊，不过还是试了下，打印的值一长串子，不认识[/quote] 对啊，p+1本来就越界了嘛，p+1的地址是12ffdb4了嘛[/quote]  我想知道12ffdb4和12ffdb0的值为什么是一样的，有什么玄妙吗

user: user-6
content: C++数组地址偏移 http://blog.csdn.net/hou09tian/article/details/75332577 希望对你有帮助

user: user-6
content: 引用 5 楼 LD_______ 的回复:[quote=引用 3 楼 hou09tian 的回复:] 如果把代码改成 printf("值：%d %d\n", *p, *p); 打印出来的还是10和20。 可以考虑改成 printf("值：%d %d\n", p->age, ((p+1)->age));  (p+1)->age肯定越界啊，不过还是试了下，打印的值一长串子，不认识[/quote] 对啊，p+1本来就越界了嘛，p+1的地址是12ffdb4了嘛

user: user-0
content: 引用 3 楼 hou09tian 的回复:如果把代码改成 printf("值：%d %d\n", *p, *p); 打印出来的还是10和20。 可以考虑改成 printf("值：%d %d\n", p->age, ((p+1)->age));  (p+1)->age肯定越界啊，不过还是试了下，打印的值一长串子，不认识

user: user-6
content: 把 printf("值：%d %d\n", *p, *(p + 1)); 分成两个printf 	printf("值：%d\n", (*p)); 	printf("值：%d\n", *(p+1));

user: user-6
content: 如果把代码改成 printf("值：%d %d\n", *p, *p); 打印出来的还是10和20。 可以考虑改成 printf("值：%d %d\n", p->age, ((p+1)->age));

user: user-0
content: 引用 1 楼 hdt 的回复:加一指的是 p+sizeof(你的结构体);  是的，p+结构体大小后指针指向的是结构体的末尾，为什么打印出来的值是结构体里的值。 age的地址和p+1的地址打印的不一样，但是得出的值确实一样的

user: user-7
content: 加一指的是 p+sizeof(你的结构体);
user-0 提问: 将数字转换成图片的粗略方法

回复:
user: user-0
content: 大佬能麻烦解释解释么。。 菜鸡表示看不懂

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <windows.h> #define ROW 20 #define COL 30  int main (void) { 	FILE *fp;     HANDLE fh; 	int	origin[ROW][COL]; 	char now[ROW][COL+1]; 	const char trans[10+1]=" .':~*=|%#"; 	int	i,j; 	int	temp; 	if((fp=fopen("number.txt","rb+"))==NULL) 	{ 		fputs("cannot open the file .\n",stderr); 		exit(EXIT_FAILURE); 	} 	for(i=0;i<ROW;i++) 		for(j=0;j<COL;j++) 			fscanf(fp,"%d",&origin[i][j]); 	for(i=0;i<ROW;i++) 	{ 		for(j=0;j<COL;j++) 		{ 			temp=origin[i][j]; 			now[i][j]=trans[temp]; 		} 		now[i][j]='\0'; 	} 	rewind(fp); 	for(i=0;i<ROW;i++) 	{ 		fwrite((void *)&now[i][0],COL,1,fp); 		putc('\r',fp); 		putc('\n',fp); 	}     fh=(HANDLE)_get_osfhandle(fileno(fp));     SetEndOfFile(fh); 	if(fclose(fp)!=0) 		fputs("error in closing files.\n",stderr); 	return 0; }

user: user-0
content: 是换行符的问题吗？？
user-0 提问: VS2015生成的exe文件 不能直接打开 不能在mfc中通过按钮来执行该exe文件

回复:
user: user-1
content: 引用 6 楼 DHL1002512576 的回复:还有一个问题 通过mfc的按钮打开的exe关闭不了 需要通过任务管理器来关闭 WinExec("cmd /c taskkill /F /IM 灰度图.exe“,SW_HIDE);

user: user-0
content: 还有一个问题 通过mfc的按钮打开的exe关闭不了 需要通过任务管理器来关闭

user: user-2
content: 路径里面有空格,需要先cd到exe所在的目录

user: user-0
content: 老师请问这是什么原因？ 是因为路径吗？还是代码格式的问题

user: user-1
content: WinExec("cmd /c cd /d \"G:\\Me\\face detect\\人脸识别\\灰度图\"&\"灰度图.exe\"", SW_HIDE);

user: user-0
content: 现在是可以在Debug中打开exe文件 但在mfc中引用后不能通过按钮打开   代码如下： WinExec("G:\\Me\\face detect\\人脸识别\\灰度图\\灰度图.exe", SW_HIDE);

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

回复:
user: user-0
content: 感谢无敌的赵老师

user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  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对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-2
content: 断点断住啊 单步调啊 打开监控窗口查看变量的值啊，变量的地址啊  撸个几遍，各种套路无比清晰  撸点汇编更佳啊

user: user-3
content: String形参是接收两个字符类型的数据地址，实参是两个字符的地址。String函数的功能就是交换这两个字符的值。实参传递给形参是是两个字符的地址值，通过交换使用引用*,这样实际操作的是实参。

user: user-4
content: void String(char *buf1, char *buf2) { 	char temp;  	temp = *buf1;    // 形参buf1指向的字符对象赋给临时变量temp 	*buf1 = *buf2;	 // 形参buf2指向的字符对象赋给buf1指向的字符对象 	*buf2 = temp;    // 临时对象的字符赋给形参buf2指向的字符对象  	printf("buf1 = %c\nbuf2= %c\n", *buf1, *buf2);  } int main() { 	char arr[] = { "12" };  	printf("arr[0] = %c \narr[1]= %c\n", arr[0], arr[1]);  	String(&arr[0], &arr[1]);  // 把字符数组的第0位个第1位的地址传入调用函数，函数中形参buf1和buf2会分别得到这两个的地址，有了地址，通过*号解引用操作就可以操作指向的对象了 	printf("arr[0] = %c \narr[1]= %c\n", arr[0], arr[1]); }
user-0 提问: 一道c语言练习题,求高手帮忙解答

回复:
user: user-0
content: 感谢楼上两位大神的无私帮助 想对cfjtaishan点对我有用,手滑点了板砖,sorry哈

user: user-1
content: #include <stdio.h> #include <stdlib.h>  #define STUDENT_SIZE (3)  typedef struct ScoreInfo{//分数信息     int mathScore;     int chineseScore;     int englishScore; }ScoreInfo;  typedef struct StudentInfo{//学生信息  包含分数信息     char stuName[10];     int stuID;     int stuAge;     ScoreInfo stuScore;     int total_score; }StudentInfo;   void displayStuInfo(StudentInfo stu[],int pos);        //打印最高分学生详细信息 void sumScore(StudentInfo* pStu);    //计算总分 int findFirst(StudentInfo* pStu);    //查找最高分数的学生  返回学生序号  int main(void) {     StudentInfo stuArray[STUDENT_SIZE] = {         {"Lisa",1,12,{25,80,75}, 0},         {"Tom",2,13,{85,70,80}, 0},         {"Lucy",3,12,{100,90,99}, 0}         };      int pos=0;     sumScore(stuArray);     pos = findFirst(stuArray);     if(pos < 0){         printf("\nError,please check");     }else{         displayStuInfo(stuArray,pos);    //打印最高分学生详细信息     }     return 0; } void sumScore(StudentInfo* pStu) {     if(NULL==pStu){         return;     }      int i = 0;     for(i = 0; i < STUDENT_SIZE; i++){         pStu[i].total_score = pStu[i].stuScore.chineseScore + pStu[i].stuScore.mathScore + pStu[i].stuScore.englishScore;     } } int findFirst(StudentInfo* pStuArray) {     if(NULL == pStuArray){         return -1;     }     int firstPos = -1;     int maxScore = 0;     int i;      for(i = 0;i < STUDENT_SIZE; i++){         if(maxScore < pStuArray[i].total_score){             maxScore = pStuArray[i].total_score;             firstPos = i;         }     }     return firstPos; }  void displayStuInfo(StudentInfo stu[],int pos) {     printf("\n  name:%s",stu[pos].stuName);     printf("\n  ID:%d",stu[pos].stuID);     printf("\n  Age:%d",stu[pos].stuAge);     printf("\n Math %d", stu[pos].stuScore.mathScore);     printf("\n Chinese %d", stu[pos].stuScore.chineseScore);     printf("\n English %d", stu[pos].stuScore.englishScore); } 在数据结构中加了一个变量，这样所有的函数都跟着变化。 可以参考一下，有问题继续提出来。

user: user-2
content: 1.stuArray 2.pos < 0 3.pStu[i].stuScore.chineseScore + pStu[i].stuScore.englishScore + pStu[i].stuScore.mathScore 4.{0, 0, 0} 5.pStuArray, sumArray 6.firstPos = i; 7.stu[pos].stuScore.mathScore 8.stu[pos].stuScore.chineseScore 9.stu[pos].stuScore.englishScore
user-0 提问: 在练习pta题目的时候有两个编了两个程序老是错 求指点

回复:
user: user-1
content: #include <stdio.h> int main () {     long int S=0;     int i,A,N,T=0,b;      scanf("%d %d",&A,&N); 	for(i=0;i<N;i++)         { 			if(i==0) 				b = 1; 			else             b=b*10+A;             S+=b;         }     printf("%ld",S);  	getchar();     return 0; }

user: user-2
content: #include <stdio.h> int main () {     long int S=0;     int i,A,N,T=0;      scanf("%d%d",&A,&N);     for (T=A,i=0;i<N;i++)         {         	S+=T;             T=T*10+A;         }     printf("%ld",S);      return 0; }

user: user-3
content: #include <stdio.h> #include <math.h>  int main () {     long int S=0;     int i,A,N, tmp = 0;      scanf("%d%d",&A,&N);         tmp = A;         S += tmp;     if (N >= 2 && N < 10) {         printf("S = %d + ", tmp);         for (i = 1; i < N - 1; i++) {             tmp = A * pow(10, i) + tmp;             printf("%d + ", tmp);             S += tmp;         }         tmp = A * pow(10, i) + tmp;         S += tmp;         printf("%d = %ld\n", tmp, S);     } else if (N == 1) {         printf("S = %d = %ld\n", tmp, S);     }      return 0; } 注意分析问题的逻辑，上面的代码作为一个参考吧

user: user-4
content: PTA今天好像就关闭了

user: user-4
content: 第一个题目你写的有问题

user: user-0
content: 还有本题要求实现一个对数组进行循环左移的简单函数：一个数组aa中存有nn（>0>0）个整数，在不允许使用另外数组的前提下，将每个整数循环向左移mm（\ge 0≥0）个位置，即将aa中的数据由（a_0 a_1 \cdots a_{n-1}a ​0 ​​ a ​1 ​​ ⋯a ​n−1 ​​ ）变换为（a_{m} \cdots a_{n-1} a_0 a_1 \cdots a_{m-1}a ​m ​​ ⋯a ​n−1 ​​ a ​0 ​​ a ​1 ​​ ⋯a ​m−1 ​​ ）（最前面的mm个数循环移至最后面的mm个位置）。如果还需要考虑程序移动数据的次数尽量少，要如何设计移动的方法？  输入格式:  输入第1行给出正整数nn（\le 100≤100）和整数mm（\ge 0≥0）；第2行给出nn个整数，其间以空格分隔。  输出格式:  在一行中输出循环左移mm位以后的整数序列，之间用空格分隔，序列结尾不能有多余空格。  输入样例：  8 3 1 2 3 4 5 6 7 8 输出样例：  4 5 6 7 8 1 2 3 ------------------------------------------------- #include <stdio.h> int swap (int n[],int m,int l); int main() {     int n[100];     int l,m,i;      scanf("%d %d",&l,&m);     for (i=0;i<l;i++)         scanf("%d",&n[i]);     swap(n,m,l);      return 0; }  int swap(int n[],int m,int l) {     int i,t,j;     for (i=0;i<m;i++)         for (j=l;j>0;j--)             {             t=n[l-1];             n[l-1]=n[l-2];             n[0]=t;             }     for (i=0;i>l;i++)         printf("%d",n[i]);      return 0; } 不出结果呀怎么
user-0 提问: c语言中判别scanf函数输入格式

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin); 		if (strlen(s)>10) { 			printf("Input too long(>9)!\n"); 			continue; 		}         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }

user: user-1
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-2
content: 建议使用字符串吧，通过解析字符串来判定输入的是否为整数。

user: user-3
content: 输入字符串 判断是否只有数字 然后转成int
user-0 提问: MATLAB中的传递函数如何转成C语言，或者哪位大佬帮我写成表达式

回复:
user: user-1
content: 找一种连续到离散的具体方法，确定c语言执行环节的周期作为离散时间，zaimatlab里直接调用离散函数即可

user: user-2
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: 关于ncurses使用颜色的问题

回复:
user: user-1
content: 缺少头文件，如果是LInux下的程序，建议加： #include <stdio.h> #include <stdlib.h> #include <string.h>

user: user-2
content: 没有包含exit和strlen的头文件，加上#include<iostream>
user-0 提问: 计算文件中字符串出现的次数

回复:
user: user-1
content: //返回b在a中的个数   int BF(char a[],char b[]){                            int i=0,j=0,k=0;        do{           if (b[j]&&a[i++]==b[j])                ++j;           else           {               b[j]?(i-=j):k++;                j=0;                       }       }while(a[i-1]);           return k;   } 比如你要查 "AAA"那么把文件用a[]存起来 然后  直接 n=BF(a,"AAA"); 即可

user: user-1
content: //返回b在a中的个数   int BF(char a[],char b[]){                            int i=0,j=0,k=0;        do{           if (b[j]&&a[i++]==b[j])                ++j;           else           {               b[j]?(i-=j):k++;                j=0;                       }       }while(a[i-1]);           return k;   }

user: user-2
content: kmp算法就是处理这个东西的.

user: user-3
content: 引用 4 楼 ByXc_lzc 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] 根据你文件里名字存在的格式来定。你给的需求不够详细，不好确定是用那种办法。 一般是遍历文件数据（先读到内存，可以边读边解析名字），然后找到对应的名字解析，统计。 以下是数据结构，可以考虑一下：  struct word {     char name[32];     int num;     /* count the time of the name appearing.*/ };  由于不清楚name的个数，建议使用链表我是用结构， 但链表我还没学到。其实这是 c primer plus十四章编程练习的第6题。只是这一段我不知到怎么去实现[/quote] 如果没学到链表，那么建议用数组吧，但是数组长度需要实现确定。建议定义一个足够大的数组（比预计多一些空间），或者使用动态申请空间，malloc和realloc配合使用

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:根据你文件里名字存在的格式来定。你给的需求不够详细，不好确定是用那种办法。 一般是遍历文件数据（先读到内存，可以边读边解析名字），然后找到对应的名字解析，统计。 以下是数据结构，可以考虑一下：  struct word {     char name[32];     int num;     /* count the time of the name appearing.*/ };  由于不清楚name的个数，建议使用链表我是用结构， 但链表我还没学到。其实这是 c primer plus十四章编程练习的第6题。只是这一段我不知到怎么去实现

user: user-0
content: 引用 1 楼 user-4 的回复:使用strtok把文件拆开，检查拆开的数量 注意头尾的处理 另外要求似乎不是很明确，比如名字是aa 那么文件中有   aaaaaa 这样算几次？文件的字符串是有格式的比如 Jessie Joybat 一个名字一行

user: user-3
content: 根据你文件里名字存在的格式来定。你给的需求不够详细，不好确定是用那种办法。 一般是遍历文件数据（先读到内存，可以边读边解析名字），然后找到对应的名字解析，统计。 以下是数据结构，可以考虑一下：  struct word {     char name[32];     int num;     /* count the time of the name appearing.*/ };  由于不清楚name的个数，建议使用链表

user: user-4
content: 使用strtok把文件拆开，检查拆开的数量 注意头尾的处理 另外要求似乎不是很明确，比如名字是aa 那么文件中有   aaaaaa 这样算几次？
user-0 提问: C语言运行时崩溃 unhandled exception 0xC0000005:Access Violation

回复:
user: user-1
content: #include <stdio.h>  #define NUM_RATES ((int)(sizeof(value)/sizeof(value[0]))) #define INITIAL_BALANCE 100.00  int main() {     int i,low_rate, num_years,year;     double value[5];      printf("Enter interest rate: ");     scanf("%d", &low_rate);   /* parameter error*/     printf("Enter number of years: ");     scanf("%d", &num_years);      printf("\nYears");     for (i=0;i<NUM_RATES;i++){         printf("%6d%",low_rate+i);   /* parameter error!*/         value[i]=INITIAL_BALANCE;     }     printf("\n");      for (year = 1; year <= num_years;year++){         printf("%3d   ", year);         for (i=0;i<NUM_RATES;i++){             value[i] += (low_rate+i)/100.0*value[i];             printf("%7.2f", value[i]);         }         printf("\n");     }     return 0; } 两个地方错误，不过都是基本的语法错误；建议还是多学习一下基础知识。错误已经改正，详见上面的代码（添加注释的地方是错误的位置）。

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

user: user-0
content: win7环境

user: user-0
content: 或者和电脑本身有关系吗？可能哪里有bug?
user-0 提问: two or more data types in declaration of....问题

回复:
user: user-1
content: bool是系统关键字，不能用来做变量名。你要看看定义变量时，标识符的规定 只能是字母，数字或下划线组成，标识符不能以数字开头。 而且不能是系统已有的关键字。

user: user-2
content: bool是类似int, char这样的关键字，这些关键字不能作为变量名，即不能定义的变量名或函数名与这些关键字重名。 将bool改成其他名字。

user: user-3
content: 把所有的bool统一换成另一个变量名，想不出来就mybool

user: user-0
content: 您好！ 那我应该怎么改呢？有没有什么办法？学的不好，这代码是一个课本上抄下来的。实在是头疼。 非常感谢！

user: user-4
content: 编译器把bool当成类型关键字了，不能作为变量名。
user-0 提问: 求问一款重构软件

回复:
user: user-1
content: 请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。  意思是你程序结构看上去再合理，再简洁，也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错，更方便修改，出错了更容易找到哪里出错和具体出错的原因，更容易改正错误。  试对比 图书馆（对图书的分类够结构化了吧） 和 搜索引擎（可看作是扁平化任何结构数据，仅支持全文检索） 哪个处理信息更方便、更高效。  所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。  结构越复杂，越难修改，越难除错。 有时（甚至大多数时候），看上去越合理、越简洁的代码，运行起来性能越差，出错时查找原因越难，找到出错原因后改正越费劲。  程序员要做的不是尽力避免错误，而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误，“快速的失败”远胜过“预防错误”。Fred George  前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题；他觉得前同事们应该用这些问题来问自己；实际上不管在哪里工作的开发者们都应该经常问问自己这些问题： ◆“要保证这个问题不会再出现，我该怎么做？” ◆“要想少出些Bug，我该怎么做？” ◆“要保证Bug容易被修复，我该怎么做？” ◆“要保持对变化的快速响应，我该怎么做？” ◆“要保证我的软件的运行速度，我该怎么做？” 如果大多数团队都能不时问一下自己，必定会从中得益，因为这些都是真正强而有力的问题。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。  意思是你程序结构看上去再合理，再简洁，也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错，更方便修改，出错了更容易找到哪里出错和具体出错的原因，更容易改正错误。  试对比 图书馆（对图书的分类够结构化了吧） 和 搜索引擎（可看作是扁平化任何结构数据，仅支持全文检索） 哪个处理信息更方便、更高效。  所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。  结构越复杂，越难修改，越难除错。 有时（甚至大多数时候），看上去越合理、越简洁的代码，运行起来性能越差，出错时查找原因越难，找到出错原因后改正越费劲。  程序员要做的不是尽力避免错误，而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误，“快速的失败”远胜过“预防错误”。Fred George  前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题；他觉得前同事们应该用这些问题来问自己；实际上不管在哪里工作的开发者们都应该经常问问自己这些问题： ◆“要保证这个问题不会再出现，我该怎么做？” ◆“要想少出些Bug，我该怎么做？” ◆“要保证Bug容易被修复，我该怎么做？” ◆“要保持对变化的快速响应，我该怎么做？” ◆“要保证我的软件的运行速度，我该怎么做？” 如果大多数团队都能不时问一下自己，必定会从中得益，因为这些都是真正强而有力的问题。  所以 与其费劲去重构代码让其看上去更简洁、更合理  其实…… 消除重复代码不断重构的过程中，会让最适合现有需求的优秀代码“长出来”的，这也是极限编程的一个思想，你说的面相对象，结构化只是重构的最后一个结果。

user: user-2
content: 引用 2 楼 antuicang9886 的回复:[quote=引用 1 楼 lianshaohua 的回复:] 现在很多IDE都有重构的功能，个人感觉没有必要为了重构使用一个单独的工具。  如VS之类的？ 看来自己平常用到的功能都太简单了，我先多研究研究。[/quote] VS的VA助手不错，可以支持一些重构功能；当然VS的第三方插件也很丰富，可以去了解了解；

user: user-0
content: 引用 1 楼 lianshaohua 的回复:现在很多IDE都有重构的功能，个人感觉没有必要为了重构使用一个单独的工具。  如VS之类的？ 看来自己平常用到的功能都太简单了，我先多研究研究。

user: user-2
content: 现在很多IDE都有重构的功能，个人感觉没有必要为了重构使用一个单独的工具。
user-0 提问: 对同一个txt文件进行读写操作

回复:
user: user-0
content: 谢谢各位大佬

user: user-1
content: 建议了解一下文件读写的原理，对同一个文件进行交替读写，那么如果不控制读写的位置，是不能实现你想要的结果的

user: user-0
content: a+状态下又改怎么改写？？

user: user-0
content: 引用 2 楼 hou09tian 的回复: fpos_t pos = 0;     while ((ch = getc(source)) != EOF)     {         fgetpos(source, &pos);         ch = toupper(ch);         pos -= 1;        //读操作切换到写操作         fsetpos(source, &pos);         putc(ch, source);       //写操作切换到读操作         fflush(source);          //如不使用fflsuh()函数，可以如下的设置位置函数         //pos += 1;         //fsetpos(source, &pos);     }  不是很懂。。能不能详细解释下 - -

user: user-2
content: 至于"r+"和“a+”的区别，MSDN给出的两个不同的单词：“r+”是“update”（覆盖），“a+”是“append”（添加）。英文解释应该好理解些。所以以上代码成功的前提是使用fopen_s()函数打开文件的权限是"r+"，而不是"a+"

user: user-2
content: fpos_t pos = 0;     while ((ch = getc(source)) != EOF)     {         fgetpos(source, &pos);         ch = toupper(ch);         pos -= 1;        //读操作切换到写操作         fsetpos(source, &pos);         putc(ch, source);       //写操作切换到读操作         fflush(source);          //如不使用fflsuh()函数，可以如下的设置位置函数         //pos += 1;         //fsetpos(source, &pos);     }

user: user-2
content: 1 r+的含义 摘自英文MSDN "r+" Opens for both reading and writing. (The file must exist.) 可以对打开的文件进行读和写的操作，但是该文件必须存在。 2 读和写的切换问题 摘自英文MSDN When the "r+" access type is specified, both reading and writing are allowed. (The file is said to be open for "update".) However, when you switch from reading to writing, the input operation must encounter an EOF marker. If there is no EOF, you must use an intervening call to a file-positioning function. The file-positioning functions are fsetpos, fseek, and rewind. When you switch from writing to reading, you must use an intervening call to either fflush or to a file-positioning function. 当fopen_s的访问权限是"r+"时，可以对指定文件进行读和写的操作（该文件被打开用来“更新”）。但是，当从读操作换成写操作时，输入操作必须遇到一个EOF标识符（也就是说，必须全部读取完毕后才能写）。如果不想全部读取完毕后再能写，就必须使用一个设置文件位置函数作为中介。设置文件位置的函数可以是fsetpos()、fseek()和rewind()。当从写操作换成读操作时，必须调用fflush()函数或者设置文件位置函数作为中介。 3 程序分析      while((ch=getc(source))!=EOF)     {         ch=toupper(ch);         putc(ch,source);     }  以上代码的功能是逐一读取文件中的字符，将其转换为大写后再写到文件中。很明显要用到“2读和写的切换问题”中提到的读写操作切换时的中介函数。 fpos_t pos = 0;  	while ((ch = getc(source)) != EOF) 	{ 		fgetpos(source, &pos); 		ch = toupper(ch); 		pos -= 1; 		fsetpos(source, &pos); 		putc(ch, source); 		fflush(source);                 //如不使用fflsuh()函数，可以如下的设置位置函数 		//pos += 1; 		//fsetpos(source, &pos); 	}

user: user-2
content: 引用 4 楼 qianluoxun 的回复:[quote=引用 2 楼 hou09tian 的回复:]  fpos_t pos = 0;     while ((ch = getc(source)) != EOF)     {         fgetpos(source, &pos);         ch = toupper(ch);         pos -= 1;        //读操作切换到写操作         fsetpos(source, &pos);         putc(ch, source);       //写操作切换到读操作         fflush(source);          //如不使用fflsuh()函数，可以如下的设置位置函数         //pos += 1;         //fsetpos(source, &pos);     }  不是很懂。。能不能详细解释下 - -[/quote] 根据您的问题写了篇小文章 http://blog.csdn.net/hou09tian/article/details/77148218 另外还有一篇是关于文件流读写的 http://blog.csdn.net/hou09tian/article/details/73657925 请多指教
user-0 提问: C语言返回值问题

回复:
user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-2
content: 引用 12 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 路漫漫其修远兮，吾将上下而求索

user: user-3
content: 返回的是指向栈内存指针，函数调用结束，栈内存会被释放，而在主函数访问该片内存，是为初始化的，因此出错

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-0
content: 引用 6 楼 自信男孩的回复:这也算是经典问题了，返回局部变量是未定义行为。 了解这个问题的原因，需要学习栈的申请和释放原理； 谢谢，我刚学C语言，在看c primer plus 对栈和堆的部分很少，也快看完了有什么关于这方面的书介绍吗？

user: user-4
content: 不是不可返回，返回一个在函数里面定义的局部变量，如果返回的是指针或者数组。正确的做法是先申请内存，否则会出错。 申请内存方法有malloc(c语言）和new(c++)两种。

user: user-5
content: 改成  return &count;

user: user-5
content: 改成 return count;

user: user-1
content: 调用约定 https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx

user: user-6
content: 局部变量可以返回, 但是会出现什么结果, 就不知道了

user: user-7
content: 这也算是经典问题了，返回局部变量是未定义行为。 了解这个问题的原因，需要学习栈的申请和释放原理；

user: user-8
content: 返回局部变量，引起的问题

user: user-9
content: 引用 2 楼 JILAU_WHO_AM_I_Q234 的回复:十分感谢，对了你这个是什么软件 Visual Studio 2015

user: user-1
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-0
content: 十分感谢，对了你这个是什么软件

user: user-9
content: 1 局部变量 在函数中定义的变量的名字只位于函数的作用域中：这些名字只在函数体中可见。函数中的局部变量当函数的执行结束时撤销。当函数结束时，会释放它的局部存储空间。在函数结束时，函数体内的局部变量都不能再访问了。 2 函数返回值 函数的返回值用于初始化在调用函数处创建的临时对象。在调用函数的地方会将函数返回值复制给临时对象。 3 问题分析 当执行text()函数时，数组count的地址是0x00B5F888，此时该地址的内容是  所以此时的输出为1、2、3.....10 当text()函数执行完毕后，因为count数组是局部变量，该变量会被释放，即其地址中的内容会清空。此时主函数中pointer的变量值虽然还是0x00B5F888，但该地址的内容已经被释放  所以此时的输出是一些很大的负数 因此，对于函数来说
user-0 提问: c语言中char * ，char ** ，char *& ，char &，char 【】的区别

回复:
user: user-1
content: 同问

user: user-2
content: *是一级指针，**是二级指针，*&比如说*&a，按照优先级和结合性，*和&的优先级相同，从右到左，是取指向a地址的值，即a本身，而&*a是指向指针a指向地址的值的地址，【】是与数组有关吗

user: user-3
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-4
content: 建议通过写几行程序，通过测试程序了解这集中类型的区别。另外，注意将警告也一并去掉，警告也可能导致程序出错。 动手实践，比看书要记忆好，了解的深刻。

user: user-5
content: 5楼正解，我当时搞不清楚char* char[] string Cstring char**就是一个个看内存的，别怕麻烦，建议自己写几行代码调试下，印象深刻，再也不会忘记了！

user: user-6
content: 引用 3 楼 JILAU_WHO_AM_I_Q234 的回复:char**也可写作char*[]那只是 写在函数参数的时候出现的特例  其他情况两者是不同的

user: user-7
content: char**也可写作char*[]

user: user-7
content: char*是字符指针char**是字符指针的指针

user: user-8
content: C语言中没有char *& ，char & 确定是在学C语言？
user-0 提问: 控制台终端 打印如何实现修改这一行的内容

回复:
user: user-1
content: printf("process=%f\r", process);  \r 是光标移到开始，后面输入的数据会覆盖已有的数据

user: user-2
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-3
content: #include"iostream" #include <ctime>  using namespace std; void Delay(int   time)//time*1000为秒数  {  	clock_t now = clock();  	while(clock() - now < time);  }   int main() { 	for(int i = 0;i < 100; i++) 	{ 		if(i%2) 			cout << "..............\\ " << i; 		else 			cout << "............../ " << i; 		Delay(500); 		if(i < 10) 			cout << "\b\b\b\b\b\b\bb\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; 		else if(i >=10 && i < 100) 			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; 		else if(i >=100 && i < 1000) 			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; 	} 	return 0; }  简单粗暴的做法，哈哈
user-0 提问: 求指教！cb下C语言控制台程序的运行（模拟消息循环）

回复:
user: user-1
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-1
content: 参考BC31中TVISION http://download.csdn.net/source/2805028