int find(char *buf, char* sub) {
int len = strlen(buf);
char *p = (char*)malloc(len*2+1);
memset(p, 0x00, len*2+1);
strcpy(p, buf);
strcat(p, buf);
if ( strstr(p, sub) == NULL )
return 0;
else
return 1;
}
10 个解决方案
#1
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!
#2
char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);
#3
malloc开辟动态内存空间的大小由你自己决定,memset函数用于初始化
#4
malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。
#5
开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点
#6
多谢指教,那个开辟内存刚开始申请多少
#7
可以考虑需要多少申请多少,如果第一次申请的不够,也可以使用realloc追加
#8
char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);
strcpy (p,arr);
strcat(p,arr)
所以是len*2+1
不知道对不对
#9
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!
懂了,,多谢指教。。。
#10
比如你定义一个数组,char str[5];这是可以的,如果你定义一个char str[num];那就是不可以的(新标准可能可以)也就是里边的数量不能是变量,这个时候就需要动态创建这个数组了,memset是将内存初始化为某个值,相当于你申请了一块地,需要自己修整一下,才能使用
#1
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!
#2
char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);
#3
malloc开辟动态内存空间的大小由你自己决定,memset函数用于初始化
#4
malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。
#5
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!
开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点
#6
malloc申请的空间是根据动态需要来的,比如程序运行开始不知道应该申请多少内存。运行过程中知道了需要多少内存,就是使用malloc/realloc;
从你的这个函数里来看,也可以不memset,strcpy/strcat会将'\0'拷贝值p中,memset是初始化,因为malloc的内存空间的数据是随机数,memset一下可以初始化。
多谢指教,那个开辟内存刚开始申请多少
#7
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!
开辟的大小,怎么看,每次申请是用多少申请多少,还是要多申请一点
可以考虑需要多少申请多少,如果第一次申请的不够,也可以使用realloc追加
#8
char *p = (char*)malloc(len*2+1); *2干什么? char *p = (char*)malloc(len+1);
strcpy (p,arr);
strcat(p,arr)
所以是len*2+1
不知道对不对
#9
你应该是初学者,malloc用于在堆上动态分配内存,如果分配成功,通过返回的指针就能使用了,memset 函数是用初始化内存的,因为用内存上会有垃圾值!
懂了,,多谢指教。。。
#10
比如你定义一个数组,char str[5];这是可以的,如果你定义一个char str[num];那就是不可以的(新标准可能可以)也就是里边的数量不能是变量,这个时候就需要动态创建这个数组了,memset是将内存初始化为某个值,相当于你申请了一块地,需要自己修整一下,才能使用