#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)
修改
以下是代码的另一个版本(将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);
}
但是,它在运行时的行为相同。
答案 0 :(得分:10)
char st
是一个单一字符。根据其余代码判断,您可能想要声明一个字符数组:
char st[80];
答案 1 :(得分:1)
您的类型不匹配。
scanf
不是类型安全的,您需要提供正确的类型。 scanf
使您能够从输入中获取数据,并且需要告诉它您希望它读取的数据类型。您要求它通过指定%s
来读取字符串,并为其提供字符变量。
你需要一个数组:
#define MAX_LENGTH 256
char st[MAX_LENGTH];
正如@Jerry正确指出的那样,你可以通过使用简单地避免所有的麻烦:
getline(),而非使用scanf
答案 2 :(得分:1)
scanf
需要指向char*
的指针,表示您正在扫描字符串。
您正在提供在堆栈上分配的字符。
您要么使用getchar()
要么使st
成为char数组。
答案 3 :(得分:0)
使用char *st;
或类似char st[50];
的数组。
当您完成char指针的使用时,您应该释放指针使用的内存。这可以使用free(st);
函数来完成。
编辑:当你打印字符串时,如果你使用指针,你可以这样做:
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]
答案 4 :(得分:0)
st是char的类型 &amp; st是char *的类型 照顾差异。 顺便说一下,只有一个char不能用来存储字符串。使用char [] array。
答案 5 :(得分:0)
正如其他人所说,你想创建一个数组:
将char st;
更改为char st[10];
或您想要的任何大小的数组。
通过上述更改st
是一个包含10个单独元素的数组,可以保存单个char值。
答案 6 :(得分:0)
char st是一个字符,即它只存储一个字符,就像这样
main()
char st [100];
scanf("%s",st);
只需更改这三行,除了单个字符串外,它将起作用
在这里你已经将函数声明为一个int,它是int main()保持为main()并且它将起作用