Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: linux c编程问题

回复:
user: user-1
content: #include <stdio.h>  int main() {     int ap = 0755 ;     char out[] ="rwx-" ;     int i = 0 ;      char str[10];     for(i = 0 ; i <= 8 ; ++i )     {         str[i] = ap & (1<<(8-i)) ? out[i%3] : out[3];     }     str[9] = 0 ;       printf("%s\n", str);       return 0 ; }

user: user-2
content: 比如:  ls -l libmysqlclient_r.so.15.0.0 -rw-r--r-- 1 me cnshlogin 0 Jun  5 13:43 libmysqlclient_r.so.15.0.0 对于libmysqlclient_r.so.15.0.0 这个文件来说,他的权限是-rw-r--r-- 第一组:-rw 表示:对象属主拥有读和写的权限 第二组:-r- 表示:对象属组成员拥有读的权限 第三组:r-- 表示:其他用户拥有读的权限 读(x)数值表示就是:4  写(w)数值表示就是:2 执行(下)数值表示就是: 1 每一个对象(属主,组内用户,其他用户),都有rwx三种权限中的不同权限,比如上面的对应数值就是 rw = 4+2 r = 4 r =4 因此该文件的权限值就是0644.就是这个意思

user: user-3
content: 校验输入的问题可能是程序员终其一生都无法满足的追求！ #include <stdio.h> #include <string.h> int main() {     int ap;     char str[10];     char ins[6],c;      while (1) {         printf("Input 0ooo:");         fflush(stdout);         rewind(stdin);         fgets(ins,6,stdin);         if (strlen(ins)==5 && 2==sscanf(ins,"0%3o%c",&ap,&c) && '\n'==c) break;     }     str[0] = ap & 0400 ? 'r' : '-';     str[1] = ap & 0200 ? 'w' : '-';     str[2] = ap & 0100 ? 'x' : '-';     str[3] = ap & 0040 ? 'r' : '-';     str[4] = ap & 0020 ? 'w' : '-';     str[5] = ap & 0010 ? 'x' : '-';     str[6] = ap & 0004 ? 'r' : '-';     str[7] = ap & 0002 ? 'w' : '-';     str[8] = ap & 0001 ? 'x' : '-';     str[9] = 0;     printf("%s", str);      return 0; } //Input 0ooo:1 //Input 0ooo:01a //Input 0ooo:0888 //Input 0ooo:755 //Input 0ooo:0755 //rwxr-xr-x

user: user-4
content: #include <stdio.h> #include <fcntl.h>  //定义宏变量，用于输出字符 #define READ 'r' #define WRITE 'w' #define EXEC 'x' #define NONE '-'  int main() {     //用户权限码和字符串索引     int ap = 0755, index = 0;     //输出字符串     char str[10];      //用户权限值和相应的标准权限码做与操作，如果为真则说明该权限存在     str[index++] = (ap & S_IRUSR ? READ : NONE);     str[index++] = (ap & S_IWUSR ? WRITE : NONE);     str[index++] = (ap & S_IXUSR ? EXEC : NONE);     str[index++] = (ap & S_IRGRP ? READ : NONE);     str[index++] = (ap & S_IWGRP ? WRITE : NONE);     str[index++] = (ap & S_IXGRP ? EXEC : NONE);     str[index++] = (ap & S_IROTH ? READ : NONE);     str[index++] = (ap & S_IWOTH ? WRITE : NONE);     str[index++] = (ap & S_IXOTH ? EXEC : NONE);     str[index] = '\0';      //输出字符串     printf("%s", str);  //rwxr-xr-x }

user: user-4
content: 引用 1 楼 wtx_sonery 的回复:作业题？我记得权限是3位，你写个4位是啥意思开头的0表示8进制

user: user-5
content: 作业题？我记得权限是3位，你写个4位是啥意思
user-0 提问: 求各位看看哪里错了，还有函数tolower和toupper是可以直接调用吗？

回复:
user: user-1
content: 引用 3 楼 fly_dragon_fly 的回复:可以直接用的,不过就直接大小写转化没什么必要用 while(scanf("%d",&n)!=EOF&&n){         for(int i=0; i<n; i++){             scanf("%c",&a[i]);             if(isalpha(a[i])) a[i]^=0x20;             putchar(a[i]);         }     }      这个代码不能移植到其它编码的平台上。

user: user-1
content: 简单的事情为什么要做成这么复杂？  #include <ctype.h> #include <stdio.h>  int main(void) {     int  c;      while ((c = getchar()) != EOF) {         if (islower(c)) {             c = toupper(c);         } else if (isupper(c)){             c = tolower(c);         }         putchar(c);     }      return 0; }

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

user: user-3
content: 可以直接用的,不过就直接大小写转化没什么必要用 while(scanf("%d",&n)!=EOF&&n){         for(int i=0; i<n; i++){             scanf("%c",&a[i]);             if(isalpha(a[i])) a[i]^=0x20;             putchar(a[i]);         }     }

user: user-4
content: 添加头文件：#include <ctype.h>
user-0 提问: char **字符串数组，这个数组很大会影响速度吗？

回复:
user: user-1
content: 指针是一个内存单元的地址，其大小跟操作系统处理机位数有关，即32位机占4个字节， 64位机占8个字节 如果普通变量之间相互赋值，相当于变量内容之间的拷贝，如果变量比较大，它们之间传递的数据量就大，执行就慢。  而指针赋值，由于传递的是地址，在操作系统一定的情况下， 其大小都是一定的，而且一般是4个字节或8个字节，其数据传递量小，所以效率高。不过二者共享一个内存空间，实现数据共享  就好比你有一栋房子， 我觉得你那房子不错，也想体验一下。 普通变量赋值就相当于：我按照你的房子结构，自己也造一个。 指针变量赋值就相当于：你把地址和钥匙给我，我也搬进去住，共同享有里面的资源

user: user-0
content: 有一点明白了，可能是我说的不太清楚。唉

user: user-2
content: 没关系吧，传递的是一个地址值；即使你定义了一个大的数组，但是传递的也是大数组的地址值。所以，传参是没问题的吧。

user: user-3
content: 我是来看楼主挨砖家的板砖的

user: user-4
content: 初学者不要纠结速度  等你技术有成了在去找优化方式吧

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

user: user-6
content: 贴上你的代码来看看

user: user-7
content: 也就多mov一次的操作而已 ... 对速度影响比较大的是 cache ，内存对齐 ，和并行性 c程序员最主要改善效率的途径是算法 ... 前面所说的东西全扔给编译器处理了 ...

