首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >格式'%s‘期望类型为'char *’的参数

格式'%s‘期望类型为'char *’的参数
EN

Stack Overflow用户
提问于 2012-05-24 06:06:59
回答 7查看 65.7K关注 0票数 14
代码语言:javascript
运行
复制
#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);
}

编写上面的程序给我一个警告:

代码语言:javascript
运行
复制
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]

我在这里做错什么了?

当我运行它时会发生这样的情况:

代码语言:javascript
运行
复制
$ ./a.out
enter string
kiaaa
the entered string is (null)

编辑:

下面是代码的另一个版本(将char st;转换为char *st):

代码语言:javascript
运行
复制
#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);
}

但是,它在运行时的行为是相同的。

EN

Stack Overflow用户

发布于 2012-05-24 06:08:27

你的类型不匹配。

scanf不是类型安全的,您需要提供正确的类型。scanf使您能够从输入中获取数据,并且需要告诉它要读取的数据的类型。通过为字符串提供一个字符变量来指定%s,让它读取字符串。

你需要一个数组:

代码语言:javascript
运行
复制
#define MAX_LENGTH 256
char st[MAX_LENGTH];

正如曾傑瑞正确指出的那样,你只需简单地避免所有的麻烦,只需使用:

getline()而不是使用scanf

票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10732010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档