查找字符串长度时出现分段错误

时间:2017-08-06 05:17:58

标签: c string pointers char string-length

计算字符串长度的函数;我认为这里的逻辑是正确的:

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

我在这里正确地接受了字符串并分配它吗?任何人都可以解释为什么我在这里得到分段错误?

2 个答案:

答案 0 :(得分:5)

您的s必须指向某事。以下是分配128个字节的示例:

s = malloc(128);

完成后请务必释放内存:

free(s);

请注意,您必须限制用户可以阅读的内容。

scanf("%127s", s);

我为NUL终结符留了一个额外的字节。

答案 1 :(得分:3)

main()函数的第二行是声明一个指针。但是,该指针永远不会被初始化为指向程序拥有的某些内存块。

建议使用其中一个堆分配函数(malloc,calloc,realloc)来初始化该指针。

使用未初始化的指针是未定义的行为,并且(如您所见)导致seg故障事件。

调用任何scanf()系列函数时,

  1. 始终检查返回值(而不是参数值)以确保操作成功。
  2. 使用'%s'输入/格式说明符,始终包含MAX CHARACTERS修饰符比输入的长度小1 缓冲区以避免任何缓冲区溢出。这种溢出是不确定的 行为并可能导致seg故障事件。