我正在读取一个文件,我想提取它的所有内容并将它们存储在C ++中的一个char中。我知道它可以用字符串来完成但是我不能使用字符串而需要求助于char。我可以将多个字符连接到一个char变量吗?
这是我到目前为止所尝试的内容:
string str = "";
ifstream file("c:/path.....");
while (file.good())
{
str += file.get();
}
const char* content = str.c_str();
printf("%c", *content);
但这只是给了我文件的第一个字母,就是这样。
如果还尝试过:
ifstream file("c:/path.....");
char c = ' ';
char result[100];
while (file.good())
{
c= file.get();
strcat(result,c);
}
但这一直给我带来了运行时错误。
答案 0 :(得分:1)
在您的第一个代码块中:
const char* content = str.c_str();
printf("%c", *content);
只打印字符串的第一个字符,因为*contents
取消引用
指向字符串(的第一个字符)的指针,%c
是printf格式
单个字符。您应该通过
printf("%s", content);
打印整个字符串。或者只是使用
std::cout << str;
答案 1 :(得分:1)
也许是这样的:
char result[100];
int i = 0;
while (file.good())
{
c= file.get();
if(i<100)
result[i++]=c;
}
result[i]='\0';
在这个解决方案中有很多要改进的地方(如果文件中有超过99个字符,你会怎么做,file.good()不是循环条件的最佳选择,等等......)。使用字符串也好得多。我不知道为什么你不能使用它们,但为了防止你改变主意,你可以像这样阅读你的文件:
std::string line;
while ( getline(stream, line)) {
process(line);
}
答案 2 :(得分:1)
对于您提出的第二次尝试(我从其他提示中猜测,这是您最终想要的),您可以尝试以下 快速修复 :
ifstream file("c:/path.....");
char c[2] = { 0, 0 };
char result[100] = { 0 };
for (int i = 0; file && (i < 99); ++i)
{
c[0] = file.get();
strcat(result,c);
}
由于使用strcat()
对于此用例可能效率不高,我认为更好的实现会直接写入result
缓冲区:
ifstream file("c:/path.....");
char result[100] = { 0 };
for (int i = 0; file && (i < 99); ++i)
{
result[i] = file.get();
}
答案 3 :(得分:0)
您可以创建std::string
个角色并将其连接起来:
char c1 = 'a';
char c2 = 'b';
std::string concatted = std::string(1, c1) + std::string(1, c2);
这是因为填充std::string
构造函数,请参阅the reference。
答案 4 :(得分:-2)
显然,你是c ++的新手,或者至少你使用了一些奇怪的术语。
首先,我建议你为初学者阅读一些c ++文献(你可以在stackoverflow上找到它的列表)。然后,您将了解c ++中字符串的所有概念。
其次,使用此代码读取文件内容并将其存储在char *。
中FILE *f = fopen("path to file", "r");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
char *content = new char[fsize + 1];
fread(content, fsize, 1, f);
fclose(f);
content[fsize] = 0;
cout << "{" << content <<"}";
delete content;