2014-02-25 2 views
0

파일을 읽는 중 모든 내용을 추출하여 C++의 단일 문자로 저장하고 싶습니다. 나는 문자열로 할 수 있다는 것을 알고 있지만 문자열을 사용할 수없고 대신 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

문자 배열에 대해 이야기하고 있습니까? – ElGavilan

+0

방금 ​​시도한 것을 설명하는 게시물을 편집했습니다. – Morelka

+0

일반적으로 파일이 너무 커서 단일 문자에 맞지 않습니다. 플랫폼상의'char' 타입에 할당 된 공간이 하나의 파일을 수용 할 수 있다면, 당신에게 더 많은 힘을줍니다! 영업 이익의 질문에서 –

답변

1

strcat()를 사용하여이 사용 사례에 대한 매우 효율적하지 않을 수 있기 때문에

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

, 내가 더 좋은 생각 : 다른 힌트에서, 당신은빠른 수정으로 다음을 시도 할 수 있습니다) 당신이 마지막으로 원하는 것입니다 구현은 직접 result buff에 쓸 것입니다. 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

@ 다보 그 이유는 그것을 사용하지 않기로 언급 ... –

+0

오, 그 노트를 놓친 – Dabo

0

당신은 당신의 캐릭터의 std::string의를 생성하고이를 연결할 수 있습니다 :

이 때문에 채우기 std::string 생성자의 작동
char c1 = 'a'; 
char c2 = 'b'; 
std::string concatted = std::string(1, c1) + std::string(1, c2); 

, the reference를 참조하십시오.

+0

: 그러나 나는이 언급되는 것을 다소 불분명 나에게 πάνταῥεῖ @ ...'_ –

+0

을 문자열을 사용할 수 없습니다 _'.... 나는 그것이 입력 *을 말하는 것이라고 생각합니다. 예제에서'c1'과'c2'는 문자열이 아닙니다. –

+0

는 나는 영업 이익은 πάνταῥεῖ I @ ... –

-2

은 물론, 당신은 C++ 또는 적어도 당신이 이상한 용어를 사용하고 새로운 있습니다. 모든

첫째, (당신이 유래에 그것의 목록을 찾을 수 있습니다) 초보자를위한 몇 가지 C++ 문학을 읽어보실 것을 조언. 그렇다면 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

나는 '문자열'을 의미 추측 표준 : 하나의 문자에 파일 내용을 저장할 수있는 그런 기회가 없기 때문에 string'.Otherwise 문제는, 롤 의미가 없다. – str14821

1
첫 번째 코드 블록에서

: *contents는 문자열 (의 첫 번째 문자)로 포인터를 역 참조하기 때문에 문자열의

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

인쇄 첫 번째 문자와 %c는 printf-입니다 형식 : 한 문자. 전체 문자열을 인쇄하려면

printf("%s", content); 

으로 바꾸어야합니다. 또는 사용

std::cout << str; 
+0

OK 문자열의 첫 번째 문자에 대한 포인터를 역 참조한다는 것을 알지 못했습니다. 좋아,하지만 그냥 인쇄하지 말아라. (내가 선호하는 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); 
} 
관련 문제