Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言输入问题

回复:
user: user-1
content: EOF  end of file

user: user-2
content: 如果在cmd窗口中运行时在命令行使用“< 某个文本文件”指定输入重定向自文本文件的话，读到文件结束时也会返回EOF的。

user: user-3
content: 就是结束标记，按ctrl + z 回车  将返回EOF

user: user-2
content: VS IDE中，在不明白的符号EOF上点鼠标右键，选转到定义。  键盘输入想得到EOF的话， Linux：Ctrl+D Windows：Enter、Ctrl+Z、Enter

user: user-4
content: 文件结束标志，EOF(end of file)

user: user-5
content: EOF是End Of File 的缩写，表示“文件结束”。返回一个 Integer，它包含 Boolean 值 True，表明已经到达为 Random 或顺序 Input 打开的文件的结尾。 使用EOF是为了避免因试图在文件结尾处进行输入而产生的错误。 从输入流读取数据，如果到达文件末尾（遇到文件结束符），eof函数值为非零值（表示真），否则为0（表示假）。 直到到达文件的结尾，EOF 函数都返回 False。对于为访问 Random 或 Binary 而打开的文件，直到最后一次执行的 Get 语句无法读出完整的记录时EOF都返回 False。 对于为访问 Binary 而打开的文件，在EOF函数返回 True 之前，试图使用 Input 函数读出整个文件的任何尝试都会导致错误发生。在用 Input 函数读出二进制文件时，要用 LOF 和 Loc 函数来替换EOF函数，或者将 Get 函数与EOF函数配合使用。对于为 Output 打开的文件，EOF总是返回 True。

user: user-5
content: 在C语言中，或更精确地说成C标准函数库中表示文件结束符（end of file）。在while循环中以EOF作为文件结束标志，这种以EOF作为文件结束标志的文件，必须是文本文件。在文本文件中，数据都是以字符的ASCII代码值的形式存放。我们知道，ASCII代码值的范围是0~127，不可能出现-1，因此可以用EOF作为文件结束标志。 应用 档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1，但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。 C语言中，EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF，因此常被用来判断调用一个函数是否成功。 例如： #include <stdio.h> int main(void) { int n,i; int array[25]; while (scanf("%d",&n),n!=EOF) //while(scanf("%d",&n)!=EOF) { for (i=0; i<n; i++) scanf("%d",array+i); for (i=0; i<n; i++) printf ("%d ",array[i]); } return 0; } 在 UNIX中， EOF表示能从交互式 shell (终端) 送出 Ctrl+D (习惯性标准)。在微软的 DOS 与 Windows 中能送出 Ctrl+Z。在某些例子处理纯文字档案或从"字元设备"读入资料，微软MS-DOS的 shell 或系统程序会加入ASCIIControl-Z 字元到磁碟档案结束处 (尽管基本核心MSDOS.SYS档案写入呼叫从未附加 Control-Z)。这是向下相容于一些奇特的CP/M功能，从CP/M 档案系统只能就记录的档案长度分配多少 128 位元 "记录"。MS-DOS 档案系统从一开始就能精确的记录档案的位元长度。 ASCII控制字符在字元串流是 out-of-band 不可列印字元。通常表可读的助忆码。 在控制台要输入eof的话 按ALT+65535就可以了 与feof C语言中，当把数据以二进制形式存放到文件中时，就会有-1值的出现，此时不能采用EOF作为二进制文件的结束标志。为解决这个问题，ANSI C提供一个feof函数，用来判断文件是否结束。如果遇到文件结束，函数feof（fp）的值为1，否则为0.feof函数既可用以判断二进制文件是否结束，也可以用以判断文本文件是否结束。 例如：编写程序，用于把一个文本文件（源文件）复制到另一个文件（目的文件）中。源文件名为file_a.dat，目的文件名为file_b.dat。程序如下： #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> voidfilecopy(FILE *,FILE *); main ( ) { FILE*fpin,*fpout; fpin =fopen ("file_a.dat","r"); /*打开输入文件*/ fpout = fopen ("file_b.dat","w"); /*打开输出文件*/ filecopy( fpin,fpout ); /*把fpin所指文件中的内容输出到fpout所指文件中*/ fclose ( fpin );fclose ( fpout ); /*关闭输入输出文件*/ } voidfilecopy( FILE *fpin, FILE *fpout ) { char ch; ch = getc ( fpin ); /*先读一次文件再去判文件是否结束*/ while ( !feof( fpin ) ) /*当未到文件末尾是进行循环*/ { putc ( ch, fpout ); ch= getc ( fpin );} /*逐个字符进行复制*/ } }

user: user-6
content: DOS：F6
user-0 提问: 命令行参数的问题

回复:
user: user-0
content: 引用 3 楼 iyomumx 的回复:linux的情况，shell会自行对 * 进行扩展为当前目录下所有内容 用 \* 转义代替应该就可以了  测试了，用gcc的话，无论是linux还是dos下，编译出的程序都会把‘*’替换成当前目录下的所有文件名， 但是用 VC++的话，就能取得预期效果。  唉~

user: user-1
content: linux的情况，shell会自行对 * 进行扩展为当前目录下所有内容 用 \* 转义代替应该就可以了

user: user-0
content: 汗，我的虚拟机上效果是这样的。。。 命令行参数为 1 * 3，从图看到，1和3之间都是当前目录文件名。。。   啥情况，换了台机器也是如此。

user: user-2
content: 我的机器上:
user-0 提问: 如何用代码把png转换成jpg

回复:
user: user-0
content: 感谢2位，最终用libpng + libjpeg-trubo接决了问题 http://libpng.org/pub/png/book/

user: user-1
content: GDI+

user: user-2
content: 简单的可以用stb_image,想支持的格式多一点可以找libpng和libtubrojpg之类的,有很多库的
user-0 提问: 谁给拆一下这个公式 怎么代进去的。关于编码的

回复:
user: user-1
content: 西格玛是求和符号，从下标(i=0)到上标(i=w-1)，代入每一个子项，求和。 式中w=4

user: user-2
content: 就是 二进制变 十进制  怎么代进去是什么意思？
user-0 提问: posix信号量，利用共享内存通信。发送SIGINT信号。导致内存出错的问题

回复:
user: user-1
content: 系统对SIGINT信号的缺省处理是Terminate（注意进程不是SIGINT信号结束的，而是是系统的缺省处理结束的）。  你自己处理SIGINT时，如果希望结束进程，则需要调用exit(0);
user-0 提问: 这题什么意思啊？是关于逻辑运算符 与 或 非的

回复:
user: user-1
content: 就是通过 异或  达到 两个数 交换目的。  第一步 a   a^b 第二部 a^(a^b)  a^b    //a^(a^b) =a^a^b = 0^b=b 第三步 b  a^b^b          //(a^b)^b =a^(b^b) = a^0 = a
user-0 提问: switch在调用自定义函数时执行时直接跳过了case输出了default后的内容，哪里出错了？

回复:
user: user-1
content: 引用 3 楼 chengeng_jd 的回复:[quote=引用 2 楼 lm_whales 的回复:] 接受了回车估计 不是回车的原因，因为scanf就是需要回车才确认输入。 估计是大小写的原因，case 'A'，那么小写的'a'是不行的。[/quote]scanf %c并不跳过空白，空白字符对于 %c也是一个字符  其它格式可以跳过空白字符， %c不会， 所以虽然是 scanf 依然要当心 空白字符，包括回车

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-3
content: 根据你的程序和运行截图看是收到了上一次未处理完的字符。 	rewind(stdin); 	scanf("%c", &sign); 建议按照赵老师的方式改一改你的程序。  引用 8 楼 zhao4zhong1 的回复:在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-4
content: case后你敲空格了没

user: user-5
content: 引用 2 楼 lm_whales 的回复:接受了回车估计 不是回车的原因，因为scanf就是需要回车才确认输入。 估计是大小写的原因，case 'A'，那么小写的'a'是不行的。

user: user-6
content: case 'A': case 'a':   addition();   break; 试试

user: user-7
content: 从你贴的代码判断看，最有可能的是stdin中的'\n'没有处理掉（可能之前有代码调用scan后，在stdin中还残留'\n')。  把代码中的scanf("%c", &c) 改为下面的形式，再试一下：  scanf("%[^\n]%*c", &c);  // %[^\n]%* 的作用是如果读取到'\n'则忽略

user: user-0
content: 执行时并没有输入A，B就直接跳掉了default部分，不明白哪里出错了

user: user-1
content: 接受了回车估计

user: user-8
content: 自己单步调试看sign的值是什么
user-0 提问: getmask_code.c:27:16: warning: assignment makes pointer from integer without a c

回复:
user: user-1
content: 因为参数类型不是你自己定义的in_addr这个

user: user-0
content: 为什么第27行和第31行编译会出现这种警告： getmask_code.c:27:16: warning: assignment makes pointer from integer without a cast [enabled by default]   net_ip_string = inet_ntoa(net_ip_address); /*把二进制网络地址格式转换为字符串形式*/                 ^ getmask_code.c:31:18: warning: assignment makes pointer from integer without a cast [enabled by default]   net_mask_string = inet_ntoa(net_mask_address); /*把二进制掩码地址转换为字符串形式*/ 求大神赐教。

