我想出了以下基本项目来反转C中的字符串:
void reverse(char in[], char out[]) {
int string_length = 0;
for(int i=0; in[i] != '\0'; i++) {
string_length += 1;
}
for(int i=0; i < string_length ; i++) {
out[string_length-i] = in[i];
}
out[string_length+1] = '\0';
}
有没有一种方法可以在一个for
循环中执行此操作,或者是否有必要先使用for
长度来获取字符串长度,然后再进行第二次操作来反转它呢?还有其他方法可以执行reverse
,或者这是基本方法吗?
假设您不能使用函数来获取字符串长度,并且您想保留第二个循环,恐怕这是最短的方法。
不过,只是一个旁注:此代码不是很安全,因为for(int i=0; in[i] != '\0'; i++)
您没有考虑传递给parameter的参数in
不是有效的C字符串的情况,在这种情况下,\0
由in
this指向的数组的所有元素中都没有单个字符串代码最终将在第一次for loop
读取超出in
界限的缓冲区时显示一个缓冲区被过度读取,而在第二次显示for loop
您可以写入的边界之外的缓冲区溢出out
。在这样的函数中,您应该向调用方询问两个数组的长度,in
并在访问它们时out
将其用作最大索引。
正如Rishikesh Raje在评论中指出的那样:您还应该在第二个for循环中将退出条件从i <= string_length
更改i < string_length
为,因为当i == string_length
它将out
被负索引访问时,它将生成另一个缓冲区超读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句