if (strcmp(string_arg, "a") == 0) {
counter++;
}
Вызов strcmp
не подходит в вашем случае, поскольку он сравнивает строки . С помощью этого оператора вы сравниваете строку, начинающуюся с элемента, на который указывает string_arg
, со строкой "a"
, а не символьной константой 'a'
. Обратите внимание, что "a"
равно 'a'
+ '\0'
.
Вместо этого вам нужно сравнить *string_arg
с 'a'
:
if (*string_array == 'a') {
counter++;
}
puts(string_arg);
печатает строка. Это не то, что вам нужно. Вы хотите напечатать только один символ. Для печати символа используйте printf("%c", *string_arg);
.
Обратите внимание, что что-то вроде printf(string_arg);
опасно. Всегда используйте спецификатор формата: printf("%c", *string_arg);
. Причина, по которой объясняется по следующей ссылке:
Почему printf с одним аргументом (без спецификаторов преобразования) устарел?
Это должно быть то, что вы хотите :
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main (int argc, char** argv) {
char* string_arg;
int counter = 0;
if (argc == 2){
for (string_arg = argv[1]; *string_arg != '\0'; string_arg++) {
printf("%c", *string_arg);
printf("\n");
if (*string_arg == 'a') {
counter++;
}
}
printf("%d times character 'a' encountered.", counter);
}
else {
printf("Error: No second argument at the program invocation!");
}
return 0;
}