繁体   English   中英

为什么在声明另一个变量时此代码崩溃?

[英]Why does this code crash when I declare one more variable?

这是我的代码。 当我注释掉“ 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指向任何东西,因此写它当然是非法的-未定义的行为。 这样做会导致行为不稳定:程序没有明显的原因就“运行”或“失败”。


所以,我的gcc编译器坏了还是可能是问题所在

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

扩展cnicutars答案,解决方法是为palikka.mjono分配一些内存。

像这样:

#define SIZE     40   // or whatever you need.
palikka.mjono = malloc( sizeof(char) * SIZE );

然后,别忘了free该内存:

free( palikka.mjono ); 

或者,如果您知道字符串的最大大小,则只需将结构定义为:

typedef struct rakenne
{
    int luku;
    float liukuluku;
    char mjono[SIZE];
}   Rakenne;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM