Каждый параметр предоставляется как отдельный элемент argv
.
argc = 7
argv[0] = "./forkexec"
argv[1] = ";"
argv[2] = "hello"
argv[3] = ";"
argv[4] = "world"
argv[5] = ";"
argv[6] = "hello"
argv[7] = NULL
Вы ищете ;
в строке, обозначенной argv[0]
, но она не содержит ни одного.
Обратите внимание, что ваш подход делает невозможным передачу ;
в качестве параметра. Судя по внесенному вами редактированию, вы пытаетесь передать команды для выполнения. Если вы в порядке с командами оболочки, вы можете ожидать, что каждый аргумент будет исполняться командой оболочки.
./forkexec 'ls /foo' 'ls /bar'
Используя этот подход, вы получите argc-1
команды, и они будут найдены в argv[1]
.. argv[argc-1]
. Они будут выполнены как /bin/sh
, -c
, argv[i]
.