C程序从字符串数组中提取不同的子字符串

我想从包含字符串数组的文件中提取不同的子字符串。 我的文件类似于此。

abcdxxx efghijkyyy lmzzz ncdslanclsppp kdfmsqqq cbskdnsrrr 

从上面的文件我想提取xxx,yyy,zzz,ppp,qqq,rrr(基本上是最后3个字符)并存储到数组中。 我提到这个链接如何从C中的字符串中提取子字符串? 但感觉不可行,因为我文件中的内容是动态的,可能会因下次执行而改变。 有人可以简要介绍一下吗? 这是我的方法

  FILE* fp1 = fopen("test.txt","r"); if(fp1 == NULL) { printf("Failed to open file\n"); return 1; } char array[100]; while(fscanf(fp1,"%[^\n]",array)!=NULL); for(i=1;i<=6;i++) { array[i] += 4; } 

我文件中的内容是动态的,可能会在下次执行时更改

然后你需要realloc或链表:

 #include  #include  #include  int main(void) { FILE *f; char **arr = NULL; char s[100]; size_t i, n = 0; f = fopen("text.txt", "r"); if (f == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while (fgets(s, sizeof s, f) != NULL) { arr = realloc(arr, sizeof(*arr) * (n + 1)); arr[n] = calloc(4, 1); memcpy(arr[n++], s + strlen(s) - 4, 3); } fclose(f); for (i = 0; i < n; i++) { printf("%s\n", arr[i]); free(arr[i]); } free(arr); return 0; } 

输出:

 xxx yyy zzz ppp qqq rrr 

如果您总是想要最后3个字符,则可以简化:

 #include  #include  #include  int main(void) { FILE *f; char (*arr)[4] = NULL; char s[100]; size_t i, n = 0; f = fopen("text.txt", "r"); if (f == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while (fgets(s, sizeof s, f) != NULL) { arr = realloc(arr, sizeof(*arr) * (n + 1)); memcpy(arr[n], s + strlen(s) - 4, 3); arr[n++][3] = '\0'; } fclose(f); for (i = 0; i < n; i++) { printf("%s\n", arr[i]); } free(arr); return 0; }