-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

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
    }
}
于 2013-09-24T13:32:36.827 に答える
1
  1. 必要な番号を確認してください。の引数のargc
  2. string( chararray) には、 index0から までの要素があります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

argv[1]長さが 1 の場合はどうなりますか?

最初のループiでは 1 になりますが、これargv[1][1]は 1 文字の長さの文字列の終端の null です。

于 2013-09-24T13:31:07.873 に答える