【问题标题】:My simple C program crashes [closed]我的简单 C 程序崩溃 [关闭]
【发布时间】:2016-05-10 21:31:49
【问题描述】:

我试图有一个变量,其值为“facebook”之类的单词。但是,我不能在 C 中轻松地使用它。而不是使用累人的方式(我做到了,但它太长了,没有必要这样做。)我想我可以用浮点数替换“facebook”,比如 123456789 等。我的代码是这样的:

printf("Enter the number.\n");

scanf("%f", website);

if(website==32463774)
{
    printf("You wrote facebook.");
}

当程序在打印“Enter the number.”后到达该scanf行时,它会崩溃。我做错了什么?

【问题讨论】:

  • scanf("%f", website); --> scanf("%f", &website);。顺便说一句,使用doublelong int 而不是float
  • 32463774 不是float
  • 1) 启用编译器警告,2) 阅读函数手册,3) 查找函数的现有示例用法。
  • 4) 学习使用 GDB。

标签: c variables crash


【解决方案1】:

我试过你的代码,但我认为你只是分享了它的一个模式。

scanf("%f", &website);

也许这是您的程序崩溃的原因。 但您可以轻松地将字符串存储在 char 类型的变量中。

我尝试将值变量作为字符串存储在网站变量中。

我的代码如下所示:

//The stored string
char website[15];
printf("Enter the website:\n");
scanf("%s", website);

printf("The stored website: %s\n", website);

【讨论】:

    【解决方案2】:

    scanf() 获取您要写入的变量的地址,而不是变量本身。

    这就是你想要的:

    scanf("%f", &website);
    

    在底层,地址和整数几乎相同。它们因实施而异,但归根结底,它们都是一定长度的数字。长度可能不同,但它们只是数字。这就是为什么编译器不会为此大喊大叫的原因。它确实知道您可能不想这样做,但它相信您知道自己在做什么,并且无论如何都会让您这样做。

    地址是内存中某物的位置。 C 函数可以获取某物的地址,去那里,修改它,然后返回,允许调用函数返回到该地址(调用函数已经知道)并获取被调用者放在那里的任何内容。大多数较新的语言会允许您传递数据,然后通过返回来将其取回,但 C 不太喜欢这样做,所以它有地址。

    假设您有一台损坏的电唱机(您想要更改的变量)。一种较新的语言会说你去找修理工(函数),给他唱机(作为参数传入),然后他给你(归还)固定唱机,然后你离开。但是C不能拿起整个唱片播放器。 C 可以携带的所有东西都是带有街道地址的便利贴。因此,C 所做的就是将电唱机所在的地址写在便利贴上,交给修理工。修理工进屋修好电唱机,然后回到打电话给他的人那里,告诉他情况如何。为了得到电唱机,呼叫者回到房子并在那里使用它,现在已修复。

    地址是地址,唱机是变量的值。 scanf() 想要一个地址,所以它可以把号码放在房子里,你以后可以得到。你给了它变量。你给了它唱机。修理工(功能)期待一张便签,所以他只是试图在某处找到写在电唱机上的地址。他找到了序列号,然后在城里四处寻找那个地址。当然,没有这样的地址;他只是四处寻找永远,然后渴死了。程序崩溃。

    长话短说,给scanf() 一个地址。

    另外,我认为您不需要在这里使用floatint 就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多