Вы, кажется, немного смущены тем, как работает ввод через main.По сути, ваша идея использовать параметры командной строки довольно плоха, потому что вы хотите как указать строки, которые нужно проанализировать, так и какой символ искать, что довольно легко испортить.
Лучше использоватьчто-то вроде scanf с предшествующим ему printf для запроса ввода как для разбираемых строк, так и для символа, который нужно искать.Затем это приводит в исполнение порядок, поэтому гораздо сложнее все испортить.
Теперь, если вы не хотите этого делать, вам все равно придется исправить то, как вы используете argv.argv [0] содержит имя программы, а не первый параметр командной строки.Статическая ссылка на argv [2] даже не гарантирует ничего полезного: она может быть частью строки, которую вы хотите проанализировать, или это может быть искомый символ.
Во-вторыхЕсли вы передадите параметры командной строки в программу, они будут автоматически разделены пробелами.То есть good dog
превратится в два отдельных индекса argv: good
будет argv [1], а dog
будет argv [2] в этом случае.Если вы хотите отправить их в качестве одного аргумента, вы можете набрать "good dog"
для достижения этого.
Вот полностью компилируемая программа, которая представляет собой скорее набросок того, что вы, вероятно, хотите:
#include <stdio.h>
int main(int argc, char *argv[]) {
int i = 0, frequency = 0; // wasn't initialized
char DesiredChar = 'o';
int FirstLocationOfDesiredChar = -1;
if (argc >= 1) {
for (i = 1; i < argc; i++) {
int j = 0;
int StringLength = strlen(argv[i]);
for (; j < StringLength; j++) {
if (argv[i][j] == DesiredChar) {
frequency++;
if (FirstLocationOfDesiredChar == -1) {
FirstLocationOfDesiredChar = j;
}
}
}
}
} else {
printf("Invalid no of inputs\n");
return 1;
}
printf("%s", argv[1]);
printf("%d, %d", frequency, FirstLocationOfDesiredChar);
return 0;
}