텍스트 문서의 내용을 단어 단위로 읽은 다음 문자열 배열로 복사하려고합니다. 먼저 'x'단어를 읽는 동안 fscanf를 사용하여 파일을 엽니 다. 이 x는 최대 워드 길이를 50으로 가정 할 때 배열에 할당됩니다. 내부에는 x와 배열 값이 모두 인쇄됩니다. 둘 다 올바른 값을 인쇄합니다. 하지만 나중에 모든 일이 잘못되면서 배열의 내용을 인쇄하면됩니다. 모든 배열 단어는 같은 값을가집니다. 파일에서 마지막으로 읽은 값입니다. 먼저 연결된 목록으로 시도했지만 동일한 결과가 나타납니다. 그러나 이것도 같은 결과를줍니다. 논리 블록 외부에서는 모든 배열 값 또는 노드 값에 마지막으로 읽은 단어가 있습니다. ...이 함께Word가 C에서 문자열 배열로 문서에서 읽음
int i=0,wCnt=0,j;
int N=600;
char **word_array = (char **) calloc(N,sizeof(char*));
if(f = fopen("input.txt","r"))
{
/* assumes no word exceeds length of 150 */
while (fscanf(f, " %149s", x) == 1)
{
if(wCnt==N){
N = N+400;
realloc(word_array,N);
}
//printf("x=%s\t",x);
word_array[i] = (char *) calloc(50,sizeof(char));
word_array[i] = x;
printf("x=%s arr=%s\t",x,word_array[i]); // Gives correct output
wCnt++;
i++;
}
// Here the code goes goes wrong. The last word gets print 137 times(wCnt)
for(j=0;j<wCnt;j++)
{
printf("%d->%s\n",j,word_array[j]);
}
}
를 도와주세요 내가 무엇입니까 출력은 다음과 같습니다
0->growing
1->growing
2->growing
3->growing
..
'성장'문서의 마지막 단어입니다. 그러나 루프 내에서 'X'의 값을 출력 할 때 정확한 출력 결과를 얻었습니다.
x = 최근 x = 연도 x = 거기 x = x = x = ax = 성장했습니다
['realloc (word_array, N)'] (http://en.cppreference.com/w/c/memory/realloc) 음. 이 호출은 당신이 관심을 가질만한 것을 반환합니다. – WhozCraig
'word_array [i] = x;'는 ** 포인터 **를 복사합니다. 내용을 복사해야 할 수도 있습니다 (아마도 공간을 할당하고'strcpy()'를 사용해야 할 것입니다). – pmg
@pmg 나는 'realloc'이라는 블라인드 호출에서 여전히 릴링을하고 있었는데, 나는 계속되는 메모리 누수와 부적절한 할당을 알지 못했다. – WhozCraig