Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请教sizeof（指针）问题。

回复:
user: user-1
content: 4楼说的很精简。

user: user-2
content: 在Win32下sizeof(指针)都等于4吧，楼主试着输出： sizeof(*p1),sizeof(*p2),sizeof(*p3),sizeof(*p4) 也许就得到想要的了。

user: user-3
content: 我感觉4楼讲解的很透彻，学习了！

user: user-0
content: 谢谢。那就很好理解。 烟盒里的纸条，地址可能是乡下一破小木屋，也可能是北京鸟巢。

user: user-4
content: 引用 3 楼 qq_16774199的回复:[quote=引用 2 楼 paschen 的回复:] 指针长度是固定的，和指针的类型无关  比如： char a[] = "abcd"; char *pa = a; 数组用5字节，因为还有\0。 当pa = pa+1时，我们目的是字符b，若pa为4，那指针不就移动到\0去了？[/quote] Pa的大小为四  但值不为4

user: user-5
content: 引用 3 楼 qq_16774199 的回复:[quote=引用 2 楼 paschen 的回复:] 指针长度是固定的，和指针的类型无关  比如： char a[] = "abcd"; char *pa = a; 数组用5字节，因为还有\0。 当pa = pa+1时，我们目的是字符b，若pa为4，那指针不就移动到\0去了？[/quote]  a是数组类型，pa是指针类型，sizeof(a)得到的是数组的长度，而sizeof(pa)只是指针长度（32位程序总为4） 数组与指针是不同的类型 如果需要获取字符串长度，用strlen

user: user-6
content: 指针的大小和它指向的数据类型无关，主要看操作系统的位数（因为指针保存的是地址），32位的是4字节，64位是8字节。

user: user-0
content: 引用 2 楼 paschen 的回复:指针长度是固定的，和指针的类型无关  比如： char a[] = "abcd"; char *pa = a; 数组用5字节，因为还有\0。 当pa = pa+1时，我们目的是字符b，若pa为4，那指针不就移动到\0去了？

user: user-5
content: 指针长度是固定的，和指针的类型无关

user: user-7
content: 我是这样理解的，甭管你什么类型的数据，它的地址都是一样的。比如，不管男女老少，每个人的身份证号位数都是一样的吧。

user: user-8
content: 分析：既然指针只是要存储另一个变量的地址，。注意，是存放一变量的地址，而不是存放一个变量本身，所以，不管指针指向什么类型的变量，它的大小总是固定的：只要能放得下一个地址就行！（这是一间只有烟盒大小的“房间”，因为它只需要入一张与着地址的纸条）。   存放一个地址需要几个字节？答案是和一个 int 类型的大小相同：4字节。  http://blog.csdn.net/driversmith/article/details/6236893

user: user-9
content: 标准只规定了char, unsigned char, or signed char的结果是1，其他的都是未规定的

user: user-10
content: 指针类型占用空间，跟CPU，操作系统，编译器有关 X86，16Bits dos 和windows有 near（16Bits），far(32Bits) 两种指针 32Bits 本来应该有near(32Bits),far(48Bits)两种指针的 不过windows 和VC 只提供32Bits 一种指针，因此，所有指针长度都是32Bits
user-0 提问: 求助大神 关于长整数的加法问题 编译通过 运行终止 应该是内存或数据溢出问题 但不知道哪里出错

回复:
user: user-1
content: 哦 可以的。。。。。。

user: user-2
content: 仅供参考：#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-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-0
content: 现在能运行了，但结果不对。。。。  而且算9999+9999的时候程序还是会终止

user: user-3
content: 你这个初始化函数InitList就不对，直接传一级指针是没法改变main函数里的L1的指向（换句话说就是：你根本没有给L1,L2初始化,） 必须传二级指针或者一级指针的引用才行。 下面这样才行  void InitList(BigInteger *L) { 	*L = (BigInteger)malloc(sizeof(Node)); 	(*L)->next = NULL; } ...... int main() { 	BigInteger L1, L2; 	InitList(&L1); 	InitList(&L2); ...... }

user: user-4
content: InitList错了
user-0 提问: 一道用c语言写的CCF编程题，得分只有50，希望给指点下

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> int main() {     char c[13];     scanf("%s",c);     int r=0,i,j=1;     for(i=0;i<11;i++){         if(c[i]=='-'){             continue;         }         r+=(c[i]-'0')*j;         j++;     }     r=r%11;     if(r==10){         if(c[12]=='X')             printf("Right");         else{             c[12]='X';             printf("%s",c);         }     }     else{         if(r==(c[12]-'0'))             printf("Right");         else{             c[12]=r+'0';             printf("%s",c);         }     }     return 0; } 我把楼主的代码改了下，运行结果为100分

user: user-2
content: 引用 2 楼 qq_20305395 的回复:题目中明确指出了“ISBN码包括9位数字、1位识别码和3位分隔符”以及“保证输入符合ISBN号码的格式要求”，你没有加判断语句啊，如果我输入的不是ISBN号码，例如：4-s34-46675-6，该作何处理？ 你不懂这种平台的套路…… “保证输入符合ISBN号码的格式要求”，不是让做题者保证，而是说出题者保证不拿乱七八糟的码来干扰你。

user: user-3
content: 题目中明确指出了“ISBN码包括9位数字、1位识别码和3位分隔符”以及“保证输入符合ISBN号码的格式要求”，你没有加判断语句啊，如果我输入的不是ISBN号码，例如：4-s34-46675-6，该作何处理？

user: user-4
content: 没看出来问题
user-0 提问: 初学者求助

回复:
user: user-1
content: 类型不一样。。

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-3
content: 。。。。。。

user: user-4
content: 你的a是一个浮点数，这里将用整数类型去解释，故会不正确

user: user-5
content: 格式化规定符  ━━━━━━━━━━━━━━━━━━━━━━━━━━     符号                  作用  ──────────────────────────      %d              十进制有符号整数      %u              十进制无符号整数      %f               浮点数      %s              字符串      %c              单个字符      %p              指针的值      %e              指数形式的浮点数    %x, %X      无符号以十六进制表示的整数      %0              无符号以八进制表示的整数      %g              自动选择合适的表示法  ━━━━━━━━━━━━━━━━━━━━━━━━━━

user: user-6
content: C语言里的%x只能输出整数的十六进制，把float改成int就可以了
user-0 提问: 请教，关于“数组的地址”和“数组第一个元素的地址”。

回复:
user: user-1
content: int a[3]={ 3. 4. 5 }; int *p; p= a; 正确，p= &a;错误 因为 &a 是一个指向数组的指针，而p是一个指向整型变量的指针，它们的类型不匹配。 大多数早起版本的C语言实现中，并没有所谓“数组的地址”这一概念，因此&a或者被视为非法，或者就等于a ——节选自《C陷阱与缺陷》第3章

user: user-2
content: 地址值虽然相同，但代表的维度以及意义是不同的

user: user-3
content: http://bbs.csdn.net/topics/391971215

user: user-4
content: &string[0]; //取数组第一个元素的地址。 string; //数据名不是数组的地址，是数组第一个元素的常量地址，与&string[0]等价。 &string; //这个才是数组的地址。  以上三种表达式从地址值上说，是一样的，即地址值是相等的。当把它们直接赋给char* p的时候，p的值都是一样的，因p是char*类型指针也就是元素地址，所以对p的++ --都仅仅是一个字符的地址跨度。  地址是没有类型的，但指针是有类型的。  元素指针跟数组指针是有区别的，即&string[0]和string是第一个元素常量指针，是char*类型，而&string是char (*p)[10]类型的常量数组指针（注意C语言指针一章里肯定会讲这个数组指针的），所以&string[0]+1与&string+1的结果地址值是不同的，可以自己试试。  一般来说，不同类型指针间赋值是需要强制转换的，又因为数组指针一般情况下在需要的时候都会自动退化为数组元素指针，所以char* p = &string也是可以的而不需要写成char* p = (char*)&string，但实际上相当于char (*temp) [10] = &string; char*p = temp;

