Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 新手求救~~c 中能否加密word、pdf、图片等格式文件？

回复:
user: user-1
content: 如果文件较大，不需要一次性全部读进内存中进行加密，可以分块读取、加密、保存。   我以前做加密时，加密接口只接收 16个字节的二进制数据（AES为16个字节，DES为8个字节），如果需要加密更长的数据，那么要多次调用我的加密接口。

user: user-2
content: 估计是没使用binary 模式读取

user: user-3
content: 仅供参考：#include <stdio.h> #include <string.h> #include <conio.h> FILE *fi,*fo; int i; int main(int argc,char **argv) {     if (argc<3) {         printf("Usage:%s src des\n",argv[0]);         return 1;     }     if (0==stricmp(argv[1],argv[2])) {         printf("Src and des is same!\n");         return 2;     }     fo=fopen(argv[2],"wb");     if (NULL==fo) {         printf("Can not create file %s\n",argv[2]);         return 3;     }     fi=fopen(argv[1],"rb");     if (NULL==fi) {         fclose(fo);         printf("Can not find file %s\n",argv[1]);         return 4;     } 	i=0;     fseek(fi,-1L,SEEK_END);     while (1) {         fputc(fgetc(fi)^0x5A,fo); 		i++; 		if (i%1000000==0) cprintf("\r%dKB",i/1000);         if (fseek(fi,-2,SEEK_CUR)) break;     }     fclose(fi);     fclose(fo); 	cprintf("\r%dKB OK.\r\n",i/1000);     return 0; }

user: user-0
content: 感谢user-4版主回复，我的程序里的明文接口是一个十六进制数组，我试过直接读取.doc文件，会报错。

user: user-4
content: 可以啊，加密算法又不区分文件格式
user-0 提问: 调用system()，在vs中运行正常，当直接运行生成的文件时system()好像被阻塞？

回复:
user: user-1
content: 如果能方便地提升权限，那还设置权限干啥？

user: user-1
content: 请判断每个函数调用的返回值。 权限问题？ 参考RunAs命令？

user: user-2
content: 使用 shutdown 的系统全路径就可以任意命名了。

user: user-2
content: 你在 VS 里面能运行，表示和其他的没有任何关系，包括权限等。 难道你的 VS 能够提权吗？  VS 直接运行的是全路径的 .exe 文件。 此时的 工作目录是源代码目录。 而这个目录里面没有 shutdown .  而你直接运行的话，工作目录就是生成目录。 这个目录下面有 shutdown 。 system 运行 shutdown 的话会递归的。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:system("runas /user:mydomain\\administrator \"cmd /c shutdown ...\"");   恩，这样是可以了。应该就是新进程权限问题。 我又查了一下，有人说 “在开启 UAC 的情况下，Administrators 组成员运行 RUNAS 命令（runas /user:administrator cmd.exe）提升管理员权限必须要启用 administrator 帐户，并且为其指定密码（因为系统默认禁止空密码登陆）。”  如果我登录的就是管理员账户，并且没有密码，那这样是不是就不行了。那如何方便的在代码中提升system的新进程权限，或者继承，system有没有附加参数使新进程继承父进程的权限？好像system是从环境变量中确定的。 或者说，在c中执行shell命令，用哪个方法可以在这些方面轻松地调控。

user: user-1
content: system("runas /user:mydomain\\administrator \"cmd /c shutdown ...\"");

user: user-1
content: system("runas /user:mydomain\administrator \"cmd /c shutdown ...\"");

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:请判断每个函数调用的返回值。 权限问题？ 参考RunAs命令？   我把system("shutdown -a")的返回值输出到文件中发现返回值是-1； 百度了一下发现：        1、如果 system()在调用/bin/sh 时失败则返回127, 其他失败原因返回-1.。 　　2、若参数string 为空指针(NULL), 则返回非零值. 　　3、如果system()调用成功则最后会返回执行shell 命令后的返回值, 但是此返回值也有可能为system()调用/bin/sh 失败所返回的127, 因此最好能再检查errno 来确认执行成功.  这个其他失败原因是什么情况啊， shutdown -a:1116                               //这是d,r两种版本下在vs中，无计划任务时，取消指令的返回值 shutdown -a:1116  shutdown /s /t:0                                //这是在vs中，设置计划的返回值 shutdown -a:0                                   //这是vs中紧接着取消计划的返回值  shutdown -a:-1                                   //直接运行时，无论哪个命令，都是返回-1.。 shutdown /s /t:-1  会不会是这样，哪怕我以管理员身份运行，当调用system时，创建的子进程并没有继承管理员权限。 那为什么vs中就可以呢，这是我最好奇的一点，为什么调试程序时是好的，使用时便不一样了。涉及到些什么的程序还会出现这种调试和使用不一样的现象

user: user-0
content: 引用 1 楼 user-2 的回复:你的生成的程序修改一下。 不要使用shutdown.  谢谢，不过我想知道的是如果shutdown不行，但是不管什么版本，在vs中和直接运行为什么会不一样，更远的可以说为什么我调试一切正常，在同样的环境下为什么不能有想要的效果。

user: user-2
content: 你的生成的程序修改一下。 不要使用shutdown.
user-0 提问: asm 内嵌汇编的使用

回复:
user: user-0
content: 谢谢大家，找到原因了 "movl $0,  %%ecx \n\t"  要改为"movl %0,  %%ecx \n\t"

user: user-1
content: asm("":::) 啥的 只是 AT&T 格式汇编的规定,  懒得记的时候还是单独写成个汇编文件方便些,  用 nasm/yasm 啥的你就不用为 M$ Win, Linux啥的写两套代码...  第一个:后是输出参数, 比如写 "=a"(result)  就自动在汇编后加上  result = eax 的指令.  第二个:后是输入参数, 编译器会在生成汇编指令时先填上合适的值,  a b c d D S 分别代表  (E/R)ax, bx, cx, dx, di,si .   或者用 m v  r  啥的指定类型,  在汇编里用 %0 %1 %2 引用....   比如上面我代码里就指定设置 eax 的值为 4 (__NR__write),  ebx = 1 (stdout),  ecx = "Hello world!\n",  edx = 13(strlen("Hello...")) ...  第三个:后是受影响的寄存器, 内存指示啥的 ,  比如 __asm__ ("":::"memory");   表示一个 memory barrier, 阻止编译器跨越这条代码重排指令, 如果你啥多线程跑出很古怪的结果就可能是少了这个, 如果你汇编里修改了内存的值, 通常应该加上这个...

user: user-1
content: 你这几句就是 edx = 13,  ecx = 0, ebx = 0, eax = "Hello World!"  ... 缺了 syscall , 并且看起来参数也不对, 应该是这样子...  int main() {         __asm__ __volatile__("int $0x80\n\t"::"a"(4),"b"(1),"c"((long)"Hello World!\n"),"d"(13));         return 0; }

user: user-2
content: 6.45.2 Extended Asm - Assembler Instructions with C Expression Operands
user-0 提问: 简单C程序错误分析

回复:
user: user-0
content: 引用 3 楼 paschen 的回复:b[i][j]=a[j][i] 时a[j][i] 可能还未初始化，里面元素的值不确定   确实可能有这个问题。。。那么输出的错误数列的相关元素的值确实可能是随机出现的吗？

user: user-0
content: 确实可能有这个问题。。。那么输出的数列的值可能是随机出现的吗？

user: user-1
content: 引用 6 楼 baidu_33792305 的回复:有大神可以解答一下吗？错误输出的矩阵中的“24”和“1558”两个数是如何出现的，是随机的吗？~~ 楼主你这里出现的数字是随机给的。没有初始化就进行使用，有的编译器是不准通过的，这个问题你得注意一下。