user: user-8
content: 如果是传入指针的指针, 那么就是说这个指针是需要你去更改 那么这个指针所代表的大小由你自己来决定, 你想它大就大, 小就小 int InitializeChar(char **pPointer) {     int length = 1024 * 1024 * 512; // 512mb     char *pData = new char[length];     *pPointer = pData;     // 或者可以直接写成 *pPointer = new char[length];     return length; }  int main() {     char *pchData = NULL;     int length = InitializeChar(&pchData);      if (length != 0) delete[] pchData;      return 0; }

user: user-9
content: 很大看多大2G,4G以内吧。。吃内存 传的是地址，速度很快的。

user: user-10
content: 问这种问题的话，我建议先把C/C++教程看一下毕竟好
user-0 提问: 这段为什么输出是4

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:刚才搞错，是把b[i]是否等于4的值赋给a  如果相等，a是1，否则是0   懂了，，，谢谢。。。

user: user-1
content: 刚才搞错，是把b[i]是否等于4的值赋给a  如果相等，a是1，否则是0

user: user-1
content: 把b[i]的值赋给a 判断a与4是否相等来决定要不要循环 无论是否循环，i都会再自加上1
user-0 提问: Linux，gcc编译，字符串替换，用strcat出错，后面的字符莫名其妙地多了几个字符

回复:
user: user-1
content: 对不符合规范的代码，C++标准只说行为未定义，具体会产生什么样的行为和编译器，和环境这些都有关系，没有出错也属于正常。就好比使用已经释放的内存样，它的内容是不可预知的，也可能刚好就是你需要的内容。

user: user-0
content: 5楼，为什么有的Linux系统可以，但是有的Linux系统又不行呢

user: user-0
content: 难题，求大神回答。。。。

user: user-0
content: 1楼，我的代码，短的换长的可以，长的换短的不行，而且在有的Linux下可以，有几台Linux下又不行

user: user-2
content: 仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //

user: user-1
content: strcat 要求源地址和目标地址不能有重叠

user: user-3
content: 一般这问题可能是没设置 \0

user: user-4
content: 短的子串替换为长的字符串，你应该先把被替换字符串以后的字符串整体向后移动，不应该直接用'\0'截断字符串。你这样等于已经把原来的字符串不应该修改的字符替换为'\0'，然后进行复制又会把一部分字符串覆盖了。。。 正确的做法，应该是将被替换字符串以后的部分，整体向后移动strlen(new_str)-strlen(old_str)字节。然后，将新字符串覆盖旧子串，strcat不用在这里。或者就是你注释代码的做法，先把后面部分放到新分配的空间里，然后再拼接回来，这样的效率就低了。
user-0 提问: 互斥锁，怎么加锁和解锁？

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:3）锁有没有初始化 ok,thanks

user: user-1
content: 3）锁有没有初始化

user: user-1
content: 互斥锁是任何一个获得，另一个就得不到 如果加了互斥锁，不能互斥 1）看是否同一把锁，两把不同的锁，达不到互斥目的 2）有没有其他地方也在加锁
user-0 提问: 关于指针的问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:free 内存不会自动 将指针 设置为NULL 建议 free（str）后面加上 str = NULL; free 只是将内存标志为释放，但指针还指向那块内存,再对那块内存进行操作，可能会出保错，但不是一定会报错（内存未被其他程序使用时可能不会出错）那么对于在栈中的局部变量呢？栈中的局部变量释放后是否还有访问到的可能性？

user: user-1
content: free 内存不会自动 将指针 设置为NULL 建议 free（str）后面加上 str = NULL; free 只是将内存标志为释放，但指针还指向那块内存,再对那块内存进行操作，可能会出保错，但不是一定会报错（内存未被其他程序使用时可能不会出错）

user: user-1
content: 引用 2 楼 qq_28839381 的回复:[quote=引用 1 楼 user-1 的回复:] free 内存不会自动 将指针 设置为NULL 建议 free（str）后面加上 str = NULL; free 只是将内存标志为释放，但指针还指向那块内存,再对那块内存进行操作，可能会出保错，但不是一定会报错（内存未被其他程序使用时可能不会出错）那么对于在栈中的局部变量呢？栈中的局部变量释放后是否还有访问到的可能性？[/quote]  有啊，指针可以指向，但是那块内存不是自己申请的，对自己一点意义也没有，或是错误的
user-0 提问: 在数组中覆盖前一个元素和删除该元素一样吗？

回复:
user: user-1
content: 引用 7 楼 Devinvow的回复:[quote=引用 4楼自在飞花6541 的回复:]像list这种的直接删除就可以了，这样你以后遍历的话不会有影响，如果你边遍历边删除的话你得注意一下位置若是顺序存储，直接覆盖掉，算不算删除？ 如arr[i] = arr[i-1]，不缓存和删除的元素。[/quote] 这算删除，但是如果你这是指针的话那你得保证你指针指向的区域不要被无法调用

user: user-2
content: 理论上可以，操作上复杂，而且由于线性表中数据如果过多，复制数据会消耗大量的系统资源和时间，没有修改指针指向的位置方便省时而已

user: user-3
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-0
content: 引用 4楼自在飞花6541 的回复:像list这种的直接删除就可以了，这样你以后遍历的话不会有影响，如果你边遍历边删除的话你得注意一下位置若是顺序存储，直接覆盖掉，算不算删除？ 如arr[i] = arr[i-1]，不缓存和删除的元素。

user: user-0
content: 引用 3楼cbNotes 的回复:你说的太笼统了，线性表分顺序存储和链式存储，不知道你具体什么意思！顺序存储。假如有个arr[10]，我想删除arr[4]，让arr[5]及以后得数据往前覆盖，这样算的上是删除吗？

user: user-4
content: 本质上并没有区别，都是都是对地址区间里寄存器值的更改，只是一个是从相邻的地址里修改出来的值，另一个是重新赋值。

user: user-1
content: 像list这种的直接删除就可以了，这样你以后遍历的话不会有影响，如果你边遍历边删除的话你得注意一下位置

user: user-5
content: 你说的太笼统了，线性表分顺序存储和链式存储，不知道你具体什么意思！

user: user-6
content: 线性表删除的是里面的元素，找到要删除元素的指针free掉就行

user: user-0
content: 线性表的删除是删除了该位置的地址还是什么？是不是删除的元素的生命周期归main函数释放？
user-0 提问: 字符串数组初始化 &&  L"String is not null terminated"

回复:
user: user-1
content: 机器在重装，没有精力细看了，应当是a[100]的问题，这个没有初始化就直接strcat_s。 因为没有初始化，所以没有NULL结尾，所以会出这个提示。

user: user-2
content: 你传入的p未初始，这样写就可以了：   #include "stdafx.h"  #include"string.h" #define   M   3 #define   N   20  void fun(char a[M][N], char*p) { *p = 0; int i = 0; for (i = 0; i < M; i++) strcat_s(p,100,a[i]); }   void main() { 	char  w[M][N] = { "AAAA\0", "BBBBBBB\0", "CC\0" }, a[100]; 	int i; 	printf("The string:\n"); 	for (i = 0; i<M; i++) 		puts(w[i]); 	printf("\n"); 	fun(w, a); 	printf("The A string:\n"); 	printf("%s", a); printf("\n\n"); }
user-0 提问: 问题是求某一天在该年中第几天，输入1996/5/20这种中间有/的数据，下面我写的程序如果只输入数据可以运行出来，但是加上在数中加上/就不行了，求解。。。。。。

回复:
user: user-1
content: 当然不行，你既然指定了参数为%d，那自然就默认你输入的是int型的数据。1996是int，5是int，1991/是什么鬼？只能是char*咯  个人建议你要麽就直接把输入的字符按照%s处理。

user: user-0
content: 引用 4 楼 wanggaofengwz的回复:scanf("%d/%d/%d",&year,&month,&day) 可以这样用吗，应该把输入作为一个字符串去处理，写一个函数来处理那个字符串 能举个例子吗？不会写那个字符串处理函数，初学acm各种不会︶︿︶

user: user-2
content: scanf("%d/%d/%d",&year,&month,&day) 可以这样用吗，应该把输入作为一个字符串去处理，写一个函数来处理那个字符串

user: user-3
content: 仅供参考：#include <stdio.h> #include <string.h> #include <time.h> struct tm st; time_t tt; char timstr[40]; char tmpbuf[128]; char c; int t; int AP() {     if ('P'==c || 'p'==c) {st.tm_hour+=12;return 1;}     if ('A'==c || 'a'==c)                 return 1;                                           return 0; } int dtparse() {     if (7==sscanf(timstr,"%d/%d/%4d %d:%d:%d %c",&st.tm_mday,&st.tm_mon ,&st.tm_year,&st.tm_hour,&st.tm_min,&st.tm_sec,&c)) if (AP()) goto STEP2;     if (6==sscanf(timstr,"%d/%d/%4d %d:%d%c"    ,&st.tm_mday,&st.tm_mon ,&st.tm_year,&st.tm_hour,&st.tm_min           ,&c)) if (AP()) goto STEP1;     if (6==sscanf(timstr,"%4d/%d/%d %d:%d %c"   ,&st.tm_year,&st.tm_mon ,&st.tm_mday,&st.tm_hour,&st.tm_min           ,&c)) if (AP()) goto STEP1;     if (5==sscanf(timstr,"%d.%d.%4d %d:%d"      ,&st.tm_mon ,&st.tm_mday,&st.tm_year,&st.tm_hour,&st.tm_min              ))           goto STEP1;     if (6==sscanf(timstr,"%4d-%d-%d %d:%d:%d"   ,&st.tm_year,&st.tm_mon ,&st.tm_mday,&st.tm_hour,&st.tm_min,&st.tm_sec   ))           goto STEP2; STEP1:     st.tm_sec=0; STEP2:     st.tm_year-=1900;     if (st.tm_mon>12) {t=st.tm_mon;st.tm_mon=st.tm_mday;st.tm_mday=t;}     st.tm_mon-=1;     tt=mktime(&st);     if (-1!=tt) {         strftime(tmpbuf,128,"%Y-%m-%d %H:%M:%S",localtime(&tt));         return 1;     } else {         printf("[%s] is Invalid time string!\n",timstr);         return 0;     } } int main() {     strcpy(timstr,"10.01.2012 15:43"        );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);     strcpy(timstr,"8/11/2006 11:10AM"       );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);     strcpy(timstr,"2006/10/31 04:50 PM"     );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);     strcpy(timstr,"1/6/2010 5:20:12 PM"     );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);     strcpy(timstr,"13/12/2012 11:16:17 a.m.");if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);     strcpy(timstr,"2013-06-08 09:56:59"     );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);     return 0; } //[10.01.2012 15:43] is [2012-10-01 15:43:00] //[8/11/2006 11:10AM] is [2006-11-08 11:10:00] //[2006/10/31 04:50 PM] is [2006-10-31 16:50:00] //[1/6/2010 5:20:12 PM] is [2010-06-01 17:20:12] //[13/12/2012 11:16:17 a.m.] is [2012-12-13 11:16:17] //[2013-06-08 09:56:59] is [2013-06-08 09:56:59] //

user: user-0
content: 求解求解～～

user: user-0
content: 另外如果scanf("%d/%d/%d",&year,&month,&day)变成这种形式的话就不能运行了
user-0 提问: 数据结构栈的应用---表达式求解

回复:
user: user-1
content: 如果c 或者 GetTop(OPTR)的返回值不等于‘#’就可以进入while循环，也就是说当c 并且GetTop(OPTR)返回值都是'#'则跳出（不进入）循环
user-0 提问: 关于空字符串比较问题

回复:
user: user-1
content: 引用 楼主 xianzhutou 的回复:#include <stdio.h> #include <memory.h> #include <stdlib.h> #include <string.h>   int main() { 	char *output = (char*)malloc(10); 	char *tmp = (char*)malloc(10); 	output = ""; 	*tmp = '\0'; 	if ( output == tmp ) 	{ 		printf("equal\n"); 	} 	return 0; }  output 是空字符串， tmp也是没有字符的空字符串，为什么两者不相等呢？  c 标准库有 strcmp 函数可以用  #include <string.h>   int strcmp( const char *str1, const char *str2 );  记得 The c programming language 中有段代码 //根据 s 按照字典顺序 小于 等于 或大于 t 的结果 分别返回 负整数 0 或 整数 int mystrcmp(char *s ,char *t) {     for( ; *s == *t; s++,t++ )       if( *s == '\0')          return 0; return *s - *t; }

user: user-2
content: 一楼的打比方挺形象~~ 楼主比较的是两个指针，是两个不同的地址值，指向不同的内存，肯定是不相等的……

user: user-3
content: #include <stdlib.h> #include <string.h> int main() {     char *output = (char*)malloc(10);     char *tmp = (char*)malloc(10);     output = "";     *tmp = '\0'; 	printf("%p %p",output,tmp);     return 0; }  output 和tmp是指针变量 存的是地址， output指向空字符串的首地址，而tmp指向malloc指向的地址 不会相等

user: user-4
content: 这比较的是地址值，不是字符串

user: user-5
content: 引用 楼主 xianzhutou 的回复:#include <stdio.h> #include <memory.h> #include <stdlib.h> #include <string.h>   int main() { 	char *output = (char*)malloc(10); 	char *tmp = (char*)malloc(10); 	output = ""; 	*tmp = '\0'; 	if ( output == tmp ) 	{ 		printf("equal\n"); 	} 	return 0; }  output 是空字符串， tmp也是没有字符的空字符串，为什么两者不相等呢？ 字符串内容比较还得用strcmp 两个地址进行比较没有意义

user: user-6
content: 代码三个问题： 1. 分配无意义的内存 2. 内存未被释放 3. 进行指针比较

user: user-7
content: http://blog.csdn.net/u011046042

user: user-8
content: 字符串不是这样比较的哦，memcmp或者strcmp、strncmp；if ( output == tmp )这样比较的是指针变量里的地址值。由于指向的内容不一样，所以地址值也不相等。

user: user-9
content: if ( output == tmp ) 这表示的是 地址与地址 是否相等吧？ 肯定是不不等的。。

user: user-10
content: 用strcmp可以比较！

user: user-10
content: 字符串可以用“==”比较吗？

user: user-11
content: 是啊，这是为什么呢？  有俩抽屉，都没有装东西，都是空的，那么，这俩抽屉是一样的吗？
user-0 提问: 使用c写一个三维图形

回复:
user: user-1
content: 搜网络教程“学OpenGL编3D游戏”。

user: user-2
content: 自己去下directx的sdk去，里面有example，directx的api c和c++都可以用，只是有些区别，具体可以在vs里按f1查看相关帮助文档。
user-0 提问: C fputc（）返回值-1

回复:
user: user-1
content: 为了减少可能的低级错误，建议分开两行写：  fp = fopen(filename,"w"); if (NULL == fp) {     /* ... */ }

user: user-1
content: 为了减少可能的低级错误，建议分开两行写：  fp = fopen(filename,"w"); if (NULL == fp) {     /* ... */ }

user: user-1
content: if(fp=fopen(filename,"w")==NULL){ ===>     if((fp=fopen(filename,"w"))==NULL){
user-0 提问: fread读文件的问题

回复:
user: user-1
content: 使用前先把数组清空

user: user-2
content: 为何不用fstream

user: user-3
content: 你要显示的是e的内容，e是DWORDLONG    类型的，可以表示的数字很大 还有显示的数字是20位（十进制）并不表示   数据长度是20位
user-0 提问: 请修改补充以下代码完成能搜索打印出盘内所有txt文件的程序

回复:
user: user-1
content: 引用 2 楼 bjym1987 的回复:赵老师来个dos命令，一切搞定，哪要这么复杂@赵4老师 system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。

user: user-2
content: 赵老师来个dos命令，一切搞定，哪要这么复杂@赵4老师

user: user-3
content: #include<windows.h>   #include<iostream>   #include<string>   using namespace std;  //可同时处理目录和文件:path可以是路径，也可以是文件名，或者文件通配符   void _find(string path) { 	//保存目录名 	string prefix = path.substr(0, path.find_last_of('\\') + 1); 	//输出要查找的目录的名字 	cout << "[目录]  " << prefix  << endl;  	WIN32_FIND_DATA FindFileData; 	HANDLE hFind = ::FindFirstFile(path.c_str(), &FindFileData); 	if (INVALID_HANDLE_VALUE == hFind) 	{ 		cout << "文件通配符错误" << endl; 		return; 	} 	while (TRUE) 	{ 		//目录   		if ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) 		{ 			//不是当前目录，也不是父目录（.是当前目录 ..是上级目录） 			if (FindFileData.cFileName[0] != '.') 			{ 				//查找下一级目录   				_find(prefix + FindFileData.cFileName + "\\" + "*.*"); 			} 		} 		else 		{ 			cout << "+文件+\t" << FindFileData.cFileName << endl; 		} 		if(!FindNextFile(hFind, &FindFileData)) 			break; 	} 	FindClose(hFind); }  int main() { 	_find("E:\\*.*");	//E盘下所有文件   	string path;   	cout<<"请输入路径和文件通配符：例如：（E:\\*.* 或者 abc\\*.* ）"<<flush;   	cin>>path;   	_find(path); 	system("pause"); 	return 0; }
user-0 提问: 请问为什么要定义数组szline为char型而不是int型？求解～～～

回复:
user: user-0
content: 引用 3 楼 tr1cks的回复:因为scanf（）读进来的是一个字符串，所以用char类型的数组 可是感觉scanf读进一串数字也行(･ิϖ･ิ)っ

user: user-1
content: 因为scanf（）读进来的是一个字符串，所以用char类型的数组

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: 好像是模拟加法吧, char可以到127, 这里最多才用到10, 有必要int吗
user-0 提问: glib io channel的讨论

回复:
user: user-1
content: 个人建议，不要用Windows的知识来猜测Linux的行为。  另外建议看看libevent。

user: user-0
content: 引用 3 楼 user-1 的回复:帮顶下先，不明觉厉。  文章不一正确，没有找到原文的出处。  文章中提到的windows的概念，是凭借自己一些基础和理解得出的。  猜测linux也是如此。

user: user-0
content: up 起来。up起来

user: user-0
content: http://blog.csdn.net/halsonhe/article/details/5955752   这是文章的连接
user-0 提问: 指针 输入3个字符串之后比较其大小 用指针

回复:
user: user-0
content: 引用 3楼赵4老师 的回复:#include <stdio.h> #include <string.h> void get(char *p[]) {     for (int i = 0; i < 3; i++)         scanf_s("%s",p[i],10); } void exchange(char *p[]) {     char *temp;     for (int i = 0; i < 2; i++)         for (int j = i + 1; j < 3; j++) {             if ((strcmp(p[i], p[j]))>0) {                 temp = p[i];                 p[i] = p[j];                 p[j] = temp;             }         } } void put(char *p[]) {     for (int i = 0; i < 3; i++) {         printf("%s",p[i]);         printf("\n");     } } int main() {     char a[10];     char b[10];     char c[10];     char *p[3]={a,b,c};      get(p);     printf("\n");     exchange(p);     put(p);      return 0; } 实在感谢 小白一名 太感谢了

user: user-0
content: 十分感谢！小白一名 谢谢帮助

user: user-1
content: #include<stdio.h> #include<string.h>  void get(char *p[]); void exchange(char *p[]); void put(char *p[]);  void get(char *p[]) { 	int i; 	for (i = 0; i < 3; i++) 		scanf_s("%s", *(p+i), 10);    //这个地方类型不对，你在编译的时候应该能够看到有警告 } void exchange(char *p[]) { 	char *temp; 	int i, j; 	for (i = 0; i < 2; i++) 		for (j = i + 1; j < 3; j++) 		{ 			if ((strcmp(p[i], p[j]))>0) 			{ 				temp = p[i]; 				p[i] = p[j]; 				p[j] = temp; 			} 		} } void put(char *p[]) { 	int i; 	for (i = 0; i < 3; i++) 	{ 		printf("%s",* (p + i)); 		printf("\n"); 	} } int main() { 	//很少在这申明函数了 	char a[10], b[10], c[10]; 	char *p[3] = { a, b, c }; 	get(p); 	printf("\n"); 	exchange(p); 	put(p); 	 	return 0; }

user: user-2
content: #include <stdio.h> #include <string.h> void get(char *p[]) {     for (int i = 0; i < 3; i++)         scanf_s("%s",p[i],10); } void exchange(char *p[]) {     char *temp;     for (int i = 0; i < 2; i++)         for (int j = i + 1; j < 3; j++) {             if ((strcmp(p[i], p[j]))>0) {                 temp = p[i];                 p[i] = p[j];                 p[j] = temp;             }         } } void put(char *p[]) {     for (int i = 0; i < 3; i++) {         printf("%s",p[i]);         printf("\n");     } } int main() {     char a[10];     char b[10];     char c[10];     char *p[3]={a,b,c};      get(p);     printf("\n");     exchange(p);     put(p);      return 0; }

user: user-0
content: 刚才 我改成  int main() { void get(char *p[]); void exchange(char *p[]); void put(char *p[]); char a[10]; char b[10]; char c[10]; char *p[3]={a,b,c}; get(p); printf("\n"); exchange(p); put(p); } 依然程序停止工作 在跑的时候 可以输入 执行完get()后就死了......

user: user-3
content: 你操作的字符串的内存空间在哪里申请的？？？ 你输入的字符串存到哪里了，你申请空间了么
user-0 提问: EEPROM字节写入 的两个问题。

回复:
user: user-1
content: 1. 因为传进这个变量的值本身，也是指针的值转型过来的unsigned int，所以使用的时候，可以转回去，这个依赖于这个前提； 2. 语句的意思是，FLASH_IAPSR_bit.EOP等于1时循环，也就是不等于1时才跳出。这个需要看上下文语义了。

user: user-2
content: 引用 1 楼 Kusk 的回复:1. 因为传进这个变量的值本身，也是指针的值转型过来的unsigned int，所以使用的时候，可以转回去，这个依赖于这个前提； 2. 语句的意思是，FLASH_IAPSR_bit.EOP等于1时循环，也就是不等于1时才跳出。这个需要看上下文语义了。  最后那句话是等待写入IO完成的意思

user: user-2
content: 楼主这是学嵌入式吧，请原谅我说话直，我建议从基础学起，最后那个是等待写入完成，都==0了还等毛线 至于第二个，是吧一个address传进去的是int，要直接转换成指针，强行访问这个地址 EEROM的底层支持系统的编写和ring 3的不一样，建议楼主从头学起，楼主这看的是RTOS访问EEROM的驱动程序吧？或者单片机的芯片程序，建议楼主从头看起

user: user-3
content: void EEPROM_Byte_Write(unsigned int address,unsigned char data)函数写EEPROM，其地址一般是在芯片设计时定义，每个地址是一个直接指定的数据，所以使用unsigned int address比较方便，在函数内要让编译器知道那是一个地址，因此需要使用强制转换
user-0 提问: C语言 txt文件元素追加

回复:
user: user-0
content: 我是采用“a”将一个文件追加到另一个文件中的，结果是这个样子。采用fprintf的话事先需要定义结构体吧，不这样的话有没有其他的办法直接追加成下面的形式。

user: user-1
content: 将形如 for fprintf data %d\n for fprintf delay %d\n 改为形如 for  fprintf data %d delay %d\n ？

user: user-1
content: 只跟你fprintf的顺序有关，跟“a"不”a"无关。
user-0 提问: 关于printf()在循环中重复打印两次的问题

回复:
user: user-1
content: //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-2
content: 引用 7 楼 u012990532 的回复:[quote=引用 2 楼 JiangWenjie2014 的回复:] 你有发现，你输入的时候，先按一下Y键，在按一下回车键结束输入。那么scanf第一次得到的是'y'，第二次得到的是'\n'。 引用 1 楼 user-7 的回复:看看是不是  缓冲区刷新的问题 试试fflush(stdin) 引用 3 楼 zxh707wk 的回复:scanf不接收回车。。。 引用 4 楼 weixin_29796265 的回复:可能是缓冲区东西读多了。。。。   是的，这个要考虑到缓冲区，对于这个例子中，只要把那个在缓冲区保留enter 键用getchar（）读走就可以了，但是我在scanf后加fflush(stdin)后执行printf的内容还是会打印两次。谢谢大家，scanf稍不注意不理解有好多陷进[/quote]  你在scanf加fflush(stdin)当然会打印两次了，因为scanf已经把回车字符读进去了，再清空缓存就没意义了，在scanf之前加就好了

user: user-0
content: 引用 2 楼 JiangWenjie2014 的回复:你有发现，你输入的时候，先按一下Y键，在按一下回车键结束输入。那么scanf第一次得到的是'y'，第二次得到的是'\n'。 引用 1 楼 user-7 的回复:看看是不是  缓冲区刷新的问题 试试fflush(stdin) 引用 3 楼 zxh707wk 的回复:scanf不接收回车。。。 引用 4 楼 weixin_29796265 的回复:可能是缓冲区东西读多了。。。。   是的，这个要考虑到缓冲区，对于这个例子中，只要把那个在缓冲区保留enter 键用getchar（）读走就可以了，但是我在scanf后加fflush(stdin)后执行printf的内容还是会打印两次。谢谢大家，scanf稍不注意不理解有好多陷进

user: user-3
content: 因为有回车符，回车符的ASCII值为10，所以满足循环。建议在scanf("%c", &c)；后面加上一句getchar();这样试试应该就没有两次循环了。

user: user-2
content: 如二楼所说，scanf会接收回车键字符，将while循环体中的前面加上 fflush(stdin) ;    \\清空缓冲区 if(ch == 10)       \\忽略回车字符 continue;

user: user-4
content: 可能是缓冲区东西读多了。。。。

user: user-5
content: scanf不接收回车。。。

user: user-6
content: 你有发现，你输入的时候，先按一下Y键，在按一下回车键结束输入。那么scanf第一次得到的是'y'，第二次得到的是'\n'。

user: user-7
content: 看看是不是  缓冲区刷新的问题 试试fflush(stdin)
user-0 提问: hdoj2020绝对值排序 运行结果正确为什么oj一直通不过？

回复:
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: 每一行最后是不是多了一个空格

user: user-3
content: 引用 2 楼 king191923157 的回复:原来帮别人做过华为的题，那个变态的系统要猜输入输出的格式 ，提示不能多，连空格也不能多， 猜了好多次输入输入形式才通过 一般在线做题网站都是这样的吧

user: user-4
content: 引用 2 楼 king191923157 的回复:原来帮别人做过华为的题，那个变态的系统要猜输入输出的格式 ，提示不能多，连空格也不能多， 猜了好多次输入输入形式才通过  与逻辑和运算结果没有关系（因为第一次就是对的），纯粹就是输入和输出与他给的例子一样，提示，空格，换行，一摸一样才行

user: user-4
content: 原来帮别人做过华为的题，那个变态的系统要猜输入输出的格式 ，提示不能多，连空格也不能多， 猜了好多次输入输入形式才通过

user: user-5
content: for (int i = 0; i < n; ++i) {     if (0 == i)         printf ("%d", a[i]);     else         printf (" %d", a[i]); } printf ("\n");
user-0 提问: 字符串右移，调用strcpy时产生中断，利用库自带的strcpy一样的现象

回复:
user: user-1
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-2
content: char *s = "hello";  Strcpy(pStr, tmp);  pStr 指向的是 字符串  常量"hello";，不能对其进行修改操作 main函数改成下面试试  int main() { char s[100]; memset(s,0,100); strcpy(s,"hello");     LoopMove(s, 2); }
user-0 提问: 关于c语言的printf函数的使用问题

回复:
user: user-1
content: http://bbs.csdn.net/topics/390676437

user: user-2
content: 浮点型和整形在计算机内部的存储格式是不一样的，printf中使用%d，函数并不会将其它类型的数据安全转换成整形来输出，而是取其前4个字节（假设整形占4个字节），强制采用整形的格式输出，所以结果会不对。可将 printf("%d\t %f\n", fahr, celsius)改成 printf("%d\t %f\n", （int）fahr, celsius)就没问题了 关于浮点型二进制存储结构，请参考：http://www.cnblogs.com/fromchaos/archive/2010/12/07/1898698.html

user: user-3
content: printf("%d\t %f\n", fahr, celsius);    中  ％d   必须和后面的类型相匹配，不匹配会使最后生成的字符串出错（越界操作）
user-0 提问: 使用动态链表完成一个简单的商品库存信息管理系统。不知道哪里错了

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

回复:
user: user-1
content: 每次写的块更大点，不行了就用映射写啊。

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

user: user-0
content: 原来移动硬盘是NTFS格式的，格式化成FAT32之后，写速度就跟上了。问题算是解决了，可是为什么在LINUX下NTFS比FAT32还慢

user: user-0
content: 引用 3 楼 user-3 的回复:我搬了你的代码, 往2.0接口的u盘里写数据, 速度有5.0mb以上 看问题是不是出在 receive_queue 这个函数里 我没有写这行代码 int receive_queue(ec_queue_t queue, ec_u32 timeout, ec_u8 *buf) { 	queue_s *q = (queue_s *)queue; 	ec_u8 *p; 	ec_os_wait_sem(&q->sem, EC_WAIT); 	if (buf) 	{ 		memcpy(buf, q->element_buf + (q->read_pos % q->element_count) * q->element_size, q->element_size); 		q->read_pos++; 		return 1; 	} 	return EC_OK; } 应该不是receive queue的问题，信号量那里等待可以忽略不计，前端数据传输速率有6MB/S，我也做过测试，就是不在这个函数做任何相关的写操作，结果就很快了

user: user-3
content: 我搬了你的代码, 往2.0接口的u盘里写数据, 速度有5.0mb以上 看问题是不是出在 receive_queue 这个函数里 我没有写这行代码

user: user-2
content: 在文件大小相同的前提下：  读刚读过的文件比头次读没读过的文件快  读转速快的硬盘上的文件比读转速慢的硬盘上的文件快  读没有磁盘碎片的文件比读有磁盘碎片的文件快  读文件不处理比边读边处理快  单线程从头到尾一次读文件比多线程分别读文件各部分快（非固态硬盘上）  读固态硬盘上的文件比读普通硬盘上的文件快  写类似。

user: user-0
content: 具体的每次写是fwrite(data_buffer+13,4063,1,fp);
user-0 提问: 我用gcc打开vc6.0编的这个程序怎么输出错误？

回复:
user: user-1
content: 引用 6 楼 Edwed_LI 的回复:我改了==了的，还是错的输出的是无限的数字  完全不懂你想干嘛。

user: user-0
content: 我改了==了的，还是错的输出的是无限的数字

user: user-2
content: if(a=b)

user: user-3
content: 什么样的错误？

user: user-4
content: 结尾少个｝ if（a=b）应该能编译通过

user: user-5
content: 刚学编程最容易犯的错，==和=，；和; 等等

user: user-1
content: 引用 2 楼 iyomumx 的回复:if(a=b) +1
user-0 提问: 关于结构体指针段错误的问题

回复:
user: user-1
content: strcpy字符串复制。。。。p没有内存空间，复制不进去。。

user: user-2
content: p本来没有存储空间 a->p = "heo";  是将p指向  字符串常量 “heo”的内存空间，是正确的  strcpy(a->p, "hello"); 是将“hello”  赋值到p指向的内存空间，应为没有，所以出错  你可以改为 int iLen = sizeof("hello");  a->p = new char[iLen]; memset(a->p,0,iLen) ; strcpy(a->p, "hello"); printf("%s\n", a->p); if(a->p != NULL) { delete [] a->p; a->p = NULL; } return;

user: user-3
content: 你用动态内存分配函数定义了一个node指针a，但是没有赋予初值，所以a指针是没有指向任何实际的内存空间。如果用strcpy(a->p, "hello")，表示将hello字符串复制至P所指向的内存空间，由于P并没有赋予初值，所以报错。

user: user-4
content: 在strcpy前加一句 a->p=(char*)malloc(sizeof(char*));

user: user-5
content: p没分配内存。肯定错误。 a->p = "hello"; 是让p指向hello的内存地址。并不是p自己内存块。

user: user-6
content: lz的过程好像是构造函数的工作

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

user: user-8
content: 可以给p     malloc一下试试
user-0 提问: 关于for循环的用法

回复:
user: user-1
content: 楼上正解，读入了多余内容进入输入缓冲区

user: user-2
content: #include <stdio.h> #include <ctype.h> int main(void) {     char answer = 0;      for(;;) 	{ 	printf("\n是否继续？（y/n）");fflush(stdout);     rewind(stdin); 	scanf("%c",&answer); 	if(tolower(answer) == 'n') 		break; 	else 		printf("\n你输入的是字母Y！");     }  	return 0; }

user: user-3
content: 缓存 输入流的问题

user: user-4
content: 沙发是正解，除了你输出的y之外还读了一个0x0A，也就是LF/NL符号。

user: user-5
content: 输入的应该是y\r\n

user: user-2
content: 引用 7 楼 u010012811 的回复:我看懂了，就是多读了符号进入缓冲区，然后就循环了两遍！赵老师的解决办法很正确。。。

user: user-6
content: 前段时间也遇到这个问题，学习了~~

user: user-7
content: 我看懂了，就是多读了符号进入缓冲区，然后就循环了两遍！赵老师的解决办法很正确。。。

user: user-0
content: 这段程序的运作机制是怎样的呢？
user-0 提问: 这道c prime plus上的练习为什么我这样做不行而且答案根本不是题目所说的那样

回复:
user: user-1
content: ch在for循环一直没改变啊，你i无论怎么加，ch一开始就是字母那你的for循环中，ch一直都是字母。死循环

user: user-0
content: 我改了int依然没什么变化 还是不行啊

user: user-2
content: 引用 5 楼 sholber 的回复:getchar的返回类型是int，不是char，否则有可能得不到EOF。别的我没看。 顶

user: user-3
content: getchar的返回类型是int，不是char，否则有可能得不到EOF。别的我没看。

user: user-0
content: 都没说到点子上啊 感觉 有没有人能说出我为什么错了

user: user-2
content: Linux：Ctrl+D Windows：Enter、Ctrl+Z、Enter

user: user-4
content: int main(void) { 	char  ch; 	int i, sum = 0, count = 0; 	float avg; 	ch = getchar(); 	while (ch != EOF) 	{ 		if ((!ispunct(ch)) && ch != '\n') 			sum++;  		ch = getchar(); 		if (ch == '\n' && (!ispunct(ch))) 			count++; 	} 	avg = ((float)sum) / count; 	printf("%f", avg); 	return 0; }

user: user-5
content: for语句怎么能够退出?
user-0 提问: 一个关于参数类型的问题求教一下高手

回复:
user: user-0
content: 谢谢大家，我想只有这样解释。

user: user-1
content: char类型本身表示的数在0-127之间，是可以直接赋值给int类型的

user: user-2
content: char类型的实参会自动转换为其对应的asc码
user-0 提问: scanf读取字符的问题

回复:
user: user-1
content: 修改如下：  int main(void) { 	int i, j; 	i = 0; 	int arr[100]; 	while (i != 100 && 1 == scanf("%d", arr + i)) i++; 	for (j = 0; j < i; j++) 		printf("%d ", arr[j]); 	return 0; } //1 2 3^z //1 2 3

user: user-0
content: 引用 6 楼 Falleyes 的回复:因为你输入的是"1 2 3\n"，当你首先getchar()的时候，'1'这个字符就已经被读走了。到了scanf读取，缓冲区中只有" 2 3\n“，注意第一个是空格。scanf会"跳过"空格读取数字，把2读走了。缓冲区中剩余的是" 3\n”，你getchar()把空格读走，scanf把3读走，再getchar读取最后的'\n‘，就结束啦。 我是反过来的，先读取数字，然后读取一个字符当执行while(getchar()!='\n')这条语句时，我还没有输入1 2 3 \n呢，我有点搞不懂scanf了，我的理解是我从键盘输入1 2 3 \n后，arr[0]获取到1，然后getchar获取到2，然后a[1]获取到3.。。。

user: user-2
content: 引用 2 楼 user-7 的回复:getchar()会读取一个字符的，你定义的整型数组为固定长度，所以该程序不合适存放任意个整型数+1

user: user-3
content: while(scanf(“%d”,arr+i) == 1) {     i++;     if (getchar == '\n')         break; } 手机打的。

user: user-4
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-5
content: getchar()也是从终端获取数据的。你是不是把这个给忘了呢？

user: user-6
content: 因为你输入的是"1 2 3\n"，当你首先getchar()的时候，'1'这个字符就已经被读走了。到了scanf读取，缓冲区中只有" 2 3\n“，注意第一个是空格。scanf会"跳过"空格读取数字，把2读走了。缓冲区中剩余的是" 3\n”，你getchar()把空格读走，scanf把3读走，再getchar读取最后的'\n‘，就结束啦。 我是反过来的，先读取数字，然后读取一个字符

user: user-4
content: 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }

user: user-0
content: 引用 3 楼 Falleyes 的回复:#include <stdio.h>  //不考虑非法输入 int main(){     int i=0,j;     int arr[100];      do{         scanf("%d",arr+i);         ++i;     }while(getchar()!='\n');      for(j=0;j<i;++j)         printf("%d ",*(arr+j)); } 任意长度的，需要动态分配空间那你的getchar()为什么没有影响?

user: user-6
content: #include <stdio.h>  //不考虑非法输入 int main(){     int i=0,j;     int arr[100];      do{         scanf("%d",arr+i);         ++i;     }while(getchar()!='\n');      for(j=0;j<i;++j)         printf("%d ",*(arr+j)); } 任意长度的，需要动态分配空间

user: user-7
content: getchar()会读取一个字符的，你定义的整型数组为固定长度，所以该程序不合适存放任意个整型数

user: user-6
content: while循环本来就getchar一次，你还要scanf，那相当于读一个字符再读一个整型
user-0 提问: 关于scanf中*的用法

回复:
user: user-1
content: 请判断scanf函数的返回值。

user: user-2
content: int		a, b; scanf("%2d%*2d%2d", &a, &b);

user: user-3
content: %d%*d%d可以把中间的数字忽略
user-0 提问: 关于c语言的

回复:
user: user-1
content: 自己搜printf的用法

user: user-2
content: http://blog.csdn.net/feelang/article/details/4447335

user: user-3
content: 输出只是会在有诸如%d的地方替换为对应的数据，其他原样输出

user: user-4
content: 原样输出呗，没什么特别

user: user-5
content: 加号：+，会原样打印，没什么特别
user-0 提问: 求助关于长整型数据转换整型数据的问题

回复:
user: user-1
content: 把 int 换成 short 就能看到效果了。早期的 DOS short 和 int 范围一样大。

user: user-2
content: short是双字节，long是4字节，而int跟系统有关。 早期的16位系统时，int是跟short一样是双字节；而在32位系统里int跟long是一样的4字节，即在现在主流的32位系统里，int和long没区别。

user: user-3
content: int型一般是4个字节存储，你的书上用的int型是两字节的。系统关系，你明白过大的数据转换会出现高位截断就好。 按照你的系统整型大小，应该这样尝试：#include<stdio.h> int main(){     long a=0xff00f00fff00f00f;     int b;     char c;     b=a;     c=b;     printf("b=%x,c=%x",b,c);  //ff00f00f }

user: user-4
content: 因为你用的系统是容纳这么大数值的
user-0 提问: R/G/B三个值递增递减变化 

回复:
user: user-1
content: void main() { 	int* a = new int[3];// 分别表示 R, G, B 	int i = 0;  	a[0] = 255; 	a[1] = 1; 	a[2] = 1;  	// 1 	for (i = 0; i < 255; i++) 	{ 		a[0]--; 		a[1]++; 	} 	printf("R: %d G: %d B:%d\n", a[0], a[1], a[2]);  	// 2 	for (i = 0; i < 255; i++) 	{ 		a[1]--; 		a[2]++; 	} 	printf("R: %d G: %d B:%d\n", a[0], a[1], a[2]);  	//3 	for (i = 0; i < 255; i++) 	{ 		a[0]++; 		a[2]--; 	} 	printf("R: %d G: %d B:%d\n", a[0], a[1], a[2]);  	delete[]a; }

user: user-0
content: 你这个程序RGB值不是同时变化的吧？？？？？ for(R=255;R>=1;R--)         printf("%d ",R);     printf("\n");     printf("G值得变化\n");     for(G=1;G<=255;G++)         printf("%d ",G);     printf("\n");     printf("B的值为%d\n",B); 比如这里是R的值变为1，G的值才往上加，加到255，接着才输出B的值不变？？？？？？我要同时变化的怎么写，请教。。。

user: user-0
content: 我好好研究研究。。。先谢谢大哥了！

user: user-2
content: /* R/G/B三个值：首先R从255递减到1，G从1递增到255，B保持不变；                            再R保持不变，G从255递减到1，B从1递增到255；                            最后R从1递增到255，G保持不变，B从255递减到1； 我要输出得到这三组的值，程序怎么写。。。急求! */  #include <stdio.h> int main(void) { 	int R=1; 	int G=1; 	int B = 1; 	printf("R值得变化\n"); 	for(R=255;R>=1;R--) 		printf("%d ",R); 	printf("\n"); 	printf("G值得变化\n"); 	for(G=1;G<=255;G++) 		printf("%d ",G); 	printf("\n"); 	printf("B的值为%d\n",B);  	printf("G值得变化\n"); 	for(G=255;G>=1;G--) 		printf("%d ",G); 	printf("\n"); 	printf("B值得变化\n"); 	for(B=1;B<=255;B++) 		printf("%d ",B); 	printf("\n"); 	printf("R的值为%d\n",R+1); 	printf("R值得变化\n"); 	for(R=1;R<=255;R++) 		printf("%d ",R); 	printf("\n"); 	printf("B值得变化\n"); 	for(B=255;B>=1;B--) 		printf("%d ",B); 	printf("\n"); 	printf("G的值为%d\n",G+1); }
user-0 提问: 初学c语言，为什么没有输出数组数据

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

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

user: user-2
content: 数组的长度应该不能是动态的，真想实现这个的话可以考虑用malloc比如 int main() { 	int n,i; 	int *p1; 	scanf("%d",&n); 	int *p=(int *)malloc(n*sizeof(int)); 	//p1=p; 	for(i=0;i<n;i++) 	{         scanf("%d",p++); 	} 	p--; 	for(i=0;i<n;i++) 		printf("%d ",*p--);//逆序输出 	//printf("%d ",*p1++);正序输出  return 0; }

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include <stdio.h> #include <locale.h> int main(int argc, char const *argv[]) {     int number=0,i;      setlocale(LC_ALL,"chs");     printf("输入的数据个数：");fflush(stdout);     scanf("%d",&number);     if (number<=0) return 1;     int *a=new int[number];     for (i=0;i<number;i++) {         scanf("%d",&a[i]);     }     printf("不能再输入数据\n");     for(i=number-1;i>=0;i--) {         printf("%d ",a[i]);     }     delete[] a;     return 0; } //输入的数据个数：3 //1 2 3 //不能再输入数据 //3 2 1 为什么可以一直输入不是有number<i条件限制吗？？？

user: user-3
content: for(int i=number-1;i<=0;i--) {

user: user-1
content: #include <stdio.h> #include <locale.h> int main(int argc, char const *argv[]) {     int number=0,i;      setlocale(LC_ALL,"chs");     printf("输入的数据个数：");fflush(stdout);     scanf("%d",&number);     if (number<=0) return 1;     int *a=new int[number];     for (i=0;i<number;i++) {         scanf("%d",&a[i]);     }     printf("不能再输入数据\n");     for(i=number-1;i>=0;i--) {         printf("%d ",a[i]);     }     delete[] a;     return 0; } //输入的数据个数：3 //1 2 3 //不能再输入数据 //3 2 1
user-0 提问: 一个处理XML的通讯函数，不明白什么意思，请高手解惑

回复:
user: user-0
content: #define  XML_HAS_A   (0X00000001 <<XML_ELEMENT_A   )这个是什么意思？？？   mask=XML_ELEMENT_A   |XML_ELEMENT_C   |XML_ELEMENT_E   |XML_ELEMENT_F     为什么 这样赋值？？   mask    &   (0x00000001 <<i)  实现什么？？？
user-0 提问: 这个怎么修改？

回复:
user: user-0
content: 引用 2 楼 hexiujun_ 的回复:你的插入函数insert有问题，里面的node换成l，后面的也是一样吧怎么改？改成l？ l没定义的啊

user: user-0
content: 引用 1 楼 user-2 的回复:c++的话，你把函数都放到struct里面  就行了求大神赐教，怎么放？

user: user-1
content: 你的插入函数insert有问题，里面的node换成l，后面的也是一样吧

user: user-2
content: c++的话，你把函数都放到struct里面  就行了
user-0 提问: c语言小问题，求解答

回复:
user: user-1
content: b没用。len没定义

user: user-2
content: len没定义是一眼就能看见的，如果你要问sizeof(a)为什么等于4的话，那你可以去看看sizeof（）的用法。这里面它相当于是sizeof(int)的意思。因为int类型占四个字节，所以就等于4

user: user-3
content: 是关于sizeof的问题还是程序有问题，你应该说清楚的

user: user-4
content: int len = 0;

user: user-5
content: 什么问题? len没有定义 改为 int len

user: user-6
content: len未定义

user: user-7
content: 问题是不知道问题，所以如何帮你解决问题~

user: user-8
content: len未定义
user-0 提问: c语言中通过加速度求位移怎么实现

回复:
user: user-1
content: 撞击时的速度可以通过各种设备检测, 如果加速度是已知的话, 就知道下滑时间t. 初始速度是0. 得到位移s

user: user-2
content: 真的基本都忘记了，楼上的公式，应该是对的

user: user-3
content: 这个问题初中物理有讲  a=(V-V0)/t s=V0t +1/2 a t^2  代码仅仅是现实生活的某种反应而已 会写字的人不一定会写小说 会写代码的人不一定能解决**问题

user: user-4
content: 引用 3 楼 link0007 的回复:[quote=引用 1 楼 link0007 的回复:] t*a = v t*v = l -> t^2 * a = l 时间 * 加速度 = 速度 时间 * 速度 = 位移 故 时间的平方 * 加速度 = 位移[/quote] 时间 * 速度 = 位移  只对于匀速直线运动管用，有加速度了，这个公式就失效了。高一物理

user: user-5
content: 引用 1 楼 link0007 的回复:t*a = v t*v = l -> t^2 * a = l 时间 * 加速度 = 速度 时间 * 速度 = 位移 故 时间的平方 * 加速度 = 位移

user: user-0
content: 可以用C语言表述一下吗？你这个回答不容易被人看得明白！

user: user-5
content: t*a = v t*v = l -> t^2 * a = l
user-0 提问: 请教宏使用的问题

回复:
user: user-1
content: 在你需要区分版的地方使用 #include PLATFORM   然后再你的目录下定义 hisi 和 ali 文件。 在这两个文件中定义 不同平台的宏。

user: user-2
content: 编译器的命令行参数设定

user: user-0
content: 引用 10 楼 Saleayas 的回复:#if defined ( PLATFORM_HISI ) // include HISI 代码。 #elif defined ( PLATFORM_ALI ) // include ALI 代码。 #endif  我的错，前面的例子举的太随意了。。。 实际是这样，编译项目代码前会先执行配置，宏是同一个，但是不同的平台，宏的值有差异： 编译前配置hisi #define  PLATFORM  “hisi” 编译前配置ali #define  PLATFORM  “ali”  是这样的，所以我代码里只能比较字符串。配置我还不能改。。。

user: user-1
content: 请教一下，怎样使用字符串去表示不同的编译平台。

user: user-0
content: 引用 1 楼 ant2012 的回复:预编译阶段进行的运算是很有限的 #define COMPARE(str) if(#str == "string")return true; 这是可以的，不过还是得在运行时进行的字符口串比较。楼主为何一定得在预编译中比较呢？ 没辙啊 项目代码有平台差异，还是字符串标识的。还只能在之前的代码基础上修改，有段平台无关的代码不想编译。。。 哎，再想辙了

user: user-1
content: #if defined ( PLATFORM_HISI ) // include HISI 代码。 #elif defined ( PLATFORM_ALI ) // include ALI 代码。 #endif

user: user-0
content: 引用 8 楼 Saleayas 的回复:请教一下，怎样使用字符串去表示不同的编译平台。 不是这个意思，比如说： #define PLATFORM_HISI "hisi" #define PLATFORM_ALI "ali" 这是现有的代码，原本是用在函数里的。在这个基础上，我想在预处理阶段做划分而已。

user: user-2
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-3
content: 宏只是单纯的展开

user: user-4
content: 是可以比较的，lz没有写宏的名称，所以编译不过，还有宏名和宏体之间要用空格分开

user: user-1
content: 在预编译的时候，就算你使用字符串，这些字符串也是固定的。 那么为什么不使用一个标识来定义这些需要使用字符串的地方呢？ 只有在运行期，字符串才是真正的字符串。

user: user-5
content: 一般这样会把被比较的"字符串"也换做宏: #define AAAA 4512 #define BBBB 4511 #define CCCC 4512  #if (AAAA == BBBB) .... #elif (AAAA == CCCC) .... #endif

user: user-6
content: 预编译阶段进行的运算是很有限的 #define COMPARE(str) if(#str == "string")return true; 这是可以的，不过还是得在运行时进行的字符口串比较。楼主为何一定得在预编译中比较呢？
user-0 提问: 如何编程读取.prnx文件内容

回复:
user: user-1
content: 文件I/O咯，指定目录的话，遍历目录下文件名，再比较文件后缀。 不知道这个文件是二进制还是文本，需要有个格式化的标准才能解析内容吧。
user-0 提问: C语言题目,新手求解答

回复:
user: user-1
content: int eat_banana(int n) { 	if (1 == n)  		return 1; 	else 	 		return (eat_banana(n - 1)+1) * 2; } int main(void) { 	int n = 10; 	 	fprintf(stdout, "before ten days is %d\n", eat_banana(n)); 	return 0; }  用递归或者迭代都可以的~并且相互之间可以转换；

user: user-2
content: void decode(char *str){     char *a=str,*b=str;     while(*b){         *a++ =*b++;         if(!*b) break;         *a++ =*b++;         if(!*b) break;         if(isalpha(*b)) *a++ =*b++;         else if(isdigit(*b)) b++;         else assert(false);     }     *a='\0'; } int bal(){     int v =1;     for(int i=10;i;i--)         v =(v+1)*2;     return v; }

user: user-3
content: 1. 指针偏移, 正则判断 2. 递归

user: user-4
content: 1T if(A[3*n]>='A'&&A[3*n]<='Z'||A[3*n]>='a'&&A[3*n]<='z') 保留；  2T 1 4=2*2+1 (4+1)*2=10 ............... 接下来自己推
user-0 提问: 指针问题

回复:
user: user-1
content: 引用 9 楼 cc_mugiwala 的回复:这种问题，也拿来问，还不如多看看书 都是从新手过来的，何必打击别人！

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:定义和使用时*的意思不一样。 ++

user: user-3
content: 这种问题，也拿来问，还不如多看看书

user: user-4
content: 4楼的说法还是很好的

user: user-5
content: 楼上的回答有两种： 1，答非所问； 2，荒谬的回答。  朕的回答： printf函数的格式串中有%s时，要求对应的参数是一个指针，p是一个指针。

user: user-6
content: 定义和使用时*的意思不一样。

user: user-7
content: printf函数中约定与%s对应的应该为地址，并且是指向char型的连续的空间的首地址，要求那一片连续空间中还要有一个‘\0’

user: user-8
content: 支持1楼2楼

user: user-9
content: %s输出的是p指向的地址开始字符串；怎么会是*p，再说*p也是一个字符即'a'；

user: user-10
content: 字符串数组和整型数组是不太一样的，输出时p代表的是整个字符串，整个字符串是指从首地址到'\0'字符，这是C++规定  如果用*p则只是第一个char字符，这与其他类型指针是一样的  如果想看p的地址，需要写成&p

user: user-11
content: *p指的是第一个元素a,而p是整个字符串的首地址，(建议用const 修饰指针指向的字符串常量！:const char *p)
user-0 提问: C 如何释放申请的二位动态地址空间

回复:
user: user-1
content: 楼主还没发现吗？内循环动态分配空间时是以储存一级指针地址的大小来分配的，你这里空间不足，估计是越界了啊。

user: user-2
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-3
content: 引用 3 楼 yizhizhuen 的回复:说实话，楼主也是6的飞起，我这多年也是头一次看到有人给一个指针类型地址块的！ mazeword = (char **)malloc(m*sizeof(char *)); 去掉上面这个！ 然后去掉 free(mazeword);  就好了！ 并且这一步也是必须的~不然mazeword就是野指针呢

user: user-3
content: 引用 3 楼 yizhizhuen 的回复:说实话，楼主也是6的飞起，我这多年也是头一次看到有人给一个指针类型地址块的！ mazeword = (char **)malloc(m*sizeof(char *)); 去掉上面这个！ 然后去掉 free(mazeword);  就好了！ 应该不是这儿的问题，这儿是为指针申请空间，即先确定了行数，即m个指针变量嘛。 循环退步出来不见得是释放空间的时候退不出来，代码部分没做容错处理，没有考虑空间申请没成功的情况；其他部分，没看出有多少问题，所以还要看你输入的时候是不是有问题。

user: user-4
content: 我修改代码第七行

user: user-4
content: int main() { 	int m,n; 	//char w[100]; 	char **mazeword;  	scanf("%d,%d",&m,&n); 	//scanf("%s",w);  	mazeword = (char **)malloc(m*sizeof(char *)); 	for (int i=0;i<m;i++) 	{ 		mazeword[i] = (char *)malloc(n*sizeof(char)); 	}  	for (int i=0;i<m;i++) 	{ 		scanf("%s",mazeword[i]); 	}  	for (int j=0;j<m;j++) 	{ 		printf("%c\t",mazeword[j][2]); 	}  	for(int k=0;k<m;k++) 		free(mazeword[k]); 	free(mazeword);  	return 0; }     m,n值输入错误

user: user-0
content: 你百度二维数组如何动态申请地址空间，难道他们的方法有问题？

user: user-5
content: 说实话，楼主也是6的飞起，我这多年也是头一次看到有人给一个指针类型地址块的！ mazeword = (char **)malloc(m*sizeof(char *)); 去掉上面这个！ 然后去掉 free(mazeword);  就好了！

user: user-6
content: 代码看不出有什么问题。是不是输入的字符串太长了，超过了n

user: user-6
content: 代码看不出有什么问题。是不是输入的字符串太长了，超过了n
user-0 提问: 读取csv文件到二维数组

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

user: user-2
content: 看看是什么数据, 全是整型的话, 用32位也就20KB内存,  如果是字符串的话, 可以考虑用索引, 用32位,  这样索引信息也20KB内存, 如果闲占用多的话,  可以考虑只用行号索引也就300*4,1kb多点.  文件读取很浪费时间的,假如经常读取又比较小, 没准系统直接把它 全部载入缓存, 还不如自己全部加载

user: user-3
content: 读取、忽略。
user-0 提问: 编写mystrcmp(), 实现strcmp()功能

回复:
user: user-0
content: 引用 9 楼 king191923157 的回复:[quote=引用 8 楼 qq_28839381 的回复:] [quote=引用 6 楼 a1009563517 的回复:] 第10行scanf段错误 引用 6 楼 a1009563517 的回复:第10行scanf段错误原因是什么，为什么改成数组就不会出错？[/quote]  给参数赋值要有存储空间 char *  只是一个指针 ，没有指向地址 用数组是申请了  一个数组长度大小的空间，输入时数据是存在自己申请的内存  要用char * 可以   char *p= new char[XXXX];  不用的时候再delete [/quote]谢谢，明白了

user: user-1
content: 引用 8 楼 qq_28839381 的回复:[quote=引用 6 楼 a1009563517 的回复:] 第10行scanf段错误 引用 6 楼 a1009563517 的回复:第10行scanf段错误原因是什么，为什么改成数组就不会出错？[/quote]  给参数赋值要有存储空间 char *  只是一个指针 ，没有指向地址 用数组是申请了  一个数组长度大小的空间，输入时数据是存在自己申请的内存  要用char * 可以   char *p= new char[XXXX];  不用的时候再delete

user: user-0
content: 引用 6 楼 a1009563517 的回复:第10行scanf段错误 引用 6 楼 a1009563517 的回复:第10行scanf段错误原因是什么，为什么改成数组就不会出错？

user: user-2
content: 引用 4 楼 qq_28839381 的回复:[quote=引用 1 楼 brookmill 的回复:] char *a, *b; 改成 char a[128], b[128];那我的代码为什么会报错？原因是什么？[/quote] 搜一下”野指针“

user: user-3
content: 第10行scanf段错误

user: user-4
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-0
content: 引用 1 楼 brookmill 的回复:char *a, *b; 改成 char a[128], b[128];那我的代码为什么会报错？原因是什么？

user: user-0
content: 引用 楼主 qq_28839381 的回复:#include "stdio.h" #include "string.h" int mystrcmp(char *, char *);  int main(int argc, char const *argv[]) { 	char *a, *b; 	int i;  	scanf("%s%s", a, b); 	i = mystrcmp(a, b); 	printf("%d\n", i);  	return 0; }  int mystrcmp(char *a, char *b) { 	return strlen(a) > strlen(b) ? 1 : 0; }  运行结果： Segmentation fault (core dumped) 请问哪里错了？那我的代码报错的原因在哪里？能说明一下吗？

user: user-2
content: strcmp不是比较长度的。具体的用法、功能、源代码都很容易找到 http://blog.csdn.net/yushuai007008/article/details/7626446 http://blog.csdn.net/zhao_fu_lu/article/details/20392239

user: user-2
content: char *a, *b; 改成 char a[128], b[128];
user-0 提问: c问题求解

回复:
user: user-1
content: 看样子，楼主的str[j]是单个字符吧 strcat函数 char * strcat(char * restrict s1, const char * restrict s2); 功能是把s2拷贝到s1的后面接成一个长的字符串 返回的是s1 这个函数要求s1必须有足够大的空间  c2664错误

user: user-2
content: strcat是把参数2代表的字符串拼接到参数1代表的字符串的尾部，两个参数要求的是char*类型，而你的str[j]是一个数组元素，也就是char型，所以报错

user: user-3
content: 你需要把str和str1的定义告诉大家，这样才能更好地帮你解决这个问题~目前，但从提示来讲，这个是类型不匹配的问题~

user: user-4
content: strcat函数的两个参数要求是char*类型，也就是字符指针类型，需要的是地址不是具体的值
user-0 提问: 为什么我写的这个程序在VC++中运行时会出现exe已停止工作？求大神助攻！

回复:
user: user-1
content: 引用 1 楼 user-4 的回复:void Traverse_list(pNODE pHead) { pNODE p = pHead->pNext; while(NULL != pHead->pNext)  --------------> 改成  while(NULL != p)  +1

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

user: user-3
content: while(NULL != pHead->pNext) { printf("%d \t",p->data); p = p->pNext;  }这儿时死循环了，需要做一下修改，改成 while (NULL != p)

user: user-4
content: void Traverse_list(pNODE pHead) { pNODE p = pHead->pNext; while(NULL != pHead->pNext)  --------------> 改成  while(NULL != p)
user-0 提问: char在函数中不能返回，已返回程序就报错，麻烦哪位大神来解释下！！

回复:
user: user-1
content: 应该是%c。

user: user-2
content: printf("%c\n",a);

user: user-3
content: printf("%s\n",a); 改成printf("%c\n",a);

user: user-0
content: 自己做一楼顶起
user-0 提问: 谁能帮我看看代码哪错了

回复:
user: user-1
content: 同意3楼，7.2f写错位置了。再加个return 0；就ok了。

user: user-2
content: printf("carea=%7.2f,volume=%7.2f\n",carea,volume); 第一个7.2写错位置了

user: user-0
content: 加了返回值也还是有问题啊，carea的值怎么改都是错的，一定是哪里有错  引用 1 楼 fengxuxing 的回复:没有返回值，其它的没问题吧

user: user-3
content: 没有返回值，其它的没问题吧