【问题标题】:Idk if my ide is bugging or what but i need help plsIdk 如果我的 ide 有问题或什么但我需要帮助请
【发布时间】:2021-04-03 06:55:30
【问题描述】:

好的,所以我一直在学习 cs50 EDX 课程并一直在使用他们的 ide。我今天继续输入非常简单的代码,看看我是否记得。我不知道我是傻还是什么,但是当我输入这段代码时,我收到一条错误消息:“格式指定类型'char *'但参数的类型为'string *'(又名'char **' ) [-Werror,-Wformat] scanf("%s", &name);"

我有其他代码具有相似的几乎相似的代码,并且运行良好。请帮助,将不胜感激。(我是初学者)

#include <cs50.h>
#include <stdio.h>


int main(void)
{
    string name;
    printf("Name: ");
    scanf("%s", &name);
    printf("Hello %s", name);
}

从 youtube 复制的代码对我不起作用:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char name[10];
    printf("Name: ");
    scanf("%s", &name);
    printf("Hello %s", name);
}

【问题讨论】:

  • 我不知道 string 在那个 cs50.h 中是什么类型,但我可以看到错误是你传递了一个 char** 。尝试向我们展示定义string 的标头,或尝试将*name 传递给scanf
  • 请不要发送不相关的标签。
  • 将 *name 传递给 scanf 是什么意思?我认为字符串只是 ide 附带的。
  • 因为我们不知道string 来自哪里以及它是什么。 scanf 获取分配的char 数组的地址,或指向char 内存的指针。 string 不是 C 标准的一部分,因此为了帮助您,您必须描述 string 是什么,例如查看它的标题。
  • Idk 它来自哪里,因为如果删除标题,它仍然知道字符串是什么。我认为它是 ide 的一部分,但我实际上不知道。我看了一个 youtube 视频,我准确地输入了他的代码,但它对我不起作用。

标签: string cs50


【解决方案1】:

我在这里用谷歌搜索:https://github.com/cs50/libcs50/blob/develop/src/cs50.h string 被声明为 typedef char *string; 所以你的代码有两个问题。

  1. 您没有为string 分配内存,这可能会导致您在编译后崩溃。
  2. 您没有正确使用scanf。您应该直接传递 string 变量,而不是通过它的地址。

【讨论】:

  • 我使用 char 让它以不同的方式工作。
  • 感谢您的帮助,结果我只是愚蠢并忘记了为了使用“字符串”,我必须使用 cs50 标题并输入“字符串名称 = get_string(“你叫什么名字?”) ;
  • 始终检查您的第 3 方标头以查看您的库的接口和数据结构。
  • 我会的。再次感谢您。欣赏它。
  • 确保也将主题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多