C语言 我不断收到此错误分段错误(核心转储)



我不断收到此错误 分段错误(核心转储)

我的代码:

#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));
}

它仍然不起作用。

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

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

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

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

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

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

fgets(name, sizeof name, stdin);

length == sizeof(name)

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

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

%s 表示字符串,应使用 %d 表示整数。

相关内容

  • 没有找到相关文章

最新更新