我一直收到此错误分段错误(核心转储)
我的代码:
#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));
}
它仍然不起作用。
答案 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。