代码:
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
。
答案 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
所以你可以避免它。