1

以下で悩んでいます。たとえば、2 つのプログラムがあり、1 つは "input.c" で、2 つ目は "output.c" です。出力は単純なもので、次のようになります (最も重要な部分のみを貼り付けます)。

outputbin.c

//
char buffer[512];
strncpy(buffer, argv[1], sizeof(buffer));
printf("Your output is: %s\n", buffer);
//

そして、これは私のinput.cからの主な一節です:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char *argv[])
{
    pid_t pid;
    char *charchar = "\x41";
    int status;
    char *outputbin;
    int i, j, iterations;

    if(argc < 2)
    {
        fprintf(stderr, "Usage: %s <iterations> <outputbin>\n", argv[0]);
        exit(0);
    }

    iterations = atoi(argv[1]);
    outputbin = argv[2];

    pid = fork();

    if(pid != 0)
    {       
        waitpid(-1, &status, 0);
    }

    if(pid == 0)
    {
        for(i=0; i < iterations; ++i)
        {
            for(j = 0; j <= i; ++j)
            {   
                printf("%s", charchar);                         
                //execl(outputbin, outputbin, charchar, NULL);              
            }
            printf("\n");
        }
    }
    return 0;
}

gcc を使用してこのプログラムをコンパイルし、これを実行すると (argv[2] なしで): ./input 10次の ようになります。

A
AA
AAA
AAAA
AAAAA
AAAAAA
AAAAAAA
AAAAAAAA
AAAAAAAAA
AAAAAAAAAA

大丈夫ですが、このコードを削除するまでは - " printf("%s", input); " と " execl " のコメントを外してください:

for(j = 0; j <= i; ++j)
                {                                                   
                    execl(output, output, input, NULL);             
                }

そして実行: ./a.out 10 ./outputbin

私はこれだけを得る -あなたの出力は: A

最初の文字だけで、それだけです。文字列の「半ピラミッド」全体を行ごとに実行するにはどうすればよいですか? 何を試しても、すべてが同じ結果に終わります。

4

1 に答える 1