user: user-0
content: 为什么第27行和第28行编译会出现这种警告： getmask_code.c:27:16: warning: assignment makes pointer from integer without a cast [enabled by default]   net_ip_string = inet_ntoa(net_ip_address); /*把二进制网络地址格式转换为字符串形式*/                 ^ getmask_code.c:31:18: warning: assignment makes pointer from integer without a cast [enabled by default]   net_mask_string = inet_ntoa(net_mask_address); /*把二进制掩码地址转换为字符串形式*/ 求大神赐教。
user-0 提问: 求助：为什么在一趟排序完毕后要回归关键数

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

user: user-0
content: 我靠 ，看了网上的例子都说是key跟a[i]或者a[j]交换树值，原来只是a[i]或者a[j]互相赋值，根本没有交换。  那这段 a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/     sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/     sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/                        /*当然最后可能会出现很多分左右，直到每一组的i = j 为止*/  我换成这样 a[j] = key;     sort(a, left, j - 1);     sort(a, j + 1, right); 是不是也对呀

user: user-2
content: 把作为分界值的那个数key放到这个位置。要不的话，这个数就丢了，因为后面再递归对两边的排序，哪一边都没有它，left的位置可能已经被别的数占了，之前有下面的语句         a[i] = a[j];         /*找到一个这样的数后就把它赋给前面的被拿走的i的值（如果第一次循环且key是         a[left]，那么就是给key）*/

user: user-3
content: 下一句要排的是 left .. i-1 ，不包括 a[i] 。  一遍排序完成是 key 应该在 a[i] 的位置，所以需要把 key 赋值给 a[i]

user: user-0
content: 同样的算法，竟然思路这么不同， 这个不知道要比运用临时变量交换a[i]和a[j]的值的那个思路运算快多少？ 唉，同样一把剑，用起来高下立分
user-0 提问: c语言二维数组

回复:
user: user-1
content: a是二维数组，可以看成一个表格。

user: user-2
content: 就是给这个元素赋值1，建议先把基础打好

user: user-1
content: a[21][9]赋值为1 就是第22行，第10列这个格子赋值为1 下标从0开始
user-0 提问: cannot convert from 'double (__cdecl *)(double)' to 'double (__cdecl *)(void)'

回复:
user: user-0
content: 引用 7 楼 paschen 的回复:引用 4 楼 qq_18543005 的回复:[quote=引用 3 楼 paschen 的回复:] 提示说的很明白了，类型不同，这里不能进行隐式转换可是这是我照着练习题上抄下来的。。。答案就是这样f=f1，f=f2  C语言下允许这种隐式转换，但C++不行[/quote]明白了

user: user-1
content: 引用 4 楼 qq_18543005 的回复:引用 3 楼 paschen 的回复:提示说的很明白了，类型不同，这里不能进行隐式转换可是这是我照着练习题上抄下来的。。。答案就是这样f=f1，f=f2  C语言下允许这种隐式转换，但C++不行

user: user-0

user: user-0
content: 为什么这个就可以

user: user-0
content: 引用 3 楼 paschen 的回复:提示说的很明白了，类型不同，这里不能进行隐式转换可是这是我照着练习题上抄下来的。。。答案就是这样f=f1，f=f2

user: user-1
content: 提示说的很明白了，类型不同，这里不能进行隐式转换

user: user-2
content: f = f1;  f  的类型是 double (*)() f1 的函数指针类型是 double (*)(double)  两者不同，无法转换。

user: user-0
content: #include <stdio.h>  double f1(double x) { 	return x*x; } double f2(double x,double y) { 	return x*y; } double fun(double a,double b) { 	double (*f)(); 	double r1,r2; 	f = f1; 	r1=f(a); 	f = f2; 	r2=(*f)(a,b); 	return r1+r2; } main () {double x1=5,x2=3,r; r=fun(x1,x2); printf("\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n",x1,x2,r); }
user-0 提问: 请教一个内存释放的问题

回复:
user: user-1
content: 你可以看看malloc的实现 每块申请的内存 会有相应的大小信息记录

user: user-2
content: 这个涉及到malloc和free的实现原理，网上一搜一大堆。 malloc分配内存时会多申请一点内存用于记录申请的信息，所以free时就不需要指定大小等信息。

user: user-0
content: 怎么一口气发了两个贴子了.

user: user-0
content: 引用 1 楼 lgbxyz 的回复:能 free是根据地址来进行操作了，不是sizeof(你申请的类型)  它是怎么知道我要free多少大小的.难道是我程序分配出来的空间.系统作了标记?

user: user-2
content: 能 free是根据地址来进行操作了，不是sizeof(你申请的类型)
user-0 提问: 这种情况有几个tcp 连接？ 

回复:
user: user-1
content: 引用 3 楼 u010165006 的回复:用CGI吗？不过CGI比较老了，Java应该更强大。 没有搞过这个，只有概念。 浅谈Java Servlets与CGI程序 http://developer.51cto.com/art/200907/135211.htm

user: user-1
content: 用CGI吗？不过CGI比较老了，Java应该更强大。 没有搞过这个，只有概念。

user: user-2
content: tcp 连接有几条  这个得看 HTTP 协议了。不同的配置下会不同。

user: user-3
content: 需要网站的机器 来处理你访问资源的请求
user-0 提问: 杭电acm2072  求解，找了几个都不能AC 啊

回复:
user: user-1
content: #include "stdafx.h" #include<stdio.h> #include<string.h> #include<stdlib.h>   typedef struct {     int table_size;     int *index;     char **string;     int count; }Hash;  Hash HashTable(int size) {     Hash hashtable;     hashtable.table_size = size;     hashtable.index = (int *)malloc(sizeof(int)*size);     hashtable.string = (char **)malloc(sizeof(char *)*size);     memset(hashtable.index, 0, sizeof(int)*size);     hashtable.count = 0;     return hashtable; } void FreeHashTable(Hash *hashtable) {     for (int i = 0; i < hashtable->table_size; i++) {         if (hashtable->index[i] != 0) {             free(hashtable->string[i]);             hashtable->string[i] = NULL;         }     }     free(hashtable->index);     hashtable->index = NULL;     free(hashtable->string);     hashtable->string = NULL; } int hash(Hash *hashtable,char * string) {     int index = 0;     for (int i = 0; string[i] != '\0'; i++)     {         index = index * 257 + string[i] + 128;         index = index % hashtable->table_size;      }     return index; } void Insert(Hash * hashtable, char * string) {     int hashv = hash(hashtable, string);     while (hashtable->index[hashv] == 1 && (strcmp(hashtable->string[hashv], string) != 0))         hashv++;     if (hashtable->index[hashv]==0) {         hashtable->index[hashv] = 1;         hashtable->string[hashv] = (char *)malloc(sizeof(char)*(strlen(string)+1));         strcpy(hashtable->string[hashv], string);         hashtable->count++;     } }  void countword(char * a) {     char * word = strtok(a, " ");     Hash hashtable = HashTable(strlen(a));     while (word != NULL) {         Insert(&hashtable, word);         word = strtok(NULL, " ");     }      printf("%d\n", hashtable.count);     FreeHashTable(&hashtable); }  int main() {     char a[10000];     while (1) {         gets_s(a, 10000);         if (strcmp(a, "#")==0)             break;         countword(a);     }     system("pause");     return 0; }稍微修改一下就能用了

user: user-2
content: 可以用树（二叉树来做），也可以用字典树做 每次插入单词，统计一下如果是新单词，单词数量加一

user: user-3
content: 有个小陷阱，比如输入 you are my friend you are my friend # 正确输出应该是4。其它没什么要注意的了。
user-0 提问: 两个计算机系统基础问题

回复:
user: user-1
content: 楼主打算这辈子都停留在不懂汇编和计算机组成原理的状态中吗？ 还是拿出缺啥立即补啥，不知道啥立即学啥的勇气？

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

user: user-2
content: 不够减可以借位，或者直接用计算器算

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！ 赵老师，我没大学学历。只是想在空闲的时间尽可能的多学点东西。 我这不是迷信，是因为我可以说根本没有基础。我现在想要做到理解程序这个东西就得通过这些书本。我的另外一个账号也有你的回答。  你给的建议是 看书看一千遍，不如自己手敲一遍。我调试了，看了调试时给出的信息我也是知其然不知其所以然。因为我没基础。 而现在这本深入计算机系统，就是在讲 为什么。你曾经说要看汇编窗口 栈这些东西。可我到现在还没能理解到栈是什么东西。汇编更看不懂。所以还是老老实实打基础。 我以前把不懂的地方，发到我加的C语言讨论QQ群里面去问，没想到居然有人说要请我写软件。我当时就想就我这水平还写软件。所以就跟对方说我有自知之明，目前为止没有那水平。

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

