c语言中字符型数据在内存中,c语言字符串在内存中是如何存储的

  c语言中字符型数据在内存中,c语言字符串在内存中是如何存储的

  我将为假期做笔记。

  这个月可能会发表十几二十篇。

  这是目录)关于 \ 0 strlen strcpy strcpy strnccat strrtok strerror memset memcpy memmove memcmpperror对string的理解是什么

  什么是字符串‘你好世界’。\n ?这种由双引号引起的字符串称为字符串文字,简称string。C语言中经常处理字符和字符串,但C语言本身没有字符串类型,字符串通常放在常量字符串或字符数组中。

  字符串常量适用于不修改它们的字符串函数。

  注意:字符串的结束符号是一个转义符\0。\0是计算字符串长度时的结束标记,不作为字符串的内容。

  奇妙的事件会发生,没有结束的迹象。

  关于 \ 0 \ 0 的知识不属于字符串的内容,而属于字符串的结束分隔符。字的面值是0,占一个字节。

  “\ 0”和“0”之间有区别。“0”是字符0,ASCII码值是48。

  strlensize _ t strlen(const char * str);斯特伦标准参考

  字符串的结尾已经包含“\0”。strlen返回“\0”前的字符数

  参数指向的字符串必须以“\0”结尾

  注意函数的返回值是size_t,是无符号的,包括计算和无符号(容易出错)。

  #包含stdio.h

  #包含字符串. h

  int main()

  {

  const char * str1= abcdef

  const char * str2= bbb

  if(strlen(str2)-strlen(str1) 0)

  {

  printf( str 2 str 1 \ n );

  }

  其他

  {

  printf( Sr t1 str 2 \ n );

  }

  返回0;

  }

  //答案是str2 str1,因为计算值也是无符号模拟实现:

  strlen的模拟实现,通用计数器方法

  size_t my_strlen(char* arr)

  {

  size _ t count=0;

  while (*arr)

  {

  数数;

  arr

  }

  返回计数;

  }

  //递归实现

  size_t my_strlen(char* arr)

  {

  如果(!(*arr))

  {

  返回0;

  }

  其他

  {

  返回1 my _ strlen(arr 1);

  }

  }

  //指针减法

  size_t my_strlen(char* arr)

  {

  char * ret=arr

  while (*ret)

  {

  ;

  }

  返回(ret-arr-1);

  }

  strcpychar * strcpy(char * destination,const char * source);源字符串必须以“\ 0”结尾。

  将source指向的C字符串复制到destination指向的数组中,包括终止空字符(并在该点停止)。

  将源字符串中的 \ 0 复制到目标空间。目标空间必须足够大,以容纳源字符串。

  目标必须是可变的。

  模拟实现:

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

  {

  char * ret=dest

  断言(dest src);

  while((*dest=*src))

  {

  ;

  }

  返回ret

  }

  strcatchar * strcat(char * destination,const char * source);将源字符串的副本追加到目标字符串。destination中的终止空字符被s ource中的第一个字符覆盖,并且在destination中由两者串联而成的新字符串的末尾包含一个空字符。

  源字符串必须以“\ 0”结尾。目标空间必须足够大,以容纳源字符串的内容。

  目标空间必须是可修改的。

  把字符串追加到自己身上怎么样?这是一个无限循环。

  模拟实现:

  char* my_strcat(char* Dis,char* Sor)

  {

  char * ret=Dis

  断言(dissor);

  while (*Dis)

  {

  Dis

  }

  while (*Dis=*Sor)

  {

  ;

  }

  返回ret

  }

  strcmpint strcmp ( const char * str1,const char * str 2);这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,它将继续处理后面的字符对,直到字符不同或到达终止空字符。

  标准代码

  模拟实现:

  int my_strcmp(const char* arr1,const char* arr2)

  {

  断言(arr1 arr2)

  while (*arr1 *arr2 *arr1==*arr2)

  {

  arr1

  arr2

  }

  return * arr 1-* arr 2;

  }如果第一个字符串大于第二个字符串,将返回一个大于0的数字。如果第一个字符串等于第二个字符串,它将返回0。如果第一个字符串小于第二个字符串,它将返回一个小于0的数字。

  strncpychar * strncpy(char * destination,const char * source,size _ t num);将源的前num个字符复制到目标。如果在复制num个字符之前找到了源C字符串的结尾(由空字符表示),则用零填充destination,直到总共写入了num个字符。

  将num个字符从源字符串复制到目标空间。

  如果源字符串的长度小于num,则在复制源字符串后,将0追加到目标字符串的后面,直到num。

  strncatAppends将源到目标的前num个字符作为终止空字符。如果source中c字符串的长度小于num,则只复制到终止空字符为止的内容,也就是说,在字符串1之后添加字符串2的num个字符。

  如果n的长度比第二个字符串长,就会追加到\0,所以不会追加。附加的\ 0char * mystrncat (char * dst,constchar * src,size _ t n)将附加在末尾。

  {

  char * tmp=dst

  while (*dst)

  {

  夏令时;

  }

  int I;

  for(I=0;src[I]in;我)

  {

  dst[I]=src[I];

  }

  dst[I]=0;

  返回tmp

  }

  str strchar * str str(const char * str 1,const char * str 2);返回指向str1中第一个str2的指针,如果str2不是str1的一部分,则返回空指针。在字符串1中查找字符串2,并返回字符串1开头的地址。

  如果找不到,则返回NULL。

  如果str2是空字符串,直接返回str1的第一个地址。

  strtokchar * strtok ( char * str,const char * sep);Sep参数是一个字符串,它定义了一组用作分隔符的字符,如 @ . ,即“@”和“.”查找并划分第一个参数以指定一个字符串,该字符串包含0个或多个标记,这些标记由sep字符串中的一个或多个分隔符分隔。strtok函数在str中查找下一个标记,以\0结束,并返回指向该标记的指针。(注意:strtok函数会改变被操作的字符串,所以使用strtok函数拆分的字符串通常是临时复制的内容,可以修改。)strtok函数的第一个参数不为空,函数会在str中找到第一个标记,strtok函数会保存它在字符串中的位置。strtok函数的第一个参数为NULL,函数将从同一字符串中保存的位置开始查找下一个标记。如果字符串中没有更多的标记,则返回空指针int main()。

  {

  char str[]=-这是一个示例字符串。;

  char * pch

  printf(将字符串 %s 拆分为标记:\n ,str);

  pch=strtok (str,。-);

  而(pch!=空)

  {

  printf (%s\n ,PCH);

  pch=strtok (NULL,,-);

  }

  返回0;

  }

  strerrorchar * strerror(int errnum);打印错误消息(在这个阶段几乎不需要)

  使用

  printf(%s\n ,strerror(errno));

  //或者直接使用。

  佩罗尔(‘福彭’);

  memsetvoid *memset( void *dest,int c,size _ t count);Dest是要更改的变量,C是要更改的值,count是要更改的字节数

  memcpyvoid * memcpy(void * destination,const void * source,size _ t num);memcpy函数将num字节的数据从源位置反向复制到目标内存位置。当遇到“\ 0”时,此函数不会停止。如果源和目标之间有任何重叠,则复制的结果是未定义的。模拟实现:

  void * memcpy ( void * dst,const void * src,size_t count)

  {

  void * ret=dst

  断言(dst src);

  while (count - ) {

  *(char *)dst=*(char *)src;

  dst=(char *)dst 1;

  src=(char *)src 1;

  }

  返回(ret);

  }

  memvoid * memove(void * destination,constvoid * source,size _ tnum)和memcpy的区别在于,memmove函数处理的源和目标内存块可以重叠。如果源空间和目标空间重叠,您必须使用memmove函数来处理它。模拟实现:

  void * memmove ( void * dst,const void * src,size_t count)

  {

  void * ret=dst

  //正面-背面

  if (dst src) {

  while (count - ) {

  *(char *)dst=*(char *)src;

  dst=(char *)dst 1;

  src=(char *)src 1;

  }

  }

  //后-前

  否则{

  while (count - ) {

  *(*(char *)dst count-1)=*(*(char *)src count-1);

  }

  }

  返回ret

  }

  memcmpint memcmp ( const void * ptr1,

  常量void * ptr2,

  size _ t num);比较从ptr1和ptr2指针开始的字节数。

  返回值如下所示

  Perror将自动在屏幕上为您键入错误消息。

  你也可以传给他一个字符串,他会把这个字符串打印在错误信息之前,加在中间。

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: