char *s1 和 char s2[] 的区别

char *s1 = "hello";
char s2[] = "hello";

内存模型:


       +-----+     +---+---+---+---+---+---+
   s1: |  *======> | h | e | l | l | o |\0 |
       +-----+     +---+---+---+---+---+---+
       +---+---+---+---+---+---+
   s2: | h | e | l | l | o |\0 |
       +---+---+---+---+---+---+
  • char *s1 的s1是一个指针,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
  • char s2[] 的s2 是数组对应着一块内存区域,其地址和容量在生命期里不会改变,只有数组的内容可以改变
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
函数名为 ReplaceString,它接受三个参数:一个指向字符串的指针 str,一个指向字符串的指针 s1,一个指向字符串的指针 s2。函数的返回值是一个指向字符的指针,它指向一个新的字符串,该字符串是在 str 中将所有出现的 s1 字符串替换为 s2 字符串后得到的结果。 以下是一个示例实现: ``` char *ReplaceString(char * str, char * s1, char * s2) { int s1_len = strlen(s1); int s2_len = strlen(s2); int str_len = strlen(str); int count = 0; // 统计字符串中 s1 的出现次数 char *ptr = str; while ((ptr = strstr(ptr, s1)) != NULL) { count++; ptr += s1_len; } // 分配内存来存储新的字符串 int new_str_len = str_len + count * (s2_len - s1_len) + 1; char *new_str = (char *)malloc(new_str_len * sizeof(char)); // 复制原始字符串到新的字符串,并替换 s1 ptr = str; char *new_ptr = new_str; while (*ptr) { if (strstr(ptr, s1) == ptr) { strcpy(new_ptr, s2); new_ptr += s2_len; ptr += s1_len; } else { *new_ptr++ = *ptr++; } } *new_ptr = '\0'; return new_str; } ``` 在上述代码中,我们首先计算了 s1s2 和 str 的长度,以及 s1 在 str 中出现的次数。接着,我们根据新字符串的长度分配了足够的内存,并将原始字符串复制到新字符串中,并替换 s1 字符串。最后,我们返回了新字符串的指针。 需要注意的是,由于新字符串是在函数内部动态分配的,因此在使用完毕后需要手动释放内存,以避免内存泄漏。例如: ``` char *new_str = ReplaceString(str, s1, s2); // 使用 new_str free(new_str); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值