以下で悩んでいます。たとえば、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
最初の文字だけで、それだけです。文字列の「半ピラミッド」全体を行ごとに実行するにはどうすればよいですか? 何を試しても、すべてが同じ結果に終わります。