user: user-3
content: 1、a-c不够减，向左借位，借一当十六。左边e借出一位后成了d，本位结果：a+十六-c得十四，即e 2、不知道函数show_bytes的作用，不好妄猜。不过，四字节的0x87654321在大端机器内存中从起始地址开始依次存放的是0x87，0x65，0x43，0x21；在小端机器内存中从起始地址开始依次存放的是0x21，0x43，0x65，0x87
user-0 提问: C语言算法问题，A到B来回往复,自己试着写了一段，帮看看哪儿出了问题？

回复:
user: user-1
content: 判断浮点数相等请不要用==这种， 而是根据你需要的精度用大于小于判断 比如  if（fabs(day-300.0f)<0.1f）

user: user-2
content: 等号用错了吧，变成赋值了

user: user-3
content: if里面应该是||不是&&

user: user-4
content: if(day == 300.0f)  if(day == -300.0f)

user: user-5
content: if(day ==  300.0f)

user: user-6
content: void main() {     int k=0;     float day = -300.0f;     int n=0;      while (1) {         switch (k) {             case 0:                 day = day +0.01;                 if(day >=  300.0f) k =1;             break;             case 1:                 day = day -0.01;                 if(day <= -300.0f) k =0;             break;         }         n++;         printf("n:%03d k:%d day:%.6g\n",n,k,day);         if (n>700) break;     } }
user-0 提问: C语言有关输入的问题

回复:
user: user-1
content: fgets+#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-0
content: 可是没看懂啊。。。我如果只是想简单的读入这两组数据呢  3 3 1 2 3 1 4 7 3 7 2 5 8 2 3 4 5 6 7 8  0 0

user: user-3
content: 数据是随便输入，关键是数据如何分组以及如何存放
user-0 提问: 求助 调用函数求素数问题 为什么代码能成功运行 求解答

回复:
user: user-1
content: Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-2
content: 引用 3 楼 paschen 的回复:for循环内部是没有执行 可是下面 x 与 i都是2，所以执行了if(x == i)  return true; 同意3楼，楼主写代码最好加一加大括号，尽管里面只有一条语句。加大括号是一个良好的编程习惯。

user: user-3
content: bool IsPrime(int x) {     int i,j;       for(i=2;i<x;++i)      if(0 == x%i)        break;         if(x == i)         return true;     else         return false;     }   如果代码是这样，x=2，当然跳过for循环，而执行if(x==i)这句了，此时的变量i已经被赋值为2，与x的参数值相等。

user: user-4
content: for循环内部是没有执行 可是下面 x 与 i都是2，所以执行了if(x == i)  return true;

user: user-5
content: for语句? 代码加花括号对.
user-0 提问: 求助c语言时间函数的问题

回复:
user: user-1
content: 用定时器，每分钟或者每30 秒更新一次时间。 需要刷新界面，则刷新时候更新时间。

user: user-2
content: /* localtime example */ #include <stdio.h>      /* puts, printf */ #include <time.h>       /* time_t, struct tm, time, localtime */  int main() {     time_t rawtime;     struct tm* timeinfo;      time(&rawtime);     timeinfo = localtime(&rawtime);     printf("Current local time and date: %s", asctime(timeinfo));       time_t timer;     struct tm y2k;      // 2000-01-01 01:01:01      y2k.tm_hour = 1;   y2k.tm_min = 1; y2k.tm_sec = 1;     y2k.tm_year = 100; y2k.tm_mon = 0; y2k.tm_mday = 1;       char time_str [80];     strftime(time_str, 80, "%Y-%m-%d %H:%M:%S", &y2k);     printf("%s\n", time_str);       return 0; }   //    struct tm { //    int tm_sec;     /* seconds after the minute - [0,59] */ //    int tm_min;     /* minutes after the hour - [0,59] */ //    int tm_hour;    /* hours since midnight - [0,23] */ //    int tm_mday;    /* day of the month - [1,31] */ //    int tm_mon;     /* months since January - [0,11] */ //    int tm_year;    /* years since 1900 */ //    int tm_wday;    /* days since Sunday - [0,6] */ //    int tm_yday;    /* days since January 1 - [0,365] */ //    int tm_isdst;   /* daylight savings time flag */ //    };

user: user-2
content: /* localtime example */ #include <stdio.h>      /* puts, printf */ #include <time.h>       /* time_t, struct tm, time, localtime */  int main () {   time_t rawtime;   struct tm * timeinfo;    time (&rawtime);   timeinfo = localtime (&rawtime);   printf ("Current local time and date: %s", asctime(timeinfo));    return 0; }           time_t rawtime = gps_point->timestamp;     struct tm* timeinfo;     char time_str [80];     timeinfo = localtime(&rawtime);     strftime(time_str, 80, "%Y-%m-%d %H:%M:%S", timeinfo);     fprintf(outfile, "%s\n", time_str);

user: user-3
content: C语言localtime()函数：获取当前时间和日期并转换为本地时间       头文件：#include <time.h>       定义函数：struct tm *localtime(const time_t * timep);       函数说明：localtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法，然后将结果由结构tm 返回。结构tm 的定义请参考gmtime()。此函数返回的时间日期已经转换成当地时区。       返回值：返回结构tm 代表目前的当地时间。       范例 #include <time.h> main(){ char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; time_t timep; struct tm *p; time(&timep); p = localtime(&timep); //取得当地时间 printf ("%d%d%d ", (1900+p->tm_year), (l+p->tm_mon), p->tm_mday); printf("%s%d:%d:%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec); }       执行结果：       2000/10/28 Sat 11:12:22

user: user-3
content: 使用时间函数  然后switch分支就可以了 具体的函数实现有一个给忘了  就是算1970到现在的时间，你man下试试 你直接吧一天当做24×60×60×60  分三段直接输出就可以了

user: user-4
content: http://blog.sina.com.cn/s/blog_4b7fad7a0100wj60.html

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:百度下，并不难大神，求简单给段代码啊，没接触过，一头雾水啊

user: user-5
content: 百度下，并不难
user-0 提问: 浮点数

回复:
user: user-1
content: https://zh.wikipedia.org/wiki/IEEE_754

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-3
content: http://www.cnblogs.com/xkfz007/archive/2012/02/27/2370357.html
user-0 提问: c语言源码判断问题求救。

回复:
user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 同意楼上的……

user: user-3
content: 重新新建一个.c文件就行了

user: user-4
content: 你是不是把工程类型设置成了library了？估计你需要设置一下项目属性，将其改为exe吧。

user: user-0
content: 什么意思？不懂呢。我现在还没弄过控制台这些。引用 1 楼 yuelengdihai 的回复:新建一个控制台程序，按步骤来应该不会有问题

user: user-0
content: c-free，windows 系统下的。怎么办啊。引用 2 楼 galiniur0u 的回复:不知道楼主在什么环境下编译的，我用vs2013是可以正常运行的

user: user-4
content: 不知道楼主在什么环境下编译的，我用vs2013是可以正常运行的

user: user-5
content: 新建一个控制台程序，按步骤来应该不会有问题

user: user-6
content: 你有首先建一个项目或者工程吗？ 然后才是新建C文件。

user: user-0
content: 大哥，对了，请问是什么原因呢？引用 6 楼 qq_30265137 的回复:重新新建一个.c文件就行了

user: user-0
content: 嗯嗯，谢谢赵老师。引用 8 楼 zhao4zhong1 的回复:Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-0
content: 你这样弄好了？ 引用 6 楼 qq_30265137 的回复:重新新建一个.c文件就行了
user-0 提问: 在这样的字符串里冒号’：‘或表格号‘|’能不能作为strchr函数查找位置的字符？

回复:
user: user-1
content: 不知道满不满足楼主的需求： 	char *p1; 	char *strsourcefile; 	int i = 0; 	char tmp[100]; 	char *ret = "C:\\Program File\\lengprog(ys)\\test\\Cheadgp.cfm C:\\Program File\\lengprog(ys)\\temp\\陶瓷元件1.sldprt"; 	strsourcefile = ret;  	while (1){ 		if (strsourcefile[0] == ' ' && strsourcefile[2] == ':') 		{ 			memset(tmp, '\0', 100); 			strncpy(tmp, ret, i); 			p1 = ++strsourcefile; 			break; 		} 		strsourcefile++; 		i++; 	} 	printf("0.%s %s\n",tmp, p1);

user: user-2
content: 多找几次, 先找.(点) , 点后找空格

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PATH 256 char strsourcefile[]="C:\\Program File\\lengprog(ys)\\test\\Cheadgp.cfm C:\\Program File\\lengprog(ys)\\temp\\陶瓷元件                                 1.sldprt"; char s1[MAX_PATH]; char s2[MAX_PATH]; char *p,*q; int main() {     s1[0]=0;     s2[0]=0;     p=strchr(strsourcefile,':');     if (p) {         q=strchr(p+1,':');         if (q) {             strncpy(s1,p-1,__min(q-p-1      ,MAX_PATH-1));s1[MAX_PATH-1]=0;             strncpy(s2,q-1,__min(strlen(q-1),MAX_PATH-1));s2[MAX_PATH-1]=0;         }     }     printf("[%s]\n[%s]\n",s1,s2);     return 0; } //[C:\Program File\lengprog(ys)\test\Cheadgp.cfm] //[C:\Program File\lengprog(ys)\temp\陶瓷元件                                 1.sldprt] //

