문자열 (getline()으로 읽음)을 c_strings의 배열로 바꾸기 위해 일부 코드를 작성했습니다. 문제는 내가 읽고있는 항목이 배열에 제대로 저장되지 않는다는 것입니다. 원래는 그 사이의 공백 수를 기반으로 입력을 파싱 한 다음 거기에서 계속 진행하지만 동일한 문제가 발생합니다. 그래서 파싱을 나보다 아래로 바꾸었고 똑같은 문제가 발생했습니다. 파싱은 작동하지만 어딘가에 char * 배열로 파싱 된 내용을 읽는 중일 때 뭔가 잘못 될 수 있습니다.문자열을 c_strings의 배열로 구문 분석
내 코드 :
int i = 0;
unsigned inputSize = input.size();
unsigned int prev = 0; //prev as in previous space position
while((prev = input.find(' ', prev)) < inputSize) {
++i; ++prev;
}
char* charArray[i + 2];
memset(charArray, '\0', i + 2);
stringstream ss(input);
string buffer;
for(int a = 0; ss >> buffer; ++a) {
charArray[a] = const_cast<char*>(buffer.c_str());
}
내가 일을하고있어 내 입력 공간의 수를 계산하고, 그 숫자 + 2 (+2 내가 필요로하기 때문에의 숯불 * 배열을 만들고있어 것입니다 NULL로 끝내십시오). 그 후 필자는 입력을 분석하여 배열로 읽어들입니다. 나는 charArray에 할당 된 메모리 밖에서 메모리를 할당하지 않기 때문에 ss >> buffer를 my termination 절로 사용하고 있습니다. buffer.c_str은 const char *를 얻습니다. 그래서 const_cast를 char *의 (비 const) 배열에 저장합니다. memset을 사용하여 모든 요소를 NULL로 설정합니다. 마지막 요소를 제외하고 덮어 쓸 것이라는 것을 알기 때문에 NULL로 남겨두고 싶습니다.
테스트 :
Input: Why hello world
Output: Junk
내 프로그램 안에 뭐가 잘못이야?
어떻게 코드가하고있는 생각 사용을 말해 약간의 의견은 어떻습니까? – John3136
그냥 넣으십시오.하지만 구문 분석이하는 일에 대해 더 자세히 설명하겠습니다. –
문자열 스트림에 입력을 넣을 수없는 정말 좋은 이유가 있습니까? 예를 들어'std :: vector'과 같은 단어를 읽으시겠습니까? –