【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
生活随笔
收集整理的這篇文章主要介紹了
【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、引入線程安全概念
- 二、完整代碼示例
一、引入線程安全概念
在上一篇博客 【C 語言】字符串模型 ( 字符串翻轉模型 | 借助 遞歸函數操作 逆序字符串操作 | strncat 函數 ) 中 , 雖然 使用遞歸 實現了 字符串逆序 , 但是最終字符串是寫在全局變量中的 , 如果多個線程訪問該方法 , 肯定就出錯了 ;
在函數調用時 , 傳入一個局部變量 char *str_buf , 使用該局部變量存儲 逆序后的字符串 ;
/** 通過遞歸方式 , 逆向遍歷字符串* 將 遞歸遍歷 結果存入 全局變量中* 遞歸指針 作 函數參數*/ void str_inverse(char *str, char *str_buf)二、完整代碼示例
完整代碼示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h>/** 通過遞歸方式 , 逆向遍歷字符串* 將 遞歸遍歷 結果存入 全局變量中* 遞歸指針 作 函數參數*/ void str_inverse(char *str, char *str_buf) {// 驗證函數形參指針合法性if(str == NULL || str_buf == NULL){return;}// 遞歸停止條件if(*str == '\0'){return;}// 遞歸操作// 該遞歸操作會逐步 將 字符串 從開始位置 入棧// 直到遞歸到 '\0' 位置時 , 才開始出棧// 此處是遞歸點// 遞歸操作執行到這里 , 開始一直遞歸// 遞歸結束后 , 依次執行下面的代碼str_inverse(str + 1, str_buf);// 打印出棧的字符// 注意 : 該打印操作是 遞歸停止條件達成后// 逐個出棧打印printf("*str = %c\n", *str);// 拷貝一個字符到全局變量中//strncpy(str_buf, str, 1);// 連接字符串 , 從 '\0' 位置處開始覆蓋strncat(str_buf, str, 1); }int main() {// 存在如下字符串, 求下面字符串 "abc" 出現次數char *str = "sdh";// 用于存儲逆序后的字符串char str_buf[1024] = {0};// 字符串翻轉str_inverse(str, str_buf);// 打印字符串翻轉結果printf("str_buf = %s\n", str_buf);// 命令行不要退出system("pause");return 0; }執行結果 :
*str = h *str = d *str = s str_buf = hds 請按任意鍵繼續. . .總結
以上是生活随笔為你收集整理的【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】字符串模型 ( 字符串翻转模
- 下一篇: 【C 语言】字符串模型 ( 键值对模型