【发布时间】:2025-12-30 21:50:06
【问题描述】:
您好,我想将最后一个元素添加到包含数组的结构向量中。我试图将它添加到它的循环下,但是常量字符有问题。它说“从‘const char*’到char的无效转换”[-fpermissive]
我的这个文件名为myfile.txt.log
id value
1 ABC
2 BDV
3 COO
4 DDC
5 EEE
6 FGE
7 GTW
8 HFE
9 IOO
10 KPP
期望的输出:
vector size: 11
vector content: ABC
vector content: BDV
vector content: COO
vector content: DDC
vector content: EEE
vector content: FGE
vector content: GTW
vector content: HFE
vector content: IOO
vector content: KPP
vector content: XXX
这是我的代码。任何输入都会很棒!我在 C++ 98 上
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
struct V {
char a[10];
};
int main() {
FILE * pFile;
char mystring [100];
int i;
char str[3];
char strCp[3];
vector<V> input;
pFile = fopen ("/uploads/myfile.txt.log" , "r");
if (pFile == NULL) perror ("Error opening file");
else {
while ( fgets (mystring , 100 , pFile) != NULL )
{
sscanf(mystring, "%d %s", &i, str);
strncpy(strCp, str, 3);
//puts(strCp);
V v;
int size = sizeof(strCp)/sizeof(strCp[0]);
for ( unsigned int a = 0; a < size; a++ )
{
v.a[a] = strCp[a];
v.a[a-1] = "XXX";
}
// Set vector
input.push_back(v);
}
//Vector Output
cout << "vector size: " << input.size() << endl;
vector<V>::iterator it;
for ( it = input.begin(); it != input.end(); it++ )
{
cout << "vector content: " << it->a << endl;
}
fclose (pFile);
}
return 0;
}
【问题讨论】:
-
您希望向量大小为 12,但您的列表只有 11 项。你能详细说明吗?还是您的意思是包含 11 个项目的向量?
-
请记住,C 字符串是 以空值结尾的。三个字符的字符串需要 四个 字符的空间以包含空终止符。由于您没有该空间,因此您的程序在构建后将具有未定义的行为。您的代码中还存在许多其他问题,包括但不限于您使用的所有 C 功能。即使您使用的是仅支持 C++98 标准的旧编译器,您仍然有 C++ 文件流和用于字符串的
std::string。 -
至于您的问题,我假设您在
v.a[a-1] = "XXX";收到错误?那应该做什么?也许您需要退后一步,投资some good books 并重新开始学习 C++ 的基础知识。 -
是的,我有错误。只是希望简单的 push_back 但它在一个结构中。我只想再添加一个元素作为最后一个元素。
-
@selbie 我已更正为 11 号