从用户获取字符串时出现分段错误

时间:2013-09-12 12:21:05

标签: c segmentation-fault

代码:

int main()
{
  char *name=NULL;
  int n;
  printf("\nenter the string\n");
  scanf("%s",name);
  n=strlen(name);
  printf("%d",n);
  return 0;
}

我遇到了分段错误。代码有什么问题?我收录了stdio.hstdlib.hstring.h

4 个答案:

答案 0 :(得分:8)

您没有为指向char name的指针分配任何内存。

示例:

char * name = malloc( sizeof( char ) * MAX_STRING_LENGTH ) ;

答案 1 :(得分:2)

C不是托管语言,所以你需要告诉你的字符串(char *)你记忆中的内存是多少。这是malloc函数。

顺便说一下,没有GarbageCollector,所以当你完成使用它时你需要释放你的char *。

但是要小心,malloc可以返回null,所以你的char *将无法存储任何char!

int main(int argc, char **argv)
{
    char *name = null;
    // Malloc your char *
    if ((name = malloc(sizeof( char ) * LENGTH_OF_YOUR_LARGER_INPUT)) == null)
    return;
    int n;
    printf("\nenter the string\n");
    scanf("%s",name);
    n=strlen(name);
    printf("%d",n);
    // Free the allocated memory to your char *
    free(name);
}

答案 2 :(得分:1)

试试这个,

int main()

{
  char *name = malloc(sizeof( char ) * LENGTH); // define LENGTH as you desired

  int n;
  printf("\nenter the string\n");
  scanf("%s",name);
  n=strlen(name);
  printf("%d",n);

  free(name);
}

问题是你没有为指针分配内存。所以用malloc(BUFSIZE)分配内存tp指针。最后,您必须使用free(name)释放已分配的内存。

答案 3 :(得分:1)

而不是char * name = malloc( sizeof( char ) * MAX_STRING_LENGTH ) ;

USE

 char * name = malloc(MAX_STRING_LENGTH+1 ); //+1 is to store Null character 

sizeof(char)==1所以你可以避免它。