gpt4 book ai didi

c++ - c_str() ing 字符串 - 除了第一行之外的所有其他行都将丢失

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:46 28 4
gpt4 key购买 nike

我有一个字符串流,其中包含多行文本。

例如,

f.html                            Sat Oct 19 22:59:47 2013         23675
folder Mon Nov 4 19:36:14 2013 4096
readdirpractice.cpp Tue Nov 5 03:00:10 2013 1203
server.cpp Mon Nov 4 21:22:27 2013 11369
photo.jpg Wed Oct 23 01:45:04 2013 4360
qq Sun Nov 3 01:54:36 2013 66031
server.cpp~ Mon Nov 4 21:22:25 2013 11368
myhttp.cpp Sun Nov 3 01:43:09 2013 1816
getoptpractice.cpp~ Sun Nov 3 01:15:25 2013 1324

这是字符串流通常的样子。

当我把这个stringstream转成string时,信息是一样的。

但是,当我将其转换为 C 字符串时,它只占用第一行,其他所有行都丢失了。

只有

f.html                            Sat Oct 19 22:59:47 2013         23675

转换后。

这是为什么,我该如何解决?

我附上了我的部分代码。

if(is_dir) {
char dirname[1024];
strncpy(dirname, requests[1].c_str(), sizeof(dirname));
dirname[sizeof(dirname)-1] = 0;

DIR *d;
struct dirent *dir;
d = opendir(dirname);
stringstream ss;
if (d) {
while ((dir = readdir(d)) != NULL) {
char* file = dir->d_name;
if(file[0] != '.') {
struct stat sb;

if (stat(file, &sb) == -1) {
cerr << "stat error" << endl;
exit(EXIT_FAILURE);
}

char* lm = ctime(&sb.st_mtime);
string lastmod(lm);
lastmod.at(lastmod.size()-1) = '\0';
string spacing = " ";
ss << file << spacing.substr(0, spacing.size() - strlen(file)) << lastmod << spacing.substr(0, spacing.size() - lastmod.size()) << sb.st_size << '\n';
}
}
closedir(d);
}
//cout << ss.str() << endl; // for testing
char msg2[10000];
strncpy(msg2, ss.str().c_str(), sizeof(msg2));
msg2[sizeof(msg2)-1] = 0;
msg = msg2;

最佳答案

std::string 可能嵌入了 '\0' (NUL) 字符,这些字符在解释时过早地终止了 char 序列作为 C 字符串。

尝试使用 std::remove 删除 NUL 字节.

编辑 - 这可能是您的问题:

             lastmod.at(lastmod.size()-1) = '\0';

这是自找麻烦。 std::string 忠实地存储您的 NUL 字节并将其复制到输出中。

关于c++ - c_str() ing 字符串 - 除了第一行之外的所有其他行都将丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19784870/

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