当前位置: 技术问答>linux和unix
大家看看这是怎么回事,segmentation fault
来源: 互联网 发布时间:2016-10-29
本文导语: #include #include #include #include #include #include #include #include #define W 6 float Vector[W][W]; int main() { FILE* fp; char str[1024]; int neighbor_num=0; if((fp=fopen("a.dat","r") == NULL)) { printf("Unable to open file!n"); exit(0); }...
#include
#include
#include
#include
#include
#include
#include
#include
#define W 6
float Vector[W][W];
int main()
{
FILE* fp;
char str[1024];
int neighbor_num=0;
if((fp=fopen("a.dat","r") == NULL))
{
printf("Unable to open file!n");
exit(0);
}
fgets(str,4,fp);
//{
//if(str[0]!='n')
//{
// neighbor_num = (int)(unsigned char)str[0];
//}
//else
//{
// int index = (int)(unsigned char)str[4];
//char* temp =
//}
//printf("%s",&str);
//memset(str,0,sizeof(str));
//}
fclose(fp);
return 0;
}
本来是while(fgets(str,4,fp)!=NULL)为了调试改成fgets(str,4,fp);在ubuntu下调试的
#include
#include
#include
#include
#include
#include
#include
#define W 6
float Vector[W][W];
int main()
{
FILE* fp;
char str[1024];
int neighbor_num=0;
if((fp=fopen("a.dat","r") == NULL))
{
printf("Unable to open file!n");
exit(0);
}
fgets(str,4,fp);
//{
//if(str[0]!='n')
//{
// neighbor_num = (int)(unsigned char)str[0];
//}
//else
//{
// int index = (int)(unsigned char)str[4];
//char* temp =
//}
//printf("%s",&str);
//memset(str,0,sizeof(str));
//}
fclose(fp);
return 0;
}
本来是while(fgets(str,4,fp)!=NULL)为了调试改成fgets(str,4,fp);在ubuntu下调试的
|
如果你想把str[0]的一个byte的值当做int,那就是(int)(unsigned char),语法是没错,但是你知道你想干什么吗?
上面也有人提了,fopen的if判断问题,你的学法是“不会报错”,可惜它会是怎么判断的呢?
最终的解析就是if(fp=(fopen("a.dat","r") == NULL))?
本人不才gcc编译一定要把-Wall打开,看到有任何warning就要改的人,不敢有丝毫懈怠。
|
if((fp=fopen("a.dat","r") == NULL))
改成
if((fp=fopen("a.dat","rt"))==NULL)
就运行正常了
改成
if((fp=fopen("a.dat","rt"))==NULL)
就运行正常了