user: user-4
content: 路径如果有空格，用引用引起来
user-0 提问: 指针做形参传递值问题

回复:
user: user-1
content: 引用 3 楼 xiaopei1982 的回复:[quote=引用 2 楼 fly_dragon_fly 的回复:] 这个unsigned char *&filename 看不懂吗? filename 是引用, 引用的内容是指针 谢谢，我知道，我就是想通过指针实现为何不行？[/quote]传指针, 只能修改指针指向的内容, 改不了指针本身,

user: user-2
content: 因为不能通过形参指针参数， 修改实参指针自己 指针参数一样是值传递。  C++引用参数才是 引用传递，也就是 地址传递。 C 用指针值传递，可以模拟引用（地址）传递 但是调用端 传递的实参，是个地址（或者说就是指针） 被调函数 形参是个指针 但是如果传入一个能被改变指针值 的指针， 一样要传递指针的地址；形参为二级（或者多级）指针

user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:这个unsigned char *&filename 看不懂吗? filename 是引用, 引用的内容是指针 谢谢，我知道，我就是想通过指针实现为何不行？

user: user-1
content: 这个unsigned char *&filename 看不懂吗? filename 是引用, 引用的内容是指针

user: user-0
content: 请教各位大侠！！！！
user-0 提问: 如何将10位数据写入两个八位寄存器里面，用C语言编程

回复:
user: user-1
content: 取低8位，按位与。。。

user: user-2
content: typedef unsigned char u8; typedef unsigned short u16 u16 data; DATA_L  =data; DATA_M =((data>>8)&0x3)|(DATA_M&~3)

user: user-0
content: 这个是应用的写入 ，我一直看不懂后面为什么要&0xFF

user: user-3
content: 既然是分成两个8位的寄存器，那就是说按字节截断了，直接数组访问就行了 	unsigned short x = 0x2ee; 	char DATA_L = ((char*)&x)[0]; 	char DATA_M = ((char*)&x)[1];

user: user-4
content: 引用 3 楼 ding_di 的回复:有个地方不懂，data 假如是10位数据，直接赋值给DATA_L  的 D7-D0 ，剩下的D8和D9呢 data>>8将data中的D9和D8右移挪到D1和D0对应的位置,再写入DATA_M中

user: user-5
content: 引用 3 楼 ding_di 的回复:有个地方不懂，data 假如是10位数据，直接赋值给DATA_L  的 D7-D0 ，剩下的D8和D9呢 丢掉了

user: user-0
content: 有个地方不懂，data 假如是10位数据，直接赋值给DATA_L  的 D7-D0 ，剩下的D8和D9呢

user: user-6
content: unsigned short u16_data; u16_data = （需要输入的10位数据）； DATA_L = u16_data; u16_data >>= 8; DATA_M = u16_data;
user-0 提问: LINUX 多线程： 关于互斥锁 动态、静态申请内存有啥区别啊

回复:
user: user-1
content: 静态的使用简便； 动态的可以设置更多的选项。

user: user-2
content: 互斥锁就2中使用方法，静态动态没有区别，只不过是动态需要你手动释放内存而已  第一种  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;  pthread_mutex_lock(&mutex); //do someting pthread_mutex_unlock(&mutex);  第二种  pthread_mutex_t mutex; pthread_mutex_init(&mutex, NULL);  pthread_mutex_lock(&mutex); //do someting pthread_mutex_unlock(&mutex);

user: user-3
content: 《Windows核心编程》
user-0 提问: 新人提问，在学函数时写了代码，为什么跑不出结果

回复:
user: user-1
content: 没调用函数，肯定没有打印咯

user: user-0
content: 明白了，因为下面没有写f()

user: user-2
content: 晕死，你都没调用那个打印的函数，在那个main函数里面
user-0 提问: 用strcat函数的时候出现“段错误”（报错Program received signal SIGSEGV, Segmentation fault.）是怎么回事

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

user: user-2
content: 把楼主的程序稍微改了一下， 1、start=token之后导致两个数组地址相同，start没有结束符，之后的strcat就会将token的地址再次复制一遍。 2、如果想从字符数组第二个开始复制，只需要操作字符指针++，即可。 3、pig[0] = "\0"，这种写法有些小问题，因为pig[0]是字符，而双引号下的"\0"是字符串，最好使用单引号‘\0'，或者直接清空pig，使用memset。 #include <stdio.h> #include <string.h> int main( void ) {     char s[100] = "", pig[100] = "", *token, start[2];      gets( s );     token = strtok( s, " " );     while ( token != NULL ) {         start[0] = token[0];         start[1] = '\0';         strcat( pig, ++token );         strcat( pig, start );         strcat( pig, "ay" );         printf("%s ", pig );         //pig[0] = '\0';         memset(pig, '\0', sizeof(pig));         token = strtok( NULL, " ");     }     return 0; }

user: user-3
content: strcat( pig, token[1] ); <<---- token 才是地址，token[1]是字符

user: user-4
content: token[1] 类型是char strcat第二个参数是要const char*
user-0 提问: 有arm下或者有没有特别简单的生成二维码的代码么？

回复:
user: user-1
content: 楼主，你这个问题 是怎么解决的啊，我现在也被这个问题搞得头大，如果你知道，望给我解答下，谢谢！

user: user-0
content: 引用 3 楼 dongpy 的回复:这个以前做过，用qrencode即可，生成二维码点阵。 编译起来好麻烦， 那个库。

user: user-0
content: 引用 3 楼 dongpy 的回复:这个以前做过，用qrencode即可，生成二维码点阵。 关联的东西太多了。

user: user-2
content: 这个以前做过，用qrencode即可，生成二维码点阵。

user: user-3
content: zint用过吗？ 貌似跨平台的

user: user-4
content: ZXing ？
user-0 提问: C linux 下 两个 so 中 有同名函数如何使得两个函数都能正常使用？

回复:
user: user-1
content: 最近遇到了这么个问题，两个毫不相干的so文件放到项目中出现crash的问题，最终发现还是全局的同名标识符重复，后面同名的被忽略了。最后还是使用dlopen或dlmopen进行动态加载RTLD_LAZY

user: user-2
content: 引用 楼主 mysticboy 的回复:C linux 下 两个 so 中 有同名函数如何使得两个函数都能正常使用？ 装载的时候用于区分项的符号重复了，改一个就是。

user: user-3
content: 费那事儿！ 直接用UE修改其中一个的导出函数名字中的一个字母即可。

user: user-4
content: 我知道LZ是谁了，水银

user: user-5
content: 还可以写两个文件，每个文件里包装成不同的函数。

user: user-6
content: 只能动态加载了。。

user: user-0
content: 引用 1楼liehu232 的回复:动态加载，用哪个就加载那个so文件感谢！

user: user-5
content: 动态加载，用哪个就加载那个so文件
user-0 提问: C语言实现8bit数据转成12bit数据

回复:
user: user-1
content: 引用 3楼煦风之伤 的回复:求教下面这种可以吗？ unsigned long ALIGN(unsigned long address) {       return (0xCFF&address) } qiu这是向前对齐，我写的那个是向后对齐，正常情况下使用向后对齐。ALIGN_UP()

user: user-2
content: 求教下面这种可以吗？ unsigned long ALIGN(unsigned long address) {       return (0xCFF&address) } qiu

user: user-1
content: 使用内存对齐， unsigned long ALIGN(unsigned long address) {       return (address + 12 - 1) / 12; }

user: user-3
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  仅供参考：//有一个二进制文件，要求每隔50bits，删除后面的12bits。 #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fi,*fo; char buf[31]; char obf[31]; int bn,n; void filter() {//对buf中前n个字节中的位，每隔50bits，忽略12bits，结果放在obf中,且将bn设置为obf中的字节数。     char bit[249];     char obt[249];     char b8[33];     char b88[33];     int i,j;     char *e;      for (i=0;i<n;i++) {         _itoa(buf[i],b8,2);         sprintf(b88,"%032s",b8);         sprintf(bit+i*8,"%s",b88+24);     }      j=0;     for (i=0;i<n*8;i++) {         if (i%62<50) {             obt[j]=bit[i];             j++;         }     }     if (j%8) {         bn=(j/8+1)*8;     } else {         bn=j;     }     for (i=j;i<bn;i++) obt[i]='0';     obt[bn]=0;     bn=bn/8;     for (i=0;i<bn;i++) {         strncpy(b8,obt+i*8,8);b8[8]=0;         obf[i]=(char)strtol(b8,&e,2);     } } int main() {     fi=fopen("in.bin","rb");     if (NULL==fi) {         printf("Can not open file in.bin!\n");         return 1;     }     fo=fopen("out.bin","wb");     if (NULL==fo) {         fclose(fi);         printf("Can not open file out.bin!\n");         return 2;     }     while (1) {         n=fread(buf,1,31,fi);         if (0==n) break;         filter();         fwrite(obf,1,bn,fo);     }     fclose(fo);     fclose(fi);     return 0; }
user-0 提问: 请教一个关于EOF的问题

