我一直得到这个错误分段错误(核心转储)

时间:2014-01-13 01:42:35

标签: c segmentation-fault

我一直收到此错误分段错误(核心转储)

我的代码:

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

int main(void)
{
    char name[80];
    int length[10];
    length == sizeof(name)
    printf("What's your name?\n");
    scanf("%s", name);
    printf("The length of your name is %s", length);
}

修改

好的,这是我的新代码

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

int main (void) 
{
    char name[20];
    printf("What is your name?\n");
    scanf("%s", name);
    printf("There are %d letters in your name", strlen(name));
}

它仍然不起作用。

2 个答案:

答案 0 :(得分:8)

printf("The length of your name is %s", length);

%s用于字符串。 int的格式说明符为%d。传入不匹配的类型会导致未定义的行为。

除此之外,您已将length声明为int(错误)和length == sizeof(name)的数组1.检查是否相等,而2.由于您不使用结果,因此不执行任何操作。这是一个无操作。即使您使用了赋值运算符(=),它仍然是错误的,因为数组不可分配,并且sizeof的返回值无论如何都不是数组。

下一个问题是sizeof将返回数组的大小(以字节为单位),而不是您读入的字符串的长度。在这种情况下,sizeof name将始终返回80。要查找字符串的逻辑长度(长度为空终止符),请使用strlen。所以......

int main(void)
{
    char name[80];
    printf("What's your name?\n");
    scanf("%s", name);
    printf("The length of your name is %zu\n", strlen(name));
}

最后,使用fgets代替scanf以避免缓冲区溢出。

fgets(name, sizeof name, stdin);

答案 1 :(得分:0)

length == sizeof(name)

缺少';'在标识符'printf'之前。你应该在main函数中返回一个值。

printf(“你的名字的长度是%s”,长度);

%s是字符串,你应该使用%d代表int。