user: user-1
content: 二维数组都没初始化你就开始a[i][j]=a[j][i]，不明白你想干吗。如果你是想转置矩阵的话，可以先进行循环输入，但是别a[i][j]=a[j][i]，等你的输入完了之后，再转置（注意，只需要转置矩阵的一个半三角就可以）。

user: user-0
content: 有大神可以解答一下吗？错误输出的矩阵中的“24”和“1558”两个数是如何出现的，是随机的吗？~~

user: user-2
content: b[i][j]=a[j][i] 时a[j][i] 可能还未初始化，里面元素的值不确定

user: user-3
content: 你是在用turbo C，我已开始也用这个，太古老了

user: user-4
content: 最好贴代码，而不是截图。 有点不明白你scanf输入以后在干嘛，换过去又换回来？ 确实要执行3*3次？ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 关于文件的删除操作 实在是找不出问题所在

回复:
user: user-1
content: 引用 2 楼 vectorindex 的回复:还是不行 郁闷啊 啊啊啊啊 不一定和你的问题有关系，这一句代码有问题：   if(strlen(x) >= 10)  x只有10个元素，存储字符串最大9个字符。  另外，实在是奇怪的问题的话，对于VC来说还有可能是你链接的库设置不好，修改为链接静态库试试。  Multi-threaded (/MT)

user: user-2
content: 下一次使用时会不会在tc中遇到上个文件的eof，本人是小白，随便猜猜，看看就好

user: user-2
content: 不清楚，暂时发现，每次重新使用tc时，是不是要zeromemry或者memset

user: user-0
content: 还是不行 郁闷啊 啊啊啊啊

user: user-1
content: 1. 首先，close, remove这些调用，应该在返回值判断之后，再看errno, 这样代码就比较稳当。 2. 如果删除错误为13, 可能是外部程序打开了文件。因为你说单步调试没有问题，所以我推测是杀毒程序在扫描。 3. 避免这种问题，不妨在errno=13之后，暂停几秒重试一下。
user-0 提问: getchar返回值到底是int型还是char型？？

回复:
user: user-1
content: http://en.cppreference.com/w/c/io/getchar

user: user-1
content: 返回的是int型，如果你用char接收，会隐式转换成char型，也就是对应的字符

user: user-2
content: 你可以直接到stdio.h文件中看到getchar的函数声明

user: user-2
content: 返回的是int, 发生是隐式类型转换

user: user-3
content: http://blog.csdn.net/lonfee88/article/details/7542641

user: user-4
content: 返回的不是char类型的字符，而是你打印的时候，是以字符的形式打印的。

user: user-5
content: getc, getwc, getchar, getwchar Read a character from a stream (getc, getwc), or get a character from stdin (getchar, getwchar).  int getc( FILE *stream );  wint_t getwc( FILE *stream );  int getchar( void );  wint_t getwchar( void );  Routine Required Header Compatibility  getc <stdio.h> ANSI, Win 95, Win NT  getwc <stdio.h> or <wchar.h> ANSI, Win 95, Win NT  getchar <stdio.h> ANSI, Win 95, Win NT  getwchar <stdio.h> or <wchar.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns the character read. To indicate an read error or end-of-file condition, getc and getchar return EOF, and getwc and getwchar return WEOF. For getc and getchar, use ferror or feof to check for an error or for end of file.  Parameter  stream  Input stream  Remarks  Each of these routines reads a single character from a file at the current position and increments the associated file pointer (if defined) to point to the next character. In the case of getc and getwc, the file is associated with stream (see Choosing Between Functions and Macros). Routine-specific remarks follow.  Routine Remarks  getc Same as fgetc, but implemented as a function and as a macro.  getwc Wide-character version of getc. Reads a multibyte character or a wide character according to whether stream is opened in text mode or binary mode.   getchar Same as _fgetchar, but implemented as a function and as a macro.  getwchar Wide-character version of getchar. Reads a multibyte character or a wide character according to whether stream is opened in text mode or binary mode.    Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _gettc getc getc getwc  _gettchar getchar getchar getwchar    Example  /* GETC.C: This program uses getchar to read a single line  * of input from stdin, places this input in buffer, then  * terminates the string before printing it to the screen.  */  #include <stdio.h>  void main( void ) {    char buffer[81];    int i, ch;     printf( "Enter a line: " );     /* Read in single line from "stdin": */    for( i = 0; (i < 80) &&  ((ch = getchar()) != EOF)                          && (ch != '\n'); i++ )       buffer[i] = (char)ch;     /* Terminate string with null character: */    buffer[i] = '\0';    printf( "%s\n", buffer ); }   Output  Enter a line: This is a test This is a test   Stream I/O Routines  See Also   fgetc, _getch, putc, ungetc

user: user-6
content: 正常返回值是int，如果赋值给char会自动转换
user-0 提问: 加不加*，都可以怎么回事？ 函数指针

回复:
user: user-1
content: 加不加*都是一样的。 http://blog.csdn.net/shiliangsl0115/article/details/6152188

user: user-2
content: 函数指针可以不用加*，也可以加多个*  ........
user-0 提问: 在头文件中定义函数并封装为Dll的问题

回复:
user: user-1
content: 头文件包含的是否正确一般只影响编，程序运行错误可能是由于你代码哪里的问题

user: user-0
content: 多谢楼上2位指点 @paschen 我再看看他的代码，估计指针用的有问题 @zhao4zhong1 现在用的delphi程序调用，没有源码。等我写个调用程序调试下看

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

回复:
user: user-1
content: #9#10果真大神

user: user-2
content: 让他们减去( 'A'-0x0A)  ‘A’ - ( 'A'-0x0A) ‘B’ - ( 'A'-0x0A)

user: user-3
content: #include <stdio.h> unsigned char buf_1[2] = {'A', 'B'}; unsigned char buf_2[2]; int v0,v1; int main() {     sscanf((const char *)buf_1,"%1X%1X",&v0,&v1);     buf_2[0]=v0;     buf_2[1]=v1;     printf("0x%02X,0x%02X\n",buf_2[0],buf_2[1]);     return 0; } //0x0A,0x0B //

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

user: user-4
content: 计算机只认二进制，十六进制和十进制都是对人的理解来说的。无论写成unsigned char buf_2[2] = {0x0A, 0x0B}; 还是unsigned char buf_2[2] = {10, 11};  在内存中保存的值是一样的。

user: user-5
content: 0x0A只是写法是十六进制而已，实际是二进制存储的 要转换，先把字符放到字符串中，然后调用sscanf或strtoul

user: user-6
content: 'a'-30

user: user-7
content: 引用 4 楼 halloworldd 的回复:[quote=引用 1 楼 user-7 的回复:] 0x0A跟'0x0A'是两个东西，一个是代码里的数字的表示方法，一个是字符串。 buf_2[i] = buf_1[i]-'A' + 10  是转化成十六进制数0x0A，不是字符串“0x0A”  unsigned char buf_1[2] = {'A', 'B'};  //转化为下面的十六进制 unsigned char buf_2[2] = {0x0A, 0x0B}[/quote] 在内存里面0x0A就是10， unsigned char buf_2[2] = {0x0A, 0x0B}跟unsigned char buf_2[2] = {10, 11}是一样的。 0x0A只是数字的另一种代码表达方式

user: user-0
content: 引用 1 楼 user-7 的回复:0x0A跟'0x0A'是两个东西，一个是代码里的数字的表示方法，一个是字符串。 buf_2[i] = buf_1[i]-'A' + 10  是转化成十六进制数0x0A，不是字符串“0x0A”  unsigned char buf_1[2] = {'A', 'B'};  //转化为下面的十六进制 unsigned char buf_2[2] = {0x0A, 0x0B}

