//有一字符串,其中包含数字,提取其中的数字,要求动态分配内存保存
//提示:先计算出有几个数字,然后根据数字个数来开辟空间
// char string[] = "dfdsfsf2f4gf5hy7g5fd3ds4";
// int i = 0, count = 0;
// while (*(string + i) != '\0') {
// if (*(string + i) <= '9' && *(string + i) >= '0') {
// count++;
// }
// i++;
// }
// char *p = malloc(sizeof(char) * (count + 1));
//
// int k = 0, j = 0;
// while (*(string + k) != '\0') {
// if (*(string + k) >= '0' && *(string + k) <= '9') {
// *(p + j) = *(string + k);
// j++;
// }
// k++;
// }
// //添加结束符\0
// *(p + j) = '\0';
// printf("%s\n", p);
// free(p);
// p = NULL;
//输入3个单词,动态分配内存保存单词,并在最后输出
//提示:定义一个指针数组保存数据 char * word[3] = {0};
// char * words[3] = {0};
// char temp[100] = {0};
// for (int i = 0; i < 3; i++) {
// scanf("%s", temp);
// unsigned long length = strlen(temp) + 1;
// words[i] = malloc(sizeof(char) * length);
// strcpy(words[i], temp);
// }
// for (int i = 0; i < 3; i++) {
// free(words[i]);
// words[i] = NULL;
// }
// void * calloc(n, size);
// 分配n个size大小的内存空间;
// n和size是无符号整型;
// calloc和malloc的区别:calloc会把内存中的数据清零,效率低
// int *p = calloc(5, 4);
// free(p);
// p = NULL;
// void *realloc(p, size)
// 给定一个地址,从这个地址开始,分配size个字节的内存
// p是指针,size是无符号整型
// realloc会先从地址p开始往下找,如果有size个没有使用的字节,就直接标记,并申请;如果发现不够的话,就取堆区的其他地方找一段连续的内存空间,如果找到,就先把之前所申请的内存释放,再把指针指向新找到的内心空间,如果找不到,返回NULL
// int *p = malloc(2);
// printf("%p\n", p);
// p = realloc(p, 4);
// printf("%p\n", p);
// free(p);
// p = NULL;
// void *memset(void *s, int c, unsigned long n)
// 从s指向的内存开始初始化n个字节的内容为c
// char *p = malloc(5);
// p = memset(p, 66, 10);
// printf("%s\n", p);
//void *memcpy(void *dest,const void*source, zize_t n)
// 从source指向的内存开始拷贝到的dest,拷贝n个字节
// char string1[] = "iPhone";
// char string2[] = "ABC";
// memcpy(string1, string2, 2);//ABhone
// memcpy(string1 + 3, string2, 2);//iPhABe
// printf("%s\n", string1);
// int memcmp(const void *buf1, const void *buf2, unsigned int count)
// 比较buf1和buf2指向的内存是否相同,比较count个字节
// int *p1 = malloc(4);
// *p1 = 1;
// int *p2 = malloc(8);
// *p2 = 3;
// int result = memcmp(p1, p2, 1);
// printf("%d\n", result);
//定义两个指针,分别用malloc,calloc 对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组,如果相同打印Good 否则打印Failed
int *p1 = malloc(sizeof(int) * 3);
int *p2 = calloc(3, 4);
memset(p1, 0, sizeof(int) * 3);
for (int i = 0; i < 3; i++) {
*(p1 + i) = arc4random() % 3 + 1;
*(p2 + i) = arc4random() % 3 + 1;
}
if (memcmp(p1, p2, sizeof(int) * 3) == 0) {
printf("Good!\n");
}else{
printf("Failed…\n");
}
free(p1);
p1 = NULL;
free(p2);
p2 = NULL;
|
|