str/文件操作/动态内存分配函数

C语言的动态内存分配 在定义数组的时候,必须明确指定数组的长度。这样,无论实际包含多少个元素,每次运行时,数组的长度都是不变的,就可能因实际包含元素过少造成内存空间的浪费,或过多而内存空间不够造成访问越界问题。因此,需要根据存储的元素个数动态地调整数组的大小,这就需要动态内存分配。C语言利用动态内存分配,在程序执行期间分配内存单元。动态内存分配常用于字符串、数组和结构体等。 阅读详情

str/文件操作/动态内存分配函数

============================

一、内置的输入输出函数(头文件:stdio.h)

1.读取

getchar—从键盘中获取字符

int getchar ( void );

①参数

  • 无

②返回值

  • 如果成功,显示出要输入的第一个字符的ASCII码值,并指向下一个字符
  • 如果失败,返回EOF
#include <stdio.h>
int main()
{
    int c;
        c = getchar();
        printf("%d",c);
    return 0;
}

getc—从流中获取字符

int getc ( FILE * stream );

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    FILE* pFile;
    pFile = fopen("myfile.txt", "r");
    if (pFile == NULL) perror("Error opening file");
    else
    {
        printf("%d\n", getc(pFile));
        printf("%d\n", getc(pFile));
        fclose(pFile);
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

这里的70是F的ASCII码值
105是i的ASCII码值

①参数

  • 文件输入流

②返回值

  • 如果成功,取流中一个字符的ASCII码值,并指向下一个字符
  • 如果失败,返回EOF

gets—从键盘获取字符串

char * gets ( char * str );

①参数

  • str—指向内存块的指针

②返回值

  • 如果成功,返回字符串的指针
  • 如果失败,返回EOF

2.写入

putchar—将字符写入标准输出

int putchar ( int character );

在这里插入图片描述

①参数

  • character—int类型要写入的字符

②返回值

  • 如果成功,返回写入的字符的 ASCII码值
  • 如果失败,返回EOF

③运行结果

  • 返回输入的字符

putc—将字符写入流

int putc ( int character, FILE * stream );

①参数

  • int类型要写的字符
  • stream—标准输出流

②返回值

  • 如果成功,返回写入的字符的ASCII码值
  • 如果失败,返回EOF

puts—将字符串写入标准输出流

int puts ( const char * str );

①参数

  • 要打印的字符串

②返回值

  • 如果成功,返回一个非负值
  • 如果失败,返回EOF

③运行结果

  • 将写入的字符串输出

3.fflush----- 清除读写缓冲区,在需要立即把输出缓冲区的数据进行物理写入

int fflush(FILE *stream)

返回值:
如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。

============================

二、str函数(头文件:string.h)

1.strlen-------------求字符串长度

int strlen(const char* string)

①参数

  • string---------字符串

②返回值

  • 字符串长度

③注意事项

  • 返回值类型为unsigned int
  • 遇到\0结束
  • 不包含\0

strlen的模拟实现 - my_strlen

int my_strlen(const char* string) {
assert(string != NULL);
int count = 0;
while (*string) {
string++;
count++;
}
return count;
}

2.strcpy-------------字符串拷贝

将src拷贝在des中

char* my_strcpy(char* des, const char* src)

①参数

  • des---------指向要复制内容的目标数组的指针。
  • src----------要复制的C字符串。

②返回值

  • des的起始地址

③注意事项

  • 返回值类型为char*
  • 遇到\0结束
  • 不包含\0

strcpy的模拟实现 - my_strcpy

char* my_strcpy(char* des, const char* src) {
	assert(des != NULL);
	assert(src != NULL);
	char* ret = des;
	while (*des = *src) {
		des++;
		src++;
	}
	return ret;
}

strncpy-------字符串拷贝

将size大小的src拷贝到des中

char* my_strcpy(char* des, const char* src,size_t size)

①参数

  • des---------指向要复制内容的目标数组的指针。
  • src----------要复制的C字符串。
  • size---------要复制的字符串的大小。

②返回值

  • des的起始地址

3.strcat--------------字符串追加

将src追加到des后面

char* my_strcat(char* des, const char* src)

①参数

  • des---------指向目标数组的指针
  • src----------要追加的字符串

②返回值

  • des的起始地址

③注意事项

  • 返回值类型为char*
  • 遇到\0结束
  • des字符串数组需要足够大,大到可以包含des和src数组的追加结果字符串
  • 不包含\0

strcat的模拟实现 - my_strcat

char* my_strcat(char* des, const char* src) {
	assert(des != NULL);
	assert(src != NULL);
	char* ret = des;
	while (*des) {
		des++;
	}
	while (*des++ = *src++) {
	}
	return ret;
}

strncat-----------------字符串追加

将固定大小的src追加在des后面

char* my_strncat(char* des, const char* src,size_t size)

①参数

  • des--------指向目标数组的指针
  • src---------要追加的字符串
  • size--------要追加的最大字符数

②返回值

  • des的起始地址

③注意事项

  • 不将src中\0追加,但追加结束后 + 一个\0

4.strcmp-------------字符串的比较

比较2字符串的ASCII值(一个字符一个字符比较,若相同,找下一个)

int my_strcmp(const char* str1, const char* str2)

①参数

  • str1---------要比较的字符串
  • str2---------要比较的字符串

②返回值
在这里插入图片描述

strcmp的模拟实现 - my_strcmp

int my_strcmp(const char* str1, const char* str2) {
while (*str1 == *str2) {	
if (*str1 = '\0') {
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}

strncmp—字符串的比较

比较2字符串size长度的ASCII值

int my_strcmp(const char* str1, const char* str2,size_t size)

①参数

  • str1---------要比较的字符串
  • str2---------要比较的字符串
  • size---------要比较的最大字符数

②返回值
在这里插入图片描述

5.strstr----------------查找字符串

将str2在str1中查找,并输出str2及之后的字符串

char* my_strstr(const charstr1, const charstr2)

①参数

  • str1---------要扫描的字符串
  • str2---------待查找字符串

②返回值

  • str1中str2出现时的指针

③注意事项

  • 若找不到,返回NULL指针

strstr的模拟实现 - my_strstr

char* my_strstr(const char*str1, const char*str2) {
const char* cp = str1;
const char* c = str2;
const char* s1 = str1;
const char* s2 = str2;
while (*cp) {
s1 = cp;
s2 = c;
while (*s1 == *s2 && *s1 && *s2) {
s1++;
s2++;
}
if (*s2 == '\0') {
return (char*)cp;
}
cp++;
}
return NULL;
}

6.strtok(str,sym)----查找特殊符号

在str1里查找stm(str2为各种字符,例:@),并记录初始地址

char * strtok ( char * str, const char * sym )

①参数

  • str1---------要扫描的字符串
  • str2---------待查找特殊符号

②返回值

  • str1中str2出现时的指针

③注意事项

  • 若找不到,返回NULL指针
  • 可以指定一个空指针,在这种情况下,该函数将继续扫描以前对该函数的成功调用结束的位置

strtok的应用举例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    char str[] = "- This, a sample string.";
    char* pch;
    printf("Splitting string \"%s\" into tokens:\n", str);
    pch = strtok(str, ",.-");
    while (pch != NULL)
    {
        printf("%s\n", pch);
        pch = strtok(NULL, " ,.-");
    }
    return 0;
}

7.strerror(a)---------把错误码翻译成错误信息

char * strerror ( int errnum );

①参数

  • errnum----------------错误号

②返回值
指向描述错误errnum的错误字符串的指针。

③注意事项

  • errno----------------C语言自带的全局变量,0就是没错,默认在其中放0
  • perror(“函数名::realloc”)–输出错误信息(函数名::realloc + “:” + 空格 + 错误信息)

8.strchr--------------字符串中搜索一个字符

const charstrchr(const char str,int character)

①参数

  • str----------------要搜索的字符串
  • character-----------------要搜索的字符

②返回值

  • 这个字符出现在字符串中的位置指针

============================

三、内存操作函数(头文件:string.h)—mem

1.memcpy------------内存块的复制

void * memcpy ( void * destination, const void * source, size_t num );

memcpy的模拟实现:

void * memcpy ( void * dst, const void * src, size_t count)
{
  void * ret = dst;
  assert(dst);
  assert(src);
  /*
   * copy from lower addresses to higher addresses
   */
  while (count--) {
    *(char *)dst = *(char *)src;
    dst = (char *)dst + 1;
    src = (char *)src + 1;
  }
 
  return(ret);
}

①参数

  • destination----------指向要复制内容的目标数组的指针
  • source---------------指向要复制的数据源的指针
  • num------------------要复制的字节数

②返回值

  • destination的指针

2.memmove----------移动内存块

void * memmove ( void * destination, const void * source, size_t num );

memmove的模拟实现:

void * memmove ( void * dst, const void * src, size_t count)
{
  void * ret = dst;
​
  if (dst <= src || (char *)dst >= ((char *)src + count)) {
    /*
    * Non-Overlapping Buffers
    * copy from lower addresses to higher addresses
    */
    while (count--) {
        *(char *)dst = *(char *)src;
        dst = (char *)dst + 1;
        src = (char *)src + 1;
   }
 }
  else {
    /*
    * Overlapping Buffers
    * copy from higher addresses to lower addresses
    */
    dst = (char *)dst + count - 1;
    src = (char *)src + count - 1;
​
    while (count--) {
        *(char *)dst = *(char *)src;
        dst = (char *)dst - 1;
        src = (char *)src - 1;
   }
 }
​
  return(ret);
}

①参数

  • destination----------------指向要复制内容的目标数组的指针
  • source---------------------指向要复制的数据源的指针
  • num------------------------要复制的字节数

②返回值

  • destination的指针

3.memset-------------内存替换

void * memset ( void * ptr, int value, size_t num );

①参数

  • ptr----------------要替换的内存块的指针
  • value------------要设置的值
  • num-------------要设置几个字节的值

②返回值

  • ptr指针

4.memcmp----------内存块的比较

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

①参数

  • ptr1----------------要比较内存块的指针
  • ptr2----------------要比较内存块的指针
  • num---------------要比较的字节数

②返回值
在这里插入图片描述

============================

四、文件操作函数(头文件:stdio.h)

1.fopen----------打开文件

FILE * fopen ( const char * filename, const char * mode )

①参数

  • filename---------要打开的文件的名称的字符串

②返回值

  • 指向流的指针

③注意事项

  • 如果打开失败,返回NULL

2.fclose----------关闭文件

int fclose(FILE* stream)

①参数

  • 指向即将关闭的流

②返回值

  • 如果已关闭,返回0
  • 如果未关闭,返回EOF

③注意事项

  • 关闭之后需要将fclose中的指针置为空

stream = NULL

	//文件的打开和关闭
	FILE*ret = fopen("文件的打开和关闭.txt", "r");	
	if (ret == NULL) {
		perror("open file for reading");
		return 1;
	}
	fclose(ret);
	ret = NULL;

3.fputc—把c字符放到stream流中

int fputc(int c,FILE* stream)

①参数

  • 要写入的字符
  • 输出流

②返回值

  • 如果成功,返回被写入的字符
  • 如果失败,返回EOF
fputc("h", ret2);

fputs—把str字符串放到stream流中

int fputs ( const char * str, FILE * stream );

①参数

  • 要写入的字符串
  • 输出流

②返回值

  • 如果成功,返回一个非0的值
  • 如果失败,返回EOF

③注意事项

  • 遇到\0为止,且\0不被放入

4.fgetc—把字符从stream流中取出

int fgetc ( FILE * stream );

①参数

  • 要取出字符的stream流

②返回值

  • 如果成功,返回c字符
  • 如果失败,返回EOF

fgets—把字符串从stream流中取出

char * fgets ( char * str, int num, FILE * stream );

①参数

  • 字符串数组指针
  • 要拿到的最大字节数
  • 输入流

②返回值

  • 如果成功,返回str
  • 如果遇到feof,

5.fscanf—把c字符放到stream流中

6.fprintf—把c字符放到stream流中

7.fread—把c字符放到stream流中

8.fwrite—把c字符放到stream流中

============================

五、动态内存分配函数(头文件:stdlib.h)

1.malloc—动态开辟内存空间

void* malloc (size_t size);

①参数

  • size---------内存块的大小

②返回值

  • 成功时,指向由函数分配的内存块的指针。
  • 如果函数未能分配请求的内存块,则空指针会被归还。

2.realloc—重新开辟内存空间

void* realloc (void* ptr, size_t size);

①参数

  • ptr---------以前内存块的指针(如果是空指针,相当于malloc,重新分配一个新块)
  • size---------内存块的新大小

②返回值

  • 指向重新分配的内存块的指针

3.free—释放自己开辟的空间

free(*ptr);

①参数

  • ptr---------要释放空间的开始地址

②free函数的解释
free函数就是将指针指定的内存空间释放,如果发现指定的内存空间不是在与malloc匹配的内存空间,free操作就会失败。所以free做的是释放指针指向的用malloc申请的特定的内存空间,而不是指针本身。

4.rand-----生成随机数

使用rand()函数产生1-100以内的随机整数:
int number1 = rand() % 100;

5.srand-----用来设置rand()产生随机数时的随机数种子

srand(time(0));

============================

六、字符分类函数(头文件:ctype.h)

在这里插入图片描述

1.iscntrl---------检查c是否是控制字符

int iscntrl ( int c );

①参数

  • c:要检查的字符

②返回值

  • 如果是控制字符,返回与0不同的值
  • 如果不是控制字符,返回0

2.isspace------检查c是否是空白字符

int isspace ( int c );

①参数

  • c:要检查的字符

②返回值

  • 如果是空白字符,返回与0不同的值
  • 如果不是空白字符,返回0

3.isdigit--------检查c是否是十进制数字字符

int isdigit ( int c );

①参数

  • c:要检查的字符

②返回值

  • 如果是十进制数字字符,返回与0不同的值
  • 如果不是十进制数字字符,返回0

4.islower------检查c是否是小写字母

int islower ( int c );

①参数

  • c:要检查的字符

②返回值

  • 如果是小写字母,返回与0不同的值
  • 如果不是小写字母,返回0

5.isupper-----检查c是否是大写字母

int isupper(int c);

①参数

  • c:要检查的字符

②返回值

  • 如果是大写字母,返回与0不同的值
  • 如果不是大写字母,返回0

6.isalpha-----检查c是否是字母

int isalpha(int c);

①参数

②返回值

  • 如果是字母,返回与0不同的值
  • 如果不是字母,返回0

7.isalnum----检查c是否是字母/数字

int isalnum(int c);

①参数

  • c:要检查的字符

②返回值

  • 如果是字母/数字,返回与0不同的值
  • 如果不是字母/数字,返回0

8.ispunct-----检查c是否是标点符号

int ispunct(int c);

①参数

  • c:要检查的字符

②返回值

  • 如果是字母/数字以外的图形字符,返回与0不同的值
  • 如果不是字母/数字以外的图形字符,返回0

9.isgraph-----检查c是否是图形字符

int isgraph(int c);

①参数

  • c:要检查的字符

②返回值

  • 如果是图形字符,返回与0不同的值
  • 如果不是图形字符,返回0

10.isprint-----检查c是否是可打印字符

int isprint(int c);

①参数

  • c:要检查的字符

②返回值

  • 如果是可打印字符,返回与0不同的值
  • 如果不是可打印字符,返回0

============================

七.数学计算的函数(头文件:math,h)

1.fmax(x,y)

①参数

  • x,y要比较大小的两个数

②返回值

  • x,y中的较大值

2.fmin(x,y)

①参数

  • x,y要比较大小的两个数

②返回值

  • x,y中的较小值

3.abs(x)

int abs(int x)

①参数

  • x要取绝对值的数

②返回值

  • x的绝对值

============================

八.编译器自带的函数

1.qsort------base数组排序

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

①参数

  • base----- 指向要排序的数组的第一个元素的指针。
  • nitems— 由 base 指向的数组中元素的个数。
  • size------ 数组中每个元素的大小,以字节为单位。
  • compar-- 用来比较两个元素的函数,即函数指针(回调函数)

2.reverse-----旋转

reverse(int* nums,int start,int end)

①参数

  • nums-----要旋转的数组的第一个元素的指针
  • start-------要旋转的数组的起始地址
  • end---------要旋转的数组的结束地址

============================

九.时钟(time.h)

1.clock-----当前的时间(ms)__1000ms = 1s

clock_t clock(void)
//排序所用的时间
time_t begin = clock();
insetSort(copy1,n);
time_t end = clock();
printf("insertSort: %d\n",end - begin);

============================

十.windows头文件(windows.h)

1.Sleep-----睡眠多少s

在这里插入图片描述

该函数返回自程序启动起,处理器时钟所使用的时间。

============================

十一.查看进程<sys/types.h>

1.gitpid()-----查看进程id(每次打开id都改变)

2.gitppid()-----查看父进程id(父进程id不变)

============================

十二.系统函数

1.open-----打开文件在这里插入图片描述

在这里插入图片描述
mode:创建属性

打开文件的方式

在这里插入图片描述
在这里插入图片描述

2.read-----读取文件

在这里插入图片描述

3.write-----写文件

在这里插入图片描述
文件是由数组来管理的

   struct file*fd_array[]

数组fd_array中包含着文件的描述符fd(整数)_0-n
其中,0号文件描述符叫做标准输入
1号描述符叫做标准输出
2号描述符叫做标准错误

fd:文件的描述符
每个文件有个文件的struct
struct file{
//文件的属性信息
//文件的缓冲与存储位置
}

============================

十三.系统函数<unistd.h>

1.dup2-----将oldfd拷贝给newfd,只进行内容的拷贝

int dup2(int oldfd, int newfd);

============================

char* str和char str[]的区别 char str[]="abcdef",这个数组的存储空间是在栈中开辟的,也就是说它的每个元素一次为'a','b','c','\0',将这几个值复制到str的位置中。       对于char *str="abcdef",str指向的是静态存储区,"abcdef"是位于常量区的,指针str只是指向了这个位置。注意:它与上面的复制不是一回事。既然位于常量区,那么这些值就不能被修改。而上面数组中,要 阅读详情

相关推荐

STM32嵌入式开发中malloc动态内存分配原理与实践指南

动态内存分配是C语言编程中的核心机制,它允许程序在运行时根据需要申请和释放内存,从而提升内存利用的灵活性。其原理是通过维护一个称为“堆”的内存区域,由malloc函数根据请求大小查找并返回可用内存块地址,free函数则负责回收。在嵌入式系统尤其是STM32这类资源受限的MCU中,这项技术的价值尤为突出,它能有效应对数据采集通道数可变、通信数据包长度不定等场景,避免静态数组按最坏情况分配导致的内存浪费。然而,嵌入式环境缺乏成熟操作系统的内存管理支持,不当使用极易引发内存碎片、分配失败甚至系统HardFault

weixin_30628801的博客 373

python文件操作(2)

python文件操作(2) 文件的基本操作 一、访问文件的操作过程 打开文件 读取文件 将信息读到内存 写入文件 关闭文件 保存文件并释放内存空间 二、文件的基本操作 1、打开文件(open) file : 要打开的文件名( str ) mode: 打开文件的方式( str ) encoding: 文件编码方式(str) errors: 当发生编码错误时的处理方式(str) ​ ‘ignore’或’strict’(默认) buffering: 缓存方式

m0_54232496的博客 898

srtcutter:STR字幕剪辑助手

时间码是一种用于标注媒体文件中特定时间点的技术,它允许用户或软件工具精确地引用音频、视频或字幕文件中的某一帧。在字幕文件中,时间码通常指定了每个字幕事件的开始时间和结束时间。时间码的格式有很多种,比如“时:分:秒:帧”(H:MM:SS:FF),在某些应用场景中,也会使用“帧”(仅限于视频文件)作为时间的参考单位。这种格式特别适合于专业视频编辑和后期制作,因为它能够提供到帧级别的精确控制。Java是一种面向对象的编程语言,它强调封装、继承和多态性。

weixin_42465140的博客 1096

文本处理中常见的str、list等格式转换

归纳 在文本处理的nlp领域,经常需要将大量文本格式进行不断的转换进而达到模型输入的需求,每次转换我总在尝试,也觉得很费时间,希望能够总结一些常见类型转换,方便以后随时调用。 常用的函数: split: str.split(str="", num=string.count(str)) split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 ...

popofzk的博客 1459

Virtualbox “Kernel driver not installed (rc=-1908)”问题全面解析与修复指南

本文全面解析了Virtualbox出现'Kernel driver not installed (rc=-1908)'错误的原因及修复方法。详细介绍了如何通过重新安装virtualbox-dkms、处理Secure Boot特殊情况等步骤解决该问题,并提供了预防措施与最佳实践,帮助用户避免类似错误再次发生。

weixin_30352645的博客 530

react-window 大数据列表和表格数据渲染组件之虚拟滚动

ReactWindow是一个高性能的React虚拟滚动组件库,专门用于高效渲染大型列表和表格数据。它通过“窗口化”技术,仅渲染用户可见区域的内容,大幅提升性能并减少内存消耗。主要特点包括:支持固定/可变大小列表项、多种布局类型(垂直/水平/网格)、轻量级设计(不足5KB)以及平滑的滚动体验。相比传统渲染方式,它能轻松处理成千上万条数据,并提供自动滚动、自适应容器大小等高级功能。与同类库相比,ReactWindow具有更简洁的API和更优的性能表现,是处理大数据量渲染场景的理想选择。

前端开发-前端技术分享 1137

python中str用法_python中的str有什么用

python中srt的全称是SubRip Text,srt文件打开方式srt文件可以使用系统自带的文本处理器来打开,比如notepad.exe,write.exe,word等文件处理软件。在Python中,str 表示字符串类 ,也可以是将变量强制转换为字符串的函数,写作str()Python中的str可以表示字符串类,也可以是将变量强制转换为字符串的函数,写作str()。str函数是Python...

weixin_39554434的博客 1796

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

python中str什么作用,python中str的作用

在Python中,str 表示字符串类 ,也可以是将变量强制转换为字符串的函数,写作str()大家好,本文将围绕python中str什么作用展开说明,python中str的作用是一个很多人都想弄明白的事情,想搞清楚python中的str()需要先了解以下几个事情。Python中的str可以表示字符串类,也可以是将变量强制转换为字符串的函数,写作str()以上就是python里的str是什么意思的详细内容,更多请关注php中文网其它相关文章!str函数是Python内置函数的一种,可以直接使用,无需调用。

2301_81900386的博客 664

人工智能数据治理——解读AI时代数据治理白皮书 2025【附全文阅读】

摘要:该白皮书面向企业数字化负责人及AI项目推进人员,探讨AI时代数据治理的战略升级。提出"好数据+好数据知识"双基石理念,强调数据需满足"三高"标准(高精度、一致性、时效性)并构建语义知识库。构建四层治理框架,包括数据采集处理、合规安全、知识库建设及质量改进,并介绍AI赋能治理的新范式,如智能ETL和治理Agent体系。同时分析"软件+AI+好数据"的应用模式,为企业实现智能数据治理提供实践指导。(149字)

cdfunlove的博客 633

TIA西门子博途V19安装教程及注意事项

TIA西门子博途V19安装教程及注意事项

Robot_PLC_HMI_Automation 1万+

c++学习笔记 类和动态内存分配与特殊成员函数

上一个例子中是仿string类Str使用的是char数组类储存,但是这样有大小限制(100),能不能让它动态的进行调整大小呢? 已定义的char数组行不通,但是让一个指针指向一块规定大小的内存是可以的,于是我可以使用内存分配来完成任意大小的Str类 这种方法叫动态内存分配:

nonororo的博客 764

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

1945

string和初学指针和动态内存分配

比较的标准是ASCII从第一个字符开始比,直到遇到不同的字符或者返回NULL(0)若STR1[I]>STR2[I],返回 1若STR1[I]<STR2[I],返回 -1若STR1[I]=STR2[I],返回 0。

2401_87328658的博客 583

torch_npu 用法笔记

torch_npu 用法笔记

jacke121的专栏 1536

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3317

C语言——动态内存管理

本文系统介绍了C语言动态内存管理的核心内容,包括malloc、free、calloc、realloc四大函数的使用方法、常见错误及解决方案。文章首先阐述了动态内存分配的必要性,然后详细讲解了各个函数的功能、参数和返回值,并通过代码示例演示正确用法。针对动态内存管理中易出现的6种错误(如NULL解引用、越界访问、错误释放等)进行了分析。最后通过两道经典笔试题,深入剖析了返回栈地址和内存泄漏问题,并介绍了柔性数组这一特殊数据结构。文末总结了C/C++程序的内存区域划分,为读者构建完整的动态内存管理知识体系。

Chen_LSN的博客 1138

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C语言动态内存分配与malloc/free使用详解

动态内存分配是C语言编程中的核心概念,它允许程序在运行时根据需要从堆区申请内存空间。通过malloc、calloc等函数实现按需分配,配合free函数手动释放,这种机制突破了静态数组的固定大小限制,使程序能够灵活处理未知规模的数据。在操作系统层面,内存管理涉及虚拟内存映射和页表控制等底层原理。正确使用动态内存可以提升内存利用率,但需要警惕内存泄漏和悬垂指针等问题。实际开发中,Valgrind等工具能有效检测内存错误,而封装分配函数、实现内存池等技术可提升工程可靠性。本文以学生管理系统等典型场景为例,深入解析

weixin_33782386的博客 703

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

c语言学习记录——动态内存分配

学习笔记及 动态内存分配的一些理解。

weixin_54906953的博客 302

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

类和动态内存分配——C++ Prime Plus CH12

学习记录

m0_58378145的博客 485

malloc 不能返回动态内存

malloc 不能返回动态内存 关于malloc的理解: #include #include void getmemory(char *p) { p=(char *) malloc(100); strcpy(p,"hello world"); } int main( ) { char *str=NULL; getmemory(str); prin

1776

【C语言】动态内存管理

本文聚焦 C 语言动态内存管理,先阐述因静态分配局限需动态分配内存,介绍 `malloc`/`free`、`calloc`、`realloc` 函数用法,剖析常见内存错误(如空指针、越界等),分析经典笔试题,讲解柔性数组特性优势,最后说明程序内存区域划分,助掌握动态内存管理关键知识。

记录了从0学习Java技术栈的日常 1279

从内存分配看函数参数传递问题

以下程序各有何问题? *********************************************************************************************************************************** 1. void getmemory(char*p) { p=(char *) malloc(

3629

动态内存管理

动态内存管理基本知识点

m0_59074850的博客 128

C语言从入门到精通 第九章(指针与动态内存分配)【下】

本文摘要主要介绍了C语言动态内存管理和相关字符串、内存操作函数。在动态内存管理部分,详细讲解了malloc、calloc、realloc和free函数的使用方法和注意事项,包括内存分配、释放和调整空间大小的操作。同时列举了常见的动态内存操作错误,如空指针解引用、内存泄漏等问题。文章还介绍了几个重要的字符串和内存操作函数,包括strstr(查找子串)、strtok(字符串分割)、strerror(错误信息获取)、memcpy(内存拷贝)、memmove(可处理重叠的内存拷贝)和memcmp(内存比较)等函数的

Zevalin的博客 1260

c语言中的动态内存分配~

<br />在最近的笔试中遇到过很多动态内存分配的考题~<br />现在整理一个列子,欢迎大家参考指正~~<br /> <br />A: <br />void GetMemory(char*p)<br />{<br />p=(char*)malloc(100);//p是字符串指针,作为形参传过来,对其进行动态内存分配是没有效果的,<br />}<br /><br />void Test(void)<br />{<br />char*str=NULL;<br />GetMemory(str);//这个函数调用

jeffreyst的专栏 734
上一篇: 字符分类函数(判断字符为什么类型字符)
下一篇: i++和++i区别
Code_Paradise
博客等级 码龄7年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值