计算字符串长度的函数;我认为这里的逻辑是正确的:
int strlength(char *s)
{
int count=0;
while(*s!='\0')
{
count++;
s++;
}
return count;
}
int main(void) {
char *s;
int length;
printf("enter your string ");
scanf("%s",s);
length = strlength(s);
printf("string length:%d",length);
return 0;
}
我在这里正确地接受了字符串并分配它吗?任何人都可以解释为什么我在这里得到分段错误?
答案 0 :(得分:5)
您的s
必须指向某事。以下是分配128个字节的示例:
s = malloc(128);
完成后请务必释放内存:
free(s);
请注意,您必须限制用户可以阅读的内容。
scanf("%127s", s);
我为NUL终结符留了一个额外的字节。
答案 1 :(得分:3)
main()函数的第二行是声明一个指针。但是,该指针永远不会被初始化为指向程序拥有的某些内存块。
建议使用其中一个堆分配函数(malloc,calloc,realloc)来初始化该指针。
使用未初始化的指针是未定义的行为,并且(如您所见)导致seg故障事件。
调用任何scanf()系列函数时,