gpt4 book ai didi

c++ - 将字符串放入 vector 中会得到空字符串

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:30 24 4
gpt4 key购买 nike

这是我的部分代码:

#include <stdio.h>
#include<string>
#include<string.h>
#include<algorithm>
#include <vector>
#include <iostream>
using namespace std;

int main(){
FILE *in=fopen("C.in","r");
//freopen("C.out","w",stdout);
int maxl=0;
int i;
string word;
vector<string> words;
while(!feof(in)){
fscanf(in,"%s ",word.c_str());
int t=strlen(word.c_str());
if(t>maxl){
maxl=t;
words.clear();
words.insert(words.end(),word);
}else if (t==maxl){
words.insert(words.end(),word);
}
}

问题发生在

words.insert(words.end,word)

同时

word

包含我文件中的单词, vector 项

words[i]

包含一个空字符串。

这怎么可能?

最佳答案

fscanf(in,"%s ",word.c_str());

那永远行不通。 c_str() 是一个指向字符串当前内容的const 指针,您不得对其进行修改。即使你确实颠覆了 const(使用强制转换,或者在这种情况下,使用讨厌的 C 风格可变参数函数),超出该内存末尾的写入也不会改变字符串的长度 - 它只会给出未定义的行为。

为什么不使用 C++ 风格的 I/O,读入 string 以便它自动增长到正确的大小?

std::ifstream in(filename);
std::string word;
while (in >> word) {
if (word.size() > maxl) {
maxl = word.size();
words.clear();
words.push_back(word);
} else if (word.size() == maxl) {
words.push_back(word);
}
}

关于c++ - 将字符串放入 vector 中会得到空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684287/

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