2014-02-25 25 views
0

我正在讀取文件,我想提取它的所有內容並將它們存儲到C++中的單個字符中。我知道它可以用字符串來完成,但是我不能使用字符串,而需要改用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

你在說char數組嗎? – ElGavilan

+0

我剛剛編輯了我的帖子,描述了我試過的東西。 – Morelka

+0

一般而言,文件太大而不適合單個字符。如果在您的平臺上分配給「char」類型的空間可以容納一個文件,那麼給您更多的權力! –

回答

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 buffe r:

ifstream file("c:/path....."); 
char result[100] = { 0 }; 
for (int i = 0; file && (i < 99); ++i)   
{ 
    result[i] = file.get(); 
} 
+0

strcat在這種情況下看起來像是矯枉過正,不是嗎? – Dabo

+0

@Dabo這就是爲什麼我提到不使用它... –

+0

喔,錯過了筆記 – Dabo

0

您可以創建std::string是你的字符,將它們連接起來:

char c1 = 'a'; 
char c2 = 'b'; 
std::string concatted = std::string(1, c1) + std::string(1, c2); 

這工作,因爲填充std::string構造,見the reference

+0

從OP的問題:_'...但是我不能使用字符串...'_ –

+0

@πάνταῥεῖ對我來說實在是有些不清楚這是指。我想它是指*輸入*。在我的例子中,'c1'和'c2'不是字符串。 –

+0

我讀它時,OP不能用'的std :: string's ... –

-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; 
+0

OP說他不能使用字符串......不知道你的答案是否真的回答了這個問題,但是我不確定OP究竟是指什麼。 –

+0

OP的單個char值而不是'char []'數組! –

+0

我猜'字符串'的意思是'std :: string'.Otherwise這個問題是沒有意義的,因爲沒有這樣的機會來存儲文件內容的單個字符,哈哈。 – str14821

1

在您的第一碼塊:僅

const char* content = str.c_str(); 
printf("%c", *content); 

打印字符串的第一個字符,因爲*contents取消引用 指針串(的第一個字符),並且%c是printf-格式爲 單個字符。你應該用

printf("%s", content); 

來打印整個字符串。或者只是使用

std::cout << str; 
+0

好吧,我不知道它取消引用字符串的第一個字符的指針。好,但是我說我不想將它打印出來,而只是將其存儲起來(就像我最好在char變量中說的那樣),我該怎麼做? – Morelka

+0

@Morelka:'char'變量保存單個字符。你是指'char'數組嗎? –

+0

對不起,應該更清楚一點。 – Morelka

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); 
}