zeerd: char * strreplace(const char * src, char * dst, size_t dst_size, const char * search, const char * replace_with) { char * replace_buf = (char *)malloc(dst_size); if (replace_buf) { memset(replace_buf, 0, dst_size); replace_buf[0] = 0; char *q = NULL, *p = NULL; if(src == dst){ q = strdup(src); p = q; } else { p = (char*)src; } char * pos = NULL; while ( (pos = strstr(p, search)) != NULL ) { size_t n = (size_t)(pos-p); strncat(replace_buf, p, n > dst_size ? dst_size : n); strncat(replace_buf, replace_with, dst_size-strlen(replace_buf)-1); p = pos + strlen(search); } snprintf(dst, dst_size, "%s%s", replace_buf, p); free(replace_buf); if(q != NULL) { free(q); } } return dst; } 这个函数在src和dst相同时会出错。来个修改之后的版本。