c - 为什么当我再声明一个变量时这段代码会崩溃?

标签 c compiler-construction struct scanf

这是我的代码。当我注释掉“luetut”变量时它起作用了。 但是当我按如下方式编译时,当程序应该打印变量时出现段错误。这有什么意义?当我尝试进行调试构建时,出现了一些非常奇怪的东西(这个和那个的多个定义)。

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

typedef struct rakenne
{
    int luku;
    float liukuluku;
    char* mjono;
}   Rakenne;

int main(int argc, char *argv[])
{
    int luetut = 0;
    Rakenne palikka;
//  Rakenne palikka, *palikkaosoitin;
//  palikkaosoitin = &palikka;

//  while(luetut < 1)
//  {
        printf("Anna luku:\n");
        scanf("%d", &palikka.luku);
//  }   luetut = 0;
//  while(luetut < 1)
//  {
        printf("Anna liukuluku:\n");
        scanf("%f", &palikka.liukuluku);
//  }   luetut = 0;
    printf("Anna merkkijono:\n");
    scanf("%s", palikka.mjono);

    printf("%i\t%.3f\t%s\n", palikka.luku, palikka.liukuluku, palikka.mjono);

    return 0;
}

那么,是我的 gcc 编译器坏了还是出了什么问题?

最佳答案

scanf("%s", palikka.mjono);

你没有让 mjono 指向任何东西,所以写入它当然是非法的 - 未定义的行为。做这样的事情会导致不稳定的行为:程序没有明显的原因“工作”或“失败”。


So, is my gcc compiler broken or what could be the problem

认为您正在使用的工具是问题的想法很少有建设性。

关于c - 为什么当我再声明一个变量时这段代码会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236502/

相关文章:

c - 如何管理从 matlab coder 自动生成的 c 文件?

c - 为什么不使用大于 10 位的数字?

c++ - C/C++ 计算和收集余数

c - 我可以使用哪种现代 C 编译器来构建这个 1992 MS-DOS 程序?

c++ - 通过函数在共享内存中 boost C++ 结构

php - 与 python 字典等效的 php 结构是什么?

c - 格式化打印显示意外结果

compiler-construction - SSA用于堆栈机代码

时间:2019-03-09 标签:c++constconvert

C 段错误 : 11 error