Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 执行程序的时候，如何看变量/数组等在内存里的地址和内容？

回复:
user: user-1
content: 可以使用vc设置断点然后再调试，使用调试的内存窗口查看内存

user: user-2
content: "hello","kitty" 用二进制编辑器看,一般用UE看， 其实VS也可以看二进制文件  emp用调试器看，也可以自己输出查看

user: user-3
content: 你要让程序停下来才可以看，比如设置一个断点，当程序运行到这个点的时候会停下来，IDE上会有相应窗口显示变量的各种信息、调用堆栈等

user: user-4
content: 仅供参考：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-4
content: 我电脑上安装的MSDN2008中文版。

user: user-0
content: 引用 7 楼 zhangxiangDavaid 的回复:vs下F9，在该行下断点…… 谢谢，能否具体知道一下，如何下断点？下了断点程序就会在这个位置暂停？然后怎么看？

user: user-0
content: 引用 14 楼 zhao4zhong1 的回复:[quote=引用 13 楼 learnc2015 的回复:] [quote=引用 12 楼 zhao4zhong1 的回复:] 请楼主通读MSDN中文版中有关如何使用VS IDE的相关章节。 百度了半天，也没找到MSDN中文版[/quote] [/quote] 这在哪看到的啊

user: user-4
content: 引用 13 楼 learnc2015 的回复:[quote=引用 12 楼 zhao4zhong1 的回复:] 请楼主通读MSDN中文版中有关如何使用VS IDE的相关章节。 百度了半天，也没找到MSDN中文版[/quote]

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:请楼主通读MSDN中文版中有关如何使用VS IDE的相关章节。 百度了半天，也没找到MSDN中文版

user: user-4
content: 请楼主通读MSDN中文版中有关如何使用VS IDE的相关章节。

user: user-0
content: 引用 10 楼 paschen 的回复:你要让程序停下来才可以看，比如设置一个断点，当程序运行到这个点的时候会停下来，IDE上会有相应窗口显示变量的各种信息、调用堆栈等 谢谢，如何设置断点?

user: user-5
content: vs下F9，在该行下断点……

user: user-6
content: 引用 5 楼 learnc2015 的回复:[quote=引用 4 楼 bluewanderer 的回复:] ctrl + alt + m, 1 能否详细讲讲，我很菜的 程序首先要在那一步暂停吧？如何做到？[/quote]  在你想要看内容的位置设断点或者ctrl + f10执行到那一行，然后debug>window>memory随便开一个内存窗口，然后输入你想看的地址的表达式  ctrl+alt+m, 1/2/3/4是快捷方式。alt+6等效于ctrl+alt+m,1，不过我总感觉以前没见过，不知道是不是哪个版本的时候新加的。

user: user-0
content: 引用 4 楼 bluewanderer 的回复:ctrl + alt + m, 1 能否详细讲讲，我很菜的 程序首先要在那一步暂停吧？如何做到？

user: user-6
content: ctrl + alt + m, 1

user: user-7
content: 引用 2 楼 learnc2015 的回复:[quote=引用 1 楼 q3733353520 的回复:]  printf("%c\n",*emp[0]);//这个就是数组第一个元素（指针）所存地址的内容 printf("%p\n", emp[0]);//这个是数组第一个元素的内容（即存放上面那条语句内容的地址）  这个我知道，我要直接看内存，WINHEX? 我用的VS2010[/quote] VS没用过，按理说debug模式肯定可以

user: user-0
content: 引用 1 楼 q3733353520 的回复: printf("%c\n",*emp[0]);//这个就是数组第一个元素（指针）所存地址的内容 printf("%p\n", emp[0]);//这个是数组第一个元素的内容（即存放上面那条语句内容的地址）  这个我知道，我要直接看内存，WINHEX? 我用的VS2010

user: user-7
content: printf("%c\n",*emp[0]);//这个就是数组第一个元素（指针）所存地址的内容 printf("%p\n", emp[0]);//这个是数组第一个元素的内容（即存放上面那条语句内容的地址）
user-0 提问: 请教一个指针的问题，谢谢char *emp[2]={"hello","kitty"}; 	printf("%c\n",*emp[0]);

回复:
user: user-1
content: 引用 5 楼 q3733353520 的回复:[quote=引用 4 楼 learnc2015 的回复:] [quote=引用 3 楼 q3733353520 的回复:]  []优先级高于*,即先算emp[0]，代表指针数组的第一个元素（一个指针），然后*取指针内容，因为是char所以取一个字符  为什么printf("%s",emp[0]) 能打印出整个字符串？，不是说emp[0]只是保存了第一个字符的地址吗？ emp[0]能在任何地方表示整个字符串？[/quote]  它是第一个字符的地址，但是%s表示从这个地址是打印，一直到遇到'\0'[/quote] 它是第一个字符的地址，但是%s表示从这个地址开始打印，一直到遇到'\0'

user: user-1
content: 引用 4 楼 learnc2015 的回复:[quote=引用 3 楼 q3733353520 的回复:]  []优先级高于*,即先算emp[0]，代表指针数组的第一个元素（一个指针），然后*取指针内容，因为是char所以取一个字符  为什么printf("%s",emp[0]) 能打印出整个字符串？，不是说emp[0]只是保存了第一个字符的地址吗？ emp[0]能在任何地方表示整个字符串？[/quote]  它是第一个字符的地址，但是%s表示从这个地址是打印，一直到遇到'\0'

user: user-0
content: 引用 3 楼 q3733353520 的回复: []优先级高于*,即先算emp[0]，代表指针数组的第一个元素（一个指针），然后*取指针内容，因为是char所以取一个字符  为什么printf("%s",emp[0]) 能打印出整个字符串？，不是说emp[0]只是保存了第一个字符的地址吗？ emp[0]能在任何地方表示整个字符串？

user: user-1
content: []优先级高于*,即先算emp[0]，代表指针数组的第一个元素（一个指针），然后*取指针内容，因为是char所以取一个字符

user: user-2
content: 引用 楼主 learnc2015 的回复:int main(void) { 	char *emp[2]={"hello","kitty"}; 	printf("%c\n",*emp[0]); 	return 0; }  这里该怎么理解*emp[0] 是先取得emp[0]的地址，然后用*取出这个地址的值？ 还是先*emp取得当前地址的值，然后再取得这个地址的值的第一个字符？  []运算符的优先级比*高，即*emp[0] 等价于*(emp[0] ) emp是一个数组，元素为一个char型指针 char *emp[2]={"hello","kitty"};  第一元素为"hello"的首地址，第二个元素为"kitty"的首地址 所以emp[0]为"hello"的首地址，*emp[0] 为"hello"字符串的第一个字符'h'

user: user-3
content: 首先指针emp是指向的一个数组，*emp取得指针的内容，内容是数组，*emp[0]是进行数组的访问。
user-0 提问: 求教Winpcap编程的一些问题

回复:
user: user-0
content: 引用 1 楼 user-1的回复:你确定你没提取错吗？ UDP 的长度不可能那么大的 果然提取错了，提取两个字节以上的要把网络字节序转换成主机字节序。这样两个问题都解决了

user: user-1
content: 你确定你没提取错吗？ UDP 的长度不可能那么大的
user-0 提问: C语言求助！！！求大神们帮忙看看。

回复:
user: user-1
content: 引用 3 楼 kingjkn 的回复:[quote=引用 1 楼 NexTor 的回复:] m1，m2没有初始化  爱死你了，能再问个问题么？ 为什么第一个函数需要 第二个函数不需要啊？ [/quote] 第一个函数中，两个if后的条件可能为假，这时他们就不会被赋值，然后的比较就没有意义了。第二个中就不存在这种情况

user: user-0
content: 引用 1 楼 NexTor 的回复:m1，m2没有初始化  爱死你了，能再问个问题么？ 为什么第一个函数需要 第二个函数不需要啊？

user: user-0
content: 亲，爱死你了，还是CSDN专业。 能再问你个问题么？ 为什么没初始化不行啊。

user: user-2
content: m1，m2没有初始化

user: user-2
content: 引用 4 楼 wang0635 的回复:[quote=引用 3 楼 kingjkn 的回复:] [quote=引用 1 楼 NexTor 的回复:] m1，m2没有初始化  爱死你了，能再问个问题么？ 为什么第一个函数需要 第二个函数不需要啊？ [/quote] 第一个函数中，两个if后的条件可能为假，这时他们就不会被赋值，然后的比较就没有意义了。第二个中就不存在这种情况[/quote] 第二个中要走到if（m1 == m2）的判断，m1和m2都会被赋值了，不会存在没有被赋值的情况。

