C語言:字符串拷貝(截取)、查找

C語言:字符串拷貝(截取)、查找

很慚愧,學了這麼久別的語言,一直沒有好好學C和C++,因此如今開始認真C/C++的一些特性和比較,這裏記錄下C語言拷貝和截取的一些方式,因爲系統庫帶的函數不方便,因此本身寫了幾個工具小函數來使用。git

字符串拷貝

咱們也能夠使用 strncpy 函數或者 memcpy 方式來複制。github

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N (10)
int main()
{
    char* p1 = "abcde";
    char* p2 = (char*)malloc(sizeof(char) * N);
    char* p3 = (char*)memcpy(p2, p1, N);
    printf("p2 = %s\np3 = %s\n", p2, p3);
    free(p2);
    p2 = NULL;
    p3 = NULL;
    system("pause");
    return 0;
}

運行結果:
p2 = abcde
p3 = abcde函數

代碼說明:
1) 代碼首先定義p1,p2,p3三個指針,但略有不一樣,p1指向一個字符串字面值,給p2分配了10個字節的內存空間。工具

2) 指針p3經過函數memcpy直接指向了指針p2所指向的內存,也就是說指針p二、p3指向了同一塊內存。而後打印p2,p3指向的內存值,結果是相同的。指針

3) 最後按照好的習慣釋放p2,並把p3也置爲NULL是爲了防止再次訪問p3指向的內存,致使野指針的發生。code

咱們也能夠本身寫一個簡單的字符串拷貝函數來進行拷貝。blog

/* 
    因爲 C 語言的字符串拷貝函數不是很好用,本身能夠寫一個簡單的拷貝函數
    dst 爲目標地址 src 爲源字符串地址 n 爲複製的長度
 */
char *copy(char *dst, char *src, int n) {
    char *p = src;
    char *q = dst;
    int len = strlen(src);
    if(n > len) n = len;
    while (n--)
    {
        *(q++) = *(p++);
    }
    *(q++)='\0';    // 在末尾添加上
    return dst;
}

字符串查找

咱們能夠使用 string.h 中的系統函數來進行子字符串的查找。內存

/* 
        字符串查找能夠使用 strstr 函數
     */
    char a[100] = "abcdefgh";
    char b[100] = "cd";
    char *p = strstr(a, b);
    printf("b is at a: %d\n", p-a+1);

歡迎訪問個人博客github!字符串

相關文章
相關標籤/搜索