当前位置: 技术问答>linux和unix
Segmentation fault错误
来源: 互联网 发布时间:2016-06-19
本文导语: #include #include #include #include #include #include int main() { struct DIR *dp; struct dirent *temp_dp; char temp_name[NAME_MAX+1]; struct stat temp_stat; int temp_fd; dp=opendir("/dev/"); if(dp==NULL){ fprintf(stderr,"open /dev/ dir...
#include
#include
#include
#include
#include
#include
int main()
{
struct DIR *dp;
struct dirent *temp_dp;
char temp_name[NAME_MAX+1];
struct stat temp_stat;
int temp_fd;
dp=opendir("/dev/");
if(dp==NULL){
fprintf(stderr,"open /dev/ dir error");
exit(0);
}
strcpy(temp_name,"/dev/");
while((temp_dp=readdir(dp))!=NULL){
strncpy(temp_name+sizeof("/dev/")-1,
temp_dp->d_name,NAME_MAX);
if(strcmp(temp_name,"/dev/.")==0 || strcmp(temp_name,
"/dev/..")==0)
continue;
if((temp_fd=open(temp_name,O_RDONLY))d_name));
楼主原来的语句应该是对的,错误的是这个:
strncpy(temp_name+sizeof("/dev/")-1,temp_dp->d_name,NAME_MAX);
大小已经超出temp_name的范围了。
|
strncpy(temp_name+sizeof("/dev/")-1,temp_dp->d_name,NAME_MAX);
=====================================================
这句有问题
=====================================================
这句有问题
|
strncpy(temp_name[sizeof("/dev/")-1],temp_dp->d_name,strlen(temp_dp->d_name));
改成这样!
这里用strncat更好。。
改成这样!
这里用strncat更好。。
|
我觉得在使用strcpy之类的函数前,最好要确保数组的长度足够,而不会产生越界.
如果出现错误,最好是调试一下,把问题先定位了,问题也就自然解决了.
如果出现错误,最好是调试一下,把问题先定位了,问题也就自然解决了.
|
NAME_MAX虽然大于了NAME_MAX-(sizeof("/dev/")-1)
但是并不一定会产生段错误,要看temp_dp->d_name的实际长度
但是并不一定会产生段错误,要看temp_dp->d_name的实际长度
|
建议单步调试一下,
重点看看temp_dp=readdir(dp)执行后temp_dp的内容是否正常,尤其是temp_dp->d_name
重点看看temp_dp=readdir(dp)执行后temp_dp的内容是否正常,尤其是temp_dp->d_name