1

我正在编写一个 C 代码来逐行读取包含字母、CR、LF、'\0' 的文件。下面是我附加的代码示例。我只想将每行中的字母存储到一个数组中,这样数组中的行数等于文件中的行数,并且列的长度应该是不同的(取决于第 i 行中的字符数)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *buffer[100];
    char temp[128];
    int c,i=0,j=0;
    int pos=0;
    FILE *file;
    file = fopen("input", "r");
    if (file) {
        while ((c = getc(file)) != EOF){
            if ((c>=65 && c<=90) || (c>=97 && c<=122))
                temp[pos++]=c;
            else if(pos>1) {
                temp[pos]='\0';
                buffer[i]=temp;
                printf ("%s\n",temp);
                i++;
                pos=0;
            }
        }
    }
    fclose(file);
    while (j<i){
        printf("%s\n",buffer[j]);
        j++;
    }
}

如果我运行上面的代码,我的所有缓冲区 [j] 都包含相同的字符串。任何人都可以帮助我找出代码中的问题。

4

1 回答 1

2

buffer[]是一个指针数组,在您的while循环中,您将每个指针指向您的数组temp[]

buffer[i]=temp; // assign the address of temp to buffer[i]

然后,您正在更改数组的内容temp[]但地址始终相同。

如果要将数据存储temp到每个位置,buffer[]则需要分配内存并将数据复制到那里。更像:

buffer[i]=malloc(strlen(temp) + 1);
strcpy(buffer[i], temp);
于 2013-04-04T12:52:56.603 回答