파일에서 배열로 일련의 단일 단어 줄을로드해야하므로이 작업을 수행했습니다. 이 함수는 문자열 배열에 대한 포인터 인 매개 변수로 char*** arr
을 사용합니다. 나는 메모리를 할당 한 다음이 루프를 사용하여 단어를 배열에로드합니다.C : 모든 배열 항목을 다시 쓰는 char * 배열의 마지막 요소
i=0;
FILE *fp = fopen(filename, "r");
while(fgets(tok, WORD_BUFFER, fp) != NULL){
(*arr)[i] = tok;
printf("Word %d:%s", i, (*dict)[i]);
i++;
}
//arr is a char***, tok is a char[WORD_BUFFER], and WORD_BUFFER is 50
내 문제는 이것이 내가 [I] 항목에 입력하기 위해 노력하고있어 무엇과 배열의 모든 항목을 덮어 것으로 보인다는 것이다.
A
B
C
D
올바르게 인쇄 할 것 같다, 그러나 나는 주요 기능의 배열을 인쇄 할 때 (또는 단지 나중에 그 기능의) : 나는 때문에 이런 식으로 뭔가를 보이는 파일에 대한 위의 루프의 출력이 말
D
D
D
D
나는 내 fgets
의 사용 또는 (*arr)[i] = tok
의 할당 함께 할 수있는 뭔가가하지만 난 잘 모르겠어요 같은데요 : 그것은처럼 인쇄됩니다. 감사합니다.
다음 문장 (* arr) [i] = tok; 배열의 모든 요소는 변수 토큰과 동일한 값을 갖습니다. –
왜 그런가요? 왜 그저 토큰의 가치가 arr [i]를 만들지 않을까요? – Jeb
당신은 단지'= '연산자로 포인터를 할당하고 있습니다. 'tok'는 반복문을 통해 반복되는 모든 파일을 덮어 씁니다. 그래서 모든 것이'tok'를 가리키며 파일에서 마지막으로 읽은 행입니다. 당신이해야합니다 ['strcpy'] (https://linux.die.net/man/3/strcpy) 다른 대상에 tok''의 데이터를 저장하려는 경우 루프를 통해 때마다. – yano