回复:
user: user-1
content: 引用 6 楼 lgbxyz 的回复:[quote=引用 3 楼 u010339971 的回复:] 嗯，谢谢层主。二楼的输入方法我之前用过，无效果，也不知道是怎么回事。会不会是编译器的问题。 不要链验证就不做，就说不好用 [/quote] 这方法不错，关键是C,C++标准，不知道出于什么原因考虑 Io.h conio.h 这两个头文件里面的函数，不是标准库的一部分。 因此 C,C++标准库 里面，只有cook 控制台可用。（一次读取一行） raw 控制台 不可用。 而输入立即执行，需要用到  raw 控制台 的功能（一次读取一个字符）  EOF 实际上是底层IO （包括非缓冲，和缓冲两种）IO定义的 常量。（句柄或者叫文件代号方式操作文件） 但是，也被流式IO 接受了。（Ｃ,C++流） 流式ＩＯ  是对底层ＩＯ的封装 并且，不再暴露非缓冲ＩＯ给你用了

user: user-2
content: 引用 3 楼 u010339971 的回复:嗯，谢谢层主。二楼的输入方法我之前用过，无效果，也不知道是怎么回事。会不会是编译器的问题。 不要链验证就不做，就说不好用

user: user-0
content: #include <stdio.h> #include <ctype.h> int main (void) { 	char ch; 	int lower_count, upper_count; 	 	while ((ch = getchar()) != EOF) 	{ 		if (isupper(ch)) 			upper_count++; 		if (islower(ch)) 			lower_count++;	 	} 	printf ("您输入的这些字符中，大写字母有%d个，小写字母有%d个。\n", upper_count - 1, lower_count);                       /* upper_count - 1去除了输入的EOF中的字母^Z */ 	 	return 0; }   这个自编的寻找大写字母和小写字母的个数的程序使用EOF配合windows操作系统下的ctrl+z键（即在控制台界面显示^Z），在dev c++编译环境下程序运行成功。

user: user-3
content: EOF这种判断一般在文件处理时比较常见，而对于输入字符由于EOF属于特殊字符，就需要用到二楼的方法。尽信书不如无书，书中写的只是一个标准，如何理解实现才是关键。

user: user-0
content: 嗯，谢谢层主。二楼的输入方法我之前用过，无效果，也不知道是怎么回事。会不会是编译器的问题。

user: user-2
content: 这是一个比较恶心的问题。 我认为主要有2点： 第一点 是2楼说的 EOF 输入方法； 第二点是 输入缓冲区的问题。 getchar()是使用缓冲区的函数，你不按回车或者缓冲区不满他不会执行， 我认为你应该想要使用非缓冲区的方式，应该使用getch(无缓冲无回显)或者getche(无缓冲有回显)， 但是他们不会将EOF识别为EOF宏(-1), 所以最好使用getche函数，但是getche回显EOF有错误(win8 vs2013)， 所以折中的方式是使用getch然后手动回显。   #include <stdio.h> #include <conio.h>  int main(void) { 	int ch; 	int ct = 0;  	while ((ch = getch()) != 0x1A) { 		putchar(ch); 		ct++; 	} 	printf("\n%d characters read\n", ct);  	return 0; }

user: user-4
content: 输入EOF Linux:Ctrl+D Windows:Enter,Ctrl+Z,Enter
user-0 提问: 请问如何将字符编码为UTF8或者UTF16？

回复:
user: user-1
content: 1楼正解，VS就用那2个， linux下用iconv函数。

user: user-2
content: 如果只是转换ascill字符,转换到utf8是一样的.如果转换到utf16即unicode,这个是宽字节编码,asicll和中文即gb编码,算多字节编码,即需要直接调用vs的api函数MultiByteToWideChar,多字节转宽字节函数来实现

user: user-3
content: MultiByteToWideChar   WideCharToMultiByte
user-0 提问: 关于命令行参数的打印问题

回复:
user: user-1
content: 定义了 UNICODE?  在工程属性里找找，去掉。

