我不断收到此错误 分段错误(核心转储)
我的代码:
#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 表示整数。