Подтвердить что ты не робот

Формат '% s' ожидает аргумент типа 'char *'

#include <stdio.h>
int main(void)
{
    int i,j,k;
    char st;
    printf("enter string\n");
    scanf("%s", st);
    printf("the entered string is %s\n", st);
}

Компиляция выше программы дает мне предупреждение:

warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]
palindrom.c:8:1: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]

Что я здесь делаю неправильно?

Это то, что происходит, когда я запускаю его:

$ ./a.out
enter string
kiaaa
the entered string is (null)

Edit:

Вот еще одна версия кода (сделана char st; в char *st):

#include <stdio.h>
int main(void)
{
    int i,j,k;
    char *st;
    printf("enter string\n");
    scanf("%s", st);
    printf("the entered string is %s\n", st);
}

Тем не менее, он ведет себя одинаково во время выполнения.

4b9b3361

Ответ 1

char st - один символ. Судя по остальной части вашего кода, вы, вероятно, намеревались объявить массив символов:

char st[80];

Ответ 2

У вас есть неправильное совпадение.
scanf не безопасен по типу, вам необходимо указать правильный тип. scanf позволяет вам получать данные с ввода, и вам нужно указать, какой тип данных вы хотите прочитать. Вы просите его прочитать строку, указав %s, указав ее символьной переменной.

Вам нужен массив:

#define MAX_LENGTH 256
char st[MAX_LENGTH];

Как @Jerry справедливо указывает, вы просто можете избежать всех хлопот, используя:
getline() вместо scanf

Ответ 3

scanf требуется указатель на char*, чтобы указать, что вы сканируете строку.

Вы отправляете символ, выделенный в стеке.

Вы либо хотите использовать массив getchar() или make st a char.

Ответ 4

st - тип char & st - тип char * Позаботьтесь о разнице. BTW, только один char не может использоваться для хранения строки. Используйте массив char [].

Ответ 5

Как уже упоминалось, вы хотите создать массив:

Измените char st; на char st[10]; или любой другой размер, который вы хотите.

С приведенным выше изменением st представляет собой массив, который имеет 10 отдельных элементов, которые могут содержать одно значение char.

Ответ 6

char st - символ, то есть он будет хранить только один символ, попробуйте его так main() char st [100]; scanf("%s",st); просто измените эти три строки, и он будет работать, за исключением только одиночных строк слов здесь вы объявили функцию как int, которая является int main(), сохраняя ее как main(), и она будет работать

Ответ 7

используйте char *st; или массив как char st[50]

Когда вы завершили использование указателя char, вы должны освободить память, используемую указателем. Это можно сделать, используя функцию free(st);.

EDIT: Когда вы печатаете строку, и если вы используете указатель, вы можете сделать следующее:

printf("the entered string is %s\n",st);
printf("the entered string is %s\n",*st); // This will work in both cases if you use char *st or char st[50]