当前位置: 技术问答>linux和unix
收到“underscore in number”出错提示!?
来源: 互联网 发布时间:2015-11-05
本文导语: 程序段: int err(void) { char* logbuf; int logfd; logbuf=calloc(21,sizeof(char)); logbuf="the programe failed!"; logfd=open("log",O_RDWR|O_APPEND|0_CREAT,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);// ...
程序段:
int
err(void)
{ char* logbuf;
int logfd;
logbuf=calloc(21,sizeof(char));
logbuf="the programe failed!";
logfd=open("log",O_RDWR|O_APPEND|0_CREAT,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);//
这句错!改为creat后好。
write(logfd,logbuf,20);
close(logfd);
free(logbuf);
exit(-1);
}
gcc编译时收到告警如下:
b.c: In function `err':
b.c:27: underscore in number
怎么会事呢??!
int
err(void)
{ char* logbuf;
int logfd;
logbuf=calloc(21,sizeof(char));
logbuf="the programe failed!";
logfd=open("log",O_RDWR|O_APPEND|0_CREAT,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);//
这句错!改为creat后好。
write(logfd,logbuf,20);
close(logfd);
free(logbuf);
exit(-1);
}
gcc编译时收到告警如下:
b.c: In function `err':
b.c:27: underscore in number
怎么会事呢??!
|
logbuf=calloc(21,sizeof(char));
这句话分配了一段内存空间,并且用logbuf指针指向这个空间,那么之后就可以用这个空间存放你想要放的一些东西;
但是如果要把一个字符串放进去的话,
logbuf="the programe failed!";
这句话是达不到要求的,它的实际作用是改变了logbuf指针指向的地址,变为指向常量字符串="the programe failed!"的首地址,而这块地址空间并不在堆上,你接下来free它就会出错了。
字符串赋值应该用strcpy或strncpy来做。
这句话分配了一段内存空间,并且用logbuf指针指向这个空间,那么之后就可以用这个空间存放你想要放的一些东西;
但是如果要把一个字符串放进去的话,
logbuf="the programe failed!";
这句话是达不到要求的,它的实际作用是改变了logbuf指针指向的地址,变为指向常量字符串="the programe failed!"的首地址,而这块地址空间并不在堆上,你接下来free它就会出错了。
字符串赋值应该用strcpy或strncpy来做。