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

-1 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);
}
Run Code Online (Sandbox Code Playgroud)

编辑

好的,这是我的新代码

#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));
}
Run Code Online (Sandbox Code Playgroud)

它仍然无法正常工作.

Ed *_* S. 8

printf("The length of your name is %s", length);
Run Code Online (Sandbox Code Playgroud)

%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));
}
Run Code Online (Sandbox Code Playgroud)

最后,使用fgets而不是scanf避免缓冲区溢出.

fgets(name, sizeof name, stdin);
Run Code Online (Sandbox Code Playgroud)