设为首页 加入收藏

TOP

C语言字符串基本操作(一)
2019-05-23 14:37:20 】 浏览:203
Tags:语言 字符串 基本操作

在 C 语言中,字符串是由数字、字母、下划线组成的一维字符数组,并且使用 null 字符 '\0' 作为终止符号。字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefg”,则s[0]=“a”,s[1]="b"。


字符实际上是以对应的ASCII数值的形式在内存中存储的。 对一个字符强制转换成int类型,得到的就是该字符的ASCII码。


字符与字符相减,其实就是它们对应的ASCII码相减,得到的是它们的ASCII码之间相差的距离。


C中函数返回字符串的4种方法


函数返回字符串的两个条件 1. 返回一个字符串地址(首地址), 2. 保证这块地址的内存空间不会随着函数退出而销毁
1.将字符串指针作为函数参数传入,并返回该指针
2.使用malloc申请的堆空间,返回申请的堆地址,注意释放
3.返回一个static定义的静态局部变量
4.使用全局变量



1.  将字符串指针作为函数参数传入,并返回该指针


这种方法一般在函数内复制一份该字符串指针的首地址,通过它操作首地址指向的元素,及其后边的元素,这样操作 就相当于直接操作原始字符串内容。例如strcpy函数:



char* strcpy(char* des,const char* source)
  {
      char* r=des;
      assert((des != NULL) && (source != NULL));
      while((*r++ = *source++)!='\0');
      return des;
  }


 


2. 使用malloc函数动态分配内存,函数可以返回该内存地址


malloc申请的内存位于堆上,不会被系统自动释放掉,可以从函数中返回,但是切记要在主调函数中使用free主动释放该空间。



#include <stdio.h>
  #include <string.h>
  #include <stdlib.h>


  char * return_Pchar_malloc()
  {
      char * str2;
      str2 = (char *)malloc(10);
      strcpy(str2,"Hello!");
      return str2;
  }


  int main()
  {
      char * str1;
      str1 = return_Pchar_malloc();
      printf("%s\n",str1);
      //记住一定要用free释放,否则会造成内存泄露
      free(str1);
      return 0;
  }



3. 返回一个静态局部变量


使用static修饰的静态变量存放位置是在全局数据区,在主程序运行的整个生命周期中都存在,不会随着函数的退出而销毁。



#include <stdio.h>
  #include <string.h>
  #include <stdlib.h>


  char * return_Pchar_static()
  {
      static char str2[10];
      strcpy(str2,"Hello!");
      return str2;
  }


  int main()
  {
      char * str1;
      str1 = return_Pchar_static();
      printf("%s\n",str1);   
      return 0;
  }


 



4. 使用全局变量


全局变量是老大,没啥说的。


 


那么可否在函数中返回一个常量字符串指针?如下:



#include<stdio.h>
 #include<stdlib.h>
 #include<string.h>


char* return_pstr(){
    char* str = "HELLO";
    return str;
 }


int main(){
    char * str = return_pstr();
    printf("%s\n",str);
 }


 


答案是可以的,但也是危险的!


字符常量位于静态数据区里的文字常量区,生命周期是整个函数,但是字符常量是只读的,任何尝试修改字符常量的操作都会导致运行错误。


 



1. 数字转换成字符串、 字符串转换成数字


 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


//数字转换成字符串
void itoa(int num,char* str){
    int i=0,length=0,temp=0;
   
    while(num>0){
        str[i]=num%10+'0'; //数字+'0'转换成字符
        i++;
        num=num/10;
    }
    str[i]='\0';
   
    length = strlen(str);
    //字符逆序,注意终止条件是长度的一半
    for(int j=0;j<length/2;j++){
        temp = str[j];
        str[j] = str[length-j-1];       
        str[length-j-1] = temp;
    }
}


//字符串转换成数字
int char_to_num(char* str){
    int i=0, temp = 0;
    while(str[i]){
      temp = temp*10

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇OpenCV灰度图像直方图算法实现 下一篇Python中使用 logging 和 traceba..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目