gpt4 book ai didi

c++ - 在 c_str()、length() 和 size() 之间发现不一致

转载 作者:行者123 更新时间:2023-11-28 00:02:24 24 4
gpt4 key购买 nike

我正在使用 std::unordered_map 数据结构从文本文件构建 map ,使用对 < uint64_t id, BaseDevice device >。BaseDevice 是一个结构体,包含一个 64 位的 id 和一个字符串:

struct BaseDevice
{
public:
uint64_t id;
string ipAddress;
}

我读了一个文件(假设它写得正确)并按如下方式构建 map :

char buffer[1024];
ifstream fin(myfile.c_str());

while(fin.eof() == false)
{
fin.getline(buffer, 1023);
StringTokenizer st(buffer, " ");

//Parse ID and address
unsigned int id = atoi(st.nextToken().c_str()); //get ID
string ipAddress = st.nextToken(); //get IP address

//Create the local structure and add to the map
BaseDevice dev;
dev.id = id;
dev.ipAddress = ipAddress;
myMap[id] = dev;

break;
}

奇怪的是,当我遍历我的 map 时,ipAddress 字符串似乎是 (null),而 length() 和 size() 都不是。

unordered_map< string, BaseDevice >::const_iterator itr1;
for(itr1 = myMap.begin(); itr1 != myMap.end(); itr1++)
{
const BaseDevice& device = itr1->second;
fprintf(stdout, "id %lu ipAddress %s \n", myMap->first, device.ipAddress);
printf("Length is %d \n", device.ipAddress.length());
printf("Size is %d \n", device.ipAddress.size());

/*
OUTPUT:

id 2 ipAddress (null)
Length is 8
Size is 8
*/
}

我想问你:这怎么可能?难道我做错了什么?谢谢。

最佳答案

你正在打印 device.ipAddress 就好像它是一个 C 字符串(带有 %s 格式说明符),这是不正确的,所以 fprintf 在尝试打印时可能会出错。你应该这样做:

fprintf(stdout, "...%s...", device.ipAddress.c_str());

你也可以用 std::cout 做同样的事情:

std::cout << device.ipAddress << '\n';

关于c++ - 在 c_str()、length() 和 size() 之间发现不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37816835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com