user: user-3
content: Not recognizing known sRGB profile that has been edited 和楼主贴出的代码好像没什么关系吧
user-0 提问: 求助C!!!

回复:
user: user-1
content: void createlist(linklist &L,int n)//改为void createlist(linklist L,int n)

user: user-2
content: 你使用了引用，而这是.c文件，把文件改为.cpp

user: user-3
content: 直接用g++编译好了
user-0 提问: 在顺序表中删除特定的值，请各位大神帮忙改改代码

回复:
user: user-0
content: 但输出时还是会停止工作啊

user: user-1
content: void delete_x 里面的if语句里面加return，或着使用if-else语句

user: user-2
content: 你的 list 是一个指针。sqlist是一个结构体 这两个之间我看了下，没有直接关系，然后你查找指定的数据是对list操作。然而简单的说 数据是储存在sqlist里面。你的操作出了些问题。 int main(int argc,char* argv[]) { int size=5,x,q;     Seqlist sqlist; Seqlist *list;     printf("初始化顺序表:\n");     sqlist=create(5); list = * sqlist/*此处增加，并没有实际测试，个人见解，见谅。*/     printf("顺序表如下:\n");     printList(sqlist);     printf("输入要删除的值:\n"); scanf("%d",&x);     q=locate(list,x); if(q!=-1) { delete_x(list,q); printList(sqlist); } else printf("删除失败!"); return 0; }

user: user-3
content: void delete_x(Seqlist *sqlist,int p) {     if(p<0||p>=sqlist->length)     {         printf("Not exist!\n");         return;     }     memmove(sqlist->data+p,             sqlist->data+p+1,             (sqlist->length-p-1)*sizeof(*sqlist->data));     --sqlist->length; }

user: user-2
content: 指出一个问题  在创建空表的时候，是不是应该用指针函数，然后返回指针？

user: user-0
content: 改了之后提示错误

user: user-4
content: q=locate(list,x);，list指针都没有指向链表，改成 q=locate(&sqlist,x);delete_x(list,q)改成delete_x(&sqlist,q);
user-0 提问: 关于const的一个问题

回复:
user: user-1
content: 一个const 用常量表达式初始化，  会被直接当作常量表达式使用 假设有  const int i=0; 大部分代码中，会使用 的 0 这个值 某些代码，可能会存取取 i这个（常）变量，所在内存中的值。 这样的程序。 理所当然的，不能得到你所需要的确切结果。

user: user-2
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-3
content: 常量折叠

user: user-4
content: 这是通过二级指针改变变常量的值，至于为什么全局常量会出错应该是全局常量是分配在常量区，而局部常量也是分配在栈上，只不过程序在编译时会检查你是否修改了这个常量

user: user-5
content: http://bbs.csdn.net/topics/300131243

user: user-6
content: 修改常量内容是undefined behavior啊。你定义一个const int i = 0; 后面代码用到i很可能被编译器直接当0用，而根本不管I的值是不是被用非常手段改过。

user: user-7
content: 测试了一下，外部的那个是在.rodata区，内部的那个在栈内。 内部的那个只能通过语法保证const，实际上仍然可以去修改它。 但是外部的那个，则通过mprotect改变了内存属性，修改它会触发seg-fault。

user: user-7
content: 引用 2 楼 paschen 的回复:这是通过二级指针改变变常量的值，至于为什么全局常量会出错应该是全局常量是分配在常量区，而局部常量也是分配在栈上，只不过程序在编译时会检查你是否修改了这个常量 我觉得这位说的对，不过建议LZ反汇编看一下那个变量到底是在常量区（.rodata）还是在栈上。另外鄙视一下下面的赵老师。

user: user-1
content: 引用 楼主 iaction 的回复: const int a = 5;//全局变量，可能放在常量区，属于不可写（只读）数据，用其它手段改写，就会出错。                      //这是CPU保护模式的一种能力。                      //如果没有通过地址读写的代码，这个常量可能不占用内存，---被优化掉了 void main() { 	int *ptr; 	ptr = (int*)&a;  	*ptr = 6; 	printf("%d\n",a); } 执行至*ptr=6时，写入内存冲突；   void main() { 	const int a = 5; //没有通过地址等间接手段引用，也可以被优化掉，                                //否则属于自动变量，                                 //在栈中,没有保护措施可用,改写也没问题，                                //虽然通过 a这个名字直接修改是不可能的 	int *ptr; 	ptr = (int*)&a; 	*ptr = 6; 	printf("a=%d\n",a); }  输出：a=6;   问题：为什么第一个不可以改变a的值，第二个可以呢？  const 宣布的是对应 标识符，及相关对象的不变特性 对于C++而言，通过常量表达式定义的 const ，结果可能是个常量表达式。 也可能同时是常量表达式和变量。 C没有真正的常量定义方式 ，要么宏定义，要么 enum C的 const 定义的标识符，结果不能成为常量表达式。
user-0 提问: 这个宏的作用是什么

回复:
user: user-1
content: 引用 3 楼 sdghchj的回复:从A中抹去L-1的bit位。 比如A=5即00000101，L=4， L-1=3即 00000011,取反为 11111100 00000101 & 11111100 = 00000100 = 4 从A中抹去L-1的bit位。 比如A=5即00000101，L=4， L-1=3即 00000011,取反为 11111100 00000101 & 11111100 = 00000100 = 4[/quote] a=5,b=4 (a+b-1)&~(b-1) a->00000101+00000100-00000001=00001000 b-1->00000100-00000001=00000011取反 结果11111100 00001000 & 11111100 结果 00001000 呵呵，谢谢我也学会一招

user: user-2
content: 原来与非门的作用是这样的啊。2、3楼正解

user: user-3
content: ~((L) - 1))//L作为补码的原码  引用 2 楼 user-5 的回复:把地址 A 以 L 对齐。 L 必须是 4， 8， 16 之类的。++

user: user-4
content: 从A中抹去L-1的bit位。 比如A=5即00000101，L=4， L-1=3即 00000011,取反为 11111100 00000101 & 11111100 = 00000100 = 4

user: user-5
content: 把地址 A 以 L 对齐。 L 必须是 4， 8， 16 之类的。

user: user-2
content: #define MY_ALIGN(A,L)	(((A) + (L) - 1) & ~((L) - 1)) 应该就是在编译的时候将#define MY_ALIGN(A,L)替换成#(((A) + (L) - 1) & ~((L) - 1))呗 A+L-1与非L-1具体结果，还真得想一下
user-0 提问: 除了C PRIMER PLUS，请推荐基本C语言学习的好书，谢谢

回复:
user: user-1
content: 引用 5 楼 learnc2015 的回复:[quote=引用 4 楼 Smile_Couson 的回复:] C语言程序设计-现代方法，新华书店在售。非常翔实易懂。 《C语言程序设计：现代方法》好像和《C语言程序设计》是两本不同的书  C程序设计语言（第2版·新版）Brian W．Kernighan, Dennis M．Ritchie徐宝文 李志 译 机械工业出版社30元 C语言程序设计：现代方法K.N.KING吕秀锋 译 人民邮电出版社55元[/quote] 对的。 作者K.N.KING，人民邮电出版社的那本。

user: user-2
content: c和指针，(美)(KennethA．Reek) ，经典书籍

user: user-3
content: 我推荐 《C语言程序设计：现代方法》K.N.KING 吕秀锋 译 人民邮电出版社

user: user-0
content: 引用 4 楼 Smile_Couson 的回复:C语言程序设计-现代方法，新华书店在售。非常翔实易懂。 《C语言程序设计：现代方法》好像和《C语言程序设计》是两本不同的书  C程序设计语言（第2版·新版）Brian W．Kernighan, Dennis M．Ritchie徐宝文 李志 译 机械工业出版社30元 C语言程序设计：现代方法K.N.KING吕秀锋 译 人民邮电出版社55元

user: user-1
content: C语言程序设计-现代方法，新华书店在售。非常翔实易懂。

user: user-4
content: [C和指针（第二版）].(美)Kenneth A.Reek.徐波译.扫描版.pdf [高质量程序设计指南：C.／C语言（第3版）（修订版）].林锐.扫描版.pdf

user: user-5
content: 那就C PRIMER, 比C PRIMER PLUS稍微深入点

user: user-0
content: 除了C PRIMER PLUS，请推荐几本C语言学习的好书，谢谢
user-0 提问: c语言问题

回复:
user: user-1
content: VC6和其后的VS行为不一样。 其后的VS更符合C++标准。

user: user-2
content: 测试代码: #include<stdio.h>   void main (void) { for (int i=0;i<5;i++) { 	printf("i+1:%d\t",i+1); } puts(" "); printf("for语句后i:%d\n",i); puts(" "); }

