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;
}
该方式省去了内存拷贝,但是修改指针操作是非常危险的,要慎用!