【发布时间】:2018-07-10 14:13:26
【问题描述】:
这虽然是一个代码特定的问题,但输出很奇怪。
我知道 STL 字符串等。当我发现一些奇怪的东西时,我在胡闹,找不到原因。 :(
请参阅下面的两个代码和输出。
[代码 #1] (https://ideone.com/ydB8sQ)
#include <iostream>
#include <vector>
#include <cstdlib>
#include <cstdio>
using namespace std;
class str
{
private:
vector<char> A;
public:
str(const char *S) {
int sz = sizeof(S);
cerr << sz << endl;
for (int i = 0; i < sz; ++i) {
cout << S[i];
//A.push_back(S[i]); //!-- Comment --!//
}
}
};
int main(int argc, char const *argv[])
{
str A("");
return 0;
}
在此,一个空字符串被传递并被打印。向量 A 什么都不做,但与这个问题有关。在第一个版本中,A 未触及,代码打印垃圾值。 (见ideone O/P)
在第二个版本中(请参阅 A.push_back 现已取消注释)
[代码 #2] (https://ideone.com/PPHGZy)
#include <iostream>
#include <vector>
#include <cstdlib>
#include <cstdio>
using namespace std;
class str
{
private:
vector<char> A;
public:
str(const char *S) {
int sz = sizeof(S);
cerr << sz << endl;
for (int i = 0; i < sz; ++i) {
cout << S[i];
A.push_back(S[i]);
}
}
};
int main(int argc, char const *argv[])
{
str A("G");
return 0;
}
输出是:
Gvector
这是跨 GCC / MinGW x64。这个从不打印垃圾值,但总是包含单词“vector”。
- 函数中的char*指向哪里?
- 为什么会有“向量”呢?
- 另外,char * 的大小为 8。
编辑:如果它没有包裹在“类”周围,则不会发生这种情况。
“向量”这个词总是出现。我以为它是随机垃圾值,但为什么 ideone 的记忆中仍然有相同的词?
【问题讨论】:
-
你认为
int sz = sizeof(S);在做什么?提示:它没有给你字符串的长度。 -
sizeof(S)告诉您指针S占用了多少内存。它与字符串中的字符数无关。请改用strlen(S)。 -
是字符 *。我没有使用字符串
-
字符 * 通常是指向以空字符结尾的字符串中的第一个字符的指针,在这种情况下就是如此。
标签: c++ pointers gcc mingw mingw-w64