C语言--修改字符串方式

1,数组拷贝

#include<stdio.h>
#include<string.h>
#define MAX 32

enum{
  STR1,
  STR2,
  STR_MAX,
};

static const char *arr[] = {
    "Jack", "Lucy"
};

int change_string(char *old_str, char *new_str) {
    int i = 0;
    // 匹配,修改拷贝字符串
    for(i=0; i<STR_MAX; i++) {
        if(!strncmp(old_str, arr[i] , strlen(old_str)+1)) {
            snprintf(new_str, MAX, "hello %s!", old_str);
            return 0;
        }
    }
    // 不匹配,直接赋值
    memcpy(new_str,old_str, MAX);
    return 0;
}

int main() {

    char *old_str = "Jack";
    char new_str[MAX] = {0};

    change_string(old_str, new_str);
    printf("%s\n", new_str);

    return 0;
}

2,修改指针指向位置

#include<stdio.h>
#include<string.h>
#define MAX 32

struct map {
    char *key;
    char *value;
};

static struct map imap[] = {
    {"Jack","Hello Jack"},
    {"Lucy","Hello Lucy"}
};

int change_string(char *old_str, char **new_str) {
    int i = 0;
    int max = sizeof(imap)/sizeof(imap[0]);
    // 匹配,指向新字符串
    for(i=0; i<max; i++) {
        if(!strncmp(old_str, imap[i].key, strlen(old_str)+1)) {
            *new_str = imap[i].value;
            return 0;
        }
    }
    // 不匹配,直接返回
    return 0;
}

int main() {

    char *old_str = "Jack";
    char *new_str = old_str;

    change_string(old_str, &new_str);
    printf("%s\n", new_str);

    return 0;
}

该方式省去了内存拷贝,但是修改指针操作是非常危险的,要慎用!

猜你喜欢

转载自blog.csdn.net/qq_15437629/article/details/79661508