user: user-5
content: char string[] = "my string"; auto ptr = &string; 这才是数组的地址...  &string[0] = &(*(string + 0)) = string + 0 = string.....
user-0 提问: 找不出哪个测试用例会出错

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

user: user-2
content: #define MAX 101  输入： 多组数据。每组数据输入包括3行， 第1行是包含多个单词的字符串 s， 第2行是待替换的单词a，(长度<=100)         需要空间 101 第3行是a将被替换的单词b。(长度<=100)    100  替换后空间 <= 101 +100  s, a, b 最前面和最后面都没有空格. 输出： 每个测试数据输出只有 1 行， 将s中所有单词a替换成b之后的字符串。  没有交代，如果找不到这个单词怎么处理。 姑且什么也不做，原字符串输出。  那么，这个 字符串缓冲区应该为 为101+100 因为a 受到 全长的限制，不可能超过101 但是b 不受那个字符串的限制 假设 b 100 个字符 a 1个字符 替换后至少200个字符才行 个人觉得，201 最方便

user: user-3
content: 报了什么错，这样好分析！

user: user-4
content: 引用 3 楼 user-4 的回复:有一个经典的程序，就是c程序设计语言中的单词计数程序，可以利用它修改一下来实现。 楼主给出了s,a,b，可以再给一个目标串t(注意t应该比较大，理论上s可以有50个单词，，但是b最大长度可以为100，替换的话需要长度大约为100*50+50)  不太优化的算法如下：对查找的每一个单词(比如放入w中)，比较w和a，如果不等，则在t中输出a，等则输出b，同时再输出单词分隔（如果是最一个则输出结尾那个符号）  这个算法不优化的地方是w和a比较，实际上可以在查找单词的过程中同时进行  楼主的移动建议就不要搞了 附单词计数程序（大神作品，请认真研读）    #include <stdio.h>    #define IN   1  /* inside a word */    #define OUT  0  /* outside a word */  /* count lines, words, and characters in input */    main()    {        int c, nl, nw, nc, state;        state = OUT;        nl = nw = nc = 0;        while ((c = getchar()) != EOF) {            ++nc;            if (c == '\n')                ++nl;            if (c == ' ' || c == '\n' || c = '\t')                state = OUT;            else if (state == OUT) {                state = IN;                ++nw;            }        }        printf("%d %d %d\n", nl, nw, nc);    }  晕，PDF中还有些广告信息，请以这个为准

user: user-4
content: 有一个经典的程序，就是c程序设计语言中的单词计数程序，可以利用它修改一下来实现。 楼主给出了s,a,b，可以再给一个目标串t(注意t应该比较大，理论上s可以有50个单词，，但是b最大长度可以为100，替换的话需要长度大约为100*50+50)  不太优化的算法如下：对查找的每一个单词(比如放入w中)，比较w和a，如果不等，则在t中输出a，等则输出b，同时再输出单词分隔（如果是最一个则输出结尾那个符号）  这个算法不优化的地方是w和a比较，实际上可以在查找单词的过程中同时进行  楼主的移动建议就不要搞了 附单词计数程序（大神作品，请认真研读）    #include <stdio.h>    #define IN   1  /* inside a word */    #define OUT  0  /* outside a word */ Click to buy NOW! PDF-XCHANGE www.docu-track.com Click to buy NOW! PDF-XCHANGE www.docu-track.com   /* count lines, words, and characters in input */    main()    {        int c, nl, nw, nc, state;        state = OUT;        nl = nw = nc = 0;        while ((c = getchar()) != EOF) {            ++nc;            if (c == '\n')                ++nl;            if (c == ' ' || c == '\n' || c = '\t')                state = OUT;            else if (state == OUT) {                state = IN;                ++nw;            }        }        printf("%d %d %d\n", nl, nw, nc);    }
user-0 提问: 求助一个C语言程序 非递归算法实现九连环（锁链）问题

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and It do is the final solution！

user: user-1
content: http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and
user-0 提问: 关于C语言函数   

回复:
user: user-1
content: 6楼正解  即使这样，仍建议使用函数时进行声明，或者把函数声明放在头文件中，函数实现放在源文件中，然后使用时包含头文件即可

user: user-2
content: 我测试了第二个，有一个警告 “*****”未定义；假设外部返回 int

user: user-3
content: 引用 4 楼 Hamber_Bao 的回复:引用 3 楼 qq423399099 的回复:c语言的规定，因为系统默认的返回值类型是int型,这是规定好了的为什么有整型返回值的 可以不用定义在main函数之前，而无返回值的要么在调用前声明要么定义在调用前。  C语言 调用没有声明过的函数，会默认声明一个返回类型为 int 的函数。 然后看到了函数的定义，如果这个定义的函数类型与前面默认声明的不一致，就会出错。在C语言中，同名的函数只能有一个。对这个函数的多次声明/定义中，其类型必须一致。 后面那个将函数定义为返回int ，定义与默认声明是一致的。  =========== 建议，即使在 C 语言中，每一个需要被调用的函数都要提前声明一下。

user: user-4
content: 因为历史原因，c语言在调用函数时，如果没有提前声明原型会默认认为是返回int型的函数。上述第一种因为定义是void型，调用前没声明，默认认为是int，链接时找不到返回是void的函数定义，自然错误了

user: user-0
content: 引用 3 楼 qq423399099 的回复:c语言的规定，因为系统默认的返回值类型是int型,这是规定好了的为什么有整型返回值的 可以不用定义在main函数之前，而无返回值的要么在调用前声明要么定义在调用前。

user: user-5
content: c语言的规定，因为系统默认的返回值类型是int型,这是规定好了的

user: user-6
content: C语言默认返回int，为了兼容和char* a ="AAA"一样都 可以说是bug了...不过为了兼容没办法...

user: user-0
content: 帮忙解答下
user-0 提问: 文件读入读出

回复:
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 提问: 最近可能要温习下c语言，先来混个脸熟

回复:
user: user-1
content: 帮顶

user: user-2
content: java 跟C相通，只要看看那点不一样就行了

user: user-0
content: 引用 1 楼 wen_eric 的回复:果断领分 引用 2 楼 qq423399099 的回复:  谢谢回复！

user: user-3

user: user-1
content: 果断领分

user: user-0
content: 引用 12 楼 qq_25868549 的回复:我也来混个脸熟，大家一起学习。  好的，一起加油！

user: user-0
content: 引用 11 楼 dereck1314 的回复:看着分数我就进来了 引用 13 楼 qq_32296307 的回复:领分---------------------  没问题！

user: user-4
content: 领分---------------------

user: user-5
content: 我也来混个脸熟，大家一起学习。

user: user-6
content: 看着分数我就进来了

user: user-0
content: 引用 7 楼 zycxnanwang 的回复:突然觉得C,C++语言很重要，我还是先把C++弄扎实了，再学java！  嗯，一起加油！

user: user-0
content: 引用 5 楼 user-9 的回复:http://bbs.csdn.net/topics/390966354/ 引用 6 楼 zhao4zhong1 的回复:C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817  二位的回复还是比较实在的东西，

user: user-0
content: 引用 4 楼 lm_whales 的回复:java 跟C相通，只要看看那点不一样就行了  多谢指点！

user: user-7
content: 突然觉得C,C++语言很重要，我还是先把C++弄扎实了，再学java！

user: user-8
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-9
content: http://bbs.csdn.net/topics/390966354/
user-0 提问: 关于数组的引用的问题

回复:
user: user-1
content: sResult指向它前面应该没有*吧？ sResult = charResult;

user: user-2
content: ……时怎么做的。

user: user-2
content: 引用 2 楼 langxiao12345 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？   那请问怎么把函数执行的结果取到呢？[/quote] 参考Windows API在需要读入数组信息或输出或返回数组信息是怎么做的。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？   那请问怎么把函数执行的结果取到呢？

user: user-2
content: 请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？
user-0 提问: 求大神帮看看哪里出了问题

回复:
user: user-1
content: 自己打断点，要学会调试程序

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

