我对C ++极为陌生,并编写了此程序来反转单词。我尝试的是基本上遍历数组并将第一个字母与最后一个交换,第二个与第二个倒数交换,等等。但是结果是一些有线字符╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Ω ⌠7p≈╗
。我不需要解决方法,因为在线上有很多示例。我只想知道为什么我在做什么不会起作用。
#include <iostream>
using namespace std;
int main()
{
char word[10];
for (int i = 0; i < 10; i++)
{
word[i] = word[sizeof(word - i)];
}
cout << word << endl;
return 0;
}
这也给了我这个警告warning C6001: using uninitialized memory 'word'
。但是我虽然通过做初始化了内存char word[10]
。
问题是sizeof(word - i)
实际上在做什么。
简短的答案:它返回指针大小(4或8)。
更详细的答案:
word
有类型char[10]
和大小10
word + 1
,编译器将衰减指向char的指针的数组以能够执行此操作。所以结果类型是char *
sizeof(char *)
是4或8,具体取决于您构建的平台(32或64位)word[sizeof(word - i)]
总是指同一个单元格还有第二个问题。在中C
,字符串必须以null结尾,以指示其大小。您的word
包含apple
的末尾没有零字符,因此,在其后打印垃圾apple
(它甚至可能使程序崩溃)。
另外,您的代码更像C,在C ++中可以这样完成:
int main()
{
std::string word{"apple"};
std::string reversed{word.rbegin(), word.rend()};
std::cout << word << '\n';
std::cout << reversed<< '\n';
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句