user: user-3
content: 1、标准C(ANSI C / C89)不支持，C++ / C99才支持这样的定义方式； 2、i的作用范围仅限于该for代码块，属于块局部变量。  引用 楼主 ddbbv 的回复:for(int i=0;i<10;i++);  大家好，我刚开始学c语言，我问个问题， 对于for语句，在for 语句里面定义变量i可以吗？ 如果可以，那么i的作用范围是多少？

user: user-4
content: 插补算法仿真程序设计， （1）能实现直线插补算法仿真      输入起点及终点坐标，按照每0.1秒钟的速度，以图形显示X/Y步进顺序和轨迹。 （2）圆弧插补      输入圆心及起点坐标，按照每0.1秒钟的速度，以图形显示X/Y步进顺序和轨迹。 （3）控制界面。       欢迎界面，有功能选择选项（直线插补和圆弧插补）。 （1）提供运行界面，界面美观。 （2）实现命令行绘图控制：       G00 空走 G01:直线插补  G02:顺圆插补，G03逆圆插补       X## X方向坐标  Y## Y方向坐标       输入一段代码，比如G01 X100 Y100  从当前点直线插补到(100,100)的地方；       注：上述G00 ，G01，G02，G03为软件自定义命令 （3） 具有插补坐标序列的文本文件（txt）存储功能和读取功能。即能向文           本文件中存储插补坐标序列，也可读取存储基本要求（1）中直线、                     圆或圆弧插补坐标序列的TXT文档，并能图形回显。 求助大神解答！

user: user-2
content: for 语句后面都可以用。包括此for 语句外。
user-0 提问: 请问C语言为什么不能把常量字符串赋给数组？

回复:
user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:“变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。 查MSDN是Windows程序员必须掌握的技能之一。 https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.71).aspx

user: user-2
content: 需要复制的话建议使用strcpy或者更加安全的strcpy_s  如果觉得这样写麻烦，可以使用标准库中的std::string，其对象支持直接复制

user: user-1
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-3
content: char name[20] ={0}; strcpy(name, "hello idiot");//赋值不行，但是可以拷贝 //数组名是数组的首地址，是常量。

user: user-0
content: 那么赋值应该怎么写呢？

user: user-4
content: 引用 5 楼 u014626834 的回复:可是不是经常有 char name[20]="你好，朋友";这样的语句吗？ 这是初始化，不是赋值

user: user-0
content: 可是不是经常有 char name[20]="你好，朋友";这样的语句吗？

user: user-5
content: 地址赋值给地址，当然不行了

user: user-6
content: char str[] = "Hello World!";

user: user-7
content: 我只听过字符串常量，没听过常量字符串. 字符串常量: - 类型是char[N]  - 连续存储，末尾自动添加\0 - 静态存储 - 相同值常量的地址可以不同 - 修改字符是未定义行为  常量字符串? const char* const?, C语言的const只是君子协议 又不是不能再修改.

user: user-8
content: 常量字符串首元素的地址是常量，数组名也是常量，能常量赋给常量么？
user-0 提问: for循环中排序后引起数组数据是怎么回事？是局部变量的原因吗？

回复:
user: user-1
content: int handle(int * a)函数中的  for(int i = 0; i< 6;i++)  是不是应该为  for(int i = 0; i< 5;i++)

user: user-0
content: 我要是把 int s 变成全局变量 就正常了 为什么呢？

user: user-1
content: 引用 1 楼 yanpingzaizai 的回复:因为你传的是地址，所以 在函数中对数字操作会改变数组中的值 for循环中排序直接对原数组进行操作，改变数组中的值。

user: user-0
content: 引用 1 楼 yanpingzaizai 的回复:因为你传的是地址，所以 在函数中对数字操作会改变数组中的值 我只是排序了一下 ，并没有改变内容啊 ？

user: user-2
content: 因为你传的是地址，所以 在函数中对数字操作会改变数组中的值
user-0 提问: #include的问题

回复:
user: user-1
content: 相对路径， 目的是让使用者看到相关函数和类的定义

user: user-2
content: 相对路径 .   代表当前 ..  代表上一级 /   为相邻路径的分隔符

user: user-3
content: #include <>  表示在系统的头文件路径下找指定的头文件 #include "" 表示在当前路径下找指定的头文件

user: user-4
content: 头文件也是有路径的

user: user-5
content: ../../../代表的是 当前目录的"上一层再上一层再上一层目录"
user-0 提问: 关于局部变量和全局变量的一个问题

回复:
user: user-1
content: 闭包是可以的，但需要支持C99 #include<stdio.h> int main() {     int a=1;     void f()     {         a=2;     }     f();     printf("%d\n",a);     return 0; } // Output: // 2

user: user-2
content: f2 已经分家出去了，单过了再用老头的钱说不过去的。

user: user-3
content: 这个帖子也纠正了我认识上的误区！

user: user-4
content: 不要把JS的思想代到C++中来了.  每个变量是有生命周期和作用域的.  auto int b; 这个是函数f1中的变量, 作用域限定在f1内,  f2中是不可见的. 同理, f1中也对f2中的c不可见

user: user-5
content: 如果 b 是个传递到 f2() 中的参数，那就可见，如果没有传递到 f2() 中，那就不可见

user: user-6
content: 如果传参的话可以

user: user-7
content: 得使用全局变量才行……

user: user-8
content: b在f2中不可见。 函数是平等的，不是说调用谁谁就是下一级函数，就可以使用上一级的局部变量。

user: user-9
content: f1()，f2()，没有参数，不能传递 如果有参数，可以传递 另外 一个生命周期在语句组内部， auto int b; 一个在整程序生存期内
user-0 提问: VS2012怎么不能编译C呢？

回复:
user: user-0
content: 谢谢各位的帮助，已经解决。vs2012 express for desktop 有漏洞，更新update 5 就可以编译使用了。 当然先要检查楼上各位提到的问题。

user: user-1
content: 用CFree也可以的

user: user-2
content: 盲从！几到几十 MB 的 C/C++ 集成环境遍地都是，很多初学者仅仅为了学 C/C++ 基础却去安装好几个GB的VS，也是服了！

user: user-3
content: 或者说没有完整安装。

user: user-3
content: 无法打开 stdio.h 是因为你没有卸载干净。。。

user: user-3
content: 你得添加一个默认的头文件  #include "stdafx.h"  在最顶部。 要么就按照5楼的在属性中 选择 不使用 预编译头文件。

user: user-4
content: 项目属性里改成不使用预编译头试下

