这是我的反转字符串的功能:
void reverse(char *str){
int lengthStr = strlen(str);
int j, i;
char reversedString[100];
for (j = 0, i = lengthStr-1; i >= 0; i--, j++){
reversedString[j] = str[i];
}
cout << reversedString;
}
字符串确实显示为反转,但最后会出现一堆奇怪的字符。可能导致这个问题的原因是什么?
答案 0 :(得分:2)
如果您想要反转字符串,可以使用许多更清晰的方法,如:std::reverse_copy
等。
但是如果你想修复这个功能,那就试试这个:
char reversedString[100];
memset(reversedString, 0, 100*sizeof(char);
或强>
for (j = 0, i = lengthStr-1; i >= 0; i--, j++){
reversedString[j] = str[i];
}
reversedString[j] = '\0'; //! Add null character at the end to indicate end of the string
cout << reversedString;
注意:如果输入字符串包含length >= 100
,您的程序将失败。
答案 1 :(得分:1)
为您分配给reversedString
的字符添加零。否则,新字符串的未初始化的额外部分将显示为垃圾。零用于标记字符串的结尾。
答案 2 :(得分:1)
首先,该功能无效,没有任何意义。您不反转原始字符串,并且函数中定义的本地字符串可能小于原始字符串。此外,您不会使用终止零附加反转的本地字符串。该功能可以看起来像
void reverse( char *str )
{
size_t n = std::strlen( str );
for ( size_t i = 0; i < n / 2; i++ )
{
char c = str[i];
str[i] = str[n - i - 1];
str[n - i - 1] = c;
}
}
原始的反向字符串可以显示在调用该函数的代码中。