使用指针表示法反转cstring时出现意外结果
Unexpected result when reversing cstring with pointer notation
我将两个c-string(一个包含字符,另一个为空)传递给一个函数,该函数应该接受包含字符的c-string,并使用从后面读取的字符串填充空c-string。操作简单,但行不通。我就是不知道我做错了什么。
#include <iostream>
#include <cstring>
using namespace std;
void magic(char*, const char*, int);
int main()
{
char string1[20];
char string2[] = "This is a test";
char *str1 = string1;
char *str2 = string2;
int stringsize = strlen(string2);
magic(str1, str2, stringsize);
return 0;
}
void magic(char* string1, const char* string2, int stringsize)
{
cout << string2 << endl; //here it prints as expected
*(string1 + stringsize) = ' ';
string1 = string1 + stringsize - 1;
for(;*string2 != ' ' ;string1--, string2++)
{
*string1 = *string2;
}
cout << string1 << endl; //blank space is printed - expected "This is a test" reversed
cout << string2 << endl; //blank space is printed - expected "This is a test"
}
如果您使用一个非常简单的字符串遵循for
循环中的步骤,您可以看到逻辑中的问题。比方说,
string1 = "This";
在循环的第一次迭代中,
string1 = "This";
string2 = "T";
在循环的第二次迭代中,
string1 = "his";
string2 = "hT";
在第三次循环中,
string1 = "is";
string2 = "ihT";
在循环的第四次迭代中,
string1 = "s";
string2 = "sihT";
在循环的第五次迭代中,
string1 = "";
string2 = "?sihT"; // You go past the start of the array.
因此,在for
循环结束后,您需要增加string2
以确保它指向数组的开始。
void magic(char* string1, const char* string2, int stringsize)
{
cout << string2 << endl;
*(string1 + stringsize) = ' ';
string1 = string1 + stringsize-1;
for(;*string2 != ' ' ;string1--, string2++)
{
*string1 = *string2;
}
// Add this.
string1++;
cout << string1 << endl; // This is now the reversed string.
cout << string2 << endl; // This is now the empty string since
// you kept incrementing it in the for
// loop until you reached the end of the
// string.
}
相关文章:
- 尝试将字符串/字符转换为整数会产生意外结果
- RapidXML - 代码创建意外结果
- 类中静态函数C++意外结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++:比较运算符>和字符串文本的意外结果
- 具有意外结果的 C++ 闭包
- yaml-cpp 比较的意外结果
- 每次都出现意外结果
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 如何避免 std::abs 的意外结果?
- 使用嵌套 if 语句的意外结果
- A ^= B ^= A ^= B;C# Visual Studio 中的意外结果
- 逻辑错误,我将获得意外结果
- 在 c++ 中使用异步的意外结果
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- 执行递增和递减时"cout"链接会产生意外结果
- OpenCL - 内核方法返回意外结果
- C++使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串会得到意外结果