c - 我的反向字符串函数有问题
问题描述
所以当我反转“你好”时它似乎有效,但它在中间打印出一些奇怪的东西,比如“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;
}
}
解决方案
的主要问题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';
}
推荐阅读
- c# - 传递参数给委托
- python - 将 Rust lib .so 导入 Python 时未定义的符号 LAPACKE
- javascript - Openlayers 将属性设置为 KML 矢量图层标记?
- java - Java:在多维 Arrylist 中访问对象的元素
- python - 将大的 .json 文件转换为表格
- react-admin - 在 ArrayInput/SimpleFormIterator 内使用 ReferenceField
- typescript - 打字稿条件类型和类 - 奇怪的行为
- html - 标签 display flex 给出了奇怪的输出
- c# - 通过 C# 脚本添加操作组件仅适用于 Unity
- python - 如何按多列分组并通过从Python中的行总数除以每个单元格的百分比?