-1

它编译得很好,但是当我尝试运行程序时出现分段错误。我不确定我哪里出错了。

#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;
}
4

3 回答 3

1
  1. 检查所需的编号。的论点argc
  2. 字符串(char数组)具有从索引0到的元素length - 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;
}    
于 2013-09-24T13:46:08.297 回答
1

您应该使用argc参数来了解从命令行发送了多少参数。在运行语句之前测试它是否大于 1 for,因为您的第一个参数将是程序名称:

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
    }
}
于 2013-09-24T13:32:36.827 回答
-1

如果argv[1]长度为 1 会发生什么?

在第一个循环i中将为 1,但argv[1][1]它是一个字符长字符串的终止空值。

于 2013-09-24T13:31:07.873 回答