Я пишу программу, которая использует sprintf для преобразования целых чисел в строки. Чтобы дать вам больше контекста, моя программа имеет родительский процесс, который порождает столько детей, сколько необходимо для вычисления сумм приведенных аргументов командной строки. Каждый дочерний процесс получает 2 аргумента для вычисления. Вся эта часть была легкой, это просто процесс возвращения, который меня путает. Я возвращаю суммы, и теперь мне нужно превратить их в строки. Так я думал, что-то, как это будет работать,sprintf продолжает возвращать ту же строку
for(int i=1; i<10; i++) {
if (array[i] == 0) {
break;
}
temp = array[i];
sprintf(sums, "%d", temp);
argv[i]=*sums;
}
for (int i=0; i<10; i++) {
printf("argv[%d]: %s\n", i, argv[i]);
}
Однако, вместо того, чтобы вывод, который выглядит следующим образом:
argv[0] = ./master
argv[1] = 3
argv[2] = 7
argv[3] = 11
argv[4] = 15
etc...
я получаю это:
argv[0] = ./master
argv[1] = 15
argv[2] = 15
argv[3] = 15
argv[4] = 15
etc...
Я не могу понять почему последняя сумма повторяется. У меня такое чувство, что это связано с тем, как я использую sprintf, но я потратил почти целый день, пытаясь понять это, и я законно застрял. Кстати, я объявил массив в верхней части моей программы, как
int array[10]={0};
'ARGV [я] = * суммы,' не как копировать строки. Это также очень плохая идея переписать 'argv'. –
Чтобы выделить память и скопировать строку: [strdup] (https://linux.die.net/man/3/strdup) – kaylum
Извините, я новичок в программировании. Должен ли я выделять память вне цикла for? –