user: user-5
content: 改用简洁强大的Code::Blocks(http://www.codeblocks.org/)。

user: user-6
content: 安装配好的话，肯定是可以的，楼主没安装好吧~~~

user: user-7
content: 估计是你vs安装的问题，重装前，必须卸载干净（这方面微软做得确实有点失败）
user-0 提问: Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted怎么办？

回复:
user: user-0
content: 谢谢大家的回答，原来问题又是出在了细节之处。 要学习、要注意的问题真的很多啊！ 任重道远啊！ 大家一起加油！

user: user-1
content: 不管是不是数组，你访问的内容超过了变量的长度，就会发生越界。  tmp 是一个 char， 只有 1 个字节大小。 scanf("%d"  中 %d 对应的是 int，它会访问传入的地址开始的 4 个字节的内容，你只有 1 个字节，访问就越界了。

user: user-2
content: scanf("%d", &tmp); tmp明明是char类型却要充当int, 那句错误信息说得很清楚吧
user-0 提问: C语言中关于字符数组的问题

回复:
user: user-1
content: 引用 7 楼 q3733353520 的回复:a代表数组的首地址 &a代表数组的地址 虽然两者值相等，但意义不一样。你可以打印a+1和&a+1试试  正解

user: user-2
content: a代表数组的首地址 &a代表数组的地址 虽然两者值相等，但意义不一样。你可以打印a+1和&a+1试试

user: user-3
content: 数组名本身可以理解成指向数组首元素的指针，所以值是一样的（注：数组名不是指针，只是你这种情况下可以这么理解）

user: user-4
content: 打个比方，201班有很多学生，现在有人问你在哪儿上课，你可以说“201班”，也可以说“我上课的地址是2楼的第一个教室”，其实他们所代表的是一个意思。

user: user-5
content: 楼上正解。。

user: user-6
content: C代表的是 数组C第一个成员的地址 &C 也是获取数组成员的第一个地址 也就是 一个变量首地址

user: user-0
content: 不太理解 c 和 &c 为什么一样

user: user-7
content: 数组名可以代表数组元素的首地址
user-0 提问: 为什么加了宏定义，在VS2013中可以使用gets，在VS2015中就不行了呢？

回复:
user: user-1
content: 在vc6.0中可以使用gets 在vs中使用gets_s或直接使用fgets

user: user-2
content: gets很危险，使用fgets代替. gcc也不能用

user: user-3
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。

user: user-0
content: 还是提示相同的错误!

user: user-0
content: 不好意思，这才是源码

user: user-2
content: VC6 for(int i .....) 循环完了还能用i, 旧的东西就是旧的东西. C11 标准中被弃用, 直接搜一下都有了 引用The most recent revision of the C standard (2011) has definitively removed this function from its specification. The function is deprecated in C++ (as of 2011 standard, which follows C99+TC3).

user: user-0
content: 但是VS2013，在源文件中加了宏定义后，就可以使用gets函数了，为什么在VS2015中却不行呢？
user-0 提问: 用arcgis engine打开栅格数据 出现的问题 求大神解答

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

回复:
user: user-1
content: 可以通过这段代码获取当前时间：  #include <stdio.h> #include <time.h> #include <sys/timeb.h> #include <windows.h> int main(void) { 	struct tm *now; 	struct timeb tb; 	while (1) 	{ 		ftime(&tb); 		now = localtime(&tb.time); 		printf("%04d-%02d-%02d,%02d:%02d:%02d-%03d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec, tb.millitm); 		Sleep(1000); 	} 	return 0; }

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

user: user-3
content: Date and time utilities

user: user-4
content: 没有，只有一个tm结构体
user-0 提问: fscanf参数无效

回复:
user: user-1
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！

user: user-1
content: #include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) int main() {     FILE *fin, *fout;     fin = fopen("data.in", "rb");     if (NULL==fin) {         printf("Can not open file data.in!\n");         return 1;     }     fout = fopen("data.out", "wb");     const int boundary = 0x7FFFFFFF;     int x, max = -boundary, min = boundary, numbers = 0, sum = 0;     while (fscanf(fin, "%d", &x) == 1)     {         if (x > boundary || x < -boundary) return 6;         if (x < min) min = x;         if (x > max) max = x;         numbers++;         sum += x;     }     fprintf(fout, "%d %d %d", max, min, sum / numbers);     fclose(fin);     fclose(fout);     return 0; }

user: user-2
content: fscanf、fprintf往往是对文本文件读写的，打开方式是r、w，而不是二进制方式的rb、wb，他们与fread、fwrite配套

user: user-3
content: 我猜测不是代码问题  也不是编译器问题。 编译器很少出问题 出问题几乎都是优化导致的异常 你应该接触不到 所以不要怀疑编译器当遇到问题呢时。 别说你刚学 就算学啦2年的C 你问他 在你学习生涯中 你遇到过几个编译器问题 导致程序逻辑异常的换个编译器就正常啦的。 不是特别底层 很少接触这类问题。如果是书上的代码 我感觉错的可能也比较低，写书的也不是白痴，都能写书啦，水准应该 不比你差。只是一般人写说 存在一种信息的不对称性，对于运行这个程序 作者并没有把一个新手在第一次运行这个程序会 出现的惯性思维考虑到，也没有注意提示什么的。 我猜测问题应该是这样的。  1.data.in   , data.out 这俩个文件存在吗？ 2.如果存在 你把他们放置的位置是.exe的同一目录吗?

user: user-4
content: 判断下fopen的返回值

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:图片看不太清，fin是NULL吗？错误报的是这个，但是fin赋值了。

user: user-0
content: 引用 2 楼 dustpg 的回复:"传递了一个无效参数视为严重错误", 这么大的字没看到么, 下面显示_Stream为NULL但是fin赋值了，不知为何是NULL

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) int main() {     FILE *fin, *fout;     fin = fopen("data.in", "rb");     if (NULL==fin) {         printf("Can not open file data.in!\n");         return 1;     }     fout = fopen("data.out", "wb");     const int boundary = 0x7FFFFFFF;     int x, max = -boundary, min = boundary, numbers = 0, sum = 0;     while (fscanf(fin, "%d", &x) == 1)     {         if (x > boundary || x < -boundary) return 6;         if (x < min) min = x;         if (x > max) max = x;         numbers++;         sum += x;     }     fprintf(fout, "%d %d %d", max, min, sum / numbers);     fclose(fin);     fclose(fout);     return 0; } 变量还是被编译器优化了。但是加了volatile修饰依旧是被优化了。。。

user: user-0
content: 引用 5 楼 q3733353520 的回复:判断下fopen的返回值找到问题了，变量被编译器优化了。但是加了volatile修饰依旧是被优化了。。。

user: user-0
content: 引用 5 楼 q3733353520 的回复:判断下fopen的返回值找到问题了，变量被编译器优化了。但是加了volatile修饰依旧是被优化了。。。

user: user-5
content: "传递了一个无效参数视为严重错误", 这么大的字没看到么, 下面显示_Stream为NULL

user: user-6
content: 图片看不太清，fin是NULL吗？
user-0 提问: 文件读取和输入的小问题，指针数组的初始化

回复:
user: user-1
content: 我用 gcc 可以编译过去，没问题

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

回复:
user: user-1
content: 链接，又称连接（纯属翻译问题），就是程序由源文件，首先编译成obj文件，然后是各个obj文件链接成exe文件。 在编译阶段，变量（包括普通变量，函数也是变量，用类生成的一个对象也是变量）在使用前， 需要有声明（要分清变量的声明与定义，普通变量及类的对象默认是定义，加上extern就是声明；函数原型就是声明，函数原型加函数体就是定义）， 就通过编译。 通过编译后，还需要通过链接，就是声明的变量，要能够找到。 所谓空链接，就是在链接时，变量被隐藏了，链接器找不到，通常一些非全局变量，都是空链接的。 所谓内部链接，就是定义的变量，obj内部可以访问，外部obj无法访问，通常加上static关键字定义的都是内部链接。 所谓外部链接，就是内部外部都可能访问，没有static修饰的全局变量和全局函数都是外部链接  链接是针对变量而言，对于没有实例化的类型而言，由于没有地址，根本谈不上链接。类型定义是给编译器看的，而不是链接器。

user: user-2
content: 引用 6 楼 learnc2015 的回复:[quote=引用 5 楼 sholber 的回复:] [quote=引用 4 楼 learnc2015 的回复:] [quote=引用 2 楼 sholber 的回复:] 没听说过空链接。不知道是啥东西。 参考C PRIMER PLUS 第五版 第321(存储类、链接、和内存管理)、323页[/quote]  链接属性只分有无，不存在是空的还是实的。纯属翻译的问题。 标识符的链接是个讲起来麻烦的东西。 每个无链接的标识符都指示一个单独的实体。如果一个标识符不是被声明为对象或者函数（而是声明为其它一些东西，诸如typedef名、结构标记、联合标记和枚举标记，等等），或者，它被声明为函数参数，又或者，它指示一个对象，但只有块作用域且在声明时不包含存储类指定符extern，那么，它是无链接的。 所以，下例中的标识符F、t、g、e、Male、Female和a都是无链接的。 typedef void F (int, int); struct t {/* …… */}; enum e {Male, Female,}; int f (void g (const char *)) { 	char a [] = "Pride and Prejudice.\n"; g (a);     /* …… */ } [/quote] t是有链接的吧！外部链接[/quote] t仅仅是一个类型标记，不指示任何对象或者函数，仅这一条就已经不符合了。

user: user-0
content: 引用 5 楼 sholber 的回复:[quote=引用 4 楼 learnc2015 的回复:] [quote=引用 2 楼 sholber 的回复:] 没听说过空链接。不知道是啥东西。 参考C PRIMER PLUS 第五版 第321(存储类、链接、和内存管理)、323页[/quote]  链接属性只分有无，不存在是空的还是实的。纯属翻译的问题。 标识符的链接是个讲起来麻烦的东西。 每个无链接的标识符都指示一个单独的实体。如果一个标识符不是被声明为对象或者函数（而是声明为其它一些东西，诸如typedef名、结构标记、联合标记和枚举标记，等等），或者，它被声明为函数参数，又或者，它指示一个对象，但只有块作用域且在声明时不包含存储类指定符extern，那么，它是无链接的。 所以，下例中的标识符F、t、g、e、Male、Female和a都是无链接的。 typedef void F (int, int); struct t {/* …… */}; enum e {Male, Female,}; int f (void g (const char *)) { 	char a [] = "Pride and Prejudice.\n"; g (a);     /* …… */ } [/quote] t是有链接的吧！外部链接

user: user-2
content: 引用 4 楼 learnc2015 的回复:[quote=引用 2 楼 sholber 的回复:] 没听说过空链接。不知道是啥东西。 参考C PRIMER PLUS 第五版 第321(存储类、链接、和内存管理)、323页[/quote]  链接属性只分有无，不存在是空的还是实的。纯属翻译的问题。 标识符的链接是个讲起来麻烦的东西。 每个无链接的标识符都指示一个单独的实体。如果一个标识符不是被声明为对象或者函数（而是声明为其它一些东西，诸如typedef名、结构标记、联合标记和枚举标记，等等），或者，它被声明为函数参数，又或者，它指示一个对象，但只有块作用域且在声明时不包含存储类指定符extern，那么，它是无链接的。 所以，下例中的标识符F、t、g、e、Male、Female和a都是无链接的。 typedef void F (int, int); struct t {/* …… */}; enum e {Male, Female,}; int f (void g (const char *)) { 	char a [] = "Pride and Prejudice.\n"; g (a);     /* …… */ }

user: user-0
content: 引用 2 楼 sholber 的回复:没听说过空链接。不知道是啥东西。 参考C PRIMER PLUS 第五版 第321(存储类、链接、和内存管理)、323页

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:空链接 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=空链接&oq=fmod&rsv_pq=fabde15e0003918f&rsv_t=5823AaYN%2B6hrV7gNY%2FjBqN5r%2BigCtYJUjh3cwhlBGI3S4U8IdMKTLosDnw4&rsv_enter=1&inputT=11495&rsv_sug3=15&rsv_sug1=11&rsv_n=2&bs=VC6设置字体大小  参考C PRIMER PLUS 第五版 第321(存储类、链接、和内存管理)、323页

user: user-2
content: 没听说过空链接。不知道是啥东西。

user: user-3
content: 空链接 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=空链接&oq=fmod&rsv_pq=fabde15e0003918f&rsv_t=5823AaYN%2B6hrV7gNY%2FjBqN5r%2BigCtYJUjh3cwhlBGI3S4U8IdMKTLosDnw4&rsv_enter=1&inputT=11495&rsv_sug3=15&rsv_sug1=11&rsv_n=2&bs=VC6设置字体大小
user-0 提问: 关于extern和int main（）的结构问题

回复:
user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:去掉extern声明试试 哦哦哦，明白了，已经解决，谢谢啦～～

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:去掉extern声明试试 额...咋去？直接删掉那两个extern？？

user: user-1
content: 去掉extern声明试试
user-0 提问: 请问VS2013在写源码的时候，比如我输入{后面的}和;会自动加上去，那么我括号内的代码打完后，除了鼠标，还有什么办法可以到;后面继续写？

回复:
user: user-0
content: 除了这个之外呢？

user: user-1
content: 用键盘上的左右上下键

user: user-2
content: Ctrl+F打开快速查找 输入 }; ，按F3定位到类定义末尾 Esc关闭快速查找 Ctrl+Shift+Enter插入新行
user-0 提问: 今天看到一个题目，是这样的

