argv[1]
и argv[2]
уже уже указатели на массивы символов, так что вы можете использовать их напрямую. Более того (см. Сообщение @ ouah), строки уже изменяемы, поэтому вам может вообще не понадобиться ничего кроме этого.
Если вы действительно хотите иметь массив scope- local , вам необходимо использовать функцию C99, называемую «массивы переменной длины», поскольку длины строк известны только во время выполнения:
#include <string.h>
int main(int argc, char * argv[])
{
char s1[strlen(argv[1]) + 1];
strncpy(s1, argv[1], sizeof s1);
// ...
}
В качестве альтернативы вы могли бы malloc
иметь достаточно места для копии строки (скажем, char * s1 = malloc(strlen(argv[1]) + 1);
), но тогда у вас не было бы локального массива в конце концов (и вы могли бы также использовать исходные строки, если вы на самом деле не хотел сделать копию).