C语言中的分段错误(gcc)
它编译得很好,但是当我试着运行程序时,我得到了一个分段错误。我不确定哪里出了错C语言中的分段错误(gcc),c,gcc,segmentation-fault,C,Gcc,Segmentation Fault,它编译得很好,但是当我试着运行程序时,我得到了一个分段错误。我不确定哪里出了错 #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char ** argv) { int i, childpid; for (i = strlen(argv[1]); i >= 0; i --) { if (fork() == 0) {
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char ** argv)
{
int i, childpid;
for (i = strlen(argv[1]); i >= 0; i --) {
if (fork() == 0) {
printf("%c\n",argv[1][i]);
break;
}
}
return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
inti,childpid;
对于(i=strlen(argv[1]);i>=0;i--){
如果(fork()==0){
printf(“%c\n”,argv[1][i]);
打破
}
}
返回0;
}
如果argv[1]
是长度1,会发生什么
在第一个循环中,
i
将是1,但argv[1][1]
是一个字符长字符串的终止null。您应该使用argc
参数来知道从命令行发送了多少个参数。在运行for
语句之前,测试它是否大于1,因为您的第一个参数将是程序名:
if (argc > 1) {
for (i = strlen(argv[1]) - 1; i >= 0; i --) {
if (fork() == 0) {
printf("%c\n",argv[1][i]);
break;
}
}
}
或者,如果您只想打印第一个字符,您可以这样做
if(argc > 1) {
if(strlen(argv[1]) > 0 && fork() == 0) {
printf("%c\n",argv[1][0]);
} else {
// for loop here
}
}
argc
char
array)的元素从索引0
到length-1
int main(int argc,char**argv)
{
inti,childpid;
如果(argc<2){
printf(“缺少参数\n”);
返回-1;
}
对于(i=strlen(argv[1])-1;i>=0;i--){
如果(fork()==0){
printf(“%c\n”,argv[1][i]);
打破
}
返回0;
}
i
让你出界了。请尝试i=strlen(argv[1])-1
(记住C中的数组是以零为基的)。如何运行它?如果不带参数运行它,argv[1]
将为NULL
@MarounMaroun,除非它不超出范围-指针指向终止的NUL字节。请检查argc
中所需的参数数量。我将尝试strlen(argv[1])-1,我怀疑您是否希望打印“\0”。这篇文章应该是评论,这如何解释分段错误?如果它起作用,这难道不意味着printf(“%c\n”,“\0”)有seg错误吗?因为询问者似乎有一个正确的argv[1]。无法测试它,因为我这些天没有在c上工作。@Lyth否,printf(“%c\n”,“\0”)
没有seg错误。谢谢。因此argv[1]必须为空。
int main(int argc, char ** argv)
{
int i, childpid;
if(argc < 2) {
printf("An argument is missing\n");
return -1;
}
for (i = strlen(argv[1]) - 1; i >= 0; i --) {
if (fork() == 0) {
printf("%c\n",argv[1][i]);
break;
}
return 0;
}