我一直得到这个错误分段错误(核心转储)
我的代码:
#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)
它仍然无法正常工作.
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)