내 질문은 : 어떻게 내가 C에서 파일에서 한 줄의 문자열로 여러 줄에있는 문자열을 읽을 수 있습니까? 바이너리 맵을 만들려고하는데 제 1d 배열은 2 차원 배열로 표현됩니다. 그래서 내 "level_1.txt"에 있습니다파일에서 문자열을 읽고 그것을 배열로 어떻게 tokenize합니까?
//start of file
WIDTH: 4
HEIGHT: 5
11,12,13,14,
21,22,23,24,
31,32,33,34,
41,42,43,44,
51,52,53,54,
// eof
와 나는 문자열 "11,12,13,14,21,22 ..."
을 좀하고 싶습니다 그리고 이것은이다 내 코드 :
int ImportMapDataFromFile(char *fileName, Map *self)
{
FILE *pFile;
char* myStr;
pFile = fopen(fileName, "r");
// Check if the file exists:
if(pFile)
{
// scanf width and height
//fscanf(pFile, "%*s %i %*s %i", &self->width, &self->height);
/*
// this doesnt work
fscanf(pFile, "%*s %i %*s %i %s", &self->width, &self->height, &myStr);
*/
//printf("%i %i", self->width, self->height);
// initialise the array
(self->theScreenMap) = (Grid*)malloc(sizeof(Grid) * self->width * self->height);
// scan the whole remaining file
/*
I dont know how to do this. I tried using fscanf and had a look at fgets
but i cant seem to make it work sorry.
*/
// tokenise it
/*
Pretty sure i have to use strtok right?
http://www.cplusplus.com/reference/cstring/strtok/
*/
// close it
fclose(pFile);
printf("%s \n", &myStr);
return TRUE;
}
else
{
fclose(pFile);
return FALSE;
}
}
내가 뭘 파일을 읽어 수행 1 2 개 라인에서 크기를 얻고 1D 배열을 생성하기 위해이 값을 사용하고 싶습니다. 그런 다음 한 번 완료되면 나머지 문자열을 읽고 배열에 할당하려고합니다. 예 :
theScreenMap[0] = 11; // first element has 1st token
theScreenMap[1] = 12;
theScreenMap[size - 1] = 54; // last element has last token
나를 도와 주신 분들께 감사드립니다. 하지만 누구나 파일을 읽고 (바이너리 맵을 만들기 위해 어레이를 초기화하는) 더 나은 방법이 있다면, 그렇게 말해줘. 감사! :)
. 어쨌든 ... 안녕 비나 야카! 도와 주셔서 감사합니다. 그것은 치료를 작동합니다 : D – mh4
하지만 @BinayaChakraborty 비록 질문이 있습니다. 왜 strdup을 사용합니까? 그와 strcpy의 차이점은 무엇입니까? 나는 abt를 연구함으로써 이해하려고 노력했다. 그러나 그것이 정말로 "왜"(그것이 의미가 있는지)를 정말로 이해할 수는 없다. // 나머지 부분보다 나에게 더 의미가있는 부분입니다. [link] (http://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c) [link] (http://stackoverflow.com/questions/4079850/why- do-we-need-strdup) "s"(인수)를 가리키는 "문자열"의 복제본 인 새로운 "문자열"에 대한 char 포인터를 반환한다는 것을 이해하지만 왜 그런가? – mh4
@ mh4 : 범위를 생각해보십시오. 나중에 문자열 포인터를 사용하려면 유효한 반환 주소를 사용해야합니다. 그렇지 않으면, SEGFAULT –