首页 > 解决方案 > 我的反向字符串函数有问题

问题描述

所以当我反转“你好”时它似乎有效,但它在中间打印出一些奇怪的东西,比如“ol▒eh”。我修的时候就没了

i< length/2;

i<= length/2;

第一个不应该是正确的吗?C中的▒字符是什么意思?是像 Null 的东西吗?

void reverse_copy(char dest[], const char src[]){
  size_t i;
  char temp;
  size_t length = (size_t)strlen(src);
  for(i = 0; i <= length/2; i++){ /*?? why i<length/2 is not working*/
    dest[i] = src[length-i-1];
    temp = src[i];
    dest[length-i-1] = temp;
  }
}

标签: c

解决方案


的主要问题i< length/2;是,如果字符串长度为src. 因此,in 中的中间元素dest可能保持未初始化,然后显示为一些“任意”ASCII 值。

但总的来说,您的代码适用于reverse_in_place,您必须注意不要覆盖循环中稍后需要复制的内容。

但是,如果您执行 reverse_copy,则只需有一个反向循环就足够了 - 或者更好:

void reverse_copy(char dest[], const char src[]){
  size_t i;
  size_t length = strlen(src);
  for(i = 0; i < length; i++){
    dest[i] = src[length-i-1];
  }
  dest[i] = '\0';
}

推荐阅读