回复:
user: user-1
content: 如果是面试。这应该是故意引导，如果是考试。楼主的题一定抄错了。

user: user-2
content: 测试一下：  int aaa(char * s) { 	char *t = s; 	while (*t++);     //添加分号 	t--; 	return (t - s); } int main(void) { 	char *s = "zhangxiang"; 	printf("%d %d\n", aaa(s), strlen(s)); 	return 0; } //10 10 等同于strlen函数

user: user-3
content: int aaa(char * s) { 	char *t = s; 	while(*t++); 	t--; 	return (t -s); }  while(*t++);少了一个分号，要不然while()循环是退不出来的

user: user-4
content: 若s非空，死循环了，若s空，程序存在大bug。

user: user-5
content: 首先，你的程序抄都抄错，少了个分号都没发现？ 话回正题，这个程序的目的是计算字符串长度啊。

user: user-6
content: 引用 5 楼 user-7 的回复:while后漏了一个分号就量死循环  如果加上分号就是计算字符串长度  t-- 是为了减去最后判断字符串末尾的0时做的++运算+1

user: user-7
content: while后漏了一个分号就量死循环  如果加上分号就是计算字符串长度  t-- 是为了减去最后判断字符串末尾的0时做的++运算
user-0 提问: 有个关于指针的问题搞不太明白，请教一下大神

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

user: user-2
content: 指针、指针…… http://blog.csdn.net/zhangxiangdavaid/article/details/37885275

user: user-3
content: 我猜你问的大概是这个： http://bbs.csdn.net/topics/391831773
user-0 提问: TCP客户机与服务器的通信

回复:
user: user-1
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98  再参考 MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLEC.DSP MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLES.C MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLEC.C MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\IOCTL.C MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\README.TXT MSDN98\SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\MAKEFILE  http://bbs.csdn.net/topics/390374955

user: user-2
content: 嗯，，，看不懂，好高深的c语言

user: user-3
content: 服务端这一句：  if (recv(new_fd,buff,strlen(buff),0) == -1) strlen(buff) 结果为0，也就是不接收任何数据，因此堵塞。 将strlen 改成 sizeof 吧，strlen是用来数字符个数的，不是算缓冲区长度的
user-0 提问: C语言编译expected型error，求助

回复:
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: 引用 6 楼 zhangruo2010的回复:第十一行的右括号是个中文括号，要改为英文半角括号 十二行也是这样的错误

user: user-2
content: 第十一行的右括号是个中文括号，要改为英文半角括号

user: user-3
content: c语言中没有引用的概念，c++才有。 把.c文件改为.cpp

user: user-4
content: 还有就是你的代码干嘛把声明和定义写到一起，写到一起的话还不如不要声明，直接定义就好了。

user: user-4
content: 根据.c文件看出来你这是c语言，void ClearList(SqList &L)中的形参是按引用来传递的，这个是c++的，c语言没有引用的概念，把取地址符&换成取值符*应该就可以了，是按指针传参的。要使用按引用传参的话，请使用C++编译器来编译，并且文件命名为.cpp.

user: user-5
content: SqList &是C++引用 C语言编译器不认识

user: user-6
content: 我似乎看到了全角符号
user-0 提问: 信号问题

回复:
user: user-1
content: sig_act 的 sa_mask 没有赋值啊 sigemptyset(&sig_act.sa_mask);

user: user-2
content: 木有注释，表示水平不够，看不是很明白。帮顶。

user: user-3
content: 不明觉厉，只能帮顶。
user-0 提问: 请问VS2015中，就算加了宏定义，还是不能用gets函数，而VS2013中加了宏定义就可以使用gets函数，请问那再怎么定义呢？

回复:
user: user-1
content: /RTC (Run-Time Error Checks)

user: user-2
content: 你应该把错误的代码贴出来,出错的信息贴出来.因为很可能vs2015中就把fgets作为了一个内置的函数.你的宏定义没准和里面的某个函数冲突了.

user: user-0
content: 不会加错地方，在VC6.0和VS2013中都编译通过并运行了，在VS2015就编译不通过

user: user-2
content: 引用 楼主 u014626834 的回复:请问VS2015中，就算加了宏定义，还是不能用gets函数，而VS2013中加了宏定义就可以使用gets函数，请问那再怎么定义呢？ 你应该把解法告诉我.这样下次碰到了,我也有个准备啊

user: user-3
content: 楼主贴出代码

user: user-4
content: 目测加错地方了

user: user-5
content: 那就使用fgets……
user-0 提问: 这个程序可以编译但是运行不了

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int status ; typedef int elemtype ; typedef elemtype*triplet ; status inittriplet(triplet&T,elemtype v1,elemtype v2,elemtype v3) {     T=(elemtype*)malloc(3*sizeof(elemtype));     T[0]=v1 ;     T[1]=v2 ;     T[2]=v3 ;     return OK ; } status get(triplet T,int i,elemtype&e) {     if(i<1||i>3)return ERROR ;     e=T[i-1];     return OK ; } status put(triplet&T,int i,elemtype e) {     if(i<1||i>3)return ERROR ;     T[i-1]=e ;     return OK ; } status max(triplet T,elemtype&e) {     e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):     ((T[1]>=T[2])?T[1]:T[2]);     return OK ; } main() {     triplet*t ;     int a ;     elemtype elem,e1,e2,e3,*p=&elem ;     scanf("%d %d %d",&e1,&e2,&e3);     inittriplet(*t,e1,e2,e3);     printf("%d %d %d",t[1],t[2],t[3]);     max(*t,elem);     printf("the max num is %d\n",elem);     //get      scanf("%d",&a);     if(a>=1&&a<=3)     {         printf("Please input a new number:");         scanf("%d",&elem);         put(*t,a,elem);         printf("%d %d %d",t[1],t[2],t[3]);     }     else      {         printf("Your input not correct!");     } } 没猜错的话，lz写的是 数据结构前面的那个 三元数组的代码

user: user-2
content: 引用是C++内容，用C编译器编译会出错。 你的main没有返回类型，用C++编译器编译会出错。 而且那个get也没写完。

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:代码并不完整……完整的，就是一个功能没有调用，不会写

user: user-3
content: 代码并不完整……
user-0 提问: 编译不通过提示have 'float' and 'int',麻烦各位帮我看看

回复:
user: user-1
content: 1.操作符%，只针对整数。 2.浮点数使用fmod(x, y);   等价于x%y

user: user-2
content: fmod Calculates the floating-point remainder.  double fmod( double x, double y );  Function Required Header Compatibility  fmod <math.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  fmod returns the floating-point remainder of x / y. If the value of y is 0.0, fmod returns a quiet NaN. For information about representation of a quiet NaN by the printf family, see printf.  Parameters  x, y  Floating-point values  Remarks  The fmod function calculates the floating-point remainder f of x / y such that x = i * y + f, where i is an integer, f has the same sign as x, and the absolute value of f is less than the absolute value of y.  Example  /* FMOD.C: This program displays a  * floating-point remainder.  */  #include <math.h> #include <stdio.h>  void main( void ) {    double w = -10.0, x = 3.0, y = 0.0, z;     z = fmod( x, y );    printf( "The remainder of %.2f / %.2f is %f\n", w, x, z );    printf( "The remainder of %.2f / %.2f is %f\n", x, y, z );  }   Output  The remainder of -10.00 / 3.00 is -1.000000   Floating-Point Support Routines  See Also   ceil, fabs, floor

user: user-3
content: 因为没有为float（和double）定义%运算

user: user-4
content: float不能进行取余运算
user-0 提问: 求解这个程序为什么内存冲突了？完全按照书上的答案打的。

回复:
user: user-1
content: for循环里面++i改成--i，另外for循环里面是复合语句，需加大括号{}

user: user-2
content: 代码敲错了 1） ++i ，++j就是错的，二者一个前进，一个后退才能够实现翻转 2）循环中居然， 没有将交换数据的代码，全部包括进去（没写大括号 ｛｝）这个 功能就实现不了了。 3）具体出错原因，是循环里面，越界读写，++i,++j 条件j<i 一直都满足（约等于死循环），于是一直在运行， 4）这个问题解决后，看看那个getline 有没有问题

user: user-3
content: 贴代码，不要贴图……

user: user-0
content: 如题，求大神，刚入门的小菜鸟找不出问题
user-0 提问: 请问为什么不能给结构体的元素赋值呢？

回复:
user: user-1
content: 原因有二： 1.结构体struct all有一个成员是name，而不是name[20]; 2.在c语言中：  char name1[20] = "zhangxiang";   //初始化，可以 char name2[20]; sprintf(name2, "%s", "zhangxiang");  //赋值，可以

user: user-2
content: strcpy(look[0].name, "张三");  数组不是frist-class object

user: user-0
content: 但是为什么字符数组就不行呢？
user-0 提问: 请问VS2013写C程序，怎么给应用程序加上图标？

回复:
user: user-1
content: 用资源文件导入一个图标，或者http://bbs.csdn.net/topics/391110538

user: user-2
content: CUI程序首次导入的ICO默认作为CUI程序的图标 GUI的话WNDCLASSEX.hIconSm/hIcon 用LoadIcon(arg1:程序实例句柄,arg2:MAKEINTRESOURCE(资源ID)

user: user-3
content: 引用 1 楼 zhangxiangDavaid 的回复:带界面的是MFC、QT之类的……+1，控制台程序没图标这一说

user: user-4
content: 带界面的是MFC、QT之类的……
user-0 提问: 请教int变量的最大最小值只和CPU几位(32,64)有关吗？

回复:
user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:请楼主亲自打开文件include\limits.h，查看其内容。 好的，我学习一下

user: user-1
content: 请楼主亲自打开文件include\limits.h，查看其内容。

user: user-2
content: 引用 3 楼 daiqingxun 的回复:int取值范围是取决于CPU，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值 字节(byte)都是8位的，字(word)可能是32位的。

user: user-3
content: 这么给你说类型大小是和系统相关的，说白了和程序相关，其实也就和编译器先关，编译器是给cpu服务的，也就和cpu相关了

user: user-4
content: 参看：http://blog.csdn.net/zhongzhiwei/article/details/8678885

user: user-5
content: 原则上和CPU寄存器长度有关， 不过也有例外，例如 C51 51寄存器为 8Bits，int 是16 Bits  实现中，往往由编译器决定  因为很多时候， 32 Bits可以跑16Bits 程序  64Bits可以跑 32Bits程序 所以，实际上还和编译器有关 某种情况下，32Bits CPU 也可以跑64Bits程序  所以，具体实现由编译器决定  此外，还有 交叉编译器，A CPU上的编译器，可以编译 BCPU跑的程序  A 操作系统上的编译器，有时候也可以编译 B操作系统上跑的程序  一般来说 CPU（FPU），操作系统，编译器  这三者 的某种组合，决定了 int 等数据类型的长度  CPU只是基本决定，而不是确定能决定了的

user: user-6
content: 和编译器有关，分配多少就是多少

user: user-7
content: 引用 3 楼 daiqingxun的回复:int取值范围是取决于CPU，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值 int取值范围是取决编译器，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值

user: user-7
content: int取值范围是取决于CPU，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值

user: user-7
content: 引用 3 楼 daiqingxun的回复:int取值范围是取决于CPU，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值 int取值范围是取决于CPU，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值[/quote] int取值范围是取决于CPU，现在电脑都是32位和64位，int是32位的，int一般占4个字节一个字节32位，占4个字节就是4个32位也就是128位，当把128位全部填写2进制1在转换成10进制就可以的到能存入无符号int类型可以存入多少数，int是有符号的所以在除于2就可以得到int可以存入的最大值，相反最大值是负值也就是最小值[/quote] 不是取决CPU是取决编译器

user: user-8
content: 但是你一般多少位的操作系统就是用的多少位的编译器吧，不然会很麻烦的

user: user-9
content: 其实是和编译器相关的，你编译器是 32 位的，编出来的 int 不管 CPU 是多少位，操作系统是多少位，都只有 32 位
user-0 提问: 关于希尔排序的问题，求大神帮忙看一下，谢谢

回复:
user: user-1
content: #include<stdio.h> void Shell(int *a, int n); int main() { 	int a[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; 	myShell(a, 10); 	for (int j = 0; j < 10; j++) 	{ 		printf("%d ", a[j]); 	} 	printf("\n"); 	return 0; } void Shell(int *a, int n) { 	int i, j, temp; 	int gap = n / 2; 	while (gap >= 1) 	{ 		for (i = gap; i < n; i += gap) 		for (j = i; j >= gap && a[j] < a[j - gap]; j-=gap) 		{ 			temp = a[j - gap]; 			a[j - gap] = a[j]; 			a[j] = temp; 		} 		gap /= 2; 	} }
user-0 提问: VS2013中VC的使用问题？急死啦！

回复:
user: user-1
content: 函数必须指定返回值的类型，包括main函数。

user: user-2
content: 楼主还需多努力看书……

user: user-2
content: 楼主还需多努力看书……

user: user-3
content: 楼主看的啥书啊 int main（void）

user: user-0
content: 引用 4 楼 user-4 的回复:[quote=引用 3 楼 mov1er 的回复:] [quote=引用 2 楼 user-4 的回复:] int main() 这是C++ int main(void) 这是C 注意msvc不能完整支持C99 我看VC++里就直接是 main（）  VS里要int main（）？  好像VS里不分C与C++啊。。。[/quote] 你可以在解决方案管理器里修改后缀名，你现在用的是cpp，所以按C++编译 但不管什么时候，省略返回类型都是个坏习惯[/quote]  好吧，反正多写int也没问题吧？

user: user-4
content: 引用 3 楼 mov1er 的回复:[quote=引用 2 楼 user-4 的回复:] int main() 这是C++ int main(void) 这是C 注意msvc不能完整支持C99 我看VC++里就直接是 main（）  VS里要int main（）？  好像VS里不分C与C++啊。。。[/quote] 你可以在解决方案管理器里修改后缀名，你现在用的是cpp，所以按C++编译 但不管什么时候，省略返回类型都是个坏习惯

user: user-0
content: 引用 2 楼 user-4 的回复:int main() 这是C++ int main(void) 这是C 注意msvc不能完整支持C99 我看VC++里就直接是 main（）  VS里要int main（）？  好像VS里不分C与C++啊。。。

user: user-4
content: int main() 这是C++ int main(void) 这是C 注意msvc不能完整支持C99

user: user-0
content: 还有个什么找不到系统制定文件的弹框
user-0 提问: 求解答

回复:
user: user-0
content: 引用 1楼user-3 的回复:C语言版本cout << a++ << a++ ....请查看置顶帖给个链接啊，平时很少逛

user: user-1
content: 修改如下：  #include<stdio.h> int main() { 	struct a 	{ 		char name[10]; 	}aa[3] = { { "abc" },{ "def" },{ "ghi" } }; 	struct a *paa = aa; 	printf("%c %c %c", paa[0].name[0], paa[1].name[1], paa[2].name[2]); 	return 0; } //a e i

user: user-2
content: 有时间写帖子，没时间看置顶吗

user: user-3
content: C语言版本cout << a++ << a++ ....请查看置顶帖
user-0 提问: In ?? () () Cannot find bounds of current function问题

回复:
user: user-0
content: 可能是这个地方错吗

user: user-0
content: 那哪错了，求大神解决

user: user-1
content: 我也调试过，能编译，但好像不是那里错了，

user: user-2
content: 应该是函数栈被破坏，但看楼主的代码，那个save函数并没有什么问题
user-0 提问: 请问VS2015在哪里下载？

回复:
user: user-1
content: http://blog.csdn.net/cometnet/article/details/19551125

user: user-2
content: http://www.ithome.com/html/win10/164028.htm

user: user-3
content: 上百度一下下载个不就好了

user: user-4
content: 话说楼主不结贴 问的问题都能自己解决吧

user: user-4
content: 微软的所有工具和系统  各种版本 MSDN 我告诉你  http://msdn.itellyou.cn/

user: user-5
content: https://www.visualstudio.com/
user-0 提问: 数据总线，地址总线，控制总线都是什么，之间有什么关系

回复:
user: user-1
content: 总线就是CPU和内存等设备连接的（所有）导线  数据总线用来读写数据， 控制总线用来发布读写命令 地址总线用来传送内存地址 选好地址才能读写数据

user: user-2
content: http://zhidao.baidu.com/link?url=B2DJckDEmi2-wLQRmL_dUP4fb85x5B4KOQwV-SFrfHwN8kAmj70BPMiyNt-eaExnWvHgN9WiD56G_afD9CKDWa
user-0 提问: 自旋锁的极端猜想---大家来讨论下

回复:
user: user-1
content: 为什么不参考Linux下自旋锁相关源代码片断呢？

user: user-0
content: 引用 6 楼 JiangWenjie2014 的回复:BTS指令常常和LOCK前缀配合成为一个原子指令。加锁用bts指令，然后加一个lock前缀，确保处理器独占共享内存。http://bbs.pediy.com/showthread.php?t=74502 引用 6 楼 JiangWenjie2014 的回复:BTS指令常常和LOCK前缀配合成为一个原子指令。加锁用bts指令，然后加一个lock前缀，确保处理器独占共享内存。http://bbs.pediy.com/showthread.php?t=74502 基本上明了了，联想到x86 上高性能的mmu带来的快速cache 内存一致性，避免cpu 持有内存总线的过程过长，尽量去cache 取数据

user: user-2
content: 不可能同时 加锁的，这个请放心 这种代码会串行化的，所以必有先加与后加的

user: user-3
content: BTS指令常常和LOCK前缀配合成为一个原子指令。加锁用bts指令，然后加一个lock前缀，确保处理器独占共享内存。http://bbs.pediy.com/showthread.php?t=74502

user: user-4
content: 在没怎么看懂得情况下，回复一下。 spinlock底层就是一块内存，其中存储着0或者1，来表明这个锁是否有人持有。读取并判断是否为1的操作是一个原子操作。拿不到锁的就自旋，并不停得去执行那个原子操作。

user: user-5
content: 这个得留个言，回头来看

user: user-0
content: 引用 2 楼 user-6 的回复:自旋锁状态切换时原子操作吧，也就是说随机的?  看看其他人怎么说. 源码上的确是原子的,能够保证cache 和内存一致.  但谁获取锁,谁自旋这个问题还是无解啊

user: user-6
content: 自旋锁状态切换时原子操作吧，也就是说随机的?  看看其他人怎么说.

user: user-0
content: 有问题尽管提 有错误尽管指出
user-0 提问: 请问为什么结构体变量这样初始话，VS2013编译不通过？

回复:
user: user-1
content: ,name[10] = "Hello"; 改为 .name = "Hello";

user: user-2
content: 1. 这是C标准, 不是C++标准 2. VS2015支持, 2013没有测试

user: user-0
user-0 提问: 请问既然C语言写的程序必须编译器才能编译出来，那么也就是说，没有编译器，C语言就没有任何作用了？

回复:
user: user-1
content: 既然中文这种语言必须写出来或说出来，别人才能懂，那么也就是说，没有嘴和手，中文就没有任何作用了？

user: user-2
content: 不知道为什么要问这种没营养的问题

user: user-3
content: 谁说C语言必须编译执行，我解释执行不行了么。 现在都用白话，文言就没有价值了么.
user-0 提问: 我们现在使用的编译器，比如gcc g++ 是C99还是C90标准的？如何看是C99还是C90的？

回复:
user: user-1
content: man gcc 会说明符合那个标准

user: user-2
content: 引用 7 楼 startstop2015 的回复:[quote=引用 6 楼 jiqiang01234 的回复:] gcc都是向后兼容的，在gcc5.2之前，默认的都是gnu89，之后默认的是gnu11 谢谢，啥意思啊？我想知道gcc和c90/C99得关系[/quote] 知道这些有啥用吗？跟孔乙己知道茴字的四种写法有区别吗？

user: user-0
content: 引用 6 楼 jiqiang01234 的回复:gcc都是向后兼容的，在gcc5.2之前，默认的都是gnu89，之后默认的是gnu11 谢谢，啥意思啊？我想知道gcc和c90/C99得关系

user: user-3
content: gcc都是向后兼容的，在gcc5.2之前，默认的都是gnu89，之后默认的是gnu11

user: user-0
content: 引用 4 楼 q3733353520 的回复:[quote=引用 3 楼 startstop2015 的回复:] [quote=引用 2 楼 q3733353520 的回复:] http://blog.csdn.net/njnu_mjn/article/details/8629739 谢谢，LINUX下gcc是最好的C编译器吗？[/quote] 什么叫“最好的”？，只能说这个是通用的linux c编译器。主要看你的需要来选择，现在windows下好像不是用的这个[/quote] 谢谢，也就是醉流行得，通用得 你得意思是gcc既不是C90,也不是C99?

user: user-4
content: 引用 3 楼 startstop2015 的回复:[quote=引用 2 楼 q3733353520 的回复:] http://blog.csdn.net/njnu_mjn/article/details/8629739 谢谢，LINUX下gcc是最好的C编译器吗？[/quote] 什么叫“最好的”？，只能说这个是通用的linux c编译器。主要看你的需要来选择，现在windows下好像不是用的这个

user: user-0
content: 引用 2 楼 q3733353520 的回复:http://blog.csdn.net/njnu_mjn/article/details/8629739 谢谢，LINUX下gcc是最好的C编译器吗？

user: user-4
content: http://blog.csdn.net/njnu_mjn/article/details/8629739

user: user-5
content: gcc -std=c99 -o xx  xx.c
user-0 提问: 删除文本的注释

回复:
user: user-1
content: https://blog.csdn.net/damuluori/article/details/90141584 看看这个能否満足你的需求。这个应该是windows下最好用的代码注释清理工具了吧。

user: user-2
content: /* */ 是多行注释，也可以用于一行 嵌套注释和编译器有关，不同编译器处理方法不同 有的编译器视为 全部注释 有的编译器 视为两个 /* */ 之间为注释   这样 /*  /* */   */          有两种解释 1）第二个 /*被忽略， /*  /* */ 之间是注释，后一个 */不是注释结束符号 2）中间 成对的 /* */ 被忽略 所有这些代码全都是注释

user: user-3
content: 参考Tiny C Compiler源代码。

user: user-4
content: 这其实并不怎么好处理，多行注释还算简单的，嵌套注释就比较麻烦了。

user: user-3
content: Tiny C Compiler http://bellard.org/tcc/  MSDN中有C语言语法描述。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:参考Tiny C Compiler源代码。 引用 1 楼 zhao4zhong1 的回复:参考Tiny C Compiler源代码。 如果相看C语言的阅读文档，哪里可以下载， 哪个网站会提供C语言比较权威语法信息啊

user: user-0
content: 引用 4 楼 llxxhm 的回复:删除注释！想干什么！ 不想干嘛，就是学C语言的文件，自己做的小练习

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:参考Tiny C Compiler源代码。 问下这些编译器的源代码到哪里下载 如果看下gcc编译器，源代码，到哪里去下载

user: user-5
content: 删除注释！想干什么！

user: user-6
content: 那是因为你的代码逻辑还不够细（或者你的状态机太粗糙）。 至少得加上进入"和退出"的判断（状态）

user: user-7
content: 你是怎么删的，贴出来看看
user-0 提问: 用这样的方法写进文件是写了地址进去吗？

回复:
user: user-1
content: 修改如下：  #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<sys/types.h> #include<string.h> typedef struct test { 	char *buf; }Txt; int main(int argc, char *argv[]) { 	int fd; 	fd = open(argv[1], O_RDWR | O_CREAT, 0777); 	Txt *txt = (Txt *)malloc(sizeof(Txt)); 	txt->buf = (char*)malloc(sizeof(char) * 10);   //zx 	txt->buf = "abc"; 	write(fd, txt->buf, strlen(txt->buf));   //zx 	close(fd); 	free(txt->buf);   //zx 	free(txt);        //zx 	return 0; }

user: user-0
content: 引用 2 楼 user-2 的回复:txt->buf = "abc"; <==> txt->buf = &("abc"[0]）; 这地方应该给 buf 分配内存，然后strcpy "abc" 到 txt->buf  写的时候 ， 地址为 txt->buf   谢谢你了

user: user-2
content: 指针和数组是不同的数据类型

user: user-2
content: txt->buf = "abc"; <==> txt->buf = &("abc"[0]）; 这地方应该给 buf 分配内存，然后strcpy "abc" 到 txt->buf  写的时候 ， 地址为 txt->buf

user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #include<sys/types.h> typedef struct test {     char *buf; }Txt;  int main(int argc, char *argv[]) {     int fd;     fd = open(argv[1], O_RDONLY);     Txt *txt = (Txt *)malloc(sizeof(Txt));     read(fd, txt, sizeof(Txt));     printf("%s\n, %d\n",txt->buf, (int)txt->buf);     close(fd);     return 0; } 这部分是我 写的 读的部分 但是读的都是乱码 我猜有可能是写进去的是地址  具体我也不知道 求大神解释下   如果结构体里面是 buf【20】；这样是可以正确读出来的
user-0 提问: 关于arcgis二次开发 调用栅格数据

回复:
user: user-1
content: 很久之前了解过这块，不过不记得了，你去看看《ArcGIS开发宝典：从入门到精通》这本书

user: user-2
content: 用esri的Arcgis当然是用esri的ArcEngine COM 组件啊，相关接口：IRasterDataset，IRaster，IRasterBandCollection，IRasterBand，IPixelBlock
user-0 提问: 通过指针给数组赋值失败

回复:
user: user-1
content: *pEnd++ = buf; 应改为 *pEnd = buf;pEnd++;

user: user-0
content: 我是新手，求帮忙啊

user: user-0
content: 多谢帮忙哈， 不过我又调试了下，发现代码没有问题，看错数据了，*pEnd的数据不存在， 看 *pDst的数据发现赋值正常了。  *pEnd++ 没有问题的，  *的优先级 高于 ++；
user-0 提问: combobox控件数据为什么不能显示，求帮忙解答！

回复:
user: user-1
content: 试试代码加下拉数据……

user: user-0
content: 我在那边贴了这个帖子，没人能解答。况且这个是用C语言写的，也可以放在这里吧。

user: user-2
content: 请楼主移驾VC/MFC论坛。http://bbs.csdn.net/forums/VC

user: user-0
content: 不支持预定义列表项，只能手动添加。结贴。

user: user-0
content: 高手进来指导下啊！

user: user-0
content: 就是手动添加的数据，有多行。

user: user-3
content: 试着手动添加数据项

user: user-0
content: 求高手解答下。

user: user-0
content: 应该不用加代码吧，顶多估计有个combobox的刷新程序，但是什么函数呢？
user-0 提问: 请问VS2013写C程序为什么不能用scanf函数？

回复:
user: user-1
content: 在建项目时候把安全周期什么的勾掉就可以了

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

user: user-2
content: 在源文件顶头加上 #define _CRT_SECURE_NO_WARNINGS 试试

user: user-3
content: #define _CRT_SECURE_NO_WARNINGS 加在最前面

user: user-4
content: 引用 3 楼 walkiz 的回复:它推荐用scanf_s来替代，这个函数会更加安全一些。+1，加个啥宏定义把编译信息忽略就可以用了

user: user-5
content: 它推荐用scanf_s来替代，这个函数会更加安全一些。

user: user-6
content: 应该能用吧，为什么不可以用，楼主是不是有什么语法错误，编译不过呢？？？

user: user-3
content: lz读一下错误原因就知道了
user-0 提问: C语言怎么在程序外部使用变量名

回复:
user: user-1
content: 全局变量不行吗？

user: user-2
content: 引用 2 楼 u014626834 的回复:但是程序里面有ab这个变量，在外部输入了有什么意义呢？ 、不知道你想要干什么

user: user-3
content: 引用 2 楼 u014626834 的回复:但是程序里面有ab这个变量，在外部输入了有什么意义呢？ 从C语言基础看起。

user: user-0
content: 但是程序里面有ab这个变量，在外部输入了有什么意义呢？

user: user-2
content: 命令行参数? scanf？ getchar()?
user-0 提问: 求解这个函数哪里出错了？为什么不能运行

回复:
user: user-1
content: 引用 5 楼 baidu_25326635 的回复:[quote=引用 2 楼 q3733353520 的回复:]  if(i < lim -2){  s[j]=c; ++j; }//明明这里要满足这个条件才j++ //而每次都会执行i++，i和j的值怎么会一样呢 for第三段不是也是++i么？int getline(char s[],int lim){ int c,i; for (i = 0; (c = getchar())!=EOF && c!='\n';++i) if(i < lim -2){	 s[i]=c; } if ( c == '\n') {   s[i] = c;   ++i; } s[i] = '\0'; return i; }这样的话i跟j就应该一样了吧？lim=1000,就当这个条件100%能满足，所以改成这样可以和上面书上的示例达到同样效果么？如果可以为什么书上要专门多出一个j变量呢？不可以的话是哪里不可以？[/quote]  我说的就是for的最后一项那里的i++每次都会执行啊，但是j++不会每次都执行啊，那么i和j的值是不一样的啊，它们的含义(作用)也是不一样的啊，所以才会要2个变量的啊，如果你要改程序的话，只要弄懂了这个函数的过程那么就可以改，并不是什么几个变量不几个变量的问题。之能说实现一个功能肯定是有多种方法的啊，这又不是有些考试只有唯一标准答案

user: user-0
content: 引用 2 楼 q3733353520 的回复: if(i < lim -2){  s[j]=c; ++j; }//明明这里要满足这个条件才j++ //而每次都会执行i++，i和j的值怎么会一样呢 for第三段不是也是++i么？int getline(char s[],int lim){ int c,i; for (i = 0; (c = getchar())!=EOF && c!='\n';++i) if(i < lim -2){	 s[i]=c; } if ( c == '\n') {   s[i] = c;   ++i; } s[i] = '\0'; return i; }这样的话i跟j就应该一样了吧？lim=1000,就当这个条件100%能满足，所以改成这样可以和上面书上的示例达到同样效果么？如果可以为什么书上要专门多出一个j变量呢？不可以的话是哪里不可以？

user: user-2
content: 修改如下：  int getline(char s[], int lim) { 	int c, i; 	for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) 		if (i < lim - 2) { 			s[i] = c; 			//++i;     //这个++i错误 		} 	if (c == '\n') 	{ 		s[i] = c; 		++i; 	} 	s[i] = '\0'; 	return i; } int getline(char s[], int lim) { 	int c, i, j; 	j = 0; 	for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) 		//if (i < lim - 2) { 		if (j < lim - 2) { 			s[j] = c; 			++j; 		} 	if (c == '\n') 	{ 		s[j] = c; 		//++i;    //不需要 		++j; 	} 	s[j] = '\0'; 	//return i; 	return j; }

user: user-3
content: for (i = 0; (c = getchar())!=EOF && c!='\n';++i) if(i < lim -2){  s[j]=c; ++j; }  改为:  for (i = 0; (c = getchar())!=EOF && c!='\n';++i,++j) if(i < lim -2){  s[j]=c; ++i; ++j; }  试试

user: user-1
content: if(i < lim -2){  s[j]=c; ++j; }//明明这里要满足这个条件才j++ //而每次都会执行i++，i和j的值怎么会一样呢

user: user-4
content: j的值是连续的，取的是非\n和非EOF的值