C программа. Принятие строкового ввода к проблеме указателя символа - PullRequest
1 голос
/ 23 апреля 2020

Здравствуйте, у меня проблема с кодом C. Я пытаюсь позволить пользователю назначить строку ранее определенной char *srchstr; и char *repstr;. Глядя на другие похожие потоки, я попытался реализовать его следующим образом, но он все равно не работает:

char *srchstr;
srchstr = malloc(256);
char *repstr;
repstr = malloc(256);
printf("what are you searching for?:");
scanf("%255s",&srchstr);
fflush(stdin);
printf("\n what do you want to replace it with?:");
scanf("%255s",&repstr);

Im getting this kinda errors:

Вся идея, лежащая в основе Программа должна была дать пользователю возможность выбирать, какой текст он хочет заменить чем-либо (весь код прекрасно работает с srchstr и repstr, определенными в коде, но я не могу реализовать пользовательский ввод), вот как это выглядело в начале:

char *srchstr = "400,300";
char *repstr = "400,300: (000,000,000) #000000";

Как это исправить, чтобы пользователь мог ввести srchstr и repstr?

1 Ответ

1 голос
/ 23 апреля 2020

scanf("%255s",&srchstr); -> scanf("%255s", srchstr);

scanf("%255s",&repstr); -> scanf("%255s",repstr);

Оператор & означает, что вы передаете адрес данного пространства памяти, фактически указатель на пространство памяти, в котором хранятся входные данные, идентифицированные именем переменной, что было бы хорошо, потому что scanf ожидает именно этого.

Но поскольку srchstr и repstr уже являются указателями, вы фактически передаете адрес указателей (указатели на указатели) вместо адреса пространства памяти (указателей на пространство памяти) в поле для хранения ввода.

Примечание:

fflush(stdin)

Вызывает неопределенное поведение , предназначено для использования с stdout.

Вы можете заменить его на:

int c;
while((c = fgetc(stdin)) != '\n' && c != EOF) {}
...