user: user-3
content: int max(int a, int b, int c) { if (a < b) { a = b; if (a < c) { a = c; return a;  } else { //return c;  ///////////////////这里应该是return a; return a; } } // a>b的情况你没考虑呀 else {     if (a > c) 	{ 		return a; 	} 	else 	{ 		return c; 	} }  }   int main() { int a,b,c,i; printf("请输入三个数字（中间用空格间隔）\n"); scanf("%d%d%d", &a, &b, &c); i = max(a, b, c); printf("最大的数字是%d",i );  ////////////////////////// 去掉&  }

user: user-3
content: printf("最大的数字是%d",/*去掉这个&*/i ); printf("最大的数字是%d",i );

user: user-4
content: 你max函数中，如果a>b那么返回值不确定   int max(int a, int b, int c) { 	if(a < b) 		a = b; 	if(a < c) 		a = c; 	return a; }
user-0 提问: 帮忙改下这个列移动

回复:
user: user-1
content: 在有重叠的情况下，一个要从后往前逐个移动，一个要从前往后逐个移动。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:在有重叠的情况下，一个要从后往前逐个移动，一个要从前往后逐个移动。赵老师，麻烦您能给出具体代码吗？谢谢了，后天答辩。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:if(col==poz)         return; else if (col>poz) { ... } else {//col<poz ... }老师这样为啥不行void MoveCol(Row* text,int col,int poz) { 	if(col==poz) 		return; 	Row* rp=text->next; 	while(rp) 	{ 		if(col>poz) 		{ 			Node* np=locate(rp->line,(col-1)); 			Node* nt=locate(rp->line,(poz-1)); 			Node* nq; 			if(np&&np->next&&nt) 			{ 				nq=np->next; 				np->next=nq->next;  				nq->next=nt->next; 				nt->next=nq;			 			} 		} 		if(col<poz) 		{ 			Node* np=locate(rp->line,(col-1)); 			Node* nt=locate(rp->line,(poz-1)); 			Node* nq; 			if(np&&np->next&&nt) 			{ 				np->next->next=nq->next; 				nq->next=np->next; 				np->next->next=nq; 			} 		}  		rp=rp->next; 	} }

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:if(col==poz)         return; else if (col>poz) { ... } else {//col<poz ... }刚手写了一遍，懂了0.0，谢谢赵老师。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:if(col==poz)         return; else if (col>poz) { ... } else {//col<poz ... }老师麻烦您解释下或详细点，我不太懂（太笨了，刚学这个），谢谢您了。

user: user-1
content: if(col==poz)         return; else if (col>poz) { ... } else {//col<poz ... }

user: user-1
content: MoveCol中要考虑重叠
user-0 提问: 新手比较迷茫，请大神解惑。

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:建议楼主去学“易语言” 赵老师，不好意思，我不会选择易语言的，我宁愿学几年基础，即使什么都做不了，也不愿意速成的。 其实，我不应该提这问题的。我不像你们都是程序员，就是吃这口饭的。我学编程就是为了这点爱好而已。

user: user-1
content: 建议楼主去学“易语言”

user: user-2
content: 最恨开挂的人，要不然我早上王者了
user-0 提问: 关于线性表创建的，其中初始化，有个NULL

回复:
user: user-1
content: 引用 6 楼 qq_32296307 的回复:是不是在主函数中 SeqList l；是开辟了一块空间，作为l的， 和int a一样；a可以直接赋值啊 没错

user: user-0
content: 是不是在主函数中 SeqList l；是开辟了一块空间，作为l的， 和int a一样；a可以直接赋值啊

user: user-2
content: 要通过InitList函数来修改main函数里的l的指向 必须传二级指针或者一级指针的引用，光传一级指针是没有用的（一级指针指向修改指针所指向的区域） （因为main函数的l和InitList函数的形参l他们仅仅是指向同一块内存区域， 但两者本身并不是同一个指针，所以你对InitList函数的l进行操作是影响不到main函数的l的）

user: user-1
content: lz犯了一个错误， 参数的传递只是传递一个副本，对于InitList来说， SeqList *l 这个只是 main 那个 l 的副本， 所以调用InitList后， main中的那个l， 并没有改变。由于在初始化时， l 的内容可能被初始化为0xcccccccc, 所以createLIst中打印不出来yes. 这样改 int InitList(SeqList **l) {     (*l)=(SeqList *)malloc(sizeof(SeqList));     if((*l)!=NULL)     {         (*l)->next=NULL;         return 1;     }     return 0; } void CreatList(SeqList *l) {     if(l->next==NULL)         printf("yes\n"); }   int main() {     SeqList *l;     InitList(&l);     CreatList(l);     return 0; }   P.S. 不要单字母命名变量， 特别是用l ///

user: user-3
content: #include <stdio.h> #include <stdlib.h> typedef struct SeqList{     char data;     struct SeqList *next; }SeqList;  int InitList(SeqList **l) {     *l=(SeqList *)malloc(sizeof(SeqList));     if(l!=NULL)     {         (*l)->next=NULL;         return 1;     }     return 0; } void CreatList(SeqList *l) {     if(l->next==NULL)         printf("yes\n"); }  int main() {     SeqList *l;      InitList(&l);     CreatList(l);     return 0; }

user: user-0
content: 引用 1 楼 user-4 的回复:int InitList(SeqList *l) {     l=(SeqList *)malloc(sizeof(SeqList));  最后一句是修改这个参数本身，而不是传递过来的参数，可以试试 int InitList(SeqList *l) {     l->next =(SeqList *)malloc(sizeof(SeqList)); 第一次用这边的bbs，有点不熟悉

user: user-4
content: int InitList(SeqList *l) {     l=(SeqList *)malloc(sizeof(SeqList));  最后一句是修改这个参数本身，而不是传递过来的参数，可以试试 int InitList(SeqList *l) {     l->next =(SeqList *)malloc(sizeof(SeqList));
user-0 提问: VS导出模板后，出现文件丢失是什么情况？

回复:
user: user-1
content: 楼主，后来用qt又是怎么解决的？

user: user-0
content: 引用 5 楼 yaodewei111 的回复:你后来怎么搞的？  好像是VS本身的问题 没解决  我换成qt来做了

user: user-2
content: 你后来怎么搞的？

user: user-0
content: 在线等啊 1天了  头都大了 求帮忙啊！

user: user-0
content: 没人知道怎么回事吗？ 求帮忙啊！

user: user-0
content: 引用 1 楼 user-3 的回复:重新做一个吧  重做好几十次了 都一样  我连存储目录都改了 还是不行

user: user-3
content: 重新做一个吧
user-0 提问: int *d = &i 与 int *d = 0区别

回复:
user: user-0
content: 50分的帖子结了80分，好神奇呀

user: user-1
content: 引用 4 楼 antiwise 的回复:感谢各位回答！ 好像  int *d = &i; *d = 0; 与 int *d = 0; 是不同的啊，是不是？ *d = 0;代表把d指针指向的值赋值为0？ int *d = 0代表声明一个指为空的指针？ 不知我理解是否正确 正确

user: user-2
content: 引用 4 楼 antiwise 的回复:感谢各位回答！ 好像  int *d = &i; *d = 0; 与 int *d = 0; 是不同的啊，是不是？ *d = 0;代表把d指针指向的值赋值为0？ int *d = 0代表声明一个指为空的指针？ 不知我理解是否正确  对的

user: user-0
content: 感谢各位回答！ 好像  int *d = &i; *d = 0; 与 int *d = 0; 是不同的啊，是不是？ *d = 0;代表把d指针指向的值赋值为0？ int *d = 0代表声明一个指为空的指针？ 不知我理解是否正确

user: user-3
content: int *d = 0 表示指针指向了地址为0的地方（俗称的空指针） 空指针解引用是否导致异常应该是硬件设备和OS组合决定的。以前在VXwork下工作，空指针也可以解引用，可以访问内存0地址，还可以修改内容。这种情况下，为了便于程序员debug，印象中我们大概是采用了对于0地址内容监控，如果内容有改动则报告或者crash。NULL指针的访问异常是C程序员常见的bug，事实上部分情况下空指针可以解引用。

user: user-4
content: 0=NULL  ;

user: user-5
content: int *d = 0 ， 那么d为一个空指针 你去解引一个空指针，当然会出错
user-0 提问: 在A类中定义C类的指针*p，现在需要在B类中获取*p的值或地址，用什么办法？

回复:
user: user-1
content: 友元函数

user: user-0
content: 顶一下 谢谢大家

user: user-2
content: C++ 以下方法，可以访问成员变量 1) get(）方法,也就是写个  public函数返回一个值     int get()const{return this->mx;}; 2）通过友元 直接取 3）访问属性设置为 public 可以直接 用 4）可以用过 out 参数传递 void get(int &x){return this->mx;};  5）访问多个成员，也可以通过  public 方法（成员函数）访问
user-0 提问: 请问是数组越界问题吗

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

user: user-2
content: 赵四老师说的好，这事是你尿急要上厕所啊，我也帮不上你，只能看你尿裤子了
user-0 提问: 关于静态变量使用的问题

回复:
user: user-1
content: “ warning #2173: Pointer to local 'result' is an invalid return value.” 函数不能返回局部（非静态）变量的地址或者引用。

user: user-2
content: 静态局部变量在函数内定义，但不象自动变量那样，当调用时就存在，退出函数时就消失。静态局部变量始终存在着，也就是说它的生存期为整个源程序。

user: user-3
content: static定义的变量是初始化为0的,所以没啥问题 但是你不用static定义又没有初始化字符数组的话,数组值未定 输出时一直输出直到碰巧遇到内存中一个0就停止
user-0 提问: 计算器程序计算出的结果错误

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

user: user-3
content: 中文括号？改成英语的试试？ 或者先算算 1*(2+3)看看对不对？
user-0 提问: 关于循环变量i的作用域

回复:
user: user-1
content: 跟编译器的语法检查又关呢,不需要过于纠结这个问题；遵循先声明后使用的原则吧

user: user-2
content: #include <stdio.h> int main(void) { 	for(int i=0;i<5;i++) 		printf("Gee!"); 	return 0; }   用gcc(Mingw)编译这个代码，首次报错（如图），提示加"-std c99"，之后成功（如图），可见只有C99支持这个操作。

user: user-3
content: C语言的写法一般都是把int i;写在for前面的

user: user-4
content: 引用 5 楼 Hamber_Bao 的回复:[quote=引用 1 楼 user-7 的回复:] 和编译器有关。楼主用的什么？ 这个写法在最早的c语言里没有，后来加上的。所以有些编译器可能不支持；或者默认不支持要加选项才支持。我用的是VS2010里带的编译器，我设置了环境变量。在CMD手动编译的[/quote] CL并不是很好的支持标准C哦,楼主可以把后缀改成CPP再编译,或者使用GCC开启C99支持编译

user: user-0
content: 引用 1 楼 user-7 的回复:和编译器有关。楼主用的什么？ 这个写法在最早的c语言里没有，后来加上的。所以有些编译器可能不支持；或者默认不支持要加选项才支持。我用的是VS2010里带的编译器，我设置了环境变量。在CMD手动编译的

user: user-5
content: -std=c99，以前版本不支持

user: user-6
content: 你这有的trubo c 还是vc6.0啊，赶快下个vs最新版的开发工具

user: user-7
content: c++都没问题。如果是c语言，应该是c99才有的吧。 我用gcc，默认不支持，要加个选项-std=c99 VS2012的命令行cl.exe，也不支持，不知道有没有办法可以支持的。 楼主看看你的编译器有没有设置支持c99

user: user-7
content: 和编译器有关。楼主用的什么？ 这个写法在最早的c语言里没有，后来加上的。所以有些编译器可能不支持；或者默认不支持要加选项才支持。
user-0 提问: 求解答  下面代码在vc上可运行通过，但在codeblock上显示出错   

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:将源代码的扩展名从.c改为.cpp   谢谢谢谢你  成功了

user: user-1
content: 将源代码的扩展名从.c改为.cpp

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:codeblock使用gcc/g++作为编译器，不支持conio.h个getch() 建议参考NCURSES库。   编译还是出错   显示第12行代码有问 题  去掉里面的&取地址符就么有问题。但那样程序会崩溃  求解答

user: user-1
content: 或者简单点，删掉#include <conio.h>，再将getch();改为getchar();

user: user-1
content: codeblock使用gcc/g++作为编译器，不支持conio.h个getch() 建议参考NCURSES库。

user: user-0
user-0 提问: 计算字符串的长度

回复:
user: user-1
content: size_t char_len(const char *s) { 	const char *ss = s; 	while (*ss) 		ss++; 	return ss - s; }

user: user-2
content: char类型和int类型的长度不一样，这是最基本的字符串函数哈，写法也可以是可以是多种多样的：  int char_len1(char *s)         //常规思路 {     int len;     for(len=0;*s++;len++);      return(len); }  int char_len2(char *s)        //计算指针偏移量 {     char *p;     for(p=s;*p;p++);      return((p-s)/sizeof(char)); }

user: user-3
content: #include <stdio.h>  int char_len(char *str) { 	int lens = 0; 	while(*str++ != '\0') 	{ 		lens++; 	} 	return lens; }  int main() { 	char *name; 	int length; 	name= "Hello World!"; 	length = char_len(name); 	printf("%d\n",length); 	return 0; }

user: user-4
content: 形参类型改下就行了

user: user-5
content: 引用 4 楼 sds428 的回复:刚试了下代码，把int char_len(int *str)这里面的int改为char，就一切ok了，运行结果正确  正常了吗？真的吗  把 char *name = "Hello World!"; int length = char_len(name);  改成 int length = char_len( "Hello World!");  试试

user: user-6
content: 刚试了下代码，把int char_len(int *str)这里面的int改为char，就一切ok了，运行结果正确

user: user-5
content: 还有 int char_len(int *str) 字串定义居然不是char *str，而是int  *str，我也是醉了

user: user-5
content: int char_len(int *str) {         int lens = 0;         char  *p=str;       //不这样做，你就是找死，不解释         while(p)              //很讨厌那种自以为是的嵌套，逻辑思维都不成熟，非要装什么逼嘛，踏实很难吗？         {                lens++;                       p++;          }                         //另外，*p==‘0’了，p也就NULL了，用*p和用p作为循环条件一个鸟样         return lens; }

user: user-7
content: char_len函数参数int类型？
user-0 提问: 请写出函数mygets和myputs，其功能分别与gets和puts相同，函数中用getchar和putchar读入和输出字符

回复:
user: user-1
content: 引用 2 楼 u011661665 的回复:谢谢大神！刚刚看到这贴，差点跪了！厉害！我出现的问题是\n写成了\0。另外很像请教预处理那里的几个引用，malloc是分配内存吧。。。。这个应该不要用吧。修改后的代码，额，出现乱码和滴滴的声音。复制了大神的代码以后，也就是加了预处理，就没有了，为什么啊？求解释。 原谅我ISOstream没学过。 在c语言中malloc是申请内容的方式，一般都用malloc和free配对使用。 出现乱码是因为你没有初始化char str[5];或者没有putchar正确的字符造成的。 你输出正确的putchar并跳出循环，滴滴声自然就没了。

user: user-2
content: 调戏一下楼主 #define  mygets  gets #define  myputs  puts

user: user-0
content: 谢谢大神！刚刚看到这贴，差点跪了！厉害！我出现的问题是\n写成了\0。另外很像请教预处理那里的几个引用，malloc是分配内存吧。。。。这个应该不要用吧。修改后的代码，额，出现乱码和滴滴的声音。复制了大神的代码以后，也就是加了预处理，就没有了，为什么啊？求解释。 原谅我ISOstream没学过。

user: user-1
content: # include <stdio.h> # include <malloc.h> # include <stdlib.h> #include <iostream> void mygets(char str[]){ 	char ch; 	int i = 0;  	while((ch = getchar()) != '\n'){ 		str[i] = ch; 		i++; 	} 	str[i] = '\n'; }  void myputs(char str[]){ 	int i = 0; 	char ch; 	for(;;){ 		ch = str[i]; 		if(ch == '\n') 			break; 		i++; 		putchar( ch ); 	} }  int main(){ 	char str[5]; 	printf("Input less than 5\n"); 	mygets( str ); 	myputs( str );  	return 0; }
user-0 提问: 关于FOR循环变量i的问题

回复:
user: user-1
content: 没有i=0的第二个for循环i的值是第一个循环后i的值，但第二个程序里的两个i开始都是0。

user: user-0
content: 引用 1 楼 zybz2009 的回复:这两个for是想表达什么 你看不明白吗

user: user-0
content: 引用 2 楼 renwotao2009 的回复: #include <stdio.h> #define SIZE 10   int main(void) {    int i = 0;      int array[SIZE];      for(;i < SIZE;++i)       array[i] = i;      for(;i < SIZE;++i) // 此时，i=SIZE，也就没有进入循环体       printf("array[%d] = %d\n",i,array[i]); } 多谢 是这样的。我刚试了试

user: user-0
content: 引用 1 楼 zybz2009 的回复:这两个for是想表达什么多谢 是的，懂了。

user: user-2
content: #include <stdio.h> #define SIZE 10   int main(void) {    int i = 0;      int array[SIZE];      for(;i < SIZE;++i)       array[i] = i;      for(;i < SIZE;++i) // 此时，i=SIZE，也就没有进入循环体       printf("array[%d] = %d\n",i,array[i]); }

user: user-3
content: 这两个for是想表达什么
user-0 提问: 为什么删掉浏览器缓存目录里的内容后网页上的历史网址还存在？

回复:
user: user-1
content: 兄弟 你肯定发错地方了 ！！

user: user-2
content: 引用 10 楼 ztt920725 的回复:因为是新手，不好意思哈，不知道往哪里发，想用C来实现，在考虑的过程中就把缓存目录里的删除了，可是在网页浏览历史中还是存在，刚才重启了浏览器还是有的 有个专门C/C++的模块，去那里发

user: user-3
content: 兄弟 你是不是发错地方了 ??

user: user-0
content: 因为是新手，不好意思哈，不知道往哪里发，想用C来实现，在考虑的过程中就把缓存目录里的删除了，可是在网页浏览历史中还是存在，刚才重启了浏览器还是有的

user: user-4
content: 兄弟，你确确实实发错地方了！！

user: user-5
content: 你到底是手动的还是用c实现的

user: user-6
content: 你确定重新打开浏览器了？

user: user-7
content: 兄弟，我真的不知道怎么接了

user: user-8
content: 技术问题，不懂

user: user-9
content: 兄弟，你确确实实发错地方了！！

user: user-10
content: 兄弟 你一定发错地方了 ！！

user: user-11
content: 兄弟 你肯定发错地方了 ！！

user: user-12
content: 兄弟 你是不是发错地方了 ??
user-0 提问: 学生求助

回复:
user: user-1
content: http://wenku.baidu.com/link?url=XYOYwixFPfr3wjy3Qc-kfhAbDoithLIT5p2iPGSgpJzu9B3vgx_o1y-FqZgjmfVS68BrmJHK-R83VKH_CuS9mPubZ2k0aCi2c9shGLWhTsa

user: user-2
content: 爱莫能助嗷(补字数)
user-0 提问: 程序还差修改，求大神帮忙把修改的程序补上，谢谢！

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:百度搜“C源代码 学生信息系统”

user: user-2
content: 百度搜“C源代码 学生信息系统”
user-0 提问: 怎么实现题中第二个输入条件

回复:
user: user-1
content: 必须还得有个结尾标志啊，还是你输入一行输出一行？

user: user-2
content: 引用 4 楼 qq_34598319的回复:[quote=引用 1 楼 zycxnanwang 的回复:] while(scanf("%s",s) )//s为你存储的字符数组的首地址 你可以输入一个字符串，然后处理后，直接输出，但是每次的字符数组必须清空！ 这样是不是要先定义s char s[max] 有没有不需要事先定义大小的，因为后边输入的字符串大小不确定[/quote] 你学过string类型吗？可以定义一个string类型 while(cin>>s) s为你定义的字符串，这样也可以

user: user-0
content: 引用 1 楼 zycxnanwang 的回复:while(scanf("%s",s) )//s为你存储的字符数组的首地址 你可以输入一个字符串，然后处理后，直接输出，但是每次的字符数组必须清空！ 这样是不是要先定义s char s[max] 有没有不需要事先定义大小的，因为后边输入的字符串大小不确定

user: user-2
content: while(scanf("%s",s) )//s为你存储的字符数组的首地址 你可以输入一个字符串，然后处理后，直接输出，但是每次的字符数组必须清空！

user: user-3
content: 是从控制台输入的吗？还是读一个文件啊

user: user-0
content: 引用 2 楼 user-3的回复:是从控制台输入的吗？还是读一个文件啊 是从控制台输入的 这种情况怎么实现啊
user-0 提问: 求助，关于scanf输入的问题！

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 qq_35228050 的回复:] [quote=引用 1 楼 user-1 的回复:] 加上getchar  我想这道这样为什么不能实现输入？谢谢。[/quote] 回车符没有被丢掉[/quote]  非常感谢！

user: user-1
content: 引用 2 楼 qq_35228050 的回复:[quote=引用 1 楼 user-1 的回复:] 加上getchar  我想这道这样为什么不能实现输入？谢谢。[/quote] 回车符没有被丢掉

user: user-0
content: 引用 1 楼 user-1 的回复:加上getchar  我想这道这样为什么不能实现输入？谢谢。

user: user-1
content: 加上getchar
user-0 提问: 关于= 和==

回复:
user: user-1
content: 非零既是真！

user: user-2
content: 建议比较时写成 if (2 == a)  这样就算错写成if (2 = a)，编译器会报错提醒

user: user-3
content: 表达式的值和操作符的副作用

user: user-4
content: 上面的代码会一直输出yes，感觉是不是少打了个=号 if(a= =2)//这样正常点吧 {     printf("YES"); }

user: user-5
content: 是的，非零既是真。

user: user-6
content: 非零既是真！   好的判断就是 ==   而且一般要 2==x  这样写，可以防止你出错

user: user-7
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-8
content: 微机原理学过了吗  计算机执行每一条指令都会根据执行效果设置相应的标志位 判断语句就是检查标志位 标志位为1就真，标志位为零就假  a=2就是个赋值代码，永远不会有让不让赋值的问题，CPU自然把标志位直接置1，表示永远让 a==2是个比较代码，CPU自然把比较结果给标志位  标志位是电脑硬件的潜规则。你纠结个鸡巴，关你毛事

user: user-9
content: if(a =2)执行后，我感觉和if(2)差不多吧，真假理解为if(1)了，

user: user-10
content: C ,C++,一般来说， 像这样有副作用的表达式，表达式本身有个值, 求这个值，是表达式求值的主要作用（ 虽然直观看来， 这个值很多时候没啥用途）。  副作用会对某个子表达式产生影响，使之变化。

user: user-10
content: C： if.while ,for 都是判断的整型，而非bool类型（甚至浮点型也能凑乎） 为0 为假，非0为真 -------char,指针类型 也没问题---------- -------C，如今也有bool 类型了，但是历史原因，这个bool类型作用不大，         但是可以用true，false 不必另外定义了。 C++：虽然结果是同样的，但是判断依据 ----至少可以理解成，先转换成bool ，为0 为假，非0 (转换成 1)为真。 因为C++有bool类型 C,C++的方式本质上没有区别， 只是C++有正式的bool类型。 可以不必用int 代替 bool了  if(expr) s;  if(expr)s1; else s2; while(expr)s; for(expr1,expr2,expr3)s;' do ...while(expr); 这里 的表达式 expr 都是先求出结果，再判断是否非 0 a=b; a=2; a=b+3; 这些 赋值表达式 的结果为 ： 将 = 右边的表达式的值赋值给 a 以后 ，a的新值。 他判断的是，表达式 a=2 的值  复合赋值表达式 a+=3 的值为 a+=3 得到的a的新值 ， 假设a原来为3，a+=3;  则 a的值为 5   表达式  a+=3  的值也是5 赋值表达式的值，是赋值这个副作用影响下 赋值表达式左边的子表达式，的新值

user: user-11
content: 这样是能成功啊~只是把a做为判断条件，而不是为a的值做判断~噗哈哈~蛮有意思的其实~

user: user-0
content: 引用 7 楼 wzxq123 的回复:上面的代码会一直输出yes，感觉是不是少打了个=号 if(a= =2)//这样正常点吧 {     printf("YES"); } 我没有写错，就是if(a=2) 我纠结于IF头判断的 依据不是布尔类型吗，1 或者0，这个if(a = 2),也没说让它判断a ，他怎么就依据a的值得出结论了呢

user: user-12
content: if (a = 2) 等同于： a = 2; if (a)

user: user-13
content: 因为a =2，此时非零，条件为真，就执行if语句了，个人这样认为。

user: user-14
content: 对的
user-0 提问: 关于C语言中自增问题 

回复:
user: user-1
content: 说实话，纠结这样子的问题一点意义也没有。因为任何一个审核代码的人也不会让这样的代码存在工程中。

user: user-2
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-3
content: What Every C Programmer Should Know About Undefined Behavior http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html

user: user-4
content: 这是不确定行为，取决于表达式求值顺序  不要写这种表达式，也不要纠结于这种表达式  如果真想了解，仔细读下面这文章：  关于C,C++表达式求值顺序  http://bbs.csdn.net/topics/370153775

user: user-5
content: 答案是12。 int a = 1; printf("%d\n", ++a + ++a + ++a); 在這裏是這樣的，首先 a是一個變量，不是多個。 第一次算第一個++a,此時a = 2;所以後面的兩個a的值也是2 第二次算第二個++a時，此時a = 2, ++a 的值是3，這裏要注意的是，此時的三個a是同一個變量，所以三個a的值都有是3， 如果算值的話，此時已經是9. 第三次算第三個值，此時a = 3，再執行++a時，些時a = 4,三個a是同一個變量，所以其實三個a = 4, 答案自然是 4 + 4 + 4 = 12.

user: user-6
content: ++a + ++a + ++a = 9本身没有错，但是这个值并没有保存在a中，a一直都只是在进行自增而已。顺便说一下，那个9其实是保持在一个临时变量中。

user: user-7
content: 不同的编译器输出结果是不一样

user: user-8
content: 不同的编译器输出结果是不一样的，我这边输出是10.

user: user-9
content: 居然还有人考这么无聊的题目。

user: user-10
content: 楼上已给出答案，不要纠结于这些问题，这些都不是这门语言的关键

user: user-11
content: 书上这是扯淡。 一个表达式里有多次++，这属于未定义行为，标准并未强制规定，不同的编译器会得出不同的结果。 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！ 参考：http://blog.csdn.net/qq423399099/article/details/51774359
user-0 提问: unsigned int 和int 问题

回复:
user: user-1
content: (ui - 1)的结果是unsigned  int类型，所以肯定不会小于1  楼主是不是应该写成；   int main(void) { 	unsigned ui = 0; 	int a = 0;  	if(0 > (int)(ui - 1)) 		a = 1;  	printf("%d\n",a); 	printf("%u\n",ui-1); }

user: user-2
content: unsigned int比int"大"  所以ui - 1中的1会转换成unsigned int进行运算，ui-1的结果也是unsigned int永远不会比0小 值 -1 赋值给unsigned int 类型的时候 存储形式为 1111,1111,1111,1111

user: user-3
content: ui - 1 结果是unsigned int 所以 if里面的条件表达式始终是false

user: user-4
content: if(0 > int(ui - 1))

user: user-4
content: if(0 > int(ui - 1))

user: user-4
content: if(0 > (ui - 1))
user-0 提问: unsigned int 和 int 的问题

回复:
user: user-1
content: 这涉及到C语言的隐式类型转换哦,我记得C陷阱与缺陷里有讲 ui-1并不是把ui提升到int再去减一,而是把1提升到unsigned int 这样一来结果就是最大的整数了

user: user-2
content: 引用 楼主 Hamber_Bao 的回复: #include <stdio.h>  int main(void) {      unsigned ui = 0;      int a = 0;       if(0 > (ui - 1))               a = 1;       printf("%d\n",a);      printf("%u\n",ui-1); }    输出结果为 0 4294967295   我想问下，为什么a的值没有改变呢？ui  的值为0，0-1等于-1，是小于0的，得执行a=1，输出a 的值应该为1  第二个问题  ui-1的值为什么会是4294967295呢 这个数是怎么得出来的呢       if(0 > (ui - 1)) 如果表达式中同时有int和unsigned，那么在演算表达式时，所有的int会“提升”成unsigned，然后再演算， 那么上述if其实就是：     if (0U > (0U - 1U)) 那么0U - 1U为多少呢？就是4294967295U，这里发生了下溢。 0U > 4294967295U吗？显然false，所以if语句不执行。

user: user-3
content: unsigned int比int"大"  所以ui - 1中的1会转换成unsigned int进行运算，ui-1的结果也是unsigned int永远不会比0小 值 -1 赋值给unsigned int 类型的时候 存储形式为 1111,1111,1111,1111

user: user-4
content: if(0 > int(ui - 1))
user-0 提问: 我是初学者，找不出这有什么问题，能帮帮忙吗？谢谢

回复:
user: user-0
content: 引用 3 楼 user-2 的回复: 我试过了，你编译器有问题，你尝试包含stdio.h这个头文件，我的编译器把你的代码重新编译了一遍，是没有问题的。。  嗯谢谢，加了include可以了，我用的是Visual Studio 2015编译的，现在多了一个问题：就是为什么你不用头文件可以？

user: user-1
content: -Wall -Wextra 把警告都打开，你就能看到相关警告了。  不包含需要的头文件会有什么问题？ a. 编译出错，例如类型未定义 b. 编译有警告但是可通过，不过运行会出错 c. 编译有警告但可通过，当时运行也没问题，但是换个环境（例如换了编译器，或现有编译器、依赖库升级，或换了操作系统），结果程序就运行出错了。  在你搞不清楚不包含头文件会有什么问题的时候，就老老实实的按照要求包含需要的头文件。

user: user-2
content: 引用 4 楼 hanshulun 的回复:[quote=引用 3 楼 user-2 的回复:]  我试过了，你编译器有问题，你尝试包含stdio.h这个头文件，我的编译器把你的代码重新编译了一遍，是没有问题的。。  嗯谢谢，加了include可以了，我用的是Visual Studio 2015编译的，现在多了一个问题：就是为什么你不用头文件可以？[/quote]  编译器的问题把，，可能你的编译器 要调用printf函数就一定要包含stdio.h头文件，，我的看版主说的很多编译器是默认包含stdio.h和stdlib.h，，，编译器差异就不用管了，，我vc++里数组越界还不报错呢！这个都是没有关系的

user: user-2
content: 我试过了，你编译器有问题，你尝试包含stdio.h这个头文件，我的编译器把你的代码重新编译了一遍，是没有问题的。。

user: user-2
content: 引用 1 楼 user-2 的回复:你是不是没有包含头文件stdio，，他说你的printf为外部符号，就应该取不到printf这个函数，你开头用#include<stdio.h>吧这个头文件包含进去，，可能就是这个原因你编译器我没用过，而且是中文的诶，，，编译器还是得看英文的，有助于学习， 正常的vc++编译器该是不包含也可以我记得，但是你试一下嘛，main入口函数前加一个 include<stdio.h>  该就没有问题了

user: user-2
content: 你是不是没有包含头文件stdio，，他说你的printf为外部符号，就应该取不到printf这个函数，你开头用#include<stdio.h>吧这个头文件包含进去，，可能就是这个原因你编译器我没用过，而且是中文的诶，，，编译器还是得看英文的，有助于学习，
user-0 提问: 求一个小程序把用“-”这个符号连接的三部分单独分开，比如A-B-C,分成A B和C,谢谢啦

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

user: user-2
content: 你如果A,B,C的类型固定的话，比如是int的话，直接用sscanf就好  #include<stdio.h> void main() { 	int a, b, c; 	char buffer[32] = "23-45-67"; 	sscanf(buffer, "%d-%d-%d", &a, &b, &c); }

user: user-3
content: 纠正下ret= strtok(NULL, spl);的spl换成"-"

user: user-3
content: #include <stdio.h> #include <string.h>  int main() {     char* str = "A-B-C";     char *ret= NULL;     ret= strtok(str, “-”);     while( ret!= NULL )     {         printf("%s\n",ret);         ret= strtok(NULL, spl);     }     return 0; } 你试试吧，我没运行，不过应该没问题
user-0 提问: 求大神细说一下typedef的理解，表示不太懂

回复:
user: user-1
content: 就是以后定义结构体变量时直接用后面那个别名定义声明就好

user: user-2
content: typedef typedef type-declaration synonym;  The typedef keyword defines a synonym for the specified type-declaration. The identifier in the type-declaration becomes another name for the type, instead of naming an instance of the type. You cannot use the typedef specifier inside a function definition.  A typedef declaration introduces a name that, within its scope, becomes a synonym for the type given by the decl-specifiers portion of the declaration. In contrast to the class, struct, union, and enum declarations, typedef declarations do not introduce new types — they introduce new names for existing types.  Example  // Example of the typedef keyword typedef unsigned long ulong;  ulong ul;     // Equivalent to "unsigned long ul;"  typedef struct mystructtag {    int   i;    float f;    char  c; } mystruct;  mystruct ms;   // Equivalent to "struct mystructtag ms;"  typedef int (*funcptr)();  // funcptr is synonym for "pointer                            //    to function returning int"  funcptr table[10];   // Equivalent to "int (*table[10])();"

user: user-3
content: typedef struct stack_node stack_list;表示可以用stack_list替代struct stack_node 如：stack_list a等同于struct stack_node a; typedef stack_list *slink;可以用slink替代stack_list *（注意*是跟着stack_list的） 如：stack_list *a等同于slink a;  http://www.cnblogs.com/afarmer/archive/2011/05/05/2038201.html

user: user-4
content: typedef给指定类型起一个别名
user-0 提问: 大家好，我想用VS2015编写一个无窗口的C语言程序，请问该怎么创建工程？

回复:
user: user-1
content: 你可以将原来Win32 Console程序的main改成上面例子中的WinMain，将其中所有的scanf和printf改为fscanf和fprintf,然后放到Win32 项目（空项目）中。

user: user-1
content: 引用 10 楼 yyxgs 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {  MessageBox(NULL,_T("OK"),_T("Test"),MB_OK);//如果没这句，就不会有任何窗口。  return 0; }  请问怎么把这个单独写成一个函数啊？我想在不想有窗口的程序中添加这个函数就行，能不能这样？[/quote] 不能。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:#include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {  MessageBox(NULL,_T("OK"),_T("Test"),MB_OK);//如果没这句，就不会有任何窗口。  return 0; }  请问怎么把这个单独写成一个函数啊？我想在不想有窗口的程序中添加这个函数就行，能不能这样？

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:#include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {  MessageBox(NULL,_T("OK"),_T("Test"),MB_OK);//如果没这句，就不会有任何窗口。  return 0; }  赵老师太棒了！谢谢！

user: user-1
content: #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {  MessageBox(NULL,_T("OK"),_T("Test"),MB_OK);//如果没这句，就不会有任何窗口。  return 0; }

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:Win32 项目    然后我该选哪个呢？

user: user-1
content: Win32 项目

user: user-0

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:Windows Application  没有这个选项

user: user-0
content: 引用 1 楼 woshirenjun12 的回复:菜单栏：开始--->文件-->新建项目   选择visual C++里面的win32控制台项目   还是有窗口的

user: user-1
content: Windows Application

user: user-2
content: 菜单栏：开始--->文件-->新建项目   选择visual C++里面的win32控制台项目
user-0 提问: 求助！！！有关栈的应用

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

回复:
user: user-1
content: 你为啥要将函数内部声明的变量名起的和函数参数变量名一样呢？

user: user-0
content: 引用 12 楼 codesnail 的回复:[quote=引用 10 楼 codesnail 的回复:] [quote=引用 8 楼 zhao4zhong1 的回复:] 重建所有 ？  试过了，release和debug都试过了，都不行。[/quote] 各位老总，还有一个现象，就单步执行刚进这个函数时候，这个唯一的参数时一个值，然后单步执行一步，这一步是函数内的变量声明，这个参数就编程另外一个值了。。。[/quote] 然后再次在函数内单步执行，这个参数的值就不变了，一直是一个特定的错误值。

user: user-0
content: 引用 11 楼 qq423399099 的回复:hmi_axis_init这个函数的参数类型是？ unsigned int的， 我函数调用改成 hmi_axis_init(0u);问题依旧

user: user-0
content: 引用 10 楼 codesnail 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] 重建所有 ？  试过了，release和debug都试过了，都不行。[/quote] 各位老总，还有一个现象，就单步执行刚进这个函数时候，这个唯一的参数时一个值，然后单步执行一步，这一步是函数内的变量声明，这个参数就编程另外一个值了。。。

user: user-2
content: hmi_axis_init这个函数的参数类型是？

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:重建所有 ？  试过了，release和debug都试过了，都不行。

user: user-0
content: hmi_axis_init(0) 进去之后，这个唯一的参数就是一个很大的值，不是0

user: user-1
content: 重建所有 ？

user: user-0
content: 引用 6 楼 qq423399099 的回复:[quote=引用 4楼我是你的主体 的回复:][quote=引用 2 楼 qq423399099 的回复:] 建议贴出代码 无法贴出，实在太多。。。[/quote]你少贴点呗： 1.调用处代码 2.函数形参的类型（如果是结构体，那就贴一下结构体）[/quote]   int main(void) { 	int result = 0;     KEY_TYPE key = KEY_NULL;     static unsigned int plc_send_sta = 0;     unsigned int send_sta = 0;     unsigned int init_process_bar_pos = 0;      hmi_axis_init(0);

user: user-2
content: 引用 4楼我是你的主体 的回复:[quote=引用 2 楼 qq423399099 的回复:] 建议贴出代码 无法贴出，实在太多。。。[/quote]你少贴点呗： 1.调用处代码 2.函数形参的类型（如果是结构体，那就贴一下结构体）

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:调用约定 https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx 我尝试换别的调用方式问题依旧。。。。

user: user-0
content: 引用 2 楼 qq423399099 的回复:建议贴出代码 无法贴出，实在太多。。。

user: user-0
content: 引用 楼主 codesnail 的回复:各位大侠：      我遇到一个问题，就是所有的函数传递参数都发生错误，比如 func(0);  到函数里面这个参数就变为一个随机值，比如2456783.。。  跪谢。！！  好久没上csdn，就这么多分了，见谅。  感谢赵总回复，我想应该不是这个问题，我是突然出现这个问题，工程有30万行代码

user: user-2
content: 建议贴出代码

user: user-1
content: 调用约定 https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx
user-0 提问: 关于 && 问题

回复:
user: user-0
content: 引用 5 楼 yang004 的回复:[quote=引用 4 楼 qq_34607669 的回复:] 在VS 2010中     printf("|%03D|");输出结果是  |D|   而在 Linux下用gcc编译结果是  |%03D|  也就是原样输出又是为什么呢？ D改为d[/quote]我的意思是问为什么在两个环境中有不同的结果？

user: user-1
content: 结果是true &&操作符运算结果只有true和false  true的宏定义是1 false的宏定义是0

user: user-2
content: 引用 4 楼 qq_34607669 的回复:在VS 2010中     printf("|%03D|");输出结果是  |D|   而在 Linux下用gcc编译结果是  |%03D|  也就是原样输出又是为什么呢？ D改为d

user: user-0
content: 在VS 2010中     printf("|%03D|");输出结果是  |D|   而在 Linux下用gcc编译结果是  |%03D|  也就是原样输出又是为什么呢？

user: user-3
content: 结果是：1 a+b=3 b-c=-1 3&&-1=1 逻辑与&&，当两个数都非0的时候为真

user: user-4
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步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-5
content: 1,&&逻辑判断,两都是是真就为1.
user-0 提问: IO按字节采集，怎么按位提取？

回复:
user: user-1
content: 循环移位 判断1  0

user: user-2
content: 2个字节天然就对应16位，还需要转化什么？

user: user-3
content: 这个要看用什么CPU了,CPU够快也行.对AD采集卡不了解,按字面意思不是采集模拟量吗?开关应该是个数字量吧?

user: user-0
content: 16路波形

user: user-0
content: 开关量，采集到的是脉冲序列。宽窄不一。16路脉冲序列

user: user-4
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-2
content: 采集模拟量？
user-0 提问: linux read

回复:
user: user-1
content: The following example reads data from the file associated with the file descriptor fd into the buffer pointed to by buf.     #include <sys/types.h> #include <unistd.h> ... char buf[20]; size_t nbytes; ssize_t bytes_read; int fd; ... nbytes = sizeof(buf); bytes_read = read(fd, buf, nbytes); ...  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-0 提问: 哈夫曼树的代码

回复:
user: user-1
content: 根据编译器提示的错误一个个改。 比如第一个错误：你使用了引用（C语言里是没有引用的） 对于自己看不懂的错误可以拿去搜一下。

user: user-0
content: 忘了讲，这是Dev c++编写的，是.cpp文件，用C语言运行好多报错的。。。有木有人呐。。。

user: user-2
content: 强势围观
user-0 提问: 谁有jpg文件格式说明文档，分享下。

回复:
user: user-0
content: 谢谢，

user: user-1
content: 百度一下更容易得到，http://wenku.baidu.com/link?url=zYkqxKu7NpSOJJ3UiwYuZR5bvM9CF-H-zopXf3T3T555RXghMWqNbXenZFJf25XXwGaW9XHmVQEFLzzmkZRNFbtxe0snmlZmt-2Vd2syQQi
user-0 提问: 大神们进来看看是哪出错了

回复:
user: user-1
content: 一眼扫过去，第10行的j都没有初始化，就用了，好大胆啊，23行的j可以取到4吗，

user: user-2
content: 看一下能实现不？  #include <stdio.h>  int main() { 	int a[3][4] = {}; 	int i = 0, j = 0; 	 	for ( i = 0; i < 3; i++) { 		j = 0; 		printf("please input the name of %d student:\n", i+1); 		scanf("%d", &a[i][j]); 		 		for (j = 1; j < 4; j++) { 			printf("please input the score of %d subject for the %d student :\n", j,i+1); 			scanf("%d", &a[i][j]); 		} 		 	} 	 	for (i = 0; i < 3; i++) { 		int sum = 0; 		for (j = 1; j < 4; j++) { 			sum += a[i][j]; 		} 		 		printf("The total score of %d student is %d\n", i+1, sum); 			 	} }

user: user-3
content: 引用 4 楼 qq423399099 的回复:不要截图，直接贴代码。 发现几个问题： 1.你输入学号的时候，第一次你的j没有初始化过，所以会越界，之后你的j每次都是4，也越界 2.第23行你j从1循环4，a[i][4]也会造成越界 对！ 23行j<5应改为j<4  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-4
content: 不要截图，直接贴代码。 发现几个问题： 1.你输入学号的时候，第一次你的j没有初始化过，所以会越界，之后你的j每次都是4，也越界 2.第23行你j从1循环4，a[i][4]也会造成越界

user: user-3
content: 2楼不对。  应该是：  将第10行的j改为0 将第12行的j=0改为j=1

user: user-3
content: 将12、13行挪到第8行。

user: user-0
content: 定义了一个三行四列的二维数组 用循环来输入它们的学号和成绩 然后在用循环吧学号 成绩 总分 名次打印出来
user-0 提问: turbo c3.0 64位 使用求助

回复:
user: user-1
content: 学习了  HAHAHAHAHAH

user: user-2
content: tc3有64位版本？？

user: user-3
content: Alt - F5可以吗？

user: user-4
content: 计算下列EDLIN.COM多少岁？ D:\DOS>dir edlin.com  驱动器 D 中的卷是 Q_HD2_8  卷的序列号是 54FC-A4FD   D:\DOS 的目录  1998-12-24  18:16           164,450 EDLIN.COM                1 个文件        164,450 字节                0 个目录 17,854,615,552 可用字节

user: user-5
content: 这个软件都快30岁了 装个DOSBOX，在DOSBOX中运行tc3
user-0 提问: C语言程序停止工作

回复:
user: user-1
content: 稍微调试下发现：answer[lenc + 1] = '\0';这句越界了 char answer[] = "0";你这样的写法表示answer数组长度只有1（一个字符'0'外加一个自动补上的'\0'） PS :count同理 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #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: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: style of function definition is now obsolete 求助

回复:
user: user-0
content: 问题已经解决,谢谢大虾,两个max函数的参数都要制定类型.

user: user-0
content: 谢谢:qq423399099  目前警告warning:style of function definition is now obsolete        还是存在 同时我运行程序时,遇到错误:undefined symbol max(int,int) in module text_max.cpp  我已经按照你指出的错误修改了.但还是面临上面的错误.

user: user-1
content: 三处错误： 1.int max(a, b);应该是int max(int a, int b); 2.int max(a,b)应该是int max(int a, int b) 3.esle应该是else  #include<stdio.h>  int max(int a, int b);  void main() { 	int x, y, z; 	printf("input two numbers \n"); 	scanf("%d,%d", &x, &y); 	z = max(x, y); 	printf("maxnum is :%d", z); }  int max(int a, int b) { 	if (a>b) 		return a; 	else 		return b; }   PS：scanf("%d,%d", &x, &y);这样的写法输入的时候要注意两个数之间要用逗号分隔

user: user-2
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。
user-0 提问: 有那位大神可以教教我这个编程的题目，在线等，实在是毫无思路

回复:
user: user-1
content: 引用 5 楼 a18729562128 的回复:怎么说呢，我才大一才学C语言，学校要我们编一个这个，然后就是没有思路，我觉得这个得用数据库的知识，但是我们还没有学这个，那我应该怎么办呢  存文件里。 用fprintf 和fscanf 来写/读。

user: user-2
content: 仅供参考： 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子   http://blog.163.com/tab_98/blog/static/1192409720158673337998/

user: user-0
content: 怎么说呢，我才大一才学C语言，学校要我们编一个这个，然后就是没有思路，我觉得这个得用数据库的知识，但是我们还没有学这个，那我应该怎么办呢

user: user-3
content: 网上找找信息管理系统，主要就是一个数据库设计和数据库的增删改查功能，加上界面就行了

user: user-4
content: https://www.baidu.com/s?wd=C源代码%20学生公寓门卫管理系统  里面挺多内容符合楼主需要啊。

user: user-0
content: 我之前也是在网上找了关于这个的，但是没找到，有没有和这个相关的我也可以改改

user: user-4
content: 在百度搜“C源代码 学生公寓门卫管理系统”
user-0 提问: C语言  动态执行函数 求教!

回复:
user: user-1
content: 可以遍历目录下所有文件，然后再依次执行

user: user-2
content: 可以写一个脚本，把所有的demo的可执行文件都编译出来，执行脚本的时候传入参数，根据参数执行相关demo的可执行文件。

user: user-3
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-4
content: 把这些函数放到一个动态库里面，LoadLibrary加载这个库，接收函数名，通过GetProcAddress函数获取函数地址，然后调用

user: user-5
content: system函数