-2

代码:

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

我遇到分段错误。代码有什么问题?我已经包括stdio.h, stdlib.h, string.h.

4

4 回答 4

8

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

例子:

char * name = malloc( sizeof( char ) * MAX_STRING_LENGTH ) ;
于 2013-09-12T12:21:36.127 回答
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);
}
于 2013-09-12T13:40:36.467 回答
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);
}

问题是您没有为指针分配内存。所以分配内存 tp 指针与malloc(BUFSIZE). 最后,您还必须使用free(name).

于 2013-09-12T12:31:46.433 回答
1

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

利用

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

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

于 2013-09-12T12:35:24.077 回答