user: user-0
content: 引用 1 楼 user-7 的回复:0x0A跟'0x0A'是两个东西，一个是代码里的数字的表示方法，一个是字符串。 buf_2[i] = buf_1[i]-'A' + 10  不好意思没说清楚，是转化成十六进制数，0x0A，不是字符串“0x0A”

user: user-7
content: 说错，'0x0A'是什么鬼，字符串是双引号

user: user-7
content: 0x0A跟'0x0A'是两个东西，一个是代码里的数字的表示方法，一个是字符串。 buf_2[i] = buf_1[i]-'A' + 10
user-0 提问: 新手求助

回复:
user: user-1
content: “was not declared in this scope”是一个错误信息，在编译的时候会遇到。其含义为标识符在其出现的地方是未被定义的。 出现该错误的时候，会同时把未定义的变量名显示出来。比如如下程序： int main() {     printf("%d",i);//这个i是没定义的。 } 就会显示一个'i' was not declared in this scope或者类似的错误信息出来。 对于变量和函数，如果未定义都会出现这个错误。 该错误出现时，需要根据出现该错误的行号及名称，查找对应名称变量或函数的作用，一般有如下几种可能： 1 忘记定义。写代码的时候疏忽了，导致一些变量直接使用但没有定义。只要对应定义相应的函数或变量即可。 2 拼写错误。写代码的时候，敲错了字符。比如sum敲成了Sum, average敲成averge等。对应修改即可。 3 作用域不正确。在超出变量和函数的作用域部分使用了该变量或函数。需要通过定义位置，或增加声明的手段，加大变量的作用域使其包含引用位置。

user: user-2
content: 没见到你avsco  avcour1 fali2 good 这些函数的定义啊

user: user-3
content: 第7行和第9行。 char course[5][10], *pcou; printf("Input course :\n"); pcou = course[0];  pcou = course[0];course[0]的类型是 char *，所以pcou的定义应该是 char **pcou？ 我是菜鸟，代码格式有点乱逻辑不太好看，所以就看了前几行。  建议题主提问题用标准代码格式和多写些注释，这样可以更快得到其他大神回复。
user-0 提问: 关于* argv[]指针数组在printf函数中的引用问题

回复:
user: user-1
content: 第一个应要用*argv  另外char *argv[] 参数其实是 char**类型

user: user-0
content: 又被谭浩强坑了……

user: user-2
content: 答案很简单，第一个错了

user: user-3
content: 我感觉第一的是错的，我自己敲了一遍确实有问题
user-0 提问: 如何定义二维数组的指针数组

回复:
user: user-1
content: int a[10][4]; 	int b[8][4]; 	int (*p[2])[4] = {a,b};

user: user-2
content: 引用 2 楼 qq423399099 的回复:http://blog.csdn.net/haihuanjack/article/details/8065974  这个很不错  int   a[3][6];  int **p=a;        像这样定义是错误的  因为a代表着除了第一列以外的列数的维数大小，如a+1的地址就是a[1]的地址，也就是a[1][0]的地址，而p仅是整形指针的指针，没跨越一次就是4字节，因此他们的大小是不匹配的，所以这样子直接等于号是不正确的。  要真正的定义方式应概是定义指向n维数组的指针，n就是除第一维的另外维度，  如上面的指针定义应该为  int  (*p)[6];  p=a;  这样子就 可以就可以通过p以下标形式来访问数组。

user: user-3
content: 仅供参考：//在堆中开辟一个3×4×5的3维int数组 #include <stdio.h> #include <malloc.h> int ***p; int i,j,k; void main() {     p=(int ***)malloc(3*sizeof(int **));     if (NULL==p) return;     for (i=0;i<3;i++) {         p[i]=(int **)malloc(4*sizeof(int *));         if (NULL==p[i]) return;         for (j=0;j<4;j++) {             p[i][j]=(int *)malloc(5*sizeof(int));             if (NULL==p[i][j]) return;         }     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             for (k=0;k<5;k++) {                 p[i][j][k]=i*20+j*5+k;             }         }     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             for (k=0;k<5;k++) {                 printf(" %2d",p[i][j][k]);             }             printf("\n");         }         printf("---------------\n");     }     for (i=0;i<3;i++) {         for (j=0;j<4;j++) {             free(p[i][j]);         }         free(p[i]);     }     free(p); } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //--------------- // 20 21 22 23 24 // 25 26 27 28 29 // 30 31 32 33 34 // 35 36 37 38 39 //--------------- // 40 41 42 43 44 // 45 46 47 48 49 // 50 51 52 53 54 // 55 56 57 58 59 //---------------

user: user-4
content: http://blog.csdn.net/haihuanjack/article/details/8065974

user: user-5
content: int     a[10][4]={{1}},  b[8][4]={{2}}; int     (*p[2])[4] = {a, b};
user-0 提问: 程序问题

回复:
user: user-0
content: 谢谢两位大神！

user: user-1
content: 你循环只需要交换时只需要遍历到一半  否则你第一个和最后一个交换，最后一个再和第一个交换就相当于没交换了

user: user-2
content: 因为你第二个for循环写错了。 循环的次数应该是for(i = 0; i < 5/2; i++){......} 你循环5次，相当于换过去又换回来了
user-0 提问: 指向函数的指针

回复:
user: user-1
content: http://blog.csdn.net/chenglibin1988/article/details/8916534

user: user-2
content: float (*function[4])(float x, float y);  float func(float x, float y) { 	//......... }  void main() { 	float x=0.0f, y=0.0f; 	function[0] = func; 	(*function)(x, y); }

user: user-2
content: 改成：   float func(float x, float y) {    //......... }

user: user-0
content: 光标的地方报错
user-0 提问: C语言简单问题求解

回复:
user: user-1
content: 一定要注意初始化，指针要预防野指针

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

user: user-3
content: 1.total没有初始化 2.你的switch (scanf("%d", &a))这些用法都是不对的。scanf的返回值并不是a的值，而是成功接收到赋值的个数（你程序里是1） 根本进入不了别的case分支  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: 静下心来自己一步一步的检查

user: user-5
content: 你的total变量没有初始化就使用了

user: user-6
content: 哪里不行，编译出错，运行出错？ float total; 变量没有初始化，改为float total = 0.0f;
user-0 提问: 完成输入一个数组逆序输出功能

回复:
user: user-1
content: #include<stdio.h>#include<windows.h>  改成  #include<stdio.h> #include<windows.h>

user: user-2
content: 你这代码贴的反人类。。。

user: user-3
content: 有什么提示？
user-0 提问: 二叉树

回复:
user: user-1
content: int count1(node *r) {     if (r->left && r->right)         return count1(left) + count1(right);     else if (r->left)         return 1 + count1(r-left);     else if (r->right)         return 1 + count1(r->right);     else         return 0; }

user: user-2
content: 用一个全局变量做计数器，遍历，判断度，计数器加一。或者用静态变量，声明在遍历函数内部。
user-0 提问: c语言数组传参

回复:
user: user-1
content: 数组名作为实参，就是把数组的首元素的地址作为实参传给了函数，实际上它还是一个指针，因此你在定义函数的时候，形参既可以 写成数组形式，也可以写成指针形式； 第二个问题你没有表述清楚啊。a[10]指一个数组或者数组的元素，要看它出现的位置。如果在声明中出现，它就是一个数组，在使用过程中出现，那就是数组中的一个元素。a[10]并不能表示指针。

user: user-1
content: 1.如果数组名作为实参，形参应该写成数组形式或指针变量； 例如：aver=average(score);   //数组名score作实参            float score[10];    //定义数组           ........           float average(float array[10]);   //定义函数，数组作为形参  2.(int *) a[10]是指针，指向包含10个整型元素的一维数组；    int *a[10]是数组，包含10个指向整型元素的指针；

user: user-2
content: a[10] 表示与 *(a+10)等效  也就是数组中第10个元素，但并不一定是偏移10字节大小的位置

user: user-2
content: int*p 与 int a[] 是一样的，都相当于int*p  因为数组名作为参数或者返回值已经退化为了指针

user: user-3
content: （形式）参数定义里，int *p 和 int p[] 是等价的。
user-0 提问: 关于两头文件调用问题

回复:
user: user-1
content: 什么叫不管用，上代码说清楚了。 c++ include 都是文本替换，然后才当程序编译呢。 上面两个说因为头文件 A 已经编译过了，真是难以置信，在 c++ 里，头文件压根不是编译单元，合来编译过了之说。

user: user-0
content: 引用 1 楼 user-3的回复:如果其他源文件也包含了那个头文件，编译时可能先编译了那个源文件，而你的main编译时由于已经编译过那个头文件了，所以不再编译 那肿么办，才能实现那样

user: user-0
content: 引用 2 楼 wh357589873的回复:对，A文件先编译。编译的时候没发现define。等后续的main定义的时候。A已经编译过了。 那怎么办 o(╥﹏╥)o

user: user-2
content: 对，A文件先编译。编译的时候没发现define。等后续的main定义的时候。A已经编译过了。

user: user-3
content: 如果其他源文件也包含了那个头文件，编译时可能先编译了那个源文件，而你的main编译时由于已经编译过那个头文件了，所以不再编译
user-0 提问: 循环之后  循环体内有一条语句未执行

回复:
user: user-1
content: getchar 会把你上一次接收后留在缓冲区中换行 符\n接收了，可能通过判断接收的字符是否为\n如果是，就再次getchar()

user: user-2
content: 在 p = getchar() 后面再加一个getchar().
user-0 提问: C语言%的用法

回复:
user: user-1
content: %号在C语言中就是一个整数模运算取余作用，楼主那个应该是特例数字吧。

user: user-2
content: 小心整数溢出

user: user-3
content: 使用位运算实现取模会更方便且高效
user-0 提问: 请求大神帮助

回复:
user: user-0
content: 引用 1 楼 fefe82 的回复:break 在哪?  另：http://en.cppreference.com/w/cpp/numeric/random/rand ； rand 不对，rand 没有参数。 srand 才需要一个参数。 break在逃跑成功后面，rand我一直加参数都是对的诶 。

user: user-1
content: break 在哪?  另：http://en.cppreference.com/w/cpp/numeric/random/rand ； rand 不对，rand 没有参数。 srand 才需要一个参数。

user: user-2
content: if(c==2)                 printf("逃跑成功\n");break;                 else                 printf("逃跑失败\n");  语法错误 要大括号~~~~
user-0 提问: 算法讨论

回复:
user: user-1
content: 一家签审完后，检查剩余五家签审状态，给其中未签审的发邮件，不就可以了，哪有什么24种。

user: user-2
content: 仅供参考：#include <stdio.h> double A[300][100]; double valuex[300]; double valuey[300]; int i; double fun00(double x,double y) {return x  +   y  ;}; double fun01(double x,double y) {return x*x+ 3*y  ;}; double fun02(double x,double y) {return x  + 2*y*x;}; //...  fun03(double x,double y) {return ...+...   ;}; //... //...  fun98(double x,double y) {return ...+...   ;}; double fun99(double x,double y) {return x/2+20*y  ;}; double (*funNN[100])(double,double)={     fun00,     fun01,     fun02, //  fun03, //  ... //  fun98,     fun99, }; int main() {     double x,y;     int f,FN;      for (i=0;i<300;i++) {         valuex[i]=(double)i;         valuey[i]=(double)i;     }     FN=3;     for (i=0;i<300;i++) {          x=valuex[i];          y=valuey[i];          for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);     }     for (i=0;i<3;i++) {         for (f=0;f<FN;f++) printf("%lg ",A[i][f]);         printf("\n");     } 	return 0; } //0 0 0 //2 4 3 //4 10 10

user: user-0
content: 引用 2楼ooolinux 的回复:一家签审完后，检查剩余五家签审状态，给其中未签审的发邮件，不就可以了，哪有什么24种。要求写在一封邮件上，要确定收件人，所以有24种
user-0 提问: 一个小程序

回复:
user: user-1
content: 引用 6 楼 HymanLiuTS的回复:[quote=引用 4 楼 liu545454 的回复:] [quote=引用 1 楼 user-3 的回复:] 后置的++是在你这条语句执行完后才加1，所以你输出的是最开始的那个元素，也就是2 *(p++) p++不是在括号里面吗？不是先加1？[/quote] 因为++运算符的优先级要高于*，所以你加不加小括号都是一样的。你就把后++想像成是一个函数，它先返回一个值得副本，然后再对自身加1[/quote] 明白了 谢谢

user: user-2
content: 引用 4 楼 liu545454 的回复:[quote=引用 1 楼 user-3 的回复:] 后置的++是在你这条语句执行完后才加1，所以你输出的是最开始的那个元素，也就是2 *(p++) p++不是在括号里面吗？不是先加1？[/quote] 因为++运算符的优先级要高于*，所以你加不加小括号都是一样的。你就把后++想像成是一个函数，它先返回一个值得副本，然后再对自身加1

user: user-0
content: 引用 1 楼 user-3 的回复:后置的++是在你这条语句执行完后才加1，所以你输出的是最开始的那个元素，也就是2 这一块有点糊涂

user: user-0
content: 引用 1 楼 user-3 的回复:后置的++是在你这条语句执行完后才加1，所以你输出的是最开始的那个元素，也就是2 *(p++) p++不是在括号里面吗？不是先加1？

user: user-0
content: 引用 2 楼 user-3 的回复:如果你希望输出的是4，写成 *++p 是的

user: user-3
content: 如果你希望输出的是4，写成 *++p

user: user-3
content: 后置的++是在你这条语句执行完后才加1，所以你输出的是最开始的那个元素，也就是2
user-0 提问: 约瑟夫环的问题，为啥我的代码运行出来结果总是不对呢？大家帮忙看一下哪里错了。

回复:
user: user-1
content: 比如DispList函数里的，你的s都没有初始化过，在for循环中就这样用s->next = p->next;？？？？？ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 二叉链表线索化中序遍历

回复:
user: user-1
content: 错误楼上都说清楚了. 参考：http://blog.csdn.net/aspnet_lyc/article/details/14126157

user: user-2
content: if(!P->lchild); 这句后面也多了分号  另外InThreading函数需要两个参数，你调用的时候只给了一个参数

user: user-2
content: struct BiThrnode *lchild,*rchild;  改成：  struct BiThrNode *lchild,*rchild;   void InorderThreading(BiThrNode *p); 后面多了一个分号

user: user-0
content: 亲 谢谢 谢谢 第三个问题呢？

user: user-3
content: typedef struct BiThrNode {    char data;    struct BiThrnode *lchild,*rchild;    int Ltag,Rtag; }BiThrNode;
user-0 提问: fatal error C1083: 无法打开包括文件: “bintree.h”: No such file or directory

回复:
user: user-1
content: 1.VS的当前路径是在工程所在的目录 2.使用绝对路径试试 3.右键项目--属性--配置属性--C/C++--附加包含目录里添加上bintree.h所在的路径

user: user-2
content: 找不到这个文件，必要时使用绝对路径
user-0 提问: 小白出没，求请教。。。

回复:
user: user-0
content: 引用 3 楼 zhttty523 的回复:for(i=0;i,m-1;i++) 中间的逗号改为小于就行了是我太粗心了

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

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: 我刚试了一下，程序可以运行成功啊！没有LZ所谓的停止运行

user: user-3
content: 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: for(i=0;i,m-1;i++) 中间的逗号改为小于就行了

user: user-5
content: for(i=0;i,m-1;i++) 你中间是逗号，需要分号

user: user-6
content: 建议单步调试一下，看是哪一行出错了  #include<stdio.h>  int leap(int a) {  	if(a%4==0 && a%100!=0 || a%400==0) 		return 1; 	else  		return 0; }  int number(int y,int m,int d) { 	int i,sum=0; 	int a[12]={31,29,31,30,31,30,31,31,30,31,30,31}; 	int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};  	if(leap(y)==1) 		for(i = 0;  i< m-1; i++)                          			sum += a[i]; 	else  		for(i = 0 ;i < m-1; i++) 			sum += b[i]; 	sum += d;  	return sum; } int main(void) { 	int year,month,day,n; 	 	printf("输入年月日\n"); 	scanf("%d%d%d", &year, &month, &day);  	n = number(year, month, day);     printf("%d\n",n);  	return 0; }
user-0 提问: c里对函数的循环调用出错，求教

回复:
user: user-1
content: 请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？

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

user: user-3
content: 建议单步跟踪程序运行，观察每一步是否与你期望的一致

user: user-0
content: 感觉关键就是循环调用那里有问题
user-0 提问: 如何实现循环读入结构体数组字段？

回复:
user: user-0
content: 谢谢！把fopen那句放在主函数for循环外就成功了。另外不需要指向结构体的指针pst++辅助，删除即可。

user: user-1
content: 因为你每次重新打开文件，每次打开时文件指针都在开头，把你的文件打开放在主函数循环外面

user: user-2
content: 当重新打开文件时，文件的指针指向开头。 把文件打开和关闭放到循环外面。
user-0 提问: fscanf函数的使用需要注意的一个地方

回复:
user: user-1
content: fscanf对应的源代码是公开的。楼主不会自行“升级”吗？

user: user-0
content: %*[^\n] 这个通配符的意思是 跳过所有字符 直到换行符为止。 好像不是这个意思。

user: user-2
content: fscanf(fp, "%[^\n]%*c", sLineWord);
user-0 提问: 为什么程序运行只有个黑框没有任何内容，之前的程序也是这样

回复:
user: user-0
content: 哈哈，谢谢，现在已经解决了，应该是sublime的问题

user: user-0
content: 对的，现在在IDE里行了，但是在cmd和直接运行可执行文件就还是黑框没反应

user: user-1
content: 因为你程序一直在死循环里  你的 for(k=1;k<=4;++j)  写错了  改成 for(k=1;k<=4;++k)

user: user-2
content: for(k...)那里，应该是k++吧，你写错了。
user-0 提问: 求C语言做出的程序怎么保存数据

回复:
user: user-1
content: 创建一个存档文件。存档时写入与当前游戏进程有关的数据，读档时读取文件，还原游戏进程。可以对数据进行简单的加密，就不那么容易被修改了。

user: user-2
content: 引用 2 楼 c_xiaoxiaobai 的回复:[quote=引用 1 楼 user-3 的回复:] 保存到文件， 具体怎么做呢？？我还是个小白 能不能说的具体点内[/quote]  网上搜索读写二进制文件

user: user-2
content: 将你要保存的值写入到文件，下次从文件读取

user: user-3
content: 简单一点可以一个文件一个配置，文件名是key, 文件内容是value

user: user-3
content: 引用 2 楼 c_xiaoxiaobai 的回复:[quote=引用 1 楼 user-3 的回复:] 保存到文件， 具体怎么做呢？？我还是个小白 能不能说的具体点内[/quote] fopen, fprintf, fscanf, fclose

user: user-0
content: 引用 1 楼 user-3 的回复:保存到文件， 具体怎么做呢？？我还是个小白 能不能说的具体点内

user: user-3
content: 保存到文件，
user-0 提问: 求教大神：C语言小程序错误

回复:
user: user-0
content: 引用 3 楼 paschen 的回复:循环条件是i<=M，当i 等于M时越界了，score[M]的有效索引是0 到 M-1谢了！！

user: user-1
content: 循环条件是i<=M，当i 等于M时越界了，score[M]的有效索引是0 到 M-1

user: user-2
content: 循环次数一样,但是使用的元素不同

user: user-2
content: 不等价, 一个是 i=0  一个是 i=1

user: user-3
content: 数组下标是从0开始。 如果你用这个（i=1;i<=M;i++）那么肯定是写不到第一个元素和最后一个元素。

user: user-4
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-5
content: 数组下标是0开头

user: user-6
content: 第一个，我不知道你M是不是用的宏，如果用的宏到没问题，没用宏定义M，那你这里就是错的(数组大小定义的时候必须是一个常量)。  第二个，数组的下标是从0到M-1的，所以你的循环应该是从0开始，到M-1。
user-0 提问: 出现未知问题，求帮助！

回复:
user: user-1
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-2
content: #include<stdio.h> int main() {     int a,b;     char zi;     scanf("%d",&a);     scanf("%d",&b);     scanf("%c",&zi);     getchar();     printf("%c",zi);     return 0; } 在scanf后面再加一个getchar就可以了，因为你输入的是字符，而C语言中回车符号就代表两个字符，当你按下回车时字符就已经被scanf读取了。 再加一个getchar就是为了吞噬回车字符
user-0 提问: c语言关于ip定位查询

回复:
user: user-1
content: https://www.baidu.com/s?wd=C源代码%20curl

user: user-0
content: 引用 10楼gldcpp 的回复:用curl吧  自己可以搞定的 就是一个exe 你启动的时候传参数就行 有文档的curl函数怎么调用

user: user-0
content: 引用 6楼赵4老师 的回复:引用 5 楼 qq_36676825 的回复:[quote=引用 2楼赵4老师 的回复:]使用curl调用www.ip138.com能把程序写出来吗 给钱就帮你写。[/quote]那不用了

user: user-1
content: 引用 5 楼 qq_36676825 的回复:引用 2楼赵4老师 的回复:使用curl调用www.ip138.com能把程序写出来吗 给钱就帮你写。

user: user-2
content: 用curl吧  自己可以搞定的 就是一个exe 你启动的时候传参数就行 有文档的

user: user-0
content: 引用 8楼wh357589873 的回复:http://www.jb51.net/article/38231.htm  看这个吧。这种应用性质的就不要用C语言了，C语言不适合做应用性质的。我也不想用c，只是老师的一个要求，不然就用php写了

user: user-3
content: http://www.jb51.net/article/38231.htm  看这个吧。这种应用性质的就不要用C语言了，C语言不适合做应用性质的。

user: user-1
content: 使用curl调用www.ip138.com

user: user-0
content: 引用 2楼赵4老师 的回复:使用curl调用www.ip138.com能把程序写出来吗

user: user-0
content: 引用 2楼赵4老师 的回复:使用curl调用www.ip138.com还有别的办法吗

user: user-0
content: 引用 1楼user-4 的回复:可以使用纯真IP数据库,格式介绍的很详细,查找就可以了怎么用小白求教学

user: user-4
content: 可以使用纯真IP数据库,格式介绍的很详细,查找就可以了
user-0 提问: 读取文件中有效数据的速度问题

回复:
user: user-0
content: 谢谢大家的帮助

user: user-0
content: 找到法子了，直接在open的时候，加上参数O_DIRECT就好了，因为文件中的有效信息很少，系统缓存后反而浪费了时间，这样直接读写反倒是提速了

user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-1
content: 2楼大神已经帮过忙了。

user: user-0
content: pread函数刚刚也试了一下，也没有提升速度。 倒是不涉及多个文件的读写，我只是从单个文件中，提取有效的数据，有效的数据占比很小，速度上不去的问题；现在应该是虽说我只读取了很小的比例，因为有效数据均匀分布在文件各个位置，但是系统应该把文件分块从硬盘上逐步都缓存到内存了，相当于在内存开辟整个空间，然后缓存了，这样是不是浪费了时间？ mmap的方法也用过了，效果是一样的。 求大神帮忙，不要沉了

user: user-2
content: 使用文件映射方式读取文件

user: user-1
content: 在文件大小相同的前提下：  读刚读过的文件比头次读没读过的文件快  读转速快的硬盘上的文件比读转速慢的硬盘上的文件快  读没有磁盘碎片的文件比读有磁盘碎片的文件快  读文件不处理比边读边处理快  单线程从头到尾一次读文件比多线程分别读文件各部分快（非固态硬盘上）  读固态硬盘上的文件比读普通硬盘上的文件快  您是否希望迅速对您频繁使用的文件进行碎片整理？使用 Contig 优化单个的文件，或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428

user: user-3
content: lseek与read两次系统调用，所以比较慢，你可以试着每次读2560个字节，这样不需要调用了lseek了  还有一个pread函数，不知道你的系统支不支持，它不改变文件指针，速度应该更快
user-0 提问: C语言实现RSA解密时的一个问题

回复:
user: user-1
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 仅供参考：void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-0
content: 引用 2楼赵4老师 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。很高兴你可以来回答，这个问题我自己解决了，但是新的问题来了，在加解秘中文字符时只能有一部分加解密，其他的全部成乱码了，最后谢谢你宝贵的指点！

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

user: user-0
content: for (i = 1;i <= filesize;++i) {     //这里是转字符为整形保存为数组的，其实我觉得没必要 			inside_ol[i] = inside_ol1[i - 1]; 			inside_ol[i] = inside_ol[i]; 			inside_ol2[i] = RSA_encrypt(inside_ol + i, e); int transform(int b, int *a)     //这里是解密的时候的模指运算模块，加密的时候也是这个。 { 	int t, temp = -1; 	while (b>0) { 		t = b % 2; 		++temp; 		a[temp] = t; 		b = b / 2; 	} 	return temp; } int RSA_encrypt(char *inside_ol, int b) { 	int a = *inside_ol; 	int x = 0, back = 1, k, i, s[1000]; 	k = transform(b, s); 	for (i = k;i >= 0;i--) { 		x = 2 * x; 		back = (back*back) % n; 		if (s[i] == 1) { 			x++; 			back = (back*a) % n; 		} 	} 	return back; }
user-0 提问: 跪求C语言的技术大牛

回复:
user: user-0
content: 引用 9 楼 paschen 的回复:[quote=引用 8 楼 qq_15173325 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 qq_15173325 的回复:] [quote=引用 5 楼 paschen 的回复:] scanf("%s",&strs);    你的strs只是一个字符，接收后会导致越界  %s需要的是一个字符串  如果我要strs 是字符串  那我是不是要定义它为指针类型？ [/quote]  char strs[100];[/quote]  还是不是很明白 main()   {           char *str,*num;           char strs[100];           scanf("%s",strs);           str = strs;           printf("复制后：%s\n",str);   }   帮我修改一下  [/quote]  代码没问题啊[/quote]  char strs;         scanf("%s",&strs);         printf("复制后：%s\n",&strs);  strs 获取值后   要输出&strs么？  那strs变成什么了？

user: user-1
content: C和指针 《深入理解C指针》

user: user-0

user: user-2
content: 引用 8 楼 qq_15173325 的回复:[quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 qq_15173325 的回复:] [quote=引用 5 楼 paschen 的回复:] scanf("%s",&strs);    你的strs只是一个字符，接收后会导致越界  %s需要的是一个字符串  如果我要strs 是字符串  那我是不是要定义它为指针类型？ [/quote]  char strs[100];[/quote]  还是不是很明白 main()   {           char *str,*num;           char strs[100];           scanf("%s",strs);           str = strs;           printf("复制后：%s\n",str);   }   帮我修改一下  [/quote]  代码没问题啊

user: user-0
content: 引用 7 楼 paschen 的回复:[quote=引用 6 楼 qq_15173325 的回复:] [quote=引用 5 楼 paschen 的回复:] scanf("%s",&strs);    你的strs只是一个字符，接收后会导致越界  %s需要的是一个字符串  如果我要strs 是字符串  那我是不是要定义它为指针类型？ [/quote]  char strs[100];[/quote]  还是不是很明白 main()   {           char *str,*num;           char strs[100];           scanf("%s",strs);           str = strs;           printf("复制后：%s\n",str);   }   帮我修改一下

user: user-2
content: 引用 6 楼 qq_15173325 的回复:[quote=引用 5 楼 paschen 的回复:] scanf("%s",&strs);    你的strs只是一个字符，接收后会导致越界  %s需要的是一个字符串  如果我要strs 是字符串  那我是不是要定义它为指针类型？ [/quote]  char strs[100];

user: user-0
content: 引用 5 楼 paschen 的回复:scanf("%s",&strs);    你的strs只是一个字符，接收后会导致越界  %s需要的是一个字符串  如果我要strs 是字符串  那我是不是要定义它为指针类型？

user: user-2
content: scanf("%s",&strs);    你的strs只是一个字符，接收后会导致越界  %s需要的是一个字符串

user: user-0
content: 引用 2 楼 lzlssg 的回复:用strcpy啊，字符串不能直接赋值啊  我已经删掉strcpy这个函数了，因为这里已经报错了。

user: user-0
content: 引用 1 楼 60 的回复: main()   {           char *str,*num;           char strs[100];           scanf("%s",strs);           str = strs;           printf("复制后：%s\n",str);   }      你没有搞清楚char和char*/char[]的区别。在scanf和printf中，%s适用于 char*/char[]， %c适用于 char。 char* 类型的str，在使用*str得到的是字符串str的第一个字符，是char类型。   比如我输入haha，char strs[100]; 这个变量是不是就是字符串了？  我现在很混乱！！！！

user: user-3
content: 用strcpy啊，字符串不能直接赋值啊

user: user-4
content: main()   {           char *str,*num;           char strs[100];           scanf("%s",strs);           str = strs;           printf("复制后：%s\n",str);   }      你没有搞清楚char和char*/char[]的区别。在scanf和printf中，%s适用于 char*/char[]， %c适用于 char。 char* 类型的str，在使用*str得到的是字符串str的第一个字符，是char类型。
user-0 提问: linux 编码 转码

回复:
user: user-1
content: //iconv_linux下字符集编码转换轻松实现 (1) iconv_t iconv_open(const char *tocode, const char *fromcode); //此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。 (2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft); //此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。 (3) int iconv_close(iconv_t cd); //此函数用于关闭转换句柄,释放资源。  //例子1: 用C语言实现的转换示例程序  /* f.c : 代码转换示例C程序 */ #include <iconv.h> #define OUTLEN 255 main() { char *in_utf8 = "姝ｅ?ㄥ??瑁?"; char *in_gb2312 = "正在安装"; char out[OUTLEN];  /*unicode码转为gb2312码*/ rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN); printf("unicode-->gb2312 out=%sn",out); //gb2312码转为unicode码  rc = g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN); printf("gb2312-->unicode out=%sn",out); } /*代码转换:从一种编码转为另一种编码*/ int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd; int rc; char **pin = &inbuf; char **pout = &outbuf;  cd = iconv_open(to_charset,from_charset); if (cd==0) return -1; memset(outbuf,0,outlen); if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1; iconv_close(cd); return 0; } /*UNICODE码转为GB2312码*/ int u2g(char *inbuf,int inlen,char *outbuf,int outlen) { return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); } /*GB2312码转为UNICODE码*/ int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen) { return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen); }  //例子2: 用C++语言实现的转换示例程序  /* f.cpp : 代码转换示例C++程序 */ #include <iconv.h> #include <iostream>  #define OUTLEN 255  using namespace std;  // 代码转换操作类  class CodeConverter {  private: iconv_t cd; public:  // 构造 CodeConverter(const char *from_charset,const char *to_charset) { cd = iconv_open(to_charset,from_charset); }   // 析构 ~CodeConverter() { iconv_close(cd); }   // 转换输出 int convert(char *inbuf,int inlen,char *outbuf,int outlen) { char **pin = &inbuf; char **pout = &outbuf;  memset(outbuf,0,outlen); return iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen); } };  int main(int argc, char **argv) { char *in_utf8 = "姝ｅ?ㄥ??瑁?"; char *in_gb2312 = "正在安装"; char out[OUTLEN];  // utf-8-->gb2312 CodeConverter cc = CodeConverter("utf-8","gb2312"); cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN); cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;  // gb2312-->utf-8 CodeConverter cc2 = CodeConverter("gb2312","utf-8"); cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN); cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl; }    二、利用iconv命令进行编码转换  iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件。  用法： iconv [选项...] [文件...]  有如下选项可用:  输入/输出格式规范： -f, --from-code=名称 原始文本编码 -t, --to-code=名称 输出编码  信息： -l, --list 列举所有已知的字符集  输出控制： -c 从输出中忽略无效的字符 -o, --output=FILE 输出文件 -s, --silent 关闭警告 --verbose 打印进度信息  -?, --help 给出该系统求助列表 --usage 给出简要的用法信息 -V, --version 打印程序版本号  例子: iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt 这个命令读取aaa.txt文件，从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件。  小结: Linux为我们提供了强大的编码转换工具,给我们带来了方便。
user-0 提问: 怎么在程序开始之前就大概估计一下时间呢？

回复:
user: user-1
content: 引用 6 楼 hswshy 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 搜“曳光弹”。 exm?????[/quote] http://www.cnblogs.com/SkyMouse/archive/2011/08/23/2150079.html

user: user-2
content: 这个真心不是单独的一个程序的性能就必然决定的。

user: user-3
content: 运行时间是跟硬件相关的

user: user-0
content: 额...是我现在学的太少了。。。还以为用现在的知识可以解决。。。谢谢大家

user: user-4
content: 你算下时间复杂度啊

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:搜“曳光弹”。 exm?????

user: user-5
content: 用profiler分析一下，比如intel VTune Amplifier

user: user-6
content: 每次循环计算本次循环的时候，然后估计总时间，不断修改

user: user-1
content: 搜“曳光弹”。
user-0 提问: 初始化{0}的问题

回复:
user: user-1
content: int a[5]={0}; 这个是初始化5个元素都是int型 0，即对应asII码值48号0这个元素---对吧  不对，初始化5个元素为0，对应的ASCII值为0。  char  b[5]={0}; 这个是初始化5个元素都chart型 0，即对应asII码值0号‘\0’这个元素对么。。。。  对的。  ===== 以下都是数字0 0 十进制表示 00 八进制表示 0x0 十六进制表示 '\0' ascii code 0 八进制表示 '\x0' ascii code 0 十六进制表示 ===== 以下都是字符'0' 48 '0' ascii code 数值十进制表示 060 '0' ascii code 数值八进制表示 0x30 '0' ascii code 数值十六进制表示 '0' ascii code '\060' ascii code 八进制表示 '\x30' ascii code 十六进制表示

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

user: user-3
content: 第一个 对的  第二个  不等价  '\N'  和 字母N的ascii值等价,是一个固定的数值

user: user-4
content: 都是数字0，不是'0'  对于数字，0是0，48是48. 对于字符，0是'\0'，48是'0'  相同的二进制，你用不同数据类型解释它可能会显示不同的结果

user: user-5
content: 引用C 语言里 '\N' 和 N 是等价的，N 可以是值介于十进制 0~255 之间八进制、十进制、十六进制数。 这句话又怎么理解？？？？？  \ 是引导一个转义字符 '\123' 就相当于 ascii为 123的字符

user: user-5
content: 引用int a[5]={0}; 这个是初始化5个元素都是int型 0，即对应asII码值48号0这个元素---对吧  char  b[5]={0}; 这个是初始化5个元素都chart型 0，即对应asII码值0号‘\0’这个元素对么。。。。  对的，会将这片内存用0填充
user-0 提问: 关于C语言打开文件的问题

回复:
user: user-1
content: 参考： https://msdn.microsoft.com/en-us/library/bb776913.aspx https://msdn.microsoft.com/en-us/library/bb775966.aspx

user: user-1
content: https://msdn.microsoft.com/en-us/library/ms646829.aspx#open_file

user: user-1
content: 这个在各个平台的实现是不同的。我目前只知道在 Windows 上你需要： #include <windows.h> #pramga comment(lib, "comdlg32.lib") 调用 GetOpenFileName 或者使用 COM 接口 IFileDialog 来实现。

user: user-2
content: 仅供参考：#pragma comment(lib,"user32") #include <windows.h> #include <conio.h> void main() {     int r;      cprintf("press any key...");     getch();     r=MessageBox(NULL,"Hello!","MsgBox",MB_OKCANCEL|MB_SETFOREGROUND);     cprintf("\r\nr=%d",r); }

user: user-3
content: FILE *inpt = fopen("D:\123\12.txt","r"); 改成：  FILE *inpt = fopen("D:\\123\\12.txt","r"); //或者： FILE *inpt = fopen("D:/123/12.txt","r");

user: user-4
content: "D:\123\12.txt"  改成  "D:\\123\\12.txt"  使用 \\  转义字符代替 \

user: user-5
content: 这个是要界面的，建议看看MFC或者Qt的知识。 main函数那个是控制台，做不来的
user-0 提问: C 宏连接符 ## 的问题？？？

回复:
user: user-1
content: #include <stdio.h>  #define toString(c) "TL"#c"XY" #define fun(a,b) toString(a##b) int main() {    printf("%s\n",fun(1,2)); }

user: user-2
content: TLabXY根本就不是变量，无法赋值

user: user-0
content: 等待高手解答。。。。。。。

user: user-0
content: 我刚才试了一下，发现不行，错误如下： Error[Pe137]: expression must be a modifiable lvalue  Error while running C/C++ Compiler   我是做嵌入式开发的，用的IAR开发环境，我已经将开发环境设置为标准的C语言标准，    我实际的应用场景是这样的，  #define  __func(a,b)      (TLabXY = 1)  #define func(a,b)   __func(a,b)  void main(void) {     func(1,2); }  希望在调用中实现   TL12XY = 1

user: user-3
content: TL ## a ## b ## XY

user: user-4
content: #define  __func(a,b)      (TL ## a ## b ## XY = 1)  #define func(a,b)   __func(a,b)  void main(void) { 	int TL12XY; 	func(1,2); }

user: user-5
content: #与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a)   #a #define h(a) g(a) int main() {         printf("%s\n", h(f(1,2)));   // 12         printf("%s\n", g(f(1,2))); // f(1,2)         return 0; } 宏展开时： 如果宏定义以#开头，不展开参数，直接替换。 故g(f(1,2))--->#f(1,2)--->"f(1,2)"； 如果宏定义不以#开头，展开参数，直接替换，由外层向里层，如果碰到的是#开头的宏，不继续往里层展开，往外层展开。 由外层向里层，如果碰到的是以非#开头的宏，继续往里层走，直至最里层，开始一层层往外层展开。 故h(f(1,2))--->h(12)--->g(12)---->#12----->"12"。 PS： ##在宏中定义，是字符连接符 如a##b##c 等同于 "abc" #在宏开头出现，是表示宏展开的方式不同 #a 等同于"a" #abc 等同于 "abc" 复杂的: #include <stdio.h> #define f(a,b) a##b #define g(a)   #a #define h(a) g(a) int main() {         char a = 'a';         cout<<g(a)<<endl; // a         cout<<g(g(a))<<endl; // a         printf("%s\n", h(f(1,2)));   // 12         printf("%s\n", g(f(1,2))); // f(1,2)         printf("%s\n", g(h(f(1,2)))); // h(f(1,2))         printf("%s\n", h(g(f(1,2)))); // "f(1,2)"         printf("%s\n", h(h(f(1,2)))); // "12"         system("pause");         return 0; } 预处理后的：（在编译选项中添加/EP /P后编译生成的.i文件。gcc加-E） int main() {         char a = 'a';         cout<<"a"<<endl;         cout<<"g(a)"<<endl;         printf("%s\n", "12");         printf("%s\n", "f(1,2)");         printf("%s\n", "h(f(1,2))");         printf("%s\n", "\"f(1,2)\"");         printf("%s\n", "\"12\"");         system("pause");         return 0; } --------------------------------------------------- 宏解析 1.       ##操作符 ##操作符它的作用是在替代表中将其前后的参数连接成为一个预处理符号，它不能出现于宏替代表的开端和末尾。 例： #define concat(s,t) s##t #define AAA ABC concat(A, AA) 将被替换成 ABC 2.       重新扫描和替换 在替换列表中的所有参数替换过之后，预处理器将对结果token序列重新扫描以便对其中的宏再次替换。 当正在替换的宏在其替换列表中发现自身时，就不再对其进行替换。在任何正在嵌套替换的宏的替换过程中遇到正被替换的宏就对其不再进行替换（防止递归）。 例： #define ROOT AAA CCC #define AAA ROOT ROOT 将被替换成 ROOT CCC

user: user-3
content: 要么宏展开时定义 #define func(a,b) int TL ## a ## b ## XY = 1
user-0 提问: c语言初学，函数

回复:
user: user-1
content: 用VS吧，直接全选对齐下就知道少了个括号了。 http://blog.csdn.net/cometnet/article/details/19551125

user: user-2
content: while后面少了一个大括号

user: user-3
content: while少个｝

user: user-0
content: 引用 4 楼 cocoabird的回复:出错信息是啥？看你程序没问题 这个，就是找不到文件

user: user-3
content: 出错信息是啥？看你程序没问题

user: user-4
content: https://github.com/user-4/CodeBlocks

user: user-0
content: 引用 1 楼 user-4的回复:  找一个好一点的 IDE ，可以风格化代码，然后就可以看清楚了  c-free 如果没有 风格化代码 就不要用了 好的，不过大神用的什么编译软件？

user: user-4
content: 找一个好一点的 IDE ，可以风格化代码，然后就可以看清楚了  c-free 如果没有 风格化代码 就不要用了
user-0 提问: 数列问题?

回复:
user: user-1
content: if(j==4)  printf(“\n”);的话，你一行的最后一个数就和前面4个数分在不同的两行里了  换成这样的话，可以用j==4  {  			printf("%d  ", a[i][j]); 			if (j == 4)  printf("\n"); 		}

user: user-2
content: 引用 2 楼 baidu_33792305 的回复:问题更正： 可以正确运行结果了。 想问一下，为何： if(j= =0)  printf(“\n”); 而不是j==4时换行？  每次输入新的一行时时行换行，当然你要每次输入完一行时换行也行

user: user-0
content: 问题更正： 可以正确运行结果了。 想问一下，为何： if(j= =0)  printf(“\n”); 而不是j==4时换行？

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

回复:
user: user-0
content: 您可以试试我的代码。。0+0是没有问题的呢。样例输入也没有问题。自己也想了好多数也没找到问题

user: user-1
content: 比如0+0 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110

user: user-0
content: 可以详细一点吗

user: user-1
content: 边界条件 输入输出格式 ……
user-0 提问: 有关C语言的内存布局问题

回复:
user: user-1
content: 内存中是连续的按顺序的一块内存,有可能需要字节对其

user: user-2
content: 直接%p打印地址看看？

user: user-3
content: http://blog.csdn.net/koches/article/details/7526377

user: user-4
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
user-0 提问: 这个程序中的问题？

回复:
user: user-1
content: 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 楼主可以尝试着每次打印中间结果，因为对于int型整数相除，结果还是得到一个int型的整数，也就是说会产生四舍五入的问题。因此计算结果不正确。

user: user-0
content: OK，谢谢了！！

user: user-3
content: 这个问题主要是除法的原因。定义成int型，a/b如果是一个分数，那么就相当于是把它变成了一个float型数了，而实际上应该是一个int型的数。

user: user-4
content: a/b为int时相除依旧为int。比如a=2，b=3，a/b=0。

user: user-0
content: 菜鸟求教~~~在线等~~~
user-0 提问: Linux调试程序的问题

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

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

user: user-0
content: 注：前面关于end1我也声明了这个变量。。
user-0 提问: 定义的结构体，没有声明任何变量，编译时候有什么影响

回复:
user: user-1
content: #2 是对的

user: user-2
content: 1、不存在  2、编译器默认不会链接那些函数，VS里有个/Gy参数（函数级链接）

user: user-3
content: 会降低那么一点编译速度

user: user-4
content: 没有实例化 应该没有了吧  #include  没影像的，只要函数没有，就不会增大代码尺寸
user-0 提问: 关于 Fibonacci数列 取余

回复:
user: user-1
content: 没有必要处处取余， 只sum取就够了。  取余也是计算量啊  （a + b ）mod c  = （a mod c） + （b mod c） a*b mod c = (a mod c ) * (b mod c)  a/b mod c 就不行了， 这才有个逆元的说法， 想知道逆元的概念就自己百度吧

user: user-2
content: a+b = c 因为 进位是从低位进到高位  所以 c的n位的数据 只会被a 和 b 中 n位和低于n位的数据影响  高于n位的数 不会影响n位数据

user: user-3
content: 同余定理 ？
user-0 提问: 计算矩阵行列式bug,望解决

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-2
content: 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 新人求解！！！！！

回复:
user: user-1
content: fot(i=1;(i<=n);i++)  改成  for(i=1;(i<=n);i++)

user: user-2
content: 你这里边有好多好多错误 1）拼写错误 for 写成fot 2）声明错误 int decide (int n); 应该放到main函数之前 3）逻辑错误 根本看不清你要干嘛 4）调用错误 如果想在decide函数中读取n的或需要传入指针 5）变量重复 n定义了好几遍

user: user-3
content: 你这编码风格不好

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

user: user-4
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-5
content: int decide(int n);这个函数应该不需要传入参数了