代码:
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
.
代码:
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
.
您没有为指向 char 的指针分配任何内存name
。
例子:
char * name = malloc( sizeof( char ) * MAX_STRING_LENGTH ) ;
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);
}
尝试这个,
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)
.
代替char * name = malloc( sizeof( char ) * MAX_STRING_LENGTH ) ;
利用
char * name = malloc(MAX_STRING_LENGTH+1 ); //+1 is to store Null character
所以sizeof(char)==1
你可以避免它。