首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

又是一个段异常,帮忙看上

2013-02-04 
又是一个段错误,帮忙看下#includestdio.h#includestdlib.h#includestring.h#define BLUE b#define

又是一个段错误,帮忙看下


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLUE 'b'
#define WHITE 'w'
#define RED 'r'
#define swap(x,y) {char temp;\
temp=color[x];\
color[x]=color[y];\
color[y]=temp;}
int main()
{
char color[]={'r','b','w','r','\0'};
int wFlag=0;
int bFlag=0;
int rFlag=strlen(color)-1;
int i;

for(i=0;i<strlen(color);i++)
printf("%c",color[i]);
printf("\n");

while(wFlag<=rFlag)
{
if(color[wFlag]==WHITE)
wFlag++;
else if(color[wFlag]==BLUE)
{
swap(bFlag,wFlag);
bFlag++;
wFlag++;
}
else
{
while(wFlag<rFlag&&color[rFlag]==RED)
rFlag--;
swap(rFlag,wFlag);
rFlag--;
}
}
for(int k=0;k<strlen(color);k++)
printf("%c",color[k]);
printf("%n");

return 0;
}

以上是个三色旗排序的程序
运行时提示有段错误,用gdb调试时显示:
Program received signal SIGSEGV, Segmentation fault.
0xb7e68be3 in vfprintf () from /lib/i386-linux-gnu/libc.so.6
这个是什么错误,不太明白~
[解决办法]
最后的printf写错了。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLUE 'b'
#define WHITE 'w'
#define RED 'r'
#define swap(x,y) {char temp;\
temp=color[x];\
color[x]=color[y];\
color[y]=temp;}
int main()
{
char color[]={'r','b','w','r','\0'};
int wFlag=0;
int bFlag=0;
int rFlag=strlen(color)-1;
int i;

for(i=0;i<strlen(color);i++)
printf("%c",color[i]);
printf("\n");

while(wFlag<=rFlag)
{
if(color[wFlag]==WHITE)
wFlag++;
else if(color[wFlag]==BLUE)
{
swap(bFlag,wFlag);
bFlag++;
wFlag++;
}
else
{
while(wFlag<rFlag&&color[rFlag]==RED)
rFlag--;
swap(rFlag,wFlag);
rFlag--;
}
}
for(int k=0;k<strlen(color);k++)
printf("%c",color[k]);
printf("\n");//这里写错了,应该是\n

return 0;
}

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

热点排行