当我尝试执行此代码时,屏幕上会出现“分段错误”。有人可以告诉我错误是什么吗?提前谢谢
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
int fd , i;
int count= atoi(argv[2]);
char name[50];
char nname[50];
strcpy(nname, "./lfille");
strcpy(name, argv[1]);
struct stat statbuf;
/* if((fd=open(argv[1], O_RDWR)==-1)){
fprintf(stderr, "Datei existiert nicht\n");
}else*/ if((lstat(argv[1], &statbuf)==-1)){
fprintf(stderr, "Error bei lstat\n");
}else if(!(S_ISREG(statbuf.st_mode))){
printf("%s ist nicht REG\n ", argv[1]);
exit(1);
}else{
for(i=0; i<count; i++){
printf("%s", nname);
symlink(name, nname);
sprintf(name,"%s", nname);
sprintf(nname, "./lfille%d", i);
}
}
return 0;
}
答案 0 :(得分:0)
参数*argv[]
是一个字符串指针数组,argc
通知该数组的长度。
第一个元素argv[0]
指向包含程序名称的字符串。如果在程序运行时提供了任何运行时参数,则为每个参数提供一个字符串指针,并在argc
中使用适当的值来告诉您已提供了多少字符串指针数组元素。如果没有提供程序参数,*argv[]
数组的长度为1。
如果您尝试访问应该已经给出的参数,那么您将索引超出数组*argv[]
的长度,从而导致未定义的行为 。您将取消引用具有基本随机值的指针。这可能是良性的,或者由于尝试访问您不允许的内存而导致分段错误。
我建议任何在运行时使用(比如2)用户参数的程序都有类似于此的检查代码:
if (argc < 3) {
printf ("Syntax should be: %s filename links\n", argv[0]);
exit (1);
}