Ответ 1
char st
- один символ. Судя по остальной части вашего кода, вы, вероятно, намеревались объявить массив символов:
char st[80];
#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);
}
Тем не менее, он ведет себя одинаково во время выполнения.
char st
- один символ. Судя по остальной части вашего кода, вы, вероятно, намеревались объявить массив символов:
char st[80];
У вас есть неправильное совпадение. scanf
не безопасен по типу, вам необходимо указать правильный тип. scanf
позволяет вам получать данные с ввода, и вам нужно указать, какой тип данных вы хотите прочитать. Вы просите его прочитать строку, указав %s
, указав ее символьной переменной.
Вам нужен массив:
#define MAX_LENGTH 256
char st[MAX_LENGTH];
Как @Jerry справедливо указывает, вы просто можете избежать всех хлопот, используя:
getline() вместо scanf
scanf
требуется указатель на char*
, чтобы указать, что вы сканируете строку.
Вы отправляете символ, выделенный в стеке.
Вы либо хотите использовать массив getchar()
или make st
a char.
st - тип char & st - тип char * Позаботьтесь о разнице. BTW, только один char не может использоваться для хранения строки. Используйте массив char [].
Как уже упоминалось, вы хотите создать массив:
Измените char st;
на char st[10];
или любой другой размер, который вы хотите.
С приведенным выше изменением st
представляет собой массив, который имеет 10 отдельных элементов, которые могут содержать одно значение char.
char st - символ, то есть он будет хранить только один символ, попробуйте его так
main()
char st [100];
scanf("%s",st);
просто измените эти три строки, и он будет работать, за исключением только одиночных строк слов
здесь вы объявили функцию как int, которая является int main(), сохраняя ее как main(), и она будет работать
используйте 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]