Я пытаюсь написать что-то, что будет принимать два аргумента командной строки (слово и буква), и удалить все вхождения этой буквы из слова.Например, если я передаю Hello и e, Hllo должен быть полученной строкой.
Я пытаюсь сделать это, используя указатели, и сокращая ненужные локальные переменные для эффективности.При компиляции я получаю очевидные предупреждения о несовместимости и знаю, что это как-то связано с моими указателями.Если я использую локальные переменные и просто передаю их, все работает отлично - поэтому мое понимание указателей явно ошибочно.
Любые указатели (без каламбура) будут с благодарностью!
// Function Prototypes
void remove_all_chars(char *, char *);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) { //Function parameters allow for CLI arguments
printf("%s\n", argv[1]);
printf("%s\n", argv[2]);
char *charTest2 = *argv[2];
char *strTest = strdup(argv[1]);
//char strTest[20];
//char charTest[20];
//strncpy(strTest, argv[1], 10);
//strTest[0] = *argv[1];
remove_all_chars(strTest, charTest2);
printf("%s", strTest);
return 0;
}
void remove_all_chars(char *str, char *c) {
char *pr = str, *pw = str;
while (*pr) {
*pw = *pr++;
pw += (*pw != c);
}
*pw = '\0';
}
РЕДАКТИРОВАТЬ: После добавления char*
к моим типам данных я получаю следующие предупреждения:
Removing3.c:12:8: warning: incompatible integer to pointer conversion initializing 'char *' with an
expression of type 'char'; remove * [-Wint-conversion]
char *charTest2 = *argv[2];
^ ~~~~~~~~
Removing3.c:30:20: warning: comparison between pointer and integer ('int' and 'char *')
pw += (*pw != c);
~~~ ^ ~
2 warnings generated.
РЕДАКТИРОВАТЬ: Вот предупреждения
Removing3.c:18:19: warning: incompatible integer to pointer conversion passing 'char' to parameter of
type 'char *'; take the address with & [-Wint-conversion]
remove_all_chars(strTest, charTest2);
^~~~~~~
&
Removing3.c:2:29: note: passing argument to parameter here
void remove_all_chars(char *, char *);
^
Removing3.c:18:28: warning: incompatible integer to pointer conversion passing 'char' to parameter of
type 'char *'; take the address with & [-Wint-conversion]
remove_all_chars(strTest, charTest2);
^~~~~~~~~
&
Removing3.c:2:37: note: passing argument to parameter here
void remove_all_chars(char *, char *);
^
Removing3.c:19:15: warning: format specifies type 'char *' but the argument has type 'char' [-Wformat]
printf("%s", strTest);
~~ ^~~~~~~
%c
Removing3.c:30:20: warning: comparison between pointer and integer ('int' and 'char *')
pw += (*pw != c);
~~~ ^ ~
4 warnings generated.