user: user-1
content: 引用 2 楼 u011625690 的回复:[quote=引用 1 楼 user-1 的回复:] 定义了 UNICODE?  在工程属性里找找，去掉。 确实有用，非常感谢！！烦请再告知一下，为何这个设置会影响参数的打印呢，我在网上找了一些资料，都是关于这个设置会影响中文字符的显示问题，但是还是没有弄清楚为什么会影响打印长度，谢谢！[/quote]  定义了 UNICODE ，你的 _tmain ( 在 UNICODE 下是 wmain）的第二个参数 _TCHAR *argv[] 实际是 wchat_t *argv[] 。  wchar_t * 不能用 %s 打印。（用啥可以去查 MSDN 里 printf 的文档。）

user: user-0
content: 引用 1 楼 user-1 的回复:定义了 UNICODE?  在工程属性里找找，去掉。 确实有用，非常感谢！！烦请再告知一下，为何这个设置会影响参数的打印呢，我在网上找了一些资料，都是关于这个设置会影响中文字符的显示问题，但是还是没有弄清楚为什么会影响打印长度，谢谢！
user-0 提问: 变量的存储空间

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

user: user-2
content: 引用 7 楼 lm_whales 的回复:因为它们没有专门的数据空间储存 随着代码中用途不同，生成不同存在方式的代码 例如 #define ABC 100 ///或者 enum{ABC =100}; int a= ABC;///1）加载时候装入 a这个变量的内存中（外部变量，静态变量等情况）                     ///2) 生成mov 这种指令 ， 100 可能以立即数存在（自动变量） int arr[]={ABC,ABC,ABC};                  //1）100 最大可能是作为数据，写入obj,exe 等文件中，程序加载时候装入                   //2）因为是同一个数，也可能生成填充指令      （静态变量，外部变量等）                      //3)  也可能另外储存，函数执行时复制（函数内部自动存储类型数组） 以上这些情况，都只涉及常量100 而不是 符号常量 ABC； #define 定义的 ABC在编译之前，预编译的时候，已经被替换为100了 enum 常量ABC，在编译时替换为100  a=ABC   arr[i] =ABC  生成mov 这种指令 ， 100 可能以立即数存在（自动变量）注意，不是生成 mov a,ABC这种指令 而是 mov a,100 (应该是 两条指令 mov eax 100；mov a,eax)这种指令 总之，代码里面的ABC值，不论以何种方式存在， 都和符号常量ABC没啥关系，程序中没有任何地方跟ABC有关 都是和ABC的值100 有关系 ABC编译后，是不存在的，早已经替换为100 了 再如 a=ABC -12 ;//这个会 为a=78;这种代码，最终连100都不存在了，变成mov eax,78； mov a,eax 这种指令了。  修正一下，多半是两条指令 mov ，push ，pop 等指令都有可能

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执行停在该断点处的时候。

user: user-2
content: 因为它们没有专门的数据空间储存 随着代码中用途不同，生成不同存在方式的代码 例如 #define ABC 100 ///或者 enum{ABC =100}; int a= ABC;///1）加载时候装入 a这个变量的内存中（外部变量，静态变量等情况）                     ///2) 生成mov 这种指令 ， 100 可能以立即数存在（自动变量） int arr[]={ABC,ABC,ABC};                  //1）100 最大可能是作为数据，写入obj,exe 等文件中，程序加载时候装入                   //2）因为是同一个数，也可能生成填充指令      （静态变量，外部变量等）                      //3)  也可能另外储存，函数执行时复制（函数内部自动存储类型数组） 以上这些情况，都只涉及常量100 而不是 符号常量 ABC； #define 定义的 ABC在编译之前，预编译的时候，已经被替换为100了 enum 常量ABC，在编译时替换为100  a=ABC   arr[i] =ABC  生成mov 这种指令 ， 100 可能以立即数存在（自动变量）注意，不是生成 mov a,ABC这种指令 而是 mov a,100 这种指令 总之，代码里面的ABC值，不论以何种方式存在， 都和符号常量ABC没啥关系，程序中没有任何地方跟ABC有关 都是和ABC的值100 有关系 ABC编译后，是不存在的，早已经替换为100 了 再如 a=ABC -12 ;//这个会 为a=78;这种代码，最终连100都不存在了，变成 mov a,78 这种指令了。

user: user-3
content: 会存在于代码区，是指令的一部分

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

user: user-1
content: http://bbs.csdn.net/topics/390968755

user: user-4
content: 需要，只不过不需要动态分配。所以一般的书都是说不占空间

user: user-5
content: 其实是需要的……

user: user-6
content: 就相当于普通的常量，由于其值不变，没有必要在内存中开辟专门的空间存储以便存取访问。一般来说，它们是在指令中以立即数的形式存在的，实际上也占据一定的空间，不过是在代码区，不是数据区，而且除了破解软件外，没有正当的办法修改
user-0 提问: 两个字符指针变量不能同时申请一个字符指针变量的内存吗？

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

user: user-2
content: 把整个程序贴出来才能找到问题

user: user-3
content: 什么叫不能申请到，返回空指针吗，检查下strlen返回值，strSource是否以\0结尾 另外通常要多分配一个存储\0 检查下是哪出问题了，不然不会如你所说那样

user: user-4
content: #include<stdio.h> #include<string.h> #include<stdlib.h> int main()  {      char *p="hfkdsjahfdkasj";      char *p1,*p2;      p1 = (char *)malloc(strlen(p));      p2 = (char *)malloc(strlen(p));      if(NULL!=p1)        printf("分配成功\n");      else        printf("失败\n");      if(NULL!=p2)        printf("分配成功\n");      else        printf("失败\n");  }  不要听楼上两个乱说，我照着楼主的试了一下，都成功了啊。 编译如下：

user: user-5
content: C语言用malloc，最好是分配256字节以上，否则在有些操作系统下会失败。如果要求使用的字节数小于256，直接用 char strsourcefile[256] = {0} 就行了

user: user-6
content: 不是申请内存出了问题。注意要为'\0'预备空间，如下所示 strsourcefile = (char *)malloc(strlen(strSource) + 1); strtargetfile = (char *)malloc(strlen(strSource) + 1);
user-0 提问: 新年第一问,请教利用位运算符计算问题

回复:
user: user-1
content: 查表求位数。 假设同一类会变，采用数据库存储

user: user-0
content: 引用 1 楼 fly_dragon_fly 的回复:#define msk (0x3F<<3) #define FRUIT 0x1E8 if( cata&msk ==FRUIT) // 水果 这个不行的,我忘记说明了,抱歉 因为分类前6位表示父级分类,有可能是7位表示,也有可能是8位表示 总之位数会变化

user: user-2
content: #define msk (0x3F<<3) #define FRUIT 0x1E8 if( cata&msk ==FRUIT) // 水果

user: user-3
content: 把你的数与 111111000做 & 运算， 这样前6位不变，后面的全变成0了，然后通过得到的结果就可以分辨出是什么分类了

user: user-4
content: //111111101     --甜饼干(前6位与饼干分类编码相同) 	WORD aa = 0x1fd;  	//父级分类 	BYTE a = aa >> 3;  	//次级分类 	BYTE b = ((BYTE)aa)&0x07;
user-0 提问: 这个十进制  十六进制 转换没看懂啊

回复:
user: user-1
content: 是从二进制角度来看的 2^11相当于1后面11个0, 即, 二进制转成16进制是4个为一组, 11%4=3, 剩下3个0与前面1组成1000就是8, 11/4=2, 组成十六进制两个0, 十六进制得到0x800
user-0 提问: 一个关于c源码选择语句的问题？

回复:
user: user-0
content: 谢谢版主大大。引用 3 楼 lianshaohua 的回复:解决了就好。

user: user-1
content: 解决了就好。

user: user-0
content: 嗯嗯，对了。谢谢。引用 1 楼 user-2 的回复:case'2':语句去掉单引号，否则是字符判断1 肯定不等于'1'

user: user-2
content: case'2':语句去掉单引号，否则是字符判断1 肯定不等于'1'
user-0 提问: 问一个算法到底是什么意思求最大值的最小情况

回复:
user: user-0
content: 引用 1 楼 user-1的回复:n和k是什么没看明白, 假设人数为ct, mid代表分得1个人分得最大的钱,那么剩下ct-1个人来分money-mid, 显然这ct-1个人中让一个人分得最大是money-mid-(ct-2)这个值需要小于mid, 即mid>money-mid-(ct-2)  ==> 2*mid+ct-2>money 明白了，移项之后明了了很多，3Q

user: user-1
content: n和k是什么没看明白, 假设人数为ct, mid代表分得1个人分得最大的钱,那么剩下ct-1个人来分money-mid, 显然这ct-1个人中让一个人分得最大是money-mid-(ct-2)这个值需要小于mid, 即mid>money-mid-(ct-2)  ==> 2*mid+ct-2>money
user-0 提问: 新手有问题请教关于C的错误

回复:
user: user-1
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/

user: user-2
content: 排序集锦 http://blog.csdn.net/zhangxiangdavaid/article/details/25082013

user: user-3
content: void Sort(int score, long num[], int n)错了，听说能蹭分

user: user-1
content: 帮结帖＋蹭分

user: user-0
content: 晕，自己发现问题了！
user-0 提问: C语言怎么调用动态库

回复:
user: user-1
content: 引用 楼主 qq_30587385 的回复:C语言怎么调用动态库，求高手解答 动态库调用是loader的事情和c语言没关系。  至于如何使用动态库的方式是编译器的问题。

user: user-2
content: 查MSDN是Windows程序员必须掌握的技能之一。

user: user-3
content: Widows 动态库  静态链接 1）  #pragma comment (linker,"动态库名.lib") 2）在VC中可以直接把 .lib加入工程  这二者任选一个即可。 3）要有函数原型，开发动态库的开发者一般会提供头文件，没有的话，自己写函数原型，如果知道的话    动态链接（手动写代码直接链接）  LoadLibrary（） 加载 或者 LoadLibraryEX（） 加载 GetProcAddress 取得导出函数和导出变量地址 FreeLibrary（），FreeLibraryEX（） 卸载动态库 另外： 如果动态库有资源，而 exe 要用，就要处理好资源句柄问题。

user: user-4
content: 或者LoadLibrary（）的方式

user: user-5
content: 大概要加 如下: 动态库中函数的声明   和  #pragma comment (linker,"动态库名.lib") 注意 动态库名.lib  和  动态库名.dll 要在工程目录下。
user-0 提问: 大学作业，求帮忙

回复:
user: user-1
content: 作业贴一律不回

user: user-2
content: 英文。。。。

user: user-3
content: 英文原文.

user: user-4
content: 英语也是一门计算机语言的说。

user: user-5
content: shit一样的翻译...

user: user-6
content: 哥，你还不如直接贴英文的上来，看的头晕
user-0 提问: 自学新手，关于指针变量与函数的实参/形参传送问题，期望各位大神能带小弟一把！

回复:
user: user-0
content: 非常感谢两位大神能给我解惑，跟据 user-2  大神的指点并测试，实参是指针变量时，形参可以是指针变量或数组名，而我原来使用的是指针数组。如果实参是数组名，形参就可是指针数组（实测可行）！user-2  大神提到的内层循环如果改成 x-i-1 ，改完后还是会出现越界问题，内外层都改成 x-1 就不会越界（已实测）。被这个问问题困了两天，非常感谢各位大神的帮助

user: user-1
content: ta的类型是int** ta[j]的类型是int*，而不是int

user: user-2
content: 两个问题，冒泡法的数组访问会越界，因为有ta[j + 1]，所以双层for循环的终止条件是i和j小于x-1。内层循环的终止条件也可以为x-i-1，可以省去不必要的循环。 第二个问题，函数的形参接收数组时候要写成指针，而不是指针数组。在被调函数中这个指针有可以作为数组来用。 void suijifuzhi(int *temp, int x);	//声明外部随机数生成函数 void maopaomaxtomin(int *ta, int x);	//声明冒泡法排序，由小到大或由大到小  修改后的程序： #include<stdio.h> #include<stdlib.h> #include<time.h>  #define N 10   void main() { void suijifuzhi(int *temp, int x);	//声明外部随机数生成函数 void maopaomaxtomin(int *ta, int x);	//声明冒泡法排序，由小到大或由大到小   int num[N] = {0}; int *p = num;  suijifuzhi(num, N);	///调用随机数生成函数 maopaomaxtomin(p, N);	//调用冒泡函数，实参用指针变量，形参用数组名    //system("pause"); }  void suijifuzhi(int *temp, int x)	//随机数生成函数 { time_t tms; srand((unsigned int)time(&tms)); for (int i = 0; i < x; i++) { temp[i] = rand() % 100; printf("%-4d", temp[i]);  }  }  void maopaomaxtomin(int *ta, int x) { 	for (int i = 0; i < x-1; i++) 	{ 		for (int j = 0; j < x-i-1; j++) 		{ 			if (ta[j]<ta[j + 1])	//大于就行，小于就不行，不知道为什么 			{ 				int temp = ta[j]; 				ta[j] = ta[j + 1]; 				ta[j + 1] = temp; 			} 		} 	}  	printf("\n冒泡法排序后：\n"); 	for (int i = 0; i < x; i++) 	{ 		printf("%-4d", ta[i]); 	} 	printf("\n");  }
user-0 提问: 读取exe文件到内存后，对比WinHex打开同样文件，总有几个字节不同？如何处理，为啥会不同，应该一模一样才对？

回复:
user: user-1
content: 引用 2 楼 xxxd39 的回复:是存储地址不同。，其他都一样！海 什么存储地址？你是作为文件打开的。

user: user-1
content: 函数原型：  size_t fread(void *buffer, size_t size, size_t count, FILE *stream);  改成： result=fread((void *)buffer,1,lSize,pFile);

user: user-0
content: 是存储地址不同。，其他都一样！海

user: user-1
content: buffer = (char *)malloc(sizeof(char)*lSize); buffer要不要多一个字节？我也不确定 你只是读取了文件到buffer，怎么看出与WinHex显示的不同？
user-0 提问: 关于typedef struct的用法

回复:
user: user-1
content: 经过VC6验证可以这么用的： #include <iostream> using namespace std;  typedef struct GNode { 	int x; 	int y; 	struct GNode *next; }GNode;  int main() { 	GNode aNode={5,10,NULL}; 	cout<<aNode.x<<","<<aNode.y<<endl;          return 0; }

user: user-0
content: 引用 1 楼 user-2 的回复:第一个Gnode是结构体名称，后一个是typedef重新定义出来的类型名称。 第一个Gnode要和struct连起来一起用，比如定义一个变量 struct Gnode *p; 这个结构体名称可以省略的，但是你要是在结构体里用到了自己，这个结构体名称就不能省了。 struct Gnode里有一个变量是struct Gnode*，如果省略了struct后面的结构体名称，就不好写了。  谢谢啊，原来第一个gnode是结构体名称 也就是说第一个gnode是初始化这个结构体的时候的名称， 第二个gnode可以理解为重新命名的结构体的别名  谢谢

user: user-1
content: 相当于： struct Gnode{...}; typedef struct Gnode Gnode; 不过一般不这么写，一般可能这样： struct tagGnode{...}; typedef struct tagGnode Gnode; 或者： typedef struct tagGnode  {...} Gnode;  你这本书是国产的还是国外翻译的？如果是国产的可能有误，没验证过这么写是否可以。

user: user-2
content: 第一个Gnode是结构体名称，后一个是typedef重新定义出来的类型名称。 第一个Gnode要和struct连起来一起用，比如定义一个变量 struct Gnode *p; 这个结构体名称可以省略的，但是你要是在结构体里用到了自己，这个结构体名称就不能省了。 struct Gnode里有一个变量是struct Gnode*，如果省略了struct后面的结构体名称，就不好写了。
user-0 提问: 如何把这段代码改成OMP多线程代码？谢谢

回复:
user: user-1
content: 你需要让每次循环是独立的，这样才好用并行运算

user: user-1
content: 引用 6 楼 situjunc 的回复:[quote=引用 5 楼 paschen 的回复:] 你需要让每次循环是独立的，这样才好用并行运算 额，但是这个问题，后面的数据受之前的数据影响，所以怎么独立呢.....[/quote]   http://wenku.baidu.com/link?url=u1gXSZipz8P7yggkOOUcr3crFcvFCvGXi6NksfkrHlgU4FJ9iTPk-4VL1otCqlk6g4gph3dufq2z_uhxm4mHt-S41Y0EY6ffvLOOisllYSO

user: user-0
content: 引用 5 楼 paschen 的回复:你需要让每次循环是独立的，这样才好用并行运算 额，但是这个问题，后面的数据受之前的数据影响，所以怎么独立呢.....

user: user-2
content: 看一下，这个貌似是有难度的 后一次循环 依赖于 前一次循环的计算结果

user: user-1
content: #pragma omp parallel for

user: user-0
content: 引用 楼主 situjunc 的回复:额，有一个三维数组h[2][100][100]，其实就是两个二维数组h[0][99][99]和h[1][99][99]。 其中h[0][49][49]=100,h[1][49][49]=100。剩下的所有数据初始化为20。执行下面的迭代代码后，就会数据就会改变。其实就是热量散布问题啦..... 现在要怎么把这段顺序改成#pragma omp parallel 这种并行代码呢？谢谢  for (iteration = 0; iteration < 999; iteration++) {         for (i = 1; i < 99; i++){              for (j = 1; j < 99; j++){                  h[next][i][j] = 0.25 * (h[current][i-1][j] + h[current][i+1][j] + h[current][i][j-1] + h[current][i][j+1]);              }         }         current = next; // swap values of current and next         next = 1 - current;     }  恩，这个的确是要用#pragma omp parallel for，但是shared,private和其他部分老出错，并行代码出来的结果总是和顺序代码结果不一样。 所以并行代码要如何写呢？谢谢

user: user-0
content: 引用 1 楼 paschen 的回复:#pragma omp parallel for 恩，的确是用#pragma omp parallel for，但是shared,private和其他部分老出错，并行代码出来的结果总是和顺序代码结果不一样。 版主大大，可以提供一下具体的并行代码吗？谢谢
user-0 提问: C语言 蛇形填数 求解释

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #define MAXN 100 int m[MAXN+2][MAXN+2]; char d; int x,y,k,n,w; char str[10]; void main() {     while (1) {         printf("Input n(1..%d):",MAXN);         fflush(stdout);         rewind(stdin);         if (1==scanf("%d",&n)) {             if (1<=n && n<=MAXN) break;         }     }     y=0  ;for (x=0;x<=n+1;x++) m[y][x]=1;     y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;     x=0  ;for (y=0;y<=n+1;y++) m[y][x]=1;     x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;     for (y=1;y<=n;y++) {         for (x=1;x<=n;x++) {             m[y][x]=0;         }     }     x=1;     y=1;     k=0;     d='D';     while (1) {         k++;         if (k>n*n) break;         m[y][x]=k;         switch (d) {             case 'D':                 if (0==m[y+1][x])  y++;                 else              {x++;d='R';}             break;             case 'R':                 if (0==m[y][x+1])  x++;                 else              {y--;d='U';}             break;             case 'U':                 if (0==m[y-1][x])  y--;                 else              {x--;d='L';}             break;             case 'L':                 if (0==m[y][x-1])  x--;                 else              {y++;d='D';}             break;         }     }     w=sprintf(str,"%d",n*n);     for (y=1;y<=n;y++) {         for (x=1;x<=n;x++) {             printf(" %0*d",w,m[y][x]);         }         printf("\n");     } }

user: user-2
content: 首先当n = 4的时候a[0][2]不等于4 等于8  其次这个程序的填充顺序也不是你理解的那样，他是从右上角开始按照顺时针旋转填充的

user: user-3
content: a[0][2]=4是指什么,没看明白

user: user-4
content: 想不清楚就单步运行调试程序，一步步看各变量怎么变化
user-0 提问: c/c++ fread 问题

回复:
user: user-1
content: if((fp= fopen("./stud.lv","rb")) == NULL)//打开操作不成功 {     printf("The file can not be opened.\n")；    　     exit(1);//结束程序的执行 } 楼主应该先判断一下文件操作符是否已经打开吧。 还有就是如果Windows下，还需要确认stud.lv是不是与执行文件在一个目录下。

user: user-2
content: 检查fopen有没执行成功

user: user-3
content: fopen打开的文件不存在

user: user-4
content: 引用 5 楼 u010165006 的回复:./stud.lv这个文件名中, .表示的是当前目录, /是目录分隔符，./stud.lv表示当前目录下的stud.lv文件，一般在Linux下才需要这样表示，Windows下面直接文件名就是当前目录下，当前目录就是可执行文件所在的目录。 程序中也可以用函数更改当前目录。

user: user-4
content: Linux执行命令是按照PATH查找的（这样比较安全，避免当前目录下的同名程序先被执行），所以当前目录下的程序要用./表示。

user: user-4
content: ./stud.lv这个文件名中, .表示的是当前目录, /是目录分隔符，./stud.lv表示当前目录下的stud.lv文件，一般在Linux下才需要这样表示，Windows下面直接文件名就是当前目录下，当前目录就是可执行文件所在的目录。

user: user-5
content: stream != NULL，错误原因写得清清楚楚

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

回复:
user: user-1
content: NULL为指针类型的0，我理解为不指向任何地址。 在定义指针时可以用NULL初始化，NULL在不止一个头文件中有定义，包括stdio.h

user: user-2
content: addparval  = "";或者addparval  = NULL;

user: user-3
content: addparval  = NULL;

user: user-4
content: 空字符应该不能这么赋值  试试 *addparval = NVL 试试  PS:忘了 是NUL还是NVL了 。。。。

user: user-0
content: *addparval  = "", 定位这行出错。
user-0 提问: C语言文件存储，程序没错，但是存储后打开文件，年龄和学号是乱码，求大神解决

回复:
user: user-1
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-2
content: 能贴个错误出来看么？

user: user-3
content: load函数中：printf("输入要写入的文件路径：\n"); 改成 printf("输入要读取的文件路径：\n");

user: user-4
content: fwrite是以二进制形式写入,楼主可以试试fprintf

user: user-5
content: 就是乱码，我记得除了好像中文会变成乱码，但是计算机进行读取的时候是可以转换回来的。没事的

user: user-1
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了
user-0 提问: 为什么for循环只进行了一次

回复:
user: user-1
content: 是不是=<?for循环的判断条件有错

user: user-2
content: 因为你的l在执行一遍for(;l<5;++l)后没有重置，你在for(;l<5;++l)上一行加上l=0即可
user-0 提问: 怎么从网站上抓数据?

回复:
user: user-1
content: 引用 15 楼 lgbxyz 的回复:百度是HTTPS协议，需要先进行SSL认证，然后才能通信，这需要使用OpenSSL，认证后使用SSL_read/SSL_write 和server通信 学习了。

user: user-2
content: https://www.openssl.org/docs/man1.0.2/ssl/  <<Network Security with OpenSSL >>

user: user-0
content: 引用 15 楼 lgbxyz 的回复:百度是HTTPS协议，需要先进行SSL认证，然后才能通信，这需要使用OpenSSL，认证后使用SSL_read/SSL_write 和server通信 该看什么资料?

user: user-2
content: 百度是HTTPS协议，需要先进行SSL认证，然后才能通信，这需要使用OpenSSL，认证后使用SSL_read/SSL_write 和server通信

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:《http权威指南》 这书讲什么东西的?

user: user-3
content: 换语言，c语言的岗位少的可怜，掌握多门语言是必须的，如脚本语言python。  python的岗位都你c多。

user: user-1
content: 《http权威指南》

user: user-0
content: 引用 8 楼 Evankaka 的回复:[quote=引用 7 楼 csdnxinshou2 的回复:] [quote=引用 6 楼 Evankaka 的回复:] http://blog.csdn.net/evankaka/article/details/46849095 可以看看这里，其实很简单 python介绍本书我python不会。[/quote] python是比较简单的一个语言，网上找个电子书，或借个书来个。一天之内你就可以简单入门了[/quote] 有哪些语言是应该掌握的能不能说下?目前只会C语言和16位汇编语言。谢谢。

user: user-4
content: 引用 7 楼 csdnxinshou2 的回复:[quote=引用 6 楼 Evankaka 的回复:] http://blog.csdn.net/evankaka/article/details/46849095 可以看看这里，其实很简单 python介绍本书我python不会。[/quote] python是比较简单的一个语言，网上找个电子书，或借个书来个。一天之内你就可以简单入门了

user: user-0
content: 引用 6 楼 Evankaka 的回复:http://blog.csdn.net/evankaka/article/details/46849095 可以看看这里，其实很简单 python介绍本书我python不会。

user: user-4
content: 引用 9 楼 csdnxinshou2 的回复:[quote=引用 8 楼 Evankaka 的回复:] [quote=引用 7 楼 csdnxinshou2 的回复:] [quote=引用 6 楼 Evankaka 的回复:] http://blog.csdn.net/evankaka/article/details/46849095 可以看看这里，其实很简单 python介绍本书我python不会。[/quote] python是比较简单的一个语言，网上找个电子书，或借个书来个。一天之内你就可以简单入门了[/quote] 有哪些语言是应该掌握的能不能说下?目前只会C语言和16位汇编语言。谢谢。[/quote] 只会C的话，找工作太受限制了，建议至少也要会C++或JAVA。其它语言如python或javaScrip等t看个人兴趣也可以看下

user: user-5
content: 这东西，你都链接上了，发送要求数据都不知道什么发吗？python标准库有urllib可以获取数据，看你干嘛的了，只是获取数据的话python是方便，如果写什么软件的话另外说了

user: user-4
content: http://blog.csdn.net/evankaka/article/details/46849095 可以看看这里，其实很简单

user: user-3
content: 换个语言，如python， 有现成的接口， python都包含了构造了http头了  只要管recv了。，  收到后，写到一个文件，就可以看到数据了。  但是其本质还是 python帮你构造了http头。  也就说，你也可以用telnet去查看，只不过没有python ,wireshark等爽。

user: user-6
content: 要发送http请求 不发请求，怎么会有数据呢

user: user-1
content: 先学会使用抓包软件比如wireshark

user: user-7
content: 你要通过socket获取网页上的数据，需要模拟http报文向百度发送，先看看怎么模拟http报文吧。直接recv肯定是不行的。

user: user-8
content: 先把你要用的函数把MSDN上的解释读一遍，先明白这个函数是要做什么
user-0 提问: C语言中memcmp函数可以用来比较两个浮点数大小吗？

回复:
user: user-1
content: memcmp没有整数,浮点数的概念, 只关心字节, 你看一下这个浮点数在内存中的表示

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-3
content: 有什么问题？？你希望得到什么结果  memcmp返回传值又不是bool，相等返回的是0   要深入了解先把这个函数的功能了解清楚：http://en.cppreference.com/w/c/string/byte/memcmp

user: user-4
content: 解决这个问题需要了解两个方面的知识 1、memcmp函数的意义 2、double数据类型在内存中的表示  ------------- 1、memcmp函数的意义 比较前n个字节的大小。  ------------- 2、double数据类型在内存中的表示 为了更好地理解，下面把double类型的 1.0 和 2.0 在内存中的表示以十六进制的形式列出来 1.0 ==  00-00-00-00-00-00-F0-3F 2.0 ==  00-00-00-00-00-00-00-40  从上面的内存表示可以很容易知道为什么1.0和2.0用memcmp函数比较之后反而是1.0大了。 那么接下来的问题就是1.0和2.0为什么在内存中就是那么表示的。  （1）先将1.0和2.0分别用二进制的科学计数法表示 1.0   ==  1.0乘以（2的0次方） 2.0   ==  1.0乘以（2的1次方）  * 规定 double 在内存中以三个部分存储：符号、阶码、尾数 * 符号占1位、阶码占11位、尾数点52位 * 由于尾数的小数点之前都是数字1，所以规定小数点之前的数字1不必存储，也就是说尾数只需要存储小数点之后的数值即可 * 正数的符号为0  负数的符号为1 * 规定阶码存储时需要加上1023 所以，1.0的阶码0，加上1023之后是1023，二进制表示为  0111 1111 111       2.0的阶码1，加上1023之后是1024，二进制表示为  1000 0000 000  由于 1.0 和 2.0 的符号位、尾数都是0 所以， 1.0 ==  0（符号位） 0111 1111 111（十一位阶码） （此处省略五十二位尾数0）        2.0 ==  0（符号位） 1000 0000 000（十一位阶码） （此处省略五十二位尾数0） 	    写成十六进制的形式为  1.0 == 3F-F0-00-00-00-00-00-00                       2.0 == 40-00-00-00-00-00-00-00  最后，由于一般计算机中内存以小端存储，也就是数值的高字节反而是放在后面的。 所以在内存中的表示为  1.0 == 00-00-00-00-00-00-F0-3F                       2.0 == 00-00-00-00-00-00-00-40
user-0 提问: 求如何用四重循环实现下面 数学表达，百度主管说做对试用期可以过，跪求了！

回复:
user: user-1
content: 这是几个不相干的公式，互相没关系 第一个级数 第二个积分 第三个求和 积分可以设法求出原函数，或者转换为定积分，然后可以用数值解法求函数积分、 求和直接求
user-0 提问: 新手学C语言，用Dev C++编译出现问题，大神请帮忙看一下

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-2
content: 名字打错了：paly_game
user-0 提问: Ubuntu 14.04下eclipse调试c程序出现错误

回复:
user: user-1
content: 说是不能找到源文件printf. c

user: user-0
content: 引用 1楼user-2 的回复:#include <stdio.h> 了吗？当然。。

user: user-2
content: #include <stdio.h> 了吗？
user-0 提问: C语言出现烫烫烫，是指针用错了吧，求老鸟解决~~~~

回复:
user: user-0
content: 多谢版主

user: user-1
content: 因为\0是不可显示的字符  for (b = 0; b < SIZE - 1; b++)

user: user-0
content: 多谢大神，但是#define SIZE 7 之后输出是这样： zz[0]=1 zz[1]=2 zz[2]=3 zz[3]=4 zz[4]=5 zz[5]=6 *zz=1 abcdefa     //这里多个a是怎么回事 a b c bcdefg abcdef

user: user-1
content: #define SIZE 7
user-0 提问: 最近想用c做一个简单的酒店信息处理程序，费劲周折，但是达不到预期效果，求大神指教

回复:
user: user-1
content: 因为不满足if (flag == 1) ，已经叫你单步调试来看了，我都不知道你预期的效果需要是什么

user: user-0
content: 引用 3 楼 user-1的回复:你自己调试着看哪里和你期望的不一样，我都不知你想得到什么，怎么输入，没具体研究你代码 那个不好意思，我不理解的地方是为什么你说的for循环后面的就无法用上了，因为我不知道怎么改才能使后面的程序实现，是不是我的函数问题

user: user-1
content: 你自己调试着看哪里和你期望的不一样，我都不知你想得到什么，怎么输入，没具体研究你代码

user: user-0
content: 引用 1 楼 user-1的回复:你insert中for循环和后面if语句都没执行到，自己单步调试程序，每一步观察各变量变化  保存就是读写文件操作 请教下该如何修改呢

user: user-1
content: 你insert中for循环和后面if语句都没执行到，自己单步调试程序，每一步观察各变量变化  保存就是读写文件操作