为什么元素不保留在数组中?

时间:2019-10-16 17:36:53

标签: c dynamic-memory-allocation

在这段代码中,我正在读取一个由许多行组成的文件。每行有2个字,以\ t分隔。在读取文件时,我正在创建一个动态分配的表,该表由文件中的单词的左列组成。问题是,数组行仅在循环中才是正确的。当我尝试在循环外打印row [i]时,元素消失了。抱歉,如果我讲得不好,我是C语言的新手。!

char line[21];
int i=0;
FILE *infile=fopen("words.txt", "r");
if(infile == NULL){
    printf("The Input File is Null! Please Re-Run the program.");   
        return 1;             
}
int numofrows=11;
char **rows=malloc(sizeof(char*)*numofrows);
//read the file
while(fgets(line, sizeof(line), infile) != NULL) {
    english = strtok(line, search); //this is the word of the left column
    englength=strlen(english);//the length of the word
    for(i=0;i<numofrows;i++){
        rows[i] = malloc(11*sizeof(char));
        strcpy(rows[i], english);
    }
}
        //this doesnt work     
    for(i=0;i<numofrows;i++){    
            printf(rows[i]);
        }

最后一个for循环应该打印数组行中的每个单词,相反,什么都没有打印。

2 个答案:

答案 0 :(得分:2)

您的声明printf(rows[i]);格式错误。尝试printf("%s", rows[i]);

答案 1 :(得分:0)

确保将每一行写到阵列的新插槽中。稍后,在打印数组时,请确保不要读取比以前存储的行更多的行。

这是您的起点,但是还有很多可以改进的地方。

  unsigned i = 0;
  for (i = 0; i<numofrows && fgets(line, sizeof(line), infile) != NULL; ++i) {
    char* english = strtok(line, search); //this is the word of the left column
    unsigned englength=strlen(english);//the length of the word
    rows[i] = malloc((englength+1)*sizeof(char));
    strcpy(rows[i], english);
  }
  for(unsigned j=0;j<i;j++){
    printf("%s\n",rows[j]);
  }