连接多个字符

时间:2014-02-25 19:53:30

标签: c++ file char concatenation

我正在读取一个文件,我想提取它的所有内容并将它们存储在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);     
} 

但这一直给我带来了运行时错误。